<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>24727</bug_id>
          
          <creation_ts>2009-03-20 14:38:25 -0700</creation_ts>
          <short_desc>Need to upstream V8XMLHttpRequest*</short_desc>
          <delta_ts>2009-03-22 00:36:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>114557</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-20 14:38:25 -0700</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114558</commentid>
    <comment_count>1</comment_count>
      <attachid>28801</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-20 14:40:16 -0700</bug_when>
    <thetext>Created attachment 28801
Proposed fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114683</commentid>
    <comment_count>2</comment_count>
      <attachid>28801</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-21 20:34:41 -0700</bug_when>
    <thetext>Comment on attachment 28801
Proposed fix.

Proper design for all these hidden dependency helpers is out of scope for this scrubbing, so LGTM, good to land after these changes:

&gt; +    if (ec) {
&gt; +        V8Proxy::SetDOMException(ec);
&gt; +        return v8::Handle&lt;v8::Value&gt;();
&gt; +    }

I have a helper in V8Proxy.h that might be useful here, throwError

&gt; +    if (ec) {
&gt; +        V8Proxy::SetDOMException(ec);
&gt; +        return v8::Handle&lt;v8::Value&gt;();
&gt; +    }

... and here.

&gt; +    if (args.Length() &lt; 2) {
&gt; +        V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, &quot;Not enough arguments&quot;);
&gt; +        return v8::Undefined();
&gt; +    }

... and here.

&gt; +    if (ec) {
&gt; +        V8Proxy::SetDOMException(ec);
&gt; +        return v8::Handle&lt;v8::Value&gt;();
&gt; +    }

... and here.

&gt; +    INC_STATS(&quot;DOM.XMLHttpRequest.getResponseHeader()&quot;);
&gt; +    if (args.Length() &lt; 1) {
&gt; +        V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, &quot;Not enough arguments&quot;);
&gt; +        return v8::Undefined();
&gt; +    }

Ditto.

&gt; +    if (ec) {
&gt; +        V8Proxy::SetDOMException(ec);
&gt; +        return v8::Handle&lt;v8::Value&gt;();
&gt; +    }
&gt; +    return v8StringOrNull(result);
&gt; +}

Same thing.

&gt; +    if (args.Length() &lt; 1) {
&gt; +        V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, &quot;Not enough arguments&quot;);
&gt; +        return v8::Undefined();
&gt; +    }

Analogously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114697</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-22 00:36:31 -0700</bug_when>
    <thetext>Committed as r41898.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28801</attachid>
            <date>2009-03-20 14:40:16 -0700</date>
            <delta_ts>2009-03-21 20:34:41 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug24727.txt</filename>
            <type>text/plain</type>
            <size>41033</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGFjZGE5OS4uMGQwZGE1ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwxOSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNDcyNworICAgICAgICBBZGQgVjhYTUxIdHRwUmVxdWVzdCouCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOFhNTEh0dHBSZXF1ZXN0VXRpbGl0aWVzLmNwcDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhYTUxIdHRwUmVxdWVzdFV0aWxpdGllcy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNw
cDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRw
UmVxdWVzdFVwbG9hZEN1c3RvbS5jcHA6IEFkZGVkLgorCisyMDA5LTAzLTIwICBEYXZpZCBMZXZp
biAgPGxldmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjQ3MjUKICAgICAgICAgQWRkIFY4Tm9kZUZpbHRlci4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFhNTEh0dHBSZXF1ZXN0VXRpbGl0aWVzLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhYTUxIdHRwUmVxdWVzdFV0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZGZkNWU0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhYTUxIdHRwUmVxdWVzdFV0aWxpdGllcy5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFhNTEh0dHBSZXF1ZXN0VXRpbGl0aWVz
LmgiCisKKyNpbmNsdWRlIDx2OC5oPgorCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisj
aW5jbHVkZSAiVjhQcm94eS5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2UgYW4gYXJyYXkgdG8gaG9sZCBkZXBlbmRlbnRzLiBJ
dCB3b3JrcyBsaWtlIGEgcmVmLWNvdW50ZWQgc2NoZW1lLgorLy8gQSB2YWx1ZSBjYW4gYmUgYWRk
ZWQgbW9yZSB0aGFuIG9uY2UgdG8gdGhlIHhtbEh0dHBSZXF1ZXN0IG9iamVjdC4KK3ZvaWQgY3Jl
YXRlSGlkZGVuWEhSRGVwZW5kZW5jeSh2ODo6TG9jYWw8djg6Ok9iamVjdD4geG1sSHR0cFJlcXVl
c3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIEFTU0VSVChWOFByb3h5OjpH
ZXRET01XcmFwcGVyVHlwZSh4bWxIdHRwUmVxdWVzdCkgPT0gVjhDbGFzc0luZGV4OjpYTUxIVFRQ
UkVRVUVTVCB8fCBWOFByb3h5OjpHZXRET01XcmFwcGVyVHlwZSh4bWxIdHRwUmVxdWVzdCkgPT0g
VjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCk7CisgICAgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gY2FjaGUgPSB4bWxIdHRwUmVxdWVzdC0+R2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6
a1hNTEh0dHBSZXF1ZXN0Q2FjaGVJbmRleCk7CisgICAgaWYgKGNhY2hlLT5Jc051bGwoKSB8fCBj
YWNoZS0+SXNVbmRlZmluZWQoKSkgeworICAgICAgICBjYWNoZSA9IHY4OjpBcnJheTo6TmV3KCk7
CisgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5TZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprWE1M
SHR0cFJlcXVlc3RDYWNoZUluZGV4LCBjYWNoZSk7CisgICAgfQorCisgICAgdjg6OkxvY2FsPHY4
OjpBcnJheT4gY2FjaGVBcnJheSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGNhY2hlKTsK
KyAgICBjYWNoZUFycmF5LT5TZXQodjg6OkludGVnZXI6Ok5ldyhjYWNoZUFycmF5LT5MZW5ndGgo
KSksIHZhbHVlKTsKK30KKwordm9pZCByZW1vdmVIaWRkZW5YSFJEZXBlbmRlbmN5KHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiB4bWxIdHRwUmVxdWVzdCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUp
Cit7CisgICAgQVNTRVJUKFY4UHJveHk6OkdldERPTVdyYXBwZXJUeXBlKHhtbEh0dHBSZXF1ZXN0
KSA9PSBWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUIHx8IFY4UHJveHk6OkdldERPTVdyYXBw
ZXJUeXBlKHhtbEh0dHBSZXF1ZXN0KSA9PSBWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBM
T0FEKTsKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBjYWNoZSA9IHhtbEh0dHBSZXF1ZXN0LT5H
ZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprWE1MSHR0cFJlcXVlc3RDYWNoZUluZGV4KTsKKyAg
ICBBU1NFUlQoY2FjaGUtPklzQXJyYXkoKSk7CisgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gY2Fj
aGVBcnJheSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGNhY2hlKTsKKyAgICBmb3IgKGlu
dCBpID0gY2FjaGVBcnJheS0+TGVuZ3RoKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICB2
ODo6TG9jYWw8djg6OlZhbHVlPiBjYWNoZWQgPSBjYWNoZUFycmF5LT5HZXQodjg6OkludGVnZXI6
Ok5ldyhpKSk7CisgICAgICAgIGlmIChjYWNoZWQtPlN0cmljdEVxdWFscyh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIGNhY2hlQXJyYXktPkRlbGV0ZShpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHdlIHRy
eSB0byByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3YXMgbmV2ZXIgYWRkZWQuCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhYTUxIdHRwUmVxdWVzdFV0aWxpdGllcy5oIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFhNTEh0dHBSZXF1ZXN0VXRpbGl0aWVzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE1NTk3NAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhYTUxIdHRwUmVxdWVzdFV0aWxpdGllcy5oCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFY4WE1MSHR0cFJlcXVlc3RVdGlsaXRpZXNfaAorI2RlZmluZSBW
OFhNTEh0dHBSZXF1ZXN0VXRpbGl0aWVzX2gKKworI2luY2x1ZGUgPHY4Lmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gVXNlIGFuIGFycmF5IHRvIGhvbGQgZGVwZW5kZW50cy4gSXQgd29y
a3MgbGlrZSBhIHJlZi1jb3VudGVkIHNjaGVtZS4KKy8vIEEgdmFsdWUgY2FuIGJlIGFkZGVkIG1v
cmUgdGhhbiBvbmNlIHRvIHRoZSB4bWxIdHRwUmVxdWVzdCBvYmplY3QuCit2b2lkIGNyZWF0ZUhp
ZGRlblhIUkRlcGVuZGVuY3kodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHhtbEh0dHBSZXF1ZXN0LCB2
ODo6TG9jYWw8djg6OlZhbHVlPik7Cit2b2lkIHJlbW92ZUhpZGRlblhIUkRlcGVuZGVuY3kodjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHhtbEh0dHBSZXF1ZXN0LCB2ODo6TG9jYWw8djg6OlZhbHVlPik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4WE1MSHR0cFJlcXVlc3RV
dGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxI
dHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWMzNzk2ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhP
YmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlhN
TEh0dHBSZXF1ZXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19E
RUNMKFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IpCit7CisgICAgSU5DX1NUQVRTKCJET00uWE1M
SHR0cFJlcXVlc3QuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENh
bGwoKSkgeworICAgICAgICBWOFByb3h5OjpUaHJvd0Vycm9yKFY4UHJveHk6OlRZUEVfRVJST1Is
ICJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4i
KTsKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICAvLyBFeHBl
Y3Qgbm8gcGFyYW1ldGVycy4KKyAgICAvLyBBbGxvY2F0ZSBhIFhNTEh0dHBSZXF1ZXN0IG9iamVj
dCBhcyBpdHMgaW50ZXJuYWwgZmllbGQuCisgICAgRG9jdW1lbnQqIGRvYyA9IFY4UHJveHk6OnJl
dHJpZXZlRnJhbWUoKS0+ZG9jdW1lbnQoKTsKKyAgICBSZWZQdHI8WE1MSHR0cFJlcXVlc3Q+IHht
bEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZShkb2MpOworICAgIFY4UHJveHk6
OlNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNz
SW5kZXg6OlhNTEhUVFBSRVFVRVNUKSwgeG1sSHR0cFJlcXVlc3QuZ2V0KCkpOworCisgICAgLy8g
QWRkIG9iamVjdCB0byB0aGUgd3JhcHBlciBtYXAuCisgICAgeG1sSHR0cFJlcXVlc3QtPnJlZigp
OworICAgIFY4UHJveHk6OlNldEpTV3JhcHBlckZvckFjdGl2ZURPTU9iamVjdCh4bWxIdHRwUmVx
dWVzdC5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigp
KSk7CisgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVl
c3RDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5NjI2NAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJl
cXVlc3RDdXN0b20uY3BwCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJW
OEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUg
IlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRl
ICJWOFhNTEh0dHBSZXF1ZXN0VXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
QUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5YTUxIdHRwUmVxdWVzdC5vbmFib3J0Ll9nZXQiKTsKKyAgICBYTUxIdHRwUmVxdWVzdCog
eG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4o
VjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgaWYgKHht
bEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpIHsKKyAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBS
ZXF1ZXN0LT5vbmFib3J0KCkpOworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0
ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICByZXR1cm4gdjhM
aXN0ZW5lcjsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQUNDRVNT
T1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Y
TUxIdHRwUmVxdWVzdC5vbmFib3J0Ll9zZXQiKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0
cFJlcXVlc3QgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFz
c0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgaWYgKHZhbHVlLT5J
c051bGwoKSkgeworICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9uYWJvcnQoKSkgeworICAg
ICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4
T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpOworICAgICAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlz
dGVuZXJPYmplY3QoKTsKKyAgICAgICAgICAgIHJlbW92ZUhpZGRlblhIUkRlcGVuZGVuY3koaW5m
by5Ib2xkZXIoKSwgdjhMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGVhciB0
aGUgbGlzdGVuZXIuCisgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5zZXRPbmFib3J0KDApOworICAg
IH0gZWxzZSB7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1s
SHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAgIGlmICghcHJv
eHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUs
IGZhbHNlKTsKKyAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICB4bWxIdHRwUmVx
dWVzdC0+c2V0T25hYm9ydChsaXN0ZW5lcik7CisgICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJE
ZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
QUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25lcnJvcikKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5YTUxIdHRwUmVxdWVzdC5vbmVycm9yLl9nZXQiKTsKKyAgICBYTUxIdHRwUmVxdWVzdCog
eG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4o
VjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgaWYgKHht
bEh0dHBSZXF1ZXN0LT5vbmVycm9yKCkpIHsKKyAgICAgICAgUmVmUHRyPFY4T2JqZWN0RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4
bWxIdHRwUmVxdWVzdC0+b25lcnJvcigpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgcmV0
dXJuIHY4TGlzdGVuZXI7CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisK
K0FDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uZXJyb3IpCit7CisgICAgSU5DX1NUQVRT
KCJET00uWE1MSHR0cFJlcXVlc3Qub25lcnJvci5fc2V0Iik7CisgICAgWE1MSHR0cFJlcXVlc3Qq
IHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+
KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOworICAgIGlmICh2
YWx1ZS0+SXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmVycm9yKCkp
IHsKKyAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNf
Y2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25lcnJvcigpKTsK
KyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXIt
PmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAgICAgICAgICByZW1vdmVIaWRkZW5YSFJEZXBlbmRl
bmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
Q2xlYXIgdGhlIGxpc3RlbmVyLgorICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2V0T25lcnJvcigw
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJp
ZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICBp
ZiAoIXByb3h5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVy
KHZhbHVlLCBmYWxzZSk7CisgICAgICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICAgICAgeG1s
SHR0cFJlcXVlc3QtPnNldE9uZXJyb3IobGlzdGVuZXIpOworICAgICAgICAgICAgY3JlYXRlSGlk
ZGVuWEhSRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0FDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdE9ubG9hZCkKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbmxvYWQuX2dldCIpOworICAgIFhNTEh0dHBSZXF1
ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1
ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBp
ZiAoeG1sSHR0cFJlcXVlc3QtPm9ubG9hZCgpKSB7CisgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxI
dHRwUmVxdWVzdC0+b25sb2FkKCkpOworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhM
aXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICByZXR1cm4g
djhMaXN0ZW5lcjsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQUND
RVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2FkKQoreworICAgIElOQ19TVEFUUygiRE9N
LlhNTEh0dHBSZXF1ZXN0Lm9ubG9hZC5fc2V0Iik7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0
dHBSZXF1ZXN0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xh
c3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOworICAgIGlmICh2YWx1ZS0+
SXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmxvYWQoKSkgeworICAg
ICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4
T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmxvYWQoKSk7CisgICAgICAg
ICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0
ZW5lck9iamVjdCgpOworICAgICAgICAgICAgcmVtb3ZlSGlkZGVuWEhSRGVwZW5kZW5jeShpbmZv
LkhvbGRlcigpLCB2OExpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHhtbEh0dHBSZXF1
ZXN0LT5zZXRPbmxvYWQoMCk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBWOFByb3h5KiBwcm94
eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgICAgICBpZiAoIXByb3h5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT3JDcmVhdGVP
YmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisgICAgICAgIGlmIChsaXN0ZW5lcikg
eworICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ubG9hZChsaXN0ZW5lci5nZXQoKSk7
CisgICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZh
bHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1
ZXN0T25sb2Fkc3RhcnQpCit7CisgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25s
b2Fkc3RhcnQuX2dldCIpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4
UHJveHk6OlRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9ubG9h
ZHN0YXJ0KCkpIHsKKyAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmxvYWRz
dGFydCgpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0
ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Cisg
ICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VTU09SX1NFVFRFUihY
TUxIdHRwUmVxdWVzdE9ubG9hZHN0YXJ0KQoreworICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBS
ZXF1ZXN0Lm9ubG9hZHN0YXJ0Ll9zZXQiKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJl
cXVlc3QgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0lu
ZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgaWYgKHZhbHVlLT5Jc051
bGwoKSkgeworICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9ubG9hZHN0YXJ0KCkpIHsKKyAg
ICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxW
OE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25sb2Fkc3RhcnQoKSk7Cisg
ICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5n
ZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICAgICAgcmVtb3ZlSGlkZGVuWEhSRGVwZW5kZW5j
eShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENs
ZWFyIHRoZSBsaXN0ZW5lci4KKyAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ubG9hZHN0YXJ0
KDApOworICAgIH0gZWxzZSB7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAg
IGlmICghcHJveHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVu
ZXIodmFsdWUsIGZhbHNlKTsKKyAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICB4
bWxIdHRwUmVxdWVzdC0+c2V0T25sb2Fkc3RhcnQobGlzdGVuZXIpOworICAgICAgICAgICAgY3Jl
YXRlSGlkZGVuWEhSRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0FDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdE9ucHJvZ3Jlc3MpCit7
CisgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25wcm9ncmVzcy5fZ2V0Iik7Cisg
ICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmpl
Y3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9s
ZGVyKCkpOworICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKSB7CisgICAgICAg
IFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2
ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKTsKKyAgICAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmpl
Y3QoKTsKKyAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7CisgICAgfQorICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9ucHJvZ3Jl
c3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25wcm9ncmVzcy5fc2V0
Iik7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6VG9OYXRp
dmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGlu
Zm8uSG9sZGVyKCkpOworICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKHht
bEh0dHBSZXF1ZXN0LT5vbnByb2dyZXNzKCkpIHsKKyAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4
bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKTsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAg
ICAgICAgICByZW1vdmVIaWRkZW5YSFJEZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVu
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgorICAgICAg
ICB4bWxIdHRwUmVxdWVzdC0+c2V0T25wcm9ncmVzcygwKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICBpZiAoIXByb3h5KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5
LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisgICAgICAg
IGlmIChsaXN0ZW5lcikgeworICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ucHJvZ3Jl
c3MobGlzdGVuZXIpOworICAgICAgICAgICAgY3JlYXRlSGlkZGVuWEhSRGVwZW5kZW5jeShpbmZv
LkhvbGRlcigpLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0FDQ0VTU09SX0dFVFRF
UihYTUxIdHRwUmVxdWVzdE9ucmVhZHlzdGF0ZWNoYW5nZSkKK3sKKyAgICBJTkNfU1RBVFMoIkRP
TS5YTUxIdHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UuX2dldCIpOworICAgIFhNTEh0dHBS
ZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFhNTEh0dHBS
ZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAg
ICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9ucmVhZHlzdGF0ZWNoYW5nZSgpKSB7CisgICAgICAgIFY4
T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50
TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25yZWFkeXN0YXRlY2hhbmdlKCkpOworICAgICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5l
ck9iamVjdCgpOworICAgICAgICByZXR1cm4gdjhMaXN0ZW5lcjsKKyAgICB9CisgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKK30KKworQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25y
ZWFkeXN0YXRlY2hhbmdlKQoreworICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9u
cmVhZHlzdGF0ZWNoYW5nZS5fc2V0Iik7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1
ZXN0ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRl
eDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOworICAgIGlmICh2YWx1ZS0+SXNOdWxs
KCkpIHsKKyAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbnJlYWR5c3RhdGVjaGFuZ2UoKSkg
eworICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19j
YXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbnJlYWR5c3RhdGVj
aGFuZ2UoKSk7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9
IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICAgICAgcmVtb3ZlSGlkZGVu
WEhSRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIENsZWFyIHRoZSBsaXN0ZW5lci4KKyAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNl
dE9ucmVhZHlzdGF0ZWNoYW5nZSgwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBWOFByb3h5KiBw
cm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgICAgICBpZiAoIXByb3h5KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT3JDcmVh
dGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7CisgICAgICAgIGlmIChsaXN0ZW5l
cikgeworICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNldE9ucmVhZHlzdGF0ZWNoYW5nZShs
aXN0ZW5lci5nZXQoKSk7CisgICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGlu
Zm8uSG9sZGVyKCksIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworQUNDRVNTT1JfR0VU
VEVSKFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUZXh0KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IG9ubHkgbmVlZGVkIGJlY2F1c2Ugd2Via2l0IHNldCB0aGlzIGdldHRlciBhcyBjdXN0b20uCisg
ICAgLy8gU28gd2UgbmVlZCBhIGN1c3RvbSBtZXRob2QgdG8gYXZvaWQgZm9ya2luZyB0aGUgSURM
IGZpbGUuCisgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3QucmVzcG9uc2V0ZXh0Ll9n
ZXQiKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5OjpUb05h
dGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwg
aW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKHhtbEh0dHBSZXF1ZXN0
LT5yZXNwb25zZVRleHQoKSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVz
dEFkZEV2ZW50TGlzdGVuZXIpCit7CisgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qu
YWRkRXZlbnRMaXN0ZW5lcigpIik7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0
ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6
WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkpOworCisgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9i
amVjdEV2ZW50TGlzdGVuZXIoYXJnc1sxXSwgZmFsc2UpOworICAgIGlmIChsaXN0ZW5lcikgewor
ICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICAgICAg
Ym9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CisgICAgICAgIHhtbEh0
dHBSZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsK
KworICAgICAgICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3Nb
MV0pOworICAgIH0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19G
VU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RSZW1vdmVFdmVudExpc3RlbmVyKQoreworICAgIElOQ19T
VEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOworICAgIFhN
TEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFhN
TEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigp
KTsKKworICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVl
c3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsgLy8gUHJvYmFibHkgbGVha2VkLgorCisgICAgUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPYmplY3RFdmVudExpc3RlbmVy
KGFyZ3NbMV0sIGZhbHNlKTsKKworICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICBTdHJpbmcg
dHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICAgICAgYm9vbCB1c2VDYXB0dXJl
ID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CisgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5yZW1v
dmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKKworICAg
ICAgICByZW1vdmVIaWRkZW5YSFJEZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0pOwor
ICAgIH0KKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0NBTExCQUNLX0ZVTkNf
REVDTChYTUxIdHRwUmVxdWVzdE9wZW4pCit7CisgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJl
cXVlc3Qub3BlbigpIik7CisgICAgLy8gRm91ciBjYXNlczoKKyAgICAvLyBvcGVuKG1ldGhvZCwg
dXJsKQorICAgIC8vIG9wZW4obWV0aG9kLCB1cmwsIGFzeW5jKQorICAgIC8vIG9wZW4obWV0aG9k
LCB1cmwsIGFzeW5jLCB1c2VyKQorICAgIC8vIG9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2Vy
LCBwYXNzd2QpCisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpIHsKKyAgICAgICAgVjhQcm94
eTo6VGhyb3dFcnJvcihWOFByb3h5OjpTWU5UQVhfRVJST1IsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKworICAgIFhNTEh0
dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFhNTEh0
dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsK
KworICAgIFN0cmluZyBtZXRob2QgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgU3Ry
aW5nIHVybHN0cmluZyA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKKyAgICBWOFByb3h5KiBw
cm94eSA9IFY4UHJveHk6OnJldHJpZXZlKCk7CisgICAgS1VSTCB1cmwgPSBwcm94eS0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsc3RyaW5nKTsKKworICAgIGJvb2wgYXN5bmMg
PSAoYXJncy5MZW5ndGgoKSA8IDMpID8gdHJ1ZSA6IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwor
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU3RyaW5nIHVzZXIsIHBhc3N3ZDsKKyAg
ICBpZiAoYXJncy5MZW5ndGgoKSA+PSA0ICYmICFhcmdzWzNdLT5Jc1VuZGVmaW5lZCgpKSB7Cisg
ICAgICAgIHVzZXIgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzNdKTsKKworICAg
ICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSA1ICYmICFhcmdzWzRdLT5Jc1VuZGVmaW5lZCgpKSB7
CisgICAgICAgICAgICBwYXNzd2QgPSB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzRd
KTsKKyAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywg
dXNlciwgcGFzc3dkLCBlYyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeG1sSHR0cFJl
cXVlc3QtPm9wZW4obWV0aG9kLCB1cmwsIGFzeW5jLCB1c2VyLCBlYyk7CisgICAgfSBlbHNlCisg
ICAgICAgIHhtbEh0dHBSZXF1ZXN0LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgZWMpOworCisg
ICAgaWYgKGVjKSB7CisgICAgICAgIFY4UHJveHk6OlNldERPTUV4Y2VwdGlvbihlYyk7CisgICAg
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisKKyAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworfQorCitzdGF0aWMgYm9vbCBJc0RvY3VtZW50VHlwZSh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAgLy8gRklYTUU6IGFkZCBvdGhlciBkb2N1bWVu
dCB0eXBlcy4KKyAgICByZXR1cm4gVjhEb2N1bWVudDo6SGFzSW5zdGFuY2UodmFsdWUpIHx8IFY4
SFRNTERvY3VtZW50OjpIYXNJbnN0YW5jZSh2YWx1ZSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVD
TChYTUxIdHRwUmVxdWVzdFNlbmQpCit7CisgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVl
c3Quc2VuZCgpIik7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94
eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1QsIGFyZ3MuSG9sZGVyKCkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2VuZChlYyk7
CisgICAgZWxzZSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmcgPSBhcmdzWzBd
OworICAgICAgICAvLyBGSVhNRTogdXBzdHJlYW0gaGFuZGxlcyAiRmlsZSIgb2JqZWN0cyB0b28u
CisgICAgICAgIGlmIChJc0RvY3VtZW50VHlwZShhcmcpKSB7CisgICAgICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJn
KTsKKyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4UHJveHk6OkRPTVdyYXBwZXJU
b05vZGU8RG9jdW1lbnQ+KG9iamVjdCk7CisgICAgICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwor
ICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3QtPnNlbmQoZG9jdW1lbnQsIGVjKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2VuZCh2YWx1ZVRvU3RyaW5nV2l0
aE51bGxDaGVjayhhcmcpLCBlYyk7CisgICAgfQorCisgICAgaWYgKGVjKSB7CisgICAgICAgIFY4
UHJveHk6OlNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKKyAgICB9CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitD
QUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RTZXRSZXF1ZXN0SGVhZGVyKSB7CisgICAg
SU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigpIik7CisgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKSB7CisgICAgICAgIFY4UHJveHk6OlRocm93RXJyb3IoVjhQ
cm94eTo6U1lOVEFYX0VSUk9SLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0
cFJlcXVlc3QgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFz
c0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgU3RyaW5nIGhlYWRlciA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsK
KyAgICBTdHJpbmcgdmFsdWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7CisgICAgeG1sSHR0
cFJlcXVlc3QtPnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCB2YWx1ZSwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBWOFByb3h5OjpTZXRET01FeGNlcHRpb24oZWMpOworICAgICAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdEdldFJlc3BvbnNl
SGVhZGVyKQoreworICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LmdldFJlc3BvbnNl
SGVhZGVyKCkiKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgVjhQcm94
eTo6VGhyb3dFcnJvcihWOFByb3h5OjpTWU5UQVhfRVJST1IsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpOworICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKworICAgIFhNTEh0
dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFhNTEh0
dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTdHJpbmcgaGVhZGVyID0gdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pOworICAgIFN0cmluZyByZXN1bHQgPSB4bWxIdHRwUmVxdWVzdC0+Z2V0
UmVzcG9uc2VIZWFkZXIoaGVhZGVyLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFY4UHJv
eHk6OlNldERPTUV4Y2VwdGlvbihlYyk7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4oKTsKKyAgICB9CisgICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKHJlc3VsdCk7Cit9CisK
K0NBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdE92ZXJyaWRlTWltZVR5cGUpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSgpIik7Cisg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKSB7CisgICAgICAgIFY4UHJveHk6OlRocm93RXJyb3Io
VjhQcm94eTo6U1lOVEFYX0VSUk9SLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1s
SHR0cFJlcXVlc3QgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhD
bGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgU3RyaW5nIHZh
bHVlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworICAgIHhtbEh0dHBSZXF1ZXN0LT5vdmVy
cmlkZU1pbWVUeXBlKHZhbHVlKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitD
QUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3REaXNwYXRjaEV2ZW50KQoreworICAgIElO
Q19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LmRpc3BhdGNoRXZlbnQoKSIpOworICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0
b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9h
ZEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiY2Q2Mgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJl
cXVlc3RVcGxvYWRDdXN0b20uY3BwCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCisKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0
b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4WE1MSHR0cFJlcXVlc3RVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RV
cGxvYWRPbmFib3J0KQoreworICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2Fk
Lm9uYWJvcnQuX2dldCIpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVz
dFVwbG9hZCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihW
OENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKKyAgICBp
ZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uYWJvcnQoKSkgeworICAgICAgICBWOE9iamVjdEV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVy
Kj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uYWJvcnQoKSk7CisgICAgICAgIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Cisg
ICAgICAgIHJldHVybiB2OExpc3RlbmVyOworICAgIH0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOworfQorCitBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmFib3J0KQor
eworICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9uYWJvcnQuX3NldCIp
OworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4UHJv
eHk6OlRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhN
TEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKKyAgICBpZiAodmFsdWUtPklzTnVs
bCgpKSB7CisgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25hYm9ydCgpKSB7Cisg
ICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8
VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uYWJvcnQoKSk7
CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVy
LT5nZXRMaXN0ZW5lck9iamVjdCgpOworICAgICAgICAgICAgcmVtb3ZlSGlkZGVuWEhSRGVwZW5k
ZW5jeShpbmZvLkhvbGRlcigpLCB2OExpc3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IENsZWFyIHRoZSBsaXN0ZW5lci4KKyAgICAgICAgeG1sSHR0cFJlcXVlc3RVcGxvYWQtPnNldE9u
YWJvcnQoMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBS
ZXF1ZXN0ID0geG1sSHR0cFJlcXVlc3RVcGxvYWQtPmFzc29jaWF0ZWRYTUxIdHRwUmVxdWVzdCgp
OworICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1
ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICBpZiAoIXByb3h5KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IHByb3h5LT5GaW5kT3JDcmVhdGVPYmplY3RFdmVudExpc3RlbmVyKHZhbHVlLCBmYWxzZSk7
CisgICAgICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICAgICAgeG1sSHR0cFJlcXVlc3RVcGxv
YWQtPnNldE9uYWJvcnQobGlzdGVuZXIpOworICAgICAgICAgICAgY3JlYXRlSGlkZGVuWEhSRGVw
ZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0FD
Q0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9uZXJyb3IpCit7CisgICAgSU5DX1NU
QVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25lcnJvci5fZ2V0Iik7CisgICAgWE1MSHR0
cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6VG9OYXRpdmVP
YmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RV
UExPQUQsIGluZm8uSG9sZGVyKCkpOworICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25l
cnJvcigpKSB7CisgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0
aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25l
cnJvcigpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0
ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgcmV0dXJuIHY4TGlzdGVuZXI7Cisg
ICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VTU09SX1NFVFRFUihY
TUxIdHRwUmVxdWVzdFVwbG9hZE9uZXJyb3IpCit7CisgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0
cFJlcXVlc3RVcGxvYWQub25lcnJvci5fc2V0Iik7CisgICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQq
IHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJl
cXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9s
ZGVyKCkpOworICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKHhtbEh0dHBS
ZXF1ZXN0VXBsb2FkLT5vbmVycm9yKCkpIHsKKyAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxI
dHRwUmVxdWVzdFVwbG9hZC0+b25lcnJvcigpKTsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAg
ICAgICAgICByZW1vdmVIaWRkZW5YSFJEZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVu
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGxpc3RlbmVyLgorICAgICAg
ICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25lcnJvcigwKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9h
ZC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0g
VjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CisgICAgICAgIGlmICghcHJveHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVj
dEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlKTsKKyAgICAgICAgaWYgKGxpc3RlbmVyKSB7Cisg
ICAgICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25lcnJvcihsaXN0ZW5lcik7Cisg
ICAgICAgICAgICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0
VXBsb2FkT25sb2FkKQoreworICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2Fk
Lm9ubG9hZC5fZ2V0Iik7CisgICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0
VXBsb2FkID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4
Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOworICAgIGlm
ICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25sb2FkKCkpIHsKKyAgICAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+
KHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWQoKSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAg
ICAgIHJldHVybiB2OExpc3RlbmVyOworICAgIH0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworfQorCitBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxvYWQpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25sb2FkLl9zZXQiKTsKKyAg
ICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOFByb3h5OjpU
b05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQ
UkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7CisgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkg
eworICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9hZCgpKSB7CisgICAgICAg
ICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmpl
Y3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9hZCgpKTsKKyAgICAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExp
c3RlbmVyT2JqZWN0KCk7CisgICAgICAgICAgICByZW1vdmVIaWRkZW5YSFJEZXBlbmRlbmN5KGlu
Zm8uSG9sZGVyKCksIHY4TGlzdGVuZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xlYXIg
dGhlIGxpc3RlbmVyLgorICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25sb2FkKDAp
OworICAgIH0gZWxzZSB7CisgICAgICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9
IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAg
ICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAgaWYgKCFwcm94eSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94
eS0+RmluZE9yQ3JlYXRlT2JqZWN0RXZlbnRMaXN0ZW5lcih2YWx1ZSwgZmFsc2UpOworICAgICAg
ICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRP
bmxvYWQobGlzdGVuZXIpOworICAgICAgICAgICAgY3JlYXRlSGlkZGVuWEhSRGVwZW5kZW5jeShp
bmZvLkhvbGRlcigpLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0FDQ0VTU09SX0dF
VFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ubG9hZHN0YXJ0KQoreworICAgIElOQ19TVEFUUygi
RE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9ubG9hZHN0YXJ0Ll9nZXQiKTsKKyAgICBYTUxIdHRw
UmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOFByb3h5OjpUb05hdGl2ZU9i
amVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQ
TE9BRCwgaW5mby5Ib2xkZXIoKSk7CisgICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxv
YWRzdGFydCgpKSB7CisgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBz
dGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+
b25sb2Fkc3RhcnQoKSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVy
ID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAgICAgIHJldHVybiB2OExpc3Rl
bmVyOworICAgIH0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitBQ0NFU1NPUl9T
RVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxvYWRzdGFydCkKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5vbmxvYWRzdGFydC5fc2V0Iik7CisgICAgWE1MSHR0
cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6VG9OYXRpdmVP
YmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RV
UExPQUQsIGluZm8uSG9sZGVyKCkpOworICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKKyAgICAg
ICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWRzdGFydCgpKSB7CisgICAgICAgICAg
ICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RF
dmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9hZHN0YXJ0KCkpOworICAg
ICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0
TGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgICAgIHJlbW92ZUhpZGRlblhIUkRlcGVuZGVuY3ko
aW5mby5Ib2xkZXIoKSwgdjhMaXN0ZW5lcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGVh
ciB0aGUgbGlzdGVuZXIuCisgICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5zZXRPbmxvYWRz
dGFydCgwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJl
cXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0KCk7
CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVl
c3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAgIGlmICghcHJveHkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
ID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNlKTsK
KyAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9h
ZC0+c2V0T25sb2Fkc3RhcnQobGlzdGVuZXIpOworICAgICAgICAgICAgY3JlYXRlSGlkZGVuWEhS
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K0FDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ucHJvZ3Jlc3MpCit7CisgICAg
SU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25wcm9ncmVzcy5fZ2V0Iik7Cisg
ICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6
VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRU
UFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOworICAgIGlmICh4bWxIdHRwUmVxdWVzdFVw
bG9hZC0+b25wcm9ncmVzcygpKSB7CisgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVz
dFVwbG9hZC0+b25wcm9ncmVzcygpKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4
TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKKyAgICAgICAgcmV0dXJu
IHY4TGlzdGVuZXI7CisgICAgfQorICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FD
Q0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ucHJvZ3Jlc3MpCit7CisgICAgSU5D
X1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25wcm9ncmVzcy5fc2V0Iik7CisgICAg
WE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6VG9O
YXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOworICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsK
KyAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbnByb2dyZXNzKCkpIHsKKyAgICAg
ICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9i
amVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25wcm9ncmVzcygpKTsK
KyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXIt
PmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAgICAgICAgICByZW1vdmVIaWRkZW5YSFJEZXBlbmRl
bmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
Q2xlYXIgdGhlIGxpc3RlbmVyLgorICAgICAgICB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+c2V0T25w
cm9ncmVzcygwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0
cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+YXNzb2NpYXRlZFhNTEh0dHBSZXF1ZXN0
KCk7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJl
cXVlc3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAgIGlmICghcHJveHkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlzdGVuZXIodmFsdWUsIGZhbHNl
KTsKKyAgICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdFVw
bG9hZC0+c2V0T25wcm9ncmVzcyhsaXN0ZW5lcik7CisgICAgICAgICAgICBjcmVhdGVIaWRkZW5Y
SFJEZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0VXBsb2FkQWRkRXZlbnRMaXN0ZW5l
cikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5hZGRFdmVudExp
c3RlbmVyKCkiKTsKKyAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxv
YWQgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFz
c0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgYXJncy5Ib2xkZXIoKSk7CisKKyAgICBYTUxI
dHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+YXNzb2Np
YXRlZFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRy
aWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAo
IXByb3h5KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPkZpbmRPckNyZWF0ZU9iamVjdEV2ZW50TGlz
dGVuZXIoYXJnc1sxXSwgZmFsc2UpOworICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICBTdHJp
bmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICAgICAgYm9vbCB1c2VDYXB0
dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CisgICAgICAgIHhtbEh0dHBSZXF1ZXN0VXBs
b2FkLT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKworICAg
ICAgICBjcmVhdGVIaWRkZW5YSFJEZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0pOwor
ICAgIH0KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RF
Q0woWE1MSHR0cFJlcXVlc3RVcGxvYWRSZW1vdmVFdmVudExpc3RlbmVyKQoreworICAgIElOQ19T
VEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwor
ICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNUVVBMT0FELCBhcmdzLkhvbGRlcigpKTsKKworICAgIFhNTEh0dHBSZXF1ZXN0KiB4
bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJl
cXVlc3QoKTsKKyAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBS
ZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghcHJveHkpCisgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7IC8vIFByb2JhYmx5IGxlYWtlZC4KKworICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IHByb3h5LT5GaW5kT2JqZWN0RXZlbnRMaXN0
ZW5lcihhcmdzWzFdLCBmYWxzZSk7CisKKyAgICBpZiAobGlzdGVuZXIpIHsKKyAgICAgICAgU3Ry
aW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgICAgIGJvb2wgdXNlQ2Fw
dHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOworICAgICAgICB4bWxIdHRwUmVxdWVzdFVw
bG9hZC0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVy
ZSk7CisKKyAgICAgICAgcmVtb3ZlSGlkZGVuWEhSRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBh
cmdzWzFdKTsKKyAgICB9CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxM
QkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RVcGxvYWREaXNwYXRjaEV2ZW50KQoreworICAg
IElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmRpc3BhdGNoRXZlbnQoKSIpOwor
ICAgIFY4UHJveHk6OlNldERPTUV4Y2VwdGlvbihOT1RfU1VQUE9SVEVEX0VSUik7CisgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="14216"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>