<?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>163998</bug_id>
          
          <creation_ts>2016-10-25 17:21:44 -0700</creation_ts>
          <short_desc>WebAssembly API: implement Instance</short_desc>
          <delta_ts>2016-10-28 09:19:30 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>161709</blocked>
    
    <blocked>164039</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1244565</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-25 17:21:44 -0700</bug_when>
    <thetext>As described in: https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyinstance-objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244929</commentid>
    <comment_count>1</comment_count>
      <attachid>292966</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-26 15:50:30 -0700</bug_when>
    <thetext>Created attachment 292966
patch

A bunch of followups to this, including:
 - https://bugs.webkit.org/show_bug.cgi?id=164023
 - https://bugs.webkit.org/show_bug.cgi?id=164039

They&apos;re all separable, so I&apos;ll do separate patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244965</commentid>
    <comment_count>2</comment_count>
      <attachid>292966</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-10-26 17:01:57 -0700</bug_when>
    <thetext>Comment on attachment 292966
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=292966&amp;action=review

r=me with some minor changes.

&gt; Source/JavaScriptCore/wasm/WasmPlan.h:67
&gt; +    auto* getFunctions()

I don&apos;t think I like using auto here. Even though the definition of m_result is located below, I think not explicitly writing the result of the functions adds too many levels of indirection from the real type for my taste. Additionally, I think it goes against a philosophy of making the code readable when possible.

&gt; Source/JavaScriptCore/wasm/WasmPlan.h:72
&gt; +    auto* getMemory()

ditto.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:59
&gt; +    JSValue arg0 = state-&gt;argument(0);
&gt; +    JSValue arg1 = state-&gt;argument(1);
&gt; +
&gt; +    // If moduleObject is not a WebAssembly.Module instance, a TypeError is thrown.
&gt; +    JSWebAssemblyModule* module = arg0.getObject() ? jsDynamicCast&lt;JSWebAssemblyModule*&gt;(arg0.getObject()) : nullptr;

You can just do jsDynamicCast&lt;JSWebAssemblyModule*&gt;(state-&gt;argument(0)).

Also, can you name arg1 &quot;importValue&quot; or something more descriptive?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244997</commentid>
    <comment_count>3</comment_count>
      <attachid>292983</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-26 18:46:47 -0700</bug_when>
    <thetext>Created attachment 292983
patch

Thanks for the review! I didn&apos;t know about that jsDynamicCast overload, neat!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245001</commentid>
    <comment_count>4</comment_count>
      <attachid>292983</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-26 19:21:42 -0700</bug_when>
    <thetext>Comment on attachment 292983
patch

Clearing flags on attachment: 292983

Committed r207929: &lt;http://trac.webkit.org/changeset/207929&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245002</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-26 19:21:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245489</commentid>
    <comment_count>6</comment_count>
      <attachid>292983</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-28 01:59:06 -0700</bug_when>
    <thetext>Comment on attachment 292983
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=292983&amp;action=review

