<?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>113571</bug_id>
          
          <creation_ts>2013-03-29 05:41:18 -0700</creation_ts>
          <short_desc>Implement DOMFutures</short_desc>
          <delta_ts>2013-08-01 04:01:17 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>http://dom.spec.whatwg.org/#futures</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>annevk</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>domenic</cc>
    
    <cc>ericbidelman</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mounir</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>peter</cc>
    
    <cc>peter+ews</cc>
    
    <cc>pivisko</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit.bugzilla</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>866099</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-03-29 05:41:18 -0700</bug_when>
    <thetext>DOM 4 is introducing Futures, which offers a nicer way to build asynchronous APIs.
Futures provide a convenient way to get access to the result of an operation.

More details at: http://dom.spec.whatwg.org/#futures

It would be nice to implement them in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866457</commentid>
    <comment_count>1</comment_count>
      <attachid>195814</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-03-29 16:11:13 -0700</bug_when>
    <thetext>Created attachment 195814
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866471</commentid>
    <comment_count>2</comment_count>
      <attachid>195814</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-03-29 16:28:28 -0700</bug_when>
    <thetext>Comment on attachment 195814
WIP Patch

Attachment 195814 did not pass cr-android-ews (chromium-android):
Output: http://webkit-commit-queue.appspot.com/results/17255654</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866474</commentid>
    <comment_count>3</comment_count>
      <attachid>195814</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-29 16:29:17 -0700</bug_when>
    <thetext>Comment on attachment 195814
WIP Patch

Attachment 195814 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17311746</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866485</commentid>
    <comment_count>4</comment_count>
      <attachid>195814</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-29 16:49:36 -0700</bug_when>
    <thetext>Comment on attachment 195814
WIP Patch

Attachment 195814 did not pass chromium-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/17257696</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866490</commentid>
    <comment_count>5</comment_count>
      <attachid>195814</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-29 16:56:15 -0700</bug_when>
    <thetext>Comment on attachment 195814
WIP Patch

Attachment 195814 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17327415</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866493</commentid>
    <comment_count>6</comment_count>
      <attachid>195814</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-29 16:58:24 -0700</bug_when>
    <thetext>Comment on attachment 195814
WIP Patch

Attachment 195814 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://webkit-commit-queue.appspot.com/results/17356136</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866500</commentid>
    <comment_count>7</comment_count>
      <attachid>195814</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-29 17:15:17 -0700</bug_when>
    <thetext>Comment on attachment 195814
WIP Patch

Attachment 195814 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17327421</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866520</commentid>
    <comment_count>8</comment_count>
      <attachid>195814</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-29 17:56:52 -0700</bug_when>
    <thetext>Comment on attachment 195814
WIP Patch

Attachment 195814 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17330451</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866593</commentid>
    <comment_count>9</comment_count>
      <attachid>195814</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-30 02:39:11 -0700</bug_when>
    <thetext>Comment on attachment 195814
WIP Patch

Attachment 195814 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17332298</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866622</commentid>
    <comment_count>10</comment_count>
      <attachid>195860</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-03-30 10:39:31 -0700</bug_when>
    <thetext>Created attachment 195860
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866623</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-30 10:43:57 -0700</bug_when>
    <thetext>I would like to review this patch before it lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866633</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-03-30 11:07:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I would like to review this patch before it lands.

Sure. Is it better to send an email to webkit-dev as well to announce that I&apos;m working on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866656</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-30 11:49:23 -0700</bug_when>
    <thetext>&gt; Sure. Is it better to send an email to webkit-dev as well to announce that I&apos;m working on this?

That might be worthwhile.  I&apos;m more interested in the technical aspects of the patch (e.g., the usage of ScriptValue).  It looks like your work is still in progress, so it didn&apos;t seem appropriate to review the current patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866670</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-03-30 12:54:20 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; Sure. Is it better to send an email to webkit-dev as well to announce that I&apos;m working on this?
&gt; 
&gt; That might be worthwhile.  I&apos;m more interested in the technical aspects of the patch (e.g., the usage of ScriptValue).  It looks like your work is still in progress, so it didn&apos;t seem appropriate to review the current patch.

This is useful feedback, thanks. Could you please explain the issue with using ScriptValue? Is there a better way to represent the WebIDL &quot;any&quot; type? I see that it is used quite a lot in the IndexedDB code, which I used as reference.

I tried compiling the patch for Chromium to see if I was missing something related to V8 but the generic code seems to compile fine as ScriptValue also exists for V8 (although with a different API but it does not matter much for my use).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866689</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-30 14:16:04 -0700</bug_when>
    <thetext>You almost certainly should not be using ScriptValue.  Essentially any time we use ScriptValue, it&apos;s a memory leak.  I&apos;d have to study this feature in more detail to figure out the best way of implementing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867127</commentid>
    <comment_count>16</comment_count>
      <attachid>195972</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-04-01 08:22:24 -0700</bug_when>
    <thetext>Created attachment 195972
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913695</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-08-01 04:01:17 -0700</bug_when>
    <thetext>Promises should now be implemented, not futures.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195814</attachid>
            <date>2013-03-29 16:11:13 -0700</date>
            <delta_ts>2013-03-30 10:39:31 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>113571_DOMFuture.patch</filename>
            <type>text/plain</type>
            <size>43594</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMzliMDAzOC4uNjZiMWNjMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTMzMSw2ICszMzEsNyBAQCBzZXQoV2ViQ29yZV9JRExfRklMRVMKICAgICBjc3Mv
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaWRsCiAgICAgY3NzL1dlYktpdENTU1ZpZXdwb3J0UnVs
ZS5pZGwKIAorICAgIGRvbS9BbnlDYWxsYmFjay5pZGwKICAgICBkb20vQXR0ci5pZGwKICAgICBk
b20vQmVmb3JlTG9hZEV2ZW50LmlkbAogICAgIGRvbS9DREFUQVNlY3Rpb24uaWRsCkBAIC0zNjEs
NiArMzYyLDkgQEAgc2V0KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgZG9tL0V2ZW50LmlkbAogICAg
IGRvbS9FdmVudFRhcmdldC5pZGwKICAgICBkb20vRm9jdXNFdmVudC5pZGwKKyAgICBkb20vRnV0
dXJlLmlkbAorICAgIGRvbS9GdXR1cmVJbml0LmlkbAorICAgIGRvbS9GdXR1cmVSZXNvbHZlci5p
ZGwKICAgICBkb20vSGFzaENoYW5nZUV2ZW50LmlkbAogICAgIGRvbS9LZXlib2FyZEV2ZW50Lmlk
bAogICAgIGRvbS9NZXNzYWdlQ2hhbm5lbC5pZGwKQEAgLTExODIsNiArMTE4NiwxMCBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAgZG9tL0V4Y2Vw
dGlvbkNvZGVQbGFjZWhvbGRlci5jcHAKICAgICBkb20vRm9jdXNFdmVudC5jcHAKKyAgICBkb20v
RnV0dXJlLmNwcAorICAgIGRvbS9GdXR1cmVIYW5kbGVyLmNwcAorICAgIGRvbS9GdXR1cmVJbml0
LmNwcAorICAgIGRvbS9GdXR1cmVSZXNvbHZlci5jcHAKICAgICBkb20vR2VuZXJpY0V2ZW50UXVl
dWUuY3BwCiAgICAgZG9tL0dlc3R1cmVFdmVudC5jcHAKICAgICBkb20vSWNvblVSTC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Vz
ZUpTQy5jbWFrZQppbmRleCA4NDU0YTVhLi5iNjcyNDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Vc2VKU0MuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCkBAIC0y
NSwxMCArMjUsMTIgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3Mv
anMvQXJyYXlWYWx1ZS5jcHAKICAgICBiaW5kaW5ncy9qcy9CaW5kaW5nU3RhdGUuY3BwCiAgICAg
YmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5jcHAKKyAgICBiaW5kaW5ncy9qcy9ET01GdXR1
cmVzQmluZGluZ1V0aWxpdGllcy5jcHAKICAgICBiaW5kaW5ncy9qcy9ET01PYmplY3RIYXNoVGFi
bGVNYXAuY3BwCiAgICAgYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAogICAgIGJpbmRp
bmdzL2pzL0RpY3Rpb25hcnkuY3BwCiAgICAgYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAor
ICAgIGJpbmRpbmdzL2pzL0pTQW55Q2FsbGJhY2tDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMv
SlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3Bw
CiAgICAgYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ODNhZjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01GdXR1cmVzQmluZGluZ1V0aWxpdGllcy5j
cHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVs
ZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXMuaCIKKworI2luY2x1
ZGUgIkZ1dHVyZS5oIgorI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgorI2luY2x1ZGUgIkpT
RnV0dXJlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRnV0dXJlKiBzY3JpcHRWYWx1ZVRvRnV0dXJlKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdG9GdXR1cmUodmFsdWUuanNWYWx1ZSgpKTsKK30KKworYm9vbCBpc0V4
Y2VwdGlvbihjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUpCit7CisgICAgcmV0dXJuICEhdG9FeGNl
cHRpb25CYXNlKHZhbHVlLmpzVmFsdWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUZ1dHVyZXNCaW5kaW5n
VXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01GdXR1cmVzQmluZGlu
Z1V0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNDk1M2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01GdXR1cmVz
QmluZGluZ1V0aWxpdGllcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBET01GdXR1cmVzQmluZGluZ1V0aWxpdGllc19oCisjZGVmaW5lIERPTUZ1dHVy
ZXNCaW5kaW5nVXRpbGl0aWVzX2gKKworI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBbnlDYWxs
YmFjazsKK2NsYXNzIEZ1dHVyZTsKK2NsYXNzIEZ1dHVyZVJlc29sdmVyOworCitGdXR1cmUqIHNj
cmlwdFZhbHVlVG9GdXR1cmUoY29uc3QgU2NyaXB0VmFsdWUmKTsKK2Jvb2wgaXNFeGNlcHRpb24o
Y29uc3QgU2NyaXB0VmFsdWUmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBbnlDYWxsYmFja0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0FueUNhbGxiYWNrQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yODU0NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBbnlDYWxsYmFja0N1c3RvbS5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBbnlD
YWxsYmFjay5oIgorCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU2NyaXB0VmFsdWUgSlNBbnlDYWxsYmFjazo6aGFuZGxlRXZlbnQoU2NyaXB0VmFs
dWUgZGF0YSkKK3sKKyAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVy
biBTY3JpcHRWYWx1ZSgpOworCisgICAgUmVmUHRyPEpTQW55Q2FsbGJhY2s+IHByb3RlY3QodGhp
cyk7CisKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxEYXRhKCkpOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5hcHBlbmQoZGF0YS5qc1ZhbHVlKCkpOworCisgICAgYm9vbCByYWlzZWRFeGNlcHRpb24gPSBm
YWxzZTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZGF0
YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJnJhaXNlZEV4Y2VwdGlvbiwgJmV4Y2VwdGlvbik7Cisg
ICAgaWYgKHJhaXNlZEV4Y2VwdGlvbikKKyAgICAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhjZXB0aW9uKTsKKworICAgIHJldHVybiBTY3JpcHRWYWx1ZShleGVj
LT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAppbmRleCBhYTMw
ZGU3Li44MjIyNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bGxiYWNrRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFj
a0RhdGEuY3BwCkBAIC00MiwxMyArNDIsMTMgQEAgdm9pZCBKU0NhbGxiYWNrRGF0YTo6ZGVsZXRl
RGF0YSh2b2lkKiBjb250ZXh0KQogICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrRGF0
YSo+KGNvbnRleHQpOwogfQogCi1KU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFj
ayhNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncywgYm9vbCogcmFpc2VkRXhjZXB0aW9uKQorSlNW
YWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soTWFya2VkQXJndW1lbnRCdWZmZXIm
IGFyZ3MsIGJvb2wqIHJhaXNlZEV4Y2VwdGlvbiwgSlNWYWx1ZSogZXhjZXB0aW9uKQogewogICAg
IEFTU0VSVChjYWxsYmFjaygpKTsKICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soY2FsbGJhY2so
KSwgYXJncywgcmFpc2VkRXhjZXB0aW9uKTsKIH0KIAotSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6
aW52b2tlQ2FsbGJhY2soSlNWYWx1ZSB0aGlzVmFsdWUsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBh
cmdzLCBib29sKiByYWlzZWRFeGNlcHRpb24pCitKU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZv
a2VDYWxsYmFjayhKU1ZhbHVlIHRoaXNWYWx1ZSwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3Ms
IGJvb2wqIHJhaXNlZEV4Y2VwdGlvbiwgSlNWYWx1ZSogZXhjZXB0aW9uKQogewogICAgIEFTU0VS
VChjYWxsYmFjaygpKTsKICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KCkpOwpAQCAtODUsOSArODUs
MTIgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSlNWYWx1ZSB0aGlz
VmFsdWUsIE1hcmtlZEFyZ3VtZW50QnVmZmVyJgogICAgICAgICBEb2N1bWVudDo6dXBkYXRlU3R5
bGVGb3JBbGxEb2N1bWVudHMoKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwogICAgICAgICBpZiAocmFpc2Vk
RXhjZXB0aW9uKQogICAgICAgICAgICAgKnJhaXNlZEV4Y2VwdGlvbiA9IHRydWU7CisgICAgICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgICAgICAqZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9u
KCk7CisgICAgICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CisKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FsbGJhY2tEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxi
YWNrRGF0YS5oCmluZGV4IDczOGQwZWEuLmFiZmUxODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaApAQCAtNjQsOCArNjQsOCBAQCBwdWJsaWM6CiAgICAg
SlNDOjpKU09iamVjdCogY2FsbGJhY2soKSB7IHJldHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CiAg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpOyB9CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIGludm9rZUNhbGxiYWNrKEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXImLCBib29sKiByYWlzZWRFeGNlcHRpb24gPSAwKTsKLSAgICBK
U0M6OkpTVmFsdWUgaW52b2tlQ2FsbGJhY2soSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciYsIGJvb2wqIHJhaXNlZEV4Y2VwdGlvbiA9IDApOworICAgIEpT
Qzo6SlNWYWx1ZSBpbnZva2VDYWxsYmFjayhKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiwgYm9v
bCogcmFpc2VkRXhjZXB0aW9uID0gMCwgSlNDOjpKU1ZhbHVlKiBleGNlcHRpb24gPSAwKTsKKyAg
ICBKU0M6OkpTVmFsdWUgaW52b2tlQ2FsbGJhY2soSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYsIGJvb2wqIHJhaXNlZEV4Y2VwdGlvbiA9IDAsIEpTQzo6
SlNWYWx1ZSogZXhjZXB0aW9uID0gMCk7CiAKIHByaXZhdGU6CiAgICAgSlNDOjpTdHJvbmc8SlND
OjpKU09iamVjdD4gbV9jYWxsYmFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9B
bnlDYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0FueUNhbGxiYWNrLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1OWU4OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BbnlDYWxsYmFjay5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBbnlDYWxsYmFja19oCisjZGVmaW5lIEFueUNhbGxiYWNr
X2gKKworI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK2NsYXNzIEFueUNhbGxiYWNrIDogcHVibGlj
IFJlZkNvdW50ZWQ8QW55Q2FsbGJhY2s+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BbnlDYWxs
YmFjaygpIHsgfQorICAgIHZpcnR1YWwgU2NyaXB0VmFsdWUgaGFuZGxlRXZlbnQoU2NyaXB0VmFs
dWUpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEFueUNh
bGxiYWNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BbnlDYWxsYmFjay5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQW55Q2FsbGJhY2suaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjAzYTMwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQW55Q2FsbGJhY2suaWRsCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworWworICAgIENhbGxiYWNrCitdIGludGVyZmFjZSBBbnlDYWxsYmFjayB7CisgICAgW0N1
c3RvbV0gYW55IGhhbmRsZUV2ZW50KGluIFtPcHRpb25hbF0gYW55IGRhdGEpOworfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01Db3JlRXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9ET01Db3JlRXhjZXB0aW9uLmNwcAppbmRleCA2YjFmMGM1Li5iMzQ4ZDk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQ29yZUV4Y2VwdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RPTUNvcmVFeGNlcHRpb24uY3BwCkBAIC02MCw3ICs2MCw3IEBA
IHN0YXRpYyBzdHJ1Y3QgQ29yZUV4Y2VwdGlvbiB7CiAgICAgeyAiUXVvdGFFeGNlZWRlZEVycm9y
IiwgIkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gYWRkIHNvbWV0aGluZyB0byBzdG9yYWdlIHRoYXQg
ZXhjZWVkZWQgdGhlIHF1b3RhLiIgfSwKICAgICB7ICJUaW1lb3V0RXJyb3IiLCAiQSB0aW1lb3V0
IG9jY3VycmVkLiIgfSwKICAgICB7ICJJbnZhbGlkTm9kZVR5cGVFcnJvciIsICJUaGUgc3VwcGxp
ZWQgbm9kZSBpcyBpbnZhbGlkIG9yIGhhcyBhbiBpbnZhbGlkIGFuY2VzdG9yIGZvciB0aGlzIG9w
ZXJhdGlvbi4iIH0sCi0gICAgeyAiRGF0YUNsb25lRXJyb3IiLCAiQW4gb2JqZWN0IGNvdWxkIG5v
dCBiZSBjbG9uZWQuIiB9CisgICAgeyAiRGF0YUNsb25lRXJyb3IiLCAiQW4gb2JqZWN0IGNvdWxk
IG5vdCBiZSBjbG9uZWQuIiB9LAogfTsKIAogYm9vbCBET01Db3JlRXhjZXB0aW9uOjppbml0aWFs
aXplRGVzY3JpcHRpb24oRXhjZXB0aW9uQ29kZSBlYywgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
KiBkZXNjcmlwdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmQ5NWZjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9GdXR1cmUuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdXR1cmUuaCIKKworI2luY2x1ZGUgIkFueUNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiRnV0dXJlUmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitGdXR1cmU6OkZ1dHVyZShQYXNzUmVmUHRyPEZ1dHVyZUluaXQ+IGluaXQpCisgICAg
OiBtX3Jlc29sdmVyKEZ1dHVyZVJlc29sdmVyOjpjcmVhdGUodGhpcykpCisgICAgLCBtX3N0YXRl
KFBlbmRpbmcpCisgICAgLCBtX3RpbWVyKHRoaXMsICZGdXR1cmU6OnRpbWVyRmlyZWQpCit7Cisg
ICAgaWYgKGluaXQpCisgICAgICAgIGluaXQtPmhhbmRsZUV2ZW50KG1fcmVzb2x2ZXIuZ2V0KCkp
OworfQorCit2b2lkIEZ1dHVyZTo6dGltZXJGaXJlZChUaW1lcjxGdXR1cmU+KikKK3sKKyAgICBk
b1Byb2Nlc3NIYW5kbGVycygpOworfQorCitGdXR1cmU6On5GdXR1cmUoKQoreworfQorCit2b2lk
IEZ1dHVyZTo6YXBwZW5kQWNjZXB0SGFuZGxlcihQYXNzT3duUHRyPEZ1dHVyZUhhbmRsZXI+IGFj
Y2VwdEhhbmRsZXIpCit7CisgICAgQVNTRVJUKGFjY2VwdEhhbmRsZXIpOworICAgIG1fYWNjZXB0
SGFuZGxlcnMuYXBwZW5kKGFjY2VwdEhhbmRsZXIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gQWNj
ZXB0ZWQpCisgICAgICAgIHByb2Nlc3NIYW5kbGVycyhBc3luY2hyb25vdXMpOworfQorCit2b2lk
IEZ1dHVyZTo6YXBwZW5kUmVqZWN0SGFuZGxlcihQYXNzT3duUHRyPEZ1dHVyZUhhbmRsZXI+IHJl
amVjdEhhbmRsZXIpCit7CisgICAgQVNTRVJUKHJlamVjdEhhbmRsZXIpOworICAgIG1fcmVqZWN0
SGFuZGxlcnMuYXBwZW5kKHJlamVjdEhhbmRsZXIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gUmVq
ZWN0ZWQpCisgICAgICAgIHByb2Nlc3NIYW5kbGVycyhBc3luY2hyb25vdXMpOworfQorCitQYXNz
UmVmUHRyPEZ1dHVyZT4gRnV0dXJlOjp0aGVuKFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+IGFjY2Vw
dENhbGxiYWNrLCBQYXNzUmVmUHRyPEFueUNhbGxiYWNrPiByZWplY3RDYWxsYmFjaykKK3sKKyAg
ICBSZWZQdHI8RnV0dXJlPiBuZXdGdXR1cmUgPSBGdXR1cmU6OmNyZWF0ZSgpOworCisgICAgaWYg
KGFjY2VwdENhbGxiYWNrKSB7CisgICAgICAgIE93blB0cjxGdXR1cmVIYW5kbGVyPiBhY2NlcHRI
YW5kbGVyID0gRnV0dXJlSGFuZGxlcjo6Y3JlYXRlKEZ1dHVyZUhhbmRsZXI6OlJlc29sdmUsIGFj
Y2VwdENhbGxiYWNrLCBuZXdGdXR1cmUtPnJlc29sdmVyKCkpOworICAgICAgICBhcHBlbmRBY2Nl
cHRIYW5kbGVyKGFjY2VwdEhhbmRsZXIucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBpZiAocmVq
ZWN0Q2FsbGJhY2spIHsKKyAgICAgICAgT3duUHRyPEZ1dHVyZUhhbmRsZXI+IHJlamVjdEhhbmRs
ZXIgPSBGdXR1cmVIYW5kbGVyOjpjcmVhdGUoRnV0dXJlSGFuZGxlcjo6UmVqZWN0LCByZWplY3RD
YWxsYmFjaywgbmV3RnV0dXJlLT5yZXNvbHZlcigpKTsKKyAgICAgICAgYXBwZW5kQWNjZXB0SGFu
ZGxlcihyZWplY3RIYW5kbGVyLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG5ld0Z1
dHVyZTsKK30KKworUGFzc1JlZlB0cjxGdXR1cmU+IEZ1dHVyZTo6Y2F0Y2hGdW5jKFBhc3NSZWZQ
dHI8QW55Q2FsbGJhY2s+IHJlamVjdENhbGxiYWNrKQoreworICAgIFJlZlB0cjxGdXR1cmU+IG5l
d0Z1dHVyZSA9IEZ1dHVyZTo6Y3JlYXRlKCk7CisKKyAgICBPd25QdHI8RnV0dXJlSGFuZGxlcj4g
YWNjZXB0SGFuZGxlciA9IEZ1dHVyZUhhbmRsZXI6OmNyZWF0ZShGdXR1cmVIYW5kbGVyOjpSZXNv
bHZlLCAwLCBuZXdGdXR1cmUtPnJlc29sdmVyKCkpOworICAgIGFwcGVuZEFjY2VwdEhhbmRsZXIo
YWNjZXB0SGFuZGxlci5yZWxlYXNlKCkpOworCisgICAgaWYgKHJlamVjdENhbGxiYWNrKSB7Cisg
ICAgICAgIE93blB0cjxGdXR1cmVIYW5kbGVyPiByZWplY3RIYW5kbGVyID0gRnV0dXJlSGFuZGxl
cjo6Y3JlYXRlKEZ1dHVyZUhhbmRsZXI6OlJlamVjdCwgcmVqZWN0Q2FsbGJhY2ssIG5ld0Z1dHVy
ZS0+cmVzb2x2ZXIoKSk7CisgICAgICAgIGFwcGVuZFJlamVjdEhhbmRsZXIocmVqZWN0SGFuZGxl
ci5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBuZXdGdXR1cmU7Cit9CisKK3ZvaWQg
RnV0dXJlOjpkb25lKFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+IGFjY2VwdENhbGxiYWNrLCBQYXNz
UmVmUHRyPEFueUNhbGxiYWNrPiByZWplY3RDYWxsYmFjaykKK3sKKyAgICBpZiAoYWNjZXB0Q2Fs
bGJhY2spIHsKKyAgICAgICAgT3duUHRyPEZ1dHVyZUhhbmRsZXI+IGFjY2VwdEhhbmRsZXIgPSBG
dXR1cmVIYW5kbGVyOjpjcmVhdGUoRnV0dXJlSGFuZGxlcjo6Tm9uZSwgYWNjZXB0Q2FsbGJhY2ss
IDApOworICAgICAgICBhcHBlbmRBY2NlcHRIYW5kbGVyKGFjY2VwdEhhbmRsZXIucmVsZWFzZSgp
KTsKKyAgICB9CisKKyAgICBpZiAocmVqZWN0Q2FsbGJhY2spIHsKKyAgICAgICAgT3duUHRyPEZ1
dHVyZUhhbmRsZXI+IHJlamVjdEhhbmRsZXIgPSBGdXR1cmVIYW5kbGVyOjpjcmVhdGUoRnV0dXJl
SGFuZGxlcjo6Tm9uZSwgcmVqZWN0Q2FsbGJhY2ssIDApOworICAgICAgICBhcHBlbmRSZWplY3RI
YW5kbGVyKHJlamVjdEhhbmRsZXIucmVsZWFzZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgRnV0dXJl
Ojpwcm9jZXNzSGFuZGxlcnMoU3luY2hyb25vdXNNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUg
PT0gU3luY2hyb25vdXMpCisgICAgICAgIGRvUHJvY2Vzc0hhbmRsZXJzKCk7CisgICAgZWxzZQor
ICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBGdXR1cmU6OmRvUHJv
Y2Vzc0hhbmRsZXJzKCkKK3sKKyAgICBjb25zdCBGdXR1cmVIYW5kbGVyVmVjdG9yJiBoYW5kbGVy
cyA9IChtX3N0YXRlID09IEFjY2VwdGVkKSA/IG1fYWNjZXB0SGFuZGxlcnMgOiBtX3JlamVjdEhh
bmRsZXJzOworICAgIGNvbnN0IHNpemVfdCBoYW5kbGVyQ291bnQgPSBoYW5kbGVycy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoYW5kbGVyQ291bnQ7ICsraSkKKyAgICAgICAg
aGFuZGxlcnNbaV0tPmNhbGwobV9yZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRnV0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3ODRk
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuaApAQCAtMCww
ICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnV0dXJlX2gKKyNkZWZp
bmUgRnV0dXJlX2gKKworI2luY2x1ZGUgIkZ1dHVyZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJGdXR1
cmVJbml0LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGdXR1cmUgOiBwdWJsaWMgUmVmQ291bnRlZDxGdXR1
cmU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsgUGVuZGluZywgQWNjZXB0ZWQsIFJlamVj
dGVkIH07CisgICAgZW51bSBTeW5jaHJvbm91c01vZGUgeyBBc3luY2hyb25vdXMsIFN5bmNocm9u
b3VzIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdXR1cmU+IGNyZWF0ZShQYXNzUmVmUHRy
PEZ1dHVyZUluaXQ+IGluaXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGdXR1cmUoaW5pdCkpOworICAgIH0KKworICAgIH5GdXR1cmUoKTsKKworICAgIFBhc3NSZWZQ
dHI8RnV0dXJlPiB0aGVuKFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+IGFjY2VwdENhbGxiYWNrID0g
MCwgUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4gcmVqZWN0Q2FsbGJhY2sgPSAwKTsKKyAgICBQYXNz
UmVmUHRyPEZ1dHVyZT4gY2F0Y2hGdW5jKFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+IHJlamVjdENh
bGxiYWNrID0gMCk7CisgICAgdm9pZCBkb25lKFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+IGFjY2Vw
dENhbGxiYWNrID0gMCwgUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4gcmVqZWN0Q2FsbGJhY2sgPSAw
KTsKKworICAgIEZ1dHVyZVJlc29sdmVyKiByZXNvbHZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b2x2ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0UmVzdWx0KGNvbnN0IFNjcmlwdFZhbHVlJiBy
ZXN1bHQpIHsgbV9yZXN1bHQgPSByZXN1bHQ7IH0KKyAgICB2b2lkIHNldFN0YXRlKFN0YXRlIHN0
YXRlKSB7IG1fc3RhdGUgPSBzdGF0ZTsgfQorCisgICAgdm9pZCBwcm9jZXNzSGFuZGxlcnMoU3lu
Y2hyb25vdXNNb2RlKTsKKyAgICB2b2lkIGFwcGVuZEFjY2VwdEhhbmRsZXIoUGFzc093blB0cjxG
dXR1cmVIYW5kbGVyPik7CisgICAgdm9pZCBhcHBlbmRSZWplY3RIYW5kbGVyKFBhc3NPd25QdHI8
RnV0dXJlSGFuZGxlcj4pOworCitwcml2YXRlOgorICAgIEZ1dHVyZShQYXNzUmVmUHRyPEZ1dHVy
ZUluaXQ+KTsKKworICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxGdXR1cmU+Kik7CisgICAgdm9p
ZCBkb1Byb2Nlc3NIYW5kbGVycygpOworCisgICAgdHlwZWRlZiBWZWN0b3I8T3duUHRyPEZ1dHVy
ZUhhbmRsZXI+ID4gRnV0dXJlSGFuZGxlclZlY3RvcjsKKworICAgIFJlZlB0cjxGdXR1cmVSZXNv
bHZlcj4gbV9yZXNvbHZlcjsKKyAgICBTdGF0ZSBtX3N0YXRlOworICAgIFNjcmlwdFZhbHVlIG1f
cmVzdWx0OworICAgIEZ1dHVyZUhhbmRsZXJWZWN0b3IgbV9hY2NlcHRIYW5kbGVyczsKKyAgICBG
dXR1cmVIYW5kbGVyVmVjdG9yIG1fcmVqZWN0SGFuZGxlcnM7CisgICAgVGltZXI8RnV0dXJlPiBt
X3RpbWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnV0dXJl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuaWRsIGIvU291cmNlL1dl
YkNvcmUvZG9tL0Z1dHVyZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YjA5YjQ5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuaWRs
CkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVj
dHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAgIENvbnN0cnVj
dG9yKGluIFtDYWxsYmFja10gRnV0dXJlSW5pdCBpbml0KQorXSBpbnRlcmZhY2UgRnV0dXJlIHsK
KyAgICBGdXR1cmUgdGhlbihpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBBbnlDYWxsYmFjayBhY2Nl
cHRDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gQW55Q2FsbGJhY2sgcmVqZWN0Q2Fs
bGJhY2spOworICAgIFtJbXBsZW1lbnRlZEFzPWNhdGNoRnVuY10gRnV0dXJlIGNhdGNoKGluIFtD
YWxsYmFjaywgT3B0aW9uYWxdIEFueUNhbGxiYWNrIHJlamVjdENhbGxiYWNrKTsKKyAgICB2b2lk
IGRvbmUoaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gQW55Q2FsbGJhY2sgYWNjZXB0Q2FsbGJhY2ss
IGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEFueUNhbGxiYWNrIHJlamVjdENhbGxiYWNrKTsKK307
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRnV0dXJlSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOWFjYjRmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9GdXR1cmVIYW5kbGVyLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdXR1cmVIYW5kbGVyLmgiCisKKyNp
bmNsdWRlICJET01GdXR1cmVzQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkZ1dHVyZVJl
c29sdmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRnV0dXJlSGFuZGxlcjo6RnV0dXJl
SGFuZGxlcihIYW5kbGVyVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEFueUNhbGxiYWNrPiBjYWxsYmFj
aywgRnV0dXJlUmVzb2x2ZXIqIHJlc29sdmVyKQorICAgIDogbV90eXBlKHR5cGUpCisgICAgLCBt
X2NhbGxiYWNrKGNhbGxiYWNrKQorICAgICwgbV9yZXNvbHZlcihyZXNvbHZlcikKK3sKK30KKwor
RnV0dXJlSGFuZGxlcjo6fkZ1dHVyZUhhbmRsZXIoKQoreworfQorCit2b2lkIEZ1dHVyZUhhbmRs
ZXI6OmNhbGwoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIGlmICghbV9jYWxsYmFj
aykgeworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIFJlc29sdmU6Cisg
ICAgICAgICAgICBtX3Jlc29sdmVyLT5yZXNvbHZlKHZhbHVlLCBGdXR1cmU6OlN5bmNocm9ub3Vz
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlamVjdDoKKyAgICAgICAgICAg
IG1fcmVzb2x2ZXItPnJlamVjdCh2YWx1ZSwgRnV0dXJlOjpTeW5jaHJvbm91cyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogU2V0IGhhbmRsZXIn
cyBjYWxsYmFjaydzIGNhbGxiYWNrIHRoaXMgdmFsdWUgdG8gZnV0dXJlID8KKyAgICBTY3JpcHRW
YWx1ZSByZXN1bHQgPSBtX2NhbGxiYWNrLT5oYW5kbGVFdmVudCh2YWx1ZSk7CisKKyAgICBpZiAo
bV9yZXNvbHZlcikgeworICAgICAgICBpZiAoaXNFeGNlcHRpb24ocmVzdWx0KSkKKyAgICAgICAg
ICAgIG1fcmVzb2x2ZXItPnJlamVjdChyZXN1bHQsIEZ1dHVyZTo6U3luY2hyb25vdXMpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX3Jlc29sdmVyLT5yZXNvbHZlKHJlc3VsdCwgRnV0dXJl
OjpTeW5jaHJvbm91cyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSGFuZGxlci5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0Z1dHVyZUhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iODVkNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZUhh
bmRsZXIuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1
bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RnV0dXJlSGFuZGxlcl9oCisjZGVmaW5lIEZ1dHVyZUhhbmRsZXJfaAorCisjaW5jbHVkZSAiQW55
Q2FsbGJhY2suaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGdXR1cmVSZXNvbHZlcjsK
KworY2xhc3MgRnV0dXJlSGFuZGxlciB7CitwdWJsaWM6CisgICAgZW51bSBIYW5kbGVyVHlwZSB7
IE5vbmUsIFJlc29sdmUsIFJlamVjdCB9OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8RnV0dXJl
SGFuZGxlcj4gY3JlYXRlKEhhbmRsZXJUeXBlIHR5cGUsIFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+
IGNhbGxiYWNrLCBGdXR1cmVSZXNvbHZlciogcmVzb2x2ZXIpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IEZ1dHVyZUhhbmRsZXIodHlwZSwgY2FsbGJhY2ssIHJlc29sdmVyKSk7
CisgICAgfQorCisgICAgfkZ1dHVyZUhhbmRsZXIoKTsKKworICAgIHZvaWQgY2FsbChjb25zdCBT
Y3JpcHRWYWx1ZSYpOworCisgICAgSGFuZGxlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQorICAgIEFueUNhbGxiYWNrKiBjYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bGJhY2suZ2V0KCk7IH0KKyAgICBGdXR1cmVSZXNvbHZlciogcmVzb2x2ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdmVyOyB9CisKK3ByaXZhdGU6CisgICAgRnV0dXJlSGFuZGxlcihIYW5kbGVy
VHlwZSwgUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4sIEZ1dHVyZVJlc29sdmVyKik7CisKKyAgICBI
YW5kbGVyVHlwZSBtX3R5cGU7CisgICAgUmVmUHRyPEFueUNhbGxiYWNrPiBtX2NhbGxiYWNrOwor
ICAgIEZ1dHVyZVJlc29sdmVyKiBtX3Jlc29sdmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRnV0dXJlSGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRnV0dXJlSW5pdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSW5pdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0MzE4ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVJbml0LmNwcApAQCAtMCwwICsxLDMx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGdXR1cmVJbml0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZUluaXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVJbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNTNiNWNiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9G
dXR1cmVJbml0LmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBT
YW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEZ1dHVyZUluaXRfaAorI2RlZmluZSBGdXR1cmVJbml0X2gKKworI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGdXR1cmVSZXNvbHZlcjsKKworY2xhc3MgRnV0dXJlSW5pdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZ1dHVyZUluaXQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5GdXR1cmVJ
bml0KCkgeyB9CisgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KEZ1dHVyZVJlc29sdmVyKikg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnV0dXJlSW5p
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSW5pdC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRnV0dXJlSW5pdC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uN2RlYjQ3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9G
dXR1cmVJbml0LmlkbApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sK
KyAgICBDYWxsYmFjaworXSBpbnRlcmZhY2UgRnV0dXJlSW5pdCB7CisgICAgYm9vbGVhbiBoYW5k
bGVFdmVudChpbiBGdXR1cmVSZXNvbHZlciByZXNvbHZlcik7Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9G
dXR1cmVSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZj
NmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVSZXNvbHZl
ci5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRnV0dXJlUmVzb2x2ZXIuaCIKKworI2luY2x1ZGUgIkFueUNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXMuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitGdXR1cmVSZXNvbHZlcjo6RnV0dXJlUmVzb2x2ZXIoRnV0dXJl
KiBmdXR1cmUpCisgICAgOiBtX2Z1dHVyZShmdXR1cmUpCisgICAgLCBtX2lzUmVzb2x2ZWQoZmFs
c2UpCit7CisgICAgQVNTRVJUKGZ1dHVyZSk7Cit9CisKK3ZvaWQgRnV0dXJlUmVzb2x2ZXI6OmFj
Y2VwdChjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIEZ1dHVyZTo6U3luY2hyb25vdXNNb2RlIG1v
ZGUpCit7CisgICAgaWYgKGlzUmVzb2x2ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9m
dXR1cmUtPnNldFN0YXRlKEZ1dHVyZTo6QWNjZXB0ZWQpOworICAgIG1fZnV0dXJlLT5zZXRSZXN1
bHQodmFsdWUpOworICAgIG1fZnV0dXJlLT5wcm9jZXNzSGFuZGxlcnMobW9kZSk7CisKKyAgICBt
X2lzUmVzb2x2ZWQgPSB0cnVlOworfQorCit2b2lkIEZ1dHVyZVJlc29sdmVyOjpyZWplY3QoY29u
c3QgU2NyaXB0VmFsdWUmIGVycm9yLCBGdXR1cmU6OlN5bmNocm9ub3VzTW9kZSBtb2RlKQorewor
ICAgIGlmIChpc1Jlc29sdmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnV0dXJlLT5z
ZXRTdGF0ZShGdXR1cmU6OlJlamVjdGVkKTsKKyAgICBtX2Z1dHVyZS0+c2V0UmVzdWx0KGVycm9y
KTsKKyAgICBtX2Z1dHVyZS0+cHJvY2Vzc0hhbmRsZXJzKG1vZGUpOworCisgICAgbV9pc1Jlc29s
dmVkID0gdHJ1ZTsKK30KKwordm9pZCBGdXR1cmVSZXNvbHZlcjo6cmVzb2x2ZShjb25zdCBTY3Jp
cHRWYWx1ZSYgdmFsdWUsIEZ1dHVyZTo6U3luY2hyb25vdXNNb2RlKQoreworICAgIGlmIChpc1Jl
c29sdmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZ1dHVyZSogZnV0dXJlID0gc2NyaXB0
VmFsdWVUb0Z1dHVyZSh2YWx1ZSk7CisgICAgaWYgKGZ1dHVyZSkgeworICAgICAgICBPd25QdHI8
RnV0dXJlSGFuZGxlcj4gYWNjZXB0SGFuZGxlciA9IEZ1dHVyZUhhbmRsZXI6OmNyZWF0ZShGdXR1
cmVIYW5kbGVyOjpSZXNvbHZlLCAwLCBmdXR1cmUtPnJlc29sdmVyKCkpOworICAgICAgICBmdXR1
cmUtPmFwcGVuZEFjY2VwdEhhbmRsZXIoYWNjZXB0SGFuZGxlci5yZWxlYXNlKCkpOworICAgICAg
ICBPd25QdHI8RnV0dXJlSGFuZGxlcj4gcmVqZWN0SGFuZGxlciA9IEZ1dHVyZUhhbmRsZXI6OmNy
ZWF0ZShGdXR1cmVIYW5kbGVyOjpSZWplY3QsIDAsIGZ1dHVyZS0+cmVzb2x2ZXIoKSk7CisgICAg
ICAgIGZ1dHVyZS0+YXBwZW5kUmVqZWN0SGFuZGxlcihyZWplY3RIYW5kbGVyLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIGNhc2VzIHdo
ZXJlIHZhbHVlIGlzIGEgSlMgT2JqZWN0IG9yIGEgY2FsbGFibGUuCisKKyAgICBhY2NlcHQodmFs
dWUsIEZ1dHVyZTo6U3luY2hyb25vdXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9GdXR1cmVSZXNvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQyNGEwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0
dXJlUmVzb2x2ZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRnV0dXJlUmVzb2x2ZXJfaAorI2RlZmluZSBGdXR1cmVSZXNvbHZlcl9oCisKKyNpbmNs
dWRlICJGdXR1cmUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZ1dHVyZVJlc29sdmVy
OiBwdWJsaWMgUmVmQ291bnRlZDxGdXR1cmVSZXNvbHZlcj4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZ1dHVyZVJlc29sdmVyPiBjcmVhdGUoRnV0dXJlKiBmdXR1cmUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZ1dHVyZVJlc29sdmVyKGZ1dHVyZSkpOwor
ICAgIH0KKworICAgIHZvaWQgYWNjZXB0KGNvbnN0IFNjcmlwdFZhbHVlJiA9IFNjcmlwdFZhbHVl
KCksIEZ1dHVyZTo6U3luY2hyb25vdXNNb2RlID0gRnV0dXJlOjpBc3luY2hyb25vdXMpOworICAg
IHZvaWQgcmVqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiA9IFNjcmlwdFZhbHVlKCksIEZ1dHVyZTo6
U3luY2hyb25vdXNNb2RlID0gRnV0dXJlOjpBc3luY2hyb25vdXMpOworICAgIHZvaWQgcmVzb2x2
ZShjb25zdCBTY3JpcHRWYWx1ZSYgPSBTY3JpcHRWYWx1ZSgpLCBGdXR1cmU6OlN5bmNocm9ub3Vz
TW9kZSA9IEZ1dHVyZTo6QXN5bmNocm9ub3VzKTsKKworICAgIGJvb2wgaXNSZXNvbHZlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNSZXNvbHZlZDsgfQorCitwcml2YXRlOgorICAgIEZ1dHVyZVJlc29s
dmVyKEZ1dHVyZSopOworCisgICAgRnV0dXJlKiBtX2Z1dHVyZTsKKyAgICBib29sIG1faXNSZXNv
bHZlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZ1dHVyZVJl
c29sdmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVSZXNvbHZlci5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlUmVzb2x2ZXIuaWRsCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjNkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRnV0dXJlUmVzb2x2ZXIuaWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworaW50ZXJmYWNlIEZ1dHVyZVJlc29sdmVyIHsKKyAgICB2b2lkIGFjY2Vw
dChpbiBbT3B0aW9uYWxdIGFueSB2YWx1ZSk7CisgICAgdm9pZCByZXNvbHZlKGluIFtPcHRpb25h
bF0gYW55IHZhbHVlKTsKKyAgICB2b2lkIHJlamVjdChpbiBbT3B0aW9uYWxdIGFueSBlcnJvcik7
CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBpc1Jlc29sdmVkOworfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBkMDZhZmUwLi44ZjM0MDZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuaWRsCkBAIC01ODcsNiArNTg3LDggQEAKICAgICBbQ29uZGl0aW9uYWw9V09S
S0VSU10gYXR0cmlidXRlIFdvcmtlckNvbnN0cnVjdG9yIFdvcmtlcjsgLy8gVXNhYmxlIHdpdGgg
dGhlIG5ldyBvcGVyYXRvcgogICAgIFtDb25kaXRpb25hbD1TSEFSRURfV09SS0VSUywgSlNDdXN0
b21HZXR0ZXIsIFY4RW5hYmxlZEF0UnVudGltZV0gYXR0cmlidXRlIFNoYXJlZFdvcmtlckNvbnN0
cnVjdG9yIFNoYXJlZFdvcmtlcjsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgogCisg
ICAgYXR0cmlidXRlIEZ1dHVyZUNvbnN0cnVjdG9yIEZ1dHVyZTsKKwogICAgIGF0dHJpYnV0ZSBG
aWxlQ29uc3RydWN0b3IgRmlsZTsKICAgICBhdHRyaWJ1dGUgRmlsZUxpc3RDb25zdHJ1Y3RvciBG
aWxlTGlzdDsKICAgICBhdHRyaWJ1dGUgQmxvYkNvbnN0cnVjdG9yIEJsb2I7Cg==
</data>
<flag name="commit-queue"
          id="217780"
          type_id="3"
          status="-"
          setter="peter+ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195860</attachid>
            <date>2013-03-30 10:39:31 -0700</date>
            <delta_ts>2013-04-01 08:22:24 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>113571_DOMFuture.patch</filename>
            <type>text/plain</type>
            <size>69116</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWJhc2ljLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWJhc2ljLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWIzZDVmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtYmFz
aWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0NoZWNrcyBiYXNpYyBpbnRlcmZhY2Ug
b2YgRnV0dXJlIGFuZCBGdXR1cmVSZXNvbHZlciBvYmplY3RzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyB0eXBlb2YgcmVzb2x2ZXIgaXMgIm9iamVjdCIKK1BBU1MgdHlw
ZW9mIHJlc29sdmVyLmFjY2VwdCBpcyAiZnVuY3Rpb24iCitQQVNTIHJlc29sdmVyLmFjY2VwdC5s
ZW5ndGggaXMgMQorUEFTUyB0eXBlb2YgcmVzb2x2ZXIucmVzb2x2ZSBpcyAiZnVuY3Rpb24iCitQ
QVNTIHJlc29sdmVyLnJlc29sdmUubGVuZ3RoIGlzIDEKK1BBU1MgdHlwZW9mIHJlc29sdmVyLnJl
amVjdCBpcyAiZnVuY3Rpb24iCitQQVNTIHJlc29sdmVyLnJlamVjdC5sZW5ndGggaXMgMQorUEFT
UyB0eXBlb2YgcmVzb2x2ZXIuaXNSZXNvbHZlZCBpcyAiYm9vbGVhbiIKK1BBU1MgdHlwZW9mIGZ1
dHVyZSBpcyAib2JqZWN0IgorUEFTUyBmdXR1cmUgaXMgYW4gaW5zdGFuY2Ugb2YgRnV0dXJlCitQ
QVNTIHR5cGVvZiBmdXR1cmUudGhlbiBpcyAiZnVuY3Rpb24iCitQQVNTIGZ1dHVyZS50aGVuLmxl
bmd0aCBpcyAyCitQQVNTIHR5cGVvZiBmdXR1cmUuY2F0Y2ggaXMgImZ1bmN0aW9uIgorUEFTUyBm
dXR1cmUuY2F0Y2gubGVuZ3RoIGlzIDEKK1BBU1MgdHlwZW9mIGZ1dHVyZS5kb25lIGlzICJmdW5j
dGlvbiIKK1BBU1MgZnV0dXJlLmRvbmUubGVuZ3RoIGlzIDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
ZnV0dXJlcy9mdXR1cmUtYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yM2MxMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0
dXJlcy9mdXR1cmUtYmFzaWMuaHRtbApAQCAtMCwwICsxLDQ2IEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiQ2hlY2tzIGJhc2ljIGlu
dGVyZmFjZSBvZiBGdXR1cmUgYW5kIEZ1dHVyZVJlc29sdmVyIG9iamVjdHMuIik7Cit2YXIgZnV0
dXJlOwordmFyIHJlc29sdmVyOworCitmdW5jdGlvbiB2YWxpZGF0ZVJlc29sdmVyKHIpIHsKKyAg
ICByZXNvbHZlciA9IHI7CisgICAgc2hvdWxkQmUoInR5cGVvZiByZXNvbHZlciIsICcib2JqZWN0
IicpOworICAgIHNob3VsZEJlKCJ0eXBlb2YgcmVzb2x2ZXIuYWNjZXB0IiwgJyJmdW5jdGlvbiIn
KTsKKyAgICBzaG91bGRCZSgicmVzb2x2ZXIuYWNjZXB0Lmxlbmd0aCIsICIxIik7CisgICAgc2hv
dWxkQmUoInR5cGVvZiByZXNvbHZlci5yZXNvbHZlIiwgJyJmdW5jdGlvbiInKTsKKyAgICBzaG91
bGRCZSgicmVzb2x2ZXIucmVzb2x2ZS5sZW5ndGgiLCAiMSIpOworICAgIHNob3VsZEJlKCJ0eXBl
b2YgcmVzb2x2ZXIucmVqZWN0IiwgJyJmdW5jdGlvbiInKTsKKyAgICBzaG91bGRCZSgicmVzb2x2
ZXIucmVqZWN0Lmxlbmd0aCIsICIxIik7CisgICAgc2hvdWxkQmUoInR5cGVvZiByZXNvbHZlci5p
c1Jlc29sdmVkIiwgJyJib29sZWFuIicpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
IHRyeSB7CisgICAgICAgIGZ1dHVyZSA9IG5ldyBGdXR1cmUodmFsaWRhdGVSZXNvbHZlcik7Cisg
ICAgICAgIHNob3VsZEJlKCJ0eXBlb2YgZnV0dXJlIiwgJyJvYmplY3QiJyk7CisgICAgICAgIHNo
b3VsZEJlVHlwZSgiZnV0dXJlIiwgIkZ1dHVyZSIpOworICAgICAgICBzaG91bGRCZSgidHlwZW9m
IGZ1dHVyZS50aGVuIiwgJyJmdW5jdGlvbiInKTsKKyAgICAgICAgc2hvdWxkQmUoImZ1dHVyZS50
aGVuLmxlbmd0aCIsICIyIik7CisgICAgICAgIHNob3VsZEJlKCJ0eXBlb2YgZnV0dXJlLmNhdGNo
IiwgJyJmdW5jdGlvbiInKTsKKyAgICAgICAgc2hvdWxkQmUoImZ1dHVyZS5jYXRjaC5sZW5ndGgi
LCAiMSIpOworICAgICAgICBzaG91bGRCZSgidHlwZW9mIGZ1dHVyZS5kb25lIiwgJyJmdW5jdGlv
biInKTsKKyAgICAgICAgc2hvdWxkQmUoImZ1dHVyZS5kb25lLmxlbmd0aCIsICIyIik7CisgICAg
fSBjYXRjaCAoZXgpIHsKKyAgICAgICAgbG9nKCJGQUlMOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAo
IiArIGV4ICsgIikgdGhyb3duIHdoZW4gY3JlYXRpbmcgZnV0dXJlIik7CisgICAgfQorfQorCitp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK3J1
blRlc3QoKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtY2F0Y2gtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtY2F0Y2gtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWVhZjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1jYXRjaC1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxMyBAQAorQ2hlY2tzIHRoYXQgY2F0Y2goKSB3b3JrcyBjb3JyZWN0bHkuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlc29sdmVyLmlzUmVzb2x2ZWQg
aXMgZmFsc2UKK1BBU1MgcmVzb2x2ZXIuaXNSZXNvbHZlZCBpcyB0cnVlCitQQVNTIHJlc3VsdCBp
cyAnRVJST1InCitQQVNTIHJlc3VsdCBpcyAnVGVzdEVycm9yJworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWNhdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9mdXR1cmVzL2Z1dHVyZS1jYXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI0N2E4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9m
dXR1cmVzL2Z1dHVyZS1jYXRjaC5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJDaGVja3MgdGhhdCBj
YXRjaCgpIHdvcmtzIGNvcnJlY3RseS4iKTsKK3ZhciBmdXR1cmU7Cit2YXIgcmVzb2x2ZXI7Cit2
YXIgcmVzb2x2ZWQgPSBmYWxzZTsKK3ZhciByZXN1bHQ7CisKK2Z1bmN0aW9uIGxvZ0Vycm9yKCkK
K3sKKyAgICBkZWJ1ZygiRkFJTDogc3VjY2VzcyBjYWxsYmFjayBzaG91bGQgbm90IGJlIGNhbGxl
ZC4iKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAg
ICBmdXR1cmUgPSBuZXcgRnV0dXJlKGZ1bmN0aW9uKHIpIHsKKyAgICAgICAgcmVzb2x2ZXIgPSBy
OworICAgICAgICBzaG91bGRCZUZhbHNlKCJyZXNvbHZlci5pc1Jlc29sdmVkIik7CisgICAgICAg
IHIucmVqZWN0KCJFUlJPUiIpOworICAgICAgICBzaG91bGRCZVRydWUoInJlc29sdmVyLmlzUmVz
b2x2ZWQiKTsKKyAgICB9KTsKKyAgICBmdXR1cmUudGhlbihsb2dFcnJvciwgZnVuY3Rpb24oZXJy
b3IpIHsKKyAgICAgICAgcmVzdWx0ID0gZXJyb3I7CisgICAgICAgIHNob3VsZEJlKCJyZXN1bHQi
LCAiJ0VSUk9SJyIpOworICAgICAgICB0aHJvdyAiVGVzdEVycm9yIjsKKyAgICB9KS5jYXRjaChm
dW5jdGlvbihlcnJvcikgeworICAgICAgICByZXN1bHQgPSBlcnJvcjsKKyAgICAgICAgc2hvdWxk
QmUoInJlc3VsdCIsICInVGVzdEVycm9yJyIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9KTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIuZHVtcEFz
VGV4dCgpOworCitydW5UZXN0KCk7Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL2Z1dHVyZXMvZnV0dXJlLWRlbGF5ZWQtZGVsaXZlcnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtZGVsYXllZC1kZWxpdmVyeS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMjlmNwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWRlbGF5ZWQtZGVs
aXZlcnktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0NoZWNrcyB0aGF0IGRlbGl2ZXJ5
IGlzIGRlbGF5ZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlc29s
dmVkIGlzIGZhbHNlCitQQVNTIHJlc29sdmVyLmlzUmVzb2x2ZWQgaXMgZmFsc2UKK1BBU1MgcmVz
dWx0IGlzIHRydWUKK1BBU1MgcmVzb2x2ZXIuaXNSZXNvbHZlZCBpcyB0cnVlCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtZGVsYXllZC1kZWxpdmVyeS5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtZGVsYXllZC1kZWxpdmVyeS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjBkZDkKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1kZWxheWVkLWRlbGl2
ZXJ5Lmh0bWwKQEAgLTAsMCArMSwzNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNrcyB0aGF0IGRlbGl2ZXJ5IGlzIGRlbGF5
ZWQuIik7Cit2YXIgZnV0dXJlOwordmFyIHJlc29sdmVyOwordmFyIHJlc29sdmVkID0gZmFsc2U7
Cit2YXIgcmVzdWx0OworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGZ1dHVyZSA9IG5ldyBG
dXR1cmUoZnVuY3Rpb24ocikgeyByZXNvbHZlciA9IHI7IH0pOworICAgIGZ1dHVyZS50aGVuKGZ1
bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJlc29sdmVkID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0
ID0gdmFsdWU7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicmVzdWx0Iik7CisgICAgfSk7CisKKyAg
ICBzaG91bGRCZUZhbHNlKCJyZXNvbHZlZCIpOworICAgIHNob3VsZEJlRmFsc2UoInJlc29sdmVy
LmlzUmVzb2x2ZWQiKTsKKyAgICByZXNvbHZlci5yZXNvbHZlKHRydWUpOworICAgIHNob3VsZEJl
VHJ1ZSgicmVzb2x2ZXIuaXNSZXNvbHZlZCIpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK3J1blRlc3QoKTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0
dXJlcy9mdXR1cmUtZXJyb3ItZm9yd2FyZGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1lcnJvci1mb3J3YXJkaW5nLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIxOWQ4Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtZXJyb3ItZm9yd2FyZGluZy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorQ2hlY2tzIHRoYXQgZXJyb3JzIGZvcndhcmQg
Y29ycmVjdGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyByZXNvbHZl
ci5pc1Jlc29sdmVkIGlzIGZhbHNlCitQQVNTIHJlc29sdmVyLmlzUmVzb2x2ZWQgaXMgdHJ1ZQor
UEFTUyByZXN1bHQgaXMgJ0VSUk9SJworUEFTUyByZXN1bHQgaXMgJ1Rlc3RFcnJvcicKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1lcnJvci1mb3J3YXJkaW5nLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1lcnJvci1mb3J3YXJkaW5n
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4NjA2ZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWVycm9yLWZv
cndhcmRpbmcuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiQ2hlY2tzIHRoYXQgZXJyb3JzIGZvcndh
cmQgY29ycmVjdGx5LiIpOwordmFyIGZ1dHVyZTsKK3ZhciByZXNvbHZlcjsKK3ZhciByZXNvbHZl
ZCA9IGZhbHNlOwordmFyIHJlc3VsdDsKKworZnVuY3Rpb24gbG9nRXJyb3IoKQoreworICAgIGRl
YnVnKCJGQUlMOiBzdWNjZXNzIGNhbGxiYWNrIHNob3VsZCBub3QgYmUgY2FsbGVkLiIpOworICAg
IGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGZ1dHVyZSA9
IG5ldyBGdXR1cmUoZnVuY3Rpb24ocikgeworICAgICAgICByZXNvbHZlciA9IHI7CisgICAgICAg
IHNob3VsZEJlRmFsc2UoInJlc29sdmVyLmlzUmVzb2x2ZWQiKTsKKyAgICAgICAgci5yZWplY3Qo
IkVSUk9SIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicmVzb2x2ZXIuaXNSZXNvbHZlZCIpOwor
ICAgIH0pOworICAgIGZ1dHVyZS50aGVuKGxvZ0Vycm9yLCBmdW5jdGlvbihlcnJvcikgeworICAg
ICAgICByZXN1bHQgPSBlcnJvcjsKKyAgICAgICAgc2hvdWxkQmUoInJlc3VsdCIsICInRVJST1In
Iik7CisgICAgICAgIHRocm93ICJUZXN0RXJyb3IiOworICAgIH0pLmRvbmUobG9nRXJyb3IsIGZ1
bmN0aW9uKGVycm9yKSB7CisgICAgICAgIHJlc3VsdCA9IGVycm9yOworICAgICAgICBzaG91bGRC
ZSgicmVzdWx0IiwgIidUZXN0RXJyb3InIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
IH0pOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7CisKK3J1blRlc3QoKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vZnV0dXJlcy9mdXR1cmUtZXhjZXB0aW9uLWluLWluaXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtZXhjZXB0aW9uLWluLWluaXQtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyODg1MWMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1leGNlcHRpb24t
aW4taW5pdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorQ2hlY2tzIHRoYXQgY2F0Y2go
KSBpcyBjYWxsZWQgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIGluaXQuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlc3VsdCBpcyAnVGVzdEVycm9yJworUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWV4Y2VwdGlvbi1pbi1pbml0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1leGNlcHRpb24taW4t
aW5pdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzFjNmQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1leGNl
cHRpb24taW4taW5pdC5odG1sCkBAIC0wLDAgKzEsMzAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJDaGVja3MgdGhhdCBjYXRjaCgp
IGlzIGNhbGxlZCB3aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaW4gaW5pdC4iKTsKK3ZhciBm
dXR1cmU7Cit2YXIgcmVzdWx0OworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGZ1dHVyZSA9
IG5ldyBGdXR1cmUoZnVuY3Rpb24ocikgeworICAgICAgICB0aHJvdyAiVGVzdEVycm9yIjsKKyAg
ICB9KTsKKyAgICBmdXR1cmUuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgcmVzdWx0
ID0gZXJyb3I7CisgICAgICAgIHNob3VsZEJlKCJyZXN1bHQiLCAiJ1Rlc3RFcnJvciciKTsKKyAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworcnVuVGVzdCgpOword2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1yZXNvbHZlLWZvcndh
cmRzLW5vbi1mdXR1cmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJl
cy9mdXR1cmUtcmVzb2x2ZS1mb3J3YXJkcy1ub24tZnV0dXJlLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWMxMjc4Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtcmVzb2x2ZS1mb3J3YXJkcy1ub24t
ZnV0dXJlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitDaGVja3MgdGhhdCByZXNvbHZl
IGRvZXMgbm90IGZvcndhcmQgbm9uIGZ1dHVyZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKK1BBU1MgcmVzdWx0IGlzIGFu
IGluc3RhbmNlIG9mIEVycm9yCitQQVNTIHJlc3VsdC50b1N0cmluZygpIGlzICdFcnJvcjogc3lu
dGhldGljJworUEFTUyByZXN1bHQgaXMgc3ludGhldGljRXJyb3IKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1yZXNvbHZlLWZvcndhcmRzLW5vbi1mdXR1cmUuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMt
bm9uLWZ1dHVyZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjY5
YzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVy
ZS1yZXNvbHZlLWZvcndhcmRzLW5vbi1mdXR1cmUuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiQ2hl
Y2tzIHRoYXQgcmVzb2x2ZSBkb2VzIG5vdCBmb3J3YXJkIG5vbiBmdXR1cmVzLiIpOwordmFyIHJl
c3VsdDsKK3ZhciBzeW50aGV0aWNFcnJvciA9IG5ldyBFcnJvcigic3ludGhldGljIik7CisKK2Z1
bmN0aW9uIGxvZ0Vycm9yKCkKK3sKKyAgICBkZWJ1ZygiRkFJTDogZXJyb3IgY2FsbGJhY2sgc2hv
dWxkIG5vdCBiZSBjYWxsZWQuIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgdmFyIGYxID0gbmV3IEZ1dHVyZShmdW5jdGlvbihyKSB7CisgICAg
ICByLnJlc29sdmUoc3ludGhldGljRXJyb3IpOworICAgIH0pOworICAgIHZhciBmMiA9IG5ldyBG
dXR1cmUoZnVuY3Rpb24ocikgeworICAgICAgci5yZXNvbHZlKGYxKTsKKyAgICB9KTsKKyAgICBm
Mi5kb25lKAorICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVzdWx0ID0gdmFsdWU7
CisgICAgICAgIHNob3VsZEJlKCJ0eXBlb2YgcmVzdWx0IiwgJyJvYmplY3QiJyk7CisgICAgICAg
IHNob3VsZEJlVHlwZSgicmVzdWx0IiwgIkVycm9yIik7CisgICAgICAgIHNob3VsZEJlKCJyZXN1
bHQudG9TdHJpbmcoKSIsICInRXJyb3I6IHN5bnRoZXRpYyciKTsKKyAgICAgICAgc2hvdWxkQmUo
InJlc3VsdCIsICJzeW50aGV0aWNFcnJvciIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICAgIH0sCisgICAgICBsb2dFcnJvcgorICAgICk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworcnVuVGVzdCgpOword2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1yZXNvbHZlLWZvcndh
cmRzLXRocm91Z2gtdGhlbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1
cmVzL2Z1dHVyZS1yZXNvbHZlLWZvcndhcmRzLXRocm91Z2gtdGhlbi1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3YTdmMQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMt
dGhyb3VnaC10aGVuLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitDaGVja3MgdGhhdCBy
ZXNvbHZlIGNvcnJlY3RseSBmb3J3YXJkcyB0aHJvdWdoIHRoZW4oKS4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgdHlwZW9mIHJlc3VsdCBpcyAib2JqZWN0IgorUEFTUyBy
ZXN1bHQgaXMgYW4gaW5zdGFuY2Ugb2YgRXJyb3IKK1BBU1MgcmVzdWx0LnRvU3RyaW5nKCkgaXMg
J0Vycm9yOiBzeW50aGV0aWMnCitQQVNTIHJlc3VsdCBpcyBzeW50aGV0aWNFcnJvcgorUEFTUyBy
ZXN1bHQgaXMgJ3NvbWUgb3RoZXIgdmFsdWUnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
ZnV0dXJlcy9mdXR1cmUtcmVzb2x2ZS1mb3J3YXJkcy10aHJvdWdoLXRoZW4uaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMtdGhyb3VnaC10
aGVuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyOWQ1OQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29s
dmUtZm9yd2FyZHMtdGhyb3VnaC10aGVuLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNrcyB0
aGF0IHJlc29sdmUgY29ycmVjdGx5IGZvcndhcmRzIHRocm91Z2ggdGhlbigpLiIpOwordmFyIHJl
c3VsdDsKK3ZhciBzeW50aGV0aWNFcnJvciA9IG5ldyBFcnJvcigic3ludGhldGljIik7CisKK2Z1
bmN0aW9uIGxvZ0Vycm9yKCkKK3sKKyAgICBkZWJ1ZygiRkFJTDogZXJyb3IgY2FsbGJhY2sgc2hv
dWxkIG5vdCBiZSBjYWxsZWQuIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgdmFyIGYxID0gbmV3IEZ1dHVyZShmdW5jdGlvbihyKSB7CisgICAg
ICByLnJlc29sdmUoc3ludGhldGljRXJyb3IpOworICAgIH0pOworICAgIHZhciBmMiA9IG5ldyBG
dXR1cmUoZnVuY3Rpb24ocikgeworICAgICAgci5yZXNvbHZlKGYxKTsKKyAgICB9KTsKKyAgICB2
YXIgZjMgPSBmMi50aGVuKAorICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVzdWx0
ID0gdmFsdWU7CisgICAgICAgIHNob3VsZEJlKCJ0eXBlb2YgcmVzdWx0IiwgJyJvYmplY3QiJyk7
CisgICAgICAgIHNob3VsZEJlVHlwZSgicmVzdWx0IiwgIkVycm9yIik7CisgICAgICAgIHNob3Vs
ZEJlKCJyZXN1bHQudG9TdHJpbmcoKSIsICInRXJyb3I6IHN5bnRoZXRpYyciKTsKKyAgICAgICAg
c2hvdWxkQmUoInJlc3VsdCIsICJzeW50aGV0aWNFcnJvciIpOworICAgICAgICByZXR1cm4gbmV3
IEZ1dHVyZShmdW5jdGlvbihyKSB7CisgICAgICAgICAgci5yZXNvbHZlKCJzb21lIG90aGVyIHZh
bHVlIik7CisgICAgICAgIH0pOworICAgICAgfSwKKyAgICAgIGZ1bmN0aW9uKGUpIHsgcmV0dXJu
IGU7IH0KKyAgICApOworICAgIGYzLmRvbmUoCisgICAgICBmdW5jdGlvbih2YWx1ZSkgeworICAg
ICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgICAgc2hvdWxkQmUoInJlc3VsdCIsICInc29tZSBv
dGhlciB2YWx1ZSciKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICB9LAorICAgICAg
bG9nRXJyb3IKKyAgICApOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisKK3J1blRlc3QoKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtcmVzb2x2ZS1mb3J3YXJkcy12YWx1ZXMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtcmVzb2x2ZS1m
b3J3YXJkcy12YWx1ZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjUzN2I5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9m
dXR1cmVzL2Z1dHVyZS1yZXNvbHZlLWZvcndhcmRzLXZhbHVlcy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMyBAQAorQ2hlY2tzIHRoYXQgcmVzb2x2ZSBmb3J3YXJkcyB2YWx1ZXMgY29ycmVjdGx5
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0eXBlb2YgcmVzdWx0IGlz
ICJvYmplY3QiCitQQVNTIHJlc3VsdCBpcyBhbiBpbnN0YW5jZSBvZiBFcnJvcgorUEFTUyByZXN1
bHQudG9TdHJpbmcoKSBpcyAnRXJyb3I6IHN5bnRoZXRpYycKK1BBU1MgcmVzdWx0IGlzIHN5bnRo
ZXRpY0Vycm9yCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtcmVz
b2x2ZS1mb3J3YXJkcy12YWx1ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMv
ZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMtdmFsdWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZjA5MjUzOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMtdmFsdWVzLmh0bWwKQEAgLTAs
MCArMSw0NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIkNoZWNrcyB0aGF0IHJlc29sdmUgZm9yd2FyZHMgdmFsdWVzIGNvcnJlY3Rs
eS4iKTsKK3ZhciByZXN1bHQ7Cit2YXIgc3ludGhldGljRXJyb3IgPSBuZXcgRXJyb3IoInN5bnRo
ZXRpYyIpOworCitmdW5jdGlvbiBsb2dFcnJvcigpCit7CisgICAgZGVidWcoIkZBSUw6IGVycm9y
IGNhbGxiYWNrIHNob3VsZCBub3QgYmUgY2FsbGVkLiIpOworICAgIGZpbmlzaEpTVGVzdCgpOwor
fQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIHZhciBmMSA9IG5ldyBGdXR1cmUoZnVuY3Rp
b24ocikgeworICAgICAgci5hY2NlcHQoc3ludGhldGljRXJyb3IpOworICAgIH0pOworICAgIHZh
ciBmMiA9IG5ldyBGdXR1cmUoZnVuY3Rpb24ocikgeworICAgICAgci5yZXNvbHZlKGYxKTsKKyAg
ICB9KTsKKyAgICBmMi5kb25lKAorICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVz
dWx0ID0gdmFsdWU7CisgICAgICAgIHNob3VsZEJlKCJ0eXBlb2YgcmVzdWx0IiwgJyJvYmplY3Qi
Jyk7CisgICAgICAgIHNob3VsZEJlVHlwZSgicmVzdWx0IiwgIkVycm9yIik7CisgICAgICAgIHNo
b3VsZEJlKCJyZXN1bHQudG9TdHJpbmcoKSIsICInRXJyb3I6IHN5bnRoZXRpYyciKTsKKyAgICAg
ICAgc2hvdWxkQmUoInJlc3VsdCIsICJzeW50aGV0aWNFcnJvciIpOworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICAgIH0sCisgICAgICBsb2dFcnJvcgorICAgICk7Cit9CisKK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworcnVuVGVzdCgp
Oword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS12
YWx1ZS1mb3J3YXJkaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVy
ZXMvZnV0dXJlLXZhbHVlLWZvcndhcmRpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjU4YzllYzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS12YWx1ZS1mb3J3YXJkaW5nLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDEzIEBACitDaGVja3MgdGhhdCB2YWx1ZXMgZm9yd2FyZCBjb3JyZWN0bHkuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlc29sdmVyLmlzUmVzb2x2ZWQg
aXMgZmFsc2UKK1BBU1MgcmVzb2x2ZXIuaXNSZXNvbHZlZCBpcyB0cnVlCitQQVNTIHJlc3VsdCBp
cyAnT0snCitQQVNTIHJlc3VsdCBpcyAnRE9ORScKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9mdXR1cmVzL2Z1dHVyZS12YWx1ZS1mb3J3YXJkaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9mdXR1cmVzL2Z1dHVyZS12YWx1ZS1mb3J3YXJkaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzZmMyMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXZhbHVlLWZvcndhcmRpbmcuaHRtbApAQCAtMCww
ICsxLDQ1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiQ2hlY2tzIHRoYXQgdmFsdWVzIGZvcndhcmQgY29ycmVjdGx5LiIpOwordmFy
IGZ1dHVyZTsKK3ZhciByZXNvbHZlcjsKK3ZhciByZXNvbHZlZCA9IGZhbHNlOwordmFyIHJlc3Vs
dDsKKworZnVuY3Rpb24gbG9nRXJyb3IoKQoreworICAgIGRlYnVnKCJGQUlMOiBlcnJvciBjYWxs
YmFjayBzaG91bGQgbm90IGJlIGNhbGxlZC4iKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKwor
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBmdXR1cmUgPSBuZXcgRnV0dXJlKGZ1bmN0aW9uKHIp
IHsKKyAgICAgICAgcmVzb2x2ZXIgPSByOworICAgICAgICBzaG91bGRCZUZhbHNlKCJyZXNvbHZl
ci5pc1Jlc29sdmVkIik7CisgICAgICAgIHIuYWNjZXB0KCJPSyIpOworICAgICAgICBzaG91bGRC
ZVRydWUoInJlc29sdmVyLmlzUmVzb2x2ZWQiKTsKKyAgICB9KTsKKyAgICBmdXR1cmUudGhlbihm
dW5jdGlvbih2YWx1ZSkgeworICAgICAgcmVzdWx0ID0gdmFsdWU7CisgICAgICBzaG91bGRCZSgi
cmVzdWx0IiwgIidPSyciKTsKKyAgICAgIHJldHVybiAiRE9ORSI7CisgICAgfSwgbG9nRXJyb3Ip
LmRvbmUoZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIHJlc3VsdCA9IHZhbHVlOworICAgICAgc2hv
dWxkQmUoInJlc3VsdCIsICInRE9ORSciKTsKKyAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0s
IGxvZ0Vycm9yKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIu
ZHVtcEFzVGV4dCgpOworCitydW5UZXN0KCk7Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
MzliMDAzOC4uMGQ5MWVjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTMzMSw2ICszMzEsNyBA
QCBzZXQoV2ViQ29yZV9JRExfRklMRVMKICAgICBjc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUu
aWRsCiAgICAgY3NzL1dlYktpdENTU1ZpZXdwb3J0UnVsZS5pZGwKIAorICAgIGRvbS9BbnlDYWxs
YmFjay5pZGwKICAgICBkb20vQXR0ci5pZGwKICAgICBkb20vQmVmb3JlTG9hZEV2ZW50LmlkbAog
ICAgIGRvbS9DREFUQVNlY3Rpb24uaWRsCkBAIC0zNjEsNiArMzYyLDkgQEAgc2V0KFdlYkNvcmVf
SURMX0ZJTEVTCiAgICAgZG9tL0V2ZW50LmlkbAogICAgIGRvbS9FdmVudFRhcmdldC5pZGwKICAg
ICBkb20vRm9jdXNFdmVudC5pZGwKKyAgICBkb20vRnV0dXJlLmlkbAorICAgIGRvbS9GdXR1cmVJ
bml0LmlkbAorICAgIGRvbS9GdXR1cmVSZXNvbHZlci5pZGwKICAgICBkb20vSGFzaENoYW5nZUV2
ZW50LmlkbAogICAgIGRvbS9LZXlib2FyZEV2ZW50LmlkbAogICAgIGRvbS9NZXNzYWdlQ2hhbm5l
bC5pZGwKQEAgLTExMTgsNiArMTEyMiw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3Mv
V2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcAogCiAgICAgZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAK
KyAgICBkb20vQW55Q2FsbGJhY2suY3BwCiAgICAgZG9tL0F0dHIuY3BwCiAgICAgZG9tL0JlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50LmNwcAogICAgIGRvbS9CZWZvcmVVbmxvYWRFdmVudC5jcHAKQEAg
LTExODIsNiArMTE4NywxMCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V4Y2VwdGlv
bkJhc2UuY3BwCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAKICAgICBkb20v
Rm9jdXNFdmVudC5jcHAKKyAgICBkb20vRnV0dXJlLmNwcAorICAgIGRvbS9GdXR1cmVIYW5kbGVy
LmNwcAorICAgIGRvbS9GdXR1cmVJbml0LmNwcAorICAgIGRvbS9GdXR1cmVSZXNvbHZlci5jcHAK
ICAgICBkb20vR2VuZXJpY0V2ZW50UXVldWUuY3BwCiAgICAgZG9tL0dlc3R1cmVFdmVudC5jcHAK
ICAgICBkb20vSWNvblVSTC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQppbmRleCA4NDU0YTVhLi41MWUyMzQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvVXNlSlNDLmNtYWtlCkBAIC0yNSwxMCArMjUsMTIgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAKICAgICBiaW5kaW5ncy9q
cy9CaW5kaW5nU3RhdGUuY3BwCiAgICAgYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5jcHAK
KyAgICBiaW5kaW5ncy9qcy9ET01GdXR1cmVzQmluZGluZ1V0aWxpdGllcy5jcHAKICAgICBiaW5k
aW5ncy9qcy9ET01PYmplY3RIYXNoVGFibGVNYXAuY3BwCiAgICAgYmluZGluZ3MvanMvRE9NV3Jh
cHBlcldvcmxkLmNwcAogICAgIGJpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCiAgICAgYmluZGlu
Z3MvanMvR0NDb250cm9sbGVyLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTQW55Q2FsbGJhY2tDdXN0
b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAKICAgICBiaW5k
aW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNw
cApAQCAtNzYsNiArNzgsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwCisgICAgYmlu
ZGluZ3MvanMvSlNGdXR1cmVJbml0Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTR2VvbG9j
YXRpb25DdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3Rv
bS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NRnV0dXJlc0JpbmRpbmdVdGls
aXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NRnV0dXJlc0JpbmRpbmdV
dGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlY2YxNDIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01GdXR1cmVz
QmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRE9NRnV0dXJlc0JpbmRpbmdVdGls
aXRpZXMuaCIKKworI2luY2x1ZGUgIkZ1dHVyZS5oIgorI2luY2x1ZGUgIkpTRnV0dXJlLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRnV0dXJlKiBz
Y3JpcHRWYWx1ZVRvRnV0dXJlKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdG9GdXR1cmUodmFsdWUuanNWYWx1ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NRnV0dXJlc0JpbmRp
bmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUZ1dHVyZXNCaW5k
aW5nVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwMzE5
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUZ1dHVy
ZXNCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERPTUZ1dHVyZXNCaW5kaW5nVXRpbGl0aWVzX2gKKyNkZWZpbmUgRE9NRnV0
dXJlc0JpbmRpbmdVdGlsaXRpZXNfaAorCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFueUNh
bGxiYWNrOworY2xhc3MgRnV0dXJlOworY2xhc3MgRnV0dXJlUmVzb2x2ZXI7CisKK0Z1dHVyZSog
c2NyaXB0VmFsdWVUb0Z1dHVyZShjb25zdCBTY3JpcHRWYWx1ZSYpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBET01GdXR1cmVzQmluZGluZ1V0aWxpdGllc19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FueUNhbGxiYWNrQ3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQW55Q2FsbGJhY2tDdXN0b20uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NjU1MzQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FueUNhbGxiYWNrQ3VzdG9tLmNwcApA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU0FueUNhbGxiYWNrLmgiCisKKyNpbmNsdWRlICJBbnlDYWxsYmFjay5o
IgorI2luY2x1ZGUgIkpTQ2FsbGJhY2tEYXRhLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8cnVudGltZS9K
U0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2NyaXB0VmFsdWUgSlNBbnlDYWxsYmFjazo6aGFu
ZGxlRXZlbnQoU2NyaXB0VmFsdWUgZGF0YSkKK3sKKyAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNr
KCkpCisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworCisgICAgUmVmUHRyPEpTQW55Q2Fs
bGJhY2s+IHByb3RlY3QodGhpcyk7CisKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkpOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQoZGF0YS5qc1ZhbHVlKCkpOworCisgICAgSlNDYWxs
YmFja0RhdGE6OkV4Y2VwdGlvbnNCZWhhdmlvciBleGNlcHRpb25zQmVoYXZpb3IgPSBzaG91bGRS
ZXBvcnRFeGNlcHRpb25zKCkgPyBKU0NhbGxiYWNrRGF0YTo6UmVwb3J0RXhjZXB0aW9ucyA6IEpT
Q2FsbGJhY2tEYXRhOjpEb05vdFJlcG9ydEV4Y2VwdGlvbnM7CisgICAgYm9vbCByYWlzZWRFeGNl
cHRpb24gPSBmYWxzZTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJnJhaXNlZEV4Y2VwdGlvbiwgJmV4Y2Vw
dGlvbiwgZXhjZXB0aW9uc0JlaGF2aW9yKTsKKyAgICBtX2V4Y2VwdGlvbiA9IHJhaXNlZEV4Y2Vw
dGlvbiA/IFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhjZXB0aW9uKSA6IFNjcmlw
dFZhbHVlKCk7CisKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBy
ZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKaW5kZXggYWEzMGRlNy4uOGU1OWY1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcApAQCAtNDIs
MTMgKzQyLDEzIEBAIHZvaWQgSlNDYWxsYmFja0RhdGE6OmRlbGV0ZURhdGEodm9pZCogY29udGV4
dCkKICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8SlNDYWxsYmFja0RhdGEqPihjb250ZXh0KTsKIH0K
IAotSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soTWFya2VkQXJndW1lbnRC
dWZmZXImIGFyZ3MsIGJvb2wqIHJhaXNlZEV4Y2VwdGlvbikKK0pTVmFsdWUgSlNDYWxsYmFja0Rh
dGE6Omludm9rZUNhbGxiYWNrKE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmdzLCBib29sKiByYWlz
ZWRFeGNlcHRpb24sIEpTVmFsdWUqIGV4Y2VwdGlvbiwgRXhjZXB0aW9uc0JlaGF2aW9yIGV4Y2Vw
dGlvbnNCZWhhdmlvcikKIHsKICAgICBBU1NFUlQoY2FsbGJhY2soKSk7Ci0gICAgcmV0dXJuIGlu
dm9rZUNhbGxiYWNrKGNhbGxiYWNrKCksIGFyZ3MsIHJhaXNlZEV4Y2VwdGlvbik7CisgICAgcmV0
dXJuIGludm9rZUNhbGxiYWNrKGNhbGxiYWNrKCksIGFyZ3MsIHJhaXNlZEV4Y2VwdGlvbiwgZXhj
ZXB0aW9uLCBleGNlcHRpb25zQmVoYXZpb3IpOwogfQogCi1KU1ZhbHVlIEpTQ2FsbGJhY2tEYXRh
OjppbnZva2VDYWxsYmFjayhKU1ZhbHVlIHRoaXNWYWx1ZSwgTWFya2VkQXJndW1lbnRCdWZmZXIm
IGFyZ3MsIGJvb2wqIHJhaXNlZEV4Y2VwdGlvbikKK0pTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omlu
dm9rZUNhbGxiYWNrKEpTVmFsdWUgdGhpc1ZhbHVlLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJn
cywgYm9vbCogcmFpc2VkRXhjZXB0aW9uLCBKU1ZhbHVlKiBleGNlcHRpb24sIEV4Y2VwdGlvbnNC
ZWhhdmlvciBleGNlcHRpb25zQmVoYXZpb3IpCiB7CiAgICAgQVNTRVJUKGNhbGxiYWNrKCkpOwog
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QoKSk7CkBAIC04NSw5ICs4NSwxNSBAQCBKU1ZhbHVlIEpT
Q2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKU1ZhbHVlIHRoaXNWYWx1ZSwgTWFya2VkQXJn
dW1lbnRCdWZmZXImCiAgICAgICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZvckFsbERvY3VtZW50
cygpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJlcG9ydEN1
cnJlbnRFeGNlcHRpb24oZXhlYyk7CiAgICAgICAgIGlmIChyYWlzZWRFeGNlcHRpb24pCiAgICAg
ICAgICAgICAqcmFpc2VkRXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikK
KyAgICAgICAgICAgICpleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgaWYg
KGV4Y2VwdGlvbnNCZWhhdmlvciA9PSBSZXBvcnRFeGNlcHRpb25zKQorICAgICAgICAgICAgcmVw
b3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgKaW5kZXggNzM4ZDBl
YS4uZmUxYzA5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxs
YmFja0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0
YS5oCkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEpTQ2FsbGJh
Y2tEYXRhIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZWxldGVEYXRhKHZvaWQqKTsKKyAg
ICBlbnVtIEV4Y2VwdGlvbnNCZWhhdmlvciB7IFJlcG9ydEV4Y2VwdGlvbnMsIERvTm90UmVwb3J0
RXhjZXB0aW9ucyB9OwogCiAgICAgSlNDYWxsYmFja0RhdGEoSlNDOjpKU09iamVjdCogY2FsbGJh
Y2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgIDogbV9jYWxsYmFj
ayhnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgY2FsbGJhY2spCkBAIC02NCw4ICs2NSw4IEBA
IHB1YmxpYzoKICAgICBKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaygpIHsgcmV0dXJuIG1fY2FsbGJh
Y2suZ2V0KCk7IH0KICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgeyByZXR1
cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7IH0KICAgICAKLSAgICBKU0M6OkpTVmFsdWUgaW52b2tl
Q2FsbGJhY2soSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYsIGJvb2wqIHJhaXNlZEV4Y2VwdGlv
biA9IDApOwotICAgIEpTQzo6SlNWYWx1ZSBpbnZva2VDYWxsYmFjayhKU0M6OkpTVmFsdWUgdGhp
c1ZhbHVlLCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiwgYm9vbCogcmFpc2VkRXhjZXB0aW9u
ID0gMCk7CisgICAgSlNDOjpKU1ZhbHVlIGludm9rZUNhbGxiYWNrKEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXImLCBib29sKiByYWlzZWRFeGNlcHRpb24gPSAwLCBKU0M6OkpTVmFsdWUqIGV4Y2Vw
dGlvbiA9IDAsIEV4Y2VwdGlvbnNCZWhhdmlvciA9IFJlcG9ydEV4Y2VwdGlvbnMpOworICAgIEpT
Qzo6SlNWYWx1ZSBpbnZva2VDYWxsYmFjayhKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyJiwgYm9vbCogcmFpc2VkRXhjZXB0aW9uID0gMCwgSlNDOjpKU1Zh
bHVlKiBleGNlcHRpb24gPSAwLCBFeGNlcHRpb25zQmVoYXZpb3IgPSBSZXBvcnRFeGNlcHRpb25z
KTsKIAogcHJpdmF0ZToKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBtX2NhbGxiYWNr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGdXR1cmVJbml0Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRnV0dXJlSW5pdEN1c3RvbS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYwOGQyOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRnV0dXJlSW5pdEN1c3RvbS5j
cHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVs
ZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNGdXR1cmVJbml0LmgiCisKKyNpbmNsdWRlICJKU0NhbGxiYWNr
RGF0YS5oIgorI2luY2x1ZGUgIkpTRnV0dXJlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDxy
dW50aW1lL0pTTG9jay5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgSlNGdXR1cmVJbml0OjpoYW5kbGVFdmVudChGdXR1cmVSZXNvbHZlciog
cmVzb2x2ZXIpCit7CisgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFJlZlB0cjxKU0Z1dHVyZUluaXQ+IHByb3RlY3QodGhpcyk7CisKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkp
OworCisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQo
dG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCByZXNvbHZlcikpOworCisgICAgSlND
YWxsYmFja0RhdGE6OkV4Y2VwdGlvbnNCZWhhdmlvciBleGNlcHRpb25zQmVoYXZpb3IgPSBzaG91
bGRSZXBvcnRFeGNlcHRpb25zKCkgPyBKU0NhbGxiYWNrRGF0YTo6UmVwb3J0RXhjZXB0aW9ucyA6
IEpTQ2FsbGJhY2tEYXRhOjpEb05vdFJlcG9ydEV4Y2VwdGlvbnM7CisgICAgYm9vbCByYWlzZWRF
eGNlcHRpb24gPSBmYWxzZTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBtX2RhdGEtPmlu
dm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24sICZleGNlcHRpb24sIGV4Y2VwdGlv
bnNCZWhhdmlvcik7CisgICAgbV9leGNlcHRpb24gPSByYWlzZWRFeGNlcHRpb24gPyBTY3JpcHRW
YWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4Y2VwdGlvbikgOiBTY3JpcHRWYWx1ZSgpOworCisg
ICAgcmV0dXJuICFyYWlzZWRFeGNlcHRpb247Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BbnlDYWxsYmFjay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQW55Q2FsbGJhY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjY3YjI1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQW55
Q2FsbGJhY2suY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFueUNhbGxiYWNrLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQW55Q2FsbGJhY2s6OkFueUNhbGxiYWNrKCkKKyAgICA6IG1fZXhjZXB0aW9u
c0JlaGF2aW9yKFJlcG9ydEV4Y2VwdGlvbnMpCit7Cit9CisKK1NjcmlwdFZhbHVlIEFueUNhbGxi
YWNrOjpjYWxsKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uc0JlaGF2aW9yIGV4
Y2VwdGlvbnNCZWhhdmlvciwgYm9vbCogaGFkRXhjZXB0aW9uLCBTY3JpcHRWYWx1ZSogZXhjZXB0
aW9uKQoreworICAgIG1fZXhjZXB0aW9uc0JlaGF2aW9yID0gZXhjZXB0aW9uc0JlaGF2aW9yOwor
ICAgIFNjcmlwdFZhbHVlIHJlc3VsdCA9IGhhbmRsZUV2ZW50KHZhbHVlKTsKKyAgICBpZiAoaGFk
RXhjZXB0aW9uKQorICAgICAgICAqaGFkRXhjZXB0aW9uID0gIW1fZXhjZXB0aW9uLmhhc05vVmFs
dWUoKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAqZXhjZXB0aW9uID0gbV9leGNlcHRp
b247CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQW55Q2FsbGJhY2suaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9BbnlDYWxsYmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmU5ZjA2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQW55Q2FsbGJh
Y2suaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcg
RWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQW55
Q2FsbGJhY2tfaAorI2RlZmluZSBBbnlDYWxsYmFja19oCisKKyNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OworCitjbGFzcyBBbnlDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPEFueUNhbGxiYWNrPiB7
CitwdWJsaWM6CisgICAgZW51bSBFeGNlcHRpb25zQmVoYXZpb3IgeyBSZXBvcnRFeGNlcHRpb25z
LCBEb05vdFJlcG9ydEV4Y2VwdGlvbnMgfTsKKyAgICBBbnlDYWxsYmFjaygpOworCisgICAgdmly
dHVhbCB+QW55Q2FsbGJhY2soKSB7IH0KKyAgICBTY3JpcHRWYWx1ZSBjYWxsKGNvbnN0IFNjcmlw
dFZhbHVlJiwgRXhjZXB0aW9uc0JlaGF2aW9yID0gUmVwb3J0RXhjZXB0aW9ucywgYm9vbCogaGFk
RXhjZXB0aW9uID0gMCwgU2NyaXB0VmFsdWUqIGV4Y2VwdGlvbiA9IDApOworCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCBTY3JpcHRWYWx1ZSBoYW5kbGVFdmVudChTY3JpcHRWYWx1ZSkgPSAwOwor
ICAgIGJvb2wgc2hvdWxkUmVwb3J0RXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0
aW9uc0JlaGF2aW9yID09IFJlcG9ydEV4Y2VwdGlvbnM7IH0KKworICAgIEV4Y2VwdGlvbnNCZWhh
dmlvciBtX2V4Y2VwdGlvbnNCZWhhdmlvcjsKKyAgICBTY3JpcHRWYWx1ZSBtX2V4Y2VwdGlvbjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEFueUNhbGxiYWNrX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BbnlDYWxsYmFjay5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQW55Q2FsbGJhY2suaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjAzYTMwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQW55
Q2FsbGJhY2suaWRsCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWwor
ICAgIENhbGxiYWNrCitdIGludGVyZmFjZSBBbnlDYWxsYmFjayB7CisgICAgW0N1c3RvbV0gYW55
IGhhbmRsZUV2ZW50KGluIFtPcHRpb25hbF0gYW55IGRhdGEpOworfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkMmNlNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuY3BwCkBAIC0wLDAgKzEsMTUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
dXR1cmUuaCIKKworI2luY2x1ZGUgIkFueUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRnV0dXJlUmVz
b2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGdXR1cmU6OkZ1dHVyZShQYXNzUmVm
UHRyPEZ1dHVyZUluaXQ+IGluaXQpCisgICAgOiBtX3Jlc29sdmVyKEZ1dHVyZVJlc29sdmVyOjpj
cmVhdGUodGhpcykpCisgICAgLCBtX3N0YXRlKFBlbmRpbmcpCisgICAgLCBtX3RpbWVyKHRoaXMs
ICZGdXR1cmU6OnRpbWVyRmlyZWQpCit7CisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7
CisKKyAgICBpZiAoaW5pdCkgeworICAgICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwor
ICAgICAgICBTY3JpcHRWYWx1ZSBleGNlcHRpb247CisgICAgICAgIGluaXQtPmNhbGwobV9yZXNv
bHZlci5nZXQoKSwgRnV0dXJlSW5pdDo6RG9Ob3RSZXBvcnRFeGNlcHRpb25zLCAmaGFkRXhjZXB0
aW9uLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGhhZEV4Y2VwdGlvbikKKyAgICAgICAgICAg
IG1fcmVzb2x2ZXItPnJlamVjdChleGNlcHRpb24pOworICAgIH0KK30KKworRnV0dXJlOjp+RnV0
dXJlKCkKK3sKK30KKwordm9pZCBGdXR1cmU6OmFwcGVuZEFjY2VwdEhhbmRsZXIoUGFzc093blB0
cjxGdXR1cmVIYW5kbGVyPiBhY2NlcHRIYW5kbGVyKQoreworICAgIEFTU0VSVChhY2NlcHRIYW5k
bGVyKTsKKyAgICBtX2FjY2VwdEhhbmRsZXJzLmFwcGVuZChhY2NlcHRIYW5kbGVyKTsKKworICAg
IGlmIChtX3N0YXRlID09IEFjY2VwdGVkKQorICAgICAgICBwcm9jZXNzSGFuZGxlcnMoQXN5bmNo
cm9ub3VzKTsKK30KKwordm9pZCBGdXR1cmU6OmFwcGVuZFJlamVjdEhhbmRsZXIoUGFzc093blB0
cjxGdXR1cmVIYW5kbGVyPiByZWplY3RIYW5kbGVyKQoreworICAgIEFTU0VSVChyZWplY3RIYW5k
bGVyKTsKKyAgICBtX3JlamVjdEhhbmRsZXJzLmFwcGVuZChyZWplY3RIYW5kbGVyKTsKKworICAg
IGlmIChtX3N0YXRlID09IFJlamVjdGVkKQorICAgICAgICBwcm9jZXNzSGFuZGxlcnMoQXN5bmNo
cm9ub3VzKTsKK30KKworUGFzc1JlZlB0cjxGdXR1cmU+IEZ1dHVyZTo6dGhlbihQYXNzUmVmUHRy
PEFueUNhbGxiYWNrPiBhY2NlcHRDYWxsYmFjaywgUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4gcmVq
ZWN0Q2FsbGJhY2spCit7CisgICAgUmVmUHRyPEZ1dHVyZT4gbmV3RnV0dXJlID0gRnV0dXJlOjpj
cmVhdGUoKTsKKworICAgIGlmIChhY2NlcHRDYWxsYmFjaykgeworICAgICAgICBPd25QdHI8RnV0
dXJlSGFuZGxlcj4gYWNjZXB0SGFuZGxlciA9IEZ1dHVyZUhhbmRsZXI6OmNyZWF0ZShGdXR1cmVI
YW5kbGVyOjpSZXNvbHZlLCBhY2NlcHRDYWxsYmFjaywgbmV3RnV0dXJlKTsKKyAgICAgICAgYXBw
ZW5kQWNjZXB0SGFuZGxlcihhY2NlcHRIYW5kbGVyLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAg
aWYgKHJlamVjdENhbGxiYWNrKSB7CisgICAgICAgIE93blB0cjxGdXR1cmVIYW5kbGVyPiByZWpl
Y3RIYW5kbGVyID0gRnV0dXJlSGFuZGxlcjo6Y3JlYXRlKEZ1dHVyZUhhbmRsZXI6OlJlamVjdCwg
cmVqZWN0Q2FsbGJhY2ssIG5ld0Z1dHVyZSk7CisgICAgICAgIGFwcGVuZFJlamVjdEhhbmRsZXIo
cmVqZWN0SGFuZGxlci5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHJldHVybiBuZXdGdXR1cmUu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEZ1dHVyZT4gRnV0dXJlOjpjYXRjaEZ1bmMoUGFz
c1JlZlB0cjxBbnlDYWxsYmFjaz4gcmVqZWN0Q2FsbGJhY2spCit7CisgICAgUmVmUHRyPEZ1dHVy
ZT4gbmV3RnV0dXJlID0gRnV0dXJlOjpjcmVhdGUoKTsKKworICAgIE93blB0cjxGdXR1cmVIYW5k
bGVyPiBhY2NlcHRIYW5kbGVyID0gRnV0dXJlSGFuZGxlcjo6Y3JlYXRlKEZ1dHVyZUhhbmRsZXI6
OlJlc29sdmUsIDAsIG5ld0Z1dHVyZSk7CisgICAgYXBwZW5kQWNjZXB0SGFuZGxlcihhY2NlcHRI
YW5kbGVyLnJlbGVhc2UoKSk7CisKKyAgICBpZiAocmVqZWN0Q2FsbGJhY2spIHsKKyAgICAgICAg
T3duUHRyPEZ1dHVyZUhhbmRsZXI+IHJlamVjdEhhbmRsZXIgPSBGdXR1cmVIYW5kbGVyOjpjcmVh
dGUoRnV0dXJlSGFuZGxlcjo6UmVqZWN0LCByZWplY3RDYWxsYmFjaywgbmV3RnV0dXJlKTsKKyAg
ICAgICAgYXBwZW5kUmVqZWN0SGFuZGxlcihyZWplY3RIYW5kbGVyLnJlbGVhc2UoKSk7CisgICAg
fQorCisgICAgcmV0dXJuIG5ld0Z1dHVyZS5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgRnV0dXJlOjpk
b25lKFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+IGFjY2VwdENhbGxiYWNrLCBQYXNzUmVmUHRyPEFu
eUNhbGxiYWNrPiByZWplY3RDYWxsYmFjaykKK3sKKyAgICBpZiAoYWNjZXB0Q2FsbGJhY2spIHsK
KyAgICAgICAgT3duUHRyPEZ1dHVyZUhhbmRsZXI+IGFjY2VwdEhhbmRsZXIgPSBGdXR1cmVIYW5k
bGVyOjpjcmVhdGUoRnV0dXJlSGFuZGxlcjo6Tm9uZSwgYWNjZXB0Q2FsbGJhY2ssIDApOworICAg
ICAgICBhcHBlbmRBY2NlcHRIYW5kbGVyKGFjY2VwdEhhbmRsZXIucmVsZWFzZSgpKTsKKyAgICB9
CisKKyAgICBpZiAocmVqZWN0Q2FsbGJhY2spIHsKKyAgICAgICAgT3duUHRyPEZ1dHVyZUhhbmRs
ZXI+IHJlamVjdEhhbmRsZXIgPSBGdXR1cmVIYW5kbGVyOjpjcmVhdGUoRnV0dXJlSGFuZGxlcjo6
Tm9uZSwgcmVqZWN0Q2FsbGJhY2ssIDApOworICAgICAgICBhcHBlbmRSZWplY3RIYW5kbGVyKHJl
amVjdEhhbmRsZXIucmVsZWFzZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgRnV0dXJlOjp0aW1lckZp
cmVkKFRpbWVyPEZ1dHVyZT4qKQoreworICAgIHdoaWxlICghbV9wcm9jZXNzaW5nUXVldWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIGNvbnN0IEhhbmRsZXJzUHJvY2Vzc2luZ1Rhc2smIHRhc2sgPSBt
X3Byb2Nlc3NpbmdRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgZG9Qcm9jZXNzSGFuZGxlcnMo
dGFzay5oYW5kbGVycywgdGFzay52YWx1ZSk7CisgICAgfQorfQorCit2b2lkIEZ1dHVyZTo6cHJv
Y2Vzc0hhbmRsZXJzKFN5bmNocm9ub3VzTW9kZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IFN5
bmNocm9ub3VzKSB7CisgICAgICAgIGRvUHJvY2Vzc0hhbmRsZXJzKGN1cnJlbnRTdGF0ZUhhbmRs
ZXJzKCksIG1fcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBRdWV1ZSBh
IHRhc2sgdG8gcHJvY2VzcyBoYW5kbGVycyBhc3luY2hyb25vdXNseS4KKyAgICBtX3Byb2Nlc3Np
bmdRdWV1ZS5hcHBlbmQoSGFuZGxlcnNQcm9jZXNzaW5nVGFzayhjdXJyZW50U3RhdGVIYW5kbGVy
cygpLCBtX3Jlc3VsdCkpOworICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBt
X3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBGdXR1cmU6OmRvUHJvY2Vzc0hhbmRs
ZXJzKEZ1dHVyZUhhbmRsZXJMaXN0JiBoYW5kbGVycywgY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVl
KQoreworICAgIHdoaWxlICghaGFuZGxlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIE93blB0cjxG
dXR1cmVIYW5kbGVyPiBoYW5kbGVyID0gaGFuZGxlcnMudGFrZUZpcnN0KCk7CisgICAgICAgIGhh
bmRsZXItPmNhbGwodmFsdWUpOworICAgIH0KK30KKworRnV0dXJlOjpGdXR1cmVIYW5kbGVyTGlz
dCYgRnV0dXJlOjpjdXJyZW50U3RhdGVIYW5kbGVycygpCit7CisgICAgQVNTRVJUKG1fc3RhdGUg
IT0gUGVuZGluZyk7CisgICAgcmV0dXJuIChtX3N0YXRlID09IEFjY2VwdGVkKSA/IG1fYWNjZXB0
SGFuZGxlcnMgOiBtX3JlamVjdEhhbmRsZXJzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRnV0dXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlYTIz
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuaApAQCAtMCww
ICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnV0dXJlX2gKKyNkZWZp
bmUgRnV0dXJlX2gKKworI2luY2x1ZGUgIkZ1dHVyZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJGdXR1
cmVJbml0LmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZ1dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZ1dHVy
ZT4geworcHVibGljOgorICAgIGVudW0gU3RhdGUgeyBQZW5kaW5nLCBBY2NlcHRlZCwgUmVqZWN0
ZWQgfTsKKyAgICBlbnVtIFN5bmNocm9ub3VzTW9kZSB7IEFzeW5jaHJvbm91cywgU3luY2hyb25v
dXMgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZ1dHVyZT4gY3JlYXRlKFBhc3NSZWZQdHI8
RnV0dXJlSW5pdD4gaW5pdCA9IDApCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZ1dHVyZShpbml0KSk7CisgICAgfQorCisgICAgfkZ1dHVyZSgpOworCisgICAgUGFzc1JlZlB0
cjxGdXR1cmU+IHRoZW4oUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4gYWNjZXB0Q2FsbGJhY2sgPSAw
LCBQYXNzUmVmUHRyPEFueUNhbGxiYWNrPiByZWplY3RDYWxsYmFjayA9IDApOworICAgIFBhc3NS
ZWZQdHI8RnV0dXJlPiBjYXRjaEZ1bmMoUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4gcmVqZWN0Q2Fs
bGJhY2sgPSAwKTsKKyAgICB2b2lkIGRvbmUoUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4gYWNjZXB0
Q2FsbGJhY2sgPSAwLCBQYXNzUmVmUHRyPEFueUNhbGxiYWNrPiByZWplY3RDYWxsYmFjayA9IDAp
OworCisgICAgRnV0dXJlUmVzb2x2ZXIqIHJlc29sdmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
bHZlci5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRSZXN1bHQoY29uc3QgU2NyaXB0VmFsdWUmIHJl
c3VsdCkgeyBtX3Jlc3VsdCA9IHJlc3VsdDsgfQorICAgIHZvaWQgc2V0U3RhdGUoU3RhdGUgc3Rh
dGUpIHsgbV9zdGF0ZSA9IHN0YXRlOyB9CisKKyAgICB2b2lkIHByb2Nlc3NIYW5kbGVycyhTeW5j
aHJvbm91c01vZGUpOworICAgIHZvaWQgYXBwZW5kQWNjZXB0SGFuZGxlcihQYXNzT3duUHRyPEZ1
dHVyZUhhbmRsZXI+KTsKKyAgICB2b2lkIGFwcGVuZFJlamVjdEhhbmRsZXIoUGFzc093blB0cjxG
dXR1cmVIYW5kbGVyPik7CisKK3ByaXZhdGU6CisgICAgRnV0dXJlKFBhc3NSZWZQdHI8RnV0dXJl
SW5pdD4pOworCisgICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8RnV0dXJlSGFuZGxlcj4gPiBGdXR1
cmVIYW5kbGVyTGlzdDsKKworICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxGdXR1cmU+Kik7Cisg
ICAgdm9pZCBkb1Byb2Nlc3NIYW5kbGVycyhGdXR1cmVIYW5kbGVyTGlzdCYsIGNvbnN0IFNjcmlw
dFZhbHVlJik7CisKKyAgICBGdXR1cmVIYW5kbGVyTGlzdCYgY3VycmVudFN0YXRlSGFuZGxlcnMo
KTsKKworICAgIHN0cnVjdCBIYW5kbGVyc1Byb2Nlc3NpbmdUYXNrIHsKKyAgICAgICAgSGFuZGxl
cnNQcm9jZXNzaW5nVGFzayhGdXR1cmVIYW5kbGVyTGlzdCYgX2hhbmRsZXJzLCBjb25zdCBTY3Jp
cHRWYWx1ZSYgX3ZhbHVlKQorICAgICAgICAgICAgOiBoYW5kbGVycyhfaGFuZGxlcnMpCisgICAg
ICAgICAgICAsIHZhbHVlKF92YWx1ZSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgRnV0dXJlSGFu
ZGxlckxpc3QmIGhhbmRsZXJzOworICAgICAgICBTY3JpcHRWYWx1ZSB2YWx1ZTsKKyAgICB9Owor
CisgICAgUmVmUHRyPEZ1dHVyZVJlc29sdmVyPiBtX3Jlc29sdmVyOworICAgIFN0YXRlIG1fc3Rh
dGU7CisgICAgU2NyaXB0VmFsdWUgbV9yZXN1bHQ7CisgICAgRnV0dXJlSGFuZGxlckxpc3QgbV9h
Y2NlcHRIYW5kbGVyczsKKyAgICBGdXR1cmVIYW5kbGVyTGlzdCBtX3JlamVjdEhhbmRsZXJzOwor
ICAgIFRpbWVyPEZ1dHVyZT4gbV90aW1lcjsKKyAgICBEZXF1ZTxIYW5kbGVyc1Byb2Nlc3NpbmdU
YXNrPiBtX3Byb2Nlc3NpbmdRdWV1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEZ1dHVyZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJl
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmIwOWI0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRnV0dXJlLmlkbApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1sKKyAgICBDb25zdHJ1Y3RvcihpbiBbQ2FsbGJhY2tdIEZ1dHVyZUluaXQgaW5pdCkKK10gaW50
ZXJmYWNlIEZ1dHVyZSB7CisgICAgRnV0dXJlIHRoZW4oaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0g
QW55Q2FsbGJhY2sgYWNjZXB0Q2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEFueUNh
bGxiYWNrIHJlamVjdENhbGxiYWNrKTsKKyAgICBbSW1wbGVtZW50ZWRBcz1jYXRjaEZ1bmNdIEZ1
dHVyZSBjYXRjaChpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBBbnlDYWxsYmFjayByZWplY3RDYWxs
YmFjayk7CisgICAgdm9pZCBkb25lKGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEFueUNhbGxiYWNr
IGFjY2VwdENhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBBbnlDYWxsYmFjayByZWpl
Y3RDYWxsYmFjayk7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZUhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZUhhbmRsZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YTUyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSGFuZGxlci5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnV0dXJl
SGFuZGxlci5oIgorCisjaW5jbHVkZSAiRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJGdXR1cmVSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Z1dHVy
ZUhhbmRsZXI6OkZ1dHVyZUhhbmRsZXIoSGFuZGxlclR5cGUgdHlwZSwgUGFzc1JlZlB0cjxBbnlD
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8RnV0dXJlPiBmdXR1cmUpCisgICAgOiBtX3R5
cGUodHlwZSkKKyAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX2Z1dHVyZShmdXR1
cmUpCit7Cit9CisKK0Z1dHVyZUhhbmRsZXI6On5GdXR1cmVIYW5kbGVyKCkKK3sKK30KKwordm9p
ZCBGdXR1cmVIYW5kbGVyOjpjYWxsKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICBp
ZiAoIW1fY2FsbGJhY2spIHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKKyAgICAgICAgY2Fz
ZSBSZXNvbHZlOgorICAgICAgICAgICAgbV9mdXR1cmUtPnJlc29sdmVyKCktPnJlc29sdmUodmFs
dWUsIEZ1dHVyZTo6U3luY2hyb25vdXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUmVqZWN0OgorICAgICAgICAgICAgbV9mdXR1cmUtPnJlc29sdmVyKCktPnJlamVjdCh2YWx1
ZSwgRnV0dXJlOjpTeW5jaHJvbm91cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogU2V0IGhhbmRsZXIncyBjYWxsYmFjaydzIGNhbGxiYWNrIHRo
aXMgdmFsdWUgdG8gZnV0dXJlID8KKyAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOworICAg
IFNjcmlwdFZhbHVlIGV4Y2VwdGlvbjsKKyAgICBTY3JpcHRWYWx1ZSByZXN1bHQgPSBtX2NhbGxi
YWNrLT5jYWxsKHZhbHVlLCBBbnlDYWxsYmFjazo6RG9Ob3RSZXBvcnRFeGNlcHRpb25zLCAmaGFk
RXhjZXB0aW9uLCAmZXhjZXB0aW9uKTsKKworICAgIGlmIChtX2Z1dHVyZSkgeworICAgICAgICBp
ZiAoaGFkRXhjZXB0aW9uKQorICAgICAgICAgICAgbV9mdXR1cmUtPnJlc29sdmVyKCktPnJlamVj
dChleGNlcHRpb24sIEZ1dHVyZTo6U3luY2hyb25vdXMpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX2Z1dHVyZS0+cmVzb2x2ZXIoKS0+cmVzb2x2ZShyZXN1bHQsIEZ1dHVyZTo6U3luY2hy
b25vdXMpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZUhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9G
dXR1cmVIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjMDU4
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVIYW5kbGVyLmgK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0
cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1dHVyZUhh
bmRsZXJfaAorI2RlZmluZSBGdXR1cmVIYW5kbGVyX2gKKworI2luY2x1ZGUgIkFueUNhbGxiYWNr
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnV0dXJlOworCitjbGFzcyBGdXR1cmVI
YW5kbGVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIEhhbmRsZXJUeXBlIHsgTm9uZSwgUmVzb2x2ZSwg
UmVqZWN0IH07CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxGdXR1cmVIYW5kbGVyPiBjcmVhdGUo
SGFuZGxlclR5cGUgdHlwZSwgUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RnV0dXJlPiBmdXR1cmUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IEZ1dHVyZUhhbmRsZXIodHlwZSwgY2FsbGJhY2ssIGZ1dHVyZSkpOworICAgIH0KKworICAgIH5G
dXR1cmVIYW5kbGVyKCk7CisKKyAgICB2b2lkIGNhbGwoY29uc3QgU2NyaXB0VmFsdWUmKTsKKwor
ICAgIEhhbmRsZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBBbnlD
YWxsYmFjayogY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CisK
K3ByaXZhdGU6CisgICAgRnV0dXJlSGFuZGxlcihIYW5kbGVyVHlwZSwgUGFzc1JlZlB0cjxBbnlD
YWxsYmFjaz4sIFBhc3NSZWZQdHI8RnV0dXJlPik7CisKKyAgICBIYW5kbGVyVHlwZSBtX3R5cGU7
CisgICAgUmVmUHRyPEFueUNhbGxiYWNrPiBtX2NhbGxiYWNrOworICAgIFJlZlB0cjxGdXR1cmU+
IG1fZnV0dXJlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnV0
dXJlSGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSW5pdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMGEyZmE1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9GdXR1cmVJbml0LmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdXR1cmVJbml0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworRnV0dXJlSW5pdDo6RnV0dXJlSW5pdCgpCisgICAgOiBtX2V4
Y2VwdGlvbnNCZWhhdmlvcihSZXBvcnRFeGNlcHRpb25zKQoreworfQorCit2b2lkIEZ1dHVyZUlu
aXQ6OmNhbGwoRnV0dXJlUmVzb2x2ZXIqIHJlc29sdmVyLCBGdXR1cmVJbml0OjpFeGNlcHRpb25z
QmVoYXZpb3IgZXhjZXB0aW9uc0JlaGF2aW9yLCBib29sKiBoYWRFeGNlcHRpb24sIFNjcmlwdFZh
bHVlKiBleGNlcHRpb24pCit7CisgICAgbV9leGNlcHRpb25zQmVoYXZpb3IgPSBleGNlcHRpb25z
QmVoYXZpb3I7CisgICAgaGFuZGxlRXZlbnQocmVzb2x2ZXIpOworICAgIGlmIChoYWRFeGNlcHRp
b24pCisgICAgICAgICpoYWRFeGNlcHRpb24gPSAhbV9leGNlcHRpb24uaGFzTm9WYWx1ZSgpOwor
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICpleGNlcHRpb24gPSBtX2V4Y2VwdGlvbjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0Z1dHVyZUluaXQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVJbml0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjZDA3NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVJbml0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEZ1dHVyZUluaXRfaAorI2RlZmluZSBGdXR1cmVJbml0X2gK
KworI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEZ1dHVyZVJlc29sdmVyOworCitjbGFzcyBGdXR1cmVJbml0IDogcHVibGljIFJlZkNvdW50ZWQ8
RnV0dXJlSW5pdD4geworcHVibGljOgorICAgIGVudW0gRXhjZXB0aW9uc0JlaGF2aW9yIHsgUmVw
b3J0RXhjZXB0aW9ucywgRG9Ob3RSZXBvcnRFeGNlcHRpb25zIH07CisKKyAgICBGdXR1cmVJbml0
KCk7CisKKyAgICB2aXJ0dWFsIH5GdXR1cmVJbml0KCkgeyB9CisKKyAgICB2b2lkIGNhbGwoRnV0
dXJlUmVzb2x2ZXIqLCBFeGNlcHRpb25zQmVoYXZpb3IgPSBSZXBvcnRFeGNlcHRpb25zLCBib29s
KiBoYWRFeGNlcHRpb24gPSAwLCBTY3JpcHRWYWx1ZSogZXhjZXB0aW9uID0gMCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoRnV0dXJlUmVzb2x2ZXIqKSA9IDA7
CisgICAgYm9vbCBzaG91bGRSZXBvcnRFeGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9leGNl
cHRpb25zQmVoYXZpb3IgPT0gUmVwb3J0RXhjZXB0aW9uczsgfQorCisgICAgRXhjZXB0aW9uc0Jl
aGF2aW9yIG1fZXhjZXB0aW9uc0JlaGF2aW9yOworICAgIFNjcmlwdFZhbHVlIG1fZXhjZXB0aW9u
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnV0dXJlSW5pdF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSW5pdC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRnV0dXJlSW5pdC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDFlNjcxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1
cmVJbml0LmlkbApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNh
bXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAg
ICBDYWxsYmFjaworXSBpbnRlcmZhY2UgRnV0dXJlSW5pdCB7CisgICAgW0N1c3RvbV0gYm9vbGVh
biBoYW5kbGVFdmVudChpbiBGdXR1cmVSZXNvbHZlciByZXNvbHZlcik7Cit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9GdXR1cmVSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjRhMGYzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVS
ZXNvbHZlci5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBT
YW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnV0dXJlUmVzb2x2ZXIuaCIKKworI2luY2x1ZGUg
IkFueUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGdXR1cmVSZXNvbHZlcjo6RnV0dXJlUmVzb2x2ZXIo
RnV0dXJlKiBmdXR1cmUpCisgICAgOiBtX2Z1dHVyZShmdXR1cmUpCisgICAgLCBtX2lzUmVzb2x2
ZWQoZmFsc2UpCit7CisgICAgQVNTRVJUKGZ1dHVyZSk7Cit9CisKK3ZvaWQgRnV0dXJlUmVzb2x2
ZXI6OmFjY2VwdChjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIEZ1dHVyZTo6U3luY2hyb25vdXNN
b2RlIG1vZGUpCit7CisgICAgaWYgKGlzUmVzb2x2ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9mdXR1cmUtPnNldFN0YXRlKEZ1dHVyZTo6QWNjZXB0ZWQpOworICAgIG1fZnV0dXJlLT5z
ZXRSZXN1bHQodmFsdWUpOworICAgIG1fZnV0dXJlLT5wcm9jZXNzSGFuZGxlcnMobW9kZSk7CisK
KyAgICBtX2lzUmVzb2x2ZWQgPSB0cnVlOworfQorCit2b2lkIEZ1dHVyZVJlc29sdmVyOjpyZWpl
Y3QoY29uc3QgU2NyaXB0VmFsdWUmIGVycm9yLCBGdXR1cmU6OlN5bmNocm9ub3VzTW9kZSBtb2Rl
KQoreworICAgIGlmIChpc1Jlc29sdmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnV0
dXJlLT5zZXRTdGF0ZShGdXR1cmU6OlJlamVjdGVkKTsKKyAgICBtX2Z1dHVyZS0+c2V0UmVzdWx0
KGVycm9yKTsKKyAgICBtX2Z1dHVyZS0+cHJvY2Vzc0hhbmRsZXJzKG1vZGUpOworCisgICAgbV9p
c1Jlc29sdmVkID0gdHJ1ZTsKK30KKwordm9pZCBGdXR1cmVSZXNvbHZlcjo6cmVzb2x2ZShjb25z
dCBTY3JpcHRWYWx1ZSYgdmFsdWUsIEZ1dHVyZTo6U3luY2hyb25vdXNNb2RlKQoreworICAgIGlm
IChpc1Jlc29sdmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZ1dHVyZSogZnV0dXJlID0g
c2NyaXB0VmFsdWVUb0Z1dHVyZSh2YWx1ZSk7CisgICAgaWYgKGZ1dHVyZSkgeworICAgICAgICBP
d25QdHI8RnV0dXJlSGFuZGxlcj4gYWNjZXB0SGFuZGxlciA9IEZ1dHVyZUhhbmRsZXI6OmNyZWF0
ZShGdXR1cmVIYW5kbGVyOjpSZXNvbHZlLCAwLCBtX2Z1dHVyZSk7CisgICAgICAgIGZ1dHVyZS0+
YXBwZW5kQWNjZXB0SGFuZGxlcihhY2NlcHRIYW5kbGVyLnJlbGVhc2UoKSk7CisgICAgICAgIE93
blB0cjxGdXR1cmVIYW5kbGVyPiByZWplY3RIYW5kbGVyID0gRnV0dXJlSGFuZGxlcjo6Y3JlYXRl
KEZ1dHVyZUhhbmRsZXI6OlJlamVjdCwgMCwgbV9mdXR1cmUpOworICAgICAgICBmdXR1cmUtPmFw
cGVuZFJlamVjdEhhbmRsZXIocmVqZWN0SGFuZGxlci5yZWxlYXNlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBh
IEpTIE9iamVjdCBvciBhIGNhbGxhYmxlLgorCisgICAgYWNjZXB0KHZhbHVlLCBGdXR1cmU6OlN5
bmNocm9ub3VzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0
dXJlUmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjRhMGQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmgK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0
cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1dHVyZVJl
c29sdmVyX2gKKyNkZWZpbmUgRnV0dXJlUmVzb2x2ZXJfaAorCisjaW5jbHVkZSAiRnV0dXJlLmgi
CisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGdXR1cmVSZXNvbHZlcjogcHVibGljIFJlZkNv
dW50ZWQ8RnV0dXJlUmVzb2x2ZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
dXR1cmVSZXNvbHZlcj4gY3JlYXRlKEZ1dHVyZSogZnV0dXJlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBGdXR1cmVSZXNvbHZlcihmdXR1cmUpKTsKKyAgICB9CisKKyAgICB2
b2lkIGFjY2VwdChjb25zdCBTY3JpcHRWYWx1ZSYgPSBTY3JpcHRWYWx1ZSgpLCBGdXR1cmU6OlN5
bmNocm9ub3VzTW9kZSA9IEZ1dHVyZTo6QXN5bmNocm9ub3VzKTsKKyAgICB2b2lkIHJlamVjdChj
b25zdCBTY3JpcHRWYWx1ZSYgPSBTY3JpcHRWYWx1ZSgpLCBGdXR1cmU6OlN5bmNocm9ub3VzTW9k
ZSA9IEZ1dHVyZTo6QXN5bmNocm9ub3VzKTsKKyAgICB2b2lkIHJlc29sdmUoY29uc3QgU2NyaXB0
VmFsdWUmID0gU2NyaXB0VmFsdWUoKSwgRnV0dXJlOjpTeW5jaHJvbm91c01vZGUgPSBGdXR1cmU6
OkFzeW5jaHJvbm91cyk7CisKKyAgICBib29sIGlzUmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiBt
X2lzUmVzb2x2ZWQ7IH0KKworcHJpdmF0ZToKKyAgICBGdXR1cmVSZXNvbHZlcihGdXR1cmUqKTsK
KworICAgIEZ1dHVyZSogbV9mdXR1cmU7CisgICAgYm9vbCBtX2lzUmVzb2x2ZWQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGdXR1cmVSZXNvbHZlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlUmVzb2x2ZXIuaWRsIGIvU291cmNlL1dl
YkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yYjIzZGFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1
dHVyZVJlc29sdmVyLmlkbApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K2ludGVyZmFjZSBGdXR1cmVSZXNvbHZlciB7CisgICAgdm9pZCBhY2NlcHQoaW4gW09wdGlvbmFs
XSBhbnkgdmFsdWUpOworICAgIHZvaWQgcmVzb2x2ZShpbiBbT3B0aW9uYWxdIGFueSB2YWx1ZSk7
CisgICAgdm9pZCByZWplY3QoaW4gW09wdGlvbmFsXSBhbnkgZXJyb3IpOworCisgICAgcmVhZG9u
bHkgYXR0cmlidXRlIGJvb2xlYW4gaXNSZXNvbHZlZDsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5pZGwKaW5kZXggZDA2YWZlMC4uOGYzNDA2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93Lmlk
bApAQCAtNTg3LDYgKzU4Nyw4IEBACiAgICAgW0NvbmRpdGlvbmFsPVdPUktFUlNdIGF0dHJpYnV0
ZSBXb3JrZXJDb25zdHJ1Y3RvciBXb3JrZXI7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0
b3IKICAgICBbQ29uZGl0aW9uYWw9U0hBUkVEX1dPUktFUlMsIEpTQ3VzdG9tR2V0dGVyLCBWOEVu
YWJsZWRBdFJ1bnRpbWVdIGF0dHJpYnV0ZSBTaGFyZWRXb3JrZXJDb25zdHJ1Y3RvciBTaGFyZWRX
b3JrZXI7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKIAorICAgIGF0dHJpYnV0ZSBG
dXR1cmVDb25zdHJ1Y3RvciBGdXR1cmU7CisKICAgICBhdHRyaWJ1dGUgRmlsZUNvbnN0cnVjdG9y
IEZpbGU7CiAgICAgYXR0cmlidXRlIEZpbGVMaXN0Q29uc3RydWN0b3IgRmlsZUxpc3Q7CiAgICAg
YXR0cmlidXRlIEJsb2JDb25zdHJ1Y3RvciBCbG9iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195972</attachid>
            <date>2013-04-01 08:22:24 -0700</date>
            <delta_ts>2013-04-01 08:22:24 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>113571_DOMFuture.patch</filename>
            <type>text/plain</type>
            <size>68487</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWJhc2ljLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWJhc2ljLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWUzOTY5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtYmFz
aWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0NoZWNrcyBiYXNpYyBpbnRlcmZhY2Ug
b2YgRnV0dXJlIGFuZCBGdXR1cmVSZXNvbHZlciBvYmplY3RzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyB0eXBlb2YgcmVzb2x2ZXIgaXMgIm9iamVjdCIKK1BBU1MgdHlw
ZW9mIHJlc29sdmVyLnJlc29sdmUgaXMgImZ1bmN0aW9uIgorUEFTUyByZXNvbHZlci5yZXNvbHZl
Lmxlbmd0aCBpcyAxCitQQVNTIHR5cGVvZiByZXNvbHZlci5yZWplY3QgaXMgImZ1bmN0aW9uIgor
UEFTUyByZXNvbHZlci5yZWplY3QubGVuZ3RoIGlzIDEKK1BBU1MgdHlwZW9mIHJlc29sdmVyLmlz
UmVzb2x2ZWQgaXMgImJvb2xlYW4iCitQQVNTIHR5cGVvZiBmdXR1cmUgaXMgIm9iamVjdCIKK1BB
U1MgZnV0dXJlIGlzIGFuIGluc3RhbmNlIG9mIEZ1dHVyZQorUEFTUyB0eXBlb2YgZnV0dXJlLnRo
ZW4gaXMgImZ1bmN0aW9uIgorUEFTUyBmdXR1cmUudGhlbi5sZW5ndGggaXMgMgorUEFTUyB0eXBl
b2YgZnV0dXJlLmNhdGNoIGlzICJmdW5jdGlvbiIKK1BBU1MgZnV0dXJlLmNhdGNoLmxlbmd0aCBp
cyAxCitQQVNTIHR5cGVvZiBmdXR1cmUuZG9uZSBpcyAiZnVuY3Rpb24iCitQQVNTIGZ1dHVyZS5k
b25lLmxlbmd0aCBpcyAyCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1
cmUtYmFzaWMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWJhc2lj
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUwYjJmMwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWJhc2ljLmh0
bWwKQEAgLTAsMCArMSw0NCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNrcyBiYXNpYyBpbnRlcmZhY2Ugb2YgRnV0dXJlIGFu
ZCBGdXR1cmVSZXNvbHZlciBvYmplY3RzLiIpOwordmFyIGZ1dHVyZTsKK3ZhciByZXNvbHZlcjsK
KworZnVuY3Rpb24gdmFsaWRhdGVSZXNvbHZlcihyKSB7CisgICAgcmVzb2x2ZXIgPSByOworICAg
IHNob3VsZEJlKCJ0eXBlb2YgcmVzb2x2ZXIiLCAnIm9iamVjdCInKTsKKyAgICBzaG91bGRCZSgi
dHlwZW9mIHJlc29sdmVyLnJlc29sdmUiLCAnImZ1bmN0aW9uIicpOworICAgIHNob3VsZEJlKCJy
ZXNvbHZlci5yZXNvbHZlLmxlbmd0aCIsICIxIik7CisgICAgc2hvdWxkQmUoInR5cGVvZiByZXNv
bHZlci5yZWplY3QiLCAnImZ1bmN0aW9uIicpOworICAgIHNob3VsZEJlKCJyZXNvbHZlci5yZWpl
Y3QubGVuZ3RoIiwgIjEiKTsKKyAgICBzaG91bGRCZSgidHlwZW9mIHJlc29sdmVyLmlzUmVzb2x2
ZWQiLCAnImJvb2xlYW4iJyk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgdHJ5IHsK
KyAgICAgICAgZnV0dXJlID0gbmV3IEZ1dHVyZSh2YWxpZGF0ZVJlc29sdmVyKTsKKyAgICAgICAg
c2hvdWxkQmUoInR5cGVvZiBmdXR1cmUiLCAnIm9iamVjdCInKTsKKyAgICAgICAgc2hvdWxkQmVU
eXBlKCJmdXR1cmUiLCAiRnV0dXJlIik7CisgICAgICAgIHNob3VsZEJlKCJ0eXBlb2YgZnV0dXJl
LnRoZW4iLCAnImZ1bmN0aW9uIicpOworICAgICAgICBzaG91bGRCZSgiZnV0dXJlLnRoZW4ubGVu
Z3RoIiwgIjIiKTsKKyAgICAgICAgc2hvdWxkQmUoInR5cGVvZiBmdXR1cmUuY2F0Y2giLCAnImZ1
bmN0aW9uIicpOworICAgICAgICBzaG91bGRCZSgiZnV0dXJlLmNhdGNoLmxlbmd0aCIsICIxIik7
CisgICAgICAgIHNob3VsZEJlKCJ0eXBlb2YgZnV0dXJlLmRvbmUiLCAnImZ1bmN0aW9uIicpOwor
ICAgICAgICBzaG91bGRCZSgiZnV0dXJlLmRvbmUubGVuZ3RoIiwgIjIiKTsKKyAgICB9IGNhdGNo
IChleCkgeworICAgICAgICBsb2coIkZBSUw6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uICgiICsgZXgg
KyAiKSB0aHJvd24gd2hlbiBjcmVhdGluZyBmdXR1cmUiKTsKKyAgICB9Cit9CisKK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworcnVuVGVzdCgp
OworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1jYXRjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1jYXRjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5ZWFmOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWNhdGNoLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDEzIEBACitDaGVja3MgdGhhdCBjYXRjaCgpIHdvcmtzIGNvcnJlY3RseS4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcmVzb2x2ZXIuaXNSZXNvbHZlZCBpcyBmYWxz
ZQorUEFTUyByZXNvbHZlci5pc1Jlc29sdmVkIGlzIHRydWUKK1BBU1MgcmVzdWx0IGlzICdFUlJP
UicKK1BBU1MgcmVzdWx0IGlzICdUZXN0RXJyb3InCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vZnV0dXJlcy9mdXR1cmUtY2F0Y2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVy
ZXMvZnV0dXJlLWNhdGNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YjQ3YTg1NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMv
ZnV0dXJlLWNhdGNoLmh0bWwKQEAgLTAsMCArMSw0NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNrcyB0aGF0IGNhdGNoKCkg
d29ya3MgY29ycmVjdGx5LiIpOwordmFyIGZ1dHVyZTsKK3ZhciByZXNvbHZlcjsKK3ZhciByZXNv
bHZlZCA9IGZhbHNlOwordmFyIHJlc3VsdDsKKworZnVuY3Rpb24gbG9nRXJyb3IoKQoreworICAg
IGRlYnVnKCJGQUlMOiBzdWNjZXNzIGNhbGxiYWNrIHNob3VsZCBub3QgYmUgY2FsbGVkLiIpOwor
ICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGZ1dHVy
ZSA9IG5ldyBGdXR1cmUoZnVuY3Rpb24ocikgeworICAgICAgICByZXNvbHZlciA9IHI7CisgICAg
ICAgIHNob3VsZEJlRmFsc2UoInJlc29sdmVyLmlzUmVzb2x2ZWQiKTsKKyAgICAgICAgci5yZWpl
Y3QoIkVSUk9SIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicmVzb2x2ZXIuaXNSZXNvbHZlZCIp
OworICAgIH0pOworICAgIGZ1dHVyZS50aGVuKGxvZ0Vycm9yLCBmdW5jdGlvbihlcnJvcikgewor
ICAgICAgICByZXN1bHQgPSBlcnJvcjsKKyAgICAgICAgc2hvdWxkQmUoInJlc3VsdCIsICInRVJS
T1InIik7CisgICAgICAgIHRocm93ICJUZXN0RXJyb3IiOworICAgIH0pLmNhdGNoKGZ1bmN0aW9u
KGVycm9yKSB7CisgICAgICAgIHJlc3VsdCA9IGVycm9yOworICAgICAgICBzaG91bGRCZSgicmVz
dWx0IiwgIidUZXN0RXJyb3InIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOwor
fQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisKK3J1blRlc3QoKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0
dXJlcy9mdXR1cmUtZGVsYXllZC1kZWxpdmVyeS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1kZWxheWVkLWRlbGl2ZXJ5LWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODIyNzNlCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtZGVsYXllZC1kZWxpdmVyeS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorQ2hlY2tzIHRoYXQgZGVsaXZlcnkgaXMgZGVs
YXllZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcmVzb2x2ZWQgaXMg
ZmFsc2UKK1BBU1MgcmVzb2x2ZXIuaXNSZXNvbHZlZCBpcyBmYWxzZQorUEFTUyByZXNvbHZlci5p
c1Jlc29sdmVkIGlzIHRydWUKK1BBU1MgcmVzdWx0IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1kZWxheWVkLWRlbGl2ZXJ5Lmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1kZWxheWVkLWRlbGl2ZXJ5Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxMjcxNwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWRlbGF5ZWQtZGVsaXZlcnkuaHRt
bApAQCAtMCwwICsxLDM2IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbigiQ2hlY2tzIHRoYXQgZGVsaXZlcnkgaXMgZGVsYXllZC4iKTsK
K3ZhciBmdXR1cmU7Cit2YXIgcmVzb2x2ZXI7Cit2YXIgcmVzb2x2ZWQgPSBmYWxzZTsKK3ZhciBy
ZXN1bHQ7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgZnV0dXJlID0gbmV3IEZ1dHVyZShm
dW5jdGlvbihyKSB7IHJlc29sdmVyID0gcjsgfSk7CisgICAgZnV0dXJlLnRoZW4oZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgICAgcmVzb2x2ZWQgPSB0cnVlOworICAgICAgICByZXN1bHQgPSB2YWx1
ZTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJyZXN1bHQiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0
KCk7CisgICAgfSk7CisKKyAgICBzaG91bGRCZUZhbHNlKCJyZXNvbHZlZCIpOworICAgIHNob3Vs
ZEJlRmFsc2UoInJlc29sdmVyLmlzUmVzb2x2ZWQiKTsKKyAgICByZXNvbHZlci5yZXNvbHZlKHRy
dWUpOworICAgIHNob3VsZEJlVHJ1ZSgicmVzb2x2ZXIuaXNSZXNvbHZlZCIpOworfQorCitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK3J1blRl
c3QoKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1
cmUtZXJyb3ItZm9yd2FyZGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9m
dXR1cmVzL2Z1dHVyZS1lcnJvci1mb3J3YXJkaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIxOWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtZXJyb3ItZm9yd2FyZGluZy1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMyBAQAorQ2hlY2tzIHRoYXQgZXJyb3JzIGZvcndhcmQgY29ycmVjdGx5
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyByZXNvbHZlci5pc1Jlc29s
dmVkIGlzIGZhbHNlCitQQVNTIHJlc29sdmVyLmlzUmVzb2x2ZWQgaXMgdHJ1ZQorUEFTUyByZXN1
bHQgaXMgJ0VSUk9SJworUEFTUyByZXN1bHQgaXMgJ1Rlc3RFcnJvcicKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1lcnJvci1mb3J3YXJkaW5nLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1lcnJvci1mb3J3YXJkaW5nLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4NjA2ZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWVycm9yLWZvcndhcmRpbmcu
aHRtbApAQCAtMCwwICsxLDQ1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiQ2hlY2tzIHRoYXQgZXJyb3JzIGZvcndhcmQgY29ycmVj
dGx5LiIpOwordmFyIGZ1dHVyZTsKK3ZhciByZXNvbHZlcjsKK3ZhciByZXNvbHZlZCA9IGZhbHNl
OwordmFyIHJlc3VsdDsKKworZnVuY3Rpb24gbG9nRXJyb3IoKQoreworICAgIGRlYnVnKCJGQUlM
OiBzdWNjZXNzIGNhbGxiYWNrIHNob3VsZCBub3QgYmUgY2FsbGVkLiIpOworICAgIGZpbmlzaEpT
VGVzdCgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGZ1dHVyZSA9IG5ldyBGdXR1
cmUoZnVuY3Rpb24ocikgeworICAgICAgICByZXNvbHZlciA9IHI7CisgICAgICAgIHNob3VsZEJl
RmFsc2UoInJlc29sdmVyLmlzUmVzb2x2ZWQiKTsKKyAgICAgICAgci5yZWplY3QoIkVSUk9SIik7
CisgICAgICAgIHNob3VsZEJlVHJ1ZSgicmVzb2x2ZXIuaXNSZXNvbHZlZCIpOworICAgIH0pOwor
ICAgIGZ1dHVyZS50aGVuKGxvZ0Vycm9yLCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICByZXN1
bHQgPSBlcnJvcjsKKyAgICAgICAgc2hvdWxkQmUoInJlc3VsdCIsICInRVJST1InIik7CisgICAg
ICAgIHRocm93ICJUZXN0RXJyb3IiOworICAgIH0pLmRvbmUobG9nRXJyb3IsIGZ1bmN0aW9uKGVy
cm9yKSB7CisgICAgICAgIHJlc3VsdCA9IGVycm9yOworICAgICAgICBzaG91bGRCZSgicmVzdWx0
IiwgIidUZXN0RXJyb3InIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0pOworfQor
CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisK
K3J1blRlc3QoKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJl
cy9mdXR1cmUtZXhjZXB0aW9uLWluLWluaXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vZnV0dXJlcy9mdXR1cmUtZXhjZXB0aW9uLWluLWluaXQtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyODg1MWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1leGNlcHRpb24taW4taW5pdC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorQ2hlY2tzIHRoYXQgY2F0Y2goKSBpcyBjYWxs
ZWQgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIGluaXQuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHJlc3VsdCBpcyAnVGVzdEVycm9yJworUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLWV4Y2VwdGlvbi1pbi1pbml0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1leGNlcHRpb24taW4taW5pdC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzFjNmQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1leGNlcHRpb24taW4t
aW5pdC5odG1sCkBAIC0wLDAgKzEsMzAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJDaGVja3MgdGhhdCBjYXRjaCgpIGlzIGNhbGxl
ZCB3aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaW4gaW5pdC4iKTsKK3ZhciBmdXR1cmU7Cit2
YXIgcmVzdWx0OworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGZ1dHVyZSA9IG5ldyBGdXR1
cmUoZnVuY3Rpb24ocikgeworICAgICAgICB0aHJvdyAiVGVzdEVycm9yIjsKKyAgICB9KTsKKyAg
ICBmdXR1cmUuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgcmVzdWx0ID0gZXJyb3I7
CisgICAgICAgIHNob3VsZEJlKCJyZXN1bHQiLCAiJ1Rlc3RFcnJvciciKTsKKyAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgfSk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworcnVuVGVzdCgpOword2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1yZXNvbHZlLWZvcndhcmRzLW5vbi1m
dXR1cmUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUt
cmVzb2x2ZS1mb3J3YXJkcy1ub24tZnV0dXJlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mZWMxMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtcmVzb2x2ZS1mb3J3YXJkcy1ub24tZnV0dXJlLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitDaGVja3MgdGhhdCByZXNvbHZlIGRvZXMgbm90
IGZvcndhcmQgbm9uIGZ1dHVyZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIHR5cGVvZiByZXN1bHQgaXMgIm9iamVjdCIKK1BBU1MgcmVzdWx0IGlzIGFuIGluc3RhbmNl
IG9mIEVycm9yCitQQVNTIHJlc3VsdC50b1N0cmluZygpIGlzICdFcnJvcjogc3ludGhldGljJwor
UEFTUyByZXN1bHQgaXMgc3ludGhldGljRXJyb3IKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9mdXR1cmVzL2Z1dHVyZS1yZXNvbHZlLWZvcndhcmRzLW5vbi1mdXR1cmUuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMtbm9uLWZ1dHVy
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjY5YzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1yZXNvbHZl
LWZvcndhcmRzLW5vbi1mdXR1cmUuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiQ2hlY2tzIHRoYXQg
cmVzb2x2ZSBkb2VzIG5vdCBmb3J3YXJkIG5vbiBmdXR1cmVzLiIpOwordmFyIHJlc3VsdDsKK3Zh
ciBzeW50aGV0aWNFcnJvciA9IG5ldyBFcnJvcigic3ludGhldGljIik7CisKK2Z1bmN0aW9uIGxv
Z0Vycm9yKCkKK3sKKyAgICBkZWJ1ZygiRkFJTDogZXJyb3IgY2FsbGJhY2sgc2hvdWxkIG5vdCBi
ZSBjYWxsZWQuIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICAgdmFyIGYxID0gbmV3IEZ1dHVyZShmdW5jdGlvbihyKSB7CisgICAgICByLnJlc29s
dmUoc3ludGhldGljRXJyb3IpOworICAgIH0pOworICAgIHZhciBmMiA9IG5ldyBGdXR1cmUoZnVu
Y3Rpb24ocikgeworICAgICAgci5yZXNvbHZlKGYxKTsKKyAgICB9KTsKKyAgICBmMi5kb25lKAor
ICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVzdWx0ID0gdmFsdWU7CisgICAgICAg
IHNob3VsZEJlKCJ0eXBlb2YgcmVzdWx0IiwgJyJvYmplY3QiJyk7CisgICAgICAgIHNob3VsZEJl
VHlwZSgicmVzdWx0IiwgIkVycm9yIik7CisgICAgICAgIHNob3VsZEJlKCJyZXN1bHQudG9TdHJp
bmcoKSIsICInRXJyb3I6IHN5bnRoZXRpYyciKTsKKyAgICAgICAgc2hvdWxkQmUoInJlc3VsdCIs
ICJzeW50aGV0aWNFcnJvciIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgIH0sCisg
ICAgICBsb2dFcnJvcgorICAgICk7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworcnVuVGVzdCgpOword2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVyZS1yZXNvbHZlLWZvcndhcmRzLXRocm91
Z2gtdGhlbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVy
ZS1yZXNvbHZlLWZvcndhcmRzLXRocm91Z2gtdGhlbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3YTdmMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMtdGhyb3VnaC10
aGVuLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitDaGVja3MgdGhhdCByZXNvbHZlIGNv
cnJlY3RseSBmb3J3YXJkcyB0aHJvdWdoIHRoZW4oKS4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgdHlwZW9mIHJlc3VsdCBpcyAib2JqZWN0IgorUEFTUyByZXN1bHQgaXMg
YW4gaW5zdGFuY2Ugb2YgRXJyb3IKK1BBU1MgcmVzdWx0LnRvU3RyaW5nKCkgaXMgJ0Vycm9yOiBz
eW50aGV0aWMnCitQQVNTIHJlc3VsdCBpcyBzeW50aGV0aWNFcnJvcgorUEFTUyByZXN1bHQgaXMg
J3NvbWUgb3RoZXIgdmFsdWUnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9m
dXR1cmUtcmVzb2x2ZS1mb3J3YXJkcy10aHJvdWdoLXRoZW4uaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMtdGhyb3VnaC10aGVuLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyOWQ1OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2Fy
ZHMtdGhyb3VnaC10aGVuLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNrcyB0aGF0IHJlc29s
dmUgY29ycmVjdGx5IGZvcndhcmRzIHRocm91Z2ggdGhlbigpLiIpOwordmFyIHJlc3VsdDsKK3Zh
ciBzeW50aGV0aWNFcnJvciA9IG5ldyBFcnJvcigic3ludGhldGljIik7CisKK2Z1bmN0aW9uIGxv
Z0Vycm9yKCkKK3sKKyAgICBkZWJ1ZygiRkFJTDogZXJyb3IgY2FsbGJhY2sgc2hvdWxkIG5vdCBi
ZSBjYWxsZWQuIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICAgdmFyIGYxID0gbmV3IEZ1dHVyZShmdW5jdGlvbihyKSB7CisgICAgICByLnJlc29s
dmUoc3ludGhldGljRXJyb3IpOworICAgIH0pOworICAgIHZhciBmMiA9IG5ldyBGdXR1cmUoZnVu
Y3Rpb24ocikgeworICAgICAgci5yZXNvbHZlKGYxKTsKKyAgICB9KTsKKyAgICB2YXIgZjMgPSBm
Mi50aGVuKAorICAgICAgZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgICAgcmVzdWx0ID0gdmFsdWU7
CisgICAgICAgIHNob3VsZEJlKCJ0eXBlb2YgcmVzdWx0IiwgJyJvYmplY3QiJyk7CisgICAgICAg
IHNob3VsZEJlVHlwZSgicmVzdWx0IiwgIkVycm9yIik7CisgICAgICAgIHNob3VsZEJlKCJyZXN1
bHQudG9TdHJpbmcoKSIsICInRXJyb3I6IHN5bnRoZXRpYyciKTsKKyAgICAgICAgc2hvdWxkQmUo
InJlc3VsdCIsICJzeW50aGV0aWNFcnJvciIpOworICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZShm
dW5jdGlvbihyKSB7CisgICAgICAgICAgci5yZXNvbHZlKCJzb21lIG90aGVyIHZhbHVlIik7Cisg
ICAgICAgIH0pOworICAgICAgfSwKKyAgICAgIGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGU7IH0KKyAg
ICApOworICAgIGYzLmRvbmUoCisgICAgICBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgICByZXN1
bHQgPSB2YWx1ZTsKKyAgICAgICAgc2hvdWxkQmUoInJlc3VsdCIsICInc29tZSBvdGhlciB2YWx1
ZSciKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICB9LAorICAgICAgbG9nRXJyb3IK
KyAgICApOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7CisKK3J1blRlc3QoKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vZnV0dXJlcy9mdXR1cmUtcmVzb2x2ZS1mb3J3YXJkcy12YWx1ZXMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtcmVzb2x2ZS1mb3J3YXJkcy12
YWx1ZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUz
N2I5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1
dHVyZS1yZXNvbHZlLWZvcndhcmRzLXZhbHVlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBA
QAorQ2hlY2tzIHRoYXQgcmVzb2x2ZSBmb3J3YXJkcyB2YWx1ZXMgY29ycmVjdGx5LgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB0eXBlb2YgcmVzdWx0IGlzICJvYmplY3Qi
CitQQVNTIHJlc3VsdCBpcyBhbiBpbnN0YW5jZSBvZiBFcnJvcgorUEFTUyByZXN1bHQudG9TdHJp
bmcoKSBpcyAnRXJyb3I6IHN5bnRoZXRpYycKK1BBU1MgcmVzdWx0IGlzIHN5bnRoZXRpY0Vycm9y
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtcmVzb2x2ZS1mb3J3
YXJkcy12YWx1ZXMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1dHVyZXMvZnV0dXJlLXJl
c29sdmUtZm9yd2FyZHMtdmFsdWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNmMyMmFiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2Z1
dHVyZXMvZnV0dXJlLXJlc29sdmUtZm9yd2FyZHMtdmFsdWVzLmh0bWwKQEAgLTAsMCArMSw0NSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIkNoZWNrcyB0aGF0IHJlc29sdmUgZm9yd2FyZHMgdmFsdWVzIGNvcnJlY3RseS4iKTsKK3Zh
ciByZXN1bHQ7Cit2YXIgc3ludGhldGljRXJyb3IgPSBuZXcgRXJyb3IoInN5bnRoZXRpYyIpOwor
CitmdW5jdGlvbiBsb2dFcnJvcigpCit7CisgICAgZGVidWcoIkZBSUw6IGVycm9yIGNhbGxiYWNr
IHNob3VsZCBub3QgYmUgY2FsbGVkLiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitmdW5j
dGlvbiBydW5UZXN0KCkgeworICAgIHZhciBmMSA9IG5ldyBGdXR1cmUoZnVuY3Rpb24ocikgewor
ICAgICAgci5yZXNvbHZlKHN5bnRoZXRpY0Vycm9yKTsKKyAgICB9KTsKKyAgICB2YXIgZjIgPSBu
ZXcgRnV0dXJlKGZ1bmN0aW9uKHIpIHsKKyAgICAgIHIucmVzb2x2ZShmMSk7CisgICAgfSk7Cisg
ICAgZjIuZG9uZSgKKyAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJlc3VsdCA9IHZh
bHVlOworICAgICAgICBzaG91bGRCZSgidHlwZW9mIHJlc3VsdCIsICcib2JqZWN0IicpOworICAg
ICAgICBzaG91bGRCZVR5cGUoInJlc3VsdCIsICJFcnJvciIpOworICAgICAgICBzaG91bGRCZSgi
cmVzdWx0LnRvU3RyaW5nKCkiLCAiJ0Vycm9yOiBzeW50aGV0aWMnIik7CisgICAgICAgIHNob3Vs
ZEJlKCJyZXN1bHQiLCAic3ludGhldGljRXJyb3IiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgICB9LAorICAgICAgbG9nRXJyb3IKKyAgICApOworfQorCitpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK3J1blRlc3QoKTsKK3dpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJlcy9mdXR1cmUtdmFsdWUtZm9y
d2FyZGluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9mdXR1cmVzL2Z1dHVy
ZS12YWx1ZS1mb3J3YXJkaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41OGM5ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vZnV0dXJlcy9mdXR1cmUtdmFsdWUtZm9yd2FyZGluZy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMyBAQAorQ2hlY2tzIHRoYXQgdmFsdWVzIGZvcndhcmQgY29ycmVjdGx5LgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyByZXNvbHZlci5pc1Jlc29sdmVkIGlzIGZhbHNl
CitQQVNTIHJlc29sdmVyLmlzUmVzb2x2ZWQgaXMgdHJ1ZQorUEFTUyByZXN1bHQgaXMgJ09LJwor
UEFTUyByZXN1bHQgaXMgJ0RPTkUnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0dXJl
cy9mdXR1cmUtdmFsdWUtZm9yd2FyZGluZy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZnV0
dXJlcy9mdXR1cmUtdmFsdWUtZm9yd2FyZGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjI0ZDVlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9mdXR1cmVzL2Z1dHVyZS12YWx1ZS1mb3J3YXJkaW5nLmh0bWwKQEAgLTAsMCArMSw0NSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIkNoZWNrcyB0aGF0IHZhbHVlcyBmb3J3YXJkIGNvcnJlY3RseS4iKTsKK3ZhciBmdXR1cmU7
Cit2YXIgcmVzb2x2ZXI7Cit2YXIgcmVzb2x2ZWQgPSBmYWxzZTsKK3ZhciByZXN1bHQ7CisKK2Z1
bmN0aW9uIGxvZ0Vycm9yKCkKK3sKKyAgICBkZWJ1ZygiRkFJTDogZXJyb3IgY2FsbGJhY2sgc2hv
dWxkIG5vdCBiZSBjYWxsZWQuIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgZnV0dXJlID0gbmV3IEZ1dHVyZShmdW5jdGlvbihyKSB7CisgICAg
ICAgIHJlc29sdmVyID0gcjsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgicmVzb2x2ZXIuaXNSZXNv
bHZlZCIpOworICAgICAgICByLnJlc29sdmUoIk9LIik7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgi
cmVzb2x2ZXIuaXNSZXNvbHZlZCIpOworICAgIH0pOworICAgIGZ1dHVyZS50aGVuKGZ1bmN0aW9u
KHZhbHVlKSB7CisgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICAgIHNob3VsZEJlKCJyZXN1bHQi
LCAiJ09LJyIpOworICAgICAgcmV0dXJuICJET05FIjsKKyAgICB9LCBsb2dFcnJvcikuZG9uZShm
dW5jdGlvbih2YWx1ZSkgeworICAgICAgcmVzdWx0ID0gdmFsdWU7CisgICAgICBzaG91bGRCZSgi
cmVzdWx0IiwgIidET05FJyIpOworICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgbG9nRXJy
b3IpOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7CisKK3J1blRlc3QoKTsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzOWIwMDM4
Li4wZDkxZWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMzMxLDYgKzMzMSw3IEBAIHNldChX
ZWJDb3JlX0lETF9GSUxFUwogICAgIGNzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwKICAg
ICBjc3MvV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmlkbAogCisgICAgZG9tL0FueUNhbGxiYWNrLmlk
bAogICAgIGRvbS9BdHRyLmlkbAogICAgIGRvbS9CZWZvcmVMb2FkRXZlbnQuaWRsCiAgICAgZG9t
L0NEQVRBU2VjdGlvbi5pZGwKQEAgLTM2MSw2ICszNjIsOSBAQCBzZXQoV2ViQ29yZV9JRExfRklM
RVMKICAgICBkb20vRXZlbnQuaWRsCiAgICAgZG9tL0V2ZW50VGFyZ2V0LmlkbAogICAgIGRvbS9G
b2N1c0V2ZW50LmlkbAorICAgIGRvbS9GdXR1cmUuaWRsCisgICAgZG9tL0Z1dHVyZUluaXQuaWRs
CisgICAgZG9tL0Z1dHVyZVJlc29sdmVyLmlkbAogICAgIGRvbS9IYXNoQ2hhbmdlRXZlbnQuaWRs
CiAgICAgZG9tL0tleWJvYXJkRXZlbnQuaWRsCiAgICAgZG9tL01lc3NhZ2VDaGFubmVsLmlkbApA
QCAtMTExOCw2ICsxMTIyLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9XZWJLaXRD
U1NWaWV3cG9ydFJ1bGUuY3BwCiAKICAgICBkb20vQWN0aXZlRE9NT2JqZWN0LmNwcAorICAgIGRv
bS9BbnlDYWxsYmFjay5jcHAKICAgICBkb20vQXR0ci5jcHAKICAgICBkb20vQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQuY3BwCiAgICAgZG9tL0JlZm9yZVVubG9hZEV2ZW50LmNwcApAQCAtMTE4Miw2
ICsxMTg3LDEwIEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBkb20vRXhjZXB0aW9uQmFzZS5j
cHAKICAgICBkb20vRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmNwcAogICAgIGRvbS9Gb2N1c0V2
ZW50LmNwcAorICAgIGRvbS9GdXR1cmUuY3BwCisgICAgZG9tL0Z1dHVyZUhhbmRsZXIuY3BwCisg
ICAgZG9tL0Z1dHVyZUluaXQuY3BwCisgICAgZG9tL0Z1dHVyZVJlc29sdmVyLmNwcAogICAgIGRv
bS9HZW5lcmljRXZlbnRRdWV1ZS5jcHAKICAgICBkb20vR2VzdHVyZUV2ZW50LmNwcAogICAgIGRv
bS9JY29uVVJMLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCmluZGV4IDg0NTRhNWEuLjUxZTIzNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9V
c2VKU0MuY21ha2UKQEAgLTI1LDEwICsyNSwxMiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBiaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAogICAgIGJpbmRpbmdzL2pzL0JpbmRp
bmdTdGF0ZS5jcHAKICAgICBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcAorICAgIGJp
bmRpbmdzL2pzL0RPTUZ1dHVyZXNCaW5kaW5nVXRpbGl0aWVzLmNwcAogICAgIGJpbmRpbmdzL2pz
L0RPTU9iamVjdEhhc2hUYWJsZU1hcC5jcHAKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29y
bGQuY3BwCiAgICAgYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKICAgICBiaW5kaW5ncy9qcy9H
Q0NvbnRyb2xsZXIuY3BwCisgICAgYmluZGluZ3MvanMvSlNBbnlDYWxsYmFja0N1c3RvbS5jcHAK
ICAgICBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTQXR0ckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCkBAIC03
Niw2ICs3OCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pz
L0pTRXZlbnRMaXN0ZW5lci5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFzZS5jcHAKKyAgICBiaW5kaW5ncy9q
cy9KU0Z1dHVyZUluaXRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1
c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAog
ICAgIGJpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20uY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01GdXR1cmVzQmluZGluZ1V0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01GdXR1cmVzQmluZGluZ1V0aWxpdGll
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjZjE0MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUZ1dHVyZXNCaW5kaW5n
VXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJET01GdXR1cmVzQmluZGluZ1V0aWxpdGllcy5o
IgorCisjaW5jbHVkZSAiRnV0dXJlLmgiCisjaW5jbHVkZSAiSlNGdXR1cmUuaCIKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGdXR1cmUqIHNjcmlwdFZh
bHVlVG9GdXR1cmUoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiB0b0Z1
dHVyZSh2YWx1ZS5qc1ZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01GdXR1cmVzQmluZGluZ1V0aWxp
dGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NRnV0dXJlc0JpbmRpbmdVdGls
aXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmI0Y2ZlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NRnV0dXJlc0JpbmRp
bmdVdGlsaXRpZXMuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXNfaAorI2RlZmluZSBET01GdXR1cmVzQmlu
ZGluZ1V0aWxpdGllc19oCisKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRnV0dXJlOworCitG
dXR1cmUqIHNjcmlwdFZhbHVlVG9GdXR1cmUoY29uc3QgU2NyaXB0VmFsdWUmKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRE9NRnV0dXJlc0JpbmRpbmdVdGlsaXRpZXNf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBbnlDYWxsYmFja0N1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FueUNhbGxiYWNrQ3VzdG9t
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTYzMGNmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBbnlDYWxsYmFja0N1c3Rv
bS5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNBbnlDYWxsYmFjay5oIgorCisjaW5jbHVkZSAiQW55Q2Fs
bGJhY2suaCIKKyNpbmNsdWRlICJKU0NhbGxiYWNrRGF0YS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NjcmlwdFZhbHVlIEpTQW55Q2FsbGJh
Y2s6OmhhbmRsZUV2ZW50KFNjcmlwdFZhbHVlIGRhdGEpCit7CisgICAgaWYgKCFjYW5JbnZva2VD
YWxsYmFjaygpKQorICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKworICAgIFJlZlB0cjxK
U0FueUNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9k
YXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKworICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKGRhdGEuanNWYWx1ZSgpKTsKKworICAg
IGJvb2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgSlNWYWx1ZSBleGNlcHRpb247Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRF
eGNlcHRpb24sICZleGNlcHRpb24sICBzaG91bGRSZXBvcnRFeGNlcHRpb25zKCkgPyBKU0NhbGxi
YWNrRGF0YTo6VGhyb3dpbmcgOiBKU0NhbGxiYWNrRGF0YTo6Tm9uVGhyb3dpbmcpOworICAgIG1f
ZXhjZXB0aW9uID0gcmFpc2VkRXhjZXB0aW9uID8gU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGNlcHRpb24pIDogU2NyaXB0VmFsdWUoKTsKKworICAgIHJldHVybiBTY3JpcHRWYWx1
ZShleGVjLT5nbG9iYWxEYXRhKCksIHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAppbmRl
eCBhYTMwZGU3Li43MzdiM2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbGxiYWNrRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
YWxsYmFja0RhdGEuY3BwCkBAIC00MiwxMyArNDIsMTMgQEAgdm9pZCBKU0NhbGxiYWNrRGF0YTo6
ZGVsZXRlRGF0YSh2b2lkKiBjb250ZXh0KQogICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxKU0NhbGxi
YWNrRGF0YSo+KGNvbnRleHQpOwogfQogCi1KU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VD
YWxsYmFjayhNYXJrZWRBcmd1bWVudEJ1ZmZlciYgYXJncywgYm9vbCogcmFpc2VkRXhjZXB0aW9u
KQorSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soTWFya2VkQXJndW1lbnRC
dWZmZXImIGFyZ3MsIGJvb2wqIHJhaXNlZEV4Y2VwdGlvbiwgSlNWYWx1ZSogZXhjZXB0aW9uLCBD
YWxsYmFja0Vycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCiB7CiAgICAgQVNTRVJUKGNhbGxiYWNr
KCkpOwotICAgIHJldHVybiBpbnZva2VDYWxsYmFjayhjYWxsYmFjaygpLCBhcmdzLCByYWlzZWRF
eGNlcHRpb24pOworICAgIHJldHVybiBpbnZva2VDYWxsYmFjayhjYWxsYmFjaygpLCBhcmdzLCBy
YWlzZWRFeGNlcHRpb24sIGV4Y2VwdGlvbiwgdGhyb3dFeGNlcHRpb25zKTsKIH0KIAotSlNWYWx1
ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSlNWYWx1ZSB0aGlzVmFsdWUsIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyJiBhcmdzLCBib29sKiByYWlzZWRFeGNlcHRpb24pCitKU1ZhbHVlIEpT
Q2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKU1ZhbHVlIHRoaXNWYWx1ZSwgTWFya2VkQXJn
dW1lbnRCdWZmZXImIGFyZ3MsIGJvb2wqIHJhaXNlZEV4Y2VwdGlvbiwgSlNWYWx1ZSogZXhjZXB0
aW9uLCBDYWxsYmFja0Vycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCiB7CiAgICAgQVNTRVJUKGNh
bGxiYWNrKCkpOwogICAgIEFTU0VSVChnbG9iYWxPYmplY3QoKSk7CkBAIC04NSw5ICs4NSwxNSBA
QCBKU1ZhbHVlIEpTQ2FsbGJhY2tEYXRhOjppbnZva2VDYWxsYmFjayhKU1ZhbHVlIHRoaXNWYWx1
ZSwgTWFya2VkQXJndW1lbnRCdWZmZXImCiAgICAgICAgIERvY3VtZW50Ojp1cGRhdGVTdHlsZUZv
ckFsbERvY3VtZW50cygpOwogCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CiAgICAgICAgIGlmIChyYWlzZWRFeGNl
cHRpb24pCiAgICAgICAgICAgICAqcmFpc2VkRXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAgaWYg
KGV4Y2VwdGlvbikKKyAgICAgICAgICAgICpleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsK
KyAgICAgICAgaWYgKHRocm93RXhjZXB0aW9ucyA9PSBUaHJvd2luZykKKyAgICAgICAgICAgIHJl
cG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5oCmluZGV4IDczOGQw
ZWEuLjlkOWY3N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fs
bGJhY2tEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYWxsYmFja0Rh
dGEuaApAQCAtNDUsNyArNDUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBKU0Nh
bGxiYWNrRGF0YSB7CiBwdWJsaWM6CisgICAgZW51bSBDYWxsYmFja0Vycm9yTW9kZSB7IE5vblRo
cm93aW5nLCBUaHJvd2luZyB9OworCiAgICAgc3RhdGljIHZvaWQgZGVsZXRlRGF0YSh2b2lkKik7
CisgICAgZW51bSBFeGNlcHRpb25zQmVoYXZpb3IgeyBSZXBvcnRFeGNlcHRpb25zLCBEb05vdFJl
cG9ydEV4Y2VwdGlvbnMgfTsKIAogICAgIEpTQ2FsbGJhY2tEYXRhKEpTQzo6SlNPYmplY3QqIGNh
bGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICA6IG1fY2Fs
bGJhY2soZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGNhbGxiYWNrKQpAQCAtNjQsOCArNjcs
OCBAQCBwdWJsaWM6CiAgICAgSlNDOjpKU09iamVjdCogY2FsbGJhY2soKSB7IHJldHVybiBtX2Nh
bGxiYWNrLmdldCgpOyB9CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIHsg
cmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgCi0gICAgSlNDOjpKU1ZhbHVlIGlu
dm9rZUNhbGxiYWNrKEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXImLCBib29sKiByYWlzZWRFeGNl
cHRpb24gPSAwKTsKLSAgICBKU0M6OkpTVmFsdWUgaW52b2tlQ2FsbGJhY2soSlNDOjpKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciYsIGJvb2wqIHJhaXNlZEV4Y2Vw
dGlvbiA9IDApOworICAgIEpTQzo6SlNWYWx1ZSBpbnZva2VDYWxsYmFjayhKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyJiwgYm9vbCogcmFpc2VkRXhjZXB0aW9uID0gMCwgSlNDOjpKU1ZhbHVlKiBl
eGNlcHRpb24gPSAwLCBDYWxsYmFja0Vycm9yTW9kZSA9IFRocm93aW5nKTsKKyAgICBKU0M6OkpT
VmFsdWUgaW52b2tlQ2FsbGJhY2soSlNDOjpKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpNYXJrZWRB
cmd1bWVudEJ1ZmZlciYsIGJvb2wqIHJhaXNlZEV4Y2VwdGlvbiA9IDAsIEpTQzo6SlNWYWx1ZSog
ZXhjZXB0aW9uID0gMCwgQ2FsbGJhY2tFcnJvck1vZGUgPSBUaHJvd2luZyk7CiAKIHByaXZhdGU6
CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gbV9jYWxsYmFjazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRnV0dXJlSW5pdEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Z1dHVyZUluaXRDdXN0b20uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNzgzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Z1dHVyZUluaXRDdXN0b20uY3BwCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTRnV0dXJlSW5pdC5oIgorCisjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKKyNpbmNs
dWRlICJKU0Z1dHVyZVJlc29sdmVyLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0xvY2su
aD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IEpTRnV0dXJlSW5pdDo6aGFuZGxlRXZlbnQoRnV0dXJlUmVzb2x2ZXIqIHJlc29sdmVyKQorewor
ICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBSZWZQdHI8SlNGdXR1cmVJbml0PiBwcm90ZWN0KHRoaXMpOworCisgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpKTsKKworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgbV9k
YXRhLT5nbG9iYWxPYmplY3QoKSwgcmVzb2x2ZXIpKTsKKworICAgIGJvb2wgcmFpc2VkRXhjZXB0
aW9uID0gZmFsc2U7CisgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgbV9kYXRhLT5pbnZva2VD
YWxsYmFjayhhcmdzLCAmcmFpc2VkRXhjZXB0aW9uLCAmZXhjZXB0aW9uLCBzaG91bGRSZXBvcnRF
eGNlcHRpb25zKCkgPyBKU0NhbGxiYWNrRGF0YTo6VGhyb3dpbmcgOiBKU0NhbGxiYWNrRGF0YTo6
Tm9uVGhyb3dpbmcpOworICAgIG1fZXhjZXB0aW9uID0gcmFpc2VkRXhjZXB0aW9uID8gU2NyaXB0
VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGNlcHRpb24pIDogU2NyaXB0VmFsdWUoKTsKKwor
ICAgIHJldHVybiAhcmFpc2VkRXhjZXB0aW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQW55Q2FsbGJhY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0FueUNhbGxiYWNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40MzQ4ZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Fu
eUNhbGxiYWNrLmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBbnlDYWxsYmFjay5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0FueUNhbGxiYWNrOjpBbnlDYWxsYmFjaygpCisgICAgOiBtX3Rocm93RXhj
ZXB0aW9ucyhUaHJvd2luZykKK3sKK30KKworU2NyaXB0VmFsdWUgQW55Q2FsbGJhY2s6OmNhbGwo
Y29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBib29sKiBoYWRFeGNlcHRpb24sIFNjcmlwdFZhbHVl
KiBleGNlcHRpb24sIENhbGxiYWNrRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucykKK3sKKyAgICBt
X3Rocm93RXhjZXB0aW9ucyA9IHRocm93RXhjZXB0aW9uczsKKyAgICBTY3JpcHRWYWx1ZSByZXN1
bHQgPSBoYW5kbGVFdmVudCh2YWx1ZSk7CisgICAgaWYgKGhhZEV4Y2VwdGlvbikKKyAgICAgICAg
KmhhZEV4Y2VwdGlvbiA9ICFtX2V4Y2VwdGlvbi5oYXNOb1ZhbHVlKCk7CisgICAgaWYgKGV4Y2Vw
dGlvbikKKyAgICAgICAgKmV4Y2VwdGlvbiA9IG1fZXhjZXB0aW9uOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0FueUNhbGxiYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQW55Q2FsbGJhY2su
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmJhNjgwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0FueUNhbGxiYWNrLmgKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFueUNhbGxiYWNrX2gKKyNkZWZpbmUg
QW55Q2FsbGJhY2tfaAorCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgQW55Q2FsbGJh
Y2sgOiBwdWJsaWMgUmVmQ291bnRlZDxBbnlDYWxsYmFjaz4geworcHVibGljOgorICAgIGVudW0g
Q2FsbGJhY2tFcnJvck1vZGUgeyBOb25UaHJvd2luZywgVGhyb3dpbmcgfTsKKyAgICBBbnlDYWxs
YmFjaygpOworCisgICAgdmlydHVhbCB+QW55Q2FsbGJhY2soKSB7IH0KKyAgICBTY3JpcHRWYWx1
ZSBjYWxsKGNvbnN0IFNjcmlwdFZhbHVlJiwgYm9vbCogaGFkRXhjZXB0aW9uID0gMCwgU2NyaXB0
VmFsdWUqIGV4Y2VwdGlvbiA9IDAsIENhbGxiYWNrRXJyb3JNb2RlID0gVGhyb3dpbmcpOworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBTY3JpcHRWYWx1ZSBoYW5kbGVFdmVudChTY3JpcHRWYWx1
ZSkgPSAwOworICAgIGJvb2wgc2hvdWxkUmVwb3J0RXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fdGhyb3dFeGNlcHRpb25zID09IFRocm93aW5nOyB9CisKKyAgICBDYWxsYmFja0Vycm9yTW9k
ZSBtX3Rocm93RXhjZXB0aW9uczsKKyAgICBTY3JpcHRWYWx1ZSBtX2V4Y2VwdGlvbjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEFueUNhbGxiYWNrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BbnlDYWxsYmFjay5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQW55Q2FsbGJhY2suaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAzYTMwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQW55Q2FsbGJh
Y2suaWRsCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3Vu
ZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAgIENh
bGxiYWNrCitdIGludGVyZmFjZSBBbnlDYWxsYmFjayB7CisgICAgW0N1c3RvbV0gYW55IGhhbmRs
ZUV2ZW50KGluIFtPcHRpb25hbF0gYW55IGRhdGEpOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9GdXR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlYjBhYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuY3BwCkBAIC0wLDAgKzEsMTUxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdXR1cmUu
aCIKKworI2luY2x1ZGUgIkFueUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiRnV0dXJlUmVzb2x2ZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGdXR1cmU6OkZ1dHVyZShQYXNzUmVmUHRyPEZ1
dHVyZUluaXQ+IGluaXQpCisgICAgOiBtX3Jlc29sdmVyKEZ1dHVyZVJlc29sdmVyOjpjcmVhdGUo
dGhpcykpCisgICAgLCBtX3N0YXRlKFBlbmRpbmcpCisgICAgLCBtX3RpbWVyKHRoaXMsICZGdXR1
cmU6OnRpbWVyRmlyZWQpCit7CisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CisKKyAg
ICBpZiAoaW5pdCkgeworICAgICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAg
ICBTY3JpcHRWYWx1ZSBleGNlcHRpb247CisgICAgICAgIGluaXQtPmNhbGwobV9yZXNvbHZlci5n
ZXQoKSwgJmhhZEV4Y2VwdGlvbiwgJmV4Y2VwdGlvbiwgRnV0dXJlSW5pdDo6Tm9uVGhyb3dpbmcp
OworICAgICAgICBpZiAoaGFkRXhjZXB0aW9uKQorICAgICAgICAgICAgbV9yZXNvbHZlci0+cmVq
ZWN0KGV4Y2VwdGlvbik7CisgICAgfQorfQorCitGdXR1cmU6On5GdXR1cmUoKQoreworfQorCit2
b2lkIEZ1dHVyZTo6YXBwZW5kQWNjZXB0SGFuZGxlcihQYXNzT3duUHRyPEZ1dHVyZUhhbmRsZXI+
IGFjY2VwdEhhbmRsZXIpCit7CisgICAgQVNTRVJUKGFjY2VwdEhhbmRsZXIpOworICAgIG1fYWNj
ZXB0SGFuZGxlcnMuYXBwZW5kKGFjY2VwdEhhbmRsZXIpOworCisgICAgaWYgKG1fc3RhdGUgPT0g
QWNjZXB0ZWQpCisgICAgICAgIHByb2Nlc3NIYW5kbGVycyhBc3luY2hyb25vdXMpOworfQorCit2
b2lkIEZ1dHVyZTo6YXBwZW5kUmVqZWN0SGFuZGxlcihQYXNzT3duUHRyPEZ1dHVyZUhhbmRsZXI+
IHJlamVjdEhhbmRsZXIpCit7CisgICAgQVNTRVJUKHJlamVjdEhhbmRsZXIpOworICAgIG1fcmVq
ZWN0SGFuZGxlcnMuYXBwZW5kKHJlamVjdEhhbmRsZXIpOworCisgICAgaWYgKG1fc3RhdGUgPT0g
UmVqZWN0ZWQpCisgICAgICAgIHByb2Nlc3NIYW5kbGVycyhBc3luY2hyb25vdXMpOworfQorCitQ
YXNzUmVmUHRyPEZ1dHVyZT4gRnV0dXJlOjp0aGVuKFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+IGFj
Y2VwdENhbGxiYWNrLCBQYXNzUmVmUHRyPEFueUNhbGxiYWNrPiByZWplY3RDYWxsYmFjaykKK3sK
KyAgICBSZWZQdHI8RnV0dXJlPiBuZXdGdXR1cmUgPSBGdXR1cmU6OmNyZWF0ZSgpOworCisgICAg
aWYgKGFjY2VwdENhbGxiYWNrKSB7CisgICAgICAgIE93blB0cjxGdXR1cmVIYW5kbGVyPiBhY2Nl
cHRIYW5kbGVyID0gRnV0dXJlSGFuZGxlcjo6Y3JlYXRlKEZ1dHVyZUhhbmRsZXI6OlJlc29sdmUs
IGFjY2VwdENhbGxiYWNrLCBuZXdGdXR1cmUpOworICAgICAgICBhcHBlbmRBY2NlcHRIYW5kbGVy
KGFjY2VwdEhhbmRsZXIucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBpZiAocmVqZWN0Q2FsbGJh
Y2spIHsKKyAgICAgICAgT3duUHRyPEZ1dHVyZUhhbmRsZXI+IHJlamVjdEhhbmRsZXIgPSBGdXR1
cmVIYW5kbGVyOjpjcmVhdGUoRnV0dXJlSGFuZGxlcjo6UmVqZWN0LCByZWplY3RDYWxsYmFjaywg
bmV3RnV0dXJlKTsKKyAgICAgICAgYXBwZW5kUmVqZWN0SGFuZGxlcihyZWplY3RIYW5kbGVyLnJl
bGVhc2UoKSk7CisgICAgfQorCisgICAgcmV0dXJuIG5ld0Z1dHVyZS5yZWxlYXNlKCk7Cit9CisK
K1Bhc3NSZWZQdHI8RnV0dXJlPiBGdXR1cmU6OmNhdGNoRnVuYyhQYXNzUmVmUHRyPEFueUNhbGxi
YWNrPiByZWplY3RDYWxsYmFjaykKK3sKKyAgICBSZWZQdHI8RnV0dXJlPiBuZXdGdXR1cmUgPSBG
dXR1cmU6OmNyZWF0ZSgpOworCisgICAgT3duUHRyPEZ1dHVyZUhhbmRsZXI+IGFjY2VwdEhhbmRs
ZXIgPSBGdXR1cmVIYW5kbGVyOjpjcmVhdGUoRnV0dXJlSGFuZGxlcjo6UmVzb2x2ZSwgMCwgbmV3
RnV0dXJlKTsKKyAgICBhcHBlbmRBY2NlcHRIYW5kbGVyKGFjY2VwdEhhbmRsZXIucmVsZWFzZSgp
KTsKKworICAgIGlmIChyZWplY3RDYWxsYmFjaykgeworICAgICAgICBPd25QdHI8RnV0dXJlSGFu
ZGxlcj4gcmVqZWN0SGFuZGxlciA9IEZ1dHVyZUhhbmRsZXI6OmNyZWF0ZShGdXR1cmVIYW5kbGVy
OjpSZWplY3QsIHJlamVjdENhbGxiYWNrLCBuZXdGdXR1cmUpOworICAgICAgICBhcHBlbmRSZWpl
Y3RIYW5kbGVyKHJlamVjdEhhbmRsZXIucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bmV3RnV0dXJlLnJlbGVhc2UoKTsKK30KKwordm9pZCBGdXR1cmU6OmRvbmUoUGFzc1JlZlB0cjxB
bnlDYWxsYmFjaz4gYWNjZXB0Q2FsbGJhY2ssIFBhc3NSZWZQdHI8QW55Q2FsbGJhY2s+IHJlamVj
dENhbGxiYWNrKQoreworICAgIGlmIChhY2NlcHRDYWxsYmFjaykgeworICAgICAgICBPd25QdHI8
RnV0dXJlSGFuZGxlcj4gYWNjZXB0SGFuZGxlciA9IEZ1dHVyZUhhbmRsZXI6OmNyZWF0ZShGdXR1
cmVIYW5kbGVyOjpOb25lLCBhY2NlcHRDYWxsYmFjaywgMCk7CisgICAgICAgIGFwcGVuZEFjY2Vw
dEhhbmRsZXIoYWNjZXB0SGFuZGxlci5yZWxlYXNlKCkpOworICAgIH0KKworICAgIGlmIChyZWpl
Y3RDYWxsYmFjaykgeworICAgICAgICBPd25QdHI8RnV0dXJlSGFuZGxlcj4gcmVqZWN0SGFuZGxl
ciA9IEZ1dHVyZUhhbmRsZXI6OmNyZWF0ZShGdXR1cmVIYW5kbGVyOjpOb25lLCByZWplY3RDYWxs
YmFjaywgMCk7CisgICAgICAgIGFwcGVuZFJlamVjdEhhbmRsZXIocmVqZWN0SGFuZGxlci5yZWxl
YXNlKCkpOworICAgIH0KK30KKwordm9pZCBGdXR1cmU6OnRpbWVyRmlyZWQoVGltZXI8RnV0dXJl
PiopCit7CisgICAgd2hpbGUgKCFtX3Byb2Nlc3NpbmdRdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgY29uc3QgSGFuZGxlcnNQcm9jZXNzaW5nVGFzayYgdGFzayA9IG1fcHJvY2Vzc2luZ1F1ZXVl
LnRha2VGaXJzdCgpOworICAgICAgICBkb1Byb2Nlc3NIYW5kbGVycyh0YXNrLmhhbmRsZXJzLCB0
YXNrLnZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQgRnV0dXJlOjpwcm9jZXNzSGFuZGxlcnMoU3lu
Y2hyb25vdXNNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gU3luY2hyb25vdXMpIHsKKyAg
ICAgICAgZG9Qcm9jZXNzSGFuZGxlcnMoY3VycmVudFN0YXRlSGFuZGxlcnMoKSwgbV9yZXN1bHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFF1ZXVlIGEgdGFzayB0byBwcm9jZXNz
IGhhbmRsZXJzIGFzeW5jaHJvbm91c2x5LgorICAgIG1fcHJvY2Vzc2luZ1F1ZXVlLmFwcGVuZChI
YW5kbGVyc1Byb2Nlc3NpbmdUYXNrKGN1cnJlbnRTdGF0ZUhhbmRsZXJzKCksIG1fcmVzdWx0KSk7
CisgICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fdGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCit2b2lkIEZ1dHVyZTo6ZG9Qcm9jZXNzSGFuZGxlcnMoRnV0dXJlSGFuZGxl
ckxpc3QmIGhhbmRsZXJzLCBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUpCit7CisgICAgd2hpbGUg
KCFoYW5kbGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRyPEZ1dHVyZUhhbmRsZXI+IGhh
bmRsZXIgPSBoYW5kbGVycy50YWtlRmlyc3QoKTsKKyAgICAgICAgaGFuZGxlci0+Y2FsbCh2YWx1
ZSk7CisgICAgfQorfQorCitGdXR1cmU6OkZ1dHVyZUhhbmRsZXJMaXN0JiBGdXR1cmU6OmN1cnJl
bnRTdGF0ZUhhbmRsZXJzKCkKK3sKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBQZW5kaW5nKTsKKyAg
ICByZXR1cm4gKG1fc3RhdGUgPT0gQWNjZXB0ZWQpID8gbV9hY2NlcHRIYW5kbGVycyA6IG1fcmVq
ZWN0SGFuZGxlcnM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA5MzMxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGdXR1cmVfaAorI2RlZmluZSBGdXR1cmVfaAorCisj
aW5jbHVkZSAiRnV0dXJlSGFuZGxlci5oIgorI2luY2x1ZGUgIkZ1dHVyZUluaXQuaCIKKyNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRnV0dXJlIDogcHVibGljIFJlZkNvdW50ZWQ8RnV0dXJlPiB7CitwdWJsaWM6Cisg
ICAgZW51bSBTdGF0ZSB7IFBlbmRpbmcsIEFjY2VwdGVkLCBSZWplY3RlZCB9OworICAgIGVudW0g
U3luY2hyb25vdXNNb2RlIHsgQXN5bmNocm9ub3VzLCBTeW5jaHJvbm91cyB9OworCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RnV0dXJlPiBjcmVhdGUoUGFzc1JlZlB0cjxGdXR1cmVJbml0PiBpbml0
ID0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnV0dXJlKGluaXQpKTsK
KyAgICB9CisKKyAgICB+RnV0dXJlKCk7CisKKyAgICBQYXNzUmVmUHRyPEZ1dHVyZT4gdGhlbihQ
YXNzUmVmUHRyPEFueUNhbGxiYWNrPiBhY2NlcHRDYWxsYmFjayA9IDAsIFBhc3NSZWZQdHI8QW55
Q2FsbGJhY2s+IHJlamVjdENhbGxiYWNrID0gMCk7CisgICAgUGFzc1JlZlB0cjxGdXR1cmU+IGNh
dGNoRnVuYyhQYXNzUmVmUHRyPEFueUNhbGxiYWNrPiByZWplY3RDYWxsYmFjayA9IDApOworICAg
IHZvaWQgZG9uZShQYXNzUmVmUHRyPEFueUNhbGxiYWNrPiBhY2NlcHRDYWxsYmFjayA9IDAsIFBh
c3NSZWZQdHI8QW55Q2FsbGJhY2s+IHJlamVjdENhbGxiYWNrID0gMCk7CisKKyAgICBGdXR1cmVS
ZXNvbHZlciogcmVzb2x2ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVyLmdldCgpOyB9CisK
KyAgICB2b2lkIHNldFJlc3VsdChjb25zdCBTY3JpcHRWYWx1ZSYgcmVzdWx0KSB7IG1fcmVzdWx0
ID0gcmVzdWx0OyB9CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0ZSBzdGF0ZSkgeyBtX3N0YXRlID0g
c3RhdGU7IH0KKworICAgIHZvaWQgcHJvY2Vzc0hhbmRsZXJzKFN5bmNocm9ub3VzTW9kZSk7Cisg
ICAgdm9pZCBhcHBlbmRBY2NlcHRIYW5kbGVyKFBhc3NPd25QdHI8RnV0dXJlSGFuZGxlcj4pOwor
ICAgIHZvaWQgYXBwZW5kUmVqZWN0SGFuZGxlcihQYXNzT3duUHRyPEZ1dHVyZUhhbmRsZXI+KTsK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBGdXR1cmUoUGFzc1JlZlB0cjxGdXR1cmVJbml0Pik7
CisKKyAgICB0eXBlZGVmIERlcXVlPE93blB0cjxGdXR1cmVIYW5kbGVyPiA+IEZ1dHVyZUhhbmRs
ZXJMaXN0OworCisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEZ1dHVyZT4qKTsKKyAgICB2b2lk
IGRvUHJvY2Vzc0hhbmRsZXJzKEZ1dHVyZUhhbmRsZXJMaXN0JiwgY29uc3QgU2NyaXB0VmFsdWUm
KTsKKworICAgIEZ1dHVyZUhhbmRsZXJMaXN0JiBjdXJyZW50U3RhdGVIYW5kbGVycygpOworCisg
ICAgc3RydWN0IEhhbmRsZXJzUHJvY2Vzc2luZ1Rhc2sgeworICAgICAgICBIYW5kbGVyc1Byb2Nl
c3NpbmdUYXNrKEZ1dHVyZUhhbmRsZXJMaXN0JiBfaGFuZGxlcnMsIGNvbnN0IFNjcmlwdFZhbHVl
JiBfdmFsdWUpCisgICAgICAgICAgICA6IGhhbmRsZXJzKF9oYW5kbGVycykKKyAgICAgICAgICAg
ICwgdmFsdWUoX3ZhbHVlKQorICAgICAgICB7IH0KKworICAgICAgICBGdXR1cmVIYW5kbGVyTGlz
dCYgaGFuZGxlcnM7CisgICAgICAgIFNjcmlwdFZhbHVlIHZhbHVlOworICAgIH07CisKKyAgICBS
ZWZQdHI8RnV0dXJlUmVzb2x2ZXI+IG1fcmVzb2x2ZXI7CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAg
ICBTY3JpcHRWYWx1ZSBtX3Jlc3VsdDsKKyAgICBGdXR1cmVIYW5kbGVyTGlzdCBtX2FjY2VwdEhh
bmRsZXJzOworICAgIEZ1dHVyZUhhbmRsZXJMaXN0IG1fcmVqZWN0SGFuZGxlcnM7CisgICAgVGlt
ZXI8RnV0dXJlPiBtX3RpbWVyOworICAgIERlcXVlPEhhbmRsZXJzUHJvY2Vzc2luZ1Rhc2s+IG1f
cHJvY2Vzc2luZ1F1ZXVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRnV0dXJlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmUuaWRsIGIv
U291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjA5YjQ5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9G
dXR1cmUuaWRsCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ft
c3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAg
IENvbnN0cnVjdG9yKGluIFtDYWxsYmFja10gRnV0dXJlSW5pdCBpbml0KQorXSBpbnRlcmZhY2Ug
RnV0dXJlIHsKKyAgICBGdXR1cmUgdGhlbihpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBBbnlDYWxs
YmFjayBhY2NlcHRDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gQW55Q2FsbGJhY2sg
cmVqZWN0Q2FsbGJhY2spOworICAgIFtJbXBsZW1lbnRlZEFzPWNhdGNoRnVuY10gRnV0dXJlIGNh
dGNoKGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEFueUNhbGxiYWNrIHJlamVjdENhbGxiYWNrKTsK
KyAgICB2b2lkIGRvbmUoaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gQW55Q2FsbGJhY2sgYWNjZXB0
Q2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEFueUNhbGxiYWNrIHJlamVjdENhbGxi
YWNrKTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTllNTZkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9GdXR1cmVIYW5kbGVyLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdXR1cmVIYW5kbGVy
LmgiCisKKyNpbmNsdWRlICJET01GdXR1cmVzQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkZ1dHVyZVJlc29sdmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRnV0dXJlSGFuZGxl
cjo6RnV0dXJlSGFuZGxlcihIYW5kbGVyVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEFueUNhbGxiYWNr
PiBjYWxsYmFjaywgUGFzc1JlZlB0cjxGdXR1cmU+IGZ1dHVyZSkKKyAgICA6IG1fdHlwZSh0eXBl
KQorICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAsIG1fZnV0dXJlKGZ1dHVyZSkKK3sK
K30KKworRnV0dXJlSGFuZGxlcjo6fkZ1dHVyZUhhbmRsZXIoKQoreworfQorCit2b2lkIEZ1dHVy
ZUhhbmRsZXI6OmNhbGwoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIGlmICghbV9j
YWxsYmFjaykgeworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgeworICAgICAgICBjYXNlIFJlc29s
dmU6CisgICAgICAgICAgICBtX2Z1dHVyZS0+cmVzb2x2ZXIoKS0+cmVzb2x2ZSh2YWx1ZSwgRnV0
dXJlOjpTeW5jaHJvbm91cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWpl
Y3Q6CisgICAgICAgICAgICBtX2Z1dHVyZS0+cmVzb2x2ZXIoKS0+cmVqZWN0KHZhbHVlLCBGdXR1
cmU6OlN5bmNocm9ub3VzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBTZXQgaGFuZGxlcidzIGNhbGxiYWNrJ3MgY2FsbGJhY2sgdGhpcyB2YWx1
ZSB0byBmdXR1cmUuCisgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKKyAgICBTY3JpcHRW
YWx1ZSBleGNlcHRpb247CisgICAgU2NyaXB0VmFsdWUgcmVzdWx0ID0gbV9jYWxsYmFjay0+Y2Fs
bCh2YWx1ZSwgJmhhZEV4Y2VwdGlvbiwgJmV4Y2VwdGlvbiwgQW55Q2FsbGJhY2s6Ok5vblRocm93
aW5nKTsKKworICAgIGlmIChtX2Z1dHVyZSkgeworICAgICAgICBpZiAoaGFkRXhjZXB0aW9uKQor
ICAgICAgICAgICAgbV9mdXR1cmUtPnJlc29sdmVyKCktPnJlamVjdChleGNlcHRpb24sIEZ1dHVy
ZTo6U3luY2hyb25vdXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Z1dHVyZS0+cmVz
b2x2ZXIoKS0+cmVzb2x2ZShyZXN1bHQsIEZ1dHVyZTo6U3luY2hyb25vdXMpOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0Z1dHVyZUhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVIYW5kbGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjMDU4OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVIYW5kbGVyLmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1dHVyZUhhbmRsZXJfaAorI2RlZmluZSBG
dXR1cmVIYW5kbGVyX2gKKworI2luY2x1ZGUgIkFueUNhbGxiYWNrLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRnV0dXJlOworCitjbGFzcyBGdXR1cmVIYW5kbGVyIHsKK3B1YmxpYzoK
KyAgICBlbnVtIEhhbmRsZXJUeXBlIHsgTm9uZSwgUmVzb2x2ZSwgUmVqZWN0IH07CisKKyAgICBz
dGF0aWMgUGFzc093blB0cjxGdXR1cmVIYW5kbGVyPiBjcmVhdGUoSGFuZGxlclR5cGUgdHlwZSwg
UGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8RnV0dXJlPiBmdXR1
cmUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1dHVyZUhhbmRsZXIodHlw
ZSwgY2FsbGJhY2ssIGZ1dHVyZSkpOworICAgIH0KKworICAgIH5GdXR1cmVIYW5kbGVyKCk7CisK
KyAgICB2b2lkIGNhbGwoY29uc3QgU2NyaXB0VmFsdWUmKTsKKworICAgIEhhbmRsZXJUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBBbnlDYWxsYmFjayogY2FsbGJhY2so
KSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgRnV0
dXJlSGFuZGxlcihIYW5kbGVyVHlwZSwgUGFzc1JlZlB0cjxBbnlDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8RnV0dXJlPik7CisKKyAgICBIYW5kbGVyVHlwZSBtX3R5cGU7CisgICAgUmVmUHRyPEFueUNh
bGxiYWNrPiBtX2NhbGxiYWNrOworICAgIFJlZlB0cjxGdXR1cmU+IG1fZnV0dXJlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRnV0dXJlSGFuZGxlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlSW5pdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRnV0dXJlSW5pdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NzJiZjBkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVJbml0
LmNwcApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcg
RWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGdXR1cmVJbml0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRnV0dXJlSW5pdDo6RnV0dXJlSW5pdCgpCisgICAgOiBtX3Rocm93RXhjZXB0aW9ucyhUaHJv
d2luZykKK3sKK30KKwordm9pZCBGdXR1cmVJbml0OjpjYWxsKEZ1dHVyZVJlc29sdmVyKiByZXNv
bHZlciwgYm9vbCogaGFkRXhjZXB0aW9uLCBTY3JpcHRWYWx1ZSogZXhjZXB0aW9uLCBDYWxsYmFj
a0Vycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCit7CisgICAgbV90aHJvd0V4Y2VwdGlvbnMgPSB0
aHJvd0V4Y2VwdGlvbnM7CisgICAgaGFuZGxlRXZlbnQocmVzb2x2ZXIpOworICAgIGlmIChoYWRF
eGNlcHRpb24pCisgICAgICAgICpoYWRFeGNlcHRpb24gPSAhbV9leGNlcHRpb24uaGFzTm9WYWx1
ZSgpOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICpleGNlcHRpb24gPSBtX2V4Y2VwdGlv
bjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0Z1dHVyZUluaXQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVJbml0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjOTc0NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVJbml0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1dHVyZUluaXRfaAorI2RlZmluZSBGdXR1cmVJ
bml0X2gKKworI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZ1dHVyZVJlc29sdmVyOworCitjbGFzcyBGdXR1cmVJbml0IDogcHVibGljIFJlZkNv
dW50ZWQ8RnV0dXJlSW5pdD4geworcHVibGljOgorICAgIGVudW0gQ2FsbGJhY2tFcnJvck1vZGUg
eyBOb25UaHJvd2luZywgVGhyb3dpbmcgfTsKKworICAgIEZ1dHVyZUluaXQoKTsKKworICAgIHZp
cnR1YWwgfkZ1dHVyZUluaXQoKSB7IH0KKworICAgIHZvaWQgY2FsbChGdXR1cmVSZXNvbHZlcios
IGJvb2wqIGhhZEV4Y2VwdGlvbiA9IDAsIFNjcmlwdFZhbHVlKiBleGNlcHRpb24gPSAwLCBDYWxs
YmFja0Vycm9yTW9kZSA9IFRocm93aW5nKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFdmVudChGdXR1cmVSZXNvbHZlciopID0gMDsKKyAgICBib29sIHNob3VsZFJlcG9y
dEV4Y2VwdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Rocm93RXhjZXB0aW9ucyA9PSBUaHJvd2lu
ZzsgfQorCisgICAgQ2FsbGJhY2tFcnJvck1vZGUgbV90aHJvd0V4Y2VwdGlvbnM7CisgICAgU2Ny
aXB0VmFsdWUgbV9leGNlcHRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBGdXR1cmVJbml0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1
cmVJbml0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9GdXR1cmVJbml0LmlkbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWU2NzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZUluaXQuaWRsCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworWworICAgIENhbGxiYWNrCitdIGludGVyZmFjZSBGdXR1cmVJbml0IHsK
KyAgICBbQ3VzdG9tXSBib29sZWFuIGhhbmRsZUV2ZW50KGluIEZ1dHVyZVJlc29sdmVyIHJlc29s
dmVyKTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlUmVzb2x2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzExNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdXR1cmVSZXNv
bHZlci5oIgorCisjaW5jbHVkZSAiQW55Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJET01GdXR1cmVz
QmluZGluZ1V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Z1dHVyZVJlc29s
dmVyOjpGdXR1cmVSZXNvbHZlcihGdXR1cmUqIGZ1dHVyZSkKKyAgICA6IG1fZnV0dXJlKGZ1dHVy
ZSkKKyAgICAsIG1faXNSZXNvbHZlZChmYWxzZSkKK3sKKyAgICBBU1NFUlQoZnV0dXJlKTsKK30K
Kwordm9pZCBGdXR1cmVSZXNvbHZlcjo6cmVqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwg
RnV0dXJlOjpTeW5jaHJvbm91c01vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNSZXNvbHZlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2Z1dHVyZS0+c2V0U3RhdGUoRnV0dXJlOjpSZWplY3Rl
ZCk7CisgICAgbV9mdXR1cmUtPnNldFJlc3VsdCh2YWx1ZSk7CisgICAgbV9pc1Jlc29sdmVkID0g
dHJ1ZTsKKworICAgIG1fZnV0dXJlLT5wcm9jZXNzSGFuZGxlcnMobW9kZSk7Cit9CisKK3ZvaWQg
RnV0dXJlUmVzb2x2ZXI6OnJlc29sdmUoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBGdXR1cmU6
OlN5bmNocm9ub3VzTW9kZSBtb2RlKQoreworICAgIGlmIChpc1Jlc29sdmVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEZJWE1FOiBBY2NvcmRpbmcgdG8gc3BlY2lmaWNhdGlvbiwgdGhp
cyBzaG91bGQgd29yayBmb3IgYW55IEpTIE9iamVjdCB0aGF0IGlzCisgICAgLy8gdGhlbmFibGUg
KGhhcyBhIHRoZW4oKSBtZXRob2QpLCBub3QganVzdCBGdXR1cmUgb2JqZWN0cy4KKyAgICBGdXR1
cmUqIGZ1dHVyZSA9IHNjcmlwdFZhbHVlVG9GdXR1cmUodmFsdWUpOworICAgIGlmIChmdXR1cmUp
IHsKKyAgICAgICAgT3duUHRyPEZ1dHVyZUhhbmRsZXI+IGFjY2VwdEhhbmRsZXIgPSBGdXR1cmVI
YW5kbGVyOjpjcmVhdGUoRnV0dXJlSGFuZGxlcjo6UmVzb2x2ZSwgMCwgbV9mdXR1cmUpOworICAg
ICAgICBmdXR1cmUtPmFwcGVuZEFjY2VwdEhhbmRsZXIoYWNjZXB0SGFuZGxlci5yZWxlYXNlKCkp
OworICAgICAgICBPd25QdHI8RnV0dXJlSGFuZGxlcj4gcmVqZWN0SGFuZGxlciA9IEZ1dHVyZUhh
bmRsZXI6OmNyZWF0ZShGdXR1cmVIYW5kbGVyOjpSZWplY3QsIDAsIG1fZnV0dXJlKTsKKyAgICAg
ICAgZnV0dXJlLT5hcHBlbmRSZWplY3RIYW5kbGVyKHJlamVjdEhhbmRsZXIucmVsZWFzZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZnV0dXJlLT5zZXRTdGF0ZShGdXR1cmU6
OkFjY2VwdGVkKTsKKyAgICBtX2Z1dHVyZS0+c2V0UmVzdWx0KHZhbHVlKTsKKyAgICBtX2lzUmVz
b2x2ZWQgPSB0cnVlOworCisgICAgbV9mdXR1cmUtPnByb2Nlc3NIYW5kbGVycyhtb2RlKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0Z1dHVyZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlUmVzb2x2ZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmZhMjdiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmgKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZ1dHVyZVJlc29sdmVyX2gKKyNkZWZp
bmUgRnV0dXJlUmVzb2x2ZXJfaAorCisjaW5jbHVkZSAiRnV0dXJlLmgiCisjaW5jbHVkZSAiU2Ny
aXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBGdXR1cmVSZXNvbHZlcjogcHVibGljIFJlZkNvdW50ZWQ8RnV0dXJlUmVz
b2x2ZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGdXR1cmVSZXNvbHZlcj4g
Y3JlYXRlKEZ1dHVyZSogZnV0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGdXR1cmVSZXNvbHZlcihmdXR1cmUpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlamVjdChjb25z
dCBTY3JpcHRWYWx1ZSYgPSBTY3JpcHRWYWx1ZSgpLCBGdXR1cmU6OlN5bmNocm9ub3VzTW9kZSA9
IEZ1dHVyZTo6QXN5bmNocm9ub3VzKTsKKyAgICB2b2lkIHJlc29sdmUoY29uc3QgU2NyaXB0VmFs
dWUmID0gU2NyaXB0VmFsdWUoKSwgRnV0dXJlOjpTeW5jaHJvbm91c01vZGUgPSBGdXR1cmU6OkFz
eW5jaHJvbm91cyk7CisKKyAgICBib29sIGlzUmVzb2x2ZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
UmVzb2x2ZWQ7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBGdXR1cmVSZXNvbHZlcihGdXR1
cmUqKTsKKworICAgIEZ1dHVyZSogbV9mdXR1cmU7CisgICAgYm9vbCBtX2lzUmVzb2x2ZWQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBGdXR1cmVSZXNvbHZlcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRnV0dXJlUmVzb2x2ZXIuaWRsIGIvU291
cmNlL1dlYkNvcmUvZG9tL0Z1dHVyZVJlc29sdmVyLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44YTAwOTNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0Z1dHVyZVJlc29sdmVyLmlkbApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK2ludGVyZmFjZSBGdXR1cmVSZXNvbHZlciB7CisgICAgdm9pZCByZXNvbHZlKGluIFtP
cHRpb25hbF0gYW55IHZhbHVlKTsKKyAgICB2b2lkIHJlamVjdChpbiBbT3B0aW9uYWxdIGFueSBl
cnJvcik7CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBpc1Jlc29sdmVkOworfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBkMDZhZmUwLi5jZDE4ZWE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC01ODcsNiArNTg3LDExIEBACiAgICAgW0NvbmRpdGlv
bmFsPVdPUktFUlNdIGF0dHJpYnV0ZSBXb3JrZXJDb25zdHJ1Y3RvciBXb3JrZXI7IC8vIFVzYWJs
ZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKICAgICBbQ29uZGl0aW9uYWw9U0hBUkVEX1dPUktFUlMs
IEpTQ3VzdG9tR2V0dGVyLCBWOEVuYWJsZWRBdFJ1bnRpbWVdIGF0dHJpYnV0ZSBTaGFyZWRXb3Jr
ZXJDb25zdHJ1Y3RvciBTaGFyZWRXb3JrZXI7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0
b3IKIAorLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBWOCBhcyB3ZWxsLgorI2lmICFkZWZp
bmVkKFY4X0JJTkRJTkcpIHx8ICFWOF9CSU5ESU5HCisgICAgYXR0cmlidXRlIEZ1dHVyZUNvbnN0
cnVjdG9yIEZ1dHVyZTsKKyNlbmRpZgorCiAgICAgYXR0cmlidXRlIEZpbGVDb25zdHJ1Y3RvciBG
aWxlOwogICAgIGF0dHJpYnV0ZSBGaWxlTGlzdENvbnN0cnVjdG9yIEZpbGVMaXN0OwogICAgIGF0
dHJpYnV0ZSBCbG9iQ29uc3RydWN0b3IgQmxvYjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>