<?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>149093</bug_id>
          
          <creation_ts>2015-09-12 13:45:42 -0700</creation_ts>
          <short_desc>Implement calls to JavaScript functions in WebAssembly</short_desc>
          <delta_ts>2015-09-15 13:00:42 -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>146064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sukolsak Sakshuwong">sukolsak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1125407</commentid>
    <comment_count>0</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-12 13:45:42 -0700</bug_when>
    <thetext>Implement calls to JavaScript functions in WebAssembly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125419</commentid>
    <comment_count>1</comment_count>
      <attachid>261064</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-12 15:20:55 -0700</bug_when>
    <thetext>Created attachment 261064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125834</commentid>
    <comment_count>2</comment_count>
      <attachid>261064</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-14 18:19:04 -0700</bug_when>
    <thetext>Comment on attachment 261064
Patch

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

&gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:53
&gt; +    : m_exec(exec)

We should avoid doing this.  ExecState* really means a frame pointer, so it&apos;s only valid during execution, and using it here can cause three other problems:
1) Impossible to make this code run concurrently.
2) Too easy to introduce user-observable effects.  We usually only pass around ExecState* when we&apos;re in a context where it&apos;s OK to have user-observed effects.
3) Too easy to make the parser impure - i.e. somehow dependent on the current state of the world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125897</commentid>
    <comment_count>3</comment_count>
      <attachid>261064</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-09-14 22:54:32 -0700</bug_when>
    <thetext>Comment on attachment 261064
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WASMModuleParser.cpp:53
&gt;&gt; +    : m_exec(exec)
&gt; 
&gt; We should avoid doing this.  ExecState* really means a frame pointer, so it&apos;s only valid during execution, and using it here can cause three other problems:
&gt; 1) Impossible to make this code run concurrently.
&gt; 2) Too easy to introduce user-observable effects.  We usually only pass around ExecState* when we&apos;re in a context where it&apos;s OK to have user-observed effects.
&gt; 3) Too easy to make the parser impure - i.e. somehow dependent on the current state of the world.

Currently, in asm.js[1] and our WebAssembly implementation, we use the simple object as the set of the exported names.
So to look up the property from it, we need ExecState*... (I don&apos;t think adding new method getOwnPropertySlot(VM&amp; ... ) to a lot of JSCell&apos;s derived class is good.)
But seeing the asm.js spec, it says that &quot;all property access must resolve to data properties;&quot;.
So getOwnPropertySlot does not cause any observable effect if we check the slot with `slot.isValue()` and retrieve the value.
What do you think of

1. Not storing ExecState* to the member field. It&apos;s transient value, so storing to the member is not good. Passing it as the parameter is better.
2. Using getOwnPropertySlot and ExecState* and writing the comment about &quot;The imported binding should be data property. We only retrieve the data property. So it does not cause any observable effect&quot;.
3. We should not use ExecState* except for getImportedValue.

And I believe this code will be replaced with the other one in the future, because

1. I believe that WebAssembly will be integrated into ES6 module loader. At that time, we don&apos;t use the object to link the functions. (currently, nothing about WebAssembly + Module is defined yet)
2. When the proxy is introduced, even `getOwnPropertySlot` becomes observable (Even [[HasProperty]] operation can throw errors!). So asm.js&apos; linking semantics will be recasted. Or WebAssembly will replace  this semantics.

[1]: http://asmjs.org/spec/latest/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125931</commentid>
    <comment_count>4</comment_count>
      <attachid>261186</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-15 04:18:38 -0700</bug_when>
    <thetext>Created attachment 261186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125936</commentid>
    <comment_count>5</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-15 04:45:10 -0700</bug_when>
    <thetext>Thanks for the comments. I have made the following changes:

- Use only data properties. This should not cause any user-observable effect.

- Pass ExecState* as a parameter. Since we use only data properties, we shouldn&apos;t have to use ExecState*. But this seems to require a lot of code changes and is probably not worth the effort as there are no details about how WASM imports work yet.

- The second argument to loadWebAssembly() is not required if the module doesn&apos;t import any value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126096</commentid>
    <comment_count>6</comment_count>
      <attachid>261186</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-15 13:00:38 -0700</bug_when>
    <thetext>Comment on attachment 261186
Patch

Clearing flags on attachment: 261186

Committed r189822: &lt;http://trac.webkit.org/changeset/189822&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126097</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-15 13:00:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261064</attachid>
            <date>2015-09-12 15:20:55 -0700</date>
            <delta_ts>2015-09-15 04:18:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149093-20150912182056.patch</filename>
            <type>text/plain</type>
            <size>26523</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NjJkYzg1M2EzNzY2OWQ3ZmQ5ZDNmYjMyY2QwOWNjNGZlMmM4NzZjLi40YTIzM2NmZWY3MmQzMmIx
ZGFjOGMwYzE5YWZiNDhhYTIyYmEzMTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NCBAQAorMjAxNS0wOS0xMiAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2FsbHMgdG8gSmF2YVNjcmlwdCBmdW5jdGlv
bnMgaW4gV2ViQXNzZW1ibHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0OTA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBjYWxscyB0byBKYXZhU2NyaXB0IGZ1bmN0
aW9ucyBpbiBXZWJBc3NlbWJseS4KKyAgICAgICAgV2ViQXNzZW1ibHkgZnVuY3Rpb25zIGNhbiBv
bmx5IGNhbGwgSmF2YVNjcmlwdCBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgICAgICAgaW1wb3J0ZWQg
dG8gdGhlaXIgbW9kdWxlIHZpYSBhIGRpY3Rpb25hcnkgdGhhdCBpcyBwYXNzZWQgaW50bworICAg
ICAgICBsb2FkV2ViQXNzZW1ibHkoKS4gUmVmZXJlbmNlcyB0byBKYXZhU2NyaXB0IGZ1bmN0aW9u
cyBhcmUgcmVzb2x2ZWQgYXQKKyAgICAgICAgdGhlIG1vZHVsZSdzIGxvYWQgdGltZSwganVzdCBs
aWtlIGFzbS5qcy4KKworICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KToKKyAg
ICAgICAgKiB0ZXN0cy9zdHJlc3Mvd2FzbS1hcml0aG1ldGljLWZsb2F0MzIuanM6CisgICAgICAg
ICogdGVzdHMvc3RyZXNzL3dhc20tYXJpdGhtZXRpYy1mbG9hdDY0LmpzOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy93YXNtLWFyaXRobWV0aWMtaW50MzIuanM6CisgICAgICAgICogdGVzdHMvc3Ry
ZXNzL3dhc20tY2FsbHMuanM6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dhc20tY29udHJvbC1m
bG93LmpzOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy93YXNtLWdsb2JhbHMuanM6CisgICAgICAg
ICogdGVzdHMvc3RyZXNzL3dhc20tbG9jYWxzLmpzOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy93
YXNtLXJlbGF0aW9uYWwuanM6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dhc20tdHlwZS1jb252
ZXJzaW9uLmpzOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy93YXNtL2NhbGxzLndhc206CisgICAg
ICAgICogd2FzbS9KU1dBU01Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vSlNXQVNNTW9kdWxlLmg6CisgICAgICAg
IChKU0M6OkpTV0FTTU1vZHVsZTo6aW1wb3J0ZWRGdW5jdGlvbnMpOgorICAgICAgICAqIHdhc20v
V0FTTUZ1bmN0aW9uQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGls
ZXI6OmJ1aWxkQ2FsbEltcG9ydCk6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkz
Mik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW1wb3J0RXhw
cmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxs
SW1wb3J0KToKKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvblBhcnNlci5oOgorICAgICAgICAq
IHdhc20vV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpXQVNNRnVu
Y3Rpb25TeW50YXhDaGVja2VyOjpidWlsZENhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkQ2FsbEltcG9ydCk6CisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OnVwZGF0ZVRlbXBTdGFja0hlaWdodEZvckNhbGwp
OgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OldB
U01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpXQVNNTW9k
dWxlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNl
RnVuY3Rpb25JbXBvcnRTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2Vy
OjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpn
ZXRJbXBvcnRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6cGFyc2VXZWJBc3NlbWJseSk6CisgICAg
ICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6CisKIDIwMTUtMDktMTEgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxODk1ODUpOiBydW4t
cGVyZi10ZXN0cyBTcGVlZG9tZXRlciBmYWlscyB3aXRoIGEgY29uc29sZSBlcnJvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAppbmRleCA1Y2Q5Mjc4ODQyZjZkZDU1ZTRmODgyNGIxZGEwNTNiOGE3ZGNmMmFl
Li4xMDk2YmUxZDIxM2RiZWRjNmEyOTgyMDE2NjlkOTFiOTM3Y2EyNTdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcApAQCAtNjc5LDcgKzY3OSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rp
b24odm0sICJkcmFpbk1pY3JvdGFza3MiLCBmdW5jdGlvbkRyYWluTWljcm90YXNrcywgMCk7CiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0gICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibG9hZFdl
YkFzc2VtYmx5IiwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHksIDEpOworICAgICAgICBhZGRGdW5j
dGlvbih2bSwgImxvYWRXZWJBc3NlbWJseSIsIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5LCAyKTsK
ICNlbmRpZgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImxvYWRNb2R1bGUiLCBmdW5jdGlvbkxv
YWRNb2R1bGUsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNoZWNrTW9kdWxlU3ludGF4
IiwgZnVuY3Rpb25DaGVja01vZHVsZVN5bnRheCwgMSk7CkBAIC0xNDU4LDggKzE0NTgsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJseShFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxk
IG5vdCBvcGVuIGZpbGUuIikpKSk7CiAgICAgUmVmUHRyPFdlYkFzc2VtYmx5U291cmNlUHJvdmlk
ZXI+IHNvdXJjZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Jj4oYnVmZmVyKSwgZmlsZU5hbWUpOwogICAg
IFNvdXJjZUNvZGUgc291cmNlKHNvdXJjZVByb3ZpZGVyKTsKKworICAgIEpTVmFsdWUgaW1wb3J0
c1ZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgUkVMRUFTRV9BU1NFUlQoaW1wb3J0c1Zh
bHVlLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBpbXBvcnRzID0gaW1wb3J0c1ZhbHVlLmdl
dE9iamVjdCgpOworCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBKU1dBU01Nb2R1bGUq
IG1vZHVsZSA9IHBhcnNlV2ViQXNzZW1ibHkoZXhlYywgc291cmNlLCBlcnJvck1lc3NhZ2UpOwor
ICAgIEpTV0FTTU1vZHVsZSogbW9kdWxlID0gcGFyc2VXZWJBc3NlbWJseShleGVjLCBzb3VyY2Us
IGltcG9ydHMsIGVycm9yTWVzc2FnZSk7CiAgICAgaWYgKCFtb2R1bGUpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVT
eW50YXhFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShtb2R1bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy93YXNtLWFyaXRobWV0aWMtZmxvYXQzMi5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3Mvd2FzbS1hcml0aG1ldGljLWZsb2F0MzIuanMKaW5kZXggYzgxY2JmYTYyOTJk
NDdkMzJhZWFiNDczN2ZhOWY3NDkwMjkzOWNhMy4uYjI2OThkY2JjYTg3NWJiMmVmODE5MGIyYTVj
MmQ5OTdiODkwODM2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy93YXNtLWFyaXRobWV0aWMtZmxvYXQzMi5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3dhc20tYXJpdGhtZXRpYy1mbG9hdDMyLmpzCkBAIC0yMyw2ICsyMyw2
IEBAIGZ1bmN0aW9uIGFzbU1vZHVsZShnbG9iYWwsIGVudiwgYnVmZmVyKSB7CiB9CiAqLwogCi12
YXIgbW9kdWxlID0gbG9hZFdlYkFzc2VtYmx5KCJ3YXNtL2FyaXRobWV0aWMtZmxvYXQzMi53YXNt
Iik7Cit2YXIgbW9kdWxlID0gbG9hZFdlYkFzc2VtYmx5KCJ3YXNtL2FyaXRobWV0aWMtZmxvYXQz
Mi53YXNtIiwgeyB9KTsKIAogc2hvdWxkQmUobW9kdWxlLm51bWJlcigpLCAwLjUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWFyaXRobWV0aWMt
ZmxvYXQ2NC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS1hcml0
aG1ldGljLWZsb2F0NjQuanMKaW5kZXggOGViNWU5ZjA2MTY5NTgwMTk3NWMzZjBiYTExMzc1ZWVk
NWQ5MjE0Mi4uNWYwMGJhMTU5NTEwNjNjYTI5MmQ2MWY2MzRmOTI1MjBhMDk2NTMxMCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWFyaXRobWV0aWMt
ZmxvYXQ2NC5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20t
YXJpdGhtZXRpYy1mbG9hdDY0LmpzCkBAIC0yMSw2ICsyMSw2IEBAIGZ1bmN0aW9uIGFzbU1vZHVs
ZShnbG9iYWwsIGVudiwgYnVmZmVyKSB7CiB9CiAqLwogCi12YXIgbW9kdWxlID0gbG9hZFdlYkFz
c2VtYmx5KCJ3YXNtL2FyaXRobWV0aWMtZmxvYXQ2NC53YXNtIik7Cit2YXIgbW9kdWxlID0gbG9h
ZFdlYkFzc2VtYmx5KCJ3YXNtL2FyaXRobWV0aWMtZmxvYXQ2NC53YXNtIiwgeyB9KTsKIAogc2hv
dWxkQmUobW9kdWxlLm51bWJlcigpLCA0LjIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWFyaXRobWV0aWMtaW50MzIuanMgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20tYXJpdGhtZXRpYy1pbnQzMi5qcwppbmRleCBi
ZjgzMTlhNjQxNDYxYWFlNmM2ZTNmOTEyZTgzYjY1MGI0Y2FhZGY4Li4wYzA1ZWVmMjRmYWJlNTM0
ZjUxZDU4NjdhYjFkM2MzMmYwY2RlOGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3dhc20tYXJpdGhtZXRpYy1pbnQzMi5qcworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20tYXJpdGhtZXRpYy1pbnQzMi5qcwpAQCAtMTUz
LDcgKzE1Myw3IEBAIGZ1bmN0aW9uIGFzbU1vZHVsZShnbG9iYWwsIGVudiwgYnVmZmVyKSB7CiB9
CiAqLwogCi12YXIgbW9kdWxlID0gbG9hZFdlYkFzc2VtYmx5KCJ3YXNtL2FyaXRobWV0aWMtaW50
MzIud2FzbSIpOwordmFyIG1vZHVsZSA9IGxvYWRXZWJBc3NlbWJseSgid2FzbS9hcml0aG1ldGlj
LWludDMyLndhc20iLCB7IH0pOwogCiBzaG91bGRCZShtb2R1bGUubmVnYXRlKDQyKSwgLTQyKTsK
IHNob3VsZEJlKG1vZHVsZS5hZGQoMSwgMiksIDMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWNhbGxzLmpzIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy93YXNtLWNhbGxzLmpzCmluZGV4IDQyODY1NTkxZTk4ZjI0N2E5N2Iy
YmU1YjRkYmUwNWIwYmMzODU4M2YuLmZlMTE1OWMwYTliZmQ4NGRhOGNmZTU4ZDJiYWQ0YTdmMDc3
ZWI0YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2Fz
bS1jYWxscy5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20t
Y2FsbHMuanMKQEAgLTgsOSArOCwxMiBAQCBmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVj
dGVkKSB7CiAvKgogd2FzbS9jYWxscy53YXNtIGlzIGdlbmVyYXRlZCBieSBwYWNrLWFzbWpzIDxo
dHRwczovL2dpdGh1Yi5jb20vV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTE+IGZyb20g
dGhlIGZvbGxvd2luZyBzY3JpcHQ6CiAKLWZ1bmN0aW9uIGFzbU1vZHVsZShnbG9iYWwsIGVudiwg
YnVmZmVyKSB7CitmdW5jdGlvbiBhc21Nb2R1bGUoZ2xvYmFsLCBpbXBvcnRzLCBidWZmZXIpIHsK
ICAgICAidXNlIGFzbSI7CiAKKyAgICB2YXIgc3VtID0gaW1wb3J0cy5zdW07CisgICAgdmFyIG1h
eCA9IGltcG9ydHMubWF4OworCiAgICAgZnVuY3Rpb24gZmlib25hY2NpKHgpIHsKICAgICAgICAg
eCA9IHggfCAwOwogICAgICAgICBpZiAoKHggfCAwKSA8PSAxKQpAQCAtMzIsMTYgKzM1LDM3IEBA
IGZ1bmN0aW9uIGFzbU1vZHVsZShnbG9iYWwsIGVudiwgYnVmZmVyKSB7CiAgICAgICAgIHJldHVy
biAoKCh4ICogeSkgfCAwKSAvIChnY2QoeCwgeSkgfCAwKSkgfCAwOwogICAgIH0KIAorICAgIGZ1
bmN0aW9uIGNhbGxTdW0oeCwgeSkgeworICAgICAgICB4ID0geCB8IDA7CisgICAgICAgIHkgPSB5
IHwgMDsKKyAgICAgICAgcmV0dXJuIHN1bSh4LCB5KSB8IDA7CisgICAgfQorCisgICAgZnVuY3Rp
b24gY2FsbE1heCh4LCB5KSB7CisgICAgICAgIHggPSB4IHwgMDsKKyAgICAgICAgeSA9IHkgfCAw
OworICAgICAgICByZXR1cm4gbWF4KHgsIHkpIHwgMDsKKyAgICB9CisKICAgICByZXR1cm4gewog
ICAgICAgICBmaWJvbmFjY2k6IGZpYm9uYWNjaSwKICAgICAgICAgZ2NkOiBnY2QsCiAgICAgICAg
IGxjbTogbGNtLAorICAgICAgICBjYWxsU3VtOiBjYWxsU3VtLAorICAgICAgICBjYWxsTWF4OiBj
YWxsTWF4LAogICAgIH07CiB9CiAqLwogCi12YXIgbW9kdWxlID0gbG9hZFdlYkFzc2VtYmx5KCJ3
YXNtL2NhbGxzLndhc20iKTsKK3ZhciBpbXBvcnRzID0geworICAgIHN1bTogKHgsIHkpID0+IHgg
KyB5LAorICAgIG1heDogTWF0aC5tYXgsCit9OwordmFyIG1vZHVsZSA9IGxvYWRXZWJBc3NlbWJs
eSgid2FzbS9jYWxscy53YXNtIiwgaW1wb3J0cyk7CiAKIHNob3VsZEJlKG1vZHVsZS5maWJvbmFj
Y2koMTApLCA4OSk7CiBzaG91bGRCZShtb2R1bGUuZ2NkKDE1LCAyNSksIDUpOwogc2hvdWxkQmUo
bW9kdWxlLmxjbSgxNSwgMjUpLCA3NSk7CisKK3Nob3VsZEJlKG1vZHVsZS5jYWxsU3VtKDEsIDIp
LCAzKTsKK3Nob3VsZEJlKG1vZHVsZS5jYWxsTWF4KDEsIDIpLCAyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS1jb250cm9sLWZsb3cuanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20tY29udHJvbC1mbG93LmpzCmlu
ZGV4IGMxNDA2NGM2YzJhYTc2ZGQ0ZDQ0Y2ZiY2I1NGM0NTM1NDg4N2E3NDEuLjQ1N2JjMDU4Yjhi
YzdhN2VjOWZmZjc0MjlhYjk2YWU4MzRmOTEzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS1jb250cm9sLWZsb3cuanMKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWNvbnRyb2wtZmxvdy5qcwpAQCAtMjYxLDcg
KzI2MSw3IEBAIGZ1bmN0aW9uIGFzbU1vZHVsZShnbG9iYWwsIGVudiwgYnVmZmVyKSB7CiB9CiAq
LwogCi12YXIgbW9kdWxlID0gbG9hZFdlYkFzc2VtYmx5KCJ3YXNtL2NvbnRyb2wtZmxvdy53YXNt
Iik7Cit2YXIgbW9kdWxlID0gbG9hZFdlYkFzc2VtYmx5KCJ3YXNtL2NvbnRyb2wtZmxvdy53YXNt
IiwgeyB9KTsKIAogc2hvdWxkQmUobW9kdWxlLmlmVHJ1ZSgpLCAxKTsKIHNob3VsZEJlKG1vZHVs
ZS5pZkZhbHNlKCksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy93YXNtLWdsb2JhbHMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3dhc20tZ2xvYmFscy5qcwppbmRleCA0ZWU4YzczMWI4NmVmYTExMzM2MjM0OTg2MTcyNWVk
OGZmMDdjZDc1Li5hZjQ1NzQyYzVhNWFkNWZhMjNkYTRiMTRmZmRhNDI1N2VhMDM4YjcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20tZ2xvYmFscy5q
cworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20tZ2xvYmFscy5q
cwpAQCAtNTQsNyArNTQsNyBAQCBmdW5jdGlvbiBhc21Nb2R1bGUoZ2xvYmFsLCBlbnYsIGJ1ZmZl
cikgewogfQogKi8KIAotdmFyIG1vZHVsZSA9IGxvYWRXZWJBc3NlbWJseSgid2FzbS9nbG9iYWxz
Lndhc20iKTsKK3ZhciBtb2R1bGUgPSBsb2FkV2ViQXNzZW1ibHkoIndhc20vZ2xvYmFscy53YXNt
IiwgeyB9KTsKIAogc2hvdWxkQmUobW9kdWxlLmdldFgoKSwgMCk7CiBzaG91bGRCZShtb2R1bGUu
Z2V0WSgpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvd2FzbS1sb2NhbHMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dh
c20tbG9jYWxzLmpzCmluZGV4IGE0ZDhhYTNkMDE2YWMwYmMzMjE2YTJjNjc5Zjg0MGYxMWQ2Y2Qw
NTUuLjc1NTM5YzljM2U3Mjc5OWI4OGM2MDFjY2UyNjI0ZDMwNWIwZjIyOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS1sb2NhbHMuanMKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWxvY2Fscy5qcwpAQCAtMzEs
NyArMzEsNyBAQCBmdW5jdGlvbiBhc21Nb2R1bGUoZ2xvYmFsLCBlbnYsIGJ1ZmZlcikgewogfQog
Ki8KIAotdmFyIG1vZHVsZSA9IGxvYWRXZWJBc3NlbWJseSgid2FzbS9sb2NhbHMud2FzbSIpOwor
dmFyIG1vZHVsZSA9IGxvYWRXZWJBc3NlbWJseSgid2FzbS9sb2NhbHMud2FzbSIsIHsgfSk7CiAK
IHNob3VsZEJlKG1vZHVsZS5zdW0oMTIsIDMwKSwgNDIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20tcmVsYXRpb25hbC5qcyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS1yZWxhdGlvbmFsLmpzCmluZGV4IGU5ZTA2
MjhkNzJmZDEwNzQ1YmY2MzI4MTM2NTk4ZWMwZTk1MmU0YzkuLjE5NjA3MjgyYzA2YjJlYTQyZWVj
ZjcyNGZlOTY2MzA2ZjBjNDc2MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3Mvd2FzbS1yZWxhdGlvbmFsLmpzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3Mvd2FzbS1yZWxhdGlvbmFsLmpzCkBAIC0xNzIsNyArMTcyLDcgQEAgZnVu
Y3Rpb24gYXNtTW9kdWxlKGdsb2JhbCwgZW52LCBidWZmZXIpIHsKIH0KICovCiAKLXZhciBtb2R1
bGUgPSBsb2FkV2ViQXNzZW1ibHkoIndhc20vcmVsYXRpb25hbC53YXNtIik7Cit2YXIgbW9kdWxl
ID0gbG9hZFdlYkFzc2VtYmx5KCJ3YXNtL3JlbGF0aW9uYWwud2FzbSIsIHsgfSk7CiAKIHNob3Vs
ZEJlKG1vZHVsZS5lcXVhbCgxLCAxKSwgMSk7CiBzaG91bGRCZShtb2R1bGUuZXF1YWwoMSwgMiks
IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNt
LXR5cGUtY29udmVyc2lvbi5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
d2FzbS10eXBlLWNvbnZlcnNpb24uanMKaW5kZXggODRiM2I4OTdkNWUxNGJhZWIwYWM1Y2Q1ZWJk
MjNhOTdjZDcwZTgzNi4uYzdlMTk2M2NiOGNlMDEzNTY4NzcxYWQ5ZWFlODMzNTA4NDE2NmYwZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLXR5cGUt
Y29udmVyc2lvbi5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dh
c20tdHlwZS1jb252ZXJzaW9uLmpzCkBAIC0zNSw3ICszNSw3IEBAIGZ1bmN0aW9uIGFzbU1vZHVs
ZShnbG9iYWwsIGVudiwgYnVmZmVyKSB7CiB9CiAqLwogCi12YXIgbW9kdWxlID0gbG9hZFdlYkFz
c2VtYmx5KCJ3YXNtL3R5cGUtY29udmVyc2lvbi53YXNtIik7Cit2YXIgbW9kdWxlID0gbG9hZFdl
YkFzc2VtYmx5KCJ3YXNtL3R5cGUtY29udmVyc2lvbi53YXNtIiwgeyB9KTsKIAogdmFyIHR3byA9
IHsKICAgICB2YWx1ZU9mKCkgeyByZXR1cm4gMjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtL2NhbGxzLndhc20gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3dhc20vY2FsbHMud2FzbQppbmRleCBkYjZmZDYwMGZmYWEyNDQ0
MWY4M2M0YTExNjdhOGY0N2M2YzgzOWZlLi5mYTRhN2IzZTY2NDY2ODdmMmFmYjA3ZTY3MjUwNWRi
YjhlZmQ0ZDNlIDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmRlbHRhIDg5CnpjbVllRCUmMStTU2Up
QyQhVDx0SDQyJlJ4ZnIrV09HPyMmcUYqbVVTTlA/dnBTYj9tR3ZXNVo7alFrUHwyTSZUTApiI3Nk
YyNTdGthRjNNRDd6PE9CbkNGb1BKckt1cyhGeUkyd1kKCmRlbHRhIDYwCnpjbWJRdG0/flNJU2Uk
IUBuRT9jdDcjS2tXOTU2RlgpSFcxbldLUFJXJUZqem9QUj9YdE5LWn4tVjlaSSpXbmNtVApERz9O
TysKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcAppbmRleCBh
NjFiMzZjMjRjMDdjMjRkMDkwMTY5YzU0ZmJlNzEyNDJhMDZhMWY0Li5mMWQ0NjQwYTYzMmRiMmVm
Y2EzMDAzOGI4YjA0NDVjZDAwZDdjZDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9KU1dBU01Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L0pTV0FTTU1vZHVsZS5jcHAKQEAgLTQ4LDYgKzQ4LDggQEAgdm9pZCBKU1dBU01Nb2R1bGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIGZvciAoYXV0byBmdW5j
dGlvbiA6IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25zKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
ZnVuY3Rpb24pOworICAgIGZvciAoYXV0byBpbXBvcnRlZEZ1bmN0aW9uIDogdGhpc09iamVjdC0+
bV9pbXBvcnRlZEZ1bmN0aW9ucykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmltcG9ydGVkRnVu
Y3Rpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vSlNXQVNNTW9kdWxlLmgKaW5kZXggMzRlOGI3OTQwMGFlYjFhMWJlNTY4NjU5NzVmZWEzNGI1
NzliYjlhMC4uYzYzYjU4NTc1MjEyODAxNGQ0YzhjMjBhOWE2NGVmNDM1ZmFkYzA2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKQEAgLTg3LDYgKzg3LDcgQEAg
cHVibGljOgogICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGZ1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3Vy
Y2UoKSB7IHJldHVybiBtX2Z1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3VyY2U7IH0KICAgICBWZWN0
b3I8dW5zaWduZWQ+JiBmdW5jdGlvblN0YWNrSGVpZ2h0cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25T
dGFja0hlaWdodHM7IH0KICAgICBWZWN0b3I8R2xvYmFsVmFyaWFibGU+JiBnbG9iYWxWYXJpYWJs
ZXMoKSB7IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlczsgfQorICAgIFZlY3RvcjxXcml0ZUJhcnJp
ZXI8SlNGdW5jdGlvbj4+JiBpbXBvcnRlZEZ1bmN0aW9ucygpIHsgcmV0dXJuIG1faW1wb3J0ZWRG
dW5jdGlvbnM7IH0KIAogcHJpdmF0ZToKICAgICBKU1dBU01Nb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKQEAgLTEwOCw2ICsxMDksNyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9mdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlOwogICAgIFZlY3Rvcjx1bnNp
Z25lZD4gbV9mdW5jdGlvblN0YWNrSGVpZ2h0czsKICAgICBWZWN0b3I8R2xvYmFsVmFyaWFibGU+
IG1fZ2xvYmFsVmFyaWFibGVzOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+
IG1faW1wb3J0ZWRGdW5jdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oCmluZGV4IGQ4
YmY2NTI4NDgyNDZlMzFmM2IxYjhkNGFjNTczM2NhZWQ3N2M0NDIuLmM0ZTU0NzdiYjdiYzE4NTZi
ODcxODU4Yzg4ZDM5ZDdjMzAwNTMyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaApAQCAtNjAwLDYgKzYwMCwxNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBVTlVTRUQ7CiAgICAgfQogCisgICAgaW50IGJ1aWxkQ2FsbEltcG9y
dCh1aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUm
IHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAg
ICBib3hBcmd1bWVudHNBbmRBZGp1c3RTdGFja1BvaW50ZXIoc2lnbmF0dXJlLmFyZ3VtZW50cyk7
CisKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBtX21vZHVsZS0+aW1wb3J0ZWRGdW5j
dGlvbnMoKVtmdW5jdGlvbkltcG9ydEluZGV4XS5nZXQoKTsKKyAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGZ1bmN0aW9uKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgIGNhbGxBbmRVbmJv
eFJlc3VsdChyZXR1cm5UeXBlKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKICAg
ICB2b2lkIGFwcGVuZEV4cHJlc3Npb25MaXN0KGludCYsIGludCkgeyB9CiAKICAgICB2b2lkIGxp
bmtUYXJnZXQoSnVtcFRhcmdldCYgdGFyZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKaW5kZXggY2U3MzBkNmE5YzY5NzMwZjk4YWQ0
MDBiMDVmYzI5M2ZhOTRjZGM2ZS4uYjhmYTk2ZGU3MDlmN2EzYjVlNDM3ZDdmMDlkM2UwZWMyNmI1
NTlhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9u
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Q
YXJzZXIuY3BwCkBAIC01MzAsNiArNTMwLDggQEAgQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkKICAgICAgICAg
ICAgIHJldHVybiBwYXJzZUdldEdsb2JhbEV4cHJlc3Npb25JMzIoY29udGV4dCk7CiAgICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q2FsbEludGVybmFsOgogICAgICAgICAgICAgcmV0
dXJuIHBhcnNlQ2FsbEludGVybmFsRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpDYWxsSW1wb3J0OgorICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQ2FsbEltcG9ydEV4cHJlc3Npb25JMzIoY29udGV4dCk7CiAgICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkkzMjo6TmVnYXRlOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6
OkJpdE5vdDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpDb3VudExlYWRpbmda
ZXJvczoKQEAgLTU5NCw3ICs1OTYsNiBAQCBDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQogICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlMzI6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkkzMjo6U3RvcmVXaXRoT2Zmc2V0MzI6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkkzMjo6Q2FsbEluZGlyZWN0OgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkNh
bGxJbXBvcnQ6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29uZGl0aW9uYWw6
CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29tbWE6CiAgICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkkzMjo6RnJvbUYzMjoKQEAgLTY4NSw2ICs2ODYsMTIgQEAgQ29udGV4
dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbnRlcm5hbEV4cHJlc3Np
b25JMzIoQ29udGV4dCYgY28KIH0KIAogdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0
RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEltcG9ydEV4cHJlc3Npb25J
MzIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gcGFyc2VDYWxsSW1wb3J0KGNvbnRl
eHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+CiBDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlVW5hcnlFeHBy
ZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCiB7CiAg
ICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250
ZXh0KTsKQEAgLTk4Niw2ICs5OTMsMjEgQEAgQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9u
UGFyc2VyOjpwYXJzZUNhbGxJbnRlcm5hbChDb250ZXh0JiBjb250ZXh0LCBXQVNNRXgKICAgICBy
ZXR1cm4gY29udGV4dC5idWlsZENhbGxJbnRlcm5hbChmdW5jdGlvbkluZGV4LCBhcmd1bWVudExp
c3QsIHNpZ25hdHVyZSwgcmV0dXJuVHlwZSk7CiB9CiAKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnQo
Q29udGV4dCYgY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCit7CisgICAg
dWludDMyX3QgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVJbmRleDsKKyAgICBSRUFEX0NPTVBBQ1Rf
VUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFk
IHRoZSBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlIGluZGV4LiIpOworICAgIEZBSUxfSUZfRkFM
U0UoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVJbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkltcG9y
dFNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgZnVuY3Rpb24gaW1wb3J0IHNpZ25hdHVyZSBpbmRl
eCBpcyBpbmNvcnJlY3QuIik7CisgICAgY29uc3QgV0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
JiBmdW5jdGlvbkltcG9ydFNpZ25hdHVyZSA9IG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydFNpZ25h
dHVyZXMoKVtmdW5jdGlvbkltcG9ydFNpZ25hdHVyZUluZGV4XTsKKyAgICBjb25zdCBXQVNNU2ln
bmF0dXJlJiBzaWduYXR1cmUgPSBtX21vZHVsZS0+c2lnbmF0dXJlcygpW2Z1bmN0aW9uSW1wb3J0
U2lnbmF0dXJlLnNpZ25hdHVyZUluZGV4XTsKKyAgICBGQUlMX0lGX0ZBTFNFKHNpZ25hdHVyZS5y
ZXR1cm5UeXBlID09IHJldHVyblR5cGUsICJXcm9uZyByZXR1cm4gdHlwZS4iKTsKKworICAgIENv
bnRleHRFeHByZXNzaW9uTGlzdCBhcmd1bWVudExpc3QgPSBwYXJzZUNhbGxBcmd1bWVudHMoY29u
dGV4dCwgc2lnbmF0dXJlLmFyZ3VtZW50cyk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAg
cmV0dXJuIGNvbnRleHQuYnVpbGRDYWxsSW1wb3J0KGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLmZ1
bmN0aW9uSW1wb3J0SW5kZXgsIGFyZ3VtZW50TGlzdCwgc2lnbmF0dXJlLCByZXR1cm5UeXBlKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJz
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCmlu
ZGV4IGRiOTA1ZTI3MjI2Y2E0MTJkOTljMDcyNzExNGY4NzU1YmQxMWY2MTcuLjExNTkwOWJlN2I2
YzhjMDM2YjAzZmRkN2E4YTE2ODVjY2IxMDEwYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCkBAIC05MCw2ICs5MCw3IEBAIHByaXZhdGU6
CiAgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlR2V0
TG9jYWxFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VHZXRHbG9iYWxFeHByZXNzaW9uSTMyKENvbnRleHQm
KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VD
YWxsSW50ZXJuYWxFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxsSW1wb3J0RXhwcmVzc2lvbkkzMihD
b250ZXh0Jik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9u
IHBhcnNlVW5hcnlFeHByZXNzaW9uSTMyKENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsK
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VCaW5h
cnlFeHByZXNzaW9uSTMyKENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsKICAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VSZWxhdGlvbmFsSTMy
RXhwcmVzc2lvbkkzMihDb250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7CkBAIC0xMTQsNiAr
MTE1LDcgQEAgcHJpdmF0ZToKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0
RXhwcmVzc2lvbkxpc3QgcGFyc2VDYWxsQXJndW1lbnRzKENvbnRleHQmLCBjb25zdCBWZWN0b3I8
V0FTTVR5cGU+JiBhcmd1bWVudHMpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250
ZXh0RXhwcmVzc2lvbiBwYXJzZUNhbGxJbnRlcm5hbChDb250ZXh0JiwgV0FTTUV4cHJlc3Npb25U
eXBlIHJldHVyblR5cGUpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhw
cmVzc2lvbiBwYXJzZUNhbGxJbXBvcnQoQ29udGV4dCYsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1
cm5UeXBlKTsKIAogICAgIEpTV0FTTU1vZHVsZSogbV9tb2R1bGU7CiAgICAgV0FTTVJlYWRlciBt
X3JlYWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5j
dGlvblN5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5j
dGlvblN5bnRheENoZWNrZXIuaAppbmRleCAyZTM4MmFhYjc5Y2Q0MjJjZTk2ZWEyNGJmYjNjZGU4
YmI3ZmIyNWYwLi5jNjhiNGM3MzY1YjcwYWE0YTkzNDYzMWMyNTBkYTFjNDU1ZGNmNzNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25TeW50YXhDaGVj
a2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4
Q2hlY2tlci5oCkBAIC0xMzMsMTIgKzEzMywxOSBAQCBwdWJsaWM6CiAgICAgaW50IGJ1aWxkQ2Fs
bEludGVybmFsKHVpbnQzMl90LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwg
V0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCiAgICAgewogICAgICAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICB1cGRhdGVU
ZW1wU3RhY2tIZWlnaHRGb3JDYWxsKGFyZ3VtZW50Q291bnQpOworICAgICAgICBtX3RlbXBTdGFj
a1RvcCAtPSBhcmd1bWVudENvdW50OworICAgICAgICBpZiAocmV0dXJuVHlwZSAhPSBXQVNNRXhw
cmVzc2lvblR5cGU6OlZvaWQpIHsKKyAgICAgICAgICAgIG1fdGVtcFN0YWNrVG9wKys7CisgICAg
ICAgICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gVU5VU0VEOworICAgIH0KIAotICAgICAgICAvLyBCb3hlZCBhcmd1bWVudHMgKyB0aGlzIGFy
Z3VtZW50ICsgY2FsbCBmcmFtZSBoZWFkZXIgKyBwYWRkaW5nLgotICAgICAgICBtX3RlbXBTdGFj
a1RvcCArPSBhcmd1bWVudENvdW50ICsgMSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUg
KyAxOwotICAgICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHQoKTsKLSAgICAgICAgbV90ZW1wU3Rh
Y2tUb3AgLT0gYXJndW1lbnRDb3VudCArIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXpl
ICsgMTsKLQorICAgIGludCBidWlsZENhbGxJbXBvcnQodWludDMyX3QsIGludCwgY29uc3QgV0FT
TVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKKyAg
ICB7CisgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50cy5z
aXplKCk7CisgICAgICAgIHVwZGF0ZVRlbXBTdGFja0hlaWdodEZvckNhbGwoYXJndW1lbnRDb3Vu
dCk7CiAgICAgICAgIG1fdGVtcFN0YWNrVG9wIC09IGFyZ3VtZW50Q291bnQ7CiAgICAgICAgIGlm
IChyZXR1cm5UeXBlICE9IFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCkgewogICAgICAgICAgICAg
bV90ZW1wU3RhY2tUb3ArKzsKQEAgLTE4NSw2ICsxOTIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fdGVtcFN0YWNrSGVpZ2h0ID0gbV90ZW1wU3RhY2tUb3A7CiAgICAgfQogCisgICAgdm9p
ZCB1cGRhdGVUZW1wU3RhY2tIZWlnaHRGb3JDYWxsKHNpemVfdCBhcmd1bWVudENvdW50KQorICAg
IHsKKyAgICAgICAgLy8gQm94ZWQgYXJndW1lbnRzICsgdGhpcyBhcmd1bWVudCArIGNhbGwgZnJh
bWUgaGVhZGVyICsgbWF4aW11bSBwYWRkaW5nLgorICAgICAgICBtX3RlbXBTdGFja1RvcCArPSBh
cmd1bWVudENvdW50ICsgMSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAxOworICAg
ICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHQoKTsKKyAgICAgICAgbV90ZW1wU3RhY2tUb3AgLT0g
YXJndW1lbnRDb3VudCArIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgMTsKKyAg
ICB9CisKICAgICB1bnNpZ25lZCBtX251bWJlck9mTG9jYWxzOwogICAgIHVuc2lnbmVkIG1fdGVt
cFN0YWNrVG9wIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fdGVtcFN0YWNrSGVpZ2h0IHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAppbmRl
eCAxNTE5MDk2ZWE5MmZkYTY2NjRmMjllNzM4ZjAyN2NmM2NkMTRmNGFmLi4yNzA5NTMxY2IxYmUy
MGE1NzkyY2FiNmQ4YjQwNTUyNWFhOThhNmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcApAQCAtNDksMTcgKzQ5LDE3IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1XQVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9kdWxlUGFyc2VyKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQot
ICAgIDogbV92bSh2bSkKLSAgICAsIG1fZ2xvYmFsT2JqZWN0KHZtLCBnbG9iYWxPYmplY3QpCitX
QVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9kdWxlUGFyc2VyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCogaW1wb3J0cykKKyAgICA6IG1fZXhlYyhleGVj
KQogICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9pbXBvcnRzKGV4ZWMtPnZtKCksIGlt
cG9ydHMpCiAgICAgLCBtX3JlYWRlcihzdGF0aWNfY2FzdDxXZWJBc3NlbWJseVNvdXJjZVByb3Zp
ZGVyKj4oc291cmNlLnByb3ZpZGVyKCkpLT5kYXRhKCkpCiB7CiB9CiAKIEpTV0FTTU1vZHVsZSog
V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UoU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgbV9t
b2R1bGUuc2V0KG1fdm0sIEpTV0FTTU1vZHVsZTo6Y3JlYXRlKG1fdm0sIG1fZ2xvYmFsT2JqZWN0
LT53YXNtTW9kdWxlU3RydWN0dXJlKCkpKTsKKyAgICBtX21vZHVsZS5zZXQobV9leGVjLT52bSgp
LCBKU1dBU01Nb2R1bGU6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT53YXNtTW9kdWxlU3RydWN0dXJlKCkpKTsKICAgICBwYXJzZU1vZHVsZSgpOwog
ICAgIGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHsKICAgICAgICAgZXJyb3JNZXNzYWdl
ID0gbV9lcnJvck1lc3NhZ2U7CkBAIC0xNTEsNiArMTUxLDcgQEAgdm9pZCBXQVNNTW9kdWxlUGFy
c2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpCiAgICAgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiQ2Fubm90IHJlYWQg
dGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcy4iKTsKICAgICBtX21vZHVs
ZS0+ZnVuY3Rpb25JbXBvcnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0
aW9uSW1wb3J0cyk7CiAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcygpLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMpOwor
ICAgIG1fbW9kdWxlLT5pbXBvcnRlZEZ1bmN0aW9ucygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMpOwogCiAgICAgZm9yICh1aW50MzJfdCBmdW5jdGlvbklt
cG9ydEluZGV4ID0gMDsgZnVuY3Rpb25JbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY3Rpb25JbXBv
cnRzOyArK2Z1bmN0aW9uSW1wb3J0SW5kZXgpIHsKICAgICAgICAgV0FTTUZ1bmN0aW9uSW1wb3J0
IGZ1bmN0aW9uSW1wb3J0OwpAQCAtMTY4LDYgKzE2OSwxMyBAQCB2b2lkIFdBU01Nb2R1bGVQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCkKICAgICAgICAgICAgIGZ1bmN0aW9uSW1w
b3J0U2lnbmF0dXJlLmZ1bmN0aW9uSW1wb3J0SW5kZXggPSBmdW5jdGlvbkltcG9ydEluZGV4Owog
ICAgICAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcygpLnVuY2hlY2tl
ZEFwcGVuZChmdW5jdGlvbkltcG9ydFNpZ25hdHVyZSk7CiAgICAgICAgIH0KKworICAgICAgICBK
U1ZhbHVlIHZhbHVlOworICAgICAgICBnZXRJbXBvcnRlZFZhbHVlKGZ1bmN0aW9uSW1wb3J0LmZ1
bmN0aW9uTmFtZSwgdmFsdWUpOworICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICAgICAg
RkFJTF9JRl9GQUxTRSh2YWx1ZS5pc0Z1bmN0aW9uKCksICJcIiIgKyBmdW5jdGlvbkltcG9ydC5m
dW5jdGlvbk5hbWUgKyAiXCIgaXMgbm90IGEgZnVuY3Rpb24uIik7CisgICAgICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZS5hc0NlbGwoKSk7CisgICAg
ICAgIG1fbW9kdWxlLT5pbXBvcnRlZEZ1bmN0aW9ucygpLnVuY2hlY2tlZEFwcGVuZChXcml0ZUJh
cnJpZXI8SlNGdW5jdGlvbj4obV9leGVjLT52bSgpLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb24p
KTsKICAgICB9CiAgICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWdu
YXR1cmVzKCkuc2l6ZSgpID09IG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiVGhl
IG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcyBpcyBpbmNvcnJlY3QuIik7CiB9
CkBAIC0yODMsOSArMjkxLDEwIEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlv
bkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCiAgICAgfQogICAgIG1fcmVhZGVyLnNl
dE9mZnNldChlbmRPZmZzZXRJblNvdXJjZSk7CiAKLSAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUq
IHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y3JlYXRlKG1f
dm0sIG1fc291cmNlLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb25JbmRleCk7Ci0gICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUobV92bSwgd2ViQXNzZW1ibHlFeGVj
dXRhYmxlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9ucygp
LnVuY2hlY2tlZEFwcGVuZChXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4obV92bSwgbV9tb2R1bGUu
Z2V0KCksIGZ1bmN0aW9uKSk7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIFdlYkFz
c2VtYmx5RXhlY3V0YWJsZSogd2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gV2ViQXNzZW1ibHlFeGVj
dXRhYmxlOjpjcmVhdGUodm0sIG1fc291cmNlLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb25JbmRl
eCk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHdl
YkFzc2VtYmx5RXhlY3V0YWJsZSwgbV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAg
IG1fbW9kdWxlLT5mdW5jdGlvbnMoKS51bmNoZWNrZWRBcHBlbmQoV3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+KHZtLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb24pKTsKICAgICBtX21vZHVsZS0+ZnVu
Y3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSgpLnVuY2hlY2tlZEFwcGVuZChzdGFydE9mZnNldElu
U291cmNlKTsKICAgICBtX21vZHVsZS0+ZnVuY3Rpb25TdGFja0hlaWdodHMoKS51bmNoZWNrZWRB
cHBlbmQoc3RhY2tIZWlnaHQpOwogfQpAQCAtMzExLDggKzMyMCw4IEBAIHZvaWQgV0FTTU1vZHVs
ZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKCkKICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXg7CiAgICAgICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rp
b25JbmRleCwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbmRleC4iKTsKICAgICAgICAgICAg
IEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0
aW9ucygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAg
ICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZt
X3ZtLCBleHBvcnROYW1lKTsKLSAgICAgICAgICAgIG1fbW9kdWxlLT5wdXREaXJlY3QobV92bSwg
aWRlbnRpZmllciwgbV9tb2R1bGUtPmZ1bmN0aW9ucygpW2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsK
KyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJm1fZXhlYy0+dm0oKSwgZXhwb3J0TmFtZSk7CisgICAgICAgICAgICBtX21vZHVsZS0+cHV0
RGlyZWN0KG1fZXhlYy0+dm0oKSwgaWRlbnRpZmllciwgbV9tb2R1bGUtPmZ1bmN0aW9ucygpW2Z1
bmN0aW9uSW5kZXhdLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zMjEsOSArMzMwLDE4IEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0
aW9uKCkKICAgICB9CiB9CiAKLUpTV0FTTU1vZHVsZSogcGFyc2VXZWJBc3NlbWJseShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
Cit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OmdldEltcG9ydGVkVmFsdWUoY29uc3QgU3RyaW5nJiBp
bXBvcnROYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZtX2V4ZWMtPnZtKCksIGltcG9ydE5hbWUpOworICAg
IFByb3BlcnR5U2xvdCBzbG90KG1faW1wb3J0cy5nZXQoKSk7CisgICAgaWYgKCFtX2ltcG9ydHMt
PmdldFByb3BlcnR5U2xvdChtX2V4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQorICAgICAgICBGQUlM
X1dJVEhfTUVTU0FHRSgiQ2FuJ3QgZmluZCBhIHByb3BlcnR5IG5hbWVkIFwiIiArIGltcG9ydE5h
bWUgKyAnIicpOworICAgIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIGlkZW50aWZpZXIp
OworfQorCitKU1dBU01Nb2R1bGUqIHBhcnNlV2ViQXNzZW1ibHkoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTT2JqZWN0KiBpbXBvcnRzLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKIHsKLSAgICBXQVNNTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihleGVjLT52bSgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNvdXJjZSk7CisgICAgV0FTTU1vZHVsZVBh
cnNlciBtb2R1bGVQYXJzZXIoZXhlYywgc291cmNlLCBpbXBvcnRzKTsKICAgICByZXR1cm4gbW9k
dWxlUGFyc2VyLnBhcnNlKGVycm9yTWVzc2FnZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAppbmRleCBlMmY0ZmI3NThjOTUxMzUzZjg2MDg3
ZDU5MDRjNWYzNjI2M2VlZmFiLi5iODBiYzNhOWI3YTk1YWRiMzY3MmM0OTZkNmRlNjNmMzVmM2Uz
NTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFy
c2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5o
CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFZNOwogCiBjbGFzcyBXQVNNTW9kdWxlUGFyc2VyIHsK
IHB1YmxpYzoKLSAgICBXQVNNTW9kdWxlUGFyc2VyKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTb3VyY2VDb2RlJik7CisgICAgV0FTTU1vZHVsZVBhcnNlcihFeGVjU3RhdGUqLCBjb25zdCBT
b3VyY2VDb2RlJiwgSlNPYmplY3QqIGltcG9ydHMpOwogICAgIEpTV0FTTU1vZHVsZSogcGFyc2Uo
U3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiBwcml2YXRlOgpAQCAtNTYsMTYgKzU2LDE3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oKTsKICAgICB2
b2lkIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKHNpemVfdCBmdW5jdGlvbkluZGV4KTsKICAgICB2
b2lkIHBhcnNlRXhwb3J0U2VjdGlvbigpOworICAgIHZvaWQgZ2V0SW1wb3J0ZWRWYWx1ZShjb25z
dCBTdHJpbmcmIGltcG9ydE5hbWUsIEpTVmFsdWUmKTsKIAotICAgIFZNJiBtX3ZtOwotICAgIFN0
cm9uZzxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CisgICAgRXhlY1N0YXRlKiBtX2V4
ZWM7CiAgICAgY29uc3QgU291cmNlQ29kZSYgbV9zb3VyY2U7CisgICAgU3Ryb25nPEpTT2JqZWN0
PiBtX2ltcG9ydHM7CiAgICAgV0FTTVJlYWRlciBtX3JlYWRlcjsKICAgICBTdHJvbmc8SlNXQVNN
TW9kdWxlPiBtX21vZHVsZTsKICAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CiB9OwogCi1KU19F
WFBPUlRfUFJJVkFURSBKU1dBU01Nb2R1bGUqIHBhcnNlV2ViQXNzZW1ibHkoRXhlY1N0YXRlKiwg
Y29uc3QgU291cmNlQ29kZSYsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKK0pTX0VYUE9SVF9QUklW
QVRFIEpTV0FTTU1vZHVsZSogcGFyc2VXZWJBc3NlbWJseShFeGVjU3RhdGUqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgSlNPYmplY3QqIGltcG9ydHMsIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261186</attachid>
            <date>2015-09-15 04:18:38 -0700</date>
            <delta_ts>2015-09-15 13:00:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149093-20150915041854.patch</filename>
            <type>text/plain</type>
            <size>20873</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5ODA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZDQ5YTdmNWM2NDYzZmEwZDUyMTZkYjQ1ZWY3NzI1NmQ3MGM1MDIwLi45Yjk2ZTYxM2MzM2Q3ZDdj
NWYyODI3MGI5YjFhODg3Y2I0M2E3OGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAxNS0wOS0xNSAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2FsbHMgdG8gSmF2YVNjcmlwdCBmdW5jdGlv
bnMgaW4gV2ViQXNzZW1ibHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0OTA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBjYWxscyB0byBKYXZhU2NyaXB0IGZ1bmN0
aW9ucyBpbiBXZWJBc3NlbWJseS4KKyAgICAgICAgV2ViQXNzZW1ibHkgZnVuY3Rpb25zIGNhbiBv
bmx5IGNhbGwgSmF2YVNjcmlwdCBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgICAgICAgaW1wb3J0ZWQg
dG8gdGhlaXIgbW9kdWxlIHZpYSBhbiBvYmplY3QgdGhhdCBpcyBwYXNzZWQgaW50bworICAgICAg
ICBsb2FkV2ViQXNzZW1ibHkoKS4gUmVmZXJlbmNlcyB0byBKYXZhU2NyaXB0IGZ1bmN0aW9ucyBh
cmUgcmVzb2x2ZWQgYXQKKyAgICAgICAgdGhlIG1vZHVsZSdzIGxvYWQgdGltZSwganVzdCBsaWtl
IGFzbS5qcy4KKworICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3Mvd2FzbS1jYWxscy5qczoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
d2FzbS9jYWxscy53YXNtOgorICAgICAgICAqIHdhc20vSlNXQVNNTW9kdWxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNXQVNNTW9kdWxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL0pT
V0FTTU1vZHVsZS5oOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmltcG9ydGVkRnVuY3Rp
b25zKToKKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmg6CisgICAgICAgIChK
U0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZENhbGxJbXBvcnQpOgorICAgICAgICAqIHdh
c20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFy
c2VyOjpwYXJzZUV4cHJlc3Npb25JMzIpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlRXhwcmVzc2lvbkY2NCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VDYWxsSW1wb3J0KToKKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvblBhcnNlci5o
OgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAo
SlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZENhbGxJbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkQ2FsbEltcG9ydCk6Cisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OnVwZGF0ZVRlbXBTdGFja0hl
aWdodEZvckNhbGwpOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIpOgorICAgICAgICAo
SlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQ
YXJzZXI6OnBhcnNlTW9kdWxlKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFy
c2VGdW5jdGlvbkltcG9ydFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2Vy
OjpnZXRJbXBvcnRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6cGFyc2VXZWJBc3NlbWJseSk6Cisg
ICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6CisKIDIwMTUtMDktMTQgIFNhYW0gYmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgcmVuYW1lIGNhbGxGcmFtZUZvclRo
cm93IHRvIGNhbGxGcmFtZUZvckNhdGNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDVjZDkyNzg4
NDJmNmRkNTVlNGY4ODI0YjFkYTA1M2I4YTdkY2YyYWUuLjUyZjEyMGQ0NmM4MzkyZDIxYTM2ZTU5
ZGMwODY2NGNkZDdmNTEwZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC02NzksNyArNjc5LDcg
QEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImRyYWluTWljcm90YXNrcyIs
IGZ1bmN0aW9uRHJhaW5NaWNyb3Rhc2tzLCAwKTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
LSAgICAgICAgYWRkRnVuY3Rpb24odm0sICJsb2FkV2ViQXNzZW1ibHkiLCBmdW5jdGlvbkxvYWRX
ZWJBc3NlbWJseSwgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibG9hZFdlYkFzc2VtYmx5
IiwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHksIDIpOwogI2VuZGlmCiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAibG9hZE1vZHVsZSIsIGZ1bmN0aW9uTG9hZE1vZHVsZSwgMSk7CiAgICAgICAgIGFk
ZEZ1bmN0aW9uKHZtLCAiY2hlY2tNb2R1bGVTeW50YXgiLCBmdW5jdGlvbkNoZWNrTW9kdWxlU3lu
dGF4LCAxKTsKQEAgLTE0NTgsOCArMTQ1OCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKICAg
ICBSZWZQdHI8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIgPSBXZWJB
c3NlbWJseVNvdXJjZVByb3ZpZGVyOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8dWlu
dDhfdD4mPihidWZmZXIpLCBmaWxlTmFtZSk7CiAgICAgU291cmNlQ29kZSBzb3VyY2Uoc291cmNl
UHJvdmlkZXIpOworICAgIEpTT2JqZWN0KiBpbXBvcnRzID0gZXhlYy0+YXJndW1lbnQoMSkuZ2V0
T2JqZWN0KCk7CisKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIEpTV0FTTU1vZHVsZSog
bW9kdWxlID0gcGFyc2VXZWJBc3NlbWJseShleGVjLCBzb3VyY2UsIGVycm9yTWVzc2FnZSk7Cisg
ICAgSlNXQVNNTW9kdWxlKiBtb2R1bGUgPSBwYXJzZVdlYkFzc2VtYmx5KGV4ZWMsIHNvdXJjZSwg
aW1wb3J0cywgZXJyb3JNZXNzYWdlKTsKICAgICBpZiAoIW1vZHVsZSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVN5
bnRheEVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG1vZHVsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3dhc20tY2FsbHMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dh
c20tY2FsbHMuanMKaW5kZXggNDI4NjU1OTFlOThmMjQ3YTk3YjJiZTViNGRiZTA1YjBiYzM4NTgz
Zi4uZmUxMTU5YzBhOWJmZDg0ZGE4Y2ZlNThkMmJhZDRhN2YwNzdlYjRjOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWNhbGxzLmpzCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS1jYWxscy5qcwpAQCAtOCw5ICs4
LDEyIEBAIGZ1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKIC8qCiB3YXNtL2Nh
bGxzLndhc20gaXMgZ2VuZXJhdGVkIGJ5IHBhY2stYXNtanMgPGh0dHBzOi8vZ2l0aHViLmNvbS9X
ZWJBc3NlbWJseS9wb2x5ZmlsbC1wcm90b3R5cGUtMT4gZnJvbSB0aGUgZm9sbG93aW5nIHNjcmlw
dDoKIAotZnVuY3Rpb24gYXNtTW9kdWxlKGdsb2JhbCwgZW52LCBidWZmZXIpIHsKK2Z1bmN0aW9u
IGFzbU1vZHVsZShnbG9iYWwsIGltcG9ydHMsIGJ1ZmZlcikgewogICAgICJ1c2UgYXNtIjsKIAor
ICAgIHZhciBzdW0gPSBpbXBvcnRzLnN1bTsKKyAgICB2YXIgbWF4ID0gaW1wb3J0cy5tYXg7CisK
ICAgICBmdW5jdGlvbiBmaWJvbmFjY2koeCkgewogICAgICAgICB4ID0geCB8IDA7CiAgICAgICAg
IGlmICgoeCB8IDApIDw9IDEpCkBAIC0zMiwxNiArMzUsMzcgQEAgZnVuY3Rpb24gYXNtTW9kdWxl
KGdsb2JhbCwgZW52LCBidWZmZXIpIHsKICAgICAgICAgcmV0dXJuICgoKHggKiB5KSB8IDApIC8g
KGdjZCh4LCB5KSB8IDApKSB8IDA7CiAgICAgfQogCisgICAgZnVuY3Rpb24gY2FsbFN1bSh4LCB5
KSB7CisgICAgICAgIHggPSB4IHwgMDsKKyAgICAgICAgeSA9IHkgfCAwOworICAgICAgICByZXR1
cm4gc3VtKHgsIHkpIHwgMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjYWxsTWF4KHgsIHkpIHsK
KyAgICAgICAgeCA9IHggfCAwOworICAgICAgICB5ID0geSB8IDA7CisgICAgICAgIHJldHVybiBt
YXgoeCwgeSkgfCAwOworICAgIH0KKwogICAgIHJldHVybiB7CiAgICAgICAgIGZpYm9uYWNjaTog
Zmlib25hY2NpLAogICAgICAgICBnY2Q6IGdjZCwKICAgICAgICAgbGNtOiBsY20sCisgICAgICAg
IGNhbGxTdW06IGNhbGxTdW0sCisgICAgICAgIGNhbGxNYXg6IGNhbGxNYXgsCiAgICAgfTsKIH0K
ICovCiAKLXZhciBtb2R1bGUgPSBsb2FkV2ViQXNzZW1ibHkoIndhc20vY2FsbHMud2FzbSIpOwor
dmFyIGltcG9ydHMgPSB7CisgICAgc3VtOiAoeCwgeSkgPT4geCArIHksCisgICAgbWF4OiBNYXRo
Lm1heCwKK307Cit2YXIgbW9kdWxlID0gbG9hZFdlYkFzc2VtYmx5KCJ3YXNtL2NhbGxzLndhc20i
LCBpbXBvcnRzKTsKIAogc2hvdWxkQmUobW9kdWxlLmZpYm9uYWNjaSgxMCksIDg5KTsKIHNob3Vs
ZEJlKG1vZHVsZS5nY2QoMTUsIDI1KSwgNSk7CiBzaG91bGRCZShtb2R1bGUubGNtKDE1LCAyNSks
IDc1KTsKKworc2hvdWxkQmUobW9kdWxlLmNhbGxTdW0oMSwgMiksIDMpOworc2hvdWxkQmUobW9k
dWxlLmNhbGxNYXgoMSwgMiksIDIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy93YXNtL2NhbGxzLndhc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3dhc20vY2FsbHMud2FzbQppbmRleCBkYjZmZDYwMGZmYWEyNDQ0MWY4M2M0YTEx
NjdhOGY0N2M2YzgzOWZlLi5mYTRhN2IzZTY2NDY2ODdmMmFmYjA3ZTY3MjUwNWRiYjhlZmQ0ZDNl
IDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmRlbHRhIDg5CnpjbVllRCUmMStTU2UpQyQhVDx0SDQy
JlJ4ZnIrV09HPyMmcUYqbVVTTlA/dnBTYj9tR3ZXNVo7alFrUHwyTSZUTApiI3NkYyNTdGthRjNN
RDd6PE9CbkNGb1BKckt1cyhGeUkyd1kKCmRlbHRhIDYwCnpjbWJRdG0/flNJU2UkIUBuRT9jdDcj
S2tXOTU2RlgpSFcxbldLUFJXJUZqem9QUj9YdE5LWn4tVjlaSSpXbmNtVApERz9OTysKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcAppbmRleCBhNjFiMzZjMjRj
MDdjMjRkMDkwMTY5YzU0ZmJlNzEyNDJhMDZhMWY0Li5mMWQ0NjQwYTYzMmRiMmVmY2EzMDAzOGI4
YjA0NDVjZDAwZDdjZDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9K
U1dBU01Nb2R1bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1v
ZHVsZS5jcHAKQEAgLTQ4LDYgKzQ4LDggQEAgdm9pZCBKU1dBU01Nb2R1bGU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIGZvciAoYXV0byBmdW5jdGlvbiA6IHRo
aXNPYmplY3QtPm1fZnVuY3Rpb25zKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24p
OworICAgIGZvciAoYXV0byBpbXBvcnRlZEZ1bmN0aW9uIDogdGhpc09iamVjdC0+bV9pbXBvcnRl
ZEZ1bmN0aW9ucykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmltcG9ydGVkRnVuY3Rpb24pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL0pTV0FTTU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNN
TW9kdWxlLmgKaW5kZXggMzRlOGI3OTQwMGFlYjFhMWJlNTY4NjU5NzVmZWEzNGI1NzliYjlhMC4u
YzYzYjU4NTc1MjEyODAxNGQ0YzhjMjBhOWE2NGVmNDM1ZmFkYzA2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmgKQEAgLTg3LDYgKzg3LDcgQEAgcHVibGljOgog
ICAgIFZlY3Rvcjx1bnNpZ25lZD4mIGZ1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3VyY2UoKSB7IHJl
dHVybiBtX2Z1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3VyY2U7IH0KICAgICBWZWN0b3I8dW5zaWdu
ZWQ+JiBmdW5jdGlvblN0YWNrSGVpZ2h0cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25TdGFja0hlaWdo
dHM7IH0KICAgICBWZWN0b3I8R2xvYmFsVmFyaWFibGU+JiBnbG9iYWxWYXJpYWJsZXMoKSB7IHJl
dHVybiBtX2dsb2JhbFZhcmlhYmxlczsgfQorICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5j
dGlvbj4+JiBpbXBvcnRlZEZ1bmN0aW9ucygpIHsgcmV0dXJuIG1faW1wb3J0ZWRGdW5jdGlvbnM7
IH0KIAogcHJpdmF0ZToKICAgICBKU1dBU01Nb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKQEAgLTEwOCw2ICsxMDksNyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx1bnNpZ25lZD4g
bV9mdW5jdGlvblN0YXJ0T2Zmc2V0c0luU291cmNlOwogICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9m
dW5jdGlvblN0YWNrSGVpZ2h0czsKICAgICBWZWN0b3I8R2xvYmFsVmFyaWFibGU+IG1fZ2xvYmFs
VmFyaWFibGVzOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1faW1wb3J0
ZWRGdW5jdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oCmluZGV4IDZlN2I5MjdkNWQy
NzU2NDE0ZGNiODU4YjkzYjAyNTkwYWE2OTFlMzUuLmU2MmM3NWYzZTBlYjA4MDUzNWVlMjVlZjEy
ZTc1MjEyN2ZhMWNmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01GdW5jdGlvbkNvbXBpbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUZ1bmN0aW9uQ29tcGlsZXIuaApAQCAtNjU0LDYgKzY1NCwxNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBVTlVTRUQ7CiAgICAgfQogCisgICAgaW50IGJ1aWxkQ2FsbEltcG9ydCh1aW50MzJf
dCBmdW5jdGlvbkltcG9ydEluZGV4LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVy
ZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBib3hBcmd1
bWVudHNBbmRBZGp1c3RTdGFja1BvaW50ZXIoc2lnbmF0dXJlLmFyZ3VtZW50cyk7CisKKyAgICAg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBtX21vZHVsZS0+aW1wb3J0ZWRGdW5jdGlvbnMoKVtm
dW5jdGlvbkltcG9ydEluZGV4XS5nZXQoKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGZ1
bmN0aW9uKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgIGNhbGxBbmRVbmJveFJlc3VsdChy
ZXR1cm5UeXBlKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKICAgICB2b2lkIGFw
cGVuZEV4cHJlc3Npb25MaXN0KGludCYsIGludCkgeyB9CiAKICAgICB2b2lkIGxpbmtUYXJnZXQo
SnVtcFRhcmdldCYgdGFyZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01GdW5jdGlvblBhcnNlci5jcHAKaW5kZXggZmNmMmRjM2RkNDQ3YzM5NzI1NTJlZjViMzNlMDhk
MTJkYTk4MjA5YS4uZjhiYTlkZjBiNTYyMzU5ZTYxNTM3Y2U5M2UzNzA4YzYxYzQ2NTIxNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3Bw
CkBAIC01MzAsNiArNTMwLDggQEAgQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkKICAgICAgICAgICAgIHJldHVy
biBwYXJzZUdldEdsb2JhbEV4cHJlc3Npb25JMzIoY29udGV4dCk7CiAgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6Q2FsbEludGVybmFsOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNl
Q2FsbEludGVybmFsRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpDYWxsSW1wb3J0OgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbElt
cG9ydChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMik7CiAgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6TmVnYXRlOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OkJpdE5vdDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpDb3VudExlYWRp
bmdaZXJvczoKQEAgLTU5NCw3ICs1OTYsNiBAQCBDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rp
b25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQogICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlMzI6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkkzMjo6U3RvcmVXaXRoT2Zmc2V0MzI6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkkzMjo6Q2FsbEluZGlyZWN0OgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6
OkNhbGxJbXBvcnQ6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29uZGl0aW9u
YWw6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29tbWE6CiAgICAgICAgIGNh
c2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6RnJvbUYzMjoKQEAgLTg3Nyw2ICs4NzgsOCBAQCBDb250
ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkY2NChDb250
ZXh0JiBjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0TG9jYWxFeHByZXNzaW9u
RjY0KGNvbnRleHQpOwogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkdldEdsb2Jh
bDoKICAgICAgICAgICAgIHJldHVybiBwYXJzZUdldEdsb2JhbEV4cHJlc3Npb25GNjQoY29udGV4
dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Q2FsbEltcG9ydDoKKyAgICAg
ICAgICAgIHJldHVybiBwYXJzZUNhbGxJbXBvcnQoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBl
OjpGNjQpOwogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlNldExvY2FsOgogICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlNldEdsb2JhbDoKICAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uRjY0OjpMb2FkOgpAQCAtODg1LDcgKzg4OCw2IEBAIENvbnRleHRFeHBy
ZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uRjY0KENvbnRleHQmIGNv
bnRleHQpCiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6U3RvcmVXaXRoT2Zmc2V0
OgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNhbGxJbnRlcm5hbDoKICAgICAg
ICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpDYWxsSW5kaXJlY3Q6Ci0gICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkY2NDo6Q2FsbEltcG9ydDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uRjY0OjpDb25kaXRpb25hbDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0
OjpDb21tYToKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpGcm9tUzMyOgpAQCAt
MTAwNiw2ICsxMDA4LDIxIEBAIENvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6
cGFyc2VDYWxsSW50ZXJuYWwoQ29udGV4dCYgY29udGV4dCwgV0FTTUV4CiAgICAgcmV0dXJuIGNv
bnRleHQuYnVpbGRDYWxsSW50ZXJuYWwoZnVuY3Rpb25JbmRleCwgYXJndW1lbnRMaXN0LCBzaWdu
YXR1cmUsIHJldHVyblR5cGUpOwogfQogCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRl
eHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW1wb3J0KENvbnRleHQm
IGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQoreworICAgIHVpbnQzMl90
IGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlSW5kZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9P
Ul9GQUlMKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVu
Y3Rpb24gaW1wb3J0IHNpZ25hdHVyZSBpbmRleC4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0
aW9uSW1wb3J0U2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1
cmVzKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmUgaW5kZXggaXMgaW5j
b3JyZWN0LiIpOworICAgIGNvbnN0IFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZSYgZnVuY3Rp
b25JbXBvcnRTaWduYXR1cmUgPSBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKClb
ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVJbmRleF07CisgICAgY29uc3QgV0FTTVNpZ25hdHVyZSYg
c2lnbmF0dXJlID0gbV9tb2R1bGUtPnNpZ25hdHVyZXMoKVtmdW5jdGlvbkltcG9ydFNpZ25hdHVy
ZS5zaWduYXR1cmVJbmRleF07CisgICAgRkFJTF9JRl9GQUxTRShzaWduYXR1cmUucmV0dXJuVHlw
ZSA9PSByZXR1cm5UeXBlLCAiV3JvbmcgcmV0dXJuIHR5cGUuIik7CisKKyAgICBDb250ZXh0RXhw
cmVzc2lvbkxpc3QgYXJndW1lbnRMaXN0ID0gcGFyc2VDYWxsQXJndW1lbnRzKGNvbnRleHQsIHNp
Z25hdHVyZS5hcmd1bWVudHMpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHJldHVybiBj
b250ZXh0LmJ1aWxkQ2FsbEltcG9ydChmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5mdW5jdGlvbklt
cG9ydEluZGV4LCBhcmd1bWVudExpc3QsIHNpZ25hdHVyZSwgcmV0dXJuVHlwZSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaAppbmRleCBjZTQz
Y2JkOWE2NWYzYzA1YWI5NjVjNGViMzYwMDBmMjU3MGYyOTE1Li45YjRjZjNjZDU4NzliMTczYTky
N2JjZWNhMjY2ZTMwZGZiMWE5NjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25QYXJzZXIuaApAQCAtMTE2LDYgKzExNiw3IEBAIHByaXZhdGU6CiAKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb25MaXN0IHBhcnNlQ2Fs
bEFyZ3VtZW50cyhDb250ZXh0JiwgY29uc3QgVmVjdG9yPFdBU01UeXBlPiYgYXJndW1lbnRzKTsK
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxs
SW50ZXJuYWwoQ29udGV4dCYsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKTsKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxsSW1wb3J0
KENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7CiAKICAgICBKU1dBU01N
b2R1bGUqIG1fbW9kdWxlOwogICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmgKaW5k
ZXggZDQ1NGYzZTk1Y2UwNGUwMmJjMDg2YzI0NDBhYmYwZDlkOTAzNGQ5Yi4uMmEyZjFlM2QzNjgx
MzYyOTQxNmY1YWZmNTdjM2FhNWJiMDg0NzI4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaApAQCAtMTQ0LDEyICsx
NDQsMTkgQEAgcHVibGljOgogICAgIGludCBidWlsZENhbGxJbnRlcm5hbCh1aW50MzJfdCwgaW50
LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1
cm5UeXBlKQogICAgIHsKICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzaWduYXR1cmUu
YXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0Rm9yQ2FsbChh
cmd1bWVudENvdW50KTsKKyAgICAgICAgbV90ZW1wU3RhY2tUb3AgLT0gYXJndW1lbnRDb3VudDsK
KyAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lkKSB7Cisg
ICAgICAgICAgICBtX3RlbXBTdGFja1RvcCsrOworICAgICAgICAgICAgdXBkYXRlVGVtcFN0YWNr
SGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CiAKLSAg
ICAgICAgLy8gQm94ZWQgYXJndW1lbnRzICsgdGhpcyBhcmd1bWVudCArIGNhbGwgZnJhbWUgaGVh
ZGVyICsgcGFkZGluZy4KLSAgICAgICAgbV90ZW1wU3RhY2tUb3AgKz0gYXJndW1lbnRDb3VudCAr
IDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgMTsKLSAgICAgICAgdXBkYXRlVGVt
cFN0YWNrSGVpZ2h0KCk7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wIC09IGFyZ3VtZW50Q291bnQg
KyAxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIDE7Ci0KKyAgICBpbnQgYnVpbGRD
YWxsSW1wb3J0KHVpbnQzMl90LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwg
V0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICB1cGRhdGVU
ZW1wU3RhY2tIZWlnaHRGb3JDYWxsKGFyZ3VtZW50Q291bnQpOwogICAgICAgICBtX3RlbXBTdGFj
a1RvcCAtPSBhcmd1bWVudENvdW50OwogICAgICAgICBpZiAocmV0dXJuVHlwZSAhPSBXQVNNRXhw
cmVzc2lvblR5cGU6OlZvaWQpIHsKICAgICAgICAgICAgIG1fdGVtcFN0YWNrVG9wKys7CkBAIC0x
OTYsNiArMjAzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3RlbXBTdGFja0hlaWdodCA9
IG1fdGVtcFN0YWNrVG9wOwogICAgIH0KIAorICAgIHZvaWQgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0
Rm9yQ2FsbChzaXplX3QgYXJndW1lbnRDb3VudCkKKyAgICB7CisgICAgICAgIC8vIEJveGVkIGFy
Z3VtZW50cyArIHRoaXMgYXJndW1lbnQgKyBjYWxsIGZyYW1lIGhlYWRlciArIG1heGltdW0gcGFk
ZGluZy4KKyAgICAgICAgbV90ZW1wU3RhY2tUb3AgKz0gYXJndW1lbnRDb3VudCArIDEgKyBKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgMTsKKyAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVp
Z2h0KCk7CisgICAgICAgIG1fdGVtcFN0YWNrVG9wIC09IGFyZ3VtZW50Q291bnQgKyAxICsgSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIDE7CisgICAgfQorCiAgICAgdW5zaWduZWQgbV9u
dW1iZXJPZkxvY2FsczsKICAgICB1bnNpZ25lZCBtX3RlbXBTdGFja1RvcCB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX3RlbXBTdGFja0hlaWdodCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKaW5kZXggMTUxOTA5NmVhOTJmZGE2NjY0ZjI5
ZTczOGYwMjdjZjNjZDE0ZjRhZi4uZjc3ZjhmN2VmYjJjZDg1NzdiMGNlMTBiZjdkZGY0M2M3MTM5
YzQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBh
cnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNl
ci5jcHAKQEAgLTQ5LDE4ICs0OSwxOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotV0FTTU1vZHVs
ZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKK1dBU01Nb2R1bGVQYXJzZXI6OldBU01N
b2R1bGVQYXJzZXIoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIEpTT2JqZWN0KiBpbXBvcnRzKQogICAgIDogbV92bSh2bSkKICAg
ICAsIG1fZ2xvYmFsT2JqZWN0KHZtLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCisgICAgLCBtX2ltcG9ydHModm0sIGltcG9ydHMpCiAgICAgLCBtX3JlYWRlcihzdGF0aWNf
Y2FzdDxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKj4oc291cmNlLnByb3ZpZGVyKCkpLT5kYXRh
KCkpCiB7CiB9CiAKLUpTV0FTTU1vZHVsZSogV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UoU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCitKU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKEV4
ZWNTdGF0ZSogZXhlYywgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgbV9tb2R1bGUuc2V0
KG1fdm0sIEpTV0FTTU1vZHVsZTo6Y3JlYXRlKG1fdm0sIG1fZ2xvYmFsT2JqZWN0LT53YXNtTW9k
dWxlU3RydWN0dXJlKCkpKTsKLSAgICBwYXJzZU1vZHVsZSgpOworICAgIHBhcnNlTW9kdWxlKGV4
ZWMpOwogICAgIGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHsKICAgICAgICAgZXJyb3JN
ZXNzYWdlID0gbV9lcnJvck1lc3NhZ2U7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNjgs
NyArNjksNyBAQCBKU1dBU01Nb2R1bGUqIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKFN0cmluZyYg
ZXJyb3JNZXNzYWdlKQogICAgIHJldHVybiBtX21vZHVsZS5nZXQoKTsKIH0KIAotdm9pZCBXQVNN
TW9kdWxlUGFyc2VyOjpwYXJzZU1vZHVsZSgpCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNl
TW9kdWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICB1aW50MzJfdCBtYWdpY051bWJlcjsKICAg
ICBSRUFEX1VJTlQzMl9PUl9GQUlMKG1hZ2ljTnVtYmVyLCAiQ2Fubm90IHJlYWQgdGhlIG1hZ2lj
IG51bWJlci4iKTsKQEAgLTgxLDcgKzgyLDcgQEAgdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJz
ZU1vZHVsZSgpCiAgICAgUFJPUEFHQVRFX0VSUk9SKCk7CiAgICAgcGFyc2VTaWduYXR1cmVTZWN0
aW9uKCk7CiAgICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgcGFyc2VGdW5jdGlvbkltcG9ydFNl
Y3Rpb24oKTsKKyAgICBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbihleGVjKTsKICAgICBQUk9Q
QUdBVEVfRVJST1IoKTsKICAgICBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKICAgICBQUk9QQUdBVEVf
RVJST1IoKTsKQEAgLTE0Myw3ICsxNDQsNyBAQCB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNl
U2lnbmF0dXJlU2VjdGlvbigpCiAgICAgfQogfQogCi12b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCkKK3ZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VG
dW5jdGlvbkltcG9ydFNlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewogICAgIHVpbnQzMl90IG51
bWJlck9mRnVuY3Rpb25JbXBvcnRzOwogICAgIHVpbnQzMl90IG51bWJlck9mRnVuY3Rpb25JbXBv
cnRTaWduYXR1cmVzOwpAQCAtMTUxLDYgKzE1Miw3IEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKQogICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1Jf
RkFJTChudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcywgIkNhbm5vdCByZWFkIHRoZSBu
dW1iZXIgb2YgZnVuY3Rpb24gaW1wb3J0IHNpZ25hdHVyZXMuIik7CiAgICAgbV9tb2R1bGUtPmZ1
bmN0aW9uSW1wb3J0cygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbklt
cG9ydHMpOwogICAgIG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKTsKKyAgICBt
X21vZHVsZS0+aW1wb3J0ZWRGdW5jdGlvbnMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJl
ck9mRnVuY3Rpb25JbXBvcnRzKTsKIAogICAgIGZvciAodWludDMyX3QgZnVuY3Rpb25JbXBvcnRJ
bmRleCA9IDA7IGZ1bmN0aW9uSW1wb3J0SW5kZXggPCBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0czsg
KytmdW5jdGlvbkltcG9ydEluZGV4KSB7CiAgICAgICAgIFdBU01GdW5jdGlvbkltcG9ydCBmdW5j
dGlvbkltcG9ydDsKQEAgLTE2OCw2ICsxNzAsMTMgQEAgdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpCiAgICAgICAgICAgICBmdW5jdGlvbkltcG9ydFNp
Z25hdHVyZS5mdW5jdGlvbkltcG9ydEluZGV4ID0gZnVuY3Rpb25JbXBvcnRJbmRleDsKICAgICAg
ICAgICAgIG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKS51bmNoZWNrZWRBcHBl
bmQoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUpOwogICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1
ZSB2YWx1ZTsKKyAgICAgICAgZ2V0SW1wb3J0ZWRWYWx1ZShleGVjLCBmdW5jdGlvbkltcG9ydC5m
dW5jdGlvbk5hbWUsIHZhbHVlKTsKKyAgICAgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgICAg
IEZBSUxfSUZfRkFMU0UodmFsdWUuaXNGdW5jdGlvbigpLCAiXCIiICsgZnVuY3Rpb25JbXBvcnQu
ZnVuY3Rpb25OYW1lICsgIlwiIGlzIG5vdCBhIGZ1bmN0aW9uLiIpOworICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUuYXNDZWxsKCkpOworICAg
ICAgICBtX21vZHVsZS0+aW1wb3J0ZWRGdW5jdGlvbnMoKS51bmNoZWNrZWRBcHBlbmQoV3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24+KG1fdm0sIG1fbW9kdWxlLmdldCgpLCBmdW5jdGlvbikpOwogICAg
IH0KICAgICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMo
KS5zaXplKCkgPT0gbnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMsICJUaGUgbnVtYmVy
IG9mIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmVzIGlzIGluY29ycmVjdC4iKTsKIH0KQEAgLTMy
MSwxMCArMzMwLDIyIEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9u
KCkKICAgICB9CiB9CiAKLUpTV0FTTU1vZHVsZSogcGFyc2VXZWJBc3NlbWJseShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit2
b2lkIFdBU01Nb2R1bGVQYXJzZXI6OmdldEltcG9ydGVkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIGltcG9ydE5hbWUsIEpTVmFsdWUmIHZhbHVlKQoreworICAgIEZBSUxfSUZf
RkFMU0UobV9pbXBvcnRzLCAiQWNjZXNzaW5nIHByb3BlcnR5IG9mIG5vbi1vYmplY3QuIik7Cisg
ICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV92bSwg
aW1wb3J0TmFtZSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QobV9pbXBvcnRzLmdldCgpKTsKKyAg
ICBpZiAoIW1faW1wb3J0cy0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3Qp
KQorICAgICAgICBGQUlMX1dJVEhfTUVTU0FHRSgiQ2FuJ3QgZmluZCBhIHByb3BlcnR5IG5hbWVk
IFwiIiArIGltcG9ydE5hbWUgKyAnIicpOworICAgIEZBSUxfSUZfRkFMU0Uoc2xvdC5pc1ZhbHVl
KCksICJcIiIgKyBpbXBvcnROYW1lICsgIlwiIGlzIG5vdCBhIGRhdGEgcHJvcGVydHkuIik7Cisg
ICAgLy8gV2Ugb25seSByZXRyaWV2ZSBkYXRhIHByb3BlcnRpZXMuIFNvLCB0aGlzIGRvZXMgbm90
IGNhdXNlIGFueSB1c2VyLW9ic2VydmFibGUgZWZmZWN0LgorICAgIHZhbHVlID0gc2xvdC5nZXRW
YWx1ZShleGVjLCBpZGVudGlmaWVyKTsKK30KKworSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2Vt
Ymx5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCog
aW1wb3J0cywgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgV0FTTU1vZHVsZVBhcnNlciBt
b2R1bGVQYXJzZXIoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzb3Vy
Y2UpOwotICAgIHJldHVybiBtb2R1bGVQYXJzZXIucGFyc2UoZXJyb3JNZXNzYWdlKTsKKyAgICBX
QVNNTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcihleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHNvdXJjZSwgaW1wb3J0cyk7CisgICAgcmV0dXJuIG1vZHVsZVBhcnNlci5w
YXJzZShleGVjLCBlcnJvck1lc3NhZ2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAppbmRleCBlMmY0ZmI3
NThjOTUxMzUzZjg2MDg3ZDU5MDRjNWYzNjI2M2VlZmFiLi5kNmU3ZmRiYWNiN2UyODk1NDlmY2Yx
YTg3MDEyZDQ5NzlmZmI2NjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TU1vZHVsZVBhcnNlci5oCkBAIC00MiwzMCArNDIsMzIgQEAgY2xhc3MgVk07CiAKIGNsYXNzIFdB
U01Nb2R1bGVQYXJzZXIgewogcHVibGljOgotICAgIFdBU01Nb2R1bGVQYXJzZXIoVk0mLCBKU0ds
b2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICBKU1dBU01Nb2R1bGUqIHBhcnNl
KFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICBXQVNNTW9kdWxlUGFyc2VyKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqIGltcG9ydHMpOworICAgIEpT
V0FTTU1vZHVsZSogcGFyc2UoRXhlY1N0YXRlKiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiBw
cml2YXRlOgotICAgIHZvaWQgcGFyc2VNb2R1bGUoKTsKKyAgICB2b2lkIHBhcnNlTW9kdWxlKEV4
ZWNTdGF0ZSopOwogICAgIHZvaWQgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CiAgICAgdm9p
ZCBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKLSAgICB2b2lkIHBhcnNlRnVuY3Rpb25JbXBvcnRT
ZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbihFeGVjU3RhdGUq
KTsKICAgICB2b2lkIHBhcnNlR2xvYmFsU2VjdGlvbigpOwogICAgIHZvaWQgcGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uU2VjdGlvbigpOwogICAgIHZvaWQgcGFyc2VGdW5jdGlvblBvaW50ZXJUYWJs
ZVNlY3Rpb24oKTsKICAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpOwog
ICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOwog
ICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0aW9uKCk7CisgICAgdm9pZCBnZXRJbXBvcnRlZFZhbHVl
KEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgaW1wb3J0TmFtZSwgSlNWYWx1ZSYpOwogCiAgICAg
Vk0mIG1fdm07CiAgICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAg
ICBjb25zdCBTb3VyY2VDb2RlJiBtX3NvdXJjZTsKKyAgICBTdHJvbmc8SlNPYmplY3Q+IG1faW1w
b3J0czsKICAgICBXQVNNUmVhZGVyIG1fcmVhZGVyOwogICAgIFN0cm9uZzxKU1dBU01Nb2R1bGU+
IG1fbW9kdWxlOwogICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKIH07CiAKLUpTX0VYUE9SVF9Q
UklWQVRFIEpTV0FTTU1vZHVsZSogcGFyc2VXZWJBc3NlbWJseShFeGVjU3RhdGUqLCBjb25zdCBT
b3VyY2VDb2RlJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNX
QVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUm
LCBKU09iamVjdCogaW1wb3J0cywgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>