patch LGTM too.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:35
&gt; +namespace Wasm {

I wish our &quot;Wasm&quot; namespace was &quot;WASM&quot;.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:56
&gt; +    // If moduleObject is not a WebAssembly.Module instance, a TypeError is thrown.

Nit: This comment doesn&apos;t add any information to the code.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:61
&gt; +    // If the importObject parameter is not undefined and Type(importObject) is not Object, a TypeError is thrown.

Ditto here. Also, your error messages provide good documentation of what&apos;s happening too. So I think these comments are unnecessary.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:74
&gt; +        // FIXME validate according to Module.Instance spec.

Maybe this should this have a bugzilla linked here?

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:79
&gt; +    VariableEnvironment declaredVariables;

Will these environments ever be populated with things?

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:84
&gt; +    auto* structure = InternalFunction::createSubclassStructure(state, state-&gt;newTarget(), globalObject-&gt;WebAssemblyInstanceStructure());

I think it may be worth us discussing use of &quot;auto&quot; in JSC. I think JSC code usually writes out types in situations like these even though the types are easily deduced. I see auto mainly used for lambdas and iterators in JSC. It&apos;s probably worth following that style here, too. Or it&apos;s worth us revising our style for code like this and using auto elsewhere inside JSC. My personal preference is to avoid auto in situations like these, however, I care more about consistency than any one particular style being the dominant style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245624</commentid>
    <comment_count>7</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-28 09:19:30 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 292983 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=292983&amp;action=review
&gt; 
&gt; patch LGTM too.
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:35
&gt; &gt; +namespace Wasm {
&gt; 
&gt; I wish our &quot;Wasm&quot; namespace was &quot;WASM&quot;.
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:56
&gt; &gt; +    // If moduleObject is not a WebAssembly.Module instance, a TypeError is thrown.
&gt; 
&gt; Nit: This comment doesn&apos;t add any information to the code.
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:61
&gt; &gt; +    // If the importObject parameter is not undefined and Type(importObject) is not Object, a TypeError is thrown.
&gt; 
&gt; Ditto here. Also, your error messages provide good documentation of what&apos;s
&gt; happening too. So I think these comments are unnecessary.

These are from the spec. Quoting spec seems to be the way other APIs are implemented?


&gt; &gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:74
&gt; &gt; +        // FIXME validate according to Module.Instance spec.
&gt; 
&gt; Maybe this should this have a bugzilla linked here?

Oh yeah I forgot to add the link. That&apos;s what I&apos;ll work on after.


&gt; &gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:79
&gt; &gt; +    VariableEnvironment declaredVariables;
&gt; 
&gt; Will these environments ever be populated with things?

Yes. I need to extract them from the .wasm file, should be done today.


&gt; &gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:84
&gt; &gt; +    auto* structure = InternalFunction::createSubclassStructure(state, state-&gt;newTarget(), globalObject-&gt;WebAssemblyInstanceStructure());
&gt; 
&gt; I think it may be worth us discussing use of &quot;auto&quot; in JSC. I think JSC code
&gt; usually writes out types in situations like these even though the types are
&gt; easily deduced. I see auto mainly used for lambdas and iterators in JSC.
&gt; It&apos;s probably worth following that style here, too. Or it&apos;s worth us
&gt; revising our style for code like this and using auto elsewhere inside JSC.
&gt; My personal preference is to avoid auto in situations like these, however, I
&gt; care more about consistency than any one particular style being the dominant
&gt; style.

Happy to change it. My heuristic is usually: if the type name is on the line, or if the type is unnamed or unknowable (say, because of template magic), then I use auto.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292966</attachid>
            <date>2016-10-26 15:50:30 -0700</date>
            <delta_ts>2016-10-26 18:46:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-API-implement-Instance.patch</filename>
            <type>text/plain</type>
            <size>21674</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA2MGFhOWUzNDJhODNlYTM3MDZjMTkwMDc4MDljM2FhNzk4NzZmMzI5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDI1IE9jdCAyMDE2IDE3OjE5OjI1IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgQVBJOiBpbXBsZW1lbnQgSW5zdGFuY2UKCkFzIGRlc2NyaWJlZCBpbjogaHR0cHM6Ly9n
aXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9KUy5tZCN3ZWJhc3NlbWJs
eWluc3RhbmNlLW9iamVjdHMKCiAtIFRha2Ugb3duZXJzaGlwIG9mIFdhc206OlBsYW4ncyBjb21w
aWxhdGlvbiByZXN1bHQgd2hlbiBzdWNjZXNzZnVsbHkgY3JlYXRpbmcgYSBKU1dlYkFzc2VtYmx5
TW9kdWxlIG9iamVjdC4KIC0gQ29uc3RydWN0IGEgYmFzaWMgSW5zdGFuY2Ugd2l0aCBhIE1vZHVs
ZS4KIC0gSGFuZGxlIHNlY29uZCBhcmd1bWVudCAoaW1wb3J0T2JqZWN0KSBvZiBXZWJBc3NlbWJs
eS5JbnN0YW5jZS4KIC0gQWRkIHJlZmVyZW5jZSB0ZXh0IGZyb20gdGhlIHNwZWMgdG8gV2ViQXNz
ZW1ibHkuTW9kdWxlJ3MgY29kZS4KIC0gRXhwb3NlIGFuZCB0ZXN0IGFuIGVtcHR5ICdleHBvcnRz
JyBNb2R1bGVOYW1lc3BhY2VPYmplY3Qgb24gV2ViQXNzZW1ibHkuSW5zdGFuY2UuCgpUaGUgaW1w
bGVtZW50YXRpb24gaXNuJ3QgY29tcGxldGUgeWV0OiBpdCByZWxpZXMgb24gZnVydGhlciB3b3Jr
IGZvciB3aGljaCBJJ3ZlIGZpbGVkIGJ1Z3MuCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNCArKysrKysrKysrKysrCiBKU1Rlc3RzL3dh
c20vanMtYXBpL3Rlc3RfSW5zdGFuY2UuanMgICAgICAgICAgICAgICB8IDEwICsrKysrKwogSlNU
ZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcyAgICAgICAgICAgICAgfCAyMiArKysr
KysrKystLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAxMSArKysrKysKIC4uLi93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5jcHAgICAgICAgICAgICAgIHwgMTAgKysrKy0tCiAuLi4vSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCB8ICA5ICsrKy0tCiAuLi4vSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcCB8IDExICsrKystLQog
Li4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oICAgfCAxMyAr
KysrKy0tCiAuLi4vd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICAg
ICB8IDQyICsrKysrKysrKysrKysrKysrKysrLS0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlQ29uc3RydWN0b3IuY3BwICAgICAgIHwgIDkgKysrLS0KIDExIGZpbGVzIGNoYW5nZWQsIDE3
OCBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKU1Rl
c3RzL3dhc20vanMtYXBpL3Rlc3RfSW5zdGFuY2UuanMKCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0No
YW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI0YTM4OWYuLjM4YjA2Y2MgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjcgQEAKKzIwMTYtMTAtMjYgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5IEFQSTogaW1wbGVtZW50IEluc3RhbmNlCisKKyAgICAgICAg
QXMgZGVzY3JpYmVkIGluOiBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Js
b2IvbWFzdGVyL0pTLm1kI3dlYmFzc2VtYmx5aW5zdGFuY2Utb2JqZWN0cworCisgICAgICAgICAt
IFRha2Ugb3duZXJzaGlwIG9mIFdhc206OlBsYW4ncyBjb21waWxhdGlvbiByZXN1bHQgd2hlbiBz
dWNjZXNzZnVsbHkgY3JlYXRpbmcgYSBKU1dlYkFzc2VtYmx5TW9kdWxlIG9iamVjdC4KKyAgICAg
ICAgIC0gQ29uc3RydWN0IGEgYmFzaWMgSW5zdGFuY2Ugd2l0aCBhIE1vZHVsZS4KKyAgICAgICAg
IC0gSGFuZGxlIHNlY29uZCBhcmd1bWVudCAoaW1wb3J0T2JqZWN0KSBvZiBXZWJBc3NlbWJseS5J
bnN0YW5jZS4KKyAgICAgICAgIC0gQWRkIHJlZmVyZW5jZSB0ZXh0IGZyb20gdGhlIHNwZWMgdG8g
V2ViQXNzZW1ibHkuTW9kdWxlJ3MgY29kZS4KKyAgICAgICAgIC0gRXhwb3NlIGFuZCB0ZXN0IGFu
IGVtcHR5ICdleHBvcnRzJyBNb2R1bGVOYW1lc3BhY2VPYmplY3Qgb24gV2ViQXNzZW1ibHkuSW5z
dGFuY2UuCisKKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIGlzbid0IGNvbXBsZXRlIHlldDog
aXQgcmVsaWVzIG9uIGZ1cnRoZXIgd29yayBmb3Igd2hpY2ggSSd2ZSBmaWxlZCBidWdzLgorCisg
ICAgICAgIFdlYkFzc2VtYmx5IEFQSTogaW1wbGVtZW50IEluc3RhbmNlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5OTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vanMtYXBpL3Rlc3RfSW5z
dGFuY2UuanM6IEFkZGVkLgorICAgICAgICAoRW1wdHlNb2R1bGUpOiB1c2UgdGhlIEJ1aWxkZXIs
IGNyZWF0ZSB0aGUgc2ltcGxlc3QgTW9kdWxlIHBvc3NpYmxlLCBhbmQgY3JlYXRlIGFuIEluc3Rh
bmNlIGZyb20gaXQKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qczoKKyAg
ICAgICAgKGNvbnN0LmMuaW4uY29uc3RydWN0b3JQcm9wZXJ0aWVzLnN3aXRjaCk6IGJhc2ljIHRl
c3RzIG9mIHRoZSBBUEkKKwogMjAxNi0xMC0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldCgpIHNob3VsZCBjaGVj
ayBmb3IgZXhjZXB0aW9ucy4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9J
bnN0YW5jZS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9JbnN0YW5jZS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjRlNWVlCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X0luc3RhbmNlLmpzCkBAIC0wLDAgKzEsMTAgQEAKK2lt
cG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOworaW1wb3J0IEJ1aWxkZXIgZnJv
bSAnLi4vQnVpbGRlci5qcyc7CisKKyhmdW5jdGlvbiBFbXB0eU1vZHVsZSgpIHsKKyAgICBjb25z
dCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTsKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSk7CisgICAgYXNzZXJ0Lmluc3RhbmNlb2YoaW5zdGFuY2UsIFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKTsKK30pKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNf
YXBpLmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcwppbmRleCA0ZWU4
ODUzLi4wNTRlYWVmIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNf
YXBpLmpzCisrKyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKQEAgLTIs
NyArMiw5IEBAIGltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwogaW1wb3J0
ICogYXMgdXRpbGl0aWVzIGZyb20gJy4uL3V0aWxpdGllcy5qcyc7CiAKIGNvbnN0IHZlcnNpb24g
PSAweEM7Ci1jb25zdCBlbXB0eU1vZHVsZSA9IFVpbnQ4QXJyYXkub2YoMHgwLCAweDYxLCAweDcz
LCAweDZkLCB2ZXJzaW9uLCAweDAwLCAweDAwLCAweDAwKTsKK2NvbnN0IGVtcHR5TW9kdWxlQXJy
YXkgPSBVaW50OEFycmF5Lm9mKDB4MCwgMHg2MSwgMHg3MywgMHg2ZCwgdmVyc2lvbiwgMHgwMCwg
MHgwMCwgMHgwMCk7Citjb25zdCBpbnZhbGlkQ29uc3RydWN0b3JJbnB1dHMgPSBbdW5kZWZpbmVk
LCBudWxsLCAiIiwgMSwge30sIFtdXTsKK2NvbnN0IGludmFsaWRJbnN0YW5jZUltcG9ydHMgPSBb
bnVsbCwgIiIsIDFdOwogCiBjb25zdCBjaGVja093blByb3BlcnR5RGVzY3JpcHRvciA9IChvYmos
IHByb3AsIGV4cGVjdCkgPT4gewogICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7CkBAIC00OSwxNyArNTEsMjcgQEAgZm9yIChj
b25zdCBjIGluIGNvbnN0cnVjdG9yUHJvcGVydGllcykgewogICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gV2ViQXNzZW1ibHlbY10oKSwgVHlwZUVycm9yLCBgY2FsbGluZyBXZWJBc3NlbWJseS4ke2N9
IGNvbnN0cnVjdG9yIHdpdGhvdXQgbmV3IGlzIGludmFsaWRgKTsKICAgICBzd2l0Y2ggKGMpIHsK
ICAgICBjYXNlICJNb2R1bGUiOgotICAgICAgICBmb3IgKGNvbnN0IGludmFsaWQgb2YgW3VuZGVm
aW5lZCwgIiIsIDEsIHt9LCBbXV0pCisgICAgICAgIGZvciAoY29uc3QgaW52YWxpZCBvZiBpbnZh
bGlkQ29uc3RydWN0b3JJbnB1dHMpCiAgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5l
dyBXZWJBc3NlbWJseVtjXShpbnZhbGlkKSwgVHlwZUVycm9yLCBgZmlyc3QgYXJndW1lbnQgdG8g
V2ViQXNzZW1ibHkuTW9kdWxlIG11c3QgYmUgYW4gQXJyYXlCdWZmZXJWaWV3IG9yIGFuIEFycmF5
QnVmZmVyIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHlbY10oaW52YWxpZCknKWApOwogICAg
ICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBbbmV3IEFycmF5QnVmZmVyKCksIG5ldyBEYXRhVmll
dyhuZXcgQXJyYXlCdWZmZXIoKSksIG5ldyBJbnQ4QXJyYXkoKSwgbmV3IFVpbnQ4QXJyYXkoKSwg
bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KCksIG5ldyBJbnQxNkFycmF5KCksIG5ldyBVaW50MTZBcnJh
eSgpLCBuZXcgSW50MzJBcnJheSgpLCBuZXcgVWludDMyQXJyYXkoKSwgbmV3IEZsb2F0MzJBcnJh
eSgpLCBuZXcgRmxvYXQ2NEFycmF5KCldKQogICAgICAgICAgICAgLy8gRklYTUUgdGhlIGZvbGxv
d2luZyBzaG91bGQgYmUgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNzY4CiAgICAgICAgICAgICBhc3NlcnQudGhyb3dz
KCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXShidWZmZXIpLCBFcnJvciwgYE1vZHVsZSBpcyAwIGJ5
dGVzLCBleHBlY3RlZCBhdCBsZWFzdCA4IGJ5dGVzIChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1i
bHlbY10oYnVmZmVyKScpYCk7Ci0gICAgICAgIGFzc2VydC5pbnN0YW5jZW9mKG5ldyBXZWJBc3Nl
bWJseVtjXShlbXB0eU1vZHVsZSksIFdlYkFzc2VtYmx5Lk1vZHVsZSk7CisgICAgICAgIGFzc2Vy
dC5pbnN0YW5jZW9mKG5ldyBXZWJBc3NlbWJseVtjXShlbXB0eU1vZHVsZUFycmF5KSwgV2ViQXNz
ZW1ibHkuTW9kdWxlKTsKICAgICAgICAgLy8gRklYTUUgdGVzdCBuZXV0ZXJlZCBUeXBlZEFycmF5
IGFuZCBUeXBlZEFycmF5Vmlldy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2Mzg5OQogICAgICAgICBicmVhazsKICAgICBjYXNlICJJbnN0YW5jZSI6Ci0gICAgICAg
IC8vIEZJWE1FIEltcGxlbWVudCBhbmQgdGVzdCB0aGVzZSBBUElzIGZ1cnRoZXIuIEZvciBub3cg
dGhleSBqdXN0IHRocm93LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU5Nzc1Ci0gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2VtYmx5W2NdKCks
IEVycm9yLCBgV2ViQXNzZW1ibHkgZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSAke2N9IGNvbnN0
cnVjdG9yIHByb3BlcnR5YCk7CisgICAgICAgIGZvciAoY29uc3QgaW52YWxpZCBvZiBpbnZhbGlk
Q29uc3RydWN0b3JJbnB1dHMpCisgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBX
ZWJBc3NlbWJseVtjXShpbnZhbGlkKSwgVHlwZUVycm9yLCBgZmlyc3QgYXJndW1lbnQgdG8gV2Vi
QXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSBhIFdlYkFzc2VtYmx5Lk1vZHVsZSAoZXZhbHVhdGlu
ZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpJylgKTsKKyAgICAgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHlbY10obmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVs
ZUFycmF5KSk7CisgICAgICAgIGFzc2VydC5pbnN0YW5jZW9mKGluc3RhbmNlLCBXZWJBc3NlbWJs
eS5JbnN0YW5jZSk7CisgICAgICAgIGZvciAoY29uc3QgaW52YWxpZCBvZiBpbnZhbGlkSW5zdGFu
Y2VJbXBvcnRzKQorICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgV2ViQXNzZW1i
bHlbY10obmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVsZUFycmF5KSwgaW52YWxpZCks
IFR5cGVFcnJvciwgYHNlY29uZCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0
IGJlIHVuZGVmaW5lZCBvciBhbiBPYmplY3QgKGV2YWx1YXRpbmcgJ25ldyBXZWJBc3NlbWJseVtj
XShuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGVtcHR5TW9kdWxlQXJyYXkpLCBpbnZhbGlkKScpYCk7
CisgICAgICAgIGFzc2VydC5ub3RVbmRlZihpbnN0YW5jZS5leHBvcnRzKTsKKyAgICAgICAgY2hl
Y2tPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5zdGFuY2UsICJleHBvcnRzIiwgeyB0eXBlb2Z2YWx1
ZTogIm9iamVjdCIsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFi
bGU6IHRydWUgfSk7CisgICAgICAgIGFzc2VydC5pc1VuZGVmKGluc3RhbmNlLmV4cG9ydHMuX19w
cm90b19fKTsKKyAgICAgICAgYXNzZXJ0LmVxKFJlZmxlY3QuaXNFeHRlbnNpYmxlKGluc3RhbmNl
LmV4cG9ydHMpLCBmYWxzZSk7CisgICAgICAgIGFzc2VydC5lcShTeW1ib2wuaXRlcmF0b3IgaW4g
aW5zdGFuY2UuZXhwb3J0cywgdHJ1ZSk7CisgICAgICAgIGFzc2VydC5lcShTeW1ib2wudG9TdHJp
bmdUYWcgaW4gaW5zdGFuY2UuZXhwb3J0cywgdHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgIk1lbW9yeSI6CiAgICAgICAgIC8vIEZJWE1FIEltcGxlbWVudCBhbmQgdGVzdCB0aGVzZSBB
UElzIGZ1cnRoZXIuIEZvciBub3cgdGhleSBqdXN0IHRocm93LiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Nzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MjhhMTlmLi5iOGZmYWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBA
QAorMjAxNi0xMC0yNiAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgV2ViQXNzZW1ibHkgQVBJOiBpbXBsZW1lbnQgSW5zdGFuY2UKKworICAgICAgICBBcyBkZXNj
cmliZWQgaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJBc3NlbWJseS9kZXNpZ24vYmxvYi9tYXN0
ZXIvSlMubWQjd2ViYXNzZW1ibHlpbnN0YW5jZS1vYmplY3RzCisKKyAgICAgICAgIC0gVGFrZSBv
d25lcnNoaXAgb2YgV2FzbTo6UGxhbidzIGNvbXBpbGF0aW9uIHJlc3VsdCB3aGVuIHN1Y2Nlc3Nm
dWxseSBjcmVhdGluZyBhIEpTV2ViQXNzZW1ibHlNb2R1bGUgb2JqZWN0LgorICAgICAgICAgLSBD
b25zdHJ1Y3QgYSBiYXNpYyBJbnN0YW5jZSB3aXRoIGEgTW9kdWxlLgorICAgICAgICAgLSBIYW5k
bGUgc2Vjb25kIGFyZ3VtZW50IChpbXBvcnRPYmplY3QpIG9mIFdlYkFzc2VtYmx5Lkluc3RhbmNl
LgorICAgICAgICAgLSBBZGQgcmVmZXJlbmNlIHRleHQgZnJvbSB0aGUgc3BlYyB0byBXZWJBc3Nl
bWJseS5Nb2R1bGUncyBjb2RlLgorICAgICAgICAgLSBFeHBvc2UgYW5kIHRlc3QgYW4gZW1wdHkg
J2V4cG9ydHMnIE1vZHVsZU5hbWVzcGFjZU9iamVjdCBvbiBXZWJBc3NlbWJseS5JbnN0YW5jZS4K
KworICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gaXNuJ3QgY29tcGxldGUgeWV0OiBpdCByZWxp
ZXMgb24gZnVydGhlciB3b3JrIGZvciB3aGljaCBJJ3ZlIGZpbGVkIGJ1Z3MuCisKKyAgICAgICAg
V2ViQXNzZW1ibHkgQVBJOiBpbXBsZW1lbnQgSW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzk5OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9XYXNtUGxhbi5oOgorICAgICAgICAo
SlNDOjpXYXNtOjpQbGFuOjpnZXRGdW5jdGlvbnMpOiBhbGxvdyB0cmFuc2ZlcmluZyBzdGF0ZSBv
dXQKKyAgICAgICAgKEpTQzo6V2FzbTo6UGxhbjo6Z2V0TWVtb3J5KTogYWxsb3cgdHJhbnNmZXJp
bmcgc3RhdGUgb3V0CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24pOiBzZXQgdGhlIE1v
ZHVsZU5hbWVzcGFjZU9iamVjdCwgYW5kIGV4cG9zZSBpdCBhcyAiZXhwb3J0cyIKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxkcmVuKTogdmlzaXQgdGhlIE1v
ZHVsZU5hbWVzcGFjZU9iamVjdCBjaGlsZAorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmg6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZSk6IG1vdmUgaW4gdGhl
IGNvbXBpbGVkIGZ1bmN0aW9ucyBhbmQgdGhlIG1lbW9yeQorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5j
ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUlu
c3RhbmNlKTogdGFrZSB0aGUgTW9kdWxlLCBleHRyYWN0IHRoZSBQbGFuJ3MgcmVzdWx0cywgYW5k
IGNyZWF0ZSB0aGUgKGVtcHR5IGZvciBub3cpIE1vZHVsZU5hbWVzcGFjZU9iamVjdAorICAgICAg
ICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUpOiBhZGQgYSBmZXcgY29tbWVudHMgZnJv
bSB0aGUgc3BlYywgYW5kIHBhc3Mgb3V0IHRoZSBQbGFuJ3MgcmVzdWx0cworCiAyMDE2LTEwLTI2
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldzo6c2V0KCkgc2hvdWxkIGNoZWNrIGZvciBleGNlcHRpb25zLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmgKaW5kZXggYjc5NGYxZS4uZDk0ZDk2YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCkBAIC02Myw2ICs2MywxNyBAQCBwdWJsaWM6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CiAgICAgICAgIHJldHVybiBtX21lbW9y
eS5nZXQoKTsKICAgICB9CisgICAgCisgICAgYXV0byogZ2V0RnVuY3Rpb25zKCkKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIHJldHVybiAmbV9yZXN1
bHQ7CisgICAgfQorICAgIGF1dG8qIGdldE1lbW9yeSgpCisgICAgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghZmFpbGVkKCkpOworICAgICAgICByZXR1cm4gJm1fbWVtb3J5OworICAgIH0KIAog
cHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+
PiBtX3Jlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCmluZGV4IGIxZGE0ZTIuLjFkN2JjMzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmNwcApAQCAtMjksMTMgKzI5LDE0IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1l
c3BhY2VPYmplY3QpCiB7CiAgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5SW5z
dGFuY2Uodm0sIHN0cnVjdHVyZSk7Ci0gICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG1vZHVsZU5hbWVzcGFjZU9iamVjdCk7
CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCkBAIC00OSw5ICs1MCwxMSBAQCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogewogfQogCi12b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQordm9pZCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9tb2R1bGVOYW1lc3BhY2VPYmpl
Y3Quc2V0KHZtLCB0aGlzLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImV4cG9ydHMi
KSwgbV9tb2R1bGVOYW1lc3BhY2VPYmplY3QuZ2V0KCksIE5vbmUpOwogICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKIH0KIApAQCAtNjYsNiArNjksNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKIH0KIAogY29u
c3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6c19pbmZvID0geyAiV2ViQXNzZW1i
bHkuSW5zdGFuY2UiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggYjIxZTQ1Zi4uODdhY2M5NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3Rh
bmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgKQEAgLTMxLDIxICszMSwyNiBAQAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAKIG5h
bWVzcGFjZSBKU0MgeworICAgIAorY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiAKIGNs
YXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAg
c3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7Cisg
ICAgc3RhdGljIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwg
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9J
TkZPOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKFZNJiwgU3RydWN0
dXJlKik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIFdyaXRlQmFycmllcjxKU01vZHVsZU5hbWVz
cGFjZU9iamVjdD4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlNb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseU1vZHVsZS5jcHAKaW5kZXggZjI4YTRmYy4uNjVjY2E5NSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKQEAgLTI5
LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeS5o
IgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpT
V2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1v
ZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+KiBjb21waWxlZEZ1bmN0aW9ucywg
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qIG1lbW9yeSkKIHsKLSAgICBhdXRvKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZt
LmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOworICAgIGF1dG8qIGlu
c3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4o
dm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgY29tcGlsZWRGdW5j
dGlvbnMsIG1lbW9yeSk7CiAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC00NCw4ICs0NywxMCBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYgogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0K
IAotSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorSlNXZWJBc3NlbWJseU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVs
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdh
c206OkZ1bmN0aW9uQ29tcGlsYXRpb24+PiogY29tcGlsZWRGdW5jdGlvbnMsIHN0ZDo6dW5pcXVl
X3B0cjxXYXNtOjpNZW1vcnk+KiBtZW1vcnkpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisg
ICAgLCBtX2NvbXBpbGVkRnVuY3Rpb25zKFdURk1vdmUoKmNvbXBpbGVkRnVuY3Rpb25zKSkKKyAg
ICAsIG1fbWVtb3J5KFdURk1vdmUoKm1lbW9yeSkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAppbmRleCBiZTdmNjky
Li5hNDM4YTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oCkBAIC0zMiwyMCArMzIsMjkgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK25hbWVzcGFjZSBXYXNtIHsKK3N0cnVjdCBGdW5jdGlvbkNvbXBpbGF0aW9uOworY2xhc3Mg
TWVtb3J5OworfQorCiBjbGFzcyBKU1dlYkFzc2VtYmx5TW9kdWxlIDogcHVibGljIEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSosIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlv
bj4+Kiwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4qKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAg
ICAgREVDTEFSRV9JTkZPOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVsZShW
TSYsIFN0cnVjdHVyZSopOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUq
LCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+PiosIHN0
ZDo6dW5pcXVlX3B0cjxXYXNtOjpNZW1vcnk+Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+IG1fY29tcGls
ZWRGdW5jdGlvbnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4gbV9tZW1vcnk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CmluZGV4IDU1YmY0YTEuLmI5MTYyZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNw
cApAQCAtMzAsNiArMzAsMTAgQEAKIAogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TW9kdWxlLmgiCiAjaW5jbHVkZSAi
V2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgogCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlJ
bnN0YW5jZUNvbnN0cnVjdG9yLmx1dC5oIgpAQCAtNDUsOSArNDksNDMgQEAgY29uc3QgQ2xhc3NJ
bmZvIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRnVuY3Rpb24i
LCAmQmFzZTo6c18KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3Ry
dWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSogc3RhdGUpCiB7Ci0gICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZUVycm9yKHN0YXRlLCBBU0NJSUxp
dGVyYWwoIldlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgSW5zdGFuY2UgY29u
c3RydWN0b3IgcHJvcGVydHkiKSkpKTsKKyAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIEpTVmFsdWUgYXJnMCA9IHN0YXRlLT5hcmd1bWVu
dCgwKTsKKyAgICBKU1ZhbHVlIGFyZzEgPSBzdGF0ZS0+YXJndW1lbnQoMSk7CisKKyAgICAvLyBJ
ZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNzZW1ibHkuTW9kdWxlIGluc3RhbmNlLCBhIFR5
cGVFcnJvciBpcyB0aHJvd24uCisgICAgSlNXZWJBc3NlbWJseU1vZHVsZSogbW9kdWxlID0gYXJn
MC5nZXRPYmplY3QoKSA/IGpzRHluYW1pY0Nhc3Q8SlNXZWJBc3NlbWJseU1vZHVsZSo+KGFyZzAu
Z2V0T2JqZWN0KCkpIDogbnVsbHB0cjsKKyAgICBpZiAoIW1vZHVsZSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVF
cnJvcihzdGF0ZSwgQVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5J
bnN0YW5jZSBtdXN0IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBl
bmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShhcmcwKSkpKTsKKworICAgIC8vIElmIHRoZSBpbXBv
cnRPYmplY3QgcGFyYW1ldGVyIGlzIG5vdCB1bmRlZmluZWQgYW5kIFR5cGUoaW1wb3J0T2JqZWN0
KSBpcyBub3QgT2JqZWN0LCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCisgICAgSlNPYmplY3QqIGlt
cG9ydE9iamVjdCA9IGFyZzEuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFhcmcxLmlzVW5kZWZpbmVk
KCkgJiYgIWltcG9ydE9iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgQVNDSUlMaXRl
cmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVzdCBiZSB1bmRl
ZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVG
b3JWYWx1ZShhcmcxKSkpKTsKKworICAgIC8vIEZJWE1FIHVzZSB0aGUgaW1wb3J0T2JqZWN0LiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDM5CisgICAgLy8gSWYg
dGhlIGxpc3Qgb2YgbW9kdWxlLmltcG9ydHMgaXMgbm90IGVtcHR5IGFuZCBUeXBlKGltcG9ydE9i
amVjdCkgaXMgbm90IE9iamVjdCwgYSBUeXBlRXJyb3IgaXMgdGhyb3duLgorCisgICAgLy8gRklY
TUUgU3RyaW5nIHRoaW5ncyBmcm9tIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQwMjMKKyAgICAvLyBMZXQgZXhwb3J0cyBiZSBhIGxpc3Qgb2YgKHN0cmluZywgSlMg
dmFsdWUpIHBhaXJzIHRoYXQgaXMgbWFwcGVkIGZyb20gZWFjaCBleHRlcm5hbCB2YWx1ZSBlIGlu
IGluc3RhbmNlLmV4cG9ydHMgYXMgZm9sbG93czoKKyAgICBJZGVudGlmaWVyU2V0IGluc3RhbmNl
RXhwb3J0czsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIG5hbWUgOiBpbnN0YW5jZUV4cG9ydHMpIHsK
KyAgICAgICAgLy8gRklYTUUgdmFsaWRhdGUgYWNjb3JkaW5nIHRvIE1vZHVsZS5JbnN0YW5jZSBz
cGVjLgorICAgICAgICAodm9pZCluYW1lOworICAgIH0KKyAgICBJZGVudGlmaWVyIG1vZHVsZUtl
eTsKKyAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGU7CisgICAgVmFyaWFibGVFbnZpcm9ubWVudCBk
ZWNsYXJlZFZhcmlhYmxlczsKKyAgICBWYXJpYWJsZUVudmlyb25tZW50IGxleGljYWxWYXJpYWJs
ZXM7CisgICAgYXV0byogbW9kdWxlUmVjb3JkID0gSlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZShzdGF0
ZSwgdm0sIGdsb2JhbE9iamVjdC0+bW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwg
c291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJsZXMsIGxleGljYWxWYXJpYWJsZXMpOworICAgIGF1
dG8qIG1vZHVsZU5hbWVzcGFjZU9iamVjdCA9IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpjcmVh
dGUoc3RhdGUsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5tb2R1bGVOYW1lc3BhY2VPYmpl
Y3RTdHJ1Y3R1cmUoKSwgbW9kdWxlUmVjb3JkLCBpbnN0YW5jZUV4cG9ydHMpOworCisgICAgYXV0
byogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
c3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseUluc3Rh
bmNlU3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5SW5z
dGFuY2U6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBtb2R1bGVOYW1lc3BhY2VPYmplY3QpKTsKIH0K
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZShFeGVjU3RhdGUqIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAppbmRl
eCBlOTAzZWVmLi4wYjA1NWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcApAQCAtNTQs
NiArNTQsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
U1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogc3RhdAogICAgIGF1dG8mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
VmFsdWUgdmFsID0gc3RhdGUtPmFyZ3VtZW50KDApOworCisgICAgLy8gSWYgdGhlIGdpdmVuIGJ5
dGVzIGFyZ3VtZW50IGlzIG5vdCBhIEJ1ZmZlclNvdXJjZSwgYSBUeXBlRXJyb3IgZXhjZXB0aW9u
IGlzIHRocm93bi4KICAgICBKU0FycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9IHZhbC5nZXRPYmpl
Y3QoKSA/IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KHZhbC5nZXRPYmplY3QoKSkgOiBu
dWxscHRyOwogICAgIEpTQXJyYXlCdWZmZXJWaWV3KiBhcnJheUJ1ZmZlclZpZXcgPSB2YWwuZ2V0
T2JqZWN0KCkgPyBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4odmFsLmdldE9iamVj
dCgpKSA6IG51bGxwdHI7CiAgICAgaWYgKCEoYXJyYXlCdWZmZXIgfHwgYXJyYXlCdWZmZXJWaWV3
KSkKQEAgLTY3LDE0ICs2OSwxNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKEV4ZWNTdGF0ZSogc3RhdAogICAgIGNvbnN0
IGF1dG8qIGJhc2UgPSBhcnJheUJ1ZmZlclZpZXcgPyBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJy
YXlCdWZmZXJWaWV3LT52ZWN0b3IoKSkgOiBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZm
ZXItPmltcGwoKS0+ZGF0YSgpKTsKIAogICAgIFdhc206OlBsYW4gcGxhbih2bSwgYmFzZSArIGJ5
dGVPZmZzZXQsIGJ5dGVTaXplKTsKKyAgICAvLyBPbiBmYWlsdXJlLCBhIG5ldyBXZWJBc3NlbWJs
eS5Db21waWxlRXJyb3IgaXMgdGhyb3duLgogICAgIGlmIChwbGFuLmZhaWxlZCgpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3Jl
YXRlV2ViQXNzZW1ibHlDb21waWxlRXJyb3Ioc3RhdGUsIHBsYW4uZXJyb3JNZXNzYWdlKCkpKSk7
CiAKLSAgICAvLyBGSVhNRSB0YWtlIGNvbnRlbnQgZnJvbSBQbGFuLgorICAgIC8vIFRoZSBzcGVj
IHN0cmluZyB2YWx1ZXMgaW5zaWRlIEFzdC5tb2R1bGUgYXJlIGRlY29kZWQgYXMgVVRGOCBhcyBk
ZXNjcmliZWQgaW4gV2ViLm1kLiBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0MDIzCiAKKyAgICAvLyBPbiBzdWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUgb2JqZWN0IGlzIHJldHVybmVkIHdpdGggW1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlk
YXRlZCBBc3QubW9kdWxlLgogICAgIGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGFzSW50
ZXJuYWxGdW5jdGlvbihzdGF0ZS0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1i
bHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5
TW9kdWxlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcGxhbi5nZXRG
dW5jdGlvbnMoKSwgcGxhbi5nZXRNZW1vcnkoKSkpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRl
KQotLSAKMi4xMC4xCgo=
</data>
<flag name="review"
          id="315933"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
    <flag name="commit-queue"
          id="315934"
          type_id="3"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292983</attachid>
            <date>2016-10-26 18:46:47 -0700</date>
            <delta_ts>2016-10-26 19:21:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-API-implement-Instance.patch</filename>
            <type>text/plain</type>
            <size>22098</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSBiZmQ1MzhhMWZiNWI0ODQyZjdlNzhlZDM2MWViM2FhZmE5NTI4YjhkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBUdWUsIDI1IE9jdCAyMDE2IDE3OjE5OjI1IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gV2ViQXNz
ZW1ibHkgQVBJOiBpbXBsZW1lbnQgSW5zdGFuY2UKCkFzIGRlc2NyaWJlZCBpbjogaHR0cHM6Ly9n
aXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9KUy5tZCN3ZWJhc3NlbWJs
eWluc3RhbmNlLW9iamVjdHMKCiAtIFRha2Ugb3duZXJzaGlwIG9mIFdhc206OlBsYW4ncyBjb21w
aWxhdGlvbiByZXN1bHQgd2hlbiBzdWNjZXNzZnVsbHkgY3JlYXRpbmcgYSBKU1dlYkFzc2VtYmx5
TW9kdWxlIG9iamVjdC4KIC0gQ29uc3RydWN0IGEgYmFzaWMgSW5zdGFuY2Ugd2l0aCBhIE1vZHVs
ZS4KIC0gSGFuZGxlIHNlY29uZCBhcmd1bWVudCAoaW1wb3J0T2JqZWN0KSBvZiBXZWJBc3NlbWJs
eS5JbnN0YW5jZS4KIC0gQWRkIHJlZmVyZW5jZSB0ZXh0IGZyb20gdGhlIHNwZWMgdG8gV2ViQXNz
ZW1ibHkuTW9kdWxlJ3MgY29kZS4KIC0gRXhwb3NlIGFuZCB0ZXN0IGFuIGVtcHR5ICdleHBvcnRz
JyBNb2R1bGVOYW1lc3BhY2VPYmplY3Qgb24gV2ViQXNzZW1ibHkuSW5zdGFuY2UuCgpUaGUgaW1w
bGVtZW50YXRpb24gaXNuJ3QgY29tcGxldGUgeWV0OiBpdCByZWxpZXMgb24gZnVydGhlciB3b3Jr
IGZvciB3aGljaCBJJ3ZlIGZpbGVkIGJ1Z3MuCi0tLQogSlNUZXN0cy9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNCArKysrKysrKysrKysrCiBKU1Rlc3RzL3dh
c20vanMtYXBpL3Rlc3RfSW5zdGFuY2UuanMgICAgICAgICAgICAgICB8IDEwICsrKysrKwogSlNU
ZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2ljX2FwaS5qcyAgICAgICAgICAgICAgfCAyMiArKysr
KysrKystLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uaCAgICAgICAgICAgICAgfCAxNSArKysrKysrLQogLi4uL3dhc20vanMvSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcCAgICAgICAgICAgICAgfCAxMCArKysrLS0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIHwgIDkgKysrLS0KIC4uLi9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwIHwgMTEgKysrKy0t
CiAuLi4vSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmggICB8IDEz
ICsrKysrLS0KIC4uLi93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAg
ICAgIHwgNDEgKysrKysrKysrKysrKysrKysrKystLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvci5jcHAgICAgICAgfCAgOSArKystLQogMTEgZmlsZXMgY2hhbmdlZCwg
MTgwIGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEpT
VGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9JbnN0YW5jZS5qcwoKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
Q2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjRhMzg5Zi4uYjkwNTBjOWEgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjcgQEAKKzIwMTYtMTAtMjYgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29t
PgorCisgICAgICAgIFdlYkFzc2VtYmx5IEFQSTogaW1wbGVtZW50IEluc3RhbmNlCisKKyAgICAg
ICAgQXMgZGVzY3JpYmVkIGluOiBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWdu
L2Jsb2IvbWFzdGVyL0pTLm1kI3dlYmFzc2VtYmx5aW5zdGFuY2Utb2JqZWN0cworCisgICAgICAg
ICAtIFRha2Ugb3duZXJzaGlwIG9mIFdhc206OlBsYW4ncyBjb21waWxhdGlvbiByZXN1bHQgd2hl
biBzdWNjZXNzZnVsbHkgY3JlYXRpbmcgYSBKU1dlYkFzc2VtYmx5TW9kdWxlIG9iamVjdC4KKyAg
ICAgICAgIC0gQ29uc3RydWN0IGEgYmFzaWMgSW5zdGFuY2Ugd2l0aCBhIE1vZHVsZS4KKyAgICAg
ICAgIC0gSGFuZGxlIHNlY29uZCBhcmd1bWVudCAoaW1wb3J0T2JqZWN0KSBvZiBXZWJBc3NlbWJs
eS5JbnN0YW5jZS4KKyAgICAgICAgIC0gQWRkIHJlZmVyZW5jZSB0ZXh0IGZyb20gdGhlIHNwZWMg
dG8gV2ViQXNzZW1ibHkuTW9kdWxlJ3MgY29kZS4KKyAgICAgICAgIC0gRXhwb3NlIGFuZCB0ZXN0
IGFuIGVtcHR5ICdleHBvcnRzJyBNb2R1bGVOYW1lc3BhY2VPYmplY3Qgb24gV2ViQXNzZW1ibHku
SW5zdGFuY2UuCisKKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIGlzbid0IGNvbXBsZXRlIHll
dDogaXQgcmVsaWVzIG9uIGZ1cnRoZXIgd29yayBmb3Igd2hpY2ggSSd2ZSBmaWxlZCBidWdzLgor
CisgICAgICAgIFdlYkFzc2VtYmx5IEFQSTogaW1wbGVtZW50IEluc3RhbmNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5OTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIuCisKKyAgICAgICAgKiB3YXNtL2pzLWFwaS90ZXN0X0lu
c3RhbmNlLmpzOiBBZGRlZC4KKyAgICAgICAgKEVtcHR5TW9kdWxlKTogdXNlIHRoZSBCdWlsZGVy
LCBjcmVhdGUgdGhlIHNpbXBsZXN0IE1vZHVsZSBwb3NzaWJsZSwgYW5kIGNyZWF0ZSBhbiBJbnN0
YW5jZSBmcm9tIGl0CisgICAgICAgICogd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanM6Cisg
ICAgICAgIChjb25zdC5jLmluLmNvbnN0cnVjdG9yUHJvcGVydGllcy5zd2l0Y2gpOiBiYXNpYyB0
ZXN0cyBvZiB0aGUgQVBJCisKIDIwMTYtMTAtMjYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXQoKSBzaG91bGQgY2hl
Y2sgZm9yIGV4Y2VwdGlvbnMuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3Rf
SW5zdGFuY2UuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfSW5zdGFuY2UuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0ZTVlZQotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9JbnN0YW5jZS5qcwpAQCAtMCwwICsxLDEwIEBACitp
bXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnOworCisoZnVuY3Rpb24gRW1wdHlNb2R1bGUoKSB7CisgICAgY29u
c3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCk7CisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1
bGUoYmluKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZSht
b2R1bGUpOworICAgIGFzc2VydC5pbnN0YW5jZW9mKGluc3RhbmNlLCBXZWJBc3NlbWJseS5JbnN0
YW5jZSk7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2lj
X2FwaS5qcyBiL0pTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9iYXNpY19hcGkuanMKaW5kZXggNGVl
ODg1My4uMDU0ZWFlZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy93YXNtL2pzLWFwaS90ZXN0X2Jhc2lj
X2FwaS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfYmFzaWNfYXBpLmpzCkBAIC0y
LDcgKzIsOSBAQCBpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKIGltcG9y
dCAqIGFzIHV0aWxpdGllcyBmcm9tICcuLi91dGlsaXRpZXMuanMnOwogCiBjb25zdCB2ZXJzaW9u
ID0gMHhDOwotY29uc3QgZW1wdHlNb2R1bGUgPSBVaW50OEFycmF5Lm9mKDB4MCwgMHg2MSwgMHg3
MywgMHg2ZCwgdmVyc2lvbiwgMHgwMCwgMHgwMCwgMHgwMCk7Citjb25zdCBlbXB0eU1vZHVsZUFy
cmF5ID0gVWludDhBcnJheS5vZigweDAsIDB4NjEsIDB4NzMsIDB4NmQsIHZlcnNpb24sIDB4MDAs
IDB4MDAsIDB4MDApOworY29uc3QgaW52YWxpZENvbnN0cnVjdG9ySW5wdXRzID0gW3VuZGVmaW5l
ZCwgbnVsbCwgIiIsIDEsIHt9LCBbXV07Citjb25zdCBpbnZhbGlkSW5zdGFuY2VJbXBvcnRzID0g
W251bGwsICIiLCAxXTsKIAogY29uc3QgY2hlY2tPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSAob2Jq
LCBwcm9wLCBleHBlY3QpID0+IHsKICAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApOwpAQCAtNDksMTcgKzUxLDI3IEBAIGZvciAo
Y29uc3QgYyBpbiBjb25zdHJ1Y3RvclByb3BlcnRpZXMpIHsKICAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IFdlYkFzc2VtYmx5W2NdKCksIFR5cGVFcnJvciwgYGNhbGxpbmcgV2ViQXNzZW1ibHkuJHtj
fSBjb25zdHJ1Y3RvciB3aXRob3V0IG5ldyBpcyBpbnZhbGlkYCk7CiAgICAgc3dpdGNoIChjKSB7
CiAgICAgY2FzZSAiTW9kdWxlIjoKLSAgICAgICAgZm9yIChjb25zdCBpbnZhbGlkIG9mIFt1bmRl
ZmluZWQsICIiLCAxLCB7fSwgW11dKQorICAgICAgICBmb3IgKGNvbnN0IGludmFsaWQgb2YgaW52
YWxpZENvbnN0cnVjdG9ySW5wdXRzKQogICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBu
ZXcgV2ViQXNzZW1ibHlbY10oaW52YWxpZCksIFR5cGVFcnJvciwgYGZpcnN0IGFyZ3VtZW50IHRv
IFdlYkFzc2VtYmx5Lk1vZHVsZSBtdXN0IGJlIGFuIEFycmF5QnVmZmVyVmlldyBvciBhbiBBcnJh
eUJ1ZmZlciAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2VtYmx5W2NdKGludmFsaWQpJylgKTsKICAg
ICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgW25ldyBBcnJheUJ1ZmZlcigpLCBuZXcgRGF0YVZp
ZXcobmV3IEFycmF5QnVmZmVyKCkpLCBuZXcgSW50OEFycmF5KCksIG5ldyBVaW50OEFycmF5KCks
IG5ldyBVaW50OENsYW1wZWRBcnJheSgpLCBuZXcgSW50MTZBcnJheSgpLCBuZXcgVWludDE2QXJy
YXkoKSwgbmV3IEludDMyQXJyYXkoKSwgbmV3IFVpbnQzMkFycmF5KCksIG5ldyBGbG9hdDMyQXJy
YXkoKSwgbmV3IEZsb2F0NjRBcnJheSgpXSkKICAgICAgICAgICAgIC8vIEZJWE1FIHRoZSBmb2xs
b3dpbmcgc2hvdWxkIGJlIFdlYkFzc2VtYmx5LkNvbXBpbGVFcnJvci4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mzc2OAogICAgICAgICAgICAgYXNzZXJ0LnRocm93
cygoKSA9PiBuZXcgV2ViQXNzZW1ibHlbY10oYnVmZmVyKSwgRXJyb3IsIGBNb2R1bGUgaXMgMCBi
eXRlcywgZXhwZWN0ZWQgYXQgbGVhc3QgOCBieXRlcyAoZXZhbHVhdGluZyAnbmV3IFdlYkFzc2Vt
Ymx5W2NdKGJ1ZmZlciknKWApOwotICAgICAgICBhc3NlcnQuaW5zdGFuY2VvZihuZXcgV2ViQXNz
ZW1ibHlbY10oZW1wdHlNb2R1bGUpLCBXZWJBc3NlbWJseS5Nb2R1bGUpOworICAgICAgICBhc3Nl
cnQuaW5zdGFuY2VvZihuZXcgV2ViQXNzZW1ibHlbY10oZW1wdHlNb2R1bGVBcnJheSksIFdlYkFz
c2VtYmx5Lk1vZHVsZSk7CiAgICAgICAgIC8vIEZJWE1FIHRlc3QgbmV1dGVyZWQgVHlwZWRBcnJh
eSBhbmQgVHlwZWRBcnJheVZpZXcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjM4OTkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAiSW5zdGFuY2UiOgotICAgICAg
ICAvLyBGSVhNRSBJbXBsZW1lbnQgYW5kIHRlc3QgdGhlc2UgQVBJcyBmdXJ0aGVyLiBGb3Igbm93
IHRoZXkganVzdCB0aHJvdy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1OTc3NQotICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJseVtjXSgp
LCBFcnJvciwgYFdlYkFzc2VtYmx5IGRvZXNuJ3QgeWV0IGltcGxlbWVudCB0aGUgJHtjfSBjb25z
dHJ1Y3RvciBwcm9wZXJ0eWApOworICAgICAgICBmb3IgKGNvbnN0IGludmFsaWQgb2YgaW52YWxp
ZENvbnN0cnVjdG9ySW5wdXRzKQorICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcg
V2ViQXNzZW1ibHlbY10oaW52YWxpZCksIFR5cGVFcnJvciwgYGZpcnN0IGFyZ3VtZW50IHRvIFdl
YkFzc2VtYmx5Lkluc3RhbmNlIG11c3QgYmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgKGV2YWx1YXRp
bmcgJ25ldyBXZWJBc3NlbWJseVtjXShpbnZhbGlkKScpYCk7CisgICAgICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5W2NdKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1
bGVBcnJheSkpOworICAgICAgICBhc3NlcnQuaW5zdGFuY2VvZihpbnN0YW5jZSwgV2ViQXNzZW1i
bHkuSW5zdGFuY2UpOworICAgICAgICBmb3IgKGNvbnN0IGludmFsaWQgb2YgaW52YWxpZEluc3Rh
bmNlSW1wb3J0cykKKyAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFdlYkFzc2Vt
Ymx5W2NdKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoZW1wdHlNb2R1bGVBcnJheSksIGludmFsaWQp
LCBUeXBlRXJyb3IsIGBzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFuY2UgbXVz
dCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IChldmFsdWF0aW5nICduZXcgV2ViQXNzZW1ibHlb
Y10obmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShlbXB0eU1vZHVsZUFycmF5KSwgaW52YWxpZCknKWAp
OworICAgICAgICBhc3NlcnQubm90VW5kZWYoaW5zdGFuY2UuZXhwb3J0cyk7CisgICAgICAgIGNo
ZWNrT3duUHJvcGVydHlEZXNjcmlwdG9yKGluc3RhbmNlLCAiZXhwb3J0cyIsIHsgdHlwZW9mdmFs
dWU6ICJvYmplY3QiLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJh
YmxlOiB0cnVlIH0pOworICAgICAgICBhc3NlcnQuaXNVbmRlZihpbnN0YW5jZS5leHBvcnRzLl9f
cHJvdG9fXyk7CisgICAgICAgIGFzc2VydC5lcShSZWZsZWN0LmlzRXh0ZW5zaWJsZShpbnN0YW5j
ZS5leHBvcnRzKSwgZmFsc2UpOworICAgICAgICBhc3NlcnQuZXEoU3ltYm9sLml0ZXJhdG9yIGlu
IGluc3RhbmNlLmV4cG9ydHMsIHRydWUpOworICAgICAgICBhc3NlcnQuZXEoU3ltYm9sLnRvU3Ry
aW5nVGFnIGluIGluc3RhbmNlLmV4cG9ydHMsIHRydWUpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlICJNZW1vcnkiOgogICAgICAgICAvLyBGSVhNRSBJbXBsZW1lbnQgYW5kIHRlc3QgdGhlc2Ug
QVBJcyBmdXJ0aGVyLiBGb3Igbm93IHRoZXkganVzdCB0aHJvdy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTc3NQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTI4YTE5Zi4uNTkzNTZjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTYtMTAtMjYgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYkFzc2VtYmx5IEFQSTogaW1wbGVtZW50IEluc3RhbmNlCisKKyAgICAgICAgQXMgZGVz
Y3JpYmVkIGluOiBodHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvZGVzaWduL2Jsb2IvbWFz
dGVyL0pTLm1kI3dlYmFzc2VtYmx5aW5zdGFuY2Utb2JqZWN0cworCisgICAgICAgICAtIFRha2Ug
b3duZXJzaGlwIG9mIFdhc206OlBsYW4ncyBjb21waWxhdGlvbiByZXN1bHQgd2hlbiBzdWNjZXNz
ZnVsbHkgY3JlYXRpbmcgYSBKU1dlYkFzc2VtYmx5TW9kdWxlIG9iamVjdC4KKyAgICAgICAgIC0g
Q29uc3RydWN0IGEgYmFzaWMgSW5zdGFuY2Ugd2l0aCBhIE1vZHVsZS4KKyAgICAgICAgIC0gSGFu
ZGxlIHNlY29uZCBhcmd1bWVudCAoaW1wb3J0T2JqZWN0KSBvZiBXZWJBc3NlbWJseS5JbnN0YW5j
ZS4KKyAgICAgICAgIC0gQWRkIHJlZmVyZW5jZSB0ZXh0IGZyb20gdGhlIHNwZWMgdG8gV2ViQXNz
ZW1ibHkuTW9kdWxlJ3MgY29kZS4KKyAgICAgICAgIC0gRXhwb3NlIGFuZCB0ZXN0IGFuIGVtcHR5
ICdleHBvcnRzJyBNb2R1bGVOYW1lc3BhY2VPYmplY3Qgb24gV2ViQXNzZW1ibHkuSW5zdGFuY2Uu
CisKKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIGlzbid0IGNvbXBsZXRlIHlldDogaXQgcmVs
aWVzIG9uIGZ1cnRoZXIgd29yayBmb3Igd2hpY2ggSSd2ZSBmaWxlZCBidWdzLgorCisgICAgICAg
IFdlYkFzc2VtYmx5IEFQSTogaW1wbGVtZW50IEluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM5OTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBLZWl0aCBNaWxsZXIuCisKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46OmdldEZ1bmN0aW9ucyk6IGFsbG93IHRyYW5zZmVyaW5nIHN0YXRlIG91
dAorICAgICAgICAoSlNDOjpXYXNtOjpQbGFuOjpnZXRNZW1vcnkpOiBhbGxvdyB0cmFuc2Zlcmlu
ZyBzdGF0ZSBvdXQKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHA6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbik6IHNldCB0aGUgTW9k
dWxlTmFtZXNwYWNlT2JqZWN0LCBhbmQgZXhwb3NlIGl0IGFzICJleHBvcnRzIgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOiB2aXNpdCB0aGUgTW9k
dWxlTmFtZXNwYWNlT2JqZWN0IGNoaWxkCisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKTogbW92ZSBpbiB0aGUg
Y29tcGlsZWQgZnVuY3Rpb25zIGFuZCB0aGUgbWVtb3J5CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5z
dGFuY2UpOiB0YWtlIHRoZSBNb2R1bGUsIGV4dHJhY3QgdGhlIFBsYW4ncyByZXN1bHRzLCBhbmQg
Y3JlYXRlIHRoZSAoZW1wdHkgZm9yIG5vdykgTW9kdWxlTmFtZXNwYWNlT2JqZWN0CisgICAgICAg
ICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZSk6IGFkZCBhIGZldyBjb21tZW50cyBmcm9t
IHRoZSBzcGVjLCBhbmQgcGFzcyBvdXQgdGhlIFBsYW4ncyByZXN1bHRzCisKIDIwMTYtMTAtMjYg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3OjpzZXQoKSBzaG91bGQgY2hlY2sgZm9yIGV4Y2VwdGlvbnMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVBsYW4uaAppbmRleCBiNzk0ZjFlLi5iODRmOWQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKQEAgLTM4LDYgKzM4LDggQEAgY2xhc3MgTWVtb3J5
OwogCiBjbGFzcyBQbGFuIHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4+IENvbXBpbGVkRnVuY3Rpb25zOworCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgUGxhbihWTSYsIFZlY3Rvcjx1aW50OF90Pik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgUGxhbihWTSYsIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5QbGFuKCk7CkBAIC02Myw5ICs2NSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CiAgICAgICAgIHJldHVybiBtX21lbW9yeS5nZXQoKTsK
ICAgICB9CisgICAgCisgICAgQ29tcGlsZWRGdW5jdGlvbnMqIGdldEZ1bmN0aW9ucygpCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOworICAgICAgICByZXR1cm4gJm1f
cmVzdWx0OworICAgIH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5PiogZ2V0TWVtb3J5KCkK
KyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgICAgIHJldHVy
biAmbV9tZW1vcnk7CisgICAgfQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8RnVuY3Rpb25Db21waWxhdGlvbj4+IG1fcmVzdWx0OworICAgIENvbXBpbGVkRnVuY3Rpb25z
IG1fcmVzdWx0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZW1vcnk+IG1fbWVtb3J5OwogICAgIGJv
b2wgbV9mYWlsZWQgeyB0cnVlIH07CiAgICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAKaW5kZXggYjFkYTRlMi4uMWQ3YmMzMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0yOSwxMyAr
MjksMTQgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLUpTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSog
SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqIG1vZHVsZU5hbWVzcGFjZU9iamVjdCkKIHsKICAg
ICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlJbnN0YW5jZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgc3RydWN0dXJl
KTsKLSAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIGluc3RhbmNlLT5maW5p
c2hDcmVhdGlvbih2bSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0KTsKICAgICByZXR1cm4gaW5zdGFu
Y2U7CiB9CiAKQEAgLTQ5LDkgKzUwLDExIEBAIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6SlNXZWJB
c3NlbWJseUluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiB9CiAKLXZv
aWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit2b2lkIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdCogbW9kdWxlTmFtZXNwYWNlT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBtX21vZHVsZU5hbWVzcGFjZU9iamVjdC5zZXQodm0sIHRoaXMsIG1v
ZHVsZU5hbWVzcGFjZU9iamVjdCk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZXhwb3J0cyIpLCBtX21vZHVsZU5hbWVzcGFj
ZU9iamVjdC5nZXQoKSwgTm9uZSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogfQog
CkBAIC02Niw2ICs2OSw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseUluc3RhbmNlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9tb2R1bGVOYW1lc3BhY2VPYmplY3QpOwogfQogCiBjb25zdCBDbGFzc0luZm8gSlNXZWJB
c3NlbWJseUluc3RhbmNlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5JbnN0YW5jZSIsICZCYXNl
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUluc3RhbmNlKSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaAppbmRleCBiMjFlNDVmLi44N2FjYzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaApAQCAtMzEsMjEg
KzMxLDI2IEBACiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7CisgICAg
CitjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDsKIAogY2xhc3MgSlNXZWJBc3NlbWJseUlu
c3RhbmNlIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0aWMgSlNXZWJBc3Nl
bWJseUluc3RhbmNlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBKU01vZHVsZU5hbWVzcGFjZU9i
amVjdCopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKIHByb3RlY3RlZDoK
ICAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3By
aXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0PiBtX21vZHVs
ZU5hbWVzcGFjZU9iamVjdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAppbmRl
eCBmMjhhNGZjLi42NWNjYTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcApAQCAtMjksMTIgKzI5LDE1IEBACiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
Ildhc21Gb3JtYXQuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNXZWJBc3NlbWJseU1vZHVsZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CitKU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpGdW5j
dGlvbkNvbXBpbGF0aW9uPj4qIGNvbXBpbGVkRnVuY3Rpb25zLCBzdGQ6OnVuaXF1ZV9wdHI8V2Fz
bTo6TWVtb3J5PiogbWVtb3J5KQogewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1i
bHlNb2R1bGUodm0sIHN0cnVjdHVyZSk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwKSkgSlNXZWJBc3Nl
bWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBjb21waWxlZEZ1bmN0aW9ucywgbWVtb3J5KTsKICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0K
QEAgLTQ0LDggKzQ3LDEwIEBAIFN0cnVjdHVyZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9k
dWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitK
U1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxh
dGlvbj4+KiBjb21waWxlZEZ1bmN0aW9ucywgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1lbW9yeT4q
IG1lbW9yeSkKICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fY29tcGlsZWRGdW5j
dGlvbnMoV1RGTW92ZSgqY29tcGlsZWRGdW5jdGlvbnMpKQorICAgICwgbV9tZW1vcnkoV1RGTW92
ZSgqbWVtb3J5KSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCmluZGV4IGJlN2Y2OTIuLmE0MzhhNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgK
QEAgLTMyLDIwICszMiwyOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20g
eworc3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRpb247CitjbGFzcyBNZW1vcnk7Cit9CisKIGNsYXNz
IEpTV2ViQXNzZW1ibHlNb2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVi
bGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAotICAgIHN0YXRp
YyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBzdGF0
aWMgSlNXZWJBc3NlbWJseU1vZHVsZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPj4qLCBzdGQ6OnVuaXF1ZV9w
dHI8V2FzbTo6TWVtb3J5PiopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAK
IHByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKik7Cisg
ICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4+Kiwgc3RkOjp1bmlxdWVfcHRyPFdhc206
Ok1lbW9yeT4qKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPj4gbV9jb21waWxlZEZ1bmN0aW9uczsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TWVtb3J5PiBtX21lbW9yeTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNTViZjRhMS4uYTlm
ZjExZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCkBAIC0zMCw2ICszMCwxMCBA
QAogCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU01v
ZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNl
UHJvdG90eXBlLmgiCiAKICNpbmNsdWRlICJXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
bHV0LmgiCkBAIC00NSw5ICs0OSw0MiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzXwogCiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5z
dGFuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0
YXRlLCBzY29wZSwgY3JlYXRlRXJyb3Ioc3RhdGUsIEFTQ0lJTGl0ZXJhbCgiV2ViQXNzZW1ibHkg
ZG9lc24ndCB5ZXQgaW1wbGVtZW50IHRoZSBJbnN0YW5jZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eSIp
KSkpOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CisKKyAgICAvLyBJZiBtb2R1bGVPYmplY3QgaXMgbm90IGEgV2ViQXNzZW1ibHkuTW9kdWxl
IGluc3RhbmNlLCBhIFR5cGVFcnJvciBpcyB0aHJvd24uCisgICAgSlNXZWJBc3NlbWJseU1vZHVs
ZSogbW9kdWxlID0ganNEeW5hbWljQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oc3RhdGUtPmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoIW1vZHVsZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwg
QVNDSUlMaXRlcmFsKCJmaXJzdCBhcmd1bWVudCB0byBXZWJBc3NlbWJseS5JbnN0YW5jZSBtdXN0
IGJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGlt
ZVR5cGVGb3JWYWx1ZShzdGF0ZS0+YXJndW1lbnQoMCkpKSkpOworCisgICAgLy8gSWYgdGhlIGlt
cG9ydE9iamVjdCBwYXJhbWV0ZXIgaXMgbm90IHVuZGVmaW5lZCBhbmQgVHlwZShpbXBvcnRPYmpl
Y3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9yIGlzIHRocm93bi4KKyAgICBKU1ZhbHVlIGlt
cG9ydEFyZ3VtZW50ID0gc3RhdGUtPmFyZ3VtZW50KDEpOworICAgIEpTT2JqZWN0KiBpbXBvcnRP
YmplY3QgPSBpbXBvcnRBcmd1bWVudC5nZXRPYmplY3QoKTsKKyAgICBpZiAoIWltcG9ydEFyZ3Vt
ZW50LmlzVW5kZWZpbmVkKCkgJiYgIWltcG9ydE9iamVjdCkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihz
dGF0ZSwgQVNDSUlMaXRlcmFsKCJzZWNvbmQgYXJndW1lbnQgdG8gV2ViQXNzZW1ibHkuSW5zdGFu
Y2UgbXVzdCBiZSB1bmRlZmluZWQgb3IgYW4gT2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRl
ciwgcnVudGltZVR5cGVGb3JWYWx1ZShpbXBvcnRBcmd1bWVudCkpKSk7CisKKyAgICAvLyBGSVhN
RSB1c2UgdGhlIGltcG9ydE9iamVjdC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDAzOQorICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZS5pbXBvcnRzIGlzIG5v
dCBlbXB0eSBhbmQgVHlwZShpbXBvcnRPYmplY3QpIGlzIG5vdCBPYmplY3QsIGEgVHlwZUVycm9y
IGlzIHRocm93bi4KKworICAgIC8vIEZJWE1FIFN0cmluZyB0aGluZ3MgZnJvbSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MDIzCisgICAgLy8gTGV0IGV4cG9ydHMg
YmUgYSBsaXN0IG9mIChzdHJpbmcsIEpTIHZhbHVlKSBwYWlycyB0aGF0IGlzIG1hcHBlZCBmcm9t
IGVhY2ggZXh0ZXJuYWwgdmFsdWUgZSBpbiBpbnN0YW5jZS5leHBvcnRzIGFzIGZvbGxvd3M6Cisg
ICAgSWRlbnRpZmllclNldCBpbnN0YW5jZUV4cG9ydHM7CisgICAgZm9yIChjb25zdCBhdXRvJiBu
YW1lIDogaW5zdGFuY2VFeHBvcnRzKSB7CisgICAgICAgIC8vIEZJWE1FIHZhbGlkYXRlIGFjY29y
ZGluZyB0byBNb2R1bGUuSW5zdGFuY2Ugc3BlYy4KKyAgICAgICAgKHZvaWQpbmFtZTsKKyAgICB9
CisgICAgSWRlbnRpZmllciBtb2R1bGVLZXk7CisgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlOwor
ICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgZGVjbGFyZWRWYXJpYWJsZXM7CisgICAgVmFyaWFibGVF
bnZpcm9ubWVudCBsZXhpY2FsVmFyaWFibGVzOworICAgIGF1dG8qIG1vZHVsZVJlY29yZCA9IEpT
TW9kdWxlUmVjb3JkOjpjcmVhdGUoc3RhdGUsIHZtLCBnbG9iYWxPYmplY3QtPm1vZHVsZVJlY29y
ZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBs
ZXhpY2FsVmFyaWFibGVzKTsKKyAgICBhdXRvKiBtb2R1bGVOYW1lc3BhY2VPYmplY3QgPSBKU01v
ZHVsZU5hbWVzcGFjZU9iamVjdDo6Y3JlYXRlKHN0YXRlLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+bW9kdWxlTmFtZXNwYWNlT2JqZWN0U3RydWN0dXJlKCksIG1vZHVsZVJlY29yZCwgaW5z
dGFuY2VFeHBvcnRzKTsKKworICAgIGF1dG8qIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGdsb2Jh
bE9iamVjdC0+V2ViQXNzZW1ibHlJbnN0YW5jZVN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgbW9k
dWxlTmFtZXNwYWNlT2JqZWN0KSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGxKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdGF0ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZTkwM2VlZi4uMGIwNTVhMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVDb25zdHJ1Y3Rvci5jcHAKQEAgLTU0LDYgKzU0LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0
YXQKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHZhbCA9IHN0YXRlLT5hcmd1bWVudCgwKTsK
KworICAgIC8vIElmIHRoZSBnaXZlbiBieXRlcyBhcmd1bWVudCBpcyBub3QgYSBCdWZmZXJTb3Vy
Y2UsIGEgVHlwZUVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICAgSlNBcnJheUJ1ZmZlciog
YXJyYXlCdWZmZXIgPSB2YWwuZ2V0T2JqZWN0KCkgPyBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZm
ZXIqPih2YWwuZ2V0T2JqZWN0KCkpIDogbnVsbHB0cjsKICAgICBKU0FycmF5QnVmZmVyVmlldyog
YXJyYXlCdWZmZXJWaWV3ID0gdmFsLmdldE9iamVjdCgpID8ganNEeW5hbWljQ2FzdDxKU0FycmF5
QnVmZmVyVmlldyo+KHZhbC5nZXRPYmplY3QoKSkgOiBudWxscHRyOwogICAgIGlmICghKGFycmF5
QnVmZmVyIHx8IGFycmF5QnVmZmVyVmlldykpCkBAIC02NywxNCArNjksMTcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShF
eGVjU3RhdGUqIHN0YXQKICAgICBjb25zdCBhdXRvKiBiYXNlID0gYXJyYXlCdWZmZXJWaWV3ID8g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyVmlldy0+dmVjdG9yKCkpIDogc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEoKSk7CiAKICAgICBXYXNt
OjpQbGFuIHBsYW4odm0sIGJhc2UgKyBieXRlT2Zmc2V0LCBieXRlU2l6ZSk7CisgICAgLy8gT24g
ZmFpbHVyZSwgYSBuZXcgV2ViQXNzZW1ibHkuQ29tcGlsZUVycm9yIGlzIHRocm93bi4KICAgICBp
ZiAocGxhbi5mYWlsZWQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4
Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yKHN0YXRl
LCBwbGFuLmVycm9yTWVzc2FnZSgpKSkpOwogCi0gICAgLy8gRklYTUUgdGFrZSBjb250ZW50IGZy
b20gUGxhbi4KKyAgICAvLyBUaGUgc3BlYyBzdHJpbmcgdmFsdWVzIGluc2lkZSBBc3QubW9kdWxl
IGFyZSBkZWNvZGVkIGFzIFVURjggYXMgZGVzY3JpYmVkIGluIFdlYi5tZC4gRklYTUUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDAyMwogCisgICAgLy8gT24gc3Vj
Y2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIFtb
TW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1vZHVsZS4KICAgICBhdXRvKiBzdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwg
c3RhdGUtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oc3RhdGUtPmNhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3RydWN0dXJlKCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRl
KHZtLCBzdHJ1Y3R1cmUsIHBsYW4uZ2V0RnVuY3Rpb25zKCksIHBsYW4uZ2V0TWVtb3J5KCkpKTsK
IH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1i
bHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKLS0gCjIuMTAuMQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>