<?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>150898</bug_id>
          
          <creation_ts>2015-11-04 10:40:46 -0800</creation_ts>
          <short_desc>[WK2] Extract networking code out of NetworkResourceLoader class to improve reusability</short_desc>
          <delta_ts>2015-11-05 10:56:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>150937</dependson>
          <blocked>150856</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139382</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 10:40:46 -0800</bug_when>
    <thetext>Extract networking code out of NetworkResourceLoader class to improve reusability (will be used for speculative revalidation) and simplify the NetworkResourceLoader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139390</commentid>
    <comment_count>1</comment_count>
      <attachid>264799</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 10:59:53 -0800</bug_when>
    <thetext>Created attachment 264799
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139391</commentid>
    <comment_count>2</comment_count>
      <attachid>264800</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 11:01:54 -0800</bug_when>
    <thetext>Created attachment 264800
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139392</commentid>
    <comment_count>3</comment_count>
      <attachid>264801</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 11:08:43 -0800</bug_when>
    <thetext>Created attachment 264801
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139393</commentid>
    <comment_count>4</comment_count>
      <attachid>264802</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 11:24:20 -0800</bug_when>
    <thetext>Created attachment 264802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139406</commentid>
    <comment_count>5</comment_count>
      <attachid>264802</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-04 12:33:34 -0800</bug_when>
    <thetext>Comment on attachment 264802
Patch

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

r=me with a few comments:

&gt; Source/WebKit2/ChangeLog:9
&gt; +        reusability (will be used for speculative revalidation) and simplify

The speculative revalidator will be a NetworkLoadClient, right?

&gt; Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp:209
&gt; -    loader-&gt;handle()-&gt;continueDidReceiveResponse();
&gt; +    loader-&gt;networkLoad()-&gt;handle()-&gt;continueDidReceiveResponse();

I guess the assumption that the loader has a networkLoad and the networkLoad has a handle is just as good as the old assumption that the we have a loader with a handle.

&gt; Source/WebKit2/NetworkProcess/NetworkLoadParameters.cpp:44
&gt; +NetworkLoadParameters::NetworkLoadParameters()
&gt; +    : webPageID(0)
&gt; +    , webFrameID(0)
&gt; +    , sessionID(SessionID::emptySessionID())
&gt; +    , contentSniffingPolicy(SniffContent)
&gt; +    , allowStoredCredentials(DoNotAllowStoredCredentials)
&gt; +    , clientCredentialPolicy(DoNotAskClientForAnyCredentials)
&gt; +    , shouldClearReferrerOnHTTPSToHTTPRedirect(true)
&gt; +    , defersLoading(false)
&gt; +    , needsCertificateInfo(false)

If this constructor is needed, you should have webPageID { 0 }; etc. in the header instead of here.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:163
&gt; +static NetworkLoadParameters constructNetworkLoadParameters(const NetworkResourceLoadParameters&amp; parameters, const Optional&lt;ResourceRequest&gt;&amp; updatedRequest)

This should be an actual constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139414</commentid>
    <comment_count>6</comment_count>
      <attachid>264802</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 13:02:43 -0800</bug_when>
    <thetext>Comment on attachment 264802
Patch

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

&gt;&gt; Source/WebKit2/ChangeLog:9
&gt;&gt; +        reusability (will be used for speculative revalidation) and simplify
&gt; 
&gt; The speculative revalidator will be a NetworkLoadClient, right?

Yes.

&gt;&gt; Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp:209
&gt;&gt; +    loader-&gt;networkLoad()-&gt;handle()-&gt;continueDidReceiveResponse();
&gt; 
&gt; I guess the assumption that the loader has a networkLoad and the networkLoad has a handle is just as good as the old assumption that the we have a loader with a handle.

That&apos;s right. handle() could probably return a reference now though. I&apos;ll see if I can make this change.

&gt;&gt; Source/WebKit2/NetworkProcess/NetworkLoadParameters.cpp:44
&gt;&gt; +    , needsCertificateInfo(false)
&gt; 
&gt; If this constructor is needed, you should have webPageID { 0 }; etc. in the header instead of here.

Right, I&apos;ll move the initializations inline.

&gt;&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:163
&gt;&gt; +static NetworkLoadParameters constructNetworkLoadParameters(const NetworkResourceLoadParameters&amp; parameters, const Optional&lt;ResourceRequest&gt;&amp; updatedRequest)
&gt; 
&gt; This should be an actual constructor.

You mean have a NetworkLoadParameters constructor that takes a NetworkResourceLoadParameters in argument?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139415</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-04 13:03:32 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt;&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:163
&gt; &gt;&gt; +static NetworkLoadParameters constructNetworkLoadParameters(const NetworkResourceLoadParameters&amp; parameters, const Optional&lt;ResourceRequest&gt;&amp; updatedRequest)
&gt; &gt; 
&gt; &gt; This should be an actual constructor.
&gt; 
&gt; You mean have a NetworkLoadParameters constructor that takes a
&gt; NetworkResourceLoadParameters in argument?
Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139426</commentid>
    <comment_count>8</comment_count>
      <attachid>264808</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 13:50:41 -0800</bug_when>
    <thetext>Created attachment 264808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139449</commentid>
    <comment_count>9</comment_count>
      <attachid>264808</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-04 14:40:09 -0800</bug_when>
    <thetext>Comment on attachment 264808
Patch

Clearing flags on attachment: 264808

Committed r192038: &lt;http://trac.webkit.org/changeset/192038&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139450</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-04 14:40:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139478</commentid>
    <comment_count>11</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2015-11-04 16:26:33 -0800</bug_when>
    <thetext>This change seems to have caused some new crashes:

Crashlog
&lt;https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK2%20(Tests)/r192038%20(8097)/fast/inspector-support/matchedrules-crash-log.txt&gt;

Run:
&lt;https://build.webkit.org/builders/Apple%20Yosemite%20Debug%20WK2%20%28Tests%29/builds/8097&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139480</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 16:28:27 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; This change seems to have caused some new crashes:
&gt; 
&gt; Crashlog
&gt; &lt;https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK2%20(Tests)/
&gt; r192038%20(8097)/fast/inspector-support/matchedrules-crash-log.txt&gt;
&gt; 
&gt; Run:
&gt; &lt;https://build.webkit.org/builders/
&gt; Apple%20Yosemite%20Debug%20WK2%20%28Tests%29/builds/8097&gt;

It looks like the SandBoxExtension has a non-zero useCount when it is destroyed and therefore hits an assertion. I am trying to figure out how this is possible. NetworkResourceLoader::cleanup() is called and it should revoke the sandbox extension.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139483</commentid>
    <comment_count>13</comment_count>
      <attachid>264826</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 16:41:21 -0800</bug_when>
    <thetext>Created attachment 264826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139484</commentid>
    <comment_count>14</comment_count>
      <attachid>264808</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 16:42:36 -0800</bug_when>
    <thetext>Comment on attachment 264808
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:-211
&gt; -        return;

We used to return early after calling setDefersLoading() on the handle here and I stopped doing this by mistake after my change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139490</commentid>
    <comment_count>15</comment_count>
      <attachid>264826</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 16:55:18 -0800</bug_when>
    <thetext>Comment on attachment 264826
Patch

Clearing flags on attachment: 264826

Committed r192044: &lt;http://trac.webkit.org/changeset/192044&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139491</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-11-04 16:55:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264799</attachid>
            <date>2015-11-04 10:59:53 -0800</date>
            <delta_ts>2015-11-04 11:01:54 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>split_NetworkResourceLoader_wip.patch</filename>
            <type>text/plain</type>
            <size>74910</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCAwYTIzYjdmLi4yYjIxNTJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJOZXR3b3JrQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgpAQCAtMjAyLDEwICsyMDMs
MTAgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5SZXNv
dXJjZUxvYWRUb0Rvd25sb2FkKHVpbnQ2NF90IG0KICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5n
IGhlcmUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbHNlCi0gICAgbmV0d29ya1Byb2Nlc3Mu
ZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQoZG93bmxvYWRJRCwgbG9h
ZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOworICAgIG5ldHdvcmtQcm9jZXNzLmRv
d25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKGRvd25sb2FkSUQsIGxvYWRl
ci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKIAogICAgIC8v
IFVuYmxvY2sgdGhlIFVSTCBjb25uZWN0aW9uIG9wZXJhdGlvbiBxdWV1ZS4KLSAgICBsb2FkZXIt
PmhhbmRsZSgpLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIGxvYWRlci0+bmV0
d29ya0xvYWQoKS0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAg
CiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3Njk1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcApAQCAtMCwwICsxLDM2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCisjaW5jbHVkZSAiTmV0d29ya0xvYWQuaCIKKworI2luY2x1ZGUgIkF1dGhlbnRp
Y2F0aW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAi
U2Vzc2lvblRyYWNrZXIuaCIKKyNpbmNsdWRlICJXZWJFcnJvcnMuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTmV0d29ya0xvYWQ6Ok5ldHdv
cmtMb2FkKE5ldHdvcmtMb2FkQ2xpZW50JiBjbGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcGFyYW1l
dGVycyhwYXJhbWV0ZXJzKQorICAgICwgbV9uZXR3b3JraW5nQ29udGV4dChSZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dDo6Y3JlYXRlKHBhcmFtZXRlcnMuc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKQorICAgICwgbV9jdXJyZW50UmVx
dWVzdChwYXJhbWV0ZXJzLnJlcXVlc3QpCit7CisgICAgYm9vbCBzaG91bGRTbmlmZiA9IG1fcGFy
YW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50OworI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCisgICAgVU5VU0VEX1BBUkFNKHNob3VsZFNuaWZmKTsgLy8gRklYTUU6
IFVzZSB0aGlzLgorICAgIG1fdGFzayA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lvbihw
YXJhbWV0ZXJzLnNlc3Npb25JRCktPmNyZWF0ZURhdGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50
UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFzay0+cmVzdW1lKCk7CisjZWxzZQorICAgIG1faGFu
ZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBt
X2N1cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX3BhcmFtZXRlcnMuZGVmZXJzTG9hZGluZywgc2hvdWxk
U25pZmYpOworI2VuZGlmCit9CisKK05ldHdvcmtMb2FkOjp+TmV0d29ya0xvYWQoKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAg
ICBpZiAobV90YXNrKQorICAgICAgICBtX3Rhc2stPmNsZWFyQ2xpZW50KCk7CisjZWxzZQorICAg
IGlmIChtX2hhbmRsZSkKKyAgICAgICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50KCk7CisjZW5kaWYK
K30KKwordm9pZCBOZXR3b3JrTG9hZDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sK
KyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVy
ZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKKyAgICBpZiAobV9oYW5kbGUpIHsKKyAg
ICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIE5ldHdvcmtMb2FkOjpjYW5jZWwoKQoreworI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgaWYgKG1fdGFzaykKKyAgICAgICAgbV90YXNrLT5j
YW5jZWwoKTsKKyNlbHNlCisgICAgaWYgKG1faGFuZGxlKQorICAgICAgICBtX2hhbmRsZS0+Y2Fu
Y2VsKCk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJl
cXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KQoreworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlRnJvbURlbGVnYXRl
UHJlc2VydmluZ09sZFByb3BlcnRpZXMobmV3UmVxdWVzdC5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRh
dGVIVFRQQm9keSkpOworI2VsaWYgVVNFKFNPVVApCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBS
ZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVz
LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjEyNy4KKyAg
ICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0
aWVzKG5ld1JlcXVlc3QpOworI2VuZGlmCisKKyAgICBpZiAobV9jdXJyZW50UmVxdWVzdC5pc051
bGwoKSkgeworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbHNlCisgICAgICAg
IG1faGFuZGxlLT5jYW5jZWwoKTsKKyAgICAgICAgZGlkRmFpbChtX2hhbmRsZS5nZXQoKSwgY2Fu
Y2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOworI2VuZGlmCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21l
dGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKKyAgICBtX2hhbmRsZS0+
Y29udGludWVXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7CisjZW5kaWYKK30KKwor
dm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAg
IG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVj
ayBvbmNlIEJsb2JSZXNvdXJjZUhhbmRsZSBpbXBsZW1lbnRzIGRpZFJlY2VpdmVSZXNwb25zZUFz
eW5jIGNvcnJlY3RseS4KKyAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90IHdhaXQgZm9yIHJl
c3BvbnNlLCBzbyB0aGUgbG9hZCBpcyBsaWtlbHkgdG8gZmluaXNoIGJlZm9yZSBjb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZS4KKyAgICBpZiAoIW1faGFuZGxlKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyNlbmRpZgorfQor
CitOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgTmV0
d29ya0xvYWQ6OnNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZWNlaXZlZFJlc3BvbnNlKQoreworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UgPSBy
ZWNlaXZlZFJlc3BvbnNlOworICAgIHJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNl
OjpTb3VyY2U6Ok5ldHdvcmspOworICAgIGlmIChtX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0
ZUluZm8pCisgICAgICAgIHJlc3BvbnNlLmluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKKworICAg
IHJldHVybiBtX2NsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworfQorCit2b2lk
IE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKK3sKKyAgICAvLyBXZSBvbmx5IGV4cGVjdCB0byBnZXQgdGhlIHdpbGxTZW5kUmVxdWVz
dCBjYWxsYmFjayBmcm9tIFJlc291cmNlSGFuZGxlIGFzIHRoZSByZXN1bHQgb2YgYSByZWRpcmVj
dC4KKyAgICBBU1NFUlQoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX2N1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdDsKKyAg
ICBtX2NsaWVudC53aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVz
cG9uc2UpOworfQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKwordm9pZCBOZXR3b3JrTG9h
ZDo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lk
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBzaGFy
ZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXF1ZXN0KTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2
ZUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3Qg
Q3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRp
b246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRlbnRpYWwoKSk7Cit9CisKK3ZvaWQgTmV0
d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNoYXJlZERpZFJl
Y2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoUmVzcG9uc2VE
aXNwb3NpdGlvbjo6QWxsb3cpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlRGF0
YShSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoYnVmZmVyKTsK
KyAgICBhdXRvIHNpemUgPSBidWZmZXItPnNpemUoKTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZl
QnVmZmVyKFdURjo6bW92ZShidWZmZXIpLCBzaXplKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6
ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
aWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAgICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5nKFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9j
bGllbnQuZGlkRmFpbExvYWRpbmcoZXJyb3IpOworfQorCisjZWxzZQorCit2b2lkIE5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVT
RUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIGlmIChzaGFyZWREaWRSZWNlaXZl
UmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSkgPT0gTmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXMpCisgICAgICAgIG1faGFuZGxlLT5jb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZSgpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZl
RGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEgKi8sIHVuc2lnbmVkIC8q
IGxlbmd0aCAqLywgaW50IC8qIGVuY29kZWREYXRhTGVuZ3RoICovKQoreworICAgIC8vIFRoZSBO
ZXR3b3JrUHJvY2VzcyBzaG91bGQgbmV2ZXIgZ2V0IGEgZGlkUmVjZWl2ZURhdGEgY2FsbGJhY2su
CisgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSB1c2luZyBkaWRSZWNlaXZlQnVmZmVyLgorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZl
QnVmZmVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBi
dWZmZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVT
RUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIG1fY2xpZW50LmRpZFJlY2VpdmVC
dWZmZXIoV1RGOjptb3ZlKGJ1ZmZlciksIHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpOworfQor
Cit2b2lkIE5ldHdvcmtMb2FkOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGRvdWJsZSBmaW5pc2hUaW1lKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5k
bGUgPT0gbV9oYW5kbGUpOworICAgIG1fY2xpZW50LmRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGlt
ZSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5k
bGUsICFoYW5kbGUgfHwgaGFuZGxlID09IG1faGFuZGxlKTsKKyAgICBBU1NFUlQoIWVycm9yLmlz
TnVsbCgpKTsKKworICAgIG1fY2xpZW50LmRpZEZhaWxMb2FkaW5nKGVycm9yKTsKK30KKwordm9p
ZCBOZXR3b3JrTG9hZDo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUg
PT0gbV9oYW5kbGUpOworICAgIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QocmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSk7Cit9CisKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9O
KQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgJiYgIVVTRShORVRX
T1JLX1NFU1NJT04pCit2b2lkIE5ldHdvcmtMb2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUHJvdGVjdGlv
blNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAg
IC8vIEhhbmRsZSBzZXJ2ZXIgdHJ1c3QgZXZhbHVhdGlvbiBhdCBwbGF0Zm9ybS1sZXZlbCBpZiBy
ZXF1ZXN0ZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICAgIGlmIChwcm90ZWN0aW9uU3Bh
Y2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlv
blNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZAorICAgICAgICAmJiAhTmV0d29y
a1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9u
KCkpIHsKKyAgICAgICAgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2NsaWVudC5p
c1N5bmNocm9ub3VzKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgdGhlIFdl
YlByb2Nlc3MgbGlrZSB0aGUgYXN5bmNocm9ub3VzIGNhc2UgYmVsb3cgZG9lcy4KKyAgICAgICAg
Ly8gVGhpcyBpcyBjdXJyZW50bHkgaW1wb3NzaWJsZSBhcyB0aGUgV2ViUHJvY2VzcyBpcyBibG9j
a2VkIHdhaXRpbmcgb24gdGhpcyBzeW5jaHJvbm91cyBsb2FkLgorICAgICAgICAvLyBJdCdzIHBv
c3NpYmxlIHRoYXQgd2UgY2FuIGp1bXAgc3RyYWlnaHQgdG8gdGhlIFVJIHByb2Nlc3MgdG8gcmVz
b2x2ZSB0aGlzLgorICAgICAgICBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudC5j
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMocHJvdGVjdGlvblNwYWNl
KTsKK30KKyNlbmRpZgorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykK
K3ZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShib29sIHJlc3VsdCkKK3sKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8v
IEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UK
KyAgICBtX2hhbmRsZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKHJlc3VsdCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgVVNFKE5FVFdPUktfQ0ZEQVRB
X0FSUkFZX0NBTExCQUNLKSAmJiAhVVNFKE5FVFdPUktfU0VTU0lPTikKK2Jvb2wgTmV0d29ya0xv
YWQ6OnN1cHBvcnRzRGF0YUFycmF5KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZURhdGFBcnJheShS
ZXNvdXJjZUhhbmRsZSosIENGQXJyYXlSZWYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCisjaWYgIVVTRShORVRXT1JLX1NF
U1NJT04pCisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0
b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9
PSBtX2hhbmRsZSk7CisKKyAgICBtX2NsaWVudC5kaWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFs
Qnl0ZXNUb0JlU2VudCk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6Ondhc0Jsb2NrZWQoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09
IG1faGFuZGxlKTsKKworICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmJsb2NrZWRFcnJvciht
X2N1cnJlbnRSZXF1ZXN0KSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmNhbm5vdFNob3dVUkwo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFu
ZGxlID09IG1faGFuZGxlKTsKKworICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmNhbm5vdFNo
b3dVUkxFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Cit9CisKK2Jvb2wgTmV0d29ya0xvYWQ6OnNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCit7CisgICAg
QVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSB8fCAhbV9oYW5kbGUpOyAv
LyBtX2hhbmRsZSB3aWxsIGJlIDAgaWYgY2FsbGVkIGZyb20gUmVzb3VyY2VIYW5kbGU6OnN0YXJ0
KCkuCisKKyAgICAvLyBXaGVuIHRoZSBXZWJQcm9jZXNzIGlzIGhhbmRsaW5nIGxvYWRpbmcgYSBj
bGllbnQgaXMgY29uc3VsdGVkIGVhY2ggdGltZSB0aGlzIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlIHF1ZXN0aW9uIGlzIGFza2VkLgorICAgIC8vIEluIE5ldHdvcmtQcm9jZXNzIG1vZGUgd2Ug
YXNrIHRoZSBXZWJQcm9jZXNzIGNsaWVudCB1cCBmcm9udCBvbmNlIGFuZCB0aGVuIHJldXNlIHRo
ZSBjYWNoZWQgYW5zd2VyLgorCisgICAgLy8gV2Ugc3RpbGwgbmVlZCB0aGlzIHN5bmMgdmVyc2lv
biwgYmVjYXVzZSBSZXNvdXJjZUhhbmRsZSBpdHNlbGYgdXNlcyBpdCBpbnRlcm5hbGx5LCBldmVu
IHdoZW4gdGhlIGRlbGVnYXRlIHVzZXMgYW4gYXN5bmMgb25lLgorCisgICAgcmV0dXJuIG1fcGFy
YW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7
Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5k
bGUpOworICAgIC8vIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBkb2VzIG5vdCBrbm93IHdoZXRoZXIg
dGhlIHJlcXVlc3QgaXMgY3Jvc3Mgb3JpZ2luLCBzbyBXZWIgcHJvY2VzcyBjb21wdXRlcyBhbiBh
cHBsaWNhYmxlIGNyZWRlbnRpYWwgcG9saWN5IGZvciBpdC4KKyAgICBBU1NFUlQobV9wYXJhbWV0
ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgIT0gRG9Ob3RBc2tDbGllbnRGb3JDcm9zc09yaWdp
bkNyZWRlbnRpYWxzKTsKKworICAgIGlmIChtX3BhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBv
bGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzKSB7CisgICAgICAgIGNoYWxs
ZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0
aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9w
YXJhbWV0ZXJzLndlYkZyYW1lSUQsIGNoYWxsZW5nZSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6
OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhh
bmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJv
YmFibHkgbm90IG5lZWRlZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS84OTYwMTI0PikuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRp
b24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworCisg
ICAgbV9oYW5kbGUtPmNhbmNlbCgpOworICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNl
bGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKK30KKworI2VuZGlmIC8vICFVU0UoTkVUV09S
S19TRVNTSU9OKQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zNzQ3YzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgTmV0d29ya0xvYWRfaAorI2RlZmluZSBOZXR3b3JrTG9hZF9oCisKKyNp
ZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisjaW5jbHVkZSAiTmV0d29ya0xvYWRDbGllbnQu
aCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbi5oIgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdv
cmtMb2FkCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICA6IHB1YmxpYyBOZXR3b3JrU2Vz
c2lvblRhc2tDbGllbnQKKyNlbHNlCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVDbGllbnQKKyNlbmRpZgoreworcHVibGljOgorICAgIE5ldHdvcmtMb2FkKE5ldHdvcmtMb2Fk
Q2xpZW50JiwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJik7CisgICAgfk5ldHdvcmtMb2Fk
KCk7CisKKyAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisgICAgdm9pZCBjYW5jZWwo
KTsKKworICAgIHZvaWQgY2xlYXJDdXJyZW50UmVxdWVzdCgpIHsgbV9jdXJyZW50UmVxdWVzdCA9
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOyB9CisKKyAgICB2b2lkIGNvbnRpbnVlV2lsbFNl
bmRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgY29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisg
ICAgLy8gTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVy
Zm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3Np
dGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgZmluYWwg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+JiYpIGZpbmFsIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWwgb3Zl
cnJpZGU7CisjZWxzZQorICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50CisgICAgdmlydHVhbCB2
b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmRE
YXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwgaW50IGVuY29kZWREYXRhTGVuZ3RoKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93
VVJMKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
ZWl2ZWRDYW5jZWxsYXRpb24oV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCB1
c2VzQXN5bmNDYWxsYmFja3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIGxvYWRpbmdTeW5jaHJvbm91c1hIUigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fY2xpZW50
LmlzU3luY2hyb25vdXMoKTsgfQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxM
QkFDSykKKyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVj
dGlvblNwYWNlJikgb3ZlcnJpZGU7CisjZW5kaWYKKyNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJS
QVlfQ0FMTEJBQ0spCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGF0YUFycmF5KCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhQXJyYXkoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGUqLCBDRkFycmF5UmVmKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENP
Q09BKQorI2lmIFVTRShDRk5FVFdPUkspCisgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3Bv
bnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVm
KSBvdmVycmlkZTsKKyNlbHNlCisgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5
bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJy
aWRlOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorCisj
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2b2lkIGNvbnRpbnVl
Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKTsKKyNlbmRpZgorCisj
aWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9CisjZW5kaWYKKworcHJpdmF0
ZToKKyAgICBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKTsKKyAgICB2b2lkIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYp
OworCisgICAgTmV0d29ya0xvYWRDbGllbnQmIG1fY2xpZW50OworICAgIGNvbnN0IE5ldHdvcmtM
b2FkUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CisgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisg
ICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gbV90YXNrOworI2Vsc2UKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOworI2VuZGlmCisKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8gVXBkYXRlZCBvbiByZWRpcmVjdHMu
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCisKKyNlbmRpZiAvLyBOZXR3b3JrTG9hZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENsaWVudC5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iYTQ4NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDbGllbnQuaApAQCAtMCwwICsxLDcyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrTG9hZENsaWVudF9oCisjZGVmaW5lIE5ldHdvcmtM
b2FkQ2xpZW50X2gKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworI2lmIFBM
QVRGT1JNKENPQ09BKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2Uq
IENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgUHJvdGVjdGlvblNwYWNlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
TmV0d29ya0xvYWRDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfk5ldHdvcmtMb2FkQ2xp
ZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0ID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNT
ZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhjb25z
dCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdpbGxT
ZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgPSAwOworICAg
IGVudW0gY2xhc3MgU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgeyBObywgWWVzIH07
CisgICAgdmlydHVhbCBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYm
LCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWxMb2FkaW5nKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSA9IDA7CisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3lu
YyhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSA9IDA7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2VuZGlm
IC8vIE5ldHdvcmtMb2FkQ2xpZW50X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzlhY2Y2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCisjaW5jbHVkZSAiTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzOjpOZXR3b3JrTG9hZFBhcmFtZXRlcnMoKQorICAgIDogd2ViUGFnZUlEKDApCisg
ICAgLCB3ZWJGcmFtZUlEKDApCisgICAgLCBzZXNzaW9uSUQoU2Vzc2lvbklEOjplbXB0eVNlc3Np
b25JRCgpKQorICAgICwgY29udGVudFNuaWZmaW5nUG9saWN5KFNuaWZmQ29udGVudCkKKyAgICAs
IGFsbG93U3RvcmVkQ3JlZGVudGlhbHMoRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzKQorICAg
ICwgY2xpZW50Q3JlZGVudGlhbFBvbGljeShEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxz
KQorICAgICwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCh0cnVlKQor
ICAgICwgZGVmZXJzTG9hZGluZyhmYWxzZSkKKyAgICAsIG5lZWRzQ2VydGlmaWNhdGVJbmZvKGZh
bHNlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkUGFyYW1ldGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM5NjIyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBOZXR3b3JrTG9hZFBhcmFtZXRlcnNfaAorI2RlZmluZSBOZXR3b3JrTG9hZFBh
cmFtZXRlcnNfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHsKK3B1YmxpYzoKKyAgICBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMoKTsKKworICAgIHVpbnQ2NF90IHdlYlBhZ2VJRDsKKyAgICB1
aW50NjRfdCB3ZWJGcmFtZUlEOworICAgIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQ7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgV2ViQ29yZTo6Q29udGVu
dFNuaWZmaW5nUG9saWN5IGNvbnRlbnRTbmlmZmluZ1BvbGljeTsKKyAgICBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFscyBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIFdlYkNvcmU6OkNsaWVu
dENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKKyAgICBib29sIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7CisgICAgYm9vbCBkZWZlcnNMb2Fk
aW5nOworICAgIGJvb2wgbmVlZHNDZXJ0aWZpY2F0ZUluZm87Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNlbmRpZiAv
LyBOZXR3b3JrTG9hZFBhcmFtZXRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggMDg0NmE1MC4uYTVm
NzM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0yOCwzNSArMjgsMjggQEAKIAogI2lmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNp
bmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtM
b2FkLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKLSNpbmNs
dWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAj
aW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCi0jaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkZXJN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hU
VFBIZWFkZXJOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5o
PgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlSGFuZGxlLmg+Ci0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMTIwLDExICsxMTMsNyBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cwogTmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291cmNlTG9hZGVyKCkKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0g
ICAgQVNTRVJUKCFtX3Rhc2spOwotI2Vsc2UKLSAgICBBU1NFUlQoIW1faGFuZGxlKTsKLSNlbmRp
ZgorICAgIEFTU0VSVCghbV9uZXR3b3JrTG9hZCk7CiAgICAgQVNTRVJUKCFpc1N5bmNocm9ub3Vz
KCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJlcGx5KTsKIH0KIApAQCAtMTQw
LDExICsxMjksOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogICAgIGlm
IChtX2RlZmVyc0xvYWRpbmcpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY3VycmVudFJlcXVl
c3QgPSBvcmlnaW5hbFJlcXVlc3QoKTsKLQogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAg
IGlmICghTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSB8fCBzZXNzaW9uSUQo
KS5pc0VwaGVtZXJhbCgpIHx8ICFvcmlnaW5hbFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5I
VFRQRmFtaWx5KCkpIHsKLSAgICAgICAgc3RhcnROZXR3b3JrTG9hZCgpOworICAgICAgICBzdGFy
dE5ldHdvcmtMb2FkKG9yaWdpbmFsUmVxdWVzdCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMTU1LDExICsxNDIsMTEgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0
KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoIWVudHJ5KSB7
Ci0gICAgICAgICAgICBsb2FkZXItPnN0YXJ0TmV0d29ya0xvYWQoKTsKKyAgICAgICAgICAgIGxv
YWRlci0+c3RhcnROZXR3b3JrTG9hZChsb2FkZXItPm9yaWdpbmFsUmVxdWVzdCgpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAobG9hZGVyLT5tX3BhcmFtZXRl
cnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8gJiYgIWVudHJ5LT5yZXNwb25zZSgpLmNvbnRhaW5zQ2Vy
dGlmaWNhdGVJbmZvKCkpIHsKLSAgICAgICAgICAgIGxvYWRlci0+c3RhcnROZXR3b3JrTG9hZCgp
OworICAgICAgICAgICAgbG9hZGVyLT5zdGFydE5ldHdvcmtMb2FkKGxvYWRlci0+b3JpZ2luYWxS
ZXF1ZXN0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChl
bnRyeS0+bmVlZHNWYWxpZGF0aW9uKCkpIHsKQEAgLTE2OSwxNCArMTU2LDI5IEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAgICAgIGxvYWRlci0+ZGlkUmV0cmlldmVD
YWNoZUVudHJ5KFdURjo6bW92ZShlbnRyeSkpOwogICAgIH0pOwogI2Vsc2UKLSAgICBzdGFydE5l
dHdvcmtMb2FkKCk7CisgICAgc3RhcnROZXR3b3JrTG9hZChvcmlnaW5hbFJlcXVlc3QoKSk7CiAj
ZW5kaWYKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQo
KQorc3RhdGljIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBjb25zdHJ1Y3ROZXR3b3JrTG9hZFBhcmFt
ZXRlcnMoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNv
bnN0IE9wdGlvbmFsPFJlc291cmNlUmVxdWVzdD4mIHVwZGF0ZWRSZXF1ZXN0KQogewotICAgIG1f
bmV0d29ya2luZ0NvbnRleHQgPSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKHNlc3Np
b25JRCgpLCBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCk7CisgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIG5ldHdvcmtMb2FkUGFyYW1ldGVyczsK
KyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMud2ViUGFnZUlEID0gcGFyYW1ldGVycy53ZWJQYWdl
SUQ7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLndlYkZyYW1lSUQgPSBwYXJhbWV0ZXJzLndl
YkZyYW1lSUQ7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLnNlc3Npb25JRCA9IHBhcmFtZXRl
cnMuc2Vzc2lvbklEOworICAgIG5ldHdvcmtMb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gdXBkYXRl
ZFJlcXVlc3QgPyB1cGRhdGVkUmVxdWVzdC52YWx1ZSgpIDogcGFyYW1ldGVycy5yZXF1ZXN0Owor
ICAgIG5ldHdvcmtMb2FkUGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3kgPSBwYXJhbWV0
ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeTsKKyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMuYWxs
b3dTdG9yZWRDcmVkZW50aWFscyA9IHBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFsczsK
KyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9IHBhcmFt
ZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKKyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMu
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IHBhcmFtZXRlcnMuc2hv
dWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsKKyAgICBuZXR3b3JrTG9hZFBh
cmFtZXRlcnMuZGVmZXJzTG9hZGluZyA9IHBhcmFtZXRlcnMuZGVmZXJzTG9hZGluZzsKKyAgICBu
ZXR3b3JrTG9hZFBhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8gPSBwYXJhbWV0ZXJzLm5l
ZWRzQ2VydGlmaWNhdGVJbmZvOwogCisgICAgcmV0dXJuIG5ldHdvcmtMb2FkUGFyYW1ldGVyczsK
K30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQoY29uc3Qg
T3B0aW9uYWw8UmVzb3VyY2VSZXF1ZXN0PiYgdXBkYXRlZFJlcXVlc3QpCit7CiAgICAgY29uc3Vt
ZVNhbmRib3hFeHRlbnNpb25zKCk7CiAKICAgICBpZiAoaXNTeW5jaHJvbm91cygpIHx8IG1fcGFy
YW1ldGVycy5tYXhpbXVtQnVmZmVyaW5nVGltZSA+IDBfbXMpCkBAIC0xODcsMTQgKzE4OSw3IEBA
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2FkKCkKICAgICAgICAg
bV9idWZmZXJlZERhdGFGb3JDYWNoZSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7
CiAjZW5kaWYKIAotICAgIGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFtZXRlcnMuY29udGVudFNu
aWZmaW5nUG9saWN5ID09IFNuaWZmQ29udGVudDsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQot
ICAgIFVOVVNFRF9QQVJBTShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBVc2UgdGhpcy4KLSAgICBt
X3Rhc2sgPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKCkpLT5jcmVh
dGVEYXRhVGFza1dpdGhSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsICp0aGlzKTsKLSAgICBtX3Rh
c2stPnJlc3VtZSgpOwotI2Vsc2UKLSAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVh
dGUobV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9jdXJyZW50UmVxdWVzdCwgdGhpcywgbV9k
ZWZlcnNMb2FkaW5nLCBzaG91bGRTbmlmZik7Ci0jZW5kaWYKKyAgICBtX25ldHdvcmtMb2FkID0g
c3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrTG9hZD4oKnRoaXMsIGNvbnN0cnVjdE5ldHdvcmtMb2Fk
UGFyYW1ldGVycyhtX3BhcmFtZXRlcnMsIHVwZGF0ZWRSZXF1ZXN0KSk7CiB9CiAKIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpAQCAtMjAy
LDE1ICsxOTcsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGlu
Zyhib29sIGRlZmVycykKICAgICBpZiAobV9kZWZlcnNMb2FkaW5nID09IGRlZmVycykKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKLSNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKQotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotI2Vsc2UKLSAgICBpZiAobV9oYW5kbGUpIHsKLSAgICAgICAgbV9oYW5kbGUt
PnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRp
ZgorCisgICAgbV9uZXR3b3JrTG9hZC0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworCiAgICAg
aWYgKCFtX2RlZmVyc0xvYWRpbmcpCiAgICAgICAgIHN0YXJ0KCk7CiB9CkBAIC0yMjMsNDIgKzIx
MiwyNCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgpCiAKICAgICBpbnZh
bGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0g
ICAgaWYgKG1fdGFzaykgewotICAgICAgICBtX3Rhc2stPmNsZWFyQ2xpZW50KCk7Ci0gICAgICAg
IG1fdGFzayA9IG51bGxwdHI7Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAobV9oYW5kbGUpIHsKLSAg
ICAgICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50KCk7Ci0gICAgICAgIG1faGFuZGxlID0gbnVsbHB0
cjsKLSAgICB9Ci0jZW5kaWYKKyAgICBtX25ldHdvcmtMb2FkID0gbnVsbHB0cjsKIAogICAgIC8v
IFRoaXMgd2lsbCBjYXVzZSBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgdG8gYmUgZGVzdHJveWVkIGFu
ZCB0aGVyZWZvcmUgd2UgZG8gaXQgbGFzdC4KICAgICBtX2Nvbm5lY3Rpb24tPmRpZENsZWFudXBS
ZXNvdXJjZUxvYWRlcigqdGhpcyk7CiB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpCiB7
Ci0gICAgQVNTRVJUKG1faGFuZGxlKTsKKyAgICBBU1NFUlQobV9uZXR3b3JrTG9hZCk7CiAgICAg
bV9kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCA9IHRydWU7CiB9Ci0jZW5kaWYKIAogdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBpZiAobV90YXNrKQotICAg
ICAgICBtX3Rhc2stPmNhbmNlbCgpOwotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgd2l0aCB0
aGUgbmV0d29yayBjYWNoZSBoZXJlLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAg
IGlmIChtX2hhbmRsZSAmJiAhbV9kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCkgewotICAgICAg
ICBtX2hhbmRsZS0+Y2FuY2VsKCk7CisgICAgaWYgKG1fbmV0d29ya0xvYWQgJiYgIW1fZGlkQ29u
dmVydEhhbmRsZVRvRG93bmxvYWQpIHsKKyAgICAgICAgbV9uZXR3b3JrTG9hZC0+Y2FuY2VsKCk7
CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICAgICAgaWYgKE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKQEAgLTI2OCwxNyArMjM5LDE0IEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgpCiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KLSNl
bmRpZgorCiAgICAgY2xlYW51cCgpOwogfQogCi1OZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlNob3Vs
ZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVk
RGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlY2Vp
dmVkUmVzcG9uc2UpCithdXRvIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpIC0+IFNob3VsZENv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlCiB7CiAgICAgbV9yZXNwb25zZSA9IHJlY2VpdmVkUmVz
cG9uc2U7CiAKLSAgICBtX3Jlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3Vy
Y2U6Ok5ldHdvcmspOwotICAgIGlmIChtX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8p
Ci0gICAgICAgIG1fcmVzcG9uc2UuaW5jbHVkZUNlcnRpZmljYXRlSW5mbygpOwogICAgIC8vIEZv
ciBtdWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jIGdldHMg
Y2FsbGVkIG11bHRpcGxlIHRpbWVzIGFuZCBidWZmZXJpbmcgd291bGQgcmVxdWlyZSBzcGVjaWFs
IGhhbmRsaW5nLgogICAgIGlmICghaXNTeW5jaHJvbm91cygpICYmIG1fcmVzcG9uc2UuaXNNdWx0
aXBhcnQoKSkKICAgICAgICAgbV9idWZmZXJlZERhdGEgPSBudWxscHRyOwpAQCAtMzIyLDcgKzI5
MCw3IEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVz
cG9uc2UgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzCiAgICAgcmV0dXJuIFNob3VsZENvbnRpbnVl
RGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXM7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpzaGFyZWREaWRSZWNlaXZlQnVmZmVyKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYg
YnVmZmVyLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkKK3ZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVy
LCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19D
QUNIRSkKICAgICBBU1NFUlQoIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pOwpAQCAtMzQ5LDcg
KzMxNyw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRSZWNlaXZlQnVm
ZmVyKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+CiAgICAgc2VuZEJ1ZmZlck1heWJlQWJv
cnRpbmcoKmJ1ZmZlciwgZW5jb2RlZERhdGFMZW5ndGgpOwogfQogCi12b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6c2hhcmVkRGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSkKK3Zv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hU
aW1lKQogewogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGlmIChOZXR3b3JrQ2FjaGU6
OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKSB7CkBAIC00MDQsNyArMzcyLDcgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRp
bWUpCiAgICAgY2xlYW51cCgpOwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hh
cmVkRGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3ZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGYWlsTG9hZGluZyhjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKIHsKICAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKIApAQCAtNDIxLDIyMSArMzg5
LDQ0IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRGYWlsKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQogICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewotICAgIC8v
IFdlIG9ubHkgZXhwZWN0IHRvIGdldCB0aGUgd2lsbFNlbmRSZXF1ZXN0IGNhbGxiYWNrIGZyb20g
UmVzb3VyY2VIYW5kbGUgYXMgdGhlIHJlc3VsdCBvZiBhIHJlZGlyZWN0LgotICAgIEFTU0VSVCgh
cmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIG1fY3VycmVudFJlcXVlc3QgPSByZXF1ZXN0OwotCiAjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCiAgICAgV2ViQ29yZTo6dXBkYXRlUmVkaXJlY3RDaGFpblN0YXR1cyhtX3JlZGly
ZWN0Q2hhaW5DYWNoZVN0YXR1cywgcmVkaXJlY3RSZXNwb25zZSk7CiAjZW5kaWYKIAogICAgIGlm
IChpc1N5bmNocm9ub3VzKCkpIHsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG92ZXJyaWRlblJl
cXVlc3QgPSByZXF1ZXN0OwogICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBmaXhl
ZCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZvciBjcm9zcy1kb21haW4g
cmVxdWVzdHMuCiAgICAgICAgIC8vIFRoaXMgaW5jbHVkZXMgYXQgbGVhc3QgdXBkYXRpbmcgaG9z
dCByZWNvcmRzLCBhbmQgY29tcGFyaW5nIHRoZSBjdXJyZW50IHJlcXVlc3QgaW5zdGVhZCBvZiB0
aGUgb3JpZ2luYWwgcmVxdWVzdCBoZXJlLgotICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBv
cnRBcmVFcXVhbChvcmlnaW5hbFJlcXVlc3QoKS51cmwoKSwgbV9jdXJyZW50UmVxdWVzdC51cmwo
KSkpIHsKKyAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwob3JpZ2luYWxS
ZXF1ZXN0KCkudXJsKCksIHJlcXVlc3QudXJsKCkpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9z
eW5jaHJvbm91c0xvYWREYXRhLT5lcnJvci5pc051bGwoKSk7CiAgICAgICAgICAgICBtX3N5bmNo
cm9ub3VzTG9hZERhdGEtPmVycm9yID0gU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OnBsYXRmb3Jt
QmFkUmVzcG9uc2VFcnJvcigpOwotICAgICAgICAgICAgbV9jdXJyZW50UmVxdWVzdCA9IFJlc291
cmNlUmVxdWVzdCgpOworICAgICAgICAgICAgbV9uZXR3b3JrTG9hZC0+Y2xlYXJDdXJyZW50UmVx
dWVzdCgpOworICAgICAgICAgICAgb3ZlcnJpZGVuUmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdCgp
OwogICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KG1fY3VycmVudFJl
cXVlc3QpOworICAgICAgICBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChvdmVycmlkZW5SZXF1ZXN0
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVz
c2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSkpOworICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdl
czo6V2ViUmVzb3VyY2VMb2FkZXI6OldpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJl
c3BvbnNlKSk7CiB9CiAgICAgCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLQotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgc2hhcmVkV2lsbFNlbmRSZWRp
cmVjdGVkUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
cmVxdWVzdCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2hh
bGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Us
IHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VEaXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3JlZGVu
dGlhbCgpKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5j
dGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShy
ZXNwb25zZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoUmVzcG9uc2VEaXNwb3NpdGlvbjo6QWxs
b3cpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAgQVNTRVJUKGJ1ZmZl
cik7Ci0gICAgYXV0byBzaXplID0gYnVmZmVyLT5zaXplKCk7Ci0gICAgc2hhcmVkRGlkUmVjZWl2
ZUJ1ZmZlcihXVEY6Om1vdmUoYnVmZmVyKSwgc2l6ZSk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiBlcnJvcikKLXsKLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCi0gICAgICAgIHNoYXJlZERp
ZEZpbmlzaExvYWRpbmcoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBzaGFyZWREaWRGYWlsKGVycm9yKTsKLX0KLQotI2Vsc2UKLQotdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCi17
Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0gICAgaWYg
KHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNlKSA9PSBTaG91bGRDb250
aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQotICAgICAgICBtX2hhbmRsZS0+Y29udGludWVE
aWRSZWNlaXZlUmVzcG9uc2UoKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRp
ZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywgdW5z
aWduZWQgLyogbGVuZ3RoICovLCBpbnQgLyogZW5jb2RlZERhdGFMZW5ndGggKi8pCi17Ci0gICAg
Ly8gVGhlIE5ldHdvcmtQcm9jZXNzIHNob3VsZCBuZXZlciBnZXQgYSBkaWRSZWNlaXZlRGF0YSBj
YWxsYmFjay4KLSAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIHVzaW5nIGRpZFJlY2VpdmVCdWZm
ZXIuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRh
TGVuZ3RoKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUp
OwotICAgIHNoYXJlZERpZFJlY2VpdmVCdWZmZXIoV1RGOjptb3ZlKGJ1ZmZlciksIHJlcG9ydGVk
RW5jb2RlZERhdGFMZW5ndGgpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlk
RmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBkb3VibGUgZmluaXNoVGltZSkK
LXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLSAgICBz
aGFyZWREaWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwotfQotCi12b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgIWhhbmRsZSB8fCBo
YW5kbGUgPT0gbV9oYW5kbGUpOwotICAgIHNoYXJlZERpZEZhaWwoZXJyb3IpOwotfQotCi12b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxl
LCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotICAgIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVl
c3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoTkVUV09S
S19TRVNTSU9OKQotICAgIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkKIHsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVBy
ZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRl
SFRUUEJvZHkpKTsKLSNlbGlmIFVTRShTT1VQKQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgUmVz
b3VyY2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGllcy4g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYxMjcuCi0gICAg
bV9jdXJyZW50UmVxdWVzdC51cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGll
cyhuZXdSZXF1ZXN0KTsKLSNlbmRpZgotCi0gICAgaWYgKG1fY3VycmVudFJlcXVlc3QuaXNOdWxs
KCkpIHsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgICAgICAvLyBGSVhNRTogRG8gc29t
ZXRoaW5nIGhlcmUuCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAgICAgICBt
X2hhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNl
bGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAvLyBGSVhNRTogRG8gc29tZXRo
aW5nIGhlcmUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCi0gICAgbV9oYW5kbGUtPmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QpOwotI2VuZGlmCisgICAgbV9u
ZXR3b3JrTG9hZC0+Y29udGludWVXaWxsU2VuZFJlcXVlc3QobmV3UmVxdWVzdCk7CiB9CiAKIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCiB7
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNoZWNrIG9uY2UgQmxvYlJlc291cmNlSGFuZGxl
IGltcGxlbWVudHMgZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMgY29ycmVjdGx5LgotICAgIC8vIEN1
cnJlbnRseSwgaXQgZG9lcyBub3Qgd2FpdCBmb3IgcmVzcG9uc2UsIHNvIHRoZSBsb2FkIGlzIGxp
a2VseSB0byBmaW5pc2ggYmVmb3JlIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlLgotI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwotI2Vu
ZGlmCisgICAgbV9uZXR3b3JrTG9hZC0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0K
IAotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBsb25n
IGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3ZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0
ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQogewotICAgIEFT
U0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCiAgICAgaWYgKCFpc1N5
bmNocm9ub3VzKCkpCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpE
aWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCkpOwogfQogCi12b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6d2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQot
ewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCi0gICAg
ZGlkRmFpbChoYW5kbGUsIFdlYktpdDo6YmxvY2tlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsK
LX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1f
aGFuZGxlKTsKLQotICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmNhbm5vdFNob3dVUkxFcnJv
cihtX2N1cnJlbnRSZXF1ZXN0KSk7Ci19Ci0KLWJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewotICAg
IEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUgfHwgIW1faGFuZGxlKTsg
Ly8gbV9oYW5kbGUgd2lsbCBiZSAwIGlmIGNhbGxlZCBmcm9tIFJlc291cmNlSGFuZGxlOjpzdGFy
dCgpLgotCi0gICAgLy8gV2hlbiB0aGUgV2ViUHJvY2VzcyBpcyBoYW5kbGluZyBsb2FkaW5nIGEg
Y2xpZW50IGlzIGNvbnN1bHRlZCBlYWNoIHRpbWUgdGhpcyBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZSBxdWVzdGlvbiBpcyBhc2tlZC4KLSAgICAvLyBJbiBOZXR3b3JrUHJvY2VzcyBtb2RlIHdl
IGFzayB0aGUgV2ViUHJvY2VzcyBjbGllbnQgdXAgZnJvbnQgb25jZSBhbmQgdGhlbiByZXVzZSB0
aGUgY2FjaGVkIGFuc3dlci4KLQotICAgIC8vIFdlIHN0aWxsIG5lZWQgdGhpcyBzeW5jIHZlcnNp
b24sIGJlY2F1c2UgUmVzb3VyY2VIYW5kbGUgaXRzZWxmIHVzZXMgaXQgaW50ZXJuYWxseSwgZXZl
biB3aGVuIHRoZSBkZWxlZ2F0ZSB1c2VzIGFuIGFzeW5jIG9uZS4KLQotICAgIHJldHVybiBtX3Bh
cmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
OwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRs
ZSA9PSBtX2hhbmRsZSk7Ci0gICAgLy8gTmV0d29ya1Jlc291cmNlTG9hZGVyIGRvZXMgbm90IGtu
b3cgd2hldGhlciB0aGUgcmVxdWVzdCBpcyBjcm9zcyBvcmlnaW4sIHNvIFdlYiBwcm9jZXNzIGNv
bXB1dGVzIGFuIGFwcGxpY2FibGUgY3JlZGVudGlhbCBwb2xpY3kgZm9yIGl0LgotICAgIEFTU0VS
VChtX3BhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSAhPSBEb05vdEFza0NsaWVudEZv
ckNyb3NzT3JpZ2luQ3JlZGVudGlhbHMpOwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5jbGllbnRD
cmVkZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpIHsKLSAg
ICAgICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkUmVxdWVzdFRv
Q29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFu
YWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMud2Vi
UGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgY2hhbGxlbmdlKTsKLX0KLQotdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQotICAgIC8v
IFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgbm90IG5lZWRlZCAoc2VlIDxyZGFyOi8vcHJvYmxl
bS84OTYwMTI0PikuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhh
bmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQotICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKLSAg
ICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0
KSk7Ci19Ci0KLSNlbmRpZiAvLyAhVVNFKE5FVFdPUktfU0VTU0lPTikKLQogdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCgpCiB7CiAgICAgaWYg
KGlzU3luY2hyb25vdXMoKSkKQEAgLTY0OCw5ICs0MzksOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c3RhcnRCdWZmZXJpbmdUaW1lcklmTmVlZGVkKCkKIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpidWZmZXJpbmdUaW1lckZpcmVkKCkKIHsKICAgICBBU1NFUlQobV9idWZmZXJl
ZERhdGEpOwotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVChtX2hhbmRsZSk7
Ci0jZW5kaWYKKyAgICBBU1NFUlQobV9uZXR3b3JrTG9hZCk7CisKICAgICBpZiAoIW1fYnVmZmVy
ZWREYXRhLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNzE4LDI0ICs1MDgsMjMgQEAg
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQ2FjaGVFbnRyeShzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya0NhY2hlOjoKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnZh
bGlkYXRlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50
cnkpCiB7Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUKCFtX2hhbmRsZSk7
Ci0jZW5kaWYKKyAgICBBU1NFUlQoIW1fbmV0d29ya0xvYWQpOwogCiAgICAgLy8gSWYgdGhlIHJl
cXVlc3QgaXMgYWxyZWFkeSBjb25kaXRpb25hbCB0aGVuIHRoZSByZXZhbGlkYXRpb24gd2FzIG5v
dCB0cmlnZ2VyZWQgYnkgdGhlIGRpc2sgY2FjaGUKICAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBv
dmVyd3JpdGUgdGhlIGV4aXN0aW5nIGNvbmRpdGlvbmFsIGhlYWRlcnMuCi0gICAgaWYgKCFtX2N1
cnJlbnRSZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkgeworICAgIFJlc291cmNlUmVxdWVzdCByZXZh
bGlkYXRpb25SZXF1ZXN0ID0gb3JpZ2luYWxSZXF1ZXN0KCk7CisgICAgaWYgKCFyZXZhbGlkYXRp
b25SZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkgewogICAgICAgICBTdHJpbmcgZVRhZyA9IGVudHJ5
LT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6RVRh
Zyk7CiAgICAgICAgIFN0cmluZyBsYXN0TW9kaWZpZWQgPSBlbnRyeS0+cmVzcG9uc2UoKS5odHRw
SGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6Okxhc3RNb2RpZmllZCk7CiAgICAg
ICAgIGlmICghZVRhZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRSZXF1ZXN0LnNl
dEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gsIGVU
YWcpOworICAgICAgICAgICAgcmV2YWxpZGF0aW9uUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
V2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKICAgICAgICAgaWYg
KCFsYXN0TW9kaWZpZWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50UmVxdWVzdC5z
ZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5j
ZSwgbGFzdE1vZGlmaWVkKTsKKyAgICAgICAgICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UsIGxh
c3RNb2RpZmllZCk7CiAgICAgfQogCiAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiA9IFdU
Rjo6bW92ZShlbnRyeSk7CiAKLSAgICBzdGFydE5ldHdvcmtMb2FkKCk7CisgICAgc3RhcnROZXR3
b3JrTG9hZChyZXZhbGlkYXRpb25SZXF1ZXN0KTsKIH0KICNlbmRpZgogCkBAIC03ODMsNTMgKzU3
MiwxOSBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nT25GYWlsdXJl
KFQmJiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlUwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LSNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKSAmJiAhVVNFKE5FVFdPUktf
U0VTU0lPTikKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUHJv
dGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKGNvbnN0IFByb3Rl
Y3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0K
LSAgICAvLyBIYW5kbGUgc2VydmVyIHRydXN0IGV2YWx1YXRpb24gYXQgcGxhdGZvcm0tbGV2ZWwg
aWYgcmVxdWVzdGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KLSAgICBpZiAocHJvdGVjdGlv
blNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPT0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGlj
YXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQKLSAgICAgICAgJiYgIU5l
dHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVh
dGlvbigpKSB7Ci0gICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNTeW5j
aHJvbm91cygpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNrIHRoZSBXZWJQcm9j
ZXNzIGxpa2UgdGhlIGFzeW5jaHJvbm91cyBjYXNlIGJlbG93IGRvZXMuCi0gICAgICAgIC8vIFRo
aXMgaXMgY3VycmVudGx5IGltcG9zc2libGUgYXMgdGhlIFdlYlByb2Nlc3MgaXMgYmxvY2tlZCB3
YWl0aW5nIG9uIHRoaXMgc3luY2hyb25vdXMgbG9hZC4KLSAgICAgICAgLy8gSXQncyBwb3NzaWJs
ZSB0aGF0IHdlIGNhbiBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBVSSBwcm9jZXNzIHRvIHJlc29sdmUg
dGhpcy4KLSAgICAgICAgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNlbmRBYm9ydGluZ09uRmFp
bHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7Ci19Ci0jZW5kaWYKLQogI2lmIFVTRShQ
Uk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVz
dWx0KQotewotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gRklYTUU6IERvIHNvbWV0
aGluZyBoZXJlLgotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc2VuZEFib3J0aW5nT25GYWls
dXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6Q2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKICNlbHNlCi0gICAgbV9oYW5kbGUtPmNv
bnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShyZXN1bHQpOwotI2Vu
ZGlmCi19CisgICAgVU5VU0VEX1BBUkFNKHByb3RlY3Rpb25TcGFjZSk7CiAjZW5kaWYKLQotI2lm
IFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykgJiYgIVVTRShORVRXT1JLX1NFU1NJ
T04pCi1ib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3VwcG9ydHNEYXRhQXJyYXkoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheShSZXNvdXJjZUhhbmRsZSosIENG
QXJyYXlSZWYpCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UoYm9vbCByZXN1bHQpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX25ldHdvcmtMb2FkLT5jb250aW51ZUNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKIH0KICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRl
ci5oCmluZGV4IDhiNDIzZGMuLjFhZTNhZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0zMSwzMSArMzEsMTcg
QEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgi
CiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIk5ldHdvcmtMb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvQ2FjaGVWYWxpZGF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVy
cm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXNwb25zZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8
d3RmL1J1bkxvb3AuaD4KLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0jaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb24uaCIKLSNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNs
aWVudC5oPgotI2VuZGlmCi0KLXR5cGVkZWYgY29uc3Qgc3RydWN0IF9DRkNhY2hlZFVSTFJlc3Bv
bnNlKiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmOworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCbG9iRGF0YUZpbGVSZWZlcmVuY2U7Ci0jaWYg
IVVTRShORVRXT1JLX1NFU1NJT04pCi1jbGFzcyBSZXNvdXJjZUhhbmRsZTsKLSNlbmRpZgogY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OwogfQogCkBAIC02MywxNiArNDksMTIgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogY2xhc3MgTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM7Ci1jbGFzcyBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDsKK2NsYXNzIE5ldHdvcmtMb2FkOwogY2xhc3MgU2FuZGJveEV4dGVuc2lvbjsKIAogY2xhc3Mg
TmV0d29ya1Jlc291cmNlTG9hZGVyCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUmVz
b3VyY2VMb2FkZXI+Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAsIHB1YmxpYyBOZXR3
b3JrU2Vzc2lvblRhc2tDbGllbnQKLSNlbHNlCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVDbGllbnQKLSNlbmRpZgorICAgICwgcHVibGljIE5ldHdvcmtMb2FkQ2xpZW50CiAg
ICAgLCBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gY3JlYXRlKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29u
bmVjdGlvbikKQEAgLTg4LDEyICs3MCw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzLnJlcXVlc3Q7IH0KIAotICAgIC8vIENoYW5nZXMgd2l0aCByZWRpcmVjdHMuCi0gICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCgpIHsgcmV0dXJuIG1fY3Vy
cmVudFJlcXVlc3Q7IH0KKyAgICBOZXR3b3JrTG9hZCogbmV0d29ya0xvYWQoKSBjb25zdCB7IHJl
dHVybiBtX25ldHdvcmtMb2FkLmdldCgpOyB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikK
LSAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9o
YW5kbGUuZ2V0KCk7IH0KLSNlbmRpZgogICAgIHZvaWQgZGlkQ29udmVydEhhbmRsZVRvRG93bmxv
YWQoKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKQEAgLTEwMyw3ICs4MSw5IEBAIHB1YmxpYzoKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHN0YXRpYyBzaXplX3QgZmlsZUJhY2tlZFJlc291cmNl
TWluaW11bVNpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhD
RkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBvdmVycmlkZTsKICNlbmRpZgorCiAgICAgLy8gTWVzc2Fn
ZSBoYW5kbGVycy4KICAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKTsKIApAQCAtMTI2LDYg
KzEwNiwxNiBAQCBwdWJsaWM6CiAKICAgICBzdHJ1Y3QgU3luY2hyb25vdXNMb2FkRGF0YTsKIAor
ICAgIC8vIE5ldHdvcmtMb2FkQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1
bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRl
c1RvQmVTZW50KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTaG91bGRDb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVy
KFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIGludCByZXBvcnRlZEVuY29kZWREYXRh
TGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3Vi
bGUgZmluaXNoVGltZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxMb2FkaW5n
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAg
ICBOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMmLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIFBhc3NSZWZQdHI8TWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpE
ZWxheWVkUmVwbHk+KTsKIApAQCAtMTMzLDYzICsxMjMsMTIgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmlkZW50aWZpZXI7IH0KIAotICAgIGVudW0gU2hvdWxk
Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgewotICAgICAgICBZZXMsCi0gICAgICAgIE5vCi0g
ICAgfTsKLSAgICBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBzaGFyZWREaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2
b2lkIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQg
c2hhcmVkRGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBp
bnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCk7Ci0gICAgdm9pZCBzaGFyZWREaWRGYWlsKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2b2lkIHNoYXJlZERpZEZpbmlzaExv
YWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpOwotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAg
ICAvLyBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJm
b3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+KSBmaW5hbCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0
aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+KSBmaW5hbCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSBmaW5hbCBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4mJikgZmluYWwgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENv
bXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbCBvdmVy
cmlkZTsKLSNlbHNlCi0gICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZv
aWQgd2lsbFNlbmRSZXF1ZXN0QXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERh
dGEoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50
LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3Qg
Y2hhciosIHVuc2lnbmVkLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dV
UkwoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZWNl
aXZlZENhbmNlbGxhdGlvbihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHVz
ZXNBc3luY0NhbGxiYWNrcygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgbG9hZGluZ1N5bmNocm9ub3VzWEhSKCkgb3ZlcnJpZGUgeyByZXR1cm4gaXNTeW5jaHJv
bm91cygpOyB9Ci0KLSNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotICAg
IHZpcnR1YWwgdm9pZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2Um
KSBvdmVycmlkZTsKLSNlbmRpZgotI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFD
SykKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEYXRhQXJyYXkoKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSos
IENGQXJyYXlSZWYpIG92ZXJyaWRlOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaWYg
VVNFKENGTkVUV09SSykKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIG92ZXJyaWRl
OwotI2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKikgb3ZlcnJpZGU7Ci0jZW5k
aWYKLSNlbmRpZgotI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCi0KICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKICAgICB2b2lkIGRpZFJldHJpZXZlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4pOwogICAgIHZvaWQgdmFsaWRhdGVDYWNoZUVudHJ5
KHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5Pik7CiAjZW5kaWYKIAotICAgIHZv
aWQgc3RhcnROZXR3b3JrTG9hZCgpOworICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZChjb25zdCBP
cHRpb25hbDxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+JiB1cGRhdGVkUmVxdWVzdCA9IHsgfSk7
CiAgICAgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogCiAgICAgdm9pZCBjbGVh
bnVwKCk7CkBAIC0yMDAsMjUgKzEzOSwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYnVmZmVyaW5n
VGltZXJGaXJlZCgpOwogICAgIGJvb2wgc2VuZEJ1ZmZlck1heWJlQWJvcnRpbmcoY29uc3QgV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyJiwgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoKTsKIAotICAgIGJv
b2wgaXNTeW5jaHJvbm91cygpIGNvbnN0OwotCiAgICAgdm9pZCBjb25zdW1lU2FuZGJveEV4dGVu
c2lvbnMoKTsKICAgICB2b2lkIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoVCYmIG1lc3Nh
Z2UsIHVuc2lnbmVkIG1lc3NhZ2VTZW5kRmxhZ3MgPSAwKTsKIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrTG9hZD4gbV9uZXR3b3JrTG9hZDsKICAgICBjb25zdCBOZXR3b3JrUmVzb3VyY2VM
b2FkUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CiAKICAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+IG1fY29ubmVjdGlvbjsKIAotICAgIFJlZlB0cjxSZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1fdGFzazsKLSNlbHNlCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKLSNlbmRpZgotCi0gICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7CiAgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogCiAgICAgc2l6ZV90IG1fYnl0ZXNSZWNlaXZlZDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOThlNDkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFj
Lm1tCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisjaW1wb3J0ICJOZXR3b3JrTG9hZC5oIgorCisj
aW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJj
ZUhhbmRsZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorCit2b2lkIE5ldHdvcmtMb2FkOjp3aWxsQ2FjaGVS
ZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENGQ2FjaGVkVVJMUmVzcG9uc2VS
ZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1f
aGFuZGxlKTsKKworICAgIG1fY2xpZW50LndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoY2ZSZXNwb25z
ZSk7CisKKyAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShjZlJlc3BvbnNl
KTsKK30KKworI2VsaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKK3ZvaWQgTmV0d29ya0xvYWQ6
OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNDYWNoZWRV
UkxSZXNwb25zZSAqbnNSZXNwb25zZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFu
ZGxlID09IG1faGFuZGxlKTsKKworICAgIG1fY2xpZW50LndpbGxDYWNoZVJlc3BvbnNlQXN5bmMo
W25zUmVzcG9uc2UgX0NGQ2FjaGVkVVJMUmVzcG9uc2VdKTsKKworICAgIG1faGFuZGxlLT5jb250
aW51ZVdpbGxDYWNoZVJlc3BvbnNlKG5zUmVzcG9uc2UpOworfQorCisjZW5kaWYgLy8gIVVTRShD
Rk5FVFdPUkspCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5F
VFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tCmluZGV4IGY4MjIyN2EuLjhh
Mjg2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQpAQCAtMzMsNiArMzMsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VI
YW5kbGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW1wb3J0IDx3dGYv
TWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtODIsMzIgKzgz
LDEyIEBAIHNpemVfdCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmZpbGVCYWNrZWRSZXNvdXJjZU1p
bmltdW1TaXplKCkKICAgICByZXR1cm4gU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpOwog
fQogCi0jaWYgVVNFKENGTkVUV09SSykKLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ondp
bGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZiBjZlJlc3BvbnNlKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxD
YWNoZVJlc3BvbnNlQXN5bmMoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQogewot
ICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCiAgICAgaWYg
KG1fYnl0ZXNSZWNlaXZlZCA+PSBmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpKQogICAg
ICAgICBOZXR3b3JrRGlza0NhY2hlTW9uaXRvcjo6bW9uaXRvckZpbGVCYWNraW5nU3RvcmVDcmVh
dGlvbihjZlJlc3BvbnNlLCB0aGlzKTsKLQotICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxDYWNo
ZVJlc3BvbnNlKGNmUmVzcG9uc2UpOwogfQogCi0jZWxpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikK
LQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNDYWNoZWRVUkxSZXNwb25zZSAqbnNSZXNwb25zZSkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQotICAgIGlm
IChtX2J5dGVzUmVjZWl2ZWQgPj0gZmlsZUJhY2tlZFJlc291cmNlTWluaW11bVNpemUoKSkKLSAg
ICAgICAgTmV0d29ya0Rpc2tDYWNoZU1vbml0b3I6Om1vbml0b3JGaWxlQmFja2luZ1N0b3JlQ3Jl
YXRpb24oW25zUmVzcG9uc2UgX0NGQ2FjaGVkVVJMUmVzcG9uc2VdLCB0aGlzKTsKLQotICAgIG1f
aGFuZGxlLT5jb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKG5zUmVzcG9uc2UpOwotfQotCi0jZW5k
aWYgLy8gIVVTRShDRk5FVFdPUkspCi0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYg
Ly8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzMzU4NGEwLi4zNWQ5NzRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MTgwLDYgKzExODAsNyBAQAogCQk4MzRCMjUxMjFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0Nh
Y2hlU3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM0QjI1MTAxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3Mu
aCAqLzsgfTsKIAkJODM2MDM0OUYxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNl
VHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNw
cCAqLzsgfTsKIAkJODM2MDM0QTAxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNl
VHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODM2MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICov
OyB9OworCQk4MzZFRUI4MDFCRTlFQzlFMDA2QjRCODIgLyogTmV0d29ya0xvYWRNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzZFRUI3RjFCRTlF
QzlFMDA2QjRCODIgLyogTmV0d29ya0xvYWRNYWMubW0gKi87IH07CiAJCTgzNzJEQjI1MUE2NzRD
OEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjQxQTY3NEM4RjAwQzY5
N0M1IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODM3MkRCMjgxQTY3NTYyODAwQzY5N0M1
IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyog
V2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJODM3MkRCMjkxQTY3
NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjcxQTY3NTYyODAw
QzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyB9OwpAQCAtMTE4
OCw3ICsxMTg5LDEyIEBACiAJCTgzODkxQjY5MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tEaWFnbm9z
dGljTG9nZ2luZ0RlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4Mzg5MUI2ODFBNjhCRUJDMDAzMEYzODYgLyogX1dLRGlhZ25vc3RpY0xvZ2dp
bmdEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTgzODkxQjZDMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM4OTFC
NkExQTY4QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CiAJ
CTgzODkxQjZEMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzODkxQjZCMUE2
OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbSAqLzsgfTsKKwkJODM5
MTQ5NjQxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzkxNDk2MjFCRUE4Mzg1
MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcCAqLzsgfTsKKwkJODM5MTQ5NjUx
QkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM5MTQ5NjMxQkVBODM4NTAwRDJEOTUz
IC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oICovOyB9OworCQk4Mzk5MDIwMjFCRTlBMDJCMDAw
RjM2NTMgLyogTmV0d29ya0xvYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODM5OTAxRkYxQkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNw
cCAqLzsgfTsKKwkJODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Mzk5MDFGRTFCRTlB
MDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLzsgfTsKIAkJODNCRENDQjkxQUM1RkRCNjAw
M0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODNCRENDQjgxQUM1RkRCNjAwM0Y2NDQxIC8qIE5l
dHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwICovOyB9OworCQk4M0Q0NTRENzFCRTlEM0M0MDA2Qzkz
QkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzRDQ1NEQ2MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENs
aWVudC5oICovOyB9OwogCQk4NDQ3Nzg1MzE3NkZDQzA4MDBDREM3QkIgLyogSW5qZWN0ZWRCdW5k
bGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDQ3Nzg1MTE3NkZDQUMxMDBDREM3QkIgLyogSW5qZWN0ZWRCdW5k
bGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlLmggKi87IH07CiAJCTg2ODE2MEQwMTg3NjQ1NTcwMDIx
RTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4MTYwQ0YxODc2NDUzNzAwMjFFNzlEIC8qIFdpbmRv
d1NlcnZlckNvbm5lY3Rpb24ubW0gKi87IH07CiAJCTg2RTY3QTI1MTkxMEI5RDEwMDAwNEFCNyAv
KiBQcm9jZXNzVGhyb3R0bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkU2N0EyMTE5MEY0MTE4MDAwMDRBQjcgLyogUHJvY2Vzc1Rocm90dGxlci5o
ICovOyB9OwpAQCAtMzQwOCw2ICszNDE0LDcgQEAKIAkJODM0QjI1MTAxQTg0MkM4NzAwQ0ZCMTUw
IC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNRTGl0ZURhdGFi
YXNlVHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNjAzNDlFMUFD
QjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNkVFQjdGMUJFOUVDOUUwMDZCNEI4MiAvKiBOZXR3b3Jr
TG9hZE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdv
cmtMb2FkTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNDFBNjc0
QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8q
IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2Vi
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzQxNiw3ICszNDIzLDEyIEBACiAJCTgzODkxQjY4MUE2OEJFQkMwMDMw
RjM4NiAvKiBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFCNkExQTY4QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkx
QjZCMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzkxNDk2MjFCRUE4Mzg1MDBEMkQ5
NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IE5ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHA7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4MzkxNDk2MzFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtMb2FkUGFyYW1ldGVycy5o
OyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzOTkwMUZFMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3Jr
TG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrTG9hZC5oOyBw
YXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODM5OTAxRkYxQkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtMb2FkLmNwcDsgcGF0aCA9
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODNCRENDQjgxQUM1RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3Rh
dGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzRDQ1NEQ2MUJFOUQz
QzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBOZXR3b3JrTG9hZENsaWVudC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0xvYWRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ0Nzc4NTEx
NzZGQ0FDMTAwQ0RDN0JCIC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RS
ZXN1bHRNZWRpYVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4MTYwQ0Qx
ODc2M0Q0QjAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2luZG93U2VydmVyQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjgxNjBDRjE4NzY0NTM3MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTk5LDYgKzU2MTEsMTEgQEAKIAkJCQk1MTNBMTY0OTE2
MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAog
CQkJCTUxM0ExNjRBMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oICovLAogCQkJCTUxM0ExNjRCMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKKwkJCQk4Mzk5MDFGRjFCRTlBMDFCMDAw
RjM2NTMgLyogTmV0d29ya0xvYWQuY3BwICovLAorCQkJCTgzOTkwMUZFMUJFOUEwMUIwMDBGMzY1
MyAvKiBOZXR3b3JrTG9hZC5oICovLAorCQkJCTgzRDQ1NEQ2MUJFOUQzQzQwMDZDOTNCRCAvKiBO
ZXR3b3JrTG9hZENsaWVudC5oICovLAorCQkJCTgzOTE0OTYyMUJFQTgzODUwMEQyRDk1MyAvKiBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwICovLAorCQkJCTgzOTE0OTYzMUJFQTgzODUwMEQyRDk1
MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCAqLywKIAkJCQk1MTBDQzdERjE2MTM4RTI5MDBE
MDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuY3BwICovLAogCQkJCTUxMENDN0UwMTYxMzhFMjkwMEQw
M0VEMyAvKiBOZXR3b3JrUHJvY2Vzcy5oICovLAogCQkJCTUxQThBNjE3MTYyN0Y1QkIwMDBEOTBF
OSAvKiBOZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKQEAgLTU2MTksNiArNTYzNiw3IEBA
CiAJCQkJRTE3QUUyQzExNkI5QzEzOTAwMUM0MkYxIC8qIGNvbS5hcHBsZS5XZWJLaXQuTmV0d29y
a1Byb2Nlc3Muc2IuaW4gKi8sCiAJCQkJNTE2N0VFOUUxNzAzNzdCRjAwNzY4MUNBIC8qIE5ldHdv
cmtEaXNrQ2FjaGVNb25pdG9yLmggKi8sCiAJCQkJNTE2N0VFOUYxNzAzNzdCRjAwNzY4MUNBIC8q
IE5ldHdvcmtEaXNrQ2FjaGVNb25pdG9yLm1tICovLAorCQkJCTgzNkVFQjdGMUJFOUVDOUUwMDZC
NEI4MiAvKiBOZXR3b3JrTG9hZE1hYy5tbSAqLywKIAkJCQk1MUE4QTYxNTE2MjdGM0Y5MDAwRDkw
RTkgLyogTmV0d29ya1Byb2Nlc3NNYWMubW0gKi8sCiAJCQkJNTFFM0I2N0UxNkYyNjZCMzAwOTk2
OERDIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbSAqLywKIAkJCQlFMUI3ODQ3MjE2M0Yy
NTNFMDAwN0I2OTIgLyogUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gKi8sCkBAIC03NjQzLDYg
Kzc2NjEsNyBAQAogCQkJCTM3NjMxMUZEMUEzRkI1RjcwMDVBMkU1MSAvKiBfV0tTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc2MzExRkUxQTNGQjYwMDAw
NUEyRTUxIC8qIF9XS1NhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBMDAyRDQ0MTk2QjMzODkwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTgzOTkwMjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3Jr
TG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwMDJENDMxOTZCMzM3MDAwQjlBRDQ0IC8qIF9X
S1Nlc3Npb25TdGF0ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDZCMzcxQjE4QTk2
N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWlsVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRB
Q0U2NEUxOEFEQkZGMDAwRTRDQTc2IC8qIF9XS1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCkBAIC03OTEwLDYgKzc5MjksNyBAQAogCQkJCTFBOEVGNENCMTI1MjQwMzcwMEY3
MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVG
OTZGMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUExNzk3ODAxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0
aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJODNENDU0RDcxQkU5RDNDNDAwNkM5
M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzNGOEM5MTE3
M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBRUZDQzEyMTFEMDFGOTYwMDgyMTlEMyAvKiBQbHVnaW5JbmZvU3RvcmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBM0Q2MTAyMTNBN0NDMkEwMEY5NUQ0RSAvKiBQbHVnaW5Nb2R1bGVJbmZvLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc5NjIsNiArNzk4Miw3IEBACiAJCQkJMUFBQjRBOEQxMjk2RjBB
MjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRTU1
MkM1MTZBRTA2NUYwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMUMxQzE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5n
VHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5oIGluIEhlYWRlcnMgKi8sCisJCQkJODM5MTQ5
NjUxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTFEMTMwNTQxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFEMTMwNTYxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1S
ZXNwb25zZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNzkwODhGMTY5QkFBNkEwMDY5MDRD
NyAvKiBTZWNJdGVtU2hpbS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NTI5LDYgKzk1NTAsNyBAQAog
CQkJCUJDMDMyREE1MTBGNDM3RDEwMDU4QzE1QSAvKiBBcmd1bWVudERlY29kZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMwMzJEQTcxMEY0MzdEMTAwNThDMTVBIC8qIEFyZ3VtZW50RW5jb2Rl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTlDNEE1ODE4QjgxMTc0MDA3QkRDQjYgLyogQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODM5OTAyMDIxQkU5
QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUU3
NzI3MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3luY1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNFRTk2NkMxMTJGQUY1NzAwNkJDQzI0IC8qIEF0dGFjaG1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTFBMzE3MzUxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0g
aW4gU291cmNlcyAqLywKQEAgLTk1NDcsNiArOTU2OSw3IEBACiAJCQkJOUY1NEY4OEYxNjQ4OEU4
NzAwN0RGODFBIC8qIENoaWxkUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRkFF
QzNCMUIwNjU3NjgwMDA5QzRFNyAvKiBDaGlsZFByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTE1MTNDNjYxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vz
c1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTgzOTE0OTY0MUJFQTgzODUwMEQyRDk1MyAv
KiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyQTRCMEUx
NTg2QTIyNDAwOTBDOUU5IC8qIENvbG9yU3BhY2VEYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUE2RjlGQjcxMUUxNDA4NTAwREIxMzcxIC8qIENvbW1hbmRMaW5lUE9TSVguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzdCRUM0RTAxOTQ5MTQ4NjAwOEI0Mjg2IC8qIENvbXBsZXRpb25IYW5kbGVy
Q2FsbENoZWNrZXIubW0gaW4gU291cmNlcyAqLywKQEAgLTk4NDEsNiArOTg2NCw3IEBACiAJCQkJ
NEEzQ0MxOEMxOUIwNjQxNTAwRDE0QUVGIC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJv
eHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFODY0OTIxQjE2NzUwMTAwQzgyRjQwIC8qIFZl
cnNpb25DaGVja3MubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREFGNEZGQjFCNjM2MTgxMDA2MDEz
RDYgLyogVmlld0dlc3R1cmVDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTgzNkVF
QjgwMUJFOUVDOUUwMDZCNEI4MiAvKiBOZXR3b3JrTG9hZE1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTJERjk1OTNCMThBNDI0MTIwMDk3ODVBMSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1Mu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDEyNUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dl
c3R1cmVDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQxQjVENUQxODU4NjlD
ODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264800</attachid>
            <date>2015-11-04 11:01:54 -0800</date>
            <delta_ts>2015-11-04 11:08:43 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>split_NetworkResourceLoader_wip.patch</filename>
            <type>text/plain</type>
            <size>74158</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCAwYTIzYjdmLi4yYjIxNTJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJOZXR3b3JrQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgpAQCAtMjAyLDEwICsyMDMs
MTAgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5SZXNv
dXJjZUxvYWRUb0Rvd25sb2FkKHVpbnQ2NF90IG0KICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5n
IGhlcmUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbHNlCi0gICAgbmV0d29ya1Byb2Nlc3Mu
ZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQoZG93bmxvYWRJRCwgbG9h
ZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOworICAgIG5ldHdvcmtQcm9jZXNzLmRv
d25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKGRvd25sb2FkSUQsIGxvYWRl
ci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKIAogICAgIC8v
IFVuYmxvY2sgdGhlIFVSTCBjb25uZWN0aW9uIG9wZXJhdGlvbiBxdWV1ZS4KLSAgICBsb2FkZXIt
PmhhbmRsZSgpLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIGxvYWRlci0+bmV0
d29ya0xvYWQoKS0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAg
CiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3Njk1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcApAQCAtMCwwICsxLDM2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCisjaW5jbHVkZSAiTmV0d29ya0xvYWQuaCIKKworI2luY2x1ZGUgIkF1dGhlbnRp
Y2F0aW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAi
U2Vzc2lvblRyYWNrZXIuaCIKKyNpbmNsdWRlICJXZWJFcnJvcnMuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTmV0d29ya0xvYWQ6Ok5ldHdv
cmtMb2FkKE5ldHdvcmtMb2FkQ2xpZW50JiBjbGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fcGFyYW1l
dGVycyhwYXJhbWV0ZXJzKQorICAgICwgbV9uZXR3b3JraW5nQ29udGV4dChSZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dDo6Y3JlYXRlKHBhcmFtZXRlcnMuc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKQorICAgICwgbV9jdXJyZW50UmVx
dWVzdChwYXJhbWV0ZXJzLnJlcXVlc3QpCit7CisgICAgYm9vbCBzaG91bGRTbmlmZiA9IG1fcGFy
YW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3kgPT0gU25pZmZDb250ZW50OworI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCisgICAgVU5VU0VEX1BBUkFNKHNob3VsZFNuaWZmKTsgLy8gRklYTUU6
IFVzZSB0aGlzLgorICAgIG1fdGFzayA9IFNlc3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lvbihw
YXJhbWV0ZXJzLnNlc3Npb25JRCktPmNyZWF0ZURhdGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50
UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFzay0+cmVzdW1lKCk7CisjZWxzZQorICAgIG1faGFu
ZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBt
X2N1cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX3BhcmFtZXRlcnMuZGVmZXJzTG9hZGluZywgc2hvdWxk
U25pZmYpOworI2VuZGlmCit9CisKK05ldHdvcmtMb2FkOjp+TmV0d29ya0xvYWQoKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAg
ICBpZiAobV90YXNrKQorICAgICAgICBtX3Rhc2stPmNsZWFyQ2xpZW50KCk7CisjZWxzZQorICAg
IGlmIChtX2hhbmRsZSkKKyAgICAgICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50KCk7CisjZW5kaWYK
K30KKwordm9pZCBOZXR3b3JrTG9hZDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sK
KyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVy
ZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKKyAgICBpZiAobV9oYW5kbGUpIHsKKyAg
ICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIE5ldHdvcmtMb2FkOjpjYW5jZWwoKQoreworI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgaWYgKG1fdGFzaykKKyAgICAgICAgbV90YXNrLT5j
YW5jZWwoKTsKKyNlbHNlCisgICAgaWYgKG1faGFuZGxlKQorICAgICAgICBtX2hhbmRsZS0+Y2Fu
Y2VsKCk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJl
cXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KQoreworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlRnJvbURlbGVnYXRl
UHJlc2VydmluZ09sZFByb3BlcnRpZXMobmV3UmVxdWVzdC5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRh
dGVIVFRQQm9keSkpOworI2VsaWYgVVNFKFNPVVApCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBS
ZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVz
LiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjEyNy4KKyAg
ICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0
aWVzKG5ld1JlcXVlc3QpOworI2VuZGlmCisKKyAgICBpZiAobV9jdXJyZW50UmVxdWVzdC5pc051
bGwoKSkgeworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbHNlCisgICAgICAg
IG1faGFuZGxlLT5jYW5jZWwoKTsKKyAgICAgICAgZGlkRmFpbChtX2hhbmRsZS5nZXQoKSwgY2Fu
Y2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOworI2VuZGlmCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21l
dGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKKyAgICBtX2hhbmRsZS0+
Y29udGludWVXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7CisjZW5kaWYKK30KKwor
dm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworI2lmIFVT
RShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAg
IG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVj
ayBvbmNlIEJsb2JSZXNvdXJjZUhhbmRsZSBpbXBsZW1lbnRzIGRpZFJlY2VpdmVSZXNwb25zZUFz
eW5jIGNvcnJlY3RseS4KKyAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90IHdhaXQgZm9yIHJl
c3BvbnNlLCBzbyB0aGUgbG9hZCBpcyBsaWtlbHkgdG8gZmluaXNoIGJlZm9yZSBjb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZS4KKyAgICBpZiAoIW1faGFuZGxlKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyNlbmRpZgorfQor
CitOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgTmV0
d29ya0xvYWQ6OnNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZWNlaXZlZFJlc3BvbnNlKQoreworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UgPSBy
ZWNlaXZlZFJlc3BvbnNlOworICAgIHJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNl
OjpTb3VyY2U6Ok5ldHdvcmspOworICAgIGlmIChtX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0
ZUluZm8pCisgICAgICAgIHJlc3BvbnNlLmluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKKworICAg
IHJldHVybiBtX2NsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworfQorCit2b2lk
IE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNw
b25zZSkKK3sKKyAgICAvLyBXZSBvbmx5IGV4cGVjdCB0byBnZXQgdGhlIHdpbGxTZW5kUmVxdWVz
dCBjYWxsYmFjayBmcm9tIFJlc291cmNlSGFuZGxlIGFzIHRoZSByZXN1bHQgb2YgYSByZWRpcmVj
dC4KKyAgICBBU1NFUlQoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOworICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX2N1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdDsKKyAg
ICBtX2NsaWVudC53aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVz
cG9uc2UpOworfQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKwordm9pZCBOZXR3b3JrTG9h
ZDo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lk
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBzaGFy
ZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXF1ZXN0KTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2
ZUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3Qg
Q3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRp
b246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRlbnRpYWwoKSk7Cit9CisKK3ZvaWQgTmV0
d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNoYXJlZERpZFJl
Y2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoUmVzcG9uc2VE
aXNwb3NpdGlvbjo6QWxsb3cpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlRGF0
YShSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBBU1NFUlQoYnVmZmVyKTsK
KyAgICBhdXRvIHNpemUgPSBidWZmZXItPnNpemUoKTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZl
QnVmZmVyKFdURjo6bW92ZShidWZmZXIpLCBzaXplKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6
ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
aWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAgICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5nKFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9j
bGllbnQuZGlkRmFpbExvYWRpbmcoZXJyb3IpOworfQorCisjZWxzZQorCit2b2lkIE5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVT
RUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIGlmIChzaGFyZWREaWRSZWNlaXZl
UmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSkgPT0gTmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXMpCisgICAgICAgIG1faGFuZGxlLT5jb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZSgpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZl
RGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEgKi8sIHVuc2lnbmVkIC8q
IGxlbmd0aCAqLywgaW50IC8qIGVuY29kZWREYXRhTGVuZ3RoICovKQoreworICAgIC8vIFRoZSBO
ZXR3b3JrUHJvY2VzcyBzaG91bGQgbmV2ZXIgZ2V0IGEgZGlkUmVjZWl2ZURhdGEgY2FsbGJhY2su
CisgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSB1c2luZyBkaWRSZWNlaXZlQnVmZmVyLgorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZl
QnVmZmVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBi
dWZmZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVT
RUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIG1fY2xpZW50LmRpZFJlY2VpdmVC
dWZmZXIoV1RGOjptb3ZlKGJ1ZmZlciksIHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpOworfQor
Cit2b2lkIE5ldHdvcmtMb2FkOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGRvdWJsZSBmaW5pc2hUaW1lKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5k
bGUgPT0gbV9oYW5kbGUpOworICAgIG1fY2xpZW50LmRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGlt
ZSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5k
bGUsICFoYW5kbGUgfHwgaGFuZGxlID09IG1faGFuZGxlKTsKKyAgICBBU1NFUlQoIWVycm9yLmlz
TnVsbCgpKTsKKworICAgIG1fY2xpZW50LmRpZEZhaWxMb2FkaW5nKGVycm9yKTsKK30KKwordm9p
ZCBOZXR3b3JrTG9hZDo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUg
PT0gbV9oYW5kbGUpOworICAgIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QocmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSk7Cit9CisKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9O
KQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgJiYgIVVTRShORVRX
T1JLX1NFU1NJT04pCit2b2lkIE5ldHdvcmtMb2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUHJvdGVjdGlv
blNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAg
IC8vIEhhbmRsZSBzZXJ2ZXIgdHJ1c3QgZXZhbHVhdGlvbiBhdCBwbGF0Zm9ybS1sZXZlbCBpZiBy
ZXF1ZXN0ZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICAgIGlmIChwcm90ZWN0aW9uU3Bh
Y2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlv
blNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZAorICAgICAgICAmJiAhTmV0d29y
a1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9u
KCkpIHsKKyAgICAgICAgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2NsaWVudC5p
c1N5bmNocm9ub3VzKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc2sgdGhlIFdl
YlByb2Nlc3MgbGlrZSB0aGUgYXN5bmNocm9ub3VzIGNhc2UgYmVsb3cgZG9lcy4KKyAgICAgICAg
Ly8gVGhpcyBpcyBjdXJyZW50bHkgaW1wb3NzaWJsZSBhcyB0aGUgV2ViUHJvY2VzcyBpcyBibG9j
a2VkIHdhaXRpbmcgb24gdGhpcyBzeW5jaHJvbm91cyBsb2FkLgorICAgICAgICAvLyBJdCdzIHBv
c3NpYmxlIHRoYXQgd2UgY2FuIGp1bXAgc3RyYWlnaHQgdG8gdGhlIFVJIHByb2Nlc3MgdG8gcmVz
b2x2ZSB0aGlzLgorICAgICAgICBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudC5j
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMocHJvdGVjdGlvblNwYWNl
KTsKK30KKyNlbmRpZgorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykK
K3ZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShib29sIHJlc3VsdCkKK3sKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8v
IEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UK
KyAgICBtX2hhbmRsZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKHJlc3VsdCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgVVNFKE5FVFdPUktfQ0ZEQVRB
X0FSUkFZX0NBTExCQUNLKSAmJiAhVVNFKE5FVFdPUktfU0VTU0lPTikKK2Jvb2wgTmV0d29ya0xv
YWQ6OnN1cHBvcnRzRGF0YUFycmF5KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZURhdGFBcnJheShS
ZXNvdXJjZUhhbmRsZSosIENGQXJyYXlSZWYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCisjaWYgIVVTRShORVRXT1JLX1NF
U1NJT04pCisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0
b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9
PSBtX2hhbmRsZSk7CisKKyAgICBtX2NsaWVudC5kaWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFs
Qnl0ZXNUb0JlU2VudCk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6Ondhc0Jsb2NrZWQoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09
IG1faGFuZGxlKTsKKworICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmJsb2NrZWRFcnJvciht
X2N1cnJlbnRSZXF1ZXN0KSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmNhbm5vdFNob3dVUkwo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFu
ZGxlID09IG1faGFuZGxlKTsKKworICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmNhbm5vdFNo
b3dVUkxFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Cit9CisKK2Jvb2wgTmV0d29ya0xvYWQ6OnNo
b3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCit7CisgICAg
QVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSB8fCAhbV9oYW5kbGUpOyAv
LyBtX2hhbmRsZSB3aWxsIGJlIDAgaWYgY2FsbGVkIGZyb20gUmVzb3VyY2VIYW5kbGU6OnN0YXJ0
KCkuCisKKyAgICAvLyBXaGVuIHRoZSBXZWJQcm9jZXNzIGlzIGhhbmRsaW5nIGxvYWRpbmcgYSBj
bGllbnQgaXMgY29uc3VsdGVkIGVhY2ggdGltZSB0aGlzIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlIHF1ZXN0aW9uIGlzIGFza2VkLgorICAgIC8vIEluIE5ldHdvcmtQcm9jZXNzIG1vZGUgd2Ug
YXNrIHRoZSBXZWJQcm9jZXNzIGNsaWVudCB1cCBmcm9udCBvbmNlIGFuZCB0aGVuIHJldXNlIHRo
ZSBjYWNoZWQgYW5zd2VyLgorCisgICAgLy8gV2Ugc3RpbGwgbmVlZCB0aGlzIHN5bmMgdmVyc2lv
biwgYmVjYXVzZSBSZXNvdXJjZUhhbmRsZSBpdHNlbGYgdXNlcyBpdCBpbnRlcm5hbGx5LCBldmVu
IHdoZW4gdGhlIGRlbGVnYXRlIHVzZXMgYW4gYXN5bmMgb25lLgorCisgICAgcmV0dXJuIG1fcGFy
YW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7
Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5k
bGUpOworICAgIC8vIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBkb2VzIG5vdCBrbm93IHdoZXRoZXIg
dGhlIHJlcXVlc3QgaXMgY3Jvc3Mgb3JpZ2luLCBzbyBXZWIgcHJvY2VzcyBjb21wdXRlcyBhbiBh
cHBsaWNhYmxlIGNyZWRlbnRpYWwgcG9saWN5IGZvciBpdC4KKyAgICBBU1NFUlQobV9wYXJhbWV0
ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgIT0gRG9Ob3RBc2tDbGllbnRGb3JDcm9zc09yaWdp
bkNyZWRlbnRpYWxzKTsKKworICAgIGlmIChtX3BhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBv
bGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzKSB7CisgICAgICAgIGNoYWxs
ZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0
aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9w
YXJhbWV0ZXJzLndlYkZyYW1lSUQsIGNoYWxsZW5nZSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6
OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhh
bmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJv
YmFibHkgbm90IG5lZWRlZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS84OTYwMTI0PikuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRp
b24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworCisg
ICAgbV9oYW5kbGUtPmNhbmNlbCgpOworICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNl
bGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKK30KKworI2VuZGlmIC8vICFVU0UoTkVUV09S
S19TRVNTSU9OKQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4zNzQ3YzMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgTmV0d29ya0xvYWRfaAorI2RlZmluZSBOZXR3b3JrTG9hZF9oCisKKyNp
ZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisjaW5jbHVkZSAiTmV0d29ya0xvYWRDbGllbnQu
aCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbi5oIgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdv
cmtMb2FkCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICA6IHB1YmxpYyBOZXR3b3JrU2Vz
c2lvblRhc2tDbGllbnQKKyNlbHNlCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVDbGllbnQKKyNlbmRpZgoreworcHVibGljOgorICAgIE5ldHdvcmtMb2FkKE5ldHdvcmtMb2Fk
Q2xpZW50JiwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJik7CisgICAgfk5ldHdvcmtMb2Fk
KCk7CisKKyAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisgICAgdm9pZCBjYW5jZWwo
KTsKKworICAgIHZvaWQgY2xlYXJDdXJyZW50UmVxdWVzdCgpIHsgbV9jdXJyZW50UmVxdWVzdCA9
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOyB9CisKKyAgICB2b2lkIGNvbnRpbnVlV2lsbFNl
bmRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgY29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisg
ICAgLy8gTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVy
Zm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3Np
dGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgZmluYWwg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+JiYpIGZpbmFsIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWwgb3Zl
cnJpZGU7CisjZWxzZQorICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50CisgICAgdmlydHVhbCB2
b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmRE
YXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2Vu
dCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwgaW50IGVuY29kZWREYXRhTGVuZ3RoKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93
VVJMKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVj
ZWl2ZWRDYW5jZWxsYXRpb24oV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCB1
c2VzQXN5bmNDYWxsYmFja3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIGxvYWRpbmdTeW5jaHJvbm91c1hIUigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fY2xpZW50
LmlzU3luY2hyb25vdXMoKTsgfQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxM
QkFDSykKKyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVj
dGlvblNwYWNlJikgb3ZlcnJpZGU7CisjZW5kaWYKKyNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJS
QVlfQ0FMTEJBQ0spCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGF0YUFycmF5KCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhQXJyYXkoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGUqLCBDRkFycmF5UmVmKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENP
Q09BKQorI2lmIFVTRShDRk5FVFdPUkspCisgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3Bv
bnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVm
KSBvdmVycmlkZTsKKyNlbHNlCisgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5
bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJy
aWRlOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorCisj
aWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2b2lkIGNvbnRpbnVl
Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sKTsKKyNlbmRpZgorCisj
aWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9CisjZW5kaWYKKworcHJpdmF0
ZToKKyAgICBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKTsKKyAgICB2b2lkIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYp
OworCisgICAgTmV0d29ya0xvYWRDbGllbnQmIG1fY2xpZW50OworICAgIGNvbnN0IE5ldHdvcmtM
b2FkUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CisgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisg
ICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gbV90YXNrOworI2Vsc2UKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOworI2VuZGlmCisKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8gVXBkYXRlZCBvbiByZWRpcmVjdHMu
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCisKKyNlbmRpZiAvLyBOZXR3b3JrTG9hZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENsaWVudC5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iYTQ4NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDbGllbnQuaApAQCAtMCwwICsxLDcyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrTG9hZENsaWVudF9oCisjZGVmaW5lIE5ldHdvcmtM
b2FkQ2xpZW50X2gKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworI2lmIFBM
QVRGT1JNKENPQ09BKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2Uq
IENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgUHJvdGVjdGlvblNwYWNlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
TmV0d29ya0xvYWRDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfk5ldHdvcmtMb2FkQ2xp
ZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0ID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNT
ZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhjb25z
dCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdpbGxT
ZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgPSAwOworICAg
IGVudW0gY2xhc3MgU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgeyBObywgWWVzIH07
CisgICAgdmlydHVhbCBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYm
LCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWxMb2FkaW5nKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSA9IDA7CisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3lu
YyhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSA9IDA7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2VuZGlm
IC8vIE5ldHdvcmtMb2FkQ2xpZW50X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzlhY2Y2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCisjaW5jbHVkZSAiTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzOjpOZXR3b3JrTG9hZFBhcmFtZXRlcnMoKQorICAgIDogd2ViUGFnZUlEKDApCisg
ICAgLCB3ZWJGcmFtZUlEKDApCisgICAgLCBzZXNzaW9uSUQoU2Vzc2lvbklEOjplbXB0eVNlc3Np
b25JRCgpKQorICAgICwgY29udGVudFNuaWZmaW5nUG9saWN5KFNuaWZmQ29udGVudCkKKyAgICAs
IGFsbG93U3RvcmVkQ3JlZGVudGlhbHMoRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzKQorICAg
ICwgY2xpZW50Q3JlZGVudGlhbFBvbGljeShEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxz
KQorICAgICwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCh0cnVlKQor
ICAgICwgZGVmZXJzTG9hZGluZyhmYWxzZSkKKyAgICAsIG5lZWRzQ2VydGlmaWNhdGVJbmZvKGZh
bHNlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkUGFyYW1ldGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM5NjIyMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBOZXR3b3JrTG9hZFBhcmFtZXRlcnNfaAorI2RlZmluZSBOZXR3b3JrTG9hZFBh
cmFtZXRlcnNfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHsKK3B1YmxpYzoKKyAgICBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMoKTsKKworICAgIHVpbnQ2NF90IHdlYlBhZ2VJRDsKKyAgICB1
aW50NjRfdCB3ZWJGcmFtZUlEOworICAgIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQ7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgV2ViQ29yZTo6Q29udGVu
dFNuaWZmaW5nUG9saWN5IGNvbnRlbnRTbmlmZmluZ1BvbGljeTsKKyAgICBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFscyBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIFdlYkNvcmU6OkNsaWVu
dENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKKyAgICBib29sIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7CisgICAgYm9vbCBkZWZlcnNMb2Fk
aW5nOworICAgIGJvb2wgbmVlZHNDZXJ0aWZpY2F0ZUluZm87Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNlbmRpZiAv
LyBOZXR3b3JrTG9hZFBhcmFtZXRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggMDg0NmE1MC4uZGJi
YjM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0yOCwzNSArMjgsMjggQEAKIAogI2lmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNp
bmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtM
b2FkLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKLSNpbmNs
dWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAj
aW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCi0jaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkZXJN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hU
VFBIZWFkZXJOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5o
PgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlSGFuZGxlLmg+Ci0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtMTIwLDExICsxMTMsNyBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cwogTmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291cmNlTG9hZGVyKCkKIHsKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0g
ICAgQVNTRVJUKCFtX3Rhc2spOwotI2Vsc2UKLSAgICBBU1NFUlQoIW1faGFuZGxlKTsKLSNlbmRp
ZgorICAgIEFTU0VSVCghbV9uZXR3b3JrTG9hZCk7CiAgICAgQVNTRVJUKCFpc1N5bmNocm9ub3Vz
KCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJlcGx5KTsKIH0KIApAQCAtMTQw
LDggKzEyOSw2IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAgaWYg
KG1fZGVmZXJzTG9hZGluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jdXJyZW50UmVxdWVz
dCA9IG9yaWdpbmFsUmVxdWVzdCgpOwotCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAg
aWYgKCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpIHx8IHNlc3Npb25JRCgp
LmlzRXBoZW1lcmFsKCkgfHwgIW9yaWdpbmFsUmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkgewogICAgICAgICBzdGFydE5ldHdvcmtMb2FkKCk7CkBAIC0xNzMsMTAgKzE2
MCwyNSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogI2VuZGlmCiB9CiAK
LXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2FkKCkKK3N0YXRpYyBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMgY29uc3RydWN0TmV0d29ya0xvYWRQYXJhbWV0ZXJzKGNvbnN0
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBPcHRpb25h
bDxSZXNvdXJjZVJlcXVlc3Q+JiB1cGRhdGVkUmVxdWVzdCkKIHsKLSAgICBtX25ldHdvcmtpbmdD
b250ZXh0ID0gUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShzZXNzaW9uSUQoKSwgbV9w
YXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworICAg
IE5ldHdvcmtMb2FkUGFyYW1ldGVycyBuZXR3b3JrTG9hZFBhcmFtZXRlcnM7CisgICAgbmV0d29y
a0xvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCA9IHBhcmFtZXRlcnMud2ViUGFnZUlEOworICAgIG5l
dHdvcmtMb2FkUGFyYW1ldGVycy53ZWJGcmFtZUlEID0gcGFyYW1ldGVycy53ZWJGcmFtZUlEOwor
ICAgIG5ldHdvcmtMb2FkUGFyYW1ldGVycy5zZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLnNlc3Npb25J
RDsKKyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9IHVwZGF0ZWRSZXF1ZXN0ID8g
dXBkYXRlZFJlcXVlc3QudmFsdWUoKSA6IHBhcmFtZXRlcnMucmVxdWVzdDsKKyAgICBuZXR3b3Jr
TG9hZFBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID0gcGFyYW1ldGVycy5jb250ZW50
U25pZmZpbmdQb2xpY3k7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMgPSBwYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgbmV0d29y
a0xvYWRQYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPSBwYXJhbWV0ZXJzLmNsaWVu
dENyZWRlbnRpYWxQb2xpY3k7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLnNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLmRl
ZmVyc0xvYWRpbmcgPSBwYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmc7CisgICAgbmV0d29ya0xvYWRQ
YXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJbmZvID0gcGFyYW1ldGVycy5uZWVkc0NlcnRpZmlj
YXRlSW5mbzsKIAorICAgIHJldHVybiBuZXR3b3JrTG9hZFBhcmFtZXRlcnM7Cit9CisKK3ZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2FkKGNvbnN0IE9wdGlvbmFsPFJl
c291cmNlUmVxdWVzdD4mIHVwZGF0ZWRSZXF1ZXN0KQorewogICAgIGNvbnN1bWVTYW5kYm94RXh0
ZW5zaW9ucygpOwogCiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSB8fCBtX3BhcmFtZXRlcnMubWF4
aW11bUJ1ZmZlcmluZ1RpbWUgPiAwX21zKQpAQCAtMTg3LDE0ICsxODksNyBAQCB2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3JrTG9hZCgpCiAgICAgICAgIG1fYnVmZmVyZWRE
YXRhRm9yQ2FjaGUgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogI2VuZGlmCiAK
LSAgICBib29sIHNob3VsZFNuaWZmID0gbV9wYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGlj
eSA9PSBTbmlmZkNvbnRlbnQ7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBVTlVTRURf
UEFSQU0oc2hvdWxkU25pZmYpOyAvLyBGSVhNRTogVXNlIHRoaXMuCi0gICAgbV90YXNrID0gU2Vz
c2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCgpKS0+Y3JlYXRlRGF0YVRhc2tX
aXRoUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0LCAqdGhpcyk7Ci0gICAgbV90YXNrLT5yZXN1bWUo
KTsKLSNlbHNlCi0gICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fbmV0d29y
a2luZ0NvbnRleHQuZ2V0KCksIG1fY3VycmVudFJlcXVlc3QsIHRoaXMsIG1fZGVmZXJzTG9hZGlu
Zywgc2hvdWxkU25pZmYpOwotI2VuZGlmCisgICAgbV9uZXR3b3JrTG9hZCA9IHN0ZDo6bWFrZV91
bmlxdWU8TmV0d29ya0xvYWQ+KCp0aGlzLCBjb25zdHJ1Y3ROZXR3b3JrTG9hZFBhcmFtZXRlcnMo
bV9wYXJhbWV0ZXJzLCB1cGRhdGVkUmVxdWVzdCkpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKQEAgLTIwMiwxNSArMTk3LDkg
QEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZl
cnMpCiAgICAgaWYgKG1fZGVmZXJzTG9hZGluZyA9PSBkZWZlcnMpCiAgICAgICAgIHJldHVybjsK
ICAgICBtX2RlZmVyc0xvYWRpbmcgPSBkZWZlcnM7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
LSAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSNlbHNlCi0gICAgaWYgKG1faGFuZGxlKSB7Ci0gICAgICAgIG1faGFuZGxlLT5zZXREZWZlcnNM
b2FkaW5nKGRlZmVycyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKKworICAgIG1f
bmV0d29ya0xvYWQtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKwogICAgIGlmICghbV9kZWZl
cnNMb2FkaW5nKQogICAgICAgICBzdGFydCgpOwogfQpAQCAtMjIzLDQyICsyMTIsMjQgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNsZWFudXAoKQogCiAgICAgaW52YWxpZGF0ZVNhbmRi
b3hFeHRlbnNpb25zKCk7CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGlmIChtX3Rh
c2spIHsKLSAgICAgICAgbV90YXNrLT5jbGVhckNsaWVudCgpOwotICAgICAgICBtX3Rhc2sgPSBu
dWxscHRyOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKG1faGFuZGxlKSB7Ci0gICAgICAgIG1faGFu
ZGxlLT5jbGVhckNsaWVudCgpOwotICAgICAgICBtX2hhbmRsZSA9IG51bGxwdHI7Ci0gICAgfQot
I2VuZGlmCisgICAgbV9uZXR3b3JrTG9hZCA9IG51bGxwdHI7CiAKICAgICAvLyBUaGlzIHdpbGwg
Y2F1c2UgTmV0d29ya1Jlc291cmNlTG9hZGVyIHRvIGJlIGRlc3Ryb3llZCBhbmQgdGhlcmVmb3Jl
IHdlIGRvIGl0IGxhc3QuCiAgICAgbV9jb25uZWN0aW9uLT5kaWRDbGVhbnVwUmVzb3VyY2VMb2Fk
ZXIoKnRoaXMpOwogfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCiB2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQoKQogewotICAgIEFTU0VS
VChtX2hhbmRsZSk7CisgICAgQVNTRVJUKG1fbmV0d29ya0xvYWQpOwogICAgIG1fZGlkQ29udmVy
dEhhbmRsZVRvRG93bmxvYWQgPSB0cnVlOwogfQotI2VuZGlmCiAKIHZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjphYm9ydCgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAot
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgaWYgKG1fdGFzaykKLSAgICAgICAgbV90YXNr
LT5jYW5jZWwoKTsKLSAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhlIG5ldHdvcmsg
Y2FjaGUgaGVyZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKLSAgICBpZiAobV9oYW5k
bGUgJiYgIW1fZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQpIHsKLSAgICAgICAgbV9oYW5kbGUt
PmNhbmNlbCgpOworICAgIGlmIChtX25ldHdvcmtMb2FkICYmICFtX2RpZENvbnZlcnRIYW5kbGVU
b0Rvd25sb2FkKSB7CisgICAgICAgIG1fbmV0d29ya0xvYWQtPmNhbmNlbCgpOwogCiAjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigp
LmlzRW5hYmxlZCgpKSB7CkBAIC0yNjgsMTcgKzIzOSwxNCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6YWJvcnQoKQogICAgICAgICB9CiAjZW5kaWYKICAgICB9Ci0jZW5kaWYKKwogICAg
IGNsZWFudXAoKTsKIH0KIAotTmV0d29ya1Jlc291cmNlTG9hZGVyOjpTaG91bGRDb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNl
KQorYXV0byBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKSAtPiBTaG91bGRDb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZQogewogICAgIG1fcmVzcG9uc2UgPSByZWNlaXZlZFJlc3BvbnNlOwogCi0g
ICAgbV9yZXNwb25zZS5zZXRTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3Jr
KTsKLSAgICBpZiAobV9wYXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJbmZvKQotICAgICAgICBt
X3Jlc3BvbnNlLmluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKICAgICAvLyBGb3IgbXVsdGlwYXJ0
L3gtbWl4ZWQtcmVwbGFjZSBkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyBnZXRzIGNhbGxlZCBtdWx0
aXBsZSB0aW1lcyBhbmQgYnVmZmVyaW5nIHdvdWxkIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZy4K
ICAgICBpZiAoIWlzU3luY2hyb25vdXMoKSAmJiBtX3Jlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpCiAg
ICAgICAgIG1fYnVmZmVyZWREYXRhID0gbnVsbHB0cjsKQEAgLTMyMiw3ICsyOTAsNyBAQCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OlNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6cwogICAgIHJldHVybiBTaG91bGRDb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZTo6WWVzOwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlk
UmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlciwgaW50
IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlciwgaW50IHJlcG9y
dGVkRW5jb2RlZERhdGFMZW5ndGgpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAg
QVNTRVJUKCFtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKTsKQEAgLTM0OSw3ICszMTcsNyBAQCB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPgogICAgIHNlbmRCdWZmZXJNYXliZUFib3J0aW5nKCpidWZm
ZXIsIGVuY29kZWREYXRhTGVuZ3RoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OnNoYXJlZERpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpCit2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSkKIHsKICNp
ZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24o
KS5pc0VuYWJsZWQoKSkgewpAQCAtNDA0LDcgKzM3Miw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpzaGFyZWREaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKQogICAgIGNs
ZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZEZhaWwo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlkRmFpbExvYWRpbmcoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAg
ICAgQVNTRVJUKCFlcnJvci5pc051bGwoKSk7CiAKQEAgLTQyMSwyMjEgKzM4OSw0NCBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJiBlcnJvcikKICAgICBjbGVhbnVwKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2Vu
ZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKLSAgICAvLyBXZSBvbmx5IGV4
cGVjdCB0byBnZXQgdGhlIHdpbGxTZW5kUmVxdWVzdCBjYWxsYmFjayBmcm9tIFJlc291cmNlSGFu
ZGxlIGFzIHRoZSByZXN1bHQgb2YgYSByZWRpcmVjdC4KLSAgICBBU1NFUlQoIXJlZGlyZWN0UmVz
cG9uc2UuaXNOdWxsKCkpOwotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBt
X2N1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdDsKLQogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQog
ICAgIFdlYkNvcmU6OnVwZGF0ZVJlZGlyZWN0Q2hhaW5TdGF0dXMobV9yZWRpcmVjdENoYWluQ2Fj
aGVTdGF0dXMsIHJlZGlyZWN0UmVzcG9uc2UpOwogI2VuZGlmCiAKICAgICBpZiAoaXNTeW5jaHJv
bm91cygpKSB7CisgICAgICAgIFJlc291cmNlUmVxdWVzdCBvdmVycmlkZW5SZXF1ZXN0ID0gcmVx
dWVzdDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gZm9sbG93
IHRoZSByZWRpcmVjdCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgog
ICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIGF0IGxlYXN0IHVwZGF0aW5nIGhvc3QgcmVjb3Jkcywg
YW5kIGNvbXBhcmluZyB0aGUgY3VycmVudCByZXF1ZXN0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFs
IHJlcXVlc3QgaGVyZS4KLSAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwo
b3JpZ2luYWxSZXF1ZXN0KCkudXJsKCksIG1fY3VycmVudFJlcXVlc3QudXJsKCkpKSB7CisgICAg
ICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG9yaWdpbmFsUmVxdWVzdCgpLnVy
bCgpLCByZXF1ZXN0LnVybCgpKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fc3luY2hyb25vdXNM
b2FkRGF0YS0+ZXJyb3IuaXNOdWxsKCkpOwogICAgICAgICAgICAgbV9zeW5jaHJvbm91c0xvYWRE
YXRhLT5lcnJvciA9IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50OjpwbGF0Zm9ybUJhZFJlc3BvbnNl
RXJyb3IoKTsKLSAgICAgICAgICAgIG1fY3VycmVudFJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3Qo
KTsKKyAgICAgICAgICAgIG1fbmV0d29ya0xvYWQtPmNsZWFyQ3VycmVudFJlcXVlc3QoKTsKKyAg
ICAgICAgICAgIG92ZXJyaWRlblJlcXVlc3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKICAgICAgICAg
fQotICAgICAgICBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKKyAg
ICAgICAgY29udGludWVXaWxsU2VuZFJlcXVlc3Qob3ZlcnJpZGVuUmVxdWVzdCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJS
ZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsIHJlZGlyZWN0
UmVzcG9uc2UpKTsKLX0KLSAgICAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotCi12b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBzaGFyZWRXaWxsU2VuZFJl
ZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihyZXF1ZXN0KTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVD
aGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24s
IGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhhbmRsaW5nLCBXZWJDb3JlOjpDcmVk
ZW50aWFsKCkpOworICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3Vy
Y2VMb2FkZXI6OldpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKSk7CiB9
Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHN0ZDo6ZnVuY3Rpb248dm9pZChS
ZXNwb25zZURpc3Bvc2l0aW9uKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOwot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFJlc3BvbnNlRGlzcG9zaXRpb246OkFsbG93KTsKLX0KLQot
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQotewotICAgIEFTU0VSVChidWZmZXIpOwotICAgIGF1
dG8gc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgIHNoYXJlZERpZFJlY2VpdmVCdWZmZXIoV1RG
Ojptb3ZlKGJ1ZmZlciksIHNpemUpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3Ip
Ci17Ci0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQotICAgICAgICBzaGFyZWREaWRGaW5pc2hMb2Fk
aW5nKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgc2hhcmVkRGlkRmFpbChlcnJvcik7Ci19Ci0KLSNlbHNlCi0KLXZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQotewotICAgIEFTU0VS
VF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotICAgIGlmIChzaGFyZWREaWRS
ZWNlaXZlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSkgPT0gU2hvdWxkQ29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2U6OlllcykKLSAgICAgICAgbV9oYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJl
c3BvbnNlKCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0
YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEgKi8sIHVuc2lnbmVkIC8qIGxl
bmd0aCAqLywgaW50IC8qIGVuY29kZWREYXRhTGVuZ3RoICovKQotewotICAgIC8vIFRoZSBOZXR3
b3JrUHJvY2VzcyBzaG91bGQgbmV2ZXIgZ2V0IGEgZGlkUmVjZWl2ZURhdGEgY2FsbGJhY2suCi0g
ICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSB1c2luZyBkaWRSZWNlaXZlQnVmZmVyLgotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlk
UmVjZWl2ZUJ1ZmZlcihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBQYXNzUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLSAgICBzaGFy
ZWREaWRSZWNlaXZlQnVmZmVyKFdURjo6bW92ZShidWZmZXIpLCByZXBvcnRlZEVuY29kZWREYXRh
TGVuZ3RoKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRp
bmcoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgZG91YmxlIGZpbmlzaFRpbWUpCi17Ci0gICAgQVNT
RVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0gICAgc2hhcmVkRGlkRmlu
aXNoTG9hZGluZyhmaW5pc2hUaW1lKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsICFoYW5kbGUgfHwgaGFuZGxlID09IG1f
aGFuZGxlKTsKLSAgICBzaGFyZWREaWRGYWlsKGVycm9yKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09
IG1faGFuZGxlKTsKLSAgICBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOwotfQotCi0jZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikK
ICAgICAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZVdpbGxTZW5kUmVxdWVz
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpCiB7Ci0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgbV9jdXJyZW50UmVxdWVzdC51cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xk
UHJvcGVydGllcyhuZXdSZXF1ZXN0Lm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhUVFBCb2R5KSk7
Ci0jZWxpZiBVU0UoU09VUCkKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IFJlc291cmNlUmVxdWVz
dDo6dXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMuIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MTI3LgotICAgIG1fY3VycmVudFJl
cXVlc3QudXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMobmV3UmVxdWVz
dCk7Ci0jZW5kaWYKLQotICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0LmlzTnVsbCgpKSB7Ci0jaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJl
LgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKLSAgICAgICAgbV9oYW5kbGUtPmNh
bmNlbCgpOwotICAgICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvciht
X2N1cnJlbnRSZXF1ZXN0KSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLSNlbmRpZgorICAgIG1fbmV0d29ya0xvYWQt
PmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KG5ld1JlcXVlc3QpOwogfQogCiB2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQogewotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyBjaGVjayBvbmNlIEJsb2JSZXNvdXJjZUhhbmRsZSBpbXBsZW1lbnRz
IGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jIGNvcnJlY3RseS4KLSAgICAvLyBDdXJyZW50bHksIGl0
IGRvZXMgbm90IHdhaXQgZm9yIHJlc3BvbnNlLCBzbyB0aGUgbG9hZCBpcyBsaWtlbHkgdG8gZmlu
aXNoIGJlZm9yZSBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZS4KLSNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotI2Vsc2UKLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSNlbmRpZgorICAgIG1f
bmV0d29ya0xvYWQtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiB9CiAKLSNpZiAhVVNF
KE5FVFdPUktfU0VTU0lPTikKLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFNlbmRE
YXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQs
IHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5z
aWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKLSAgICBBU1NFUlRfVU5VU0VE
KGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQogICAgIGlmICghaXNTeW5jaHJvbm91cygp
KQogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkU2VuZERhdGEo
Ynl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKLXsKLSAgICBBU1NF
UlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQotICAgIGRpZEZhaWwoaGFu
ZGxlLCBXZWJLaXQ6OmJsb2NrZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Ci19Ci0KLXZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0K
LSAgICBkaWRGYWlsKGhhbmRsZSwgV2ViS2l0OjpjYW5ub3RTaG93VVJMRXJyb3IobV9jdXJyZW50
UmVxdWVzdCkpOwotfQotCi1ib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKLXsKLSAgICBBU1NFUlRfVU5V
U0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlIHx8ICFtX2hhbmRsZSk7IC8vIG1faGFuZGxl
IHdpbGwgYmUgMCBpZiBjYWxsZWQgZnJvbSBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKS4KLQotICAg
IC8vIFdoZW4gdGhlIFdlYlByb2Nlc3MgaXMgaGFuZGxpbmcgbG9hZGluZyBhIGNsaWVudCBpcyBj
b25zdWx0ZWQgZWFjaCB0aW1lIHRoaXMgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UgcXVlc3Rp
b24gaXMgYXNrZWQuCi0gICAgLy8gSW4gTmV0d29ya1Byb2Nlc3MgbW9kZSB3ZSBhc2sgdGhlIFdl
YlByb2Nlc3MgY2xpZW50IHVwIGZyb250IG9uY2UgYW5kIHRoZW4gcmV1c2UgdGhlIGNhY2hlZCBh
bnN3ZXIuCi0KLSAgICAvLyBXZSBzdGlsbCBuZWVkIHRoaXMgc3luYyB2ZXJzaW9uLCBiZWNhdXNl
IFJlc291cmNlSGFuZGxlIGl0c2VsZiB1c2VzIGl0IGludGVybmFsbHksIGV2ZW4gd2hlbiB0aGUg
ZGVsZWdhdGUgdXNlcyBhbiBhc3luYyBvbmUuCi0KLSAgICByZXR1cm4gbV9wYXJhbWV0ZXJzLmFs
bG93U3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLX0KLQotdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5k
bGUpOwotICAgIC8vIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBkb2VzIG5vdCBrbm93IHdoZXRoZXIg
dGhlIHJlcXVlc3QgaXMgY3Jvc3Mgb3JpZ2luLCBzbyBXZWIgcHJvY2VzcyBjb21wdXRlcyBhbiBh
cHBsaWNhYmxlIGNyZWRlbnRpYWwgcG9saWN5IGZvciBpdC4KLSAgICBBU1NFUlQobV9wYXJhbWV0
ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgIT0gRG9Ob3RBc2tDbGllbnRGb3JDcm9zc09yaWdp
bkNyZWRlbnRpYWxzKTsKLQotICAgIGlmIChtX3BhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBv
bGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzKSB7Ci0gICAgICAgIGNoYWxs
ZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0
aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9w
YXJhbWV0ZXJzLndlYkZyYW1lSUQsIGNoYWxsZW5nZSk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgQVNTRVJU
X1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQgKHNlZSA8cmRhcjovL3Byb2JsZW0vODk2MDEyND4p
LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpyZWNlaXZlZENhbmNlbGxhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRs
ZSA9PSBtX2hhbmRsZSk7Ci0KLSAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgZGlkRmFpbCht
X2hhbmRsZS5nZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwotfQotCi0j
ZW5kaWYgLy8gIVVTRShORVRXT1JLX1NFU1NJT04pCi0KIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZOZWVkZWQoKQogewogICAgIGlmIChpc1N5bmNocm9u
b3VzKCkpCkBAIC02NDgsOSArNDM5LDggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0
YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCgpCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
YnVmZmVyaW5nVGltZXJGaXJlZCgpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyZWREYXRhKTsKLSNp
ZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBBU1NFUlQobV9oYW5kbGUpOwotI2VuZGlmCisg
ICAgQVNTRVJUKG1fbmV0d29ya0xvYWQpOworCiAgICAgaWYgKCFtX2J1ZmZlcmVkRGF0YS0+c2l6
ZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTcxOCwyNCArNTA4LDIzIEBAIHZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hlRW50cnkoc3RkOjp1bmlxdWVfcHRyPE5l
dHdvcmtDYWNoZTo6CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp2YWxpZGF0ZUNhY2hl
RW50cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KQogewotI2lm
ICFVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVCghbV9oYW5kbGUpOwotI2VuZGlmCisg
ICAgQVNTRVJUKCFtX25ldHdvcmtMb2FkKTsKIAogICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzIGFs
cmVhZHkgY29uZGl0aW9uYWwgdGhlbiB0aGUgcmV2YWxpZGF0aW9uIHdhcyBub3QgdHJpZ2dlcmVk
IGJ5IHRoZSBkaXNrIGNhY2hlCiAgICAgLy8gYW5kIHdlIHNob3VsZCBub3Qgb3ZlcndyaXRlIHRo
ZSBleGlzdGluZyBjb25kaXRpb25hbCBoZWFkZXJzLgotICAgIGlmICghbV9jdXJyZW50UmVxdWVz
dC5pc0NvbmRpdGlvbmFsKCkpIHsKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmV2YWxpZGF0aW9uUmVx
dWVzdCA9IG9yaWdpbmFsUmVxdWVzdCgpOworICAgIGlmICghcmV2YWxpZGF0aW9uUmVxdWVzdC5p
c0NvbmRpdGlvbmFsKCkpIHsKICAgICAgICAgU3RyaW5nIGVUYWcgPSBlbnRyeS0+cmVzcG9uc2Uo
KS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkVUYWcpOwogICAgICAg
ICBTdHJpbmcgbGFzdE1vZGlmaWVkID0gZW50cnktPnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxk
KFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpMYXN0TW9kaWZpZWQpOwogICAgICAgICBpZiAoIWVU
YWcuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50UmVxdWVzdC5zZXRIVFRQSGVhZGVy
RmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKKyAgICAg
ICAgICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6OkhU
VFBIZWFkZXJOYW1lOjpJZk5vbmVNYXRjaCwgZVRhZyk7CiAgICAgICAgIGlmICghbGFzdE1vZGlm
aWVkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY3VycmVudFJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UsIGxhc3RNb2Rp
ZmllZCk7CisgICAgICAgICAgICByZXZhbGlkYXRpb25SZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVs
ZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmllZFNpbmNlLCBsYXN0TW9kaWZpZWQp
OwogICAgIH0KIAogICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBXVEY6Om1vdmUoZW50
cnkpOwogCi0gICAgc3RhcnROZXR3b3JrTG9hZCgpOworICAgIHN0YXJ0TmV0d29ya0xvYWQocmV2
YWxpZGF0aW9uUmVxdWVzdCk7CiB9CiAjZW5kaWYKIApAQCAtNzgzLDUzICs1NzIsMTkgQEAgYm9v
bCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9ydGluZ09uRmFpbHVyZShUJiYgbWVzc2Fn
ZSwgdW5zaWduZWQgbWVzc2FnZVMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgVVNFKFBS
T1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgJiYgIVVTRShORVRXT1JLX1NFU1NJT04pCi12
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYgcHJvdGVjdGlvblNwYWNlKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhjb25zdCBQcm90ZWN0aW9uU3BhY2Um
IHByb3RlY3Rpb25TcGFjZSkKIHsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCi0gICAgLy8gSGFu
ZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBsYXRmb3JtLWxldmVsIGlmIHJlcXVlc3Rl
ZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCi0gICAgaWYgKHByb3RlY3Rpb25TcGFjZS5hdXRo
ZW50aWNhdGlvblNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1l
U2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkCi0gICAgICAgICYmICFOZXR3b3JrUHJvY2Vz
czo6c2luZ2xldG9uKCkuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSkgewot
ICAgICAgICBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFs
c2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzU3luY2hyb25vdXMoKSkg
ewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzayB0aGUgV2ViUHJvY2VzcyBsaWtlIHRo
ZSBhc3luY2hyb25vdXMgY2FzZSBiZWxvdyBkb2VzLgotICAgICAgICAvLyBUaGlzIGlzIGN1cnJl
bnRseSBpbXBvc3NpYmxlIGFzIHRoZSBXZWJQcm9jZXNzIGlzIGJsb2NrZWQgd2FpdGluZyBvbiB0
aGlzIHN5bmNocm9ub3VzIGxvYWQuCi0gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSBj
YW4ganVtcCBzdHJhaWdodCB0byB0aGUgVUkgcHJvY2VzcyB0byByZXNvbHZlIHRoaXMuCi0gICAg
ICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSh0cnVlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2Fn
ZXM6OldlYlJlc291cmNlTG9hZGVyOjpDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKHByb3RlY3Rpb25TcGFjZSkpOwotfQotI2VuZGlmCi0KICNpZiBVU0UoUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLKQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVl
Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIHJlc3VsdCkKLXsKLSNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4K
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdl
czo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3Bh
Y2UocHJvdGVjdGlvblNwYWNlKSk7CiAjZWxzZQotICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKLSNlbmRpZgotfQorICAg
IFVOVVNFRF9QQVJBTShwcm90ZWN0aW9uU3BhY2UpOwogI2VuZGlmCi0KLSNpZiBVU0UoTkVUV09S
S19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spICYmICFVU0UoTkVUV09SS19TRVNTSU9OKQotYm9vbCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN1cHBvcnRzRGF0YUFycmF5KCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXkoUmVzb3VyY2VIYW5kbGUqLCBDRkFycmF5UmVmKQor
I2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCit2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KGJvb2wgcmVzdWx0KQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgbV9uZXR3b3JrTG9hZC0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlKHJlc3VsdCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAppbmRleCA4
YjQyM2RjLi4xYWUzYWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaApAQCAtMzEsMzEgKzMxLDE3IEBACiAjaW5jbHVk
ZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3
b3JrTG9hZENsaWVudC5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nh
Y2hlVmFsaWRhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2Uu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGlt
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+Ci0KLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9u
LmgiCi0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KLSNl
bmRpZgotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZDYWNoZWRVUkxSZXNwb25zZSogQ0ZDYWNo
ZWRVUkxSZXNwb25zZVJlZjsKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgQmxvYkRhdGFGaWxlUmVmZXJlbmNlOwotI2lmICFVU0UoTkVUV09S
S19TRVNTSU9OKQotY2xhc3MgUmVzb3VyY2VIYW5kbGU7Ci0jZW5kaWYKIGNsYXNzIFJlc291cmNl
UmVxdWVzdDsKIH0KIApAQCAtNjMsMTYgKzQ5LDEyIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKIGNsYXNzIE5ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzOwotY2xhc3MgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ7CitjbGFzcyBO
ZXR3b3JrTG9hZDsKIGNsYXNzIFNhbmRib3hFeHRlbnNpb247CiAKIGNsYXNzIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcgogICAgIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Jlc291cmNlTG9hZGVy
PgotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLCBwdWJsaWMgTmV0d29ya1Nlc3Npb25U
YXNrQ2xpZW50Ci0jZWxzZQotICAgICwgcHVibGljIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xp
ZW50Ci0jZW5kaWYKKyAgICAsIHB1YmxpYyBOZXR3b3JrTG9hZENsaWVudAogICAgICwgcHVibGlj
IElQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrUmVz
b3VyY2VMb2FkZXI+IGNyZWF0ZShjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYg
cGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCkBA
IC04OCwxMiArNzAsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIG9yaWdpbmFsUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5yZXF1
ZXN0OyB9CiAKLSAgICAvLyBDaGFuZ2VzIHdpdGggcmVkaXJlY3RzLgotICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3QoKSB7IHJldHVybiBtX2N1cnJlbnRSZXF1ZXN0
OyB9CisgICAgTmV0d29ya0xvYWQqIG5ldHdvcmtMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3
b3JrTG9hZC5nZXQoKTsgfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgp
OyB9Ci0jZW5kaWYKICAgICB2b2lkIGRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKCk7CiAKICAg
ICB2b2lkIHN0YXJ0KCk7CkBAIC0xMDMsNyArODEsOSBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICBzdGF0aWMgc2l6ZV90IGZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXpl
KCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZikgb3ZlcnJpZGU7CiAjZW5kaWYKKwogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMu
CiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAKQEAgLTEyNiw2ICsxMDYsMTYgQEAg
cHVibGljOgogCiAgICAgc3RydWN0IFN5bmNocm9ub3VzTG9hZERhdGE7CiAKKyAgICAvLyBOZXR3
b3JrTG9hZENsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2VBc3luYyhjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCB3aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVz
cG9uc2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVz
cG9uc2UgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPiYmLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRp
bWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZyhjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Jl
c291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5
Pik7CiAKQEAgLTEzMyw2MyArMTIzLDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJUEM6OkNv
bm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlIHsgcmV0dXJu
IG1fcGFyYW1ldGVycy5pZGVudGlmaWVyOyB9CiAKLSAgICBlbnVtIFNob3VsZENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlIHsKLSAgICAgICAgWWVzLAotICAgICAgICBObwotICAgIH07Ci0gICAg
U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICAgICAgdm9pZCBzaGFyZWRX
aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIHNoYXJlZERpZFJl
Y2VpdmVCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiwgaW50IHJlcG9ydGVk
RW5jb2RlZERhdGFMZW5ndGgpOwotICAgIHZvaWQgc2hhcmVkRGlkRmFpbChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJik7Ci0gICAgdm9pZCBzaGFyZWREaWRGaW5pc2hMb2FkaW5nKGRvdWJs
ZSBmaW5pc2hUaW1lKTsKLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gTmV0d29y
a1Nlc3Npb25UYXNrQ2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRp
cmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3Qg
V2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3Rk
OjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgZmluYWwgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+JiYpIGZpbmFsIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVdpdGhF
cnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWwgb3ZlcnJpZGU7Ci0jZWxz
ZQotICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTZW5k
UmVxdWVzdEFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlRGF0YShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCB1bnNp
Z25lZCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUJ1ZmZlcihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPiwgaW50IGVuY29kZWREYXRhTGVuZ3RoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSos
IGRvdWJsZSBmaW5pc2hUaW1lKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxs
YXRpb24oV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCB1c2VzQXN5bmNDYWxs
YmFja3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGxvYWRp
bmdTeW5jaHJvbm91c1hIUigpIG92ZXJyaWRlIHsgcmV0dXJuIGlzU3luY2hyb25vdXMoKTsgfQot
Ci0jaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKLSAgICB2aXJ0dWFsIHZv
aWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikgb3ZlcnJpZGU7
Ci0jZW5kaWYKLSNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRGF0YUFycmF5KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhQXJyYXkoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBDRkFycmF5UmVm
KSBvdmVycmlkZTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKENPQ09BKQotI2lmIFVTRShDRk5FVFdP
UkspCi0gICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBvdmVycmlkZTsKLSNlbHNlCi0g
ICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOwotI2VuZGlmCi0jZW5kaWYK
LSNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQotCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FD
SEUpCiAgICAgdm9pZCBkaWRSZXRyaWV2ZUNhY2hlRW50cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdv
cmtDYWNoZTo6RW50cnk+KTsKICAgICB2b2lkIHZhbGlkYXRlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4pOwogI2VuZGlmCiAKLSAgICB2b2lkIHN0YXJ0TmV0
d29ya0xvYWQoKTsKKyAgICB2b2lkIHN0YXJ0TmV0d29ya0xvYWQoY29uc3QgT3B0aW9uYWw8V2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0PiYgdXBkYXRlZFJlcXVlc3QgPSB7IH0pOwogICAgIHZvaWQg
Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIAogICAgIHZvaWQgY2xlYW51cCgpOwpAQCAt
MjAwLDI1ICsxMzksMTYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1ZmZlcmluZ1RpbWVyRmlyZWQo
KTsKICAgICBib29sIHNlbmRCdWZmZXJNYXliZUFib3J0aW5nKGNvbnN0IFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlciYsIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAKLSAgICBib29sIGlzU3luY2hy
b25vdXMoKSBjb25zdDsKLQogICAgIHZvaWQgY29uc3VtZVNhbmRib3hFeHRlbnNpb25zKCk7CiAg
ICAgdm9pZCBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGJvb2wgc2VuZEFib3J0aW5nT25GYWlsdXJlKFQmJiBtZXNzYWdlLCB1bnNpZ25l
ZCBtZXNzYWdlU2VuZEZsYWdzID0gMCk7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0xv
YWQ+IG1fbmV0d29ya0xvYWQ7CiAgICAgY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRl
cnMgbV9wYXJhbWV0ZXJzOwogCiAgICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzPiBtX2Nvbm5lY3Rpb247CiAKLSAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+
IG1fbmV0d29ya2luZ0NvbnRleHQ7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBSZWZQ
dHI8TmV0d29ya0RhdGFUYXNrPiBtX3Rhc2s7Ci0jZWxzZQotICAgIFJlZlB0cjxXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7Ci0jZW5kaWYKLQotICAgIFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ug
bV9yZXNwb25zZTsKIAogICAgIHNpemVfdCBtX2J5dGVzUmVjZWl2ZWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4ZTQ5MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbQpAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKQorI2ltcG9ydCAiTmV0d29ya0xvYWQuaCIKKworI2ltcG9ydCA8V2Vi
Q29yZS9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisjaWYg
VVNFKENGTkVUV09SSykKKwordm9pZCBOZXR3b3JrTG9hZDo6d2lsbENhY2hlUmVzcG9uc2VBc3lu
YyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNmUmVzcG9u
c2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CisK
KyAgICBtX2NsaWVudC53aWxsQ2FjaGVSZXNwb25zZUFzeW5jKGNmUmVzcG9uc2UpOworCisgICAg
bV9oYW5kbGUtPmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoY2ZSZXNwb25zZSk7Cit9CisKKyNl
bGlmICFVU0UoTkVUV09SS19TRVNTSU9OKQorCit2b2lkIE5ldHdvcmtMb2FkOjp3aWxsQ2FjaGVS
ZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVzcG9uc2Ug
Km5zUmVzcG9uc2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hh
bmRsZSk7CisKKyAgICBtX2NsaWVudC53aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFtuc1Jlc3BvbnNl
IF9DRkNhY2hlZFVSTFJlc3BvbnNlXSk7CisKKyAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsQ2Fj
aGVSZXNwb25zZShuc1Jlc3BvbnNlKTsKK30KKworI2VuZGlmIC8vICFVU0UoQ0ZORVRXT1JLKQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29y
a1Jlc291cmNlTG9hZGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFj
L05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQppbmRleCBmODIyMjdhLi44YTI4NmU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNl
TG9hZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgPFdlYkNv
cmUvQ0ZOZXR3b3JrU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8d3RmL01haW5UaHJlYWQu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTgyLDMyICs4MywxMiBAQCBzaXpl
X3QgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgp
CiAgICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKTsKIH0KIAotI2lmIFVT
RShDRk5FVFdPUkspCi0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNw
b25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYg
Y2ZSZXNwb25zZSkKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25z
ZUFzeW5jKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKIHsKLSAgICBBU1NFUlRf
VU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQogICAgIGlmIChtX2J5dGVzUmVj
ZWl2ZWQgPj0gZmlsZUJhY2tlZFJlc291cmNlTWluaW11bVNpemUoKSkKICAgICAgICAgTmV0d29y
a0Rpc2tDYWNoZU1vbml0b3I6Om1vbml0b3JGaWxlQmFja2luZ1N0b3JlQ3JlYXRpb24oY2ZSZXNw
b25zZSwgdGhpcyk7Ci0KLSAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZShj
ZlJlc3BvbnNlKTsKIH0KIAotI2VsaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0KLXZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKm5zUmVzcG9uc2UpCi17Ci0gICAgQVNTRVJU
X1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KLSAgICBpZiAobV9ieXRlc1Jl
Y2VpdmVkID49IGZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCkpCi0gICAgICAgIE5ldHdv
cmtEaXNrQ2FjaGVNb25pdG9yOjptb25pdG9yRmlsZUJhY2tpbmdTdG9yZUNyZWF0aW9uKFtuc1Jl
c3BvbnNlIF9DRkNhY2hlZFVSTFJlc3BvbnNlXSwgdGhpcyk7Ci0KLSAgICBtX2hhbmRsZS0+Y29u
dGludWVXaWxsQ2FjaGVSZXNwb25zZShuc1Jlc3BvbnNlKTsKLX0KLQotI2VuZGlmIC8vICFVU0Uo
Q0ZORVRXT1JLKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMzM1ODRhMC4uMzVkOTc0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE4MCw2ICsxMTgw
LDcgQEAKIAkJODM0QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3Rp
Y3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIy
NTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi87IH07CiAJ
CTgzNjAzNDlGMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM2MDM0OUQx
QUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CiAJ
CTgzNjAzNEEwMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNjAzNDlFMUFD
QjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLzsgfTsKKwkJODM2
RUVCODAxQkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtMb2FkTWFjLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM2RUVCN0YxQkU5RUM5RTAwNkI0Qjgy
IC8qIE5ldHdvcmtMb2FkTWFjLm1tICovOyB9OwogCQk4MzcyREIyNTFBNjc0QzhGMDBDNjk3QzUg
LyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1Bh
Z2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTgzNzJEQjI4MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi87IH07CiAJCTgzNzJEQjI5MUE2NzU2MjgwMEM2OTdD
NSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBX
ZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKQEAgLTExODgsNyArMTE4OSwx
MiBAQAogCQk4Mzg5MUI2OTFBNjhCRUJDMDAzMEYzODYgLyogX1dLRGlhZ25vc3RpY0xvZ2dpbmdE
ZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODM4OTFCNjgxQTY4QkVCQzAwMzBGMzg2IC8qIF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Mzg5
MUI2QzFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzODkxQjZBMUE2OEMzMEIw
MDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyB9OwogCQk4Mzg5MUI2RDFB
NjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Mzg5MUI2QjFBNjhDMzBCMDAzMEYz
ODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW0gKi87IH07CisJCTgzOTE0OTY0MUJFQTgz
ODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM5MTQ5NjIxQkVBODM4NTAwRDJEOTUzIC8q
IE5ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAgKi87IH07CisJCTgzOTE0OTY1MUJFQTgzODUwMEQy
RDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzOTE0OTYzMUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3Jr
TG9hZFBhcmFtZXRlcnMuaCAqLzsgfTsKKwkJODM5OTAyMDIxQkU5QTAyQjAwMEYzNjUzIC8qIE5l
dHdvcmtMb2FkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDgzOTkwMUZGMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgKi87IH07CisJ
CTgzOTkwMjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM5OTAxRkUxQkU5QTAxQjAwMEYzNjUz
IC8qIE5ldHdvcmtMb2FkLmggKi87IH07CiAJCTgzQkRDQ0I5MUFDNUZEQjYwMDNGNjQ0MSAvKiBO
ZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzQkRDQ0I4MUFDNUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzLmNwcCAqLzsgfTsKKwkJODNENDU0RDcxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdv
cmtMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCAqLzsg
fTsKIAkJODQ0Nzc4NTMxNzZGQ0MwODAwQ0RDN0JCIC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFJl
c3VsdE1lZGlhVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODQ0Nzc4NTExNzZGQ0FDMTAwQ0RDN0JCIC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFJl
c3VsdE1lZGlhVHlwZS5oICovOyB9OwogCQk4NjgxNjBEMDE4NzY0NTU3MDAyMUU3OUQgLyogV2lu
ZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2ODE2MENGMTg3NjQ1MzcwMDIxRTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25u
ZWN0aW9uLm1tICovOyB9OwogCQk4NkU2N0EyNTE5MTBCOUQxMDAwMDRBQjcgLyogUHJvY2Vzc1Ro
cm90dGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODZFNjdBMjExOTBGNDExODAwMDA0QUI3IC8qIFByb2Nlc3NUaHJvdHRsZXIuaCAqLzsgfTsKQEAg
LTM0MDgsNiArMzQxNCw3IEBACiAJCTgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdv
cmtDYWNoZVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM2MDM0
OUQxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzYwMzQ5RTFBQ0IzNEQ2MDA2MjY1
NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4MzZFRUI3RjFCRTlFQzlFMDA2QjRCODIgLyogTmV0d29ya0xvYWRNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrTG9hZE1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1
IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTM0MTYsNyArMzQyMywxMiBAQAogCQk4Mzg5MUI2ODFBNjhCRUJDMDAzMEYzODYgLyogX1dL
RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzODkxQjZBMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2QjFBNjhDMzBC
MDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM5MTQ5NjIxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdv
cmtMb2FkUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWRQYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM5MTQ5
NjMxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaDsgcGF0aCA9IE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0xvYWQuaDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgz
OTkwMUZGMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrTG9hZC5jcHA7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzQkRD
Q0I4MUFDNUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQg
LyogTmV0d29ya0xvYWRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TmV0d29ya0xvYWRDbGllbnQuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NDc3ODUxMTc2RkNBQzEwMENE
QzdCQiAvKiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2ODE2MENEMTg3NjNENEIwMDIx
RTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdpbmRvd1Nl
cnZlckNvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4MTYwQ0Yx
ODc2NDUzNzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTU5OSw2ICs1NjExLDExIEBACiAJCQkJNTEzQTE2NDkxNjMwQTlCRjAwNUQ3
RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQk1MTNBMTY0
QTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywK
IAkJCQk1MTNBMTY0QjE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4gKi8sCisJCQkJODM5OTAxRkYxQkU5QTAxQjAwMEYzNjUzIC8qIE5l
dHdvcmtMb2FkLmNwcCAqLywKKwkJCQk4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29y
a0xvYWQuaCAqLywKKwkJCQk4M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRD
bGllbnQuaCAqLywKKwkJCQk4MzkxNDk2MjFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzLmNwcCAqLywKKwkJCQk4MzkxNDk2MzFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29y
a0xvYWRQYXJhbWV0ZXJzLmggKi8sCiAJCQkJNTEwQ0M3REYxNjEzOEUyOTAwRDAzRUQzIC8qIE5l
dHdvcmtQcm9jZXNzLmNwcCAqLywKIAkJCQk1MTBDQzdFMDE2MTM4RTI5MDBEMDNFRDMgLyogTmV0
d29ya1Byb2Nlc3MuaCAqLywKIAkJCQk1MUE4QTYxNzE2MjdGNUJCMDAwRDkwRTkgLyogTmV0d29y
a1Byb2Nlc3MubWVzc2FnZXMuaW4gKi8sCkBAIC01NjE5LDYgKzU2MzYsNyBAQAogCQkJCUUxN0FF
MkMxMTZCOUMxMzkwMDFDNDJGMSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtQcm9jZXNzLnNi
LmluICovLAogCQkJCTUxNjdFRTlFMTcwMzc3QkYwMDc2ODFDQSAvKiBOZXR3b3JrRGlza0NhY2hl
TW9uaXRvci5oICovLAogCQkJCTUxNjdFRTlGMTcwMzc3QkYwMDc2ODFDQSAvKiBOZXR3b3JrRGlz
a0NhY2hlTW9uaXRvci5tbSAqLywKKwkJCQk4MzZFRUI3RjFCRTlFQzlFMDA2QjRCODIgLyogTmV0
d29ya0xvYWRNYWMubW0gKi8sCiAJCQkJNTFBOEE2MTUxNjI3RjNGOTAwMEQ5MEU5IC8qIE5ldHdv
cmtQcm9jZXNzTWFjLm1tICovLAogCQkJCTUxRTNCNjdFMTZGMjY2QjMwMDk5NjhEQyAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8sCiAJCQkJRTFCNzg0NzIxNjNGMjUzRTAwMDdCNjky
IC8qIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tICovLApAQCAtNzY0Myw2ICs3NjYxLDcgQEAK
IAkJCQkzNzYzMTFGRDFBM0ZCNUY3MDA1QTJFNTEgLyogX1dLU2FtZURvY3VtZW50TmF2aWdhdGlv
blR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjMxMUZFMUEzRkI2MDAwMDVBMkU1MSAvKiBf
V0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTAwMkQ0NDE5NkIzMzg5MDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk4Mzk5MDIwMzFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBMDAyRDQzMTk2QjMzNzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3Rh
dGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ2QjM3MUIxOEE5NjdBRDAwNDJBRTgw
IC8qIF9XS1RodW1ibmFpbFZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUNFNjRFMThBREJG
RjAwMEU0Q0E3NiAvKiBfV0tUaHVtYm5haWxWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApA
QCAtNzkxMCw2ICs3OTI5LDcgQEAKIAkJCQkxQThFRjRDQjEyNTI0MDM3MDBGNzA2N0YgLyogUGx1
Z2luQ29udHJvbGxlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThFRjk2RjEyNTJBRjZC
MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBMTc5NzgwMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRl
cnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3
b3JrTG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzRjhDOTExNzNBRjUyRDAwN0I3
RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUVGQ0MxMjEx
RDAxRjk2MDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTNENjEwMjEzQTdDQzJBMDBGOTVENEUgLyogUGx1Z2luTW9kdWxlSW5mby5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03OTYyLDYgKzc5ODIsNyBAQAogCQkJCTFBQUI0QThEMTI5NkYwQTIwMDIzOTUyRiAv
KiBTYW5kYm94RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUU1NTJDNTE2QUUwNjVG
MDA0RUQ2NTMgLyogU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5MzFDMUMxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxv
d1Njcm9sbGluZ05vZGVJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzOTE0OTY1MUJFQTgzODUw
MEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RDEzMDU0MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxRDEzMDU2MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTc5MDg4RjE2OUJBQTZBMDA2OTA0QzcgLyogU2VjSXRl
bVNoaW0uaCBpbiBIZWFkZXJzICovLApAQCAtOTUyOSw2ICs5NTUwLDcgQEAKIAkJCQlCQzAzMkRB
NTEwRjQzN0QxMDA1OEMxNUEgLyogQXJndW1lbnREZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDMDMyREE3MTBGNDM3RDEwMDU4QzE1QSAvKiBBcmd1bWVudEVuY29kZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQzU5QzRBNTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUlu
Zm9ybWF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTgzOTkwMjAyMUJFOUEwMkIwMDBGMzY1
MyAvKiBOZXR3b3JrTG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTVFNzcyNzE4M0RENkY2
MDAwNzIwM0YgLyogQXN5bmNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUU5NjZD
MTEyRkFGNTcwMDZCQ0MyNCAvKiBBdHRhY2htZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
QTMxNzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC05NTQ3LDYgKzk1NjksNyBAQAogCQkJCTlGNTRGODhGMTY0ODhFODcwMDdERjgxQSAv
KiBDaGlsZFByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUZBRUMzQjFCMDY1NzY4
MDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxNTEzQzY2MTY2RUFCQjIwMDE0OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk4MzkxNDk2NDFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xv
YWRQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkE0QjBFMTU4NkEyMjQwMDkw
QzlFOSAvKiBDb2xvclNwYWNlRGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNkY5RkI3MTFF
MTQwODUwMERCMTM3MSAvKiBDb21tYW5kTGluZVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTM3QkVDNEUwMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2Vy
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC05ODQxLDYgKzk4NjQsNyBAQAogCQkJCTRBM0NDMThDMTlC
MDY0MTUwMEQxNEFFRiAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUU0RTg2NDkyMUIxNjc1MDEwMEM4MkY0MCAvKiBWZXJzaW9uQ2hlY2tz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBRjRGRkIxQjYzNjE4MTAwNjAxM0Q2IC8qIFZpZXdH
ZXN0dXJlQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzZFRUI4MDFCRTlFQzlF
MDA2QjRCODIgLyogTmV0d29ya0xvYWRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREY5NTkz
QjE4QTQyNDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkQxMjVDNUYxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJv
bGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMUI1RDVEMTg1ODY5QzgwMDZDNjU5NiAv
KiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264801</attachid>
            <date>2015-11-04 11:08:43 -0800</date>
            <delta_ts>2015-11-04 11:24:17 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>split_NetworkResourceLoader_wip.patch</filename>
            <type>text/plain</type>
            <size>74552</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggZGVkNDYxNy4uNmNkOTY3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE2Miw2ICsxNjIsOCBAQCBlbmRpZiAoKQogCiBzZXQoTmV0d29ya1Byb2Nlc3Nf
Q09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKyAgICBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDBhMjNiN2YuLjJiMjE1
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAog
I2luY2x1ZGUgIk5ldHdvcmtCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya0xvYWQuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCkBAIC0yMDIs
MTAgKzIwMywxMCBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb252ZXJ0
TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQodWludDY0X3QgbQogICAgIC8vIEZJWE1FOiBEbyBz
b21ldGhpbmcgaGVyZS4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogI2Vsc2UKLSAgICBuZXR3b3Jr
UHJvY2Vzcy5kb3dubG9hZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChkb3dubG9h
ZElELCBsb2FkZXItPmhhbmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7CisgICAgbmV0d29ya1By
b2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQoZG93bmxvYWRJ
RCwgbG9hZGVyLT5uZXR3b3JrTG9hZCgpLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOwog
CiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1ZXVlLgotICAg
IGxvYWRlci0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgbG9h
ZGVyLT5uZXR3b3JrTG9hZCgpLT5oYW5kbGUoKS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Uo
KTsKICAgICAKICAgICBsb2FkZXItPmRpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKCk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDc2OTVmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC0wLDAg
KzEsMzY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKKyNpbmNsdWRlICJOZXR3b3JrTG9hZC5oIgorCisjaW5jbHVkZSAi
QXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNp
bmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25J
RC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiAhVVNFKE5FVFdPUktfU0VT
U0lPTikKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitOZXR3b3JrTG9h
ZDo6TmV0d29ya0xvYWQoTmV0d29ya0xvYWRDbGllbnQmIGNsaWVudCwgY29uc3QgTmV0d29ya0xv
YWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwg
bV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpCisgICAgLCBtX25ldHdvcmtpbmdDb250ZXh0KFJlbW90
ZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUocGFyYW1ldGVycy5zZXNzaW9uSUQsIHBhcmFtZXRl
cnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkpCisgICAgLCBtX2N1
cnJlbnRSZXF1ZXN0KHBhcmFtZXRlcnMucmVxdWVzdCkKK3sKKyAgICBib29sIHNob3VsZFNuaWZm
ID0gbV9wYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNvbnRlbnQ7Cisj
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBVTlVTRURfUEFSQU0oc2hvdWxkU25pZmYpOyAv
LyBGSVhNRTogVXNlIHRoaXMuCisgICAgbV90YXNrID0gU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtT
ZXNzaW9uKHBhcmFtZXRlcnMuc2Vzc2lvbklEKS0+Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdCht
X2N1cnJlbnRSZXF1ZXN0LCAqdGhpcyk7CisgICAgbV90YXNrLT5yZXN1bWUoKTsKKyNlbHNlCisg
ICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fbmV0d29ya2luZ0NvbnRleHQu
Z2V0KCksIG1fY3VycmVudFJlcXVlc3QsIHRoaXMsIG1fcGFyYW1ldGVycy5kZWZlcnNMb2FkaW5n
LCBzaG91bGRTbmlmZik7CisjZW5kaWYKK30KKworTmV0d29ya0xvYWQ6On5OZXR3b3JrTG9hZCgp
Cit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQorICAgIGlmIChtX3Rhc2spCisgICAgICAgIG1fdGFzay0+Y2xlYXJDbGllbnQoKTsKKyNl
bHNlCisgICAgaWYgKG1faGFuZGxlKQorICAgICAgICBtX2hhbmRsZS0+Y2xlYXJDbGllbnQoKTsK
KyNlbmRpZgorfQorCit2b2lkIE5ldHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVm
ZXJzKQoreworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gRklYTUU6IERvIHNvbWV0
aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQorICAgIGlmIChtX2hhbmRs
ZSkgeworICAgICAgICBtX2hhbmRsZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmNhbmNlbCgp
Cit7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBpZiAobV90YXNrKQorICAgICAgICBt
X3Rhc2stPmNhbmNlbCgpOworI2Vsc2UKKyAgICBpZiAobV9oYW5kbGUpCisgICAgICAgIG1faGFu
ZGxlLT5jYW5jZWwoKTsKKyNlbmRpZgorfQorCit2b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZVdp
bGxTZW5kUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3Qp
Cit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgbV9jdXJyZW50UmVxdWVzdC51cGRhdGVGcm9t
RGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGllcyhuZXdSZXF1ZXN0Lm5zVVJMUmVxdWVzdChE
b05vdFVwZGF0ZUhUVFBCb2R5KSk7CisjZWxpZiBVU0UoU09VUCkKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IFJlc291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFBy
b3BlcnRpZXMuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2
MTI3LgorICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09s
ZFByb3BlcnRpZXMobmV3UmVxdWVzdCk7CisjZW5kaWYKKworICAgIGlmIChtX2N1cnJlbnRSZXF1
ZXN0LmlzTnVsbCgpKSB7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAgICAgLy8gRklY
TUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UK
KyAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworICAgICAgICBkaWRGYWlsKG1faGFuZGxlLmdl
dCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7CisjZW5kaWYKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gRklYTUU6
IERvIHNvbWV0aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQorICAgIG1f
aGFuZGxlLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKKyNlbmRp
ZgorfQorCit2b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCit7
CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhl
cmUuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIGNoZWNrIG9uY2UgQmxvYlJlc291cmNlSGFuZGxlIGltcGxlbWVudHMgZGlkUmVjZWl2ZVJl
c3BvbnNlQXN5bmMgY29ycmVjdGx5LgorICAgIC8vIEN1cnJlbnRseSwgaXQgZG9lcyBub3Qgd2Fp
dCBmb3IgcmVzcG9uc2UsIHNvIHRoZSBsb2FkIGlzIGxpa2VseSB0byBmaW5pc2ggYmVmb3JlIGNv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlLgorICAgIGlmICghbV9oYW5kbGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworI2Vu
ZGlmCit9CisKK05ldHdvcmtMb2FkQ2xpZW50OjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNw
b25zZSBOZXR3b3JrTG9hZDo6c2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCit7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZSA9IHJlY2VpdmVkUmVzcG9uc2U7CisgICAgcmVzcG9uc2Uuc2V0U291cmNlKFJlc291cmNl
UmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yayk7CisgICAgaWYgKG1fcGFyYW1ldGVycy5uZWVkc0Nl
cnRpZmljYXRlSW5mbykKKyAgICAgICAgcmVzcG9uc2UuaW5jbHVkZUNlcnRpZmljYXRlSW5mbygp
OworCisgICAgcmV0dXJuIG1fY2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Cit9
CisKK3ZvaWQgTmV0d29ya0xvYWQ6OnNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRp
cmVjdFJlc3BvbnNlKQoreworICAgIC8vIFdlIG9ubHkgZXhwZWN0IHRvIGdldCB0aGUgd2lsbFNl
bmRSZXF1ZXN0IGNhbGxiYWNrIGZyb20gUmVzb3VyY2VIYW5kbGUgYXMgdGhlIHJlc3VsdCBvZiBh
IHJlZGlyZWN0LgorICAgIEFTU0VSVCghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSk7CisgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fY3VycmVudFJlcXVlc3QgPSByZXF1
ZXN0OworICAgIG1fY2xpZW50LndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QocmVxdWVzdCwgcmVk
aXJlY3RSZXNwb25zZSk7Cit9CisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCit2b2lkIE5l
dHdvcmtMb2FkOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlcXVlc3QpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpk
aWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9u
LCBjb25zdCBDcmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgQ3JlZGVudGlhbCgpKTsKK30KKwor
dm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+IGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc2hh
cmVkRGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihS
ZXNwb25zZURpc3Bvc2l0aW9uOjpBbGxvdyk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFJl
Y2VpdmVEYXRhKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIEFTU0VSVChi
dWZmZXIpOworICAgIGF1dG8gc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOworICAgIG1fY2xpZW50LmRp
ZFJlY2VpdmVCdWZmZXIoV1RGOjptb3ZlKGJ1ZmZlciksIHNpemUpOworfQorCit2b2lkIE5ldHdv
cmtMb2FkOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
K3sKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisgICAgICAgIG1fY2xpZW50LmRpZEZpbmlzaExv
YWRpbmcoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgZWxzZQorICAg
ICAgICBtX2NsaWVudC5kaWRGYWlsTG9hZGluZyhlcnJvcik7Cit9CisKKyNlbHNlCisKK3ZvaWQg
TmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCit7CisgICAgQVNT
RVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CisgICAgaWYgKHNoYXJlZERp
ZFJlY2VpdmVSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNlKSA9PSBOZXR3b3JrTG9hZENsaWVudDo6
U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2U6OlllcykKKyAgICAgICAgbV9oYW5kbGUt
PmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRp
ZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywgdW5z
aWduZWQgLyogbGVuZ3RoICovLCBpbnQgLyogZW5jb2RlZERhdGFMZW5ndGggKi8pCit7CisgICAg
Ly8gVGhlIE5ldHdvcmtQcm9jZXNzIHNob3VsZCBuZXZlciBnZXQgYSBkaWRSZWNlaXZlRGF0YSBj
YWxsYmFjay4KKyAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIHVzaW5nIGRpZFJlY2VpdmVCdWZm
ZXIuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRp
ZFJlY2VpdmVCdWZmZXIoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlciwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCit7CisgICAgQVNT
RVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CisgICAgbV9jbGllbnQuZGlk
UmVjZWl2ZUJ1ZmZlcihXVEY6Om1vdmUoYnVmZmVyKSwgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0
aCk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgZG91YmxlIGZpbmlzaFRpbWUpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5k
bGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CisgICAgbV9jbGllbnQuZGlkRmluaXNoTG9hZGluZyhm
aW5pc2hUaW1lKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBBU1NFUlRfVU5V
U0VEKGhhbmRsZSwgIWhhbmRsZSB8fCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIEFTU0VSVCgh
ZXJyb3IuaXNOdWxsKCkpOworCisgICAgbV9jbGllbnQuZGlkRmFpbExvYWRpbmcoZXJyb3IpOwor
fQorCit2b2lkIE5ldHdvcmtMb2FkOjp3aWxsU2VuZFJlcXVlc3RBc3luYyhSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUs
IGhhbmRsZSA9PSBtX2hhbmRsZSk7CisgICAgc2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVz
dChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKK30KKworI2VuZGlmIC8vIFVTRShORVRXT1JL
X1NFU1NJT04pCisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKSAmJiAh
VVNFKE5FVFdPUktfU0VTU0lPTikKK3ZvaWQgTmV0d29ya0xvYWQ6OmNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBQ
cm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUp
OworCisgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBsYXRmb3JtLWxl
dmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisgICAgaWYgKHByb3Rl
Y3Rpb25TcGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkCisgICAgICAgICYm
ICFOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2
YWx1YXRpb24oKSkgeworICAgICAgICBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
Y2xpZW50LmlzU3luY2hyb25vdXMoKSkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFz
ayB0aGUgV2ViUHJvY2VzcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgY2FzZSBiZWxvdyBkb2VzLgor
ICAgICAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGFzIHRoZSBXZWJQcm9jZXNz
IGlzIGJsb2NrZWQgd2FpdGluZyBvbiB0aGlzIHN5bmNocm9ub3VzIGxvYWQuCisgICAgICAgIC8v
IEl0J3MgcG9zc2libGUgdGhhdCB3ZSBjYW4ganVtcCBzdHJhaWdodCB0byB0aGUgVUkgcHJvY2Vz
cyB0byByZXNvbHZlIHRoaXMuCisgICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZSh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
Y2xpZW50LmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhwcm90ZWN0
aW9uU3BhY2UpOworfQorI2VuZGlmCisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NB
TExCQUNLKQordm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQoreworI2lmIFVTRShORVRXT1JLX1NFU1NJT04p
CisgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7
CisjZWxzZQorICAgIG1faGFuZGxlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UocmVzdWx0KTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZiBVU0UoTkVUV09S
S19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spICYmICFVU0UoTkVUV09SS19TRVNTSU9OKQorYm9vbCBO
ZXR3b3JrTG9hZDo6c3VwcG9ydHNEYXRhQXJyYXkoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlRGF0
YUFycmF5KFJlc291cmNlSGFuZGxlKiwgQ0ZBcnJheVJlZikKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKKyNpZiAhVVNFKE5F
VFdPUktfU0VTU0lPTikKKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkU2VuZERhdGEoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwg
aGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIG1fY2xpZW50LmRpZFNlbmREYXRhKGJ5dGVzU2Vu
dCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6d2FzQmxvY2tl
ZChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBo
YW5kbGUgPT0gbV9oYW5kbGUpOworCisgICAgZGlkRmFpbChoYW5kbGUsIFdlYktpdDo6YmxvY2tl
ZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6Y2Fubm90
U2hvd1VSTChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFu
ZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworCisgICAgZGlkRmFpbChoYW5kbGUsIFdlYktpdDo6
Y2Fubm90U2hvd1VSTEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKK30KKworYm9vbCBOZXR3b3Jr
TG9hZDo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkK
K3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlIHx8ICFtX2hh
bmRsZSk7IC8vIG1faGFuZGxlIHdpbGwgYmUgMCBpZiBjYWxsZWQgZnJvbSBSZXNvdXJjZUhhbmRs
ZTo6c3RhcnQoKS4KKworICAgIC8vIFdoZW4gdGhlIFdlYlByb2Nlc3MgaXMgaGFuZGxpbmcgbG9h
ZGluZyBhIGNsaWVudCBpcyBjb25zdWx0ZWQgZWFjaCB0aW1lIHRoaXMgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UgcXVlc3Rpb24gaXMgYXNrZWQuCisgICAgLy8gSW4gTmV0d29ya1Byb2Nlc3Mg
bW9kZSB3ZSBhc2sgdGhlIFdlYlByb2Nlc3MgY2xpZW50IHVwIGZyb250IG9uY2UgYW5kIHRoZW4g
cmV1c2UgdGhlIGNhY2hlZCBhbnN3ZXIuCisKKyAgICAvLyBXZSBzdGlsbCBuZWVkIHRoaXMgc3lu
YyB2ZXJzaW9uLCBiZWNhdXNlIFJlc291cmNlSGFuZGxlIGl0c2VsZiB1c2VzIGl0IGludGVybmFs
bHksIGV2ZW4gd2hlbiB0aGUgZGVsZWdhdGUgdXNlcyBhbiBhc3luYyBvbmUuCisKKyAgICByZXR1
cm4gbV9wYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVk
ZW50aWFsczsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiBjaGFsbGVuZ2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9
PSBtX2hhbmRsZSk7CisgICAgLy8gTmV0d29ya1Jlc291cmNlTG9hZGVyIGRvZXMgbm90IGtub3cg
d2hldGhlciB0aGUgcmVxdWVzdCBpcyBjcm9zcyBvcmlnaW4sIHNvIFdlYiBwcm9jZXNzIGNvbXB1
dGVzIGFuIGFwcGxpY2FibGUgY3JlZGVudGlhbCBwb2xpY3kgZm9yIGl0LgorICAgIEFTU0VSVCht
X3BhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSAhPSBEb05vdEFza0NsaWVudEZvckNy
b3NzT3JpZ2luQ3JlZGVudGlhbHMpOworCisgICAgaWYgKG1fcGFyYW1ldGVycy5jbGllbnRDcmVk
ZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpIHsKKyAgICAg
ICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkUmVxdWVzdFRvQ29u
dGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFuYWdl
cigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMud2ViUGFn
ZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgY2hhbGxlbmdlKTsKK30KKwordm9pZCBOZXR3
b3JrTG9hZDo6ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQoreworICAgIEFTU0VSVF9V
TlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworCisgICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBwcm9iYWJseSBub3QgbmVlZGVkIChzZWUgPHJkYXI6Ly9wcm9ibGVtLzg5NjAxMjQ+KS4K
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpyZWNlaXZlZENh
bmNlbGxhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRs
ZSk7CisKKyAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7CisgICAgZGlkRmFpbChtX2hhbmRsZS5nZXQo
KSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOworfQorCisjZW5kaWYgLy8gIVVT
RShORVRXT1JLX1NFU1NJT04pCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDdjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCkBAIC0wLDAgKzEsMTMxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrTG9hZF9oCisjZGVmaW5lIE5ldHdvcmtMb2Fk
X2gKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNpbmNsdWRlICJOZXR3b3JrTG9h
ZENsaWVudC5oIgorI2luY2x1ZGUgIk5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIgorI2luY2x1ZGUg
IlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQor
I2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjZWxzZQorI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VIYW5kbGVDbGllbnQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgTmV0d29ya0xvYWQKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIDogcHVibGljIE5l
dHdvcmtTZXNzaW9uVGFza0NsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUNsaWVudAorI2VuZGlmCit7CitwdWJsaWM6CisgICAgTmV0d29ya0xvYWQoTmV0
d29ya0xvYWRDbGllbnQmLCBjb25zdCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmKTsKKyAgICB+TmV0
d29ya0xvYWQoKTsKKworICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKyAgICB2b2lk
IGNhbmNlbCgpOworCisgICAgdm9pZCBjbGVhckN1cnJlbnRSZXF1ZXN0KCkgeyBtX2N1cnJlbnRS
ZXF1ZXN0ID0gV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCk7IH0KKworICAgIHZvaWQgY29udGlu
dWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
dm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworCisjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKKyAgICAvLyBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQuCisgICAgdmlydHVhbCB2b2lk
IHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+KSBmaW5hbCBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+KSBmaW5hbCBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+
KSBmaW5hbCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBm
aW5hbCBvdmVycmlkZTsKKyNlbHNlCisgICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0QXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkU2VuZERhdGEoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
KiwgY29uc3QgY2hhciosIHVuc2lnbmVkLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBpbnQgZW5jb2RlZERhdGFM
ZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBkaWRGYWlsKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2Vk
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNh
bm5vdFNob3dVUkwoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGUqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2Vs
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBX
ZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIHVzZXNBc3luY0NhbGxiYWNrcygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgbG9hZGluZ1N5bmNocm9ub3VzWEhSKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bV9jbGllbnQuaXNTeW5jaHJvbm91cygpOyB9CisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9B
VVRIX0NBTExCQUNLKQorICAgIHZpcnR1YWwgdm9pZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3Jl
OjpQcm90ZWN0aW9uU3BhY2UmKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIFVTRShORVRXT1JLX0NG
REFUQV9BUlJBWV9DQUxMQkFDSykKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEYXRhQXJyYXko
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZSosIENGQXJyYXlSZWYpIG92ZXJyaWRlOworI2VuZGlmCisjaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgVVNFKENGTkVUV09SSykKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENh
Y2hlUmVzcG9uc2VBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIENGQ2FjaGVkVVJMUmVz
cG9uc2VSZWYpIG92ZXJyaWRlOworI2Vsc2UKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVz
cG9uc2VBc3luYyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2Ug
Kikgb3ZlcnJpZGU7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJ
T04pCisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZvaWQg
Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wpOworI2Vu
ZGlmCisKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGUuZ2V0KCk7IH0KKyNlbmRpZgor
Citwcml2YXRlOgorICAgIE5ldHdvcmtMb2FkQ2xpZW50OjpTaG91bGRDb250aW51ZURpZFJlY2Vp
dmVSZXNwb25zZSBzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpOworICAgIHZvaWQgc2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJik7CisKKyAgICBOZXR3b3JrTG9hZENsaWVudCYgbV9jbGllbnQ7CisgICAgY29uc3Qg
TmV0d29ya0xvYWRQYXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8UmVtb3RlTmV0
d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7CisjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBtX3Rhc2s7CisjZWxzZQorICAgIFJl
ZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7CisjZW5kaWYKKworICAgIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OyAvLyBVcGRhdGVkIG9uIHJl
ZGlyZWN0cy4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKKworI2VuZGlmIC8vIE5ldHdvcmtMb2FkX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENsaWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNDg2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENsaWVudC5oCkBAIC0wLDAgKzEs
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtMb2FkQ2xpZW50X2gKKyNkZWZpbmUg
TmV0d29ya0xvYWRDbGllbnRfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
CisjaWYgUExBVEZPUk0oQ09DT0EpCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfQ0ZDYWNoZWRVUkxS
ZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZjsKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBQcm90ZWN0aW9uU3BhY2U7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBOZXR3b3JrTG9hZENsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+TmV0d29y
a0xvYWRDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29u
c3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFz
eW5jKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSA9
IDA7CisgICAgZW51bSBjbGFzcyBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSB7IE5v
LCBZZXMgfTsKKyAgICB2aXJ0dWFsIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIGRp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+JiYsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbExvYWRpbmcoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpID0g
MDsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVSZXNw
b25zZUFzeW5jKENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpID0gMDsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQor
CisjZW5kaWYgLy8gTmV0d29ya0xvYWRDbGllbnRfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWFjZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcApAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitOZXR3
b3JrTG9hZFBhcmFtZXRlcnM6Ok5ldHdvcmtMb2FkUGFyYW1ldGVycygpCisgICAgOiB3ZWJQYWdl
SUQoMCkKKyAgICAsIHdlYkZyYW1lSUQoMCkKKyAgICAsIHNlc3Npb25JRChTZXNzaW9uSUQ6OmVt
cHR5U2Vzc2lvbklEKCkpCisgICAgLCBjb250ZW50U25pZmZpbmdQb2xpY3koU25pZmZDb250ZW50
KQorICAgICwgYWxsb3dTdG9yZWRDcmVkZW50aWFscyhEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlh
bHMpCisgICAgLCBjbGllbnRDcmVkZW50aWFsUG9saWN5KERvTm90QXNrQ2xpZW50Rm9yQW55Q3Jl
ZGVudGlhbHMpCisgICAgLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
KHRydWUpCisgICAgLCBkZWZlcnNMb2FkaW5nKGZhbHNlKQorICAgICwgbmVlZHNDZXJ0aWZpY2F0
ZUluZm8oZmFsc2UpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzk2MjIxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtMb2FkUGFyYW1ldGVyc19oCisjZGVmaW5lIE5ldHdv
cmtMb2FkUGFyYW1ldGVyc19oCisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrTG9hZFBhcmFtZXRlcnMgeworcHVibGlj
OgorICAgIE5ldHdvcmtMb2FkUGFyYW1ldGVycygpOworCisgICAgdWludDY0X3Qgd2ViUGFnZUlE
OworICAgIHVpbnQ2NF90IHdlYkZyYW1lSUQ7CisgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Np
b25JRDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKyAgICBXZWJDb3Jl
OjpDb250ZW50U25pZmZpbmdQb2xpY3kgY29udGVudFNuaWZmaW5nUG9saWN5OworICAgIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzIGFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CisgICAgV2ViQ29y
ZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50aWFsUG9saWN5OworICAgIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsKKyAgICBib29sIGRl
ZmVyc0xvYWRpbmc7CisgICAgYm9vbCBuZWVkc0NlcnRpZmljYXRlSW5mbzsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKwor
I2VuZGlmIC8vIE5ldHdvcmtMb2FkUGFyYW1ldGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCAwODQ2
YTUwLi5kYmJiMzk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTI4LDM1ICsyOCwyOCBAQAogCiAjaWYg
RU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdl
ci5oIgogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiTmV0d29ya0Jsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5o
IgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAi
TmV0d29ya0xvYWQuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnMuaCIKLSNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5o
IgotI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3Vy
Y2UuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJFcnJvcnMuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJj
ZUxvYWRlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CbG9iRGF0YUZpbGVSZWZlcmVu
Y2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NlcnRpZmljYXRlSW5mby5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHJvdGVjdGlvblNwYWNlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N5bmNocm9ub3VzTG9hZGVy
Q2xpZW50Lmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KIAotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VIYW5kbGUuaD4KLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMjAsMTEgKzExMyw3IEBAIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzCiBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6On5OZXR3b3JrUmVzb3VyY2VMb2FkZXIo
KQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0jaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKLSAgICBBU1NFUlQoIW1fdGFzayk7Ci0jZWxzZQotICAgIEFTU0VSVCghbV9oYW5kbGUp
OwotI2VuZGlmCisgICAgQVNTRVJUKCFtX25ldHdvcmtMb2FkKTsKICAgICBBU1NFUlQoIWlzU3lu
Y2hyb25vdXMoKSB8fCAhbV9zeW5jaHJvbm91c0xvYWREYXRhLT5kZWxheWVkUmVwbHkpOwogfQog
CkBAIC0xNDAsOCArMTI5LDYgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkK
ICAgICBpZiAobV9kZWZlcnNMb2FkaW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2N1cnJl
bnRSZXF1ZXN0ID0gb3JpZ2luYWxSZXF1ZXN0KCk7Ci0KICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKICAgICBpZiAoIU5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkgfHwgc2Vz
c2lvbklEKCkuaXNFcGhlbWVyYWwoKSB8fCAhb3JpZ2luYWxSZXF1ZXN0KCkudXJsKCkucHJvdG9j
b2xJc0luSFRUUEZhbWlseSgpKSB7CiAgICAgICAgIHN0YXJ0TmV0d29ya0xvYWQoKTsKQEAgLTE3
MywxMCArMTYwLDI1IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAjZW5k
aWYKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQoKQor
c3RhdGljIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBjb25zdHJ1Y3ROZXR3b3JrTG9hZFBhcmFtZXRl
cnMoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0
IE9wdGlvbmFsPFJlc291cmNlUmVxdWVzdD4mIHVwZGF0ZWRSZXF1ZXN0KQogewotICAgIG1fbmV0
d29ya2luZ0NvbnRleHQgPSBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKHNlc3Npb25J
RCgpLCBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dCk7CisgICAgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIG5ldHdvcmtMb2FkUGFyYW1ldGVyczsKKyAg
ICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMud2ViUGFnZUlEID0gcGFyYW1ldGVycy53ZWJQYWdlSUQ7
CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLndlYkZyYW1lSUQgPSBwYXJhbWV0ZXJzLndlYkZy
YW1lSUQ7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLnNlc3Npb25JRCA9IHBhcmFtZXRlcnMu
c2Vzc2lvbklEOworICAgIG5ldHdvcmtMb2FkUGFyYW1ldGVycy5yZXF1ZXN0ID0gdXBkYXRlZFJl
cXVlc3QgPyB1cGRhdGVkUmVxdWVzdC52YWx1ZSgpIDogcGFyYW1ldGVycy5yZXF1ZXN0OworICAg
IG5ldHdvcmtMb2FkUGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3kgPSBwYXJhbWV0ZXJz
LmNvbnRlbnRTbmlmZmluZ1BvbGljeTsKKyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMuYWxsb3dT
dG9yZWRDcmVkZW50aWFscyA9IHBhcmFtZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKKyAg
ICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9IHBhcmFtZXRl
cnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKKyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMuc2hv
dWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCA9IHBhcmFtZXRlcnMuc2hvdWxk
Q2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsKKyAgICBuZXR3b3JrTG9hZFBhcmFt
ZXRlcnMuZGVmZXJzTG9hZGluZyA9IHBhcmFtZXRlcnMuZGVmZXJzTG9hZGluZzsKKyAgICBuZXR3
b3JrTG9hZFBhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8gPSBwYXJhbWV0ZXJzLm5lZWRz
Q2VydGlmaWNhdGVJbmZvOwogCisgICAgcmV0dXJuIG5ldHdvcmtMb2FkUGFyYW1ldGVyczsKK30K
Kwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQoY29uc3QgT3B0
aW9uYWw8UmVzb3VyY2VSZXF1ZXN0PiYgdXBkYXRlZFJlcXVlc3QpCit7CiAgICAgY29uc3VtZVNh
bmRib3hFeHRlbnNpb25zKCk7CiAKICAgICBpZiAoaXNTeW5jaHJvbm91cygpIHx8IG1fcGFyYW1l
dGVycy5tYXhpbXVtQnVmZmVyaW5nVGltZSA+IDBfbXMpCkBAIC0xODcsMTQgKzE4OSw3IEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2FkKCkKICAgICAgICAgbV9i
dWZmZXJlZERhdGFGb3JDYWNoZSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CiAj
ZW5kaWYKIAotICAgIGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFtZXRlcnMuY29udGVudFNuaWZm
aW5nUG9saWN5ID09IFNuaWZmQ29udGVudDsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAg
IFVOVVNFRF9QQVJBTShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBVc2UgdGhpcy4KLSAgICBtX3Rh
c2sgPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKCkpLT5jcmVhdGVE
YXRhVGFza1dpdGhSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsICp0aGlzKTsKLSAgICBtX3Rhc2st
PnJlc3VtZSgpOwotI2Vsc2UKLSAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUo
bV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9jdXJyZW50UmVxdWVzdCwgdGhpcywgbV9kZWZl
cnNMb2FkaW5nLCBzaG91bGRTbmlmZik7Ci0jZW5kaWYKKyAgICBtX25ldHdvcmtMb2FkID0gc3Rk
OjptYWtlX3VuaXF1ZTxOZXR3b3JrTG9hZD4oKnRoaXMsIGNvbnN0cnVjdE5ldHdvcmtMb2FkUGFy
YW1ldGVycyhtX3BhcmFtZXRlcnMsIHVwZGF0ZWRSZXF1ZXN0KSk7CiB9CiAKIHZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQpAQCAtMjAyLDE1
ICsxOTcsOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhi
b29sIGRlZmVycykKICAgICBpZiAobV9kZWZlcnNMb2FkaW5nID09IGRlZmVycykKICAgICAgICAg
cmV0dXJuOwogICAgIG1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKLSNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotI2Vsc2UKLSAgICBpZiAobV9oYW5kbGUpIHsKLSAgICAgICAgbV9oYW5kbGUtPnNl
dERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgor
CisgICAgbV9uZXR3b3JrTG9hZC0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworCiAgICAgaWYg
KCFtX2RlZmVyc0xvYWRpbmcpCiAgICAgICAgIHN0YXJ0KCk7CiB9CkBAIC0yMjMsNDIgKzIxMiwy
NCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgpCiAKICAgICBpbnZhbGlk
YXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAg
aWYgKG1fdGFzaykgewotICAgICAgICBtX3Rhc2stPmNsZWFyQ2xpZW50KCk7Ci0gICAgICAgIG1f
dGFzayA9IG51bGxwdHI7Ci0gICAgfQotI2Vsc2UKLSAgICBpZiAobV9oYW5kbGUpIHsKLSAgICAg
ICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50KCk7Ci0gICAgICAgIG1faGFuZGxlID0gbnVsbHB0cjsK
LSAgICB9Ci0jZW5kaWYKKyAgICBtX25ldHdvcmtMb2FkID0gbnVsbHB0cjsKIAogICAgIC8vIFRo
aXMgd2lsbCBjYXVzZSBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgdG8gYmUgZGVzdHJveWVkIGFuZCB0
aGVyZWZvcmUgd2UgZG8gaXQgbGFzdC4KICAgICBtX2Nvbm5lY3Rpb24tPmRpZENsZWFudXBSZXNv
dXJjZUxvYWRlcigqdGhpcyk7CiB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKIHZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCgpCiB7Ci0g
ICAgQVNTRVJUKG1faGFuZGxlKTsKKyAgICBBU1NFUlQobV9uZXR3b3JrTG9hZCk7CiAgICAgbV9k
aWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCA9IHRydWU7CiB9Ci0jZW5kaWYKIAogdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBpZiAobV90YXNrKQotICAgICAg
ICBtX3Rhc2stPmNhbmNlbCgpOwotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgd2l0aCB0aGUg
bmV0d29yayBjYWNoZSBoZXJlLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAgIGlm
IChtX2hhbmRsZSAmJiAhbV9kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCkgewotICAgICAgICBt
X2hhbmRsZS0+Y2FuY2VsKCk7CisgICAgaWYgKG1fbmV0d29ya0xvYWQgJiYgIW1fZGlkQ29udmVy
dEhhbmRsZVRvRG93bmxvYWQpIHsKKyAgICAgICAgbV9uZXR3b3JrTG9hZC0+Y2FuY2VsKCk7CiAK
ICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuaXNFbmFibGVkKCkpIHsKQEAgLTI2OCwxNyArMjM5LDE0IEBAIHZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjphYm9ydCgpCiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KLSNlbmRp
ZgorCiAgICAgY2xlYW51cCgpOwogfQogCi1OZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlNob3VsZENv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVk
UmVzcG9uc2UpCithdXRvIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpIC0+IFNob3VsZENvbnRp
bnVlRGlkUmVjZWl2ZVJlc3BvbnNlCiB7CiAgICAgbV9yZXNwb25zZSA9IHJlY2VpdmVkUmVzcG9u
c2U7CiAKLSAgICBtX3Jlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6
Ok5ldHdvcmspOwotICAgIGlmIChtX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8pCi0g
ICAgICAgIG1fcmVzcG9uc2UuaW5jbHVkZUNlcnRpZmljYXRlSW5mbygpOwogICAgIC8vIEZvciBt
dWx0aXBhcnQveC1taXhlZC1yZXBsYWNlIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jIGdldHMgY2Fs
bGVkIG11bHRpcGxlIHRpbWVzIGFuZCBidWZmZXJpbmcgd291bGQgcmVxdWlyZSBzcGVjaWFsIGhh
bmRsaW5nLgogICAgIGlmICghaXNTeW5jaHJvbm91cygpICYmIG1fcmVzcG9uc2UuaXNNdWx0aXBh
cnQoKSkKICAgICAgICAgbV9idWZmZXJlZERhdGEgPSBudWxscHRyOwpAQCAtMzIyLDcgKzI5MCw3
IEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2UgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzCiAgICAgcmV0dXJuIFNob3VsZENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlOjpZZXM7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpz
aGFyZWREaWRSZWNlaXZlQnVmZmVyKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgYnVm
ZmVyLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkKK3ZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyLCBp
bnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNI
RSkKICAgICBBU1NFUlQoIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pOwpAQCAtMzQ5LDcgKzMx
Nyw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRSZWNlaXZlQnVmZmVy
KFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+CiAgICAgc2VuZEJ1ZmZlck1heWJlQWJvcnRp
bmcoKmJ1ZmZlciwgZW5jb2RlZERhdGFMZW5ndGgpOwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c2hhcmVkRGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSkKK3ZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1l
KQogewogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLmlzRW5hYmxlZCgpKSB7CkBAIC00MDQsNyArMzcyLDcgQEAgdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUp
CiAgICAgY2xlYW51cCgpOwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVk
RGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3ZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpkaWRGYWlsTG9hZGluZyhjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIHsKICAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKIApAQCAtNDIxLDIyMSArMzg5LDQ0
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRGYWlsKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQogICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewotICAgIC8vIFdl
IG9ubHkgZXhwZWN0IHRvIGdldCB0aGUgd2lsbFNlbmRSZXF1ZXN0IGNhbGxiYWNrIGZyb20gUmVz
b3VyY2VIYW5kbGUgYXMgdGhlIHJlc3VsdCBvZiBhIHJlZGlyZWN0LgotICAgIEFTU0VSVCghcmVk
aXJlY3RSZXNwb25zZS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIG1fY3VycmVudFJlcXVlc3QgPSByZXF1ZXN0OwotCiAjaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCiAgICAgV2ViQ29yZTo6dXBkYXRlUmVkaXJlY3RDaGFpblN0YXR1cyhtX3JlZGlyZWN0
Q2hhaW5DYWNoZVN0YXR1cywgcmVkaXJlY3RSZXNwb25zZSk7CiAjZW5kaWYKIAogICAgIGlmIChp
c1N5bmNocm9ub3VzKCkpIHsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG92ZXJyaWRlblJlcXVl
c3QgPSByZXF1ZXN0OwogICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBmaXhlZCB0
byBmb2xsb3cgdGhlIHJlZGlyZWN0IGNvcnJlY3RseSBldmVuIGZvciBjcm9zcy1kb21haW4gcmVx
dWVzdHMuCiAgICAgICAgIC8vIFRoaXMgaW5jbHVkZXMgYXQgbGVhc3QgdXBkYXRpbmcgaG9zdCBy
ZWNvcmRzLCBhbmQgY29tcGFyaW5nIHRoZSBjdXJyZW50IHJlcXVlc3QgaW5zdGVhZCBvZiB0aGUg
b3JpZ2luYWwgcmVxdWVzdCBoZXJlLgotICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChvcmlnaW5hbFJlcXVlc3QoKS51cmwoKSwgbV9jdXJyZW50UmVxdWVzdC51cmwoKSkp
IHsKKyAgICAgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwob3JpZ2luYWxSZXF1
ZXN0KCkudXJsKCksIHJlcXVlc3QudXJsKCkpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9zeW5j
aHJvbm91c0xvYWREYXRhLT5lcnJvci5pc051bGwoKSk7CiAgICAgICAgICAgICBtX3N5bmNocm9u
b3VzTG9hZERhdGEtPmVycm9yID0gU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OnBsYXRmb3JtQmFk
UmVzcG9uc2VFcnJvcigpOwotICAgICAgICAgICAgbV9jdXJyZW50UmVxdWVzdCA9IFJlc291cmNl
UmVxdWVzdCgpOworICAgICAgICAgICAgbV9uZXR3b3JrTG9hZC0+Y2xlYXJDdXJyZW50UmVxdWVz
dCgpOworICAgICAgICAgICAgb3ZlcnJpZGVuUmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdCgpOwog
ICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KG1fY3VycmVudFJlcXVl
c3QpOworICAgICAgICBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChvdmVycmlkZW5SZXF1ZXN0KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2Fn
ZXM6OldlYlJlc291cmNlTG9hZGVyOjpXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwg
cmVkaXJlY3RSZXNwb25zZSkpOwotfQotICAgIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0K
LXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIHNoYXJlZFdp
bGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QocmVxdWVzdCwgcmVzcG9uc2UpOwotICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJlcXVlc3QpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlk
UmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIFdlYkNv
cmU6OkNyZWRlbnRpYWwoKSk7CisgICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpX
ZWJSZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9u
c2UpKTsKIH0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlv
bjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShyZXNw
b25zZSk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoUmVzcG9uc2VEaXNwb3NpdGlvbjo6QWxsb3cp
OwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAgQVNTRVJUKGJ1ZmZlcik7
Ci0gICAgYXV0byBzaXplID0gYnVmZmVyLT5zaXplKCk7Ci0gICAgc2hhcmVkRGlkUmVjZWl2ZUJ1
ZmZlcihXVEY6Om1vdmUoYnVmZmVyKSwgc2l6ZSk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiBlcnJvcikKLXsKLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCi0gICAgICAgIHNoYXJlZERpZEZp
bmlzaExvYWRpbmcoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBzaGFyZWREaWRGYWlsKGVycm9yKTsKLX0KLQotI2Vsc2UKLQotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCi17Ci0g
ICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0gICAgaWYgKHNo
YXJlZERpZFJlY2VpdmVSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNlKSA9PSBTaG91bGRDb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQotICAgICAgICBtX2hhbmRsZS0+Y29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UoKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJl
Y2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywgdW5zaWdu
ZWQgLyogbGVuZ3RoICovLCBpbnQgLyogZW5jb2RlZERhdGFMZW5ndGggKi8pCi17Ci0gICAgLy8g
VGhlIE5ldHdvcmtQcm9jZXNzIHNob3VsZCBuZXZlciBnZXQgYSBkaWRSZWNlaXZlRGF0YSBjYWxs
YmFjay4KLSAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIHVzaW5nIGRpZFJlY2VpdmVCdWZmZXIu
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlQnVmZmVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVu
Z3RoKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwot
ICAgIHNoYXJlZERpZFJlY2VpdmVCdWZmZXIoV1RGOjptb3ZlKGJ1ZmZlciksIHJlcG9ydGVkRW5j
b2RlZERhdGFMZW5ndGgpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmlu
aXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBkb3VibGUgZmluaXNoVGltZSkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLSAgICBzaGFy
ZWREaWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgIWhhbmRsZSB8fCBoYW5k
bGUgPT0gbV9oYW5kbGUpOwotICAgIHNoYXJlZERpZEZhaWwoZXJyb3IpOwotfQotCi12b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBo
YW5kbGUgPT0gbV9oYW5kbGUpOwotICAgIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3Qo
cmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoTkVUV09SS19T
RVNTSU9OKQogICAgIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVlV2lsbFNl
bmRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkKIHsKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNl
cnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRU
UEJvZHkpKTsKLSNlbGlmIFVTRShTT1VQKQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgUmVzb3Vy
Y2VSZXF1ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGllcy4gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYxMjcuCi0gICAgbV9j
dXJyZW50UmVxdWVzdC51cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGllcyhu
ZXdSZXF1ZXN0KTsKLSNlbmRpZgotCi0gICAgaWYgKG1fY3VycmVudFJlcXVlc3QuaXNOdWxsKCkp
IHsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgICAgICAvLyBGSVhNRTogRG8gc29tZXRo
aW5nIGhlcmUuCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAgICAgICBtX2hh
bmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxl
ZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5n
IGhlcmUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCi0gICAgbV9oYW5kbGUtPmNvbnRp
bnVlV2lsbFNlbmRSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QpOwotI2VuZGlmCisgICAgbV9uZXR3
b3JrTG9hZC0+Y29udGludWVXaWxsU2VuZFJlcXVlc3QobmV3UmVxdWVzdCk7CiB9CiAKIHZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCiB7Ci0g
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNoZWNrIG9uY2UgQmxvYlJlc291cmNlSGFuZGxlIGlt
cGxlbWVudHMgZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMgY29ycmVjdGx5LgotICAgIC8vIEN1cnJl
bnRseSwgaXQgZG9lcyBub3Qgd2FpdCBmb3IgcmVzcG9uc2UsIHNvIHRoZSBsb2FkIGlzIGxpa2Vs
eSB0byBmaW5pc2ggYmVmb3JlIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlLgotI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCi0gICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwotI2VuZGlm
CisgICAgbV9uZXR3b3JrTG9hZC0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIAot
I2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3ZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNT
ZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQogewotICAgIEFTU0VS
VF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCiAgICAgaWYgKCFpc1N5bmNo
cm9ub3VzKCkpCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRT
ZW5kRGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCkpOwogfQogCi12b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6d2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewot
ICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCi0gICAgZGlk
RmFpbChoYW5kbGUsIFdlYktpdDo6YmxvY2tlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKLX0K
LQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFu
ZGxlKTsKLQotICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmNhbm5vdFNob3dVUkxFcnJvciht
X2N1cnJlbnRSZXF1ZXN0KSk7Ci19Ci0KLWJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewotICAgIEFT
U0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUgfHwgIW1faGFuZGxlKTsgLy8g
bV9oYW5kbGUgd2lsbCBiZSAwIGlmIGNhbGxlZCBmcm9tIFJlc291cmNlSGFuZGxlOjpzdGFydCgp
LgotCi0gICAgLy8gV2hlbiB0aGUgV2ViUHJvY2VzcyBpcyBoYW5kbGluZyBsb2FkaW5nIGEgY2xp
ZW50IGlzIGNvbnN1bHRlZCBlYWNoIHRpbWUgdGhpcyBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSBxdWVzdGlvbiBpcyBhc2tlZC4KLSAgICAvLyBJbiBOZXR3b3JrUHJvY2VzcyBtb2RlIHdlIGFz
ayB0aGUgV2ViUHJvY2VzcyBjbGllbnQgdXAgZnJvbnQgb25jZSBhbmQgdGhlbiByZXVzZSB0aGUg
Y2FjaGVkIGFuc3dlci4KLQotICAgIC8vIFdlIHN0aWxsIG5lZWQgdGhpcyBzeW5jIHZlcnNpb24s
IGJlY2F1c2UgUmVzb3VyY2VIYW5kbGUgaXRzZWxmIHVzZXMgaXQgaW50ZXJuYWxseSwgZXZlbiB3
aGVuIHRoZSBkZWxlZ2F0ZSB1c2VzIGFuIGFzeW5jIG9uZS4KLQotICAgIHJldHVybiBtX3BhcmFt
ZXRlcnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwot
fQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiBjaGFsbGVuZ2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9
PSBtX2hhbmRsZSk7Ci0gICAgLy8gTmV0d29ya1Jlc291cmNlTG9hZGVyIGRvZXMgbm90IGtub3cg
d2hldGhlciB0aGUgcmVxdWVzdCBpcyBjcm9zcyBvcmlnaW4sIHNvIFdlYiBwcm9jZXNzIGNvbXB1
dGVzIGFuIGFwcGxpY2FibGUgY3JlZGVudGlhbCBwb2xpY3kgZm9yIGl0LgotICAgIEFTU0VSVCht
X3BhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSAhPSBEb05vdEFza0NsaWVudEZvckNy
b3NzT3JpZ2luQ3JlZGVudGlhbHMpOwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5jbGllbnRDcmVk
ZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpIHsKLSAgICAg
ICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkUmVxdWVzdFRvQ29u
dGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFuYWdl
cigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMud2ViUGFn
ZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgY2hhbGxlbmdlKTsKLX0KLQotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAg
ICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgbm90IG5lZWRlZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS84
OTYwMTI0PikuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRs
ZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQotICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKLSAgICBk
aWRGYWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7
Ci19Ci0KLSNlbmRpZiAvLyAhVVNFKE5FVFdPUktfU0VTU0lPTikKLQogdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCgpCiB7CiAgICAgaWYgKGlz
U3luY2hyb25vdXMoKSkKQEAgLTY0OCw5ICs0MzksOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6c3RhcnRCdWZmZXJpbmdUaW1lcklmTmVlZGVkKCkKIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpidWZmZXJpbmdUaW1lckZpcmVkKCkKIHsKICAgICBBU1NFUlQobV9idWZmZXJlZERh
dGEpOwotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVChtX2hhbmRsZSk7Ci0j
ZW5kaWYKKyAgICBBU1NFUlQobV9uZXR3b3JrTG9hZCk7CisKICAgICBpZiAoIW1fYnVmZmVyZWRE
YXRhLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNzE4LDI0ICs1MDgsMjMgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya0NhY2hlOjoKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnZhbGlk
YXRlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkp
CiB7Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUKCFtX2hhbmRsZSk7Ci0j
ZW5kaWYKKyAgICBBU1NFUlQoIW1fbmV0d29ya0xvYWQpOwogCiAgICAgLy8gSWYgdGhlIHJlcXVl
c3QgaXMgYWxyZWFkeSBjb25kaXRpb25hbCB0aGVuIHRoZSByZXZhbGlkYXRpb24gd2FzIG5vdCB0
cmlnZ2VyZWQgYnkgdGhlIGRpc2sgY2FjaGUKICAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBvdmVy
d3JpdGUgdGhlIGV4aXN0aW5nIGNvbmRpdGlvbmFsIGhlYWRlcnMuCi0gICAgaWYgKCFtX2N1cnJl
bnRSZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkgeworICAgIFJlc291cmNlUmVxdWVzdCByZXZhbGlk
YXRpb25SZXF1ZXN0ID0gb3JpZ2luYWxSZXF1ZXN0KCk7CisgICAgaWYgKCFyZXZhbGlkYXRpb25S
ZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkgewogICAgICAgICBTdHJpbmcgZVRhZyA9IGVudHJ5LT5y
ZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6RVRhZyk7
CiAgICAgICAgIFN0cmluZyBsYXN0TW9kaWZpZWQgPSBlbnRyeS0+cmVzcG9uc2UoKS5odHRwSGVh
ZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6Okxhc3RNb2RpZmllZCk7CiAgICAgICAg
IGlmICghZVRhZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRSZXF1ZXN0LnNldEhU
VFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gsIGVUYWcp
OworICAgICAgICAgICAgcmV2YWxpZGF0aW9uUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2Vi
Q29yZTo6SFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKICAgICAgICAgaWYgKCFs
YXN0TW9kaWZpZWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50UmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSwg
bGFzdE1vZGlmaWVkKTsKKyAgICAgICAgICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0SFRUUEhl
YWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UsIGxhc3RN
b2RpZmllZCk7CiAgICAgfQogCiAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiA9IFdURjo6
bW92ZShlbnRyeSk7CiAKLSAgICBzdGFydE5ldHdvcmtMb2FkKCk7CisgICAgc3RhcnROZXR3b3Jr
TG9hZChyZXZhbGlkYXRpb25SZXF1ZXN0KTsKIH0KICNlbmRpZgogCkBAIC03ODMsNTMgKzU3Miwx
OSBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKFQm
JiBtZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlUwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKSAmJiAhVVNFKE5FVFdPUktfU0VT
U0lPTikKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0
UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUHJvdGVj
dGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKGNvbnN0IFByb3RlY3Rp
b25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KLSAg
ICAvLyBIYW5kbGUgc2VydmVyIHRydXN0IGV2YWx1YXRpb24gYXQgcGxhdGZvcm0tbGV2ZWwgaWYg
cmVxdWVzdGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KLSAgICBpZiAocHJvdGVjdGlvblNw
YWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPT0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQKLSAgICAgICAgJiYgIU5ldHdv
cmtQcm9jZXNzOjpzaW5nbGV0b24oKS5jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlv
bigpKSB7Ci0gICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZShmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNTeW5jaHJv
bm91cygpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNrIHRoZSBXZWJQcm9jZXNz
IGxpa2UgdGhlIGFzeW5jaHJvbm91cyBjYXNlIGJlbG93IGRvZXMuCi0gICAgICAgIC8vIFRoaXMg
aXMgY3VycmVudGx5IGltcG9zc2libGUgYXMgdGhlIFdlYlByb2Nlc3MgaXMgYmxvY2tlZCB3YWl0
aW5nIG9uIHRoaXMgc3luY2hyb25vdXMgbG9hZC4KLSAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0
aGF0IHdlIGNhbiBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBVSSBwcm9jZXNzIHRvIHJlc29sdmUgdGhp
cy4KLSAgICAgICAgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNlbmRBYm9ydGluZ09uRmFpbHVy
ZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7Ci19Ci0jZW5kaWYKLQogI2lmIFVTRShQUk9U
RUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0
KQotewotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gRklYTUU6IERvIHNvbWV0aGlu
ZyBoZXJlLgotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc2VuZEFib3J0aW5nT25GYWlsdXJl
KE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKICNlbHNlCi0gICAgbV9oYW5kbGUtPmNvbnRp
bnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShyZXN1bHQpOwotI2VuZGlm
Ci19CisgICAgVU5VU0VEX1BBUkFNKHByb3RlY3Rpb25TcGFjZSk7CiAjZW5kaWYKLQotI2lmIFVT
RShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykgJiYgIVVTRShORVRXT1JLX1NFU1NJT04p
Ci1ib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3VwcG9ydHNEYXRhQXJyYXkoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheShSZXNvdXJjZUhhbmRsZSosIENGQXJy
YXlSZWYpCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UoYm9vbCByZXN1bHQpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX25ldHdvcmtMb2FkLT5jb250aW51ZUNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5o
CmluZGV4IDhiNDIzZGMuLjBlOWU5MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0zMSwzMSArMzEsMTcgQEAK
ICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCiAj
aW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtMb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQ2FjaGVWYWxpZGF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9y
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VS
ZXNwb25zZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1J1bkxvb3AuaD4KLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0jaW5jbHVkZSAiTmV0d29y
a1Nlc3Npb24uaCIKLSNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZUNsaWVu
dC5oPgotI2VuZGlmCi0KLXR5cGVkZWYgY29uc3Qgc3RydWN0IF9DRkNhY2hlZFVSTFJlc3BvbnNl
KiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmOworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCbG9iRGF0YUZpbGVSZWZlcmVuY2U7Ci0jaWYgIVVT
RShORVRXT1JLX1NFU1NJT04pCi1jbGFzcyBSZXNvdXJjZUhhbmRsZTsKLSNlbmRpZgogY2xhc3Mg
UmVzb3VyY2VSZXF1ZXN0OwogfQogCkBAIC02MywxNiArNDksMTIgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogY2xhc3MgTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnM7Ci1jbGFzcyBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDsK
K2NsYXNzIE5ldHdvcmtMb2FkOwogY2xhc3MgU2FuZGJveEV4dGVuc2lvbjsKIAogY2xhc3MgTmV0
d29ya1Jlc291cmNlTG9hZGVyCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI+Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAsIHB1YmxpYyBOZXR3b3Jr
U2Vzc2lvblRhc2tDbGllbnQKLSNlbHNlCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGVDbGllbnQKLSNlbmRpZgorICAgICwgcHVibGljIE5ldHdvcmtMb2FkQ2xpZW50CiAgICAg
LCBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5l
dHdvcmtSZXNvdXJjZUxvYWRlcj4gY3JlYXRlKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVj
dGlvbikKQEAgLTg4LDEyICs3MCw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0
ZXJzLnJlcXVlc3Q7IH0KIAotICAgIC8vIENoYW5nZXMgd2l0aCByZWRpcmVjdHMuCi0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCgpIHsgcmV0dXJuIG1fY3VycmVu
dFJlcXVlc3Q7IH0KKyAgICBOZXR3b3JrTG9hZCogbmV0d29ya0xvYWQoKSBjb25zdCB7IHJldHVy
biBtX25ldHdvcmtMb2FkLmdldCgpOyB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSAg
ICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5k
bGUuZ2V0KCk7IH0KLSNlbmRpZgogICAgIHZvaWQgZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQo
KTsKIAogICAgIHZvaWQgc3RhcnQoKTsKQEAgLTEwMyw3ICs4MSw5IEBAIHB1YmxpYzoKIAogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHN0YXRpYyBzaXplX3QgZmlsZUJhY2tlZFJlc291cmNlTWlu
aW11bVNpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhDRkNh
Y2hlZFVSTFJlc3BvbnNlUmVmKSBvdmVycmlkZTsKICNlbmRpZgorCiAgICAgLy8gTWVzc2FnZSBo
YW5kbGVycy4KICAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKTsKIApAQCAtMTI2LDYgKzEw
NiwxNiBAQCBwdWJsaWM6CiAKICAgICBzdHJ1Y3QgU3luY2hyb25vdXNMb2FkRGF0YTsKIAorICAg
IC8vIE5ldHdvcmtMb2FkQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNp
Z25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1Rv
QmVTZW50KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZUFzeW5jKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTaG91bGRDb250aW51ZURpZFJl
Y2VpdmVSZXNwb25zZSBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVu
Z3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUg
ZmluaXNoVGltZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxMb2FkaW5nKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAgICBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMm
LCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxh
eWVkUmVwbHk+KTsKIApAQCAtMTMzLDYzICsxMjMsMTIgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV9wYXJhbWV0ZXJzLmlkZW50aWZpZXI7IH0KIAotICAgIGVudW0gU2hvdWxkQ29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2UgewotICAgICAgICBZZXMsCi0gICAgICAgIE5vCi0gICAg
fTsKLSAgICBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBzaGFyZWREaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2b2lk
IHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgc2hh
cmVkRGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBpbnQg
cmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCk7Ci0gICAgdm9pZCBzaGFyZWREaWRGYWlsKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2b2lkIHNoYXJlZERpZEZpbmlzaExvYWRp
bmcoZG91YmxlIGZpbmlzaFRpbWUpOwotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAv
LyBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jik+KSBmaW5hbCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9u
LCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+KSBmaW5hbCBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSBmaW5hbCBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4mJikgZmluYWwgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbXBs
ZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbCBvdmVycmlk
ZTsKLSNlbHNlCi0gICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0QXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiBy
ZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1
bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hh
ciosIHVuc2lnbmVkLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZl
ZENhbmNlbGxhdGlvbihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHVzZXNB
c3luY0NhbGxiYWNrcygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgbG9hZGluZ1N5bmNocm9ub3VzWEhSKCkgb3ZlcnJpZGUgeyByZXR1cm4gaXNTeW5jaHJvbm91
cygpOyB9Ci0KLSNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotICAgIHZp
cnR1YWwgdm9pZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKSBv
dmVycmlkZTsKLSNlbmRpZgotI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykK
LSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEYXRhQXJyYXkoKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIENG
QXJyYXlSZWYpIG92ZXJyaWRlOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaWYgVVNF
KENGTkVUV09SSykKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZSosIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIG92ZXJyaWRlOwot
I2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKikgb3ZlcnJpZGU7Ci0jZW5kaWYK
LSNlbmRpZgotI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCi0KICNpZiBFTkFCTEUoTkVU
V09SS19DQUNIRSkKICAgICB2b2lkIGRpZFJldHJpZXZlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya0NhY2hlOjpFbnRyeT4pOwogICAgIHZvaWQgdmFsaWRhdGVDYWNoZUVudHJ5KHN0
ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5Pik7CiAjZW5kaWYKIAotICAgIHZvaWQg
c3RhcnROZXR3b3JrTG9hZCgpOworICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZChjb25zdCBPcHRp
b25hbDxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+JiB1cGRhdGVkUmVxdWVzdCA9IHsgfSk7CiAg
ICAgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogCiAgICAgdm9pZCBjbGVhbnVw
KCk7CkBAIC0yMDAsOCArMTM5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1ZmZlcmluZ1RpbWVy
RmlyZWQoKTsKICAgICBib29sIHNlbmRCdWZmZXJNYXliZUFib3J0aW5nKGNvbnN0IFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlciYsIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAKLSAgICBib29sIGlz
U3luY2hyb25vdXMoKSBjb25zdDsKLQogICAgIHZvaWQgY29uc3VtZVNhbmRib3hFeHRlbnNpb25z
KCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKIApAQCAtMjExLDE0
ICsxNDgsOCBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzPiBtX2Nvbm5lY3Rpb247CiAKLSAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBS
ZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBtX3Rhc2s7Ci0jZWxzZQotICAgIFJlZlB0cjxXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7Ci0jZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya0xvYWQ+IG1fbmV0d29ya0xvYWQ7CiAKLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgbV9jdXJyZW50UmVxdWVzdDsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVz
cG9uc2U7CiAKICAgICBzaXplX3QgbV9ieXRlc1JlY2VpdmVkOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OGU0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW0KQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE5FVFdP
UktfUFJPQ0VTUykKKyNpbXBvcnQgIk5ldHdvcmtMb2FkLmgiCisKKyNpbXBvcnQgPFdlYkNvcmUv
Q0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2lmIFVTRShD
Rk5FVFdPUkspCisKK3ZvaWQgTmV0d29ya0xvYWQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQor
eworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworCisgICAg
bV9jbGllbnQud2lsbENhY2hlUmVzcG9uc2VBc3luYyhjZlJlc3BvbnNlKTsKKworICAgIG1faGFu
ZGxlLT5jb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKGNmUmVzcG9uc2UpOworfQorCisjZWxpZiAh
VVNFKE5FVFdPUktfU0VTU0lPTikKKwordm9pZCBOZXR3b3JrTG9hZDo6d2lsbENhY2hlUmVzcG9u
c2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlICpuc1Jl
c3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUp
OworCisgICAgbV9jbGllbnQud2lsbENhY2hlUmVzcG9uc2VBc3luYyhbbnNSZXNwb25zZSBfQ0ZD
YWNoZWRVUkxSZXNwb25zZV0pOworCisgICAgbV9oYW5kbGUtPmNvbnRpbnVlV2lsbENhY2hlUmVz
cG9uc2UobnNSZXNwb25zZSk7Cit9CisKKyNlbmRpZiAvLyAhVVNFKENGTkVUV09SSykKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNv
dXJjZUxvYWRlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KaW5kZXggZjgyMjI3YS4uOGEyODZlNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRl
ck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jl
c291cmNlTG9hZGVyTWFjLm1tCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0NG
TmV0d29ya1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC04MiwzMiArODMsMTIgQEAgc2l6ZV90IE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6ZmlsZUJhY2tlZFJlc291cmNlTWluaW11bVNpemUoKQogICAg
IHJldHVybiBTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKCk7CiB9CiAKLSNpZiBVU0UoQ0ZO
RVRXT1JLKQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2VB
c3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNmUmVz
cG9uc2UpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2VBc3lu
YyhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCiB7Ci0gICAgQVNTRVJUX1VOVVNF
RChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KICAgICBpZiAobV9ieXRlc1JlY2VpdmVk
ID49IGZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCkpCiAgICAgICAgIE5ldHdvcmtEaXNr
Q2FjaGVNb25pdG9yOjptb25pdG9yRmlsZUJhY2tpbmdTdG9yZUNyZWF0aW9uKGNmUmVzcG9uc2Us
IHRoaXMpOwotCi0gICAgbV9oYW5kbGUtPmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoY2ZSZXNw
b25zZSk7CiB9CiAKLSNlbGlmICFVU0UoTkVUV09SS19TRVNTSU9OKQotCi12b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlICpuc1Jlc3BvbnNlKQotewotICAgIEFTU0VSVF9VTlVT
RUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCi0gICAgaWYgKG1fYnl0ZXNSZWNlaXZl
ZCA+PSBmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpKQotICAgICAgICBOZXR3b3JrRGlz
a0NhY2hlTW9uaXRvcjo6bW9uaXRvckZpbGVCYWNraW5nU3RvcmVDcmVhdGlvbihbbnNSZXNwb25z
ZSBfQ0ZDYWNoZWRVUkxSZXNwb25zZV0sIHRoaXMpOwotCi0gICAgbV9oYW5kbGUtPmNvbnRpbnVl
V2lsbENhY2hlUmVzcG9uc2UobnNSZXNwb25zZSk7Ci19Ci0KLSNlbmRpZiAvLyAhVVNFKENGTkVU
V09SSykKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDMzNTg0YTAuLjM1ZDk3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExODAsNiArMTE4MCw3IEBA
CiAJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCMjUxMDFB
ODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oICovOyB9OwogCQk4MzYw
MzQ5RjFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNjAzNDlEMUFDQjM0
RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwICovOyB9OwogCQk4MzYw
MzRBMDFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzYwMzQ5RTFBQ0IzNEQ2
MDA2MjY1NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggKi87IH07CisJCTgzNkVFQjgw
MUJFOUVDOUUwMDZCNEI4MiAvKiBOZXR3b3JrTG9hZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNkVFQjdGMUJFOUVDOUUwMDZCNEI4MiAvKiBO
ZXR3b3JrTG9hZE1hYy5tbSAqLzsgfTsKIAkJODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8qIFdL
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk4MzcyREIyODFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuY3BwICovOyB9OwogCQk4MzcyREIyOTFBNjc1NjI4MDBDNjk3QzUgLyog
V2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFn
ZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CkBAIC0xMTg4LDcgKzExODksMTIgQEAK
IAkJODM4OTFCNjkxQTY4QkVCQzAwMzBGMzg2IC8qIF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzODkx
QjY4MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODM4OTFCNkMx
QTY4QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Mzg5MUI2QTFBNjhDMzBCMDAzMEYz
ODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKIAkJODM4OTFCNkQxQTY4QzMw
QjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM4OTFCNkIxQTY4QzMwQjAwMzBGMzg2IC8q
IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tICovOyB9OworCQk4MzkxNDk2NDFCRUE4Mzg1MDBE
MkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzOTE0OTYyMUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3
b3JrTG9hZFBhcmFtZXRlcnMuY3BwICovOyB9OworCQk4MzkxNDk2NTFCRUE4Mzg1MDBEMkQ5NTMg
LyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzkxNDk2MzFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzLmggKi87IH07CisJCTgzOTkwMjAyMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3Jr
TG9hZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
Mzk5MDFGRjFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwICovOyB9OworCQk4Mzk5
MDIwMzFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzOTkwMUZFMUJFOUEwMUIwMDBGMzY1MyAvKiBO
ZXR3b3JrTG9hZC5oICovOyB9OwogCQk4M0JEQ0NCOTFBQzVGREI2MDAzRjY0NDEgLyogTmV0d29y
a0NhY2hlU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4M0JEQ0NCODFBQzVGREI2MDAzRjY0NDEgLyogTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5jcHAgKi87IH07CisJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9h
ZENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODNENDU0RDYxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50LmggKi87IH07CiAJ
CTg0NDc3ODUzMTc2RkNDMDgwMENEQzdCQiAvKiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHRN
ZWRpYVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0NDc3ODUxMTc2RkNBQzEwMENEQzdCQiAvKiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHRN
ZWRpYVR5cGUuaCAqLzsgfTsKIAkJODY4MTYwRDAxODc2NDU1NzAwMjFFNzlEIC8qIFdpbmRvd1Nl
cnZlckNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjgxNjBDRjE4NzY0NTM3MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlv
bi5tbSAqLzsgfTsKIAkJODZFNjdBMjUxOTEwQjlEMTAwMDA0QUI3IC8qIFByb2Nlc3NUaHJvdHRs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTY3
QTIxMTkwRjQxMTgwMDAwNEFCNyAvKiBQcm9jZXNzVGhyb3R0bGVyLmggKi87IH07CkBAIC0zNDA4
LDYgKzM0MTQsNyBAQAogCQk4MzRCMjUxMDFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hl
U3RhdGlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2Fj
aGVTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNjAzNDlEMUFD
QjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM2MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8q
IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJODM2RUVCN0YxQkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtMb2FkTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTmV0d29ya0xvYWRNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBX
S1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZURp
YWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
NDE2LDcgKzM0MjMsMTIgQEAKIAkJODM4OTFCNjgxQTY4QkVCQzAwMzBGMzg2IC8qIF9XS0RpYWdu
b3N0aWNMb2dnaW5nRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
X1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4Mzg5MUI2QTFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFCNkIxQTY4QzMwQjAwMzBG
Mzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTgzOTE0OTYyMUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9h
ZFBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0
d29ya0xvYWRQYXJhbWV0ZXJzLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
UGFyYW1ldGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzOTE0OTYzMUJF
QTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmg7IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJODM5OTAxRkUxQkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtMb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4Mzk5MDFG
RjFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0xvYWQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4M0JEQ0NCODFB
QzVGREI2MDAzRjY0NDEgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODNENDU0RDYxQkU5RDNDNDAwNkM5M0JEIC8qIE5l
dHdvcmtMb2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdv
cmtMb2FkQ2xpZW50Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDQ3Nzg1MTE3NkZDQUMxMDBDREM3QkIg
LyogSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjgxNjBDRDE4NzYzRDRCMDAyMUU3OUQg
LyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaW5kb3dTZXJ2ZXJD
b25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2ODE2MENGMTg3NjQ1
MzcwMDIxRTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU1OTksNiArNTYxMSwxMSBAQAogCQkJCTUxM0ExNjQ5MTYzMEE5QkYwMDVEN0QyMiAv
KiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJNTEzQTE2NEExNjMw
QTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCiAJCQkJ
NTEzQTE2NEIxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluICovLAorCQkJCTgzOTkwMUZGMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3Jr
TG9hZC5jcHAgKi8sCisJCQkJODM5OTAxRkUxQkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2Fk
LmggKi8sCisJCQkJODNENDU0RDYxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50
LmggKi8sCisJCQkJODM5MTQ5NjIxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1l
dGVycy5jcHAgKi8sCisJCQkJODM5MTQ5NjMxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2Fk
UGFyYW1ldGVycy5oICovLAogCQkJCTUxMENDN0RGMTYxMzhFMjkwMEQwM0VEMyAvKiBOZXR3b3Jr
UHJvY2Vzcy5jcHAgKi8sCiAJCQkJNTEwQ0M3RTAxNjEzOEUyOTAwRDAzRUQzIC8qIE5ldHdvcmtQ
cm9jZXNzLmggKi8sCiAJCQkJNTFBOEE2MTcxNjI3RjVCQjAwMEQ5MEU5IC8qIE5ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluICovLApAQCAtNTYxOSw2ICs1NjM2LDcgQEAKIAkJCQlFMTdBRTJDMTE2
QjlDMTM5MDAxQzQyRjEgLyogY29tLmFwcGxlLldlYktpdC5OZXR3b3JrUHJvY2Vzcy5zYi5pbiAq
LywKIAkJCQk1MTY3RUU5RTE3MDM3N0JGMDA3NjgxQ0EgLyogTmV0d29ya0Rpc2tDYWNoZU1vbml0
b3IuaCAqLywKIAkJCQk1MTY3RUU5RjE3MDM3N0JGMDA3NjgxQ0EgLyogTmV0d29ya0Rpc2tDYWNo
ZU1vbml0b3IubW0gKi8sCisJCQkJODM2RUVCN0YxQkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtM
b2FkTWFjLm1tICovLAogCQkJCTUxQThBNjE1MTYyN0YzRjkwMDBEOTBFOSAvKiBOZXR3b3JrUHJv
Y2Vzc01hYy5tbSAqLywKIAkJCQk1MUUzQjY3RTE2RjI2NkIzMDA5OTY4REMgLyogTmV0d29ya1Jl
c291cmNlTG9hZGVyTWFjLm1tICovLAogCQkJCUUxQjc4NDcyMTYzRjI1M0UwMDA3QjY5MiAvKiBS
ZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSAqLywKQEAgLTc2NDMsNiArNzY2MSw3IEBACiAJCQkJ
Mzc2MzExRkQxQTNGQjVGNzAwNUEyRTUxIC8qIF9XS1NhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzYzMTFGRTFBM0ZCNjAwMDA1QTJFNTEgLyogX1dLU2Ft
ZURvY3VtZW50TmF2aWdhdGlvblR5cGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEw
MDJENDQxOTZCMzM4OTAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTAwMkQ0MzE5NkIzMzcwMDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENkIzNzFCMThBOTY3QUQwMDQyQUU4MCAvKiBf
V0tUaHVtYm5haWxWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREFDRTY0RTE4QURCRkYwMDBF
NENBNzYgLyogX1dLVGh1bWJuYWlsVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTc5
MTAsNiArNzkyOSw3IEBACiAJCQkJMUE4RUY0Q0IxMjUyNDAzNzAwRjcwNjdGIC8qIFBsdWdpbkNv
bnRyb2xsZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RUY5NkYxMjUyQUY2QjAwRjcw
NjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTE3OTc4MDEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk4M0Q0NTRENzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xv
YWRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDM0Y4QzkxMTczQUY1MkQwMDdCN0YzOSAv
KiBQbHVnaW5JbmZvcm1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFRkNDMTIxMUQwMUY5
NjAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzRDYx
MDIxM0E3Q0MyQTAwRjk1RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uaCBpbiBIZWFkZXJzICovLApA
QCAtNzk2Miw2ICs3OTgyLDcgQEAKIAkJCQkxQUFCNEE4RDEyOTZGMEEyMDAyMzk1MkYgLyogU2Fu
ZGJveEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFNTUyQzUxNkFFMDY1RjAwNEVE
NjUzIC8qIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTMxQzFDMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TLmggaW4gSGVhZGVycyAqLywKKwkJCQk4MzkxNDk2NTFCRUE4Mzg1MDBEMkQ5
NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQxMzA1
NDEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUQxMzA1NjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTE3OTA4OEYxNjlCQUE2QTAwNjkwNEM3IC8qIFNlY0l0ZW1TaGlt
LmggaW4gSGVhZGVycyAqLywKQEAgLTk1MjksNiArOTU1MCw3IEBACiAJCQkJQkMwMzJEQTUxMEY0
MzdEMTAwNThDMTVBIC8qIEFyZ3VtZW50RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzAzMkRBNzEwRjQzN0QxMDA1OEMxNUEgLyogQXJndW1lbnRFbmNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUM1OUM0QTU4MThCODExNzQwMDdCRENCNiAvKiBBc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4Mzk5MDIwMjFCRTlBMDJCMDAwRjM2NTMgLyog
TmV0d29ya0xvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1RTc3MjcxODNERDZGNjAwMDcy
MDNGIC8qIEFzeW5jUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VFOTY2QzExMkZB
RjU3MDA2QkNDMjQgLyogQXR0YWNobWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUEzMTcz
NTEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSBpbiBTb3VyY2VzICovLApA
QCAtOTU0Nyw2ICs5NTY5LDcgQEAKIAkJCQk5RjU0Rjg4RjE2NDg4RTg3MDA3REY4MUEgLyogQ2hp
bGRQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQUVDM0IxQjA2NTc2ODAwMDlD
NEU3IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMTUxM0M2NjE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJODM5MTQ5NjQxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFy
YW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJBNEIwRTE1ODZBMjI0MDA5MEM5RTkg
LyogQ29sb3JTcGFjZURhdGEubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTZGOUZCNzExRTE0MDg1
MDBEQjEzNzEgLyogQ29tbWFuZExpbmVQT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0JF
QzRFMDE5NDkxNDg2MDA4QjQyODYgLyogQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlci5tbSBp
biBTb3VyY2VzICovLApAQCAtOTg0MSw2ICs5ODY0LDcgQEAKIAkJCQk0QTNDQzE4QzE5QjA2NDE1
MDBEMTRBRUYgLyogVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFNEU4NjQ5MjFCMTY3NTAxMDBDODJGNDAgLyogVmVyc2lvbkNoZWNrcy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTJEQUY0RkZCMUI2MzYxODEwMDYwMTNENiAvKiBWaWV3R2VzdHVy
ZUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODM2RUVCODAxQkU5RUM5RTAwNkI0
QjgyIC8qIE5ldHdvcmtMb2FkTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGOTU5M0IxOEE0
MjQxMjAwOTc4NUExIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTJEMTI1QzVGMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDFCNUQ1RDE4NTg2OUM4MDA2QzY1OTYgLyogVmll
d0dlc3R1cmVDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264802</attachid>
            <date>2015-11-04 11:24:20 -0800</date>
            <delta_ts>2015-11-04 13:50:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150898-20151104112322.patch</filename>
            <type>text/plain</type>
            <size>76935</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxOTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDlkNjllMThjMmU3MTE4
YWExZGVkNGUxZmNiYmNkNTE0MmI5NmE0OC4uMDQzNWRjODhhMWNmYzBhYWFkYzVmYTcxY2VlZjIw
ZWMxNDY0N2QxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTExLTA0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gRXh0cmFjdCBuZXR3
b3JraW5nIGNvZGUgb3V0IG9mIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBjbGFzcyB0byBpbXByb3Zl
IHJldXNhYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA4OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBFeHRyYWN0IG5ldHdvcmtpbmcgY29kZSBvdXQgb2YgTmV0d29ya1Jlc291cmNlTG9hZGVy
IGNsYXNzIHRvIGltcHJvdmUKKyAgICAgICAgcmV1c2FiaWxpdHkgKHdpbGwgYmUgdXNlZCBmb3Ig
c3BlY3VsYXRpdmUgcmV2YWxpZGF0aW9uKSBhbmQgc2ltcGxpZnkKKyAgICAgICAgdGhlIE5ldHdv
cmtSZXNvdXJjZUxvYWRlci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVz
b3VyY2VMb2FkVG9Eb3dubG9hZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZENsaWVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaDog
QWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNw
cDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaDoKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMubW06IEFkZGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2VB
c3luYyk6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAy
MDE1LTExLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQ3JlYXRlIGEgTmV0d29ya1Nlc3Npb24gZm9yIGVhY2ggU2Vzc2lvbklECmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NN
YWtlTGlzdHMudHh0CmluZGV4IGRlZDQ2MTcwZWMyY2MwZmEzOTE5MmEyNDY4ZGJmNDYzMzRhYzYx
ZmIuLjZjZDk2NzY3ZjE5ZmVhYzdmMGI4NDBlMTdmYjRkMDgwYzMzYWRiNDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CkBAIC0xNjIsNiArMTYyLDggQEAgZW5kaWYgKCkKIAogc2V0KE5ldHdvcmtQcm9j
ZXNzX0NPTU1PTl9TT1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCisgICAg
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcAogICAgIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
UGxhdGZvcm1TdHJhdGVnaWVzLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCAwYTIzYjdmMDRh
ZDFiYjNmMWY1Y2MwZTI1MDhlYWE5NDE3NGE5YjQ3Li4yYjIxNTJlMjEzMjBkNWMyNmIwNDU3MGE0
YzIwMDU3OTMxMGVhM2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJOZXR3b3JrQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtMb2FkLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRl
ci5oIgpAQCAtMjAyLDEwICsyMDMsMTAgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKHVpbnQ2NF90IG0KICAgICAv
LyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICNlbHNl
Ci0gICAgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93
bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOwor
ICAgIG5ldHdvcmtQcm9jZXNzLmRvd25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25s
b2FkKGRvd25sb2FkSUQsIGxvYWRlci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCksIHJlcXVlc3Qs
IHJlc3BvbnNlKTsKIAogICAgIC8vIFVuYmxvY2sgdGhlIFVSTCBjb25uZWN0aW9uIG9wZXJhdGlv
biBxdWV1ZS4KLSAgICBsb2FkZXItPmhhbmRsZSgpLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25z
ZSgpOworICAgIGxvYWRlci0+bmV0d29ya0xvYWQoKS0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVj
ZWl2ZVJlc3BvbnNlKCk7CiAgICAgCiAgICAgbG9hZGVyLT5kaWRDb252ZXJ0SGFuZGxlVG9Eb3du
bG9hZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
TG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ3Njk1ZmIxYjQ5YjhkNmIyNGE4ZDQ3MzAwNmJkOTQ3Zjcy
YzUzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtMb2FkLmNwcApAQCAtMCwwICsxLDM2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisjaW5jbHVkZSAiTmV0d29y
a0xvYWQuaCIKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKKyNpbmNsdWRl
ICJXZWJFcnJvcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgor
CisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhh
bmRsZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworTmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKE5ldHdvcmtMb2FkQ2xpZW50JiBj
bGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycykKKyAgICA6IG1f
Y2xpZW50KGNsaWVudCkKKyAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQorICAgICwgbV9u
ZXR3b3JraW5nQ29udGV4dChSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKHBhcmFtZXRl
cnMuc2Vzc2lvbklELCBwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QpKQorICAgICwgbV9jdXJyZW50UmVxdWVzdChwYXJhbWV0ZXJzLnJlcXVlc3QpCit7
CisgICAgYm9vbCBzaG91bGRTbmlmZiA9IG1fcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xp
Y3kgPT0gU25pZmZDb250ZW50OworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgVU5VU0VE
X1BBUkFNKHNob3VsZFNuaWZmKTsgLy8gRklYTUU6IFVzZSB0aGlzLgorICAgIG1fdGFzayA9IFNl
c3Npb25UcmFja2VyOjpuZXR3b3JrU2Vzc2lvbihwYXJhbWV0ZXJzLnNlc3Npb25JRCktPmNyZWF0
ZURhdGFUYXNrV2l0aFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCwgKnRoaXMpOworICAgIG1fdGFz
ay0+cmVzdW1lKCk7CisjZWxzZQorICAgIG1faGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZShtX25ldHdvcmtpbmdDb250ZXh0LmdldCgpLCBtX2N1cnJlbnRSZXF1ZXN0LCB0aGlzLCBtX3Bh
cmFtZXRlcnMuZGVmZXJzTG9hZGluZywgc2hvdWxkU25pZmYpOworI2VuZGlmCit9CisKK05ldHdv
cmtMb2FkOjp+TmV0d29ya0xvYWQoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBpZiAobV90YXNrKQorICAgICAgICBtX3Rh
c2stPmNsZWFyQ2xpZW50KCk7CisjZWxzZQorICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgbV9o
YW5kbGUtPmNsZWFyQ2xpZW50KCk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQor
ICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
I2Vsc2UKKyAgICBpZiAobV9oYW5kbGUpIHsKKyAgICAgICAgbV9oYW5kbGUtPnNldERlZmVyc0xv
YWRpbmcoZGVmZXJzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorfQorCit2b2lk
IE5ldHdvcmtMb2FkOjpjYW5jZWwoKQoreworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAg
aWYgKG1fdGFzaykKKyAgICAgICAgbV90YXNrLT5jYW5jZWwoKTsKKyNlbHNlCisgICAgaWYgKG1f
aGFuZGxlKQorICAgICAgICBtX2hhbmRsZS0+Y2FuY2VsKCk7CisjZW5kaWYKK30KKwordm9pZCBO
ZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIG1fY3Vy
cmVudFJlcXVlc3QudXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMobmV3
UmVxdWVzdC5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkpOworI2VsaWYgVVNFKFNP
VVApCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZyb21E
ZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNjEyNy4KKyAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZy
b21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QpOworI2VuZGlmCisK
KyAgICBpZiAobV9jdXJyZW50UmVxdWVzdC5pc051bGwoKSkgeworI2lmIFVTRShORVRXT1JLX1NF
U1NJT04pCisgICAgICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyNlbHNlCisgICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKKyAgICAg
ICAgZGlkRmFpbChtX2hhbmRsZS5nZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVz
dCkpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1l
bnRlZCgpOworI2Vsc2UKKyAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2VuZFJlcXVlc3QobV9j
dXJyZW50UmVxdWVzdCk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVE
aWRSZWNlaXZlUmVzcG9uc2UoKQoreworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8g
RklYTUU6IERvIHNvbWV0aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVjayBvbmNlIEJsb2JSZXNvdXJjZUhhbmRsZSBp
bXBsZW1lbnRzIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jIGNvcnJlY3RseS4KKyAgICAvLyBDdXJy
ZW50bHksIGl0IGRvZXMgbm90IHdhaXQgZm9yIHJlc3BvbnNlLCBzbyB0aGUgbG9hZCBpcyBsaWtl
bHkgdG8gZmluaXNoIGJlZm9yZSBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZS4KKyAgICBpZiAo
IW1faGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hhbmRsZS0+Y29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UoKTsKKyNlbmRpZgorfQorCitOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxk
Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgTmV0d29ya0xvYWQ6OnNoYXJlZERpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQoreworICAg
IFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UgPSByZWNlaXZlZFJlc3BvbnNlOworICAgIHJlc3Bv
bnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcmspOworICAgIGlm
IChtX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUluZm8pCisgICAgICAgIHJlc3BvbnNlLmlu
Y2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKKworICAgIHJldHVybiBtX2NsaWVudC5kaWRSZWNlaXZl
UmVzcG9uc2UocmVzcG9uc2UpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2Vu
ZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICAvLyBXZSBvbmx5IGV4
cGVjdCB0byBnZXQgdGhlIHdpbGxTZW5kUmVxdWVzdCBjYWxsYmFjayBmcm9tIFJlc291cmNlSGFu
ZGxlIGFzIHRoZSByZXN1bHQgb2YgYSByZWRpcmVjdC4KKyAgICBBU1NFUlQoIXJlZGlyZWN0UmVz
cG9uc2UuaXNOdWxsKCkpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBt
X2N1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICBtX2NsaWVudC53aWxsU2VuZFJlZGlyZWN0
ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworfQorCisjaWYgVVNFKE5FVFdP
UktfU0VTU0lPTikKKwordm9pZCBOZXR3b3JrTG9hZDo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rp
b24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpPiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0
KHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0KTsKK30K
Kwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgQ3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcs
IENyZWRlbnRpYWwoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJl
c3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIoUmVzcG9uc2VEaXNwb3NpdGlvbjo6QWxsb3cpOworfQorCit2
b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlRGF0YShSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1
ZmZlcikKK3sKKyAgICBBU1NFUlQoYnVmZmVyKTsKKyAgICBhdXRvIHNpemUgPSBidWZmZXItPnNp
emUoKTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZlQnVmZmVyKFdURjo6bW92ZShidWZmZXIpLCBz
aXplKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAg
ICBtX2NsaWVudC5kaWRGaW5pc2hMb2FkaW5nKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9jbGllbnQuZGlkRmFpbExvYWRpbmcoZXJyb3Ip
OworfQorCisjZWxzZQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3lu
YyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZl
ZFJlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5k
bGUpOworICAgIGlmIChzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSkg
PT0gTmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZ
ZXMpCisgICAgICAgIG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworfQor
Cit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IGNoYXIqIC8qIGRhdGEgKi8sIHVuc2lnbmVkIC8qIGxlbmd0aCAqLywgaW50IC8qIGVuY29kZWRE
YXRhTGVuZ3RoICovKQoreworICAgIC8vIFRoZSBOZXR3b3JrUHJvY2VzcyBzaG91bGQgbmV2ZXIg
Z2V0IGEgZGlkUmVjZWl2ZURhdGEgY2FsbGJhY2suCisgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBi
ZSB1c2luZyBkaWRSZWNlaXZlQnVmZmVyLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlQnVmZmVyKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGludCByZXBvcnRlZEVuY29kZWRE
YXRhTGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5k
bGUpOworICAgIG1fY2xpZW50LmRpZFJlY2VpdmVCdWZmZXIoV1RGOjptb3ZlKGJ1ZmZlciksIHJl
cG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRGaW5p
c2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5pc2hUaW1lKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIG1fY2xp
ZW50LmRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGltZSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6
OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsICFoYW5kbGUgfHwgaGFuZGxlID09IG1f
aGFuZGxlKTsKKyAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKKworICAgIG1fY2xpZW50LmRp
ZEZhaWxMb2FkaW5nKGVycm9yKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6d2lsbFNlbmRSZXF1
ZXN0QXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAg
IEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIHNoYXJlZFdp
bGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Cit9CisK
KyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSykgJiYgIVVTRShORVRXT1JLX1NFU1NJT04pCit2b2lkIE5ldHdvcmtM
b2FkOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit7
CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRs
ZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIC8vIEhhbmRsZSBzZXJ2ZXIgdHJ1c3QgZXZh
bHVhdGlvbiBhdCBwbGF0Zm9ybS1sZXZlbCBpZiByZXF1ZXN0ZWQsIGZvciBwZXJmb3JtYW5jZSBy
ZWFzb25zLgorICAgIGlmIChwcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9
PSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlv
blJlcXVlc3RlZAorICAgICAgICAmJiAhTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhbkhh
bmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKCkpIHsKKyAgICAgICAgY29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX2NsaWVudC5pc1N5bmNocm9ub3VzKCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBhc2sgdGhlIFdlYlByb2Nlc3MgbGlrZSB0aGUgYXN5bmNocm9u
b3VzIGNhc2UgYmVsb3cgZG9lcy4KKyAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgaW1wb3Nz
aWJsZSBhcyB0aGUgV2ViUHJvY2VzcyBpcyBibG9ja2VkIHdhaXRpbmcgb24gdGhpcyBzeW5jaHJv
bm91cyBsb2FkLgorICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgY2FuIGp1bXAgc3Ry
YWlnaHQgdG8gdGhlIFVJIHByb2Nlc3MgdG8gcmVzb2x2ZSB0aGlzLgorICAgICAgICBjb250aW51
ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodHJ1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2NsaWVudC5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlQXN5bmMocHJvdGVjdGlvblNwYWNlKTsKK30KKyNlbmRpZgorCisjaWYgVVNFKFBS
T1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVl
Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIHJlc3VsdCkKK3sKKyNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4K
KyAgICBub3RJbXBsZW1lbnRlZCgpOworI2Vsc2UKKyAgICBtX2hhbmRsZS0+Y29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHJlc3VsdCk7CisjZW5kaWYKK30KKyNl
bmRpZgorCisjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKSAmJiAhVVNFKE5F
VFdPUktfU0VTU0lPTikKK2Jvb2wgTmV0d29ya0xvYWQ6OnN1cHBvcnRzRGF0YUFycmF5KCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3
b3JrTG9hZDo6ZGlkUmVjZWl2ZURhdGFBcnJheShSZXNvdXJjZUhhbmRsZSosIENGQXJyYXlSZWYp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KyNlbmRpZgorCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKK3ZvaWQgTmV0d29ya0xvYWQ6
OmRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAg
QVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CisKKyAgICBtX2NsaWVu
dC5kaWRTZW5kRGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKK3ZvaWQg
TmV0d29ya0xvYWQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIGRpZEZhaWwo
aGFuZGxlLCBXZWJLaXQ6OmJsb2NrZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Cit9CisKK3Zv
aWQgTmV0d29ya0xvYWQ6OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIGRp
ZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmNhbm5vdFNob3dVUkxFcnJvcihtX2N1cnJlbnRSZXF1ZXN0
KSk7Cit9CisKK2Jvb2wgTmV0d29ya0xvYWQ6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRs
ZSA9PSBtX2hhbmRsZSB8fCAhbV9oYW5kbGUpOyAvLyBtX2hhbmRsZSB3aWxsIGJlIDAgaWYgY2Fs
bGVkIGZyb20gUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkuCisKKyAgICAvLyBXaGVuIHRoZSBXZWJQ
cm9jZXNzIGlzIGhhbmRsaW5nIGxvYWRpbmcgYSBjbGllbnQgaXMgY29uc3VsdGVkIGVhY2ggdGlt
ZSB0aGlzIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlIHF1ZXN0aW9uIGlzIGFza2VkLgorICAg
IC8vIEluIE5ldHdvcmtQcm9jZXNzIG1vZGUgd2UgYXNrIHRoZSBXZWJQcm9jZXNzIGNsaWVudCB1
cCBmcm9udCBvbmNlIGFuZCB0aGVuIHJldXNlIHRoZSBjYWNoZWQgYW5zd2VyLgorCisgICAgLy8g
V2Ugc3RpbGwgbmVlZCB0aGlzIHN5bmMgdmVyc2lvbiwgYmVjYXVzZSBSZXNvdXJjZUhhbmRsZSBp
dHNlbGYgdXNlcyBpdCBpbnRlcm5hbGx5LCBldmVuIHdoZW4gdGhlIGRlbGVnYXRlIHVzZXMgYW4g
YXN5bmMgb25lLgorCisgICAgcmV0dXJuIG1fcGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRp
YWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBj
b25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQoreworICAgIEFTU0VSVF9V
TlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIC8vIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlciBkb2VzIG5vdCBrbm93IHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgY3Jvc3Mgb3JpZ2lu
LCBzbyBXZWIgcHJvY2VzcyBjb21wdXRlcyBhbiBhcHBsaWNhYmxlIGNyZWRlbnRpYWwgcG9saWN5
IGZvciBpdC4KKyAgICBBU1NFUlQobV9wYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kg
IT0gRG9Ob3RBc2tDbGllbnRGb3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzKTsKKworICAgIGlmICht
X3BhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFu
eUNyZWRlbnRpYWxzKSB7CisgICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgp
LT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24o
KS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UobV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIGNoYWxs
ZW5nZSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsK
KworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFibHkgbm90IG5lZWRlZCAoc2VlIDxyZGFy
Oi8vcHJvYmxlbS84OTYwMTI0PikuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBO
ZXR3b3JrTG9hZDo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFu
ZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworCisgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworICAg
IGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3Qp
KTsKK30KKworI2VuZGlmIC8vICFVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaWYgUExBVEZPUk0o
Q09DT0EpCisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrTG9hZC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0xvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzQ3YzMzMmNjYWIwOTAwMzEzMjdkZWQ5NDZkOGY3MzNk
MDVkOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWQuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0
d29ya0xvYWRfaAorI2RlZmluZSBOZXR3b3JrTG9hZF9oCisKKyNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQorCisjaW5jbHVkZSAiTmV0d29ya0xvYWRDbGllbnQuaCIKKyNpbmNsdWRlICJOZXR3
b3JrTG9hZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5o
IgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5o
IgorI2Vsc2UKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtMb2FkCisjaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKKyAgICA6IHB1YmxpYyBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQKKyNl
bHNlCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKKyNlbmRpZgor
eworcHVibGljOgorICAgIE5ldHdvcmtMb2FkKE5ldHdvcmtMb2FkQ2xpZW50JiwgY29uc3QgTmV0
d29ya0xvYWRQYXJhbWV0ZXJzJik7CisgICAgfk5ldHdvcmtMb2FkKCk7CisKKyAgICB2b2lkIHNl
dERlZmVyc0xvYWRpbmcoYm9vbCk7CisgICAgdm9pZCBjYW5jZWwoKTsKKworICAgIHZvaWQgY2xl
YXJDdXJyZW50UmVxdWVzdCgpIHsgbV9jdXJyZW50UmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCgpOyB9CisKKyAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVz
cG9uc2UoKTsKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gTmV0d29ya1Nlc3Np
b25UYXNrQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlv
bihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDaGFs
bGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpmdW5j
dGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYp
IGZpbmFsIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVdpdGhFcnJvcihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWwgb3ZlcnJpZGU7CisjZWxzZQorICAg
IC8vIFJlc291cmNlSGFuZGxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVz
dEFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25z
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwg
aW50IGVuY29kZWREYXRhTGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUJ1ZmZlcihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiwgaW50IGVuY29kZWREYXRhTGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGRvdWJs
ZSBmaW5pc2hUaW1lKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSop
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24o
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCB1c2VzQXN5bmNDYWxsYmFja3Mo
KSBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGxvYWRpbmdTeW5j
aHJvbm91c1hIUigpIG92ZXJyaWRlIHsgcmV0dXJuIG1fY2xpZW50LmlzU3luY2hyb25vdXMoKTsg
fQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2aXJ0dWFs
IHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikgb3ZlcnJp
ZGU7CisjZW5kaWYKKyNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRGF0YUFycmF5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVEYXRhQXJyYXkoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBDRkFycmF5
UmVmKSBvdmVycmlkZTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDRk5F
VFdPUkspCisgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBvdmVycmlkZTsKKyNlbHNl
CisgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOworI2VuZGlmCisjZW5k
aWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaWYgVVNFKFBST1RFQ1RJT05f
U1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdh
aW5zdFByb3RlY3Rpb25TcGFjZShib29sKTsKKyNlbmRpZgorCisjaWYgIVVTRShORVRXT1JLX1NF
U1NJT04pCisgICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFuZGxlLmdldCgpOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrTG9h
ZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHNo
YXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgTmV0d29ya0xv
YWRDbGllbnQmIG1fY2xpZW50OworICAgIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyBtX3Bh
cmFtZXRlcnM7CisgICAgUmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdvcmtp
bmdDb250ZXh0OworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgUmVmUHRyPE5ldHdvcmtE
YXRhVGFzaz4gbV90YXNrOworI2Vsc2UKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU+IG1faGFuZGxlOworI2VuZGlmCisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9j
dXJyZW50UmVxdWVzdDsgLy8gVXBkYXRlZCBvbiByZWRpcmVjdHMuCit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNlbmRp
ZiAvLyBOZXR3b3JrTG9hZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrTG9hZENsaWVudC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTQ4NmI3YTYzNDk5YzQ5NjRmZTBjMjcx
ZWM5ZDVhN2NhYmE0NWYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0xvYWRDbGllbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBOZXR3b3JrTG9hZENsaWVudF9oCisjZGVmaW5lIE5ldHdvcmtMb2FkQ2xpZW50
X2gKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworI2lmIFBMQVRGT1JNKENP
Q09BKQordHlwZWRlZiBjb25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWY7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUHJv
dGVjdGlvblNwYWNlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0xv
YWRDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfk5ldHdvcmtMb2FkQ2xpZW50KCkgeyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhjb25zdCBXZWJDb3Jl
OjpQcm90ZWN0aW9uU3BhY2UmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVkaXJl
Y3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgPSAwOworICAgIGVudW0gY2xh
c3MgU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgeyBObywgWWVzIH07CisgICAgdmly
dHVhbCBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBkaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBpbnQgcmVw
b3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxM
b2FkaW5nKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSA9IDA7CisKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhDRkNhY2hl
ZFVSTFJlc3BvbnNlUmVmKSA9IDA7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2VuZGlmIC8vIE5ldHdv
cmtMb2FkQ2xpZW50X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzlhY2Y2NzgxZjg2M2Uy
ODQzOWFmZWFmMDg4ZjZjMTU3OTVhZTU3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCisjaW5jbHVkZSAiTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzOjpOZXR3b3JrTG9hZFBhcmFtZXRlcnMoKQorICAgIDogd2ViUGFnZUlEKDApCisg
ICAgLCB3ZWJGcmFtZUlEKDApCisgICAgLCBzZXNzaW9uSUQoU2Vzc2lvbklEOjplbXB0eVNlc3Np
b25JRCgpKQorICAgICwgY29udGVudFNuaWZmaW5nUG9saWN5KFNuaWZmQ29udGVudCkKKyAgICAs
IGFsbG93U3RvcmVkQ3JlZGVudGlhbHMoRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzKQorICAg
ICwgY2xpZW50Q3JlZGVudGlhbFBvbGljeShEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxz
KQorICAgICwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCh0cnVlKQor
ICAgICwgZGVmZXJzTG9hZGluZyhmYWxzZSkKKyAgICAsIG5lZWRzQ2VydGlmaWNhdGVJbmZvKGZh
bHNlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkUGFyYW1ldGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NjIyMTU2ZjUxZjQxOTI5N2Ix
MGIzNmZhODhjY2M1ODYyZTc0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaApAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrTG9hZFBhcmFtZXRlcnNfaAorI2RlZmluZSBOZXR3
b3JrTG9hZFBhcmFtZXRlcnNfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0xvYWRQYXJhbWV0ZXJzIHsKK3B1Ymxp
YzoKKyAgICBOZXR3b3JrTG9hZFBhcmFtZXRlcnMoKTsKKworICAgIHVpbnQ2NF90IHdlYlBhZ2VJ
RDsKKyAgICB1aW50NjRfdCB3ZWJGcmFtZUlEOworICAgIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNz
aW9uSUQ7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgV2ViQ29y
ZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IGNvbnRlbnRTbmlmZmluZ1BvbGljeTsKKyAgICBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscyBhbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIFdlYkNv
cmU6OkNsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeTsKKyAgICBi
b29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7CisgICAgYm9vbCBk
ZWZlcnNMb2FkaW5nOworICAgIGJvb2wgbmVlZHNDZXJ0aWZpY2F0ZUluZm87Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisK
KyNlbmRpZiAvLyBOZXR3b3JrTG9hZFBhcmFtZXRlcnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggMDg0
NmE1MDQ3Y2QwYjVjMjgxZDljNTY3NDFkZmRhNDlhN2E1Zjc3OS4uZGJiYjM5OGFmYTBkNzNkYjlj
ZDMyYWEwMDUzOTVkMTdmZmQ1NzYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0yOCwzNSArMjgsMjgg
QEAKIAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKLSNpbmNsdWRlICJBdXRoZW50aWNh
dGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOZXR3
b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQuaCIKLSNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIlNoYXJl
YWJsZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAi
V2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQmxvYkRhdGFG
aWxlUmVmZXJlbmNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJOYW1lcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TeW5jaHJv
bm91c0xvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+Ci0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTIwLDExICsxMTMsNyBAQCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcihjb25zdCBOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycwogTmV0d29ya1Jlc291cmNlTG9hZGVyOjp+TmV0d29ya1Jlc291
cmNlTG9hZGVyKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotI2lmIFVTRShO
RVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUKCFtX3Rhc2spOwotI2Vsc2UKLSAgICBBU1NFUlQo
IW1faGFuZGxlKTsKLSNlbmRpZgorICAgIEFTU0VSVCghbV9uZXR3b3JrTG9hZCk7CiAgICAgQVNT
RVJUKCFpc1N5bmNocm9ub3VzKCkgfHwgIW1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZGVsYXllZFJl
cGx5KTsKIH0KIApAQCAtMTQwLDggKzEyOSw2IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpzdGFydCgpCiAgICAgaWYgKG1fZGVmZXJzTG9hZGluZykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9jdXJyZW50UmVxdWVzdCA9IG9yaWdpbmFsUmVxdWVzdCgpOwotCiAjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCiAgICAgaWYgKCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxl
ZCgpIHx8IHNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkgfHwgIW9yaWdpbmFsUmVxdWVzdCgpLnVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewogICAgICAgICBzdGFydE5ldHdvcmtMb2Fk
KCk7CkBAIC0xNzMsMTAgKzE2MCwyNSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3Rh
cnQoKQogI2VuZGlmCiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdv
cmtMb2FkKCkKK3N0YXRpYyBOZXR3b3JrTG9hZFBhcmFtZXRlcnMgY29uc3RydWN0TmV0d29ya0xv
YWRQYXJhbWV0ZXJzKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzLCBjb25zdCBPcHRpb25hbDxSZXNvdXJjZVJlcXVlc3Q+JiB1cGRhdGVkUmVxdWVzdCkKIHsK
LSAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0
ZShzZXNzaW9uSUQoKSwgbV9wYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QpOworICAgIE5ldHdvcmtMb2FkUGFyYW1ldGVycyBuZXR3b3JrTG9hZFBhcmFt
ZXRlcnM7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCA9IHBhcmFtZXRlcnMu
d2ViUGFnZUlEOworICAgIG5ldHdvcmtMb2FkUGFyYW1ldGVycy53ZWJGcmFtZUlEID0gcGFyYW1l
dGVycy53ZWJGcmFtZUlEOworICAgIG5ldHdvcmtMb2FkUGFyYW1ldGVycy5zZXNzaW9uSUQgPSBw
YXJhbWV0ZXJzLnNlc3Npb25JRDsKKyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMucmVxdWVzdCA9
IHVwZGF0ZWRSZXF1ZXN0ID8gdXBkYXRlZFJlcXVlc3QudmFsdWUoKSA6IHBhcmFtZXRlcnMucmVx
dWVzdDsKKyAgICBuZXR3b3JrTG9hZFBhcmFtZXRlcnMuY29udGVudFNuaWZmaW5nUG9saWN5ID0g
cGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3k7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0
ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBwYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVu
dGlhbHM7CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kg
PSBwYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3k7CisgICAgbmV0d29ya0xvYWRQYXJh
bWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QgPSBwYXJhbWV0
ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7CisgICAgbmV0d29y
a0xvYWRQYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcgPSBwYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmc7
CisgICAgbmV0d29ya0xvYWRQYXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJbmZvID0gcGFyYW1l
dGVycy5uZWVkc0NlcnRpZmljYXRlSW5mbzsKIAorICAgIHJldHVybiBuZXR3b3JrTG9hZFBhcmFt
ZXRlcnM7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2Fk
KGNvbnN0IE9wdGlvbmFsPFJlc291cmNlUmVxdWVzdD4mIHVwZGF0ZWRSZXF1ZXN0KQorewogICAg
IGNvbnN1bWVTYW5kYm94RXh0ZW5zaW9ucygpOwogCiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSB8
fCBtX3BhcmFtZXRlcnMubWF4aW11bUJ1ZmZlcmluZ1RpbWUgPiAwX21zKQpAQCAtMTg3LDE0ICsx
ODksNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnROZXR3b3JrTG9hZCgpCiAg
ICAgICAgIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNy
ZWF0ZSgpOwogI2VuZGlmCiAKLSAgICBib29sIHNob3VsZFNuaWZmID0gbV9wYXJhbWV0ZXJzLmNv
bnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNvbnRlbnQ7Ci0jaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKLSAgICBVTlVTRURfUEFSQU0oc2hvdWxkU25pZmYpOyAvLyBGSVhNRTogVXNlIHRoaXMu
Ci0gICAgbV90YXNrID0gU2Vzc2lvblRyYWNrZXI6Om5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCgp
KS0+Y3JlYXRlRGF0YVRhc2tXaXRoUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0LCAqdGhpcyk7Ci0g
ICAgbV90YXNrLT5yZXN1bWUoKTsKLSNlbHNlCi0gICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlKG1fbmV0d29ya2luZ0NvbnRleHQuZ2V0KCksIG1fY3VycmVudFJlcXVlc3QsIHRo
aXMsIG1fZGVmZXJzTG9hZGluZywgc2hvdWxkU25pZmYpOwotI2VuZGlmCisgICAgbV9uZXR3b3Jr
TG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0xvYWQ+KCp0aGlzLCBjb25zdHJ1Y3ROZXR3
b3JrTG9hZFBhcmFtZXRlcnMobV9wYXJhbWV0ZXJzLCB1cGRhdGVkUmVxdWVzdCkpOwogfQogCiB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykK
QEAgLTIwMiwxNSArMTk3LDkgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCBkZWZlcnMpCiAgICAgaWYgKG1fZGVmZXJzTG9hZGluZyA9PSBkZWZlcnMp
CiAgICAgICAgIHJldHVybjsKICAgICBtX2RlZmVyc0xvYWRpbmcgPSBkZWZlcnM7Ci0jaWYgVVNF
KE5FVFdPUktfU0VTU0lPTikKLSAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCi0gICAgaWYgKG1faGFuZGxlKSB7Ci0gICAgICAgIG1f
aGFuZGxlLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0jZW5kaWYKKworICAgIG1fbmV0d29ya0xvYWQtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsK
KwogICAgIGlmICghbV9kZWZlcnNMb2FkaW5nKQogICAgICAgICBzdGFydCgpOwogfQpAQCAtMjIz
LDQyICsyMTIsMjQgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNsZWFudXAoKQogCiAg
ICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCk7CiAKLSNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQotICAgIGlmIChtX3Rhc2spIHsKLSAgICAgICAgbV90YXNrLT5jbGVhckNsaWVudCgpOwot
ICAgICAgICBtX3Rhc2sgPSBudWxscHRyOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKG1faGFuZGxl
KSB7Ci0gICAgICAgIG1faGFuZGxlLT5jbGVhckNsaWVudCgpOwotICAgICAgICBtX2hhbmRsZSA9
IG51bGxwdHI7Ci0gICAgfQotI2VuZGlmCisgICAgbV9uZXR3b3JrTG9hZCA9IG51bGxwdHI7CiAK
ICAgICAvLyBUaGlzIHdpbGwgY2F1c2UgTmV0d29ya1Jlc291cmNlTG9hZGVyIHRvIGJlIGRlc3Ry
b3llZCBhbmQgdGhlcmVmb3JlIHdlIGRvIGl0IGxhc3QuCiAgICAgbV9jb25uZWN0aW9uLT5kaWRD
bGVhbnVwUmVzb3VyY2VMb2FkZXIoKnRoaXMpOwogfQogCi0jaWYgIVVTRShORVRXT1JLX1NFU1NJ
T04pCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29udmVydEhhbmRsZVRvRG93bmxv
YWQoKQogewotICAgIEFTU0VSVChtX2hhbmRsZSk7CisgICAgQVNTRVJUKG1fbmV0d29ya0xvYWQp
OwogICAgIG1fZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQgPSB0cnVlOwogfQotI2VuZGlmCiAK
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgpCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgaWYgKG1fdGFz
aykKLSAgICAgICAgbV90YXNrLT5jYW5jZWwoKTsKLSAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5n
IHdpdGggdGhlIG5ldHdvcmsgY2FjaGUgaGVyZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vs
c2UKLSAgICBpZiAobV9oYW5kbGUgJiYgIW1fZGlkQ29udmVydEhhbmRsZVRvRG93bmxvYWQpIHsK
LSAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworICAgIGlmIChtX25ldHdvcmtMb2FkICYmICFt
X2RpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKSB7CisgICAgICAgIG1fbmV0d29ya0xvYWQtPmNh
bmNlbCgpOwogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgICAgIGlmIChOZXR3b3Jr
Q2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKSB7CkBAIC0yNjgsMTcgKzIzOSwxNCBAQCB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogICAgICAgICB9CiAjZW5kaWYKICAg
ICB9Ci0jZW5kaWYKKwogICAgIGNsZWFudXAoKTsKIH0KIAotTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OnNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiByZWNlaXZlZFJlc3BvbnNlKQorYXV0byBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKSAtPiBT
aG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZQogewogICAgIG1fcmVzcG9uc2UgPSByZWNl
aXZlZFJlc3BvbnNlOwogCi0gICAgbV9yZXNwb25zZS5zZXRTb3VyY2UoUmVzb3VyY2VSZXNwb25z
ZTo6U291cmNlOjpOZXR3b3JrKTsKLSAgICBpZiAobV9wYXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNh
dGVJbmZvKQotICAgICAgICBtX3Jlc3BvbnNlLmluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKICAg
ICAvLyBGb3IgbXVsdGlwYXJ0L3gtbWl4ZWQtcmVwbGFjZSBkaWRSZWNlaXZlUmVzcG9uc2VBc3lu
YyBnZXRzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBhbmQgYnVmZmVyaW5nIHdvdWxkIHJlcXVpcmUg
c3BlY2lhbCBoYW5kbGluZy4KICAgICBpZiAoIWlzU3luY2hyb25vdXMoKSAmJiBtX3Jlc3BvbnNl
LmlzTXVsdGlwYXJ0KCkpCiAgICAgICAgIG1fYnVmZmVyZWREYXRhID0gbnVsbHB0cjsKQEAgLTMy
Miw3ICsyOTAsNyBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlNob3VsZENvbnRpbnVlRGlkUmVj
ZWl2ZVJlc3BvbnNlIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cwogICAgIHJldHVybiBTaG91bGRD
b250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzOwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c2hhcmVkRGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiYmIGJ1ZmZlciwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCit2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8U2hhcmVkQnVmZmVyPiYm
IGJ1ZmZlciwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCiB7CiAjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCiAgICAgQVNTRVJUKCFtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKTsKQEAg
LTM0OSw3ICszMTcsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkUmVj
ZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPgogICAgIHNlbmRCdWZmZXJN
YXliZUFib3J0aW5nKCpidWZmZXIsIGVuY29kZWREYXRhTGVuZ3RoKTsKIH0KIAotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRp
bWUpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUg
ZmluaXNoVGltZSkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBpZiAoTmV0d29y
a0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSkgewpAQCAtNDA0LDcgKzM3Miw3IEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBm
aW5pc2hUaW1lKQogICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnNoYXJlZERpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCit2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbExvYWRpbmcoY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKCFlcnJvci5pc051bGwoKSk7CiAKQEAgLTQyMSwy
MjEgKzM4OSw0NCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkRmFpbChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBjbGVhbnVwKCk7CiB9CiAK
LXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1
ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3ZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjp3aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsK
LSAgICAvLyBXZSBvbmx5IGV4cGVjdCB0byBnZXQgdGhlIHdpbGxTZW5kUmVxdWVzdCBjYWxsYmFj
ayBmcm9tIFJlc291cmNlSGFuZGxlIGFzIHRoZSByZXN1bHQgb2YgYSByZWRpcmVjdC4KLSAgICBB
U1NFUlQoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOwotICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBtX2N1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdDsKLQogI2lmIEVOQUJM
RShORVRXT1JLX0NBQ0hFKQogICAgIFdlYkNvcmU6OnVwZGF0ZVJlZGlyZWN0Q2hhaW5TdGF0dXMo
bV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIHJlZGlyZWN0UmVzcG9uc2UpOwogI2VuZGlmCiAK
ICAgICBpZiAoaXNTeW5jaHJvbm91cygpKSB7CisgICAgICAgIFJlc291cmNlUmVxdWVzdCBvdmVy
cmlkZW5SZXF1ZXN0ID0gcmVxdWVzdDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8g
YmUgZml4ZWQgdG8gZm9sbG93IHRoZSByZWRpcmVjdCBjb3JyZWN0bHkgZXZlbiBmb3IgY3Jvc3Mt
ZG9tYWluIHJlcXVlc3RzLgogICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIGF0IGxlYXN0IHVwZGF0
aW5nIGhvc3QgcmVjb3JkcywgYW5kIGNvbXBhcmluZyB0aGUgY3VycmVudCByZXF1ZXN0IGluc3Rl
YWQgb2YgdGhlIG9yaWdpbmFsIHJlcXVlc3QgaGVyZS4KLSAgICAgICAgaWYgKCFwcm90b2NvbEhv
c3RBbmRQb3J0QXJlRXF1YWwob3JpZ2luYWxSZXF1ZXN0KCkudXJsKCksIG1fY3VycmVudFJlcXVl
c3QudXJsKCkpKSB7CisgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG9y
aWdpbmFsUmVxdWVzdCgpLnVybCgpLCByZXF1ZXN0LnVybCgpKSkgewogICAgICAgICAgICAgQVNT
RVJUKG1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZXJyb3IuaXNOdWxsKCkpOwogICAgICAgICAgICAg
bV9zeW5jaHJvbm91c0xvYWREYXRhLT5lcnJvciA9IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50Ojpw
bGF0Zm9ybUJhZFJlc3BvbnNlRXJyb3IoKTsKLSAgICAgICAgICAgIG1fY3VycmVudFJlcXVlc3Qg
PSBSZXNvdXJjZVJlcXVlc3QoKTsKKyAgICAgICAgICAgIG1fbmV0d29ya0xvYWQtPmNsZWFyQ3Vy
cmVudFJlcXVlc3QoKTsKKyAgICAgICAgICAgIG92ZXJyaWRlblJlcXVlc3QgPSBSZXNvdXJjZVJl
cXVlc3QoKTsKICAgICAgICAgfQotICAgICAgICBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChtX2N1
cnJlbnRSZXF1ZXN0KTsKKyAgICAgICAgY29udGludWVXaWxsU2VuZFJlcXVlc3Qob3ZlcnJpZGVu
UmVxdWVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2VuZEFib3J0aW5nT25GYWls
dXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1ZXN0KG1fY3VycmVu
dFJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKTsKLX0KLSAgICAKLSNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQUmVk
aXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lkKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsKLSAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0KTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZSwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxl
cihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhhbmRs
aW5nLCBXZWJDb3JlOjpDcmVkZW50aWFsKCkpOworICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OldpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlKSk7CiB9Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHN0
ZDo6ZnVuY3Rpb248dm9pZChSZXNwb25zZURpc3Bvc2l0aW9uKT4gY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzaGFyZWREaWRSZWNlaXZlUmVz
cG9uc2UocmVzcG9uc2UpOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKFJlc3BvbnNlRGlzcG9zaXRp
b246OkFsbG93KTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVE
YXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQotewotICAgIEFTU0VS
VChidWZmZXIpOwotICAgIGF1dG8gc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOwotICAgIHNoYXJlZERp
ZFJlY2VpdmVCdWZmZXIoV1RGOjptb3ZlKGJ1ZmZlciksIHNpemUpOwotfQotCi12b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQotICAgICAgICBz
aGFyZWREaWRGaW5pc2hMb2FkaW5nKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkp
OwotICAgIGVsc2UKLSAgICAgICAgc2hhcmVkRGlkRmFpbChlcnJvcik7Ci19Ci0KLSNlbHNlCi0K
LXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3Bv
bnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwot
ICAgIGlmIChzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSkgPT0gU2hv
dWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2U6OlllcykKLSAgICAgICAgbV9oYW5kbGUtPmNv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEg
Ki8sIHVuc2lnbmVkIC8qIGxlbmd0aCAqLywgaW50IC8qIGVuY29kZWREYXRhTGVuZ3RoICovKQot
ewotICAgIC8vIFRoZSBOZXR3b3JrUHJvY2VzcyBzaG91bGQgbmV2ZXIgZ2V0IGEgZGlkUmVjZWl2
ZURhdGEgY2FsbGJhY2suCi0gICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSB1c2luZyBkaWRSZWNl
aXZlQnVmZmVyLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBpbnQgcmVwb3J0ZWRFbmNv
ZGVkRGF0YUxlbmd0aCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1f
aGFuZGxlKTsKLSAgICBzaGFyZWREaWRSZWNlaXZlQnVmZmVyKFdURjo6bW92ZShidWZmZXIpLCBy
ZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgZG91YmxlIGZpbmlz
aFRpbWUpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7
Ci0gICAgc2hhcmVkRGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1lKTsKLX0KLQotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsICFoYW5k
bGUgfHwgaGFuZGxlID09IG1faGFuZGxlKTsKLSAgICBzaGFyZWREaWRGYWlsKGVycm9yKTsKLX0K
LQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEFzeW5jKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VE
KGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLSAgICBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0
ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwotfQotCi0jZW5kaWYgLy8gVVNF
KE5FVFdPUktfU0VTU0lPTikKICAgICAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb250
aW51ZVdpbGxTZW5kUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QpCiB7
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV9jdXJyZW50UmVxdWVzdC51cGRhdGVGcm9tRGVs
ZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGllcyhuZXdSZXF1ZXN0Lm5zVVJMUmVxdWVzdChEb05v
dFVwZGF0ZUhUVFBCb2R5KSk7Ci0jZWxpZiBVU0UoU09VUCkKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IFJlc291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3Bl
cnRpZXMuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MTI3
LgotICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFBy
b3BlcnRpZXMobmV3UmVxdWVzdCk7Ci0jZW5kaWYKLQotICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0
LmlzTnVsbCgpKSB7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAgICAgLy8gRklYTUU6
IERvIHNvbWV0aGluZyBoZXJlLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKLSAg
ICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOwotICAgICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgp
LCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gRklYTUU6IERv
IHNvbWV0aGluZyBoZXJlLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAgIG1faGFu
ZGxlLT5jb250aW51ZVdpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLSNlbmRpZgor
ICAgIG1fbmV0d29ya0xvYWQtPmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KG5ld1JlcXVlc3QpOwog
fQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2UoKQogewotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjaGVjayBvbmNlIEJsb2JSZXNvdXJj
ZUhhbmRsZSBpbXBsZW1lbnRzIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jIGNvcnJlY3RseS4KLSAg
ICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90IHdhaXQgZm9yIHJlc3BvbnNlLCBzbyB0aGUgbG9h
ZCBpcyBsaWtlbHkgdG8gZmluaXNoIGJlZm9yZSBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZS4K
LSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVy
ZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotI2Vsc2UKLSAgICBpZiAoIW1faGFuZGxlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Uo
KTsKLSNlbmRpZgorICAgIG1fbmV0d29ya0xvYWQtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
KCk7CiB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLQotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZFNlbmREYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIHVuc2lnbmVkIGxv
bmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQp
Cit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBs
b25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsK
LSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQogICAgIGlm
ICghaXNTeW5jaHJvbm91cygpKQogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxv
YWRlcjo6RGlkU2VuZERhdGEoYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpKTsKIH0KIAot
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsK
LQotICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmJsb2NrZWRFcnJvcihtX2N1cnJlbnRSZXF1
ZXN0KSk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5ub3RTaG93VVJMKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRs
ZSA9PSBtX2hhbmRsZSk7Ci0KLSAgICBkaWRGYWlsKGhhbmRsZSwgV2ViS2l0OjpjYW5ub3RTaG93
VVJMRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwotfQotCi1ib29sIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkK
LXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlIHx8ICFtX2hh
bmRsZSk7IC8vIG1faGFuZGxlIHdpbGwgYmUgMCBpZiBjYWxsZWQgZnJvbSBSZXNvdXJjZUhhbmRs
ZTo6c3RhcnQoKS4KLQotICAgIC8vIFdoZW4gdGhlIFdlYlByb2Nlc3MgaXMgaGFuZGxpbmcgbG9h
ZGluZyBhIGNsaWVudCBpcyBjb25zdWx0ZWQgZWFjaCB0aW1lIHRoaXMgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UgcXVlc3Rpb24gaXMgYXNrZWQuCi0gICAgLy8gSW4gTmV0d29ya1Byb2Nlc3Mg
bW9kZSB3ZSBhc2sgdGhlIFdlYlByb2Nlc3MgY2xpZW50IHVwIGZyb250IG9uY2UgYW5kIHRoZW4g
cmV1c2UgdGhlIGNhY2hlZCBhbnN3ZXIuCi0KLSAgICAvLyBXZSBzdGlsbCBuZWVkIHRoaXMgc3lu
YyB2ZXJzaW9uLCBiZWNhdXNlIFJlc291cmNlSGFuZGxlIGl0c2VsZiB1c2VzIGl0IGludGVybmFs
bHksIGV2ZW4gd2hlbiB0aGUgZGVsZWdhdGUgdXNlcyBhbiBhc3luYyBvbmUuCi0KLSAgICByZXR1
cm4gbV9wYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVk
ZW50aWFsczsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxl
LCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotICAgIC8vIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBkb2Vz
IG5vdCBrbm93IHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgY3Jvc3Mgb3JpZ2luLCBzbyBXZWIgcHJv
Y2VzcyBjb21wdXRlcyBhbiBhcHBsaWNhYmxlIGNyZWRlbnRpYWwgcG9saWN5IGZvciBpdC4KLSAg
ICBBU1NFUlQobV9wYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgIT0gRG9Ob3RBc2tD
bGllbnRGb3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzKTsKLQotICAgIGlmIChtX3BhcmFtZXRlcnMu
Y2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxz
KSB7Ci0gICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJl
cXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5hdXRoZW50aWNh
dGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJhbWV0
ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIGNoYWxsZW5nZSk7Ci19Ci0K
LXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0K
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQgKHNlZSA8cmRhcjov
L3Byb2JsZW0vODk2MDEyND4pLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpyZWNlaXZlZENhbmNlbGxhdGlvbihSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCi17Ci0gICAgQVNTRVJUX1VO
VVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KLSAgICBtX2hhbmRsZS0+Y2FuY2Vs
KCk7Ci0gICAgZGlkRmFpbChtX2hhbmRsZS5nZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50
UmVxdWVzdCkpOwotfQotCi0jZW5kaWYgLy8gIVVTRShORVRXT1JLX1NFU1NJT04pCi0KIHZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydEJ1ZmZlcmluZ1RpbWVySWZOZWVkZWQoKQogewog
ICAgIGlmIChpc1N5bmNocm9ub3VzKCkpCkBAIC02NDgsOSArNDM5LDggQEAgdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCgpCiB2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCgpCiB7CiAgICAgQVNTRVJUKG1f
YnVmZmVyZWREYXRhKTsKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBBU1NFUlQobV9o
YW5kbGUpOwotI2VuZGlmCisgICAgQVNTRVJUKG1fbmV0d29ya0xvYWQpOworCiAgICAgaWYgKCFt
X2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTcxOCwyNCArNTA4
LDIzIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZXRyaWV2ZUNhY2hlRW50cnko
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjp2YWxpZGF0ZUNhY2hlRW50cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50
cnk+IGVudHJ5KQogewotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVCghbV9o
YW5kbGUpOwotI2VuZGlmCisgICAgQVNTRVJUKCFtX25ldHdvcmtMb2FkKTsKIAogICAgIC8vIElm
IHRoZSByZXF1ZXN0IGlzIGFscmVhZHkgY29uZGl0aW9uYWwgdGhlbiB0aGUgcmV2YWxpZGF0aW9u
IHdhcyBub3QgdHJpZ2dlcmVkIGJ5IHRoZSBkaXNrIGNhY2hlCiAgICAgLy8gYW5kIHdlIHNob3Vs
ZCBub3Qgb3ZlcndyaXRlIHRoZSBleGlzdGluZyBjb25kaXRpb25hbCBoZWFkZXJzLgotICAgIGlm
ICghbV9jdXJyZW50UmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkpIHsKKyAgICBSZXNvdXJjZVJlcXVl
c3QgcmV2YWxpZGF0aW9uUmVxdWVzdCA9IG9yaWdpbmFsUmVxdWVzdCgpOworICAgIGlmICghcmV2
YWxpZGF0aW9uUmVxdWVzdC5pc0NvbmRpdGlvbmFsKCkpIHsKICAgICAgICAgU3RyaW5nIGVUYWcg
PSBlbnRyeS0+cmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5h
bWU6OkVUYWcpOwogICAgICAgICBTdHJpbmcgbGFzdE1vZGlmaWVkID0gZW50cnktPnJlc3BvbnNl
KCkuaHR0cEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpMYXN0TW9kaWZpZWQp
OwogICAgICAgICBpZiAoIWVUYWcuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50UmVx
dWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OklmTm9uZU1h
dGNoLCBlVGFnKTsKKyAgICAgICAgICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpJZk5vbmVNYXRjaCwgZVRhZyk7CiAgICAg
ICAgIGlmICghbGFzdE1vZGlmaWVkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY3VycmVudFJl
cXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpJZk1vZGlm
aWVkU2luY2UsIGxhc3RNb2RpZmllZCk7CisgICAgICAgICAgICByZXZhbGlkYXRpb25SZXF1ZXN0
LnNldEhUVFBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmllZFNp
bmNlLCBsYXN0TW9kaWZpZWQpOwogICAgIH0KIAogICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRp
b24gPSBXVEY6Om1vdmUoZW50cnkpOwogCi0gICAgc3RhcnROZXR3b3JrTG9hZCgpOworICAgIHN0
YXJ0TmV0d29ya0xvYWQocmV2YWxpZGF0aW9uUmVxdWVzdCk7CiB9CiAjZW5kaWYKIApAQCAtNzgz
LDUzICs1NzIsMTkgQEAgYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9ydGluZ09u
RmFpbHVyZShUJiYgbWVzc2FnZSwgdW5zaWduZWQgbWVzc2FnZVMKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi0jaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgJiYgIVVTRShO
RVRXT1JLX1NFU1NJT04pCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQordm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhjb25z
dCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKIHsKLSAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5k
bGUpOwotCi0gICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBsYXRmb3Jt
LWxldmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCi0gICAgaWYgKHBy
b3RlY3Rpb25TcGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkCi0gICAgICAg
ICYmICFOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVz
dEV2YWx1YXRpb24oKSkgewotICAgICAgICBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KGlzU3luY2hyb25vdXMoKSkgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzayB0aGUg
V2ViUHJvY2VzcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgY2FzZSBiZWxvdyBkb2VzLgotICAgICAg
ICAvLyBUaGlzIGlzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGFzIHRoZSBXZWJQcm9jZXNzIGlzIGJs
b2NrZWQgd2FpdGluZyBvbiB0aGlzIHN5bmNocm9ub3VzIGxvYWQuCi0gICAgICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCB3ZSBjYW4ganVtcCBzdHJhaWdodCB0byB0aGUgVUkgcHJvY2VzcyB0byBy
ZXNvbHZlIHRoaXMuCi0gICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZSh0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZW5kQWJvcnRp
bmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpDYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSkpOwotfQotI2VuZGlmCi0KICNp
ZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShi
b29sIHJlc3VsdCkKLXsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIC8vIEZJWE1FOiBE
byBzb21ldGhpbmcgaGVyZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHNlbmRBYm9ydGlu
Z09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFn
YWluc3RQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7CiAjZWxzZQotICAgIG1faGFu
ZGxlLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0
KTsKLSNlbmRpZgotfQorICAgIFVOVVNFRF9QQVJBTShwcm90ZWN0aW9uU3BhY2UpOwogI2VuZGlm
Ci0KLSNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spICYmICFVU0UoTkVUV09S
S19TRVNTSU9OKQotYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN1cHBvcnRzRGF0YUFycmF5
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXkoUmVzb3VyY2VIYW5k
bGUqLCBDRkFycmF5UmVmKQorI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sp
Cit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQogewotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9uZXR3b3JrTG9hZC0+Y29udGludWVD
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHJlc3VsdCk7CiB9CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuaAppbmRleCA4YjQyM2RjODRmMjNkNzg4OWE3ZTY4MGNiMjI2ODFkZTVlOTc0OGEx
Li4wZTllOTA5ZTkzNWU0OWYxNDY0NTQ3ZTZkMTkxZWFiYzZkZDMwYjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaApA
QCAtMzEsMzEgKzMxLDE3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZENsaWVudC5oIgogI2luY2x1ZGUgIk5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3Vy
Y2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhY2hlVmFsaWRhdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VFcnJvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJP
cHRpb25zLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25J
RC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLSNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCi0jZWxzZQotI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KLSNlbmRpZgotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBf
Q0ZDYWNoZWRVUkxSZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZjsKKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmxvYkRhdGFGaWxl
UmVmZXJlbmNlOwotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotY2xhc3MgUmVzb3VyY2VIYW5k
bGU7Ci0jZW5kaWYKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIH0KIApAQCAtNjMsMTYgKzQ5LDEy
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2VzczsKIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOwotY2xhc3MgUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ7CitjbGFzcyBOZXR3b3JrTG9hZDsKIGNsYXNzIFNhbmRib3hFeHRl
bnNpb247CiAKIGNsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRlcgogICAgIDogcHVibGljIFJlZkNv
dW50ZWQ8TmV0d29ya1Jlc291cmNlTG9hZGVyPgotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0g
ICAgLCBwdWJsaWMgTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50Ci0jZWxzZQotICAgICwgcHVibGlj
IFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50Ci0jZW5kaWYKKyAgICAsIHB1YmxpYyBOZXR3
b3JrTG9hZENsaWVudAogICAgICwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShjb25zdCBOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCkBAIC04OCwxMiArNzAsOCBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5yZXF1ZXN0OyB9CiAKLSAgICAvLyBDaGFuZ2VzIHdpdGgg
cmVkaXJlY3RzLgotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgY3VycmVudFJlcXVlc3Qo
KSB7IHJldHVybiBtX2N1cnJlbnRSZXF1ZXN0OyB9CisgICAgTmV0d29ya0xvYWQqIG5ldHdvcmtM
b2FkKCkgY29uc3QgeyByZXR1cm4gbV9uZXR3b3JrTG9hZC5nZXQoKTsgfQogCi0jaWYgIVVTRShO
RVRXT1JLX1NFU1NJT04pCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFuZGxlLmdldCgpOyB9Ci0jZW5kaWYKICAgICB2b2lkIGRpZENvbnZl
cnRIYW5kbGVUb0Rvd25sb2FkKCk7CiAKICAgICB2b2lkIHN0YXJ0KCk7CkBAIC0xMDMsNyArODEs
OSBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdGF0aWMgc2l6ZV90IGZp
bGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxDYWNo
ZVJlc3BvbnNlQXN5bmMoQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZikgb3ZlcnJpZGU7CiAjZW5kaWYK
KwogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Jl
c291cmNlTG9hZGVyTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVy
Jik7CiAKQEAgLTEyNiw2ICsxMDYsMTYgQEAgcHVibGljOgogCiAgICAgc3RydWN0IFN5bmNocm9u
b3VzTG9hZERhdGE7CiAKKyAgICAvLyBOZXR3b3JrTG9hZENsaWVudC4KKyAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNh
bkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhjb25zdCBXZWJDb3JlOjpQ
cm90ZWN0aW9uU3BhY2UmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTeW5jaHJvbm91
cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3aWxsU2VuZFJlZGlyZWN0ZWRS
ZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBpbnQgcmVw
b3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsTG9hZGluZyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7
CisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBQYXNz
UmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5
bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5Pik7CiAKQEAgLTEzMyw2MyArMTIzLDEyIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGFyYW1ldGVycy5pZGVudGlmaWVyOyB9CiAK
LSAgICBlbnVtIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIHsKLSAgICAgICAgWWVz
LAotICAgICAgICBObwotICAgIH07Ci0gICAgU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKTsKLSAgICAgICAgdm9pZCBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmKTsKLSAgICB2b2lkIHNoYXJlZERpZFJlY2VpdmVCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4mJiwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpOwotICAgIHZvaWQg
c2hhcmVkRGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Ci0gICAgdm9pZCBz
aGFyZWREaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKTsKLQotI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCi0gICAgLy8gTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50LgotICAgIHZpcnR1
YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlv
bjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9z
aXRpb24pPikgZmluYWwgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRh
KFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpIGZpbmFsIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJikgZmluYWwgb3ZlcnJpZGU7Ci0jZWxzZQotICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFNlbmREYXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZSosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwgaW50IGVuY29k
ZWREYXRhTGVuZ3RoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
ZyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgd2Fz
QmxvY2tlZChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBjYW5ub3RTaG93VVJMKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwg
Y29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgYm9vbCB1c2VzQXN5bmNDYWxsYmFja3MoKSBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBib29sIGxvYWRpbmdTeW5jaHJvbm91c1hIUigpIG92ZXJyaWRlIHsg
cmV0dXJuIGlzU3luY2hyb25vdXMoKTsgfQotCi0jaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVU
SF9DQUxMQkFDSykKLSAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3Rl
Y3Rpb25TcGFjZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6
UHJvdGVjdGlvblNwYWNlJikgb3ZlcnJpZGU7Ci0jZW5kaWYKLSNpZiBVU0UoTkVUV09SS19DRkRB
VEFfQVJSQVlfQ0FMTEJBQ0spCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGF0YUFycmF5KCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhQXJyYXkoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGUqLCBDRkFycmF5UmVmKSBvdmVycmlkZTsKLSNlbmRpZgotI2lmIFBMQVRG
T1JNKENPQ09BKQotI2lmIFVTRShDRk5FVFdPUkspCi0gICAgdmlydHVhbCB2b2lkIHdpbGxDYWNo
ZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBDRkNhY2hlZFVSTFJlc3Bv
bnNlUmVmKSBvdmVycmlkZTsKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHdpbGxDYWNoZVJlc3Bv
bnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBOU0NhY2hlZFVSTFJlc3BvbnNlICop
IG92ZXJyaWRlOwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9O
KQotCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCiAgICAgdm9pZCBkaWRSZXRyaWV2ZUNhY2hl
RW50cnkoc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+KTsKICAgICB2b2lkIHZh
bGlkYXRlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4pOwog
I2VuZGlmCiAKLSAgICB2b2lkIHN0YXJ0TmV0d29ya0xvYWQoKTsKKyAgICB2b2lkIHN0YXJ0TmV0
d29ya0xvYWQoY29uc3QgT3B0aW9uYWw8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0PiYgdXBkYXRl
ZFJlcXVlc3QgPSB7IH0pOwogICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsK
IAogICAgIHZvaWQgY2xlYW51cCgpOwpAQCAtMjAwLDggKzEzOSw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBidWZmZXJpbmdUaW1lckZpcmVkKCk7CiAgICAgYm9vbCBzZW5kQnVmZmVyTWF5YmVBYm9y
dGluZyhjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImLCBzaXplX3QgZW5jb2RlZERhdGFMZW5n
dGgpOwogCi0gICAgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3Q7Ci0KICAgICB2b2lkIGNvbnN1
bWVTYW5kYm94RXh0ZW5zaW9ucygpOwogICAgIHZvaWQgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNp
b25zKCk7CiAKQEAgLTIxMSwxNCArMTQ4LDggQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uOwogCi0gICAgUmVmUHRyPFJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OwotI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCi0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gbV90YXNrOwotI2Vsc2UK
LSAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOwotI2VuZGlmCisg
ICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtMb2FkPiBtX25ldHdvcmtMb2FkOwogCi0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogCiAgICAgc2l6ZV90IG1fYnl0ZXNSZWNlaXZlZDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9h
ZE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1h
Yy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mOThlNDkwYjcwZWYxMWUwMWYwYjZmN2QyZGYyNDdmZWM0ZmJiMTY2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05l
dHdvcmtMb2FkTWFjLm1tCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisjaW1wb3J0ICJOZXR3b3Jr
TG9hZC5oIgorCisjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9SZXNvdXJjZUhhbmRsZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKKyNpZiBVU0UoQ0ZORVRXT1JLKQorCit2b2lkIE5ldHdvcmtMb2Fk
Ojp3aWxsQ2FjaGVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWYgY2ZSZXNwb25zZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwg
aGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIG1fY2xpZW50LndpbGxDYWNoZVJlc3BvbnNlQXN5
bmMoY2ZSZXNwb25zZSk7CisKKyAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsQ2FjaGVSZXNwb25z
ZShjZlJlc3BvbnNlKTsKK30KKworI2VsaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisKK3ZvaWQg
TmV0d29ya0xvYWQ6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgTlNDYWNoZWRVUkxSZXNwb25zZSAqbnNSZXNwb25zZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIG1fY2xpZW50LndpbGxDYWNoZVJl
c3BvbnNlQXN5bmMoW25zUmVzcG9uc2UgX0NGQ2FjaGVkVVJMUmVzcG9uc2VdKTsKKworICAgIG1f
aGFuZGxlLT5jb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKG5zUmVzcG9uc2UpOworfQorCisjZW5k
aWYgLy8gIVVTRShDRk5FVFdPUkspCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tCmluZGV4
IGY4MjIyN2E4NmU3ZjNjYjU4NDhiNWVjZWQ5MDI5YjVlMzE4ZThjMTMuLjhhMjg2ZTYxZmM4NGQy
MTM2NDQ2OTUzNzk3MmQwMjkzZTNhYzJjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQpA
QCAtMzMsNiArMzMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyLmg+CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIApAQCAtODIsMzIgKzgzLDEyIEBAIHNpemVfdCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCkKICAgICByZXR1cm4gU2hhcmVkTWVtb3J5
OjpzeXN0ZW1QYWdlU2l6ZSgpOwogfQogCi0jaWYgVVNFKENGTkVUV09SSykKLQotdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQordm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlQXN5bmMoQ0ZDYWNoZWRVUkxSZXNwb25z
ZVJlZiBjZlJlc3BvbnNlKQogewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0g
bV9oYW5kbGUpOwotCiAgICAgaWYgKG1fYnl0ZXNSZWNlaXZlZCA+PSBmaWxlQmFja2VkUmVzb3Vy
Y2VNaW5pbXVtU2l6ZSgpKQogICAgICAgICBOZXR3b3JrRGlza0NhY2hlTW9uaXRvcjo6bW9uaXRv
ckZpbGVCYWNraW5nU3RvcmVDcmVhdGlvbihjZlJlc3BvbnNlLCB0aGlzKTsKLQotICAgIG1faGFu
ZGxlLT5jb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKGNmUmVzcG9uc2UpOwogfQogCi0jZWxpZiAh
VVNFKE5FVFdPUktfU0VTU0lPTikKLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxD
YWNoZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNDYWNoZWRVUkxSZXNw
b25zZSAqbnNSZXNwb25zZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09
IG1faGFuZGxlKTsKLQotICAgIGlmIChtX2J5dGVzUmVjZWl2ZWQgPj0gZmlsZUJhY2tlZFJlc291
cmNlTWluaW11bVNpemUoKSkKLSAgICAgICAgTmV0d29ya0Rpc2tDYWNoZU1vbml0b3I6Om1vbml0
b3JGaWxlQmFja2luZ1N0b3JlQ3JlYXRpb24oW25zUmVzcG9uc2UgX0NGQ2FjaGVkVVJMUmVzcG9u
c2VdLCB0aGlzKTsKLQotICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKG5z
UmVzcG9uc2UpOwotfQotCi0jZW5kaWYgLy8gIVVTRShDRk5FVFdPUkspCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzMzU4
NGEwZjM4NDc1N2IzOWQ5N2U5MmRhZWU5ODliYzY0MWQ3Y2JiLi4zNWQ5NzRmMWU2Njk1ZDcxNjQy
M2Y5MTA5YWNlOGZkZDI3Yjk2YTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTgwLDYgKzExODAsNyBAQAogCQk4MzRCMjUx
MjFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hlU3RhdGlzdGljcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM0QjI1MTAxQTg0MkM4NzAwQ0ZC
MTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCAqLzsgfTsKIAkJODM2MDM0OUYxQUNCMzRE
NjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1NDkg
LyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCAqLzsgfTsKIAkJODM2MDM0QTAxQUNCMzRE
NjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM2MDM0OUUxQUNCMzRENjAwNjI2NTQ5IC8q
IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oICovOyB9OworCQk4MzZFRUI4MDFCRTlFQzlFMDA2
QjRCODIgLyogTmV0d29ya0xvYWRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4MzZFRUI3RjFCRTlFQzlFMDA2QjRCODIgLyogTmV0d29ya0xvYWRN
YWMubW0gKi87IH07CiAJCTgzNzJEQjI1MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJODM3MkRCMjgxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmNwcCAqLzsgfTsKIAkJODM3MkRCMjkxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5oICovOyB9OwpAQCAtMTE4OCw3ICsxMTg5LDEyIEBACiAJCTgzODkxQjY5
MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Mzg5MUI2ODFBNjhCRUJD
MDAzMEYzODYgLyogX1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTgzODkxQjZDMUE2OEMzMEIwMDMw
RjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM4OTFCNkExQTY4QzMwQjAwMzBGMzg2IC8qIERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CiAJCTgzODkxQjZEMUE2OEMzMEIwMDMwRjM4NiAv
KiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzODkxQjZCMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5tbSAqLzsgfTsKKwkJODM5MTQ5NjQxQkVBODM4NTAwRDJEOTUzIC8qIE5l
dHdvcmtMb2FkUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4MzkxNDk2MjFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJh
bWV0ZXJzLmNwcCAqLzsgfTsKKwkJODM5MTQ5NjUxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtM
b2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODM5MTQ5NjMxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5o
ICovOyB9OworCQk4Mzk5MDIwMjFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM5OTAxRkYxQkU5
QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCAqLzsgfTsKKwkJODM5OTAyMDMxQkU5QTAy
QjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQu
aCAqLzsgfTsKIAkJODNCRENDQjkxQUM1RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODNCRENDQjgxQUM1RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwICov
OyB9OworCQk4M0Q0NTRENzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzRDQ1NEQ2MUJF
OUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oICovOyB9OwogCQk4NDQ3Nzg1MzE3
NkZDQzA4MDBDREM3QkIgLyogSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDQ3Nzg1MTE3
NkZDQUMxMDBDREM3QkIgLyogSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlLmgg
Ki87IH07CiAJCTg2ODE2MEQwMTg3NjQ1NTcwMDIxRTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4
MTYwQ0YxODc2NDUzNzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gKi87IH07
CiAJCTg2RTY3QTI1MTkxMEI5RDEwMDAwNEFCNyAvKiBQcm9jZXNzVGhyb3R0bGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkU2N0EyMTE5MEY0MTE4
MDAwMDRBQjcgLyogUHJvY2Vzc1Rocm90dGxlci5oICovOyB9OwpAQCAtMzQwOCw2ICszNDE0LDcg
QEAKIAkJODM0QjI1MTAxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdGlzdGlj
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzYwMzQ5RDFBQ0IzNEQ2MDA2MjY1
NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgzNjAzNDlFMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVE
YXRhYmFzZVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU1FM
aXRlRGF0YWJhc2VUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzNkVF
QjdGMUJFOUVDOUUwMDZCNEI4MiAvKiBOZXR3b3JrTG9hZE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtMb2FkTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4MzcyREIyNDFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQxNiw3ICszNDIz
LDEyIEBACiAJCTgzODkxQjY4MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tEaWFnbm9zdGljTG9nZ2lu
Z0RlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0RpYWdub3N0
aWNMb2dnaW5nRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFC
NkExQTY4QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjZCMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4MzkxNDk2MjFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtMb2FkUGFy
YW1ldGVycy5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzkxNDk2MzFCRUE4Mzg1MDBEMkQ5
NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0xvYWRQYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzOTkw
MUZFMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBOZXR3b3JrTG9hZC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM5OTAxRkYxQkU5QTAxQjAw
MEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IE5ldHdvcmtMb2FkLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODNCRENDQjgxQUM1RkRCNjAwM0Y2
NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTgzRDQ1NEQ2MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrTG9hZENsaWVu
dC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQ0Nzc4NTExNzZGQ0FDMTAwQ0RDN0JCIC8qIEluamVjdGVk
QnVuZGxlSGl0VGVzdFJlc3VsdE1lZGlhVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4MTYwQ0QxODc2M0Q0QjAwMjFFNzlEIC8qIFdpbmRvd1Nl
cnZlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2luZG93U2VydmVyQ29ubmVjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjgxNjBDRjE4NzY0NTM3MDAyMUU3OUQg
LyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdpbmRv
d1NlcnZlckNvbm5lY3Rpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTk5
LDYgKzU2MTEsMTEgQEAKIAkJCQk1MTNBMTY0OTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTUxM0ExNjRBMTYzMEE5QkYwMDVEN0Qy
MiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLAogCQkJCTUxM0ExNjRCMTYz
MEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
biAqLywKKwkJCQk4Mzk5MDFGRjFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwICov
LAorCQkJCTgzOTkwMUZFMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oICovLAorCQkJ
CTgzRDQ1NEQ2MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oICovLAorCQkJ
CTgzOTE0OTYyMUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwICov
LAorCQkJCTgzOTE0OTYzMUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMu
aCAqLywKIAkJCQk1MTBDQzdERjE2MTM4RTI5MDBEMDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuY3Bw
ICovLAogCQkJCTUxMENDN0UwMTYxMzhFMjkwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzcy5oICov
LAogCQkJCTUxQThBNjE3MTYyN0Y1QkIwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vzcy5tZXNzYWdl
cy5pbiAqLywKQEAgLTU2MTksNiArNTYzNiw3IEBACiAJCQkJRTE3QUUyQzExNkI5QzEzOTAwMUM0
MkYxIC8qIGNvbS5hcHBsZS5XZWJLaXQuTmV0d29ya1Byb2Nlc3Muc2IuaW4gKi8sCiAJCQkJNTE2
N0VFOUUxNzAzNzdCRjAwNzY4MUNBIC8qIE5ldHdvcmtEaXNrQ2FjaGVNb25pdG9yLmggKi8sCiAJ
CQkJNTE2N0VFOUYxNzAzNzdCRjAwNzY4MUNBIC8qIE5ldHdvcmtEaXNrQ2FjaGVNb25pdG9yLm1t
ICovLAorCQkJCTgzNkVFQjdGMUJFOUVDOUUwMDZCNEI4MiAvKiBOZXR3b3JrTG9hZE1hYy5tbSAq
LywKIAkJCQk1MUE4QTYxNTE2MjdGM0Y5MDAwRDkwRTkgLyogTmV0d29ya1Byb2Nlc3NNYWMubW0g
Ki8sCiAJCQkJNTFFM0I2N0UxNkYyNjZCMzAwOTk2OERDIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRl
ck1hYy5tbSAqLywKIAkJCQlFMUI3ODQ3MjE2M0YyNTNFMDAwN0I2OTIgLyogUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQubW0gKi8sCkBAIC03NjQzLDYgKzc2NjEsNyBAQAogCQkJCTM3NjMxMUZEMUEz
RkI1RjcwMDVBMkU1MSAvKiBfV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzc2MzExRkUxQTNGQjYwMDAwNUEyRTUxIC8qIF9XS1NhbWVEb2N1bWVudE5h
dmlnYXRpb25UeXBlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDAyRDQ0MTk2QjMz
ODkwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzOTkw
MjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEwMDJENDMxOTZCMzM3MDAwQjlBRDQ0IC8qIF9XS1Nlc3Npb25TdGF0ZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDZCMzcxQjE4QTk2N0FEMDA0MkFFODAgLyogX1dLVGh1bWJuYWls
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBQ0U2NEUxOEFEQkZGMDAwRTRDQTc2IC8qIF9X
S1RodW1ibmFpbFZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTEwLDYgKzc5Mjks
NyBAQAogCQkJCTFBOEVGNENCMTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGOTZGMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVn
aW5Db250cm9sbGVyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExNzk3ODAx
MzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODNENDU0RDcxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzNGOEM5MTE3M0FGNTJEMDA3QjdGMzkgLyogUGx1Z2luSW5m
b3JtYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRUZDQzEyMTFEMDFGOTYwMDgyMTlEMyAv
KiBQbHVnaW5JbmZvU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0Q2MTAyMTNBN0NDMkEw
MEY5NUQ0RSAvKiBQbHVnaW5Nb2R1bGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTc5NjIsNiAr
Nzk4Miw3IEBACiAJCQkJMUFBQjRBOEQxMjk2RjBBMjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRTU1MkM1MTZBRTA2NUYwMDRFRDY1MyAvKiBTYW5k
Ym94SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMUMx
QzE4QzU3MTE5MDBEQkE3QzMgLyogU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlP
Uy5oIGluIEhlYWRlcnMgKi8sCisJCQkJODM5MTQ5NjUxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdv
cmtMb2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFEMTMwNTQxMzgyRUFDMDAw
MzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFEMTMw
NTYxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXNwb25zZURhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxNzkwODhGMTY5QkFBNkEwMDY5MDRDNyAvKiBTZWNJdGVtU2hpbS5oIGluIEhlYWRl
cnMgKi8sCkBAIC05NTI5LDYgKzk1NTAsNyBAQAogCQkJCUJDMDMyREE1MTBGNDM3RDEwMDU4QzE1
QSAvKiBBcmd1bWVudERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMzJEQTcxMEY0
MzdEMTAwNThDMTVBIC8qIEFyZ3VtZW50RW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
NTlDNEE1ODE4QjgxMTc0MDA3QkRDQjYgLyogQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJODM5OTAyMDIxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2Fk
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUU3NzI3MTgzREQ2RjYwMDA3MjAzRiAvKiBBc3lu
Y1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFRTk2NkMxMTJGQUY1NzAwNkJDQzI0
IC8qIEF0dGFjaG1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBMzE3MzUxMzRDRUE4MDAw
N0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gaW4gU291cmNlcyAqLywKQEAgLTk1NDcsNiAr
OTU2OSw3IEBACiAJCQkJOUY1NEY4OEYxNjQ4OEU4NzAwN0RGODFBIC8qIENoaWxkUHJvY2Vzc01h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRkFFQzNCMUIwNjU3NjgwMDA5QzRFNyAvKiBDaGls
ZFByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1MTNDNjYx
NjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTgzOTE0OTY0MUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyQTRCMEUxNTg2QTIyNDAwOTBDOUU5IC8qIENvbG9yU3Bh
Y2VEYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RjlGQjcxMUUxNDA4NTAwREIxMzcxIC8q
IENvbW1hbmRMaW5lUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdCRUM0RTAxOTQ5MTQ4
NjAwOEI0Mjg2IC8qIENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXIubW0gaW4gU291cmNlcyAq
LywKQEAgLTk4NDEsNiArOTg2NCw3IEBACiAJCQkJNEEzQ0MxOEMxOUIwNjQxNTAwRDE0QUVGIC8q
IFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTRFODY0OTIxQjE2NzUwMTAwQzgyRjQwIC8qIFZlcnNpb25DaGVja3MubW0gaW4gU291cmNlcyAq
LywKIAkJCQkyREFGNEZGQjFCNjM2MTgxMDA2MDEzRDYgLyogVmlld0dlc3R1cmVDb250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTgzNkVFQjgwMUJFOUVDOUUwMDZCNEI4MiAvKiBOZXR3
b3JrTG9hZE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJERjk1OTNCMThBNDI0MTIwMDk3ODVB
MSAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRDEy
NUM1RjE4NTdFQTA1MDAzQkEzQ0IgLyogVmlld0dlc3R1cmVDb250cm9sbGVyTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkQxQjVENUQxODU4NjlDODAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29u
dHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264808</attachid>
            <date>2015-11-04 13:50:41 -0800</date>
            <delta_ts>2015-11-04 16:41:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150898-20151104134943.patch</filename>
            <type>text/plain</type>
            <size>76717</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxOTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDlkNjllMThjMmU3MTE4
YWExZGVkNGUxZmNiYmNkNTE0MmI5NmE0OC4uZWRjNjBmY2JlZGZjOTlkZDRlOWU3NTU2OTgxNjZl
NGIyZTZiNzBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE1LTExLTA0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgW1dLMl0gRXh0cmFjdCBuZXR3
b3JraW5nIGNvZGUgb3V0IG9mIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBjbGFzcyB0byBpbXByb3Zl
IHJldXNhYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA4OTgKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisg
ICAgICAgIEV4dHJhY3QgbmV0d29ya2luZyBjb2RlIG91dCBvZiBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIgY2xhc3MgdG8gaW1wcm92ZQorICAgICAgICByZXVzYWJpbGl0eSAod2lsbCBiZSB1c2VkIGZv
ciBzcGVjdWxhdGl2ZSByZXZhbGlkYXRpb24pIGFuZCBzaW1wbGlmeQorICAgICAgICB0aGUgTmV0
d29ya1Jlc291cmNlTG9hZGVyLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5S
ZXNvdXJjZUxvYWRUb0Rvd25sb2FkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
TG9hZC5jcHA6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmg6
IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkQ2xpZW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHA6
IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5o
OiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrTG9hZE1hYy5tbTogQWRkZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25z
ZUFzeW5jKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
IDIwMTUtMTEtMDMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBDcmVhdGUgYSBOZXR3b3JrU2Vzc2lvbiBmb3IgZWFjaCBTZXNzaW9uSUQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIv
Q01ha2VMaXN0cy50eHQKaW5kZXggZGVkNDYxNzBlYzJjYzBmYTM5MTkyYTI0NjhkYmY0NjMzNGFj
NjFmYi4uNmNkOTY3NjdmMTlmZWFjN2YwYjg0MGUxN2ZiNGQwODBjMzNhZGI0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01h
a2VMaXN0cy50eHQKQEAgLTE2Miw2ICsxNjIsOCBAQCBlbmRpZiAoKQogCiBzZXQoTmV0d29ya1By
b2Nlc3NfQ09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKyAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwCiAgICAgTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDBhMjNiN2Yw
NGFkMWJiM2YxZjVjYzBlMjUwOGVhYTk0MTc0YTliNDcuLjJiMjE1MmUyMTMyMGQ1YzI2YjA0NTcw
YTRjMjAwNTc5MzEwZWEzYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIk5ldHdvcmtCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRl
ICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0
d29ya0xvYWQuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmgiCkBAIC0yMDIsMTAgKzIwMywxMCBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQodWludDY0X3QgbQogICAg
IC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogI2Vs
c2UKLSAgICBuZXR3b3JrUHJvY2Vzcy5kb3dubG9hZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9E
b3dubG9hZChkb3dubG9hZElELCBsb2FkZXItPmhhbmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7
CisgICAgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93
bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5uZXR3b3JrTG9hZCgpLT5oYW5kbGUoKSwgcmVxdWVz
dCwgcmVzcG9uc2UpOwogCiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0
aW9uIHF1ZXVlLgotICAgIGxvYWRlci0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3Bv
bnNlKCk7CisgICAgbG9hZGVyLT5uZXR3b3JrTG9hZCgpLT5oYW5kbGUoKS0+Y29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UoKTsKICAgICAKICAgICBsb2FkZXItPmRpZENvbnZlcnRIYW5kbGVUb0Rv
d25sb2FkKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTNlYTkwMmYxYWVhNmQxMTAyZjY4ZWZmNWU0MTY3NmFk
NzI3ZWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWQuY3BwCkBAIC0wLDAgKzEsMzU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyNpbmNsdWRlICJOZXR3
b3JrTG9hZC5oIgorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgorI2luY2x1
ZGUgIldlYkVycm9ycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisKKyNpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
SGFuZGxlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitOZXR3b3JrTG9hZDo6TmV0d29ya0xvYWQoTmV0d29ya0xvYWRDbGllbnQm
IGNsaWVudCwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorICAgIDog
bV9jbGllbnQoY2xpZW50KQorICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpCisgICAgLCBt
X25ldHdvcmtpbmdDb250ZXh0KFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUocGFyYW1l
dGVycy5zZXNzaW9uSUQsIHBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCkpCisgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KHBhcmFtZXRlcnMucmVxdWVzdCkK
K3sKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIG1fdGFzayA9IFNlc3Npb25UcmFja2Vy
OjpuZXR3b3JrU2Vzc2lvbihwYXJhbWV0ZXJzLnNlc3Npb25JRCktPmNyZWF0ZURhdGFUYXNrV2l0
aFJlcXVlc3QocGFyYW1ldGVycy5yZXF1ZXN0LCAqdGhpcyk7CisgICAgbV90YXNrLT5yZXN1bWUo
KTsKKyNlbHNlCisgICAgbV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fbmV0d29y
a2luZ0NvbnRleHQuZ2V0KCksIHBhcmFtZXRlcnMucmVxdWVzdCwgdGhpcywgcGFyYW1ldGVycy5k
ZWZlcnNMb2FkaW5nLCBwYXJhbWV0ZXJzLmNvbnRlbnRTbmlmZmluZ1BvbGljeSA9PSBTbmlmZkNv
bnRlbnQpOworI2VuZGlmCit9CisKK05ldHdvcmtMb2FkOjp+TmV0d29ya0xvYWQoKQoreworICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAg
ICBtX3Rhc2stPmNsZWFyQ2xpZW50KCk7CisjZWxzZQorICAgIGlmIChtX2hhbmRsZSkKKyAgICAg
ICAgbV9oYW5kbGUtPmNsZWFyQ2xpZW50KCk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrTG9h
ZDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworI2Vsc2UKKyAgICBpZiAobV9oYW5kbGUpCisgICAgICAgIG1faGFuZGxlLT5zZXREZWZl
cnNMb2FkaW5nKGRlZmVycyk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6Y2FuY2Vs
KCkKK3sKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIG1fdGFzay0+Y2FuY2VsKCk7Cisj
ZWxzZQorICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworI2Vu
ZGlmCit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkKK3sKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdP
bGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkp
KTsKKyNlbGlmIFVTRShTT1VQKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgUmVzb3VyY2VSZXF1
ZXN0Ojp1cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGllcy4gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjYxMjcuCisgICAgbV9jdXJyZW50
UmVxdWVzdC51cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJvcGVydGllcyhuZXdSZXF1
ZXN0KTsKKyNlbmRpZgorCisgICAgaWYgKG1fY3VycmVudFJlcXVlc3QuaXNOdWxsKCkpIHsKKyNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhl
cmUuCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisjZWxzZQorICAgICAgICBtX2hhbmRsZS0+
Y2FuY2VsKCk7CisgICAgICAgIGRpZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9y
KG1fY3VycmVudFJlcXVlc3QpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisj
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUu
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyNlbHNlCisgICAgbV9oYW5kbGUtPmNvbnRpbnVlV2ls
bFNlbmRSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QpOworI2VuZGlmCit9CisKK3ZvaWQgTmV0d29y
a0xvYWQ6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKK3sKKyNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1l
bnRlZCgpOworI2Vsc2UKKyAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Uo
KTsKKyNlbmRpZgorfQorCitOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UgTmV0d29ya0xvYWQ6OnNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQoreworICAgIFJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2UgPSByZWNlaXZlZFJlc3BvbnNlOworICAgIHJlc3BvbnNlLnNldFNvdXJjZShS
ZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcmspOworICAgIGlmIChtX3BhcmFtZXRlcnMu
bmVlZHNDZXJ0aWZpY2F0ZUluZm8pCisgICAgICAgIHJlc3BvbnNlLmluY2x1ZGVDZXJ0aWZpY2F0
ZUluZm8oKTsKKworICAgIHJldHVybiBtX2NsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9u
c2UpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICAvLyBXZSBvbmx5IGV4cGVjdCB0byBnZXQgdGhl
IHdpbGxTZW5kUmVxdWVzdCBjYWxsYmFjayBmcm9tIFJlc291cmNlSGFuZGxlIGFzIHRoZSByZXN1
bHQgb2YgYSByZWRpcmVjdC4KKyAgICBBU1NFUlQoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkp
OworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX2N1cnJlbnRSZXF1ZXN0
ID0gcmVxdWVzdDsKKyAgICBtX2NsaWVudC53aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVl
c3QsIHJlZGlyZWN0UmVzcG9uc2UpOworfQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKwor
dm9pZCBOZXR3b3JrTG9hZDo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgc3Rk
OjpmdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpPiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlc3Bv
bnNlKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0KTsKK30KKwordm9pZCBOZXR3b3Jr
TG9hZDo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbiwgY29uc3QgQ3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIENyZWRlbnRpYWwoKSk7
Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRp
b24pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgY29tcGxldGlvbkhh
bmRsZXIoUmVzcG9uc2VEaXNwb3NpdGlvbjo6QWxsb3cpOworfQorCit2b2lkIE5ldHdvcmtMb2Fk
OjpkaWRSZWNlaXZlRGF0YShSZWZQdHI8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAgICBB
U1NFUlQoYnVmZmVyKTsKKyAgICBhdXRvIHNpemUgPSBidWZmZXItPnNpemUoKTsKKyAgICBtX2Ns
aWVudC5kaWRSZWNlaXZlQnVmZmVyKFdURjo6bW92ZShidWZmZXIpLCBzaXplKTsKK30KKwordm9p
ZCBOZXR3b3JrTG9hZDo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCit7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAgICBtX2NsaWVudC5kaWRG
aW5pc2hMb2FkaW5nKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgIGVs
c2UKKyAgICAgICAgbV9jbGllbnQuZGlkRmFpbExvYWRpbmcoZXJyb3IpOworfQorCisjZWxzZQor
Cit2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIGlmIChz
aGFyZWREaWRSZWNlaXZlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSkgPT0gTmV0d29ya0xvYWRD
bGllbnQ6OlNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXMpCisgICAgICAgIG1f
aGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworfQorCit2b2lkIE5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEg
Ki8sIHVuc2lnbmVkIC8qIGxlbmd0aCAqLywgaW50IC8qIGVuY29kZWREYXRhTGVuZ3RoICovKQor
eworICAgIC8vIFRoZSBOZXR3b3JrUHJvY2VzcyBzaG91bGQgbmV2ZXIgZ2V0IGEgZGlkUmVjZWl2
ZURhdGEgY2FsbGJhY2suCisgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSB1c2luZyBkaWRSZWNl
aXZlQnVmZmVyLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIE5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlQnVmZmVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBidWZmZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIG1fY2xp
ZW50LmRpZFJlY2VpdmVCdWZmZXIoV1RGOjptb3ZlKGJ1ZmZlciksIHJlcG9ydGVkRW5jb2RlZERh
dGFMZW5ndGgpOworfQorCit2b2lkIE5ldHdvcmtMb2FkOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5pc2hUaW1lKQoreworICAgIEFTU0VSVF9VTlVT
RUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIG1fY2xpZW50LmRpZEZpbmlzaExv
YWRpbmcoZmluaXNoVGltZSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZEZhaWwoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgQVNT
RVJUX1VOVVNFRChoYW5kbGUsICFoYW5kbGUgfHwgaGFuZGxlID09IG1faGFuZGxlKTsKKyAgICBB
U1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKKworICAgIG1fY2xpZW50LmRpZEZhaWxMb2FkaW5nKGVy
cm9yKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQo
aGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3Rl
ZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Cit9CisKKyNlbmRpZiAvLyBVU0Uo
TkVUV09SS19TRVNTSU9OKQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFD
SykgJiYgIVVTRShORVRXT1JLX1NFU1NJT04pCit2b2lkIE5ldHdvcmtMb2FkOjpjYW5BdXRoZW50
aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Y29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1f
aGFuZGxlKTsKKworICAgIC8vIEhhbmRsZSBzZXJ2ZXIgdHJ1c3QgZXZhbHVhdGlvbiBhdCBwbGF0
Zm9ybS1sZXZlbCBpZiByZXF1ZXN0ZWQsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICAgIGlm
IChwcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9PSBQcm90ZWN0aW9uU3Bh
Y2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZAorICAg
ICAgICAmJiAhTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhbkhhbmRsZUhUVFBTU2VydmVy
VHJ1c3RFdmFsdWF0aW9uKCkpIHsKKyAgICAgICAgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX2NsaWVudC5pc1N5bmNocm9ub3VzKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBhc2sgdGhlIFdlYlByb2Nlc3MgbGlrZSB0aGUgYXN5bmNocm9ub3VzIGNhc2UgYmVsb3cg
ZG9lcy4KKyAgICAgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgaW1wb3NzaWJsZSBhcyB0aGUgV2Vi
UHJvY2VzcyBpcyBibG9ja2VkIHdhaXRpbmcgb24gdGhpcyBzeW5jaHJvbm91cyBsb2FkLgorICAg
ICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgY2FuIGp1bXAgc3RyYWlnaHQgdG8gdGhlIFVJ
IHByb2Nlc3MgdG8gcmVzb2x2ZSB0aGlzLgorICAgICAgICBjb250aW51ZUNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2NsaWVudC5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMo
cHJvdGVjdGlvblNwYWNlKTsKK30KKyNlbmRpZgorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0Vf
QVVUSF9DQUxMQkFDSykKK3ZvaWQgTmV0d29ya0xvYWQ6OmNvbnRpbnVlQ2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZShib29sIHJlc3VsdCkKK3sKKyNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQorICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KKyAgICBub3RJbXBsZW1l
bnRlZCgpOworI2Vsc2UKKyAgICBtX2hhbmRsZS0+Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlKHJlc3VsdCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgVVNF
KE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKSAmJiAhVVNFKE5FVFdPUktfU0VTU0lPTikK
K2Jvb2wgTmV0d29ya0xvYWQ6OnN1cHBvcnRzRGF0YUFycmF5KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVj
ZWl2ZURhdGFBcnJheShSZXNvdXJjZUhhbmRsZSosIENGQXJyYXlSZWYpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCisjaWYg
IVVTRShORVRXT1JLX1NFU1NJT04pCisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFNlbmREYXRhKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2ln
bmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAgQVNTRVJUX1VOVVNFRCho
YW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CisKKyAgICBtX2NsaWVudC5kaWRTZW5kRGF0YShi
eXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6Ondh
c0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhh
bmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6
OmJsb2NrZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6
OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBBU1NFUlRfVU5V
U0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIGRpZEZhaWwoaGFuZGxlLCBX
ZWJLaXQ6OmNhbm5vdFNob3dVUkxFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Cit9CisKK2Jvb2wg
TmV0d29ya0xvYWQ6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSB8
fCAhbV9oYW5kbGUpOyAvLyBtX2hhbmRsZSB3aWxsIGJlIDAgaWYgY2FsbGVkIGZyb20gUmVzb3Vy
Y2VIYW5kbGU6OnN0YXJ0KCkuCisKKyAgICAvLyBXaGVuIHRoZSBXZWJQcm9jZXNzIGlzIGhhbmRs
aW5nIGxvYWRpbmcgYSBjbGllbnQgaXMgY29uc3VsdGVkIGVhY2ggdGltZSB0aGlzIHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlIHF1ZXN0aW9uIGlzIGFza2VkLgorICAgIC8vIEluIE5ldHdvcmtQ
cm9jZXNzIG1vZGUgd2UgYXNrIHRoZSBXZWJQcm9jZXNzIGNsaWVudCB1cCBmcm9udCBvbmNlIGFu
ZCB0aGVuIHJldXNlIHRoZSBjYWNoZWQgYW5zd2VyLgorCisgICAgLy8gV2Ugc3RpbGwgbmVlZCB0
aGlzIHN5bmMgdmVyc2lvbiwgYmVjYXVzZSBSZXNvdXJjZUhhbmRsZSBpdHNlbGYgdXNlcyBpdCBp
bnRlcm5hbGx5LCBldmVuIHdoZW4gdGhlIGRlbGVnYXRlIHVzZXMgYW4gYXN5bmMgb25lLgorCisg
ICAgcmV0dXJuIG1fcGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHM7Cit9CisKK3ZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBo
YW5kbGUgPT0gbV9oYW5kbGUpOworICAgIC8vIE5ldHdvcmtSZXNvdXJjZUxvYWRlciBkb2VzIG5v
dCBrbm93IHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgY3Jvc3Mgb3JpZ2luLCBzbyBXZWIgcHJvY2Vz
cyBjb21wdXRlcyBhbiBhcHBsaWNhYmxlIGNyZWRlbnRpYWwgcG9saWN5IGZvciBpdC4KKyAgICBB
U1NFUlQobV9wYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgIT0gRG9Ob3RBc2tDbGll
bnRGb3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzKTsKKworICAgIGlmIChtX3BhcmFtZXRlcnMuY2xp
ZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFueUNyZWRlbnRpYWxzKSB7
CisgICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVudCgpLT5yZWNlaXZlZFJlcXVl
c3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5hdXRoZW50aWNhdGlv
bk1hbmFnZXIoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJhbWV0ZXJz
LndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJzLndlYkZyYW1lSUQsIGNoYWxsZW5nZSk7Cit9CisKK3Zv
aWQgTmV0d29ya0xvYWQ6OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgcHJvYmFibHkgbm90IG5lZWRlZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS84OTYw
MTI0PikuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBOZXR3b3JrTG9hZDo6cmVj
ZWl2ZWRDYW5jZWxsYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0g
bV9oYW5kbGUpOworCisgICAgbV9oYW5kbGUtPmNhbmNlbCgpOworICAgIGRpZEZhaWwobV9oYW5k
bGUuZ2V0KCksIGNhbmNlbGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKK30KKworI2VuZGlm
IC8vICFVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNlbmRp
ZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
TG9hZC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zNzQ3YzMzMmNjYWIwOTAwMzEzMjdkZWQ5NDZkOGY3MzNkMDVkOTg0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApA
QCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0d29ya0xvYWRfaAorI2Rl
ZmluZSBOZXR3b3JrTG9hZF9oCisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisjaW5j
bHVkZSAiTmV0d29ya0xvYWRDbGllbnQuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgorCisjaWYgVVNFKE5F
VFdPUktfU0VTU0lPTikKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2Vsc2UKKyNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtMb2FkCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
KyAgICA6IHB1YmxpYyBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQKKyNlbHNlCisgICAgOiBwdWJs
aWMgV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQKKyNlbmRpZgoreworcHVibGljOgorICAg
IE5ldHdvcmtMb2FkKE5ldHdvcmtMb2FkQ2xpZW50JiwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0
ZXJzJik7CisgICAgfk5ldHdvcmtMb2FkKCk7CisKKyAgICB2b2lkIHNldERlZmVyc0xvYWRpbmco
Ym9vbCk7CisgICAgdm9pZCBjYW5jZWwoKTsKKworICAgIHZvaWQgY2xlYXJDdXJyZW50UmVxdWVz
dCgpIHsgbV9jdXJyZW50UmVxdWVzdCA9IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpOyB9CisK
KyAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYpOworICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKworI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgLy8gTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50Lgor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3Rk
OjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPikgZmluYWwg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYp
PikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3Bv
bnNlRGlzcG9zaXRpb24pPikgZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpIGZpbmFsIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJikgZmluYWwgb3ZlcnJpZGU7CisjZWxzZQorICAgIC8vIFJlc291cmNlSGFu
ZGxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdEFzeW5jKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgdW5z
aWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNU
b0JlU2VudCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUFz
eW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCwgaW50IGVuY29kZWREYXRh
TGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZSosIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwg
aW50IGVuY29kZWREYXRhTGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgd2FzQmxvY2tlZChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgYm9vbCB1c2VzQXN5bmNDYWxsYmFja3MoKSBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGxvYWRpbmdTeW5jaHJvbm91c1hIUigpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fY2xpZW50LmlzU3luY2hyb25vdXMoKTsgfQorCisjaWYgVVNFKFBS
T1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
KiwgY29uc3QgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlJikgb3ZlcnJpZGU7CisjZW5kaWYKKyNp
ZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRGF0YUFycmF5KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVE
YXRhQXJyYXkoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBDRkFycmF5UmVmKSBvdmVycmlkZTsK
KyNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDRk5FVFdPUkspCisgICAgdmly
dHVhbCB2b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUq
LCBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBvdmVycmlkZTsKKyNlbHNlCisgICAgdmlydHVhbCB2
b2lkIHdpbGxDYWNoZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBOU0Nh
Y2hlZFVSTFJlc3BvbnNlICopIG92ZXJyaWRlOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZiAvLyBV
U0UoTkVUV09SS19TRVNTSU9OKQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxM
QkFDSykKKyAgICB2b2lkIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZShib29sKTsKKyNlbmRpZgorCisjaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCisgICAgV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlLmdl
dCgpOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxk
Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHNoYXJlZFdpbGxTZW5kUmVk
aXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgTmV0d29ya0xvYWRDbGllbnQmIG1fY2xp
ZW50OworICAgIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CisgICAg
UmVmUHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OworI2lm
IFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gbV90YXNr
OworI2Vsc2UKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOwor
I2VuZGlmCisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsg
Ly8gVXBkYXRlZCBvbiByZWRpcmVjdHMuCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKKyNlbmRpZiAvLyBOZXR3b3JrTG9h
ZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9h
ZENsaWVudC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRDbGll
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iYTQ4NmI3YTYzNDk5YzQ5NjRmZTBjMjcxZWM5ZDVhN2NhYmE0NWYy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWRDbGllbnQuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3
b3JrTG9hZENsaWVudF9oCisjZGVmaW5lIE5ldHdvcmtMb2FkQ2xpZW50X2gKKworI2lmIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Cisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQordHlwZWRlZiBj
b25zdCBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUHJvdGVjdGlvblNwYWNlOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0xvYWRDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfk5ldHdvcmtMb2FkQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRT
ZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcg
dG90YWxCeXRlc1RvQmVTZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VBc3luYyhjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3Bh
Y2UmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYgcmVkaXJlY3RSZXNwb25zZSkgPSAwOworICAgIGVudW0gY2xhc3MgU2hvdWxkQ29udGlu
dWVEaWRSZWNlaXZlUmVzcG9uc2UgeyBObywgWWVzIH07CisgICAgdmlydHVhbCBTaG91bGRDb250
aW51ZURpZFJlY2VpdmVSZXNwb25zZSBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZl
cihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0
YUxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBm
aW5pc2hUaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxMb2FkaW5nKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImKSA9IDA7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2
aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhDRkNhY2hlZFVSTFJlc3BvbnNlUmVm
KSA9IDA7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKworI2VuZGlmIC8vIE5ldHdvcmtMb2FkQ2xpZW50X2gK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
UGFyYW1ldGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDBiN2IxMWIwNWNiNGVkMzhjMGFiYjM2YmNmOGY4
ZDI0OTE2NjliZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisj
aW5jbHVkZSAiTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgiCisKKyNpbmNsdWRlICJOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworTmV0d29ya0xv
YWRQYXJhbWV0ZXJzOjpOZXR3b3JrTG9hZFBhcmFtZXRlcnMoY29uc3QgTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisgICAgOiB3ZWJQYWdlSUQocGFyYW1ldGVycy53
ZWJQYWdlSUQpCisgICAgLCB3ZWJGcmFtZUlEKHBhcmFtZXRlcnMud2ViRnJhbWVJRCkKKyAgICAs
IHNlc3Npb25JRChwYXJhbWV0ZXJzLnNlc3Npb25JRCkKKyAgICAsIHJlcXVlc3QocGFyYW1ldGVy
cy5yZXF1ZXN0KQorICAgICwgY29udGVudFNuaWZmaW5nUG9saWN5KHBhcmFtZXRlcnMuY29udGVu
dFNuaWZmaW5nUG9saWN5KQorICAgICwgYWxsb3dTdG9yZWRDcmVkZW50aWFscyhwYXJhbWV0ZXJz
LmFsbG93U3RvcmVkQ3JlZGVudGlhbHMpCisgICAgLCBjbGllbnRDcmVkZW50aWFsUG9saWN5KHBh
cmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSkKKyAgICAsIHNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QocGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25I
VFRQU1RvSFRUUFJlZGlyZWN0KQorICAgICwgZGVmZXJzTG9hZGluZyhwYXJhbWV0ZXJzLmRlZmVy
c0xvYWRpbmcpCisgICAgLCBuZWVkc0NlcnRpZmljYXRlSW5mbyhwYXJhbWV0ZXJzLm5lZWRzQ2Vy
dGlmaWNhdGVJbmZvKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYjM3NjI0OWQ2
ZjNkM2NiMDBjZTI3N2MzODU3MWUwMWFjNTMwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZFBhcmFtZXRlcnMuaApAQCAtMCwwICsx
LDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrTG9hZFBhcmFtZXRlcnNfaAorI2Rl
ZmluZSBOZXR3b3JrTG9hZFBhcmFtZXRlcnNfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKKworI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25J
RC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnM7CisKK2NsYXNzIE5ldHdvcmtMb2FkUGFyYW1ldGVycyB7CitwdWJsaWM6CisgICAg
TmV0d29ya0xvYWRQYXJhbWV0ZXJzKCkgPSBkZWZhdWx0OworICAgIE5ldHdvcmtMb2FkUGFyYW1l
dGVycyhjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYpOworCisgICAgdWludDY0
X3Qgd2ViUGFnZUlEIHsgMCB9OworICAgIHVpbnQ2NF90IHdlYkZyYW1lSUQgeyAwIH07CisgICAg
V2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCB7IFdlYkNvcmU6OlNlc3Npb25JRDo6ZW1wdHlT
ZXNzaW9uSUQoKSB9OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAg
IFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBjb250ZW50U25pZmZpbmdQb2xpY3kgeyBX
ZWJDb3JlOjpTbmlmZkNvbnRlbnQgfTsKKyAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBh
bGxvd1N0b3JlZENyZWRlbnRpYWxzIHsgV2ViQ29yZTo6RG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRp
YWxzIH07CisgICAgV2ViQ29yZTo6Q2xpZW50Q3JlZGVudGlhbFBvbGljeSBjbGllbnRDcmVkZW50
aWFsUG9saWN5IHsgV2ViQ29yZTo6RG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscyB9Owor
ICAgIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCB7IHRydWUg
fTsKKyAgICBib29sIGRlZmVyc0xvYWRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbmVlZHNDZXJ0
aWZpY2F0ZUluZm8geyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisjZW5kaWYgLy8gTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDA4NDZhNTA0N2NkMGI1YzI4MWQ5YzU2NzQx
ZGZkYTQ5YTdhNWY3NzkuLjg1ZDQyMTEzMGEzZmZjZWZkMzE0MzRiMmFmMDVkOGFjOTk1N2QzZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcApAQCAtMjgsMzUgKzI4LDI4IEBACiAKICNpZiBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQogCi0jaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3
b3JrQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlLmgiCiAjaW5jbHVkZSAi
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZC5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVycy5oIgotI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAi
U2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgot
I2luY2x1ZGUgIldlYkVycm9ycy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVh
ZGVyTmFtZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1
ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaD4KICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhh
bmRsZS5oPgotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTEyMCwxMSArMTEzLDcgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3
b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMKIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5ldHdvcmtSZXNvdXJjZUxvYWRlcigpCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFT
U0VSVCghbV90YXNrKTsKLSNlbHNlCi0gICAgQVNTRVJUKCFtX2hhbmRsZSk7Ci0jZW5kaWYKKyAg
ICBBU1NFUlQoIW1fbmV0d29ya0xvYWQpOwogICAgIEFTU0VSVCghaXNTeW5jaHJvbm91cygpIHx8
ICFtX3N5bmNocm9ub3VzTG9hZERhdGEtPmRlbGF5ZWRSZXBseSk7CiB9CiAKQEAgLTE0MCw4ICsx
MjksNiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogICAgIGlmIChtX2Rl
ZmVyc0xvYWRpbmcpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY3VycmVudFJlcXVlc3QgPSBv
cmlnaW5hbFJlcXVlc3QoKTsKLQogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIGlmICgh
TmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSB8fCBzZXNzaW9uSUQoKS5pc0Vw
aGVtZXJhbCgpIHx8ICFvcmlnaW5hbFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCkpIHsKICAgICAgICAgc3RhcnROZXR3b3JrTG9hZCgpOwpAQCAtMTczLDEwICsxNjAsOCBA
QCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKQogI2VuZGlmCiB9CiAKLXZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2FkKCkKK3ZvaWQgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2FkKGNvbnN0IE9wdGlvbmFsPFJlc291cmNlUmVx
dWVzdD4mIHVwZGF0ZWRSZXF1ZXN0KQogewotICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKHNlc3Npb25JRCgpLCBtX3BhcmFtZXRlcnMuc2hv
dWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7Ci0KICAgICBjb25zdW1lU2Fu
ZGJveEV4dGVuc2lvbnMoKTsKIAogICAgIGlmIChpc1N5bmNocm9ub3VzKCkgfHwgbV9wYXJhbWV0
ZXJzLm1heGltdW1CdWZmZXJpbmdUaW1lID4gMF9tcykKQEAgLTE4NywxNCArMTcyLDEwIEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2FkKCkKICAgICAgICAgbV9i
dWZmZXJlZERhdGFGb3JDYWNoZSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CiAj
ZW5kaWYKIAotICAgIGJvb2wgc2hvdWxkU25pZmYgPSBtX3BhcmFtZXRlcnMuY29udGVudFNuaWZm
aW5nUG9saWN5ID09IFNuaWZmQ29udGVudDsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAg
IFVOVVNFRF9QQVJBTShzaG91bGRTbmlmZik7IC8vIEZJWE1FOiBVc2UgdGhpcy4KLSAgICBtX3Rh
c2sgPSBTZXNzaW9uVHJhY2tlcjo6bmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKCkpLT5jcmVhdGVE
YXRhVGFza1dpdGhSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsICp0aGlzKTsKLSAgICBtX3Rhc2st
PnJlc3VtZSgpOwotI2Vsc2UKLSAgICBtX2hhbmRsZSA9IFJlc291cmNlSGFuZGxlOjpjcmVhdGUo
bV9uZXR3b3JraW5nQ29udGV4dC5nZXQoKSwgbV9jdXJyZW50UmVxdWVzdCwgdGhpcywgbV9kZWZl
cnNMb2FkaW5nLCBzaG91bGRTbmlmZik7Ci0jZW5kaWYKKyAgICBOZXR3b3JrTG9hZFBhcmFtZXRl
cnMgcGFyYW1ldGVycyA9IG1fcGFyYW1ldGVyczsKKyAgICBpZiAodXBkYXRlZFJlcXVlc3QpCisg
ICAgICAgIHBhcmFtZXRlcnMucmVxdWVzdCA9IHVwZGF0ZWRSZXF1ZXN0LnZhbHVlKCk7CisgICAg
bV9uZXR3b3JrTG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0xvYWQ+KCp0aGlzLCBwYXJh
bWV0ZXJzKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNldERlZmVyc0xvYWRp
bmcoYm9vbCBkZWZlcnMpCkBAIC0yMDIsMTUgKzE4Myw5IEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAgIGlmIChtX2RlZmVyc0xv
YWRpbmcgPT0gZGVmZXJzKQogICAgICAgICByZXR1cm47CiAgICAgbV9kZWZlcnNMb2FkaW5nID0g
ZGVmZXJzOwotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gRklYTUU6IERvIHNvbWV0
aGluZyBoZXJlLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0jZWxzZQotICAgIGlmIChtX2hhbmRs
ZSkgewotICAgICAgICBtX2hhbmRsZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCisKKyAgICBtX25ldHdvcmtMb2FkLT5zZXREZWZlcnNM
b2FkaW5nKGRlZmVycyk7CisKICAgICBpZiAoIW1fZGVmZXJzTG9hZGluZykKICAgICAgICAgc3Rh
cnQoKTsKIH0KQEAgLTIyMyw0MiArMTk4LDI0IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpjbGVhbnVwKCkKIAogICAgIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwogCi0jaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBpZiAobV90YXNrKSB7Ci0gICAgICAgIG1fdGFzay0+
Y2xlYXJDbGllbnQoKTsKLSAgICAgICAgbV90YXNrID0gbnVsbHB0cjsKLSAgICB9Ci0jZWxzZQot
ICAgIGlmIChtX2hhbmRsZSkgewotICAgICAgICBtX2hhbmRsZS0+Y2xlYXJDbGllbnQoKTsKLSAg
ICAgICAgbV9oYW5kbGUgPSBudWxscHRyOwotICAgIH0KLSNlbmRpZgorICAgIG1fbmV0d29ya0xv
YWQgPSBudWxscHRyOwogCiAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIE5ldHdvcmtSZXNvdXJjZUxv
YWRlciB0byBiZSBkZXN0cm95ZWQgYW5kIHRoZXJlZm9yZSB3ZSBkbyBpdCBsYXN0LgogICAgIG1f
Y29ubmVjdGlvbi0+ZGlkQ2xlYW51cFJlc291cmNlTG9hZGVyKCp0aGlzKTsKIH0KIAotI2lmICFV
U0UoTkVUV09SS19TRVNTSU9OKQogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENvbnZl
cnRIYW5kbGVUb0Rvd25sb2FkKCkKIHsKLSAgICBBU1NFUlQobV9oYW5kbGUpOworICAgIEFTU0VS
VChtX25ldHdvcmtMb2FkKTsKICAgICBtX2RpZENvbnZlcnRIYW5kbGVUb0Rvd25sb2FkID0gdHJ1
ZTsKIH0KLSNlbmRpZgogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YWJvcnQoKQogewog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQotICAgIGlmIChtX3Rhc2spCi0gICAgICAgIG1fdGFzay0+Y2FuY2VsKCk7Ci0gICAgLy8gRklY
TUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSBuZXR3b3JrIGNhY2hlIGhlcmUuCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSNlbHNlCi0gICAgaWYgKG1faGFuZGxlICYmICFtX2RpZENvbnZlcnRIYW5k
bGVUb0Rvd25sb2FkKSB7Ci0gICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKKyAgICBpZiAobV9u
ZXR3b3JrTG9hZCAmJiAhbV9kaWRDb252ZXJ0SGFuZGxlVG9Eb3dubG9hZCkgeworICAgICAgICBt
X25ldHdvcmtMb2FkLT5jYW5jZWwoKTsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAg
ICAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSkgewpAQCAtMjY4
LDE3ICsyMjUsMTQgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFib3J0KCkKICAgICAg
ICAgfQogI2VuZGlmCiAgICAgfQotI2VuZGlmCisKICAgICBjbGVhbnVwKCk7CiB9CiAKLU5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25zZSkKK2F1dG8gTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVjZWl2
ZWRSZXNwb25zZSkgLT4gU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UKIHsKICAgICBt
X3Jlc3BvbnNlID0gcmVjZWl2ZWRSZXNwb25zZTsKIAotICAgIG1fcmVzcG9uc2Uuc2V0U291cmNl
KFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yayk7Ci0gICAgaWYgKG1fcGFyYW1ldGVy
cy5uZWVkc0NlcnRpZmljYXRlSW5mbykKLSAgICAgICAgbV9yZXNwb25zZS5pbmNsdWRlQ2VydGlm
aWNhdGVJbmZvKCk7CiAgICAgLy8gRm9yIG11bHRpcGFydC94LW1peGVkLXJlcGxhY2UgZGlkUmVj
ZWl2ZVJlc3BvbnNlQXN5bmMgZ2V0cyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYW5kIGJ1ZmZlcmlu
ZyB3b3VsZCByZXF1aXJlIHNwZWNpYWwgaGFuZGxpbmcuCiAgICAgaWYgKCFpc1N5bmNocm9ub3Vz
KCkgJiYgbV9yZXNwb25zZS5pc011bHRpcGFydCgpKQogICAgICAgICBtX2J1ZmZlcmVkRGF0YSA9
IG51bGxwdHI7CkBAIC0zMjIsNyArMjc2LDcgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpTaG91
bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnMKICAg
ICByZXR1cm4gU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2U6OlllczsKIH0KIAotdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZFJlY2VpdmVCdWZmZXIoUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVu
Z3RoKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCdWZmZXIoUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKQog
ewogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIEFTU0VSVCghbV9jYWNoZUVudHJ5Rm9y
VmFsaWRhdGlvbik7CkBAIC0zNDksNyArMzAzLDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnNoYXJlZERpZFJlY2VpdmVCdWZmZXIoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4K
ICAgICBzZW5kQnVmZmVyTWF5YmVBYm9ydGluZygqYnVmZmVyLCBlbmNvZGVkRGF0YUxlbmd0aCk7
CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRGaW5pc2hMb2FkaW5n
KGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlz
aExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
CiAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKQEAgLTQw
NCw3ICszNTgsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkRmluaXNo
TG9hZGluZyhkb3VibGUgZmluaXNoVGltZSkKICAgICBjbGVhbnVwKCk7CiB9CiAKLXZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImIGVycm9yKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWxMb2FkaW5n
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VSVCghZXJyb3IuaXNOdWxs
KCkpOwogCkBAIC00MjEsMjIxICszNzUsNDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OnNoYXJlZERpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAg
Y2xlYW51cCgpOwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkV2lsbFNl
bmRSZWRpcmVjdGVkUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGly
ZWN0UmVzcG9uc2UpCiB7Ci0gICAgLy8gV2Ugb25seSBleHBlY3QgdG8gZ2V0IHRoZSB3aWxsU2Vu
ZFJlcXVlc3QgY2FsbGJhY2sgZnJvbSBSZXNvdXJjZUhhbmRsZSBhcyB0aGUgcmVzdWx0IG9mIGEg
cmVkaXJlY3QuCi0gICAgQVNTRVJUKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKTsKLSAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9jdXJyZW50UmVxdWVzdCA9IHJlcXVl
c3Q7Ci0KICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBXZWJDb3JlOjp1cGRhdGVSZWRp
cmVjdENoYWluU3RhdHVzKG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLCByZWRpcmVjdFJlc3Bv
bnNlKTsKICNlbmRpZgogCiAgICAgaWYgKGlzU3luY2hyb25vdXMoKSkgeworICAgICAgICBSZXNv
dXJjZVJlcXVlc3Qgb3ZlcnJpZGVuUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUgcmVkaXJlY3QgY29ycmVjdGx5
IGV2ZW4gZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cy4KICAgICAgICAgLy8gVGhpcyBpbmNsdWRl
cyBhdCBsZWFzdCB1cGRhdGluZyBob3N0IHJlY29yZHMsIGFuZCBjb21wYXJpbmcgdGhlIGN1cnJl
bnQgcmVxdWVzdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGhlcmUuCi0gICAgICAg
IGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG9yaWdpbmFsUmVxdWVzdCgpLnVybCgp
LCBtX2N1cnJlbnRSZXF1ZXN0LnVybCgpKSkgeworICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFu
ZFBvcnRBcmVFcXVhbChvcmlnaW5hbFJlcXVlc3QoKS51cmwoKSwgcmVxdWVzdC51cmwoKSkpIHsK
ICAgICAgICAgICAgIEFTU0VSVChtX3N5bmNocm9ub3VzTG9hZERhdGEtPmVycm9yLmlzTnVsbCgp
KTsKICAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZXJyb3IgPSBTeW5jaHJvbm91
c0xvYWRlckNsaWVudDo6cGxhdGZvcm1CYWRSZXNwb25zZUVycm9yKCk7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRSZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgICAgICAgICBtX25ldHdv
cmtMb2FkLT5jbGVhckN1cnJlbnRSZXF1ZXN0KCk7CisgICAgICAgICAgICBvdmVycmlkZW5SZXF1
ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgICAgIH0KLSAgICAgICAgY29udGludWVXaWxs
U2VuZFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7CisgICAgICAgIGNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KG92ZXJyaWRlblJlcXVlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNl
bmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OldpbGxTZW5k
UmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKSk7CisgICAgc2VuZEFi
b3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1
ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKTsKIH0KICAgICAKLSNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQ
UmVkaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lk
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KHJlcXVlc3QsIHJlc3BvbnNlKTsK
LSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0KTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhh
bmRsaW5nLCBXZWJDb3JlOjpDcmVkZW50aWFsKCkpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+IGNv
bXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc2hh
cmVkRGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihS
ZXNwb25zZURpc3Bvc2l0aW9uOjpBbGxvdyk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGJ1ZmZl
cikKLXsKLSAgICBBU1NFUlQoYnVmZmVyKTsKLSAgICBhdXRvIHNpemUgPSBidWZmZXItPnNpemUo
KTsKLSAgICBzaGFyZWREaWRSZWNlaXZlQnVmZmVyKFdURjo6bW92ZShidWZmZXIpLCBzaXplKTsK
LX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIGlmIChlcnJvci5pc051
bGwoKSkKLSAgICAgICAgc2hhcmVkRGlkRmluaXNoTG9hZGluZyhXVEY6Om1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHNoYXJlZERpZEZhaWwoZXJyb3Ip
OwotfQotCi0jZWxzZQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVjZWl2ZWRSZXNwb25zZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxl
ID09IG1faGFuZGxlKTsKLSAgICBpZiAoc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKHJlY2VpdmVk
UmVzcG9uc2UpID09IFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXMpCi0gICAg
ICAgIG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwotfQotCi12b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBjaGFyKiAvKiBkYXRhICovLCB1bnNpZ25lZCAvKiBsZW5ndGggKi8sIGludCAvKiBlbmNvZGVk
RGF0YUxlbmd0aCAqLykKLXsKLSAgICAvLyBUaGUgTmV0d29ya1Byb2Nlc3Mgc2hvdWxkIG5ldmVy
IGdldCBhIGRpZFJlY2VpdmVEYXRhIGNhbGxiYWNrLgotICAgIC8vIFdlIHNob3VsZCBhbHdheXMg
YmUgdXNpbmcgZGlkUmVjZWl2ZUJ1ZmZlci4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCdWZmZXIoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZlciwg
aW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5k
bGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0gICAgc2hhcmVkRGlkUmVjZWl2ZUJ1ZmZlcihXVEY6
Om1vdmUoYnVmZmVyKSwgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCk7Ci19Ci0KLXZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGRvdWJsZSBmaW5pc2hUaW1lKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5k
bGUgPT0gbV9oYW5kbGUpOwotICAgIHNoYXJlZERpZEZpbmlzaExvYWRpbmcoZmluaXNoVGltZSk7
Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIEFTU0VSVF9VTlVT
RUQoaGFuZGxlLCAhaGFuZGxlIHx8IGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0gICAgc2hhcmVkRGlk
RmFpbChlcnJvcik7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXVlc3RBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCi17Ci0g
ICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0gICAgc2hhcmVk
V2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKLX0K
LQotI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgCiB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBuZXdSZXF1ZXN0KQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIG1fY3VycmVudFJlcXVl
c3QudXBkYXRlRnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMobmV3UmVxdWVzdC5u
c1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkpOwotI2VsaWYgVVNFKFNPVVApCi0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZyb21EZWxlZ2F0ZVBy
ZXNlcnZpbmdPbGRQcm9wZXJ0aWVzLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNjEyNy4KLSAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0
ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVlc3QpOwotI2VuZGlmCi0KLSAgICBpZiAo
bV9jdXJyZW50UmVxdWVzdC5pc051bGwoKSkgewotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0g
ICAgICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KLSAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSNlbHNlCi0gICAgICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKLSAgICAgICAgZGlkRmFp
bChtX2hhbmRsZS5nZXQoKSwgY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwotI2Vu
ZGlmCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQot
ICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgaGVyZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
I2Vsc2UKLSAgICBtX2hhbmRsZS0+Y29udGludWVXaWxsU2VuZFJlcXVlc3QobV9jdXJyZW50UmVx
dWVzdCk7Ci0jZW5kaWYKKyAgICBtX25ldHdvcmtMb2FkLT5jb250aW51ZVdpbGxTZW5kUmVxdWVz
dChuZXdSZXF1ZXN0KTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbnRpbnVl
RGlkUmVjZWl2ZVJlc3BvbnNlKCkKIHsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgY2hlY2sg
b25jZSBCbG9iUmVzb3VyY2VIYW5kbGUgaW1wbGVtZW50cyBkaWRSZWNlaXZlUmVzcG9uc2VBc3lu
YyBjb3JyZWN0bHkuCiAgICAgLy8gQ3VycmVudGx5LCBpdCBkb2VzIG5vdCB3YWl0IGZvciByZXNw
b25zZSwgc28gdGhlIGxvYWQgaXMgbGlrZWx5IHRvIGZpbmlzaCBiZWZvcmUgY29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UuCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAvLyBGSVhNRTog
RG8gc29tZXRoaW5nIGhlcmUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSNlbHNlCi0gICAgaWYg
KCFtX2hhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYW5kbGUtPmNvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlKCk7Ci0jZW5kaWYKKyAgICBpZiAobV9uZXR3b3JrTG9hZCkKKyAgICAg
ICAgbV9uZXR3b3JrTG9hZC0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIAotI2lm
ICFVU0UoTkVUV09SS19TRVNTSU9OKQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlk
U2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVz
U2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3ZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50
LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQogewotICAgIEFTU0VSVF9V
TlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCiAgICAgaWYgKCFpc1N5bmNocm9u
b3VzKCkpCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRTZW5k
RGF0YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCkpOwogfQogCi12b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6d2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewotICAg
IEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCi0gICAgZGlkRmFp
bChoYW5kbGUsIFdlYktpdDo6YmxvY2tlZEVycm9yKG1fY3VycmVudFJlcXVlc3QpKTsKLX0KLQot
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxl
KTsKLQotICAgIGRpZEZhaWwoaGFuZGxlLCBXZWJLaXQ6OmNhbm5vdFNob3dVUkxFcnJvcihtX2N1
cnJlbnRSZXF1ZXN0KSk7Ci19Ci0KLWJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaG91bGRV
c2VDcmVkZW50aWFsU3RvcmFnZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewotICAgIEFTU0VS
VF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUgfHwgIW1faGFuZGxlKTsgLy8gbV9o
YW5kbGUgd2lsbCBiZSAwIGlmIGNhbGxlZCBmcm9tIFJlc291cmNlSGFuZGxlOjpzdGFydCgpLgot
Ci0gICAgLy8gV2hlbiB0aGUgV2ViUHJvY2VzcyBpcyBoYW5kbGluZyBsb2FkaW5nIGEgY2xpZW50
IGlzIGNvbnN1bHRlZCBlYWNoIHRpbWUgdGhpcyBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSBx
dWVzdGlvbiBpcyBhc2tlZC4KLSAgICAvLyBJbiBOZXR3b3JrUHJvY2VzcyBtb2RlIHdlIGFzayB0
aGUgV2ViUHJvY2VzcyBjbGllbnQgdXAgZnJvbnQgb25jZSBhbmQgdGhlbiByZXVzZSB0aGUgY2Fj
aGVkIGFuc3dlci4KLQotICAgIC8vIFdlIHN0aWxsIG5lZWQgdGhpcyBzeW5jIHZlcnNpb24sIGJl
Y2F1c2UgUmVzb3VyY2VIYW5kbGUgaXRzZWxmIHVzZXMgaXQgaW50ZXJuYWxseSwgZXZlbiB3aGVu
IHRoZSBkZWxlZ2F0ZSB1c2VzIGFuIGFzeW5jIG9uZS4KLQotICAgIHJldHVybiBtX3BhcmFtZXRl
cnMuYWxsb3dTdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotfQot
Ci12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBjaGFsbGVuZ2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBt
X2hhbmRsZSk7Ci0gICAgLy8gTmV0d29ya1Jlc291cmNlTG9hZGVyIGRvZXMgbm90IGtub3cgd2hl
dGhlciB0aGUgcmVxdWVzdCBpcyBjcm9zcyBvcmlnaW4sIHNvIFdlYiBwcm9jZXNzIGNvbXB1dGVz
IGFuIGFwcGxpY2FibGUgY3JlZGVudGlhbCBwb2xpY3kgZm9yIGl0LgotICAgIEFTU0VSVChtX3Bh
cmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSAhPSBEb05vdEFza0NsaWVudEZvckNyb3Nz
T3JpZ2luQ3JlZGVudGlhbHMpOwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5jbGllbnRDcmVkZW50
aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpIHsKLSAgICAgICAg
Y2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCktPnJlY2VpdmVkUmVxdWVzdFRvQ29udGlu
dWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigp
LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMud2ViUGFnZUlE
LCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgY2hhbGxlbmdlKTsKLX0KLQotdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQotICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgcHJvYmFibHkgbm90IG5lZWRlZCAoc2VlIDxyZGFyOi8vcHJvYmxlbS84OTYw
MTI0PikuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwg
aGFuZGxlID09IG1faGFuZGxlKTsKLQotICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKLSAgICBkaWRG
YWlsKG1faGFuZGxlLmdldCgpLCBjYW5jZWxsZWRFcnJvcihtX2N1cnJlbnRSZXF1ZXN0KSk7Ci19
Ci0KLSNlbmRpZiAvLyAhVVNFKE5FVFdPUktfU0VTU0lPTikKLQogdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCgpCiB7CiAgICAgaWYgKGlzU3lu
Y2hyb25vdXMoKSkKQEAgLTY0OCw5ICs0MjgsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c3RhcnRCdWZmZXJpbmdUaW1lcklmTmVlZGVkKCkKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpidWZmZXJpbmdUaW1lckZpcmVkKCkKIHsKICAgICBBU1NFUlQobV9idWZmZXJlZERhdGEp
OwotI2lmICFVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIEFTU0VSVChtX2hhbmRsZSk7Ci0jZW5k
aWYKKyAgICBBU1NFUlQobV9uZXR3b3JrTG9hZCk7CisKICAgICBpZiAoIW1fYnVmZmVyZWREYXRh
LT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNzE4LDI0ICs0OTcsMjMgQEAgdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJldHJpZXZlQ2FjaGVFbnRyeShzdGQ6OnVuaXF1ZV9w
dHI8TmV0d29ya0NhY2hlOjoKIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnZhbGlkYXRl
Q2FjaGVFbnRyeShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkpCiB7
Ci0jaWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgQVNTRVJUKCFtX2hhbmRsZSk7Ci0jZW5k
aWYKKyAgICBBU1NFUlQoIW1fbmV0d29ya0xvYWQpOwogCiAgICAgLy8gSWYgdGhlIHJlcXVlc3Qg
aXMgYWxyZWFkeSBjb25kaXRpb25hbCB0aGVuIHRoZSByZXZhbGlkYXRpb24gd2FzIG5vdCB0cmln
Z2VyZWQgYnkgdGhlIGRpc2sgY2FjaGUKICAgICAvLyBhbmQgd2Ugc2hvdWxkIG5vdCBvdmVyd3Jp
dGUgdGhlIGV4aXN0aW5nIGNvbmRpdGlvbmFsIGhlYWRlcnMuCi0gICAgaWYgKCFtX2N1cnJlbnRS
ZXF1ZXN0LmlzQ29uZGl0aW9uYWwoKSkgeworICAgIFJlc291cmNlUmVxdWVzdCByZXZhbGlkYXRp
b25SZXF1ZXN0ID0gb3JpZ2luYWxSZXF1ZXN0KCk7CisgICAgaWYgKCFyZXZhbGlkYXRpb25SZXF1
ZXN0LmlzQ29uZGl0aW9uYWwoKSkgewogICAgICAgICBTdHJpbmcgZVRhZyA9IGVudHJ5LT5yZXNw
b25zZSgpLmh0dHBIZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6RVRhZyk7CiAg
ICAgICAgIFN0cmluZyBsYXN0TW9kaWZpZWQgPSBlbnRyeS0+cmVzcG9uc2UoKS5odHRwSGVhZGVy
RmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6Okxhc3RNb2RpZmllZCk7CiAgICAgICAgIGlm
ICghZVRhZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRSZXF1ZXN0LnNldEhUVFBI
ZWFkZXJGaWVsZChXZWJDb3JlOjpIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gsIGVUYWcpOwor
ICAgICAgICAgICAgcmV2YWxpZGF0aW9uUmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29y
ZTo6SFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoLCBlVGFnKTsKICAgICAgICAgaWYgKCFsYXN0
TW9kaWZpZWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50UmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSwgbGFz
dE1vZGlmaWVkKTsKKyAgICAgICAgICAgIHJldmFsaWRhdGlvblJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UsIGxhc3RNb2Rp
ZmllZCk7CiAgICAgfQogCiAgICAgbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiA9IFdURjo6bW92
ZShlbnRyeSk7CiAKLSAgICBzdGFydE5ldHdvcmtMb2FkKCk7CisgICAgc3RhcnROZXR3b3JrTG9h
ZChyZXZhbGlkYXRpb25SZXF1ZXN0KTsKIH0KICNlbmRpZgogCkBAIC03ODMsNTMgKzU2MSwxOSBA
QCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKFQmJiBt
ZXNzYWdlLCB1bnNpZ25lZCBtZXNzYWdlUwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiBV
U0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKSAmJiAhVVNFKE5FVFdPUktfU0VTU0lP
TikKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUHJvdGVjdGlv
blNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKGNvbnN0IFByb3RlY3Rpb25T
cGFjZSYgcHJvdGVjdGlvblNwYWNlKQogewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KLSAgICAv
LyBIYW5kbGUgc2VydmVyIHRydXN0IGV2YWx1YXRpb24gYXQgcGxhdGZvcm0tbGV2ZWwgaWYgcmVx
dWVzdGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KLSAgICBpZiAocHJvdGVjdGlvblNwYWNl
LmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPT0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQKLSAgICAgICAgJiYgIU5ldHdvcmtQ
cm9jZXNzOjpzaW5nbGV0b24oKS5jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbigp
KSB7Ci0gICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZShmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNTeW5jaHJvbm91
cygpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNrIHRoZSBXZWJQcm9jZXNzIGxp
a2UgdGhlIGFzeW5jaHJvbm91cyBjYXNlIGJlbG93IGRvZXMuCi0gICAgICAgIC8vIFRoaXMgaXMg
Y3VycmVudGx5IGltcG9zc2libGUgYXMgdGhlIFdlYlByb2Nlc3MgaXMgYmxvY2tlZCB3YWl0aW5n
IG9uIHRoaXMgc3luY2hyb25vdXMgbG9hZC4KLSAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0
IHdlIGNhbiBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBVSSBwcm9jZXNzIHRvIHJlc29sdmUgdGhpcy4K
LSAgICAgICAgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKHRy
dWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSk7Ci19Ci0jZW5kaWYKLQogI2lmIFVTRShQUk9URUNU
SU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29u
dGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQot
ewotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyBo
ZXJlLgotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1l
c3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rp
b25TcGFjZShwcm90ZWN0aW9uU3BhY2UpKTsKICNlbHNlCi0gICAgbV9oYW5kbGUtPmNvbnRpbnVl
Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShyZXN1bHQpOwotI2VuZGlmCi19
CisgICAgVU5VU0VEX1BBUkFNKHByb3RlY3Rpb25TcGFjZSk7CiAjZW5kaWYKLQotI2lmIFVTRShO
RVRXT1JLX0NGREFUQV9BUlJBWV9DQUxMQkFDSykgJiYgIVVTRShORVRXT1JLX1NFU1NJT04pCi1i
b29sIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3VwcG9ydHNEYXRhQXJyYXkoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheShSZXNvdXJjZUhhbmRsZSosIENGQXJyYXlS
ZWYpCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKK3ZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2UoYm9vbCByZXN1bHQpCiB7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBtX25ldHdvcmtMb2FkLT5jb250aW51ZUNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocmVzdWx0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCmlu
ZGV4IDhiNDIzZGM4NGYyM2Q3ODg5YTdlNjgwY2IyMjY4MWRlNWU5NzQ4YTEuLjBlOWU5MDllOTM1
ZTQ5ZjE0NjQ1NDdlNmQxOTFlYWJjNmRkMzBiOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0zMSwzMSArMzEs
MTcgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hl
LmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtMb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvQ2FjaGVWYWxpZGF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VSZXNwb25zZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KLQotI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0jaW5jbHVkZSAi
TmV0d29ya1Nlc3Npb24uaCIKLSNlbHNlCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRs
ZUNsaWVudC5oPgotI2VuZGlmCi0KLXR5cGVkZWYgY29uc3Qgc3RydWN0IF9DRkNhY2hlZFVSTFJl
c3BvbnNlKiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmOworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCbG9iRGF0YUZpbGVSZWZlcmVuY2U7Ci0j
aWYgIVVTRShORVRXT1JLX1NFU1NJT04pCi1jbGFzcyBSZXNvdXJjZUhhbmRsZTsKLSNlbmRpZgog
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogfQogCkBAIC02MywxNiArNDksMTIgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogY2xhc3Mg
TmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM7Ci1jbGFzcyBSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dDsKK2NsYXNzIE5ldHdvcmtMb2FkOwogY2xhc3MgU2FuZGJveEV4dGVuc2lvbjsKIAogY2xh
c3MgTmV0d29ya1Jlc291cmNlTG9hZGVyCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI+Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICAsIHB1YmxpYyBO
ZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQKLSNlbHNlCi0gICAgLCBwdWJsaWMgV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVDbGllbnQKLSNlbmRpZgorICAgICwgcHVibGljIE5ldHdvcmtMb2FkQ2xpZW50
CiAgICAgLCBwdWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gY3JlYXRlKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxv
YWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyog
Y29ubmVjdGlvbikKQEAgLTg4LDEyICs3MCw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgb3JpZ2luYWxSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9w
YXJhbWV0ZXJzLnJlcXVlc3Q7IH0KIAotICAgIC8vIENoYW5nZXMgd2l0aCByZWRpcmVjdHMuCi0g
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCgpIHsgcmV0dXJuIG1f
Y3VycmVudFJlcXVlc3Q7IH0KKyAgICBOZXR3b3JrTG9hZCogbmV0d29ya0xvYWQoKSBjb25zdCB7
IHJldHVybiBtX25ldHdvcmtMb2FkLmdldCgpOyB9CiAKLSNpZiAhVVNFKE5FVFdPUktfU0VTU0lP
TikKLSAgICBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
bV9oYW5kbGUuZ2V0KCk7IH0KLSNlbmRpZgogICAgIHZvaWQgZGlkQ29udmVydEhhbmRsZVRvRG93
bmxvYWQoKTsKIAogICAgIHZvaWQgc3RhcnQoKTsKQEAgLTEwMyw3ICs4MSw5IEBAIHB1YmxpYzoK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHN0YXRpYyBzaXplX3QgZmlsZUJhY2tlZFJlc291
cmNlTWluaW11bVNpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3lu
YyhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKSBvdmVycmlkZTsKICNlbmRpZgorCiAgICAgLy8gTWVz
c2FnZSBoYW5kbGVycy4KICAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3JrUmVzb3VyY2VMb2FkZXJN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKTsKIApAQCAtMTI2
LDYgKzEwNiwxNiBAQCBwdWJsaWM6CiAKICAgICBzdHJ1Y3QgU3luY2hyb25vdXNMb2FkRGF0YTsK
IAorICAgIC8vIE5ldHdvcmtMb2FkQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0
YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxC
eXRlc1RvQmVTZW50KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuQXV0aGVudGljYXRl
QWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKGNvbnN0IFdlYkNvcmU6OlByb3RlY3Rpb25TcGFj
ZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVkaXJlY3RSZXNwb25zZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTaG91bGRDb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZSBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVm
ZmVyKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYsIGludCByZXBvcnRlZEVuY29kZWRE
YXRhTGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhk
b3VibGUgZmluaXNoVGltZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxMb2Fk
aW5nKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKKwogcHJpdmF0ZToK
ICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMmLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIFBhc3NSZWZQdHI8TWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2Fk
OjpEZWxheWVkUmVwbHk+KTsKIApAQCAtMTMzLDYzICsxMjMsMTIgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgb3Zl
cnJpZGUgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmlkZW50aWZpZXI7IH0KIAotICAgIGVudW0gU2hv
dWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgewotICAgICAgICBZZXMsCi0gICAgICAgIE5v
Ci0gICAgfTsKLSAgICBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBzaGFyZWREaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAg
ICB2b2lkIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZv
aWQgc2hhcmVkRGlkUmVjZWl2ZUJ1ZmZlcihSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYm
LCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCk7Ci0gICAgdm9pZCBzaGFyZWREaWRGYWls
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2b2lkIHNoYXJlZERpZEZpbmlz
aExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpOwotCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
LSAgICAvLyBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIHdpbGxQ
ZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+KSBmaW5hbCBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bv
c2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+KSBmaW5hbCBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSBmaW5h
bCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4mJikgZmluYWwgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBmaW5hbCBv
dmVycmlkZTsKLSNlbHNlCi0gICAgLy8gUmVzb3VyY2VIYW5kbGVDbGllbnQKLSAgICB2aXJ0dWFs
IHZvaWQgd2lsbFNlbmRSZXF1ZXN0QXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiByZWRpcmVjdFJlc3BvbnNlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2Vu
ZERhdGEoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNT
ZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29u
c3QgY2hhciosIHVuc2lnbmVkLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBpbnQgZW5jb2RlZERhdGFMZW5ndGgp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNhbm5vdFNo
b3dVUkwoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNlaXZlZENhbmNlbGxhdGlvbihXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFdlYkNv
cmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IHVzZXNBc3luY0NhbGxiYWNrcygpIG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgbG9hZGluZ1N5bmNocm9ub3VzWEhSKCkgb3ZlcnJpZGUgeyByZXR1cm4gaXNTeW5j
aHJvbm91cygpOyB9Ci0KLSNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQot
ICAgIHZpcnR1YWwgdm9pZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5
bmMoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3Bh
Y2UmKSBvdmVycmlkZTsKLSNlbmRpZgotI2lmIFVTRShORVRXT1JLX0NGREFUQV9BUlJBWV9DQUxM
QkFDSykKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEYXRhQXJyYXkoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZSosIENGQXJyYXlSZWYpIG92ZXJyaWRlOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0j
aWYgVVNFKENGTkVUV09SSykKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3lu
YyhXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZSosIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpIG92ZXJy
aWRlOwotI2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbENhY2hlUmVzcG9uc2VBc3luYyhXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZSosIE5TQ2FjaGVkVVJMUmVzcG9uc2UgKikgb3ZlcnJpZGU7Ci0j
ZW5kaWYKLSNlbmRpZgotI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCi0KICNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKICAgICB2b2lkIGRpZFJldHJpZXZlQ2FjaGVFbnRyeShzdGQ6OnVu
aXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4pOwogICAgIHZvaWQgdmFsaWRhdGVDYWNoZUVu
dHJ5KHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5Pik7CiAjZW5kaWYKIAotICAg
IHZvaWQgc3RhcnROZXR3b3JrTG9hZCgpOworICAgIHZvaWQgc3RhcnROZXR3b3JrTG9hZChjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+JiB1cGRhdGVkUmVxdWVzdCA9IHsg
fSk7CiAgICAgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogCiAgICAgdm9pZCBj
bGVhbnVwKCk7CkBAIC0yMDAsOCArMTM5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1ZmZlcmlu
Z1RpbWVyRmlyZWQoKTsKICAgICBib29sIHNlbmRCdWZmZXJNYXliZUFib3J0aW5nKGNvbnN0IFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlciYsIHNpemVfdCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAKLSAgICBi
b29sIGlzU3luY2hyb25vdXMoKSBjb25zdDsKLQogICAgIHZvaWQgY29uc3VtZVNhbmRib3hFeHRl
bnNpb25zKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKIApAQCAt
MjExLDE0ICsxNDgsOCBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247CiAKLSAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
LSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBtX3Rhc2s7Ci0jZWxzZQotICAgIFJlZlB0cjxX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7Ci0jZW5kaWYKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8TmV0d29ya0xvYWQ+IG1fbmV0d29ya0xvYWQ7CiAKLSAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
IG1fcmVzcG9uc2U7CiAKICAgICBzaXplX3QgbV9ieXRlc1JlY2VpdmVkOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtMb2FkTWFjLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmY5OGU0OTBiNzBlZjExZTAxZjBiNmY3ZDJkZjI0N2ZlYzRmYmIxNjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya0xvYWRNYWMu
bW0KQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyNpbXBvcnQgIk5ldHdvcmtMb2FkLmgiCisKKyNp
bXBvcnQgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNl
SGFuZGxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworI2lmIFVTRShDRk5FVFdPUkspCisKK3ZvaWQgTmV0d29ya0xvYWQ6OndpbGxDYWNoZVJl
c3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgQ0ZDYWNoZWRVUkxSZXNwb25zZVJl
ZiBjZlJlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9o
YW5kbGUpOworCisgICAgbV9jbGllbnQud2lsbENhY2hlUmVzcG9uc2VBc3luYyhjZlJlc3BvbnNl
KTsKKworICAgIG1faGFuZGxlLT5jb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKGNmUmVzcG9uc2Up
OworfQorCisjZWxpZiAhVVNFKE5FVFdPUktfU0VTU0lPTikKKwordm9pZCBOZXR3b3JrTG9hZDo6
d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBOU0NhY2hlZFVS
TFJlc3BvbnNlICpuc1Jlc3BvbnNlKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5k
bGUgPT0gbV9oYW5kbGUpOworCisgICAgbV9jbGllbnQud2lsbENhY2hlUmVzcG9uc2VBc3luYyhb
bnNSZXNwb25zZSBfQ0ZDYWNoZWRVUkxSZXNwb25zZV0pOworCisgICAgbV9oYW5kbGUtPmNvbnRp
bnVlV2lsbENhY2hlUmVzcG9uc2UobnNSZXNwb25zZSk7Cit9CisKKyNlbmRpZiAvLyAhVVNFKENG
TkVUV09SSykKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVU
V09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
bWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KaW5kZXggZjgyMjI3YTg2ZTdm
M2NiNTg0OGI1ZWNlZDkwMjliNWUzMThlOGMxMy4uOGEyODZlNjFmYzg0ZDIxMzY0NDY5NTM3OTcy
ZDAyOTNlM2FjMmMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
bWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tCkBAIC0zMyw2ICszMyw3
IEBACiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZXNvdXJjZUhhbmRsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBv
cnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC04
MiwzMiArODMsMTIgQEAgc2l6ZV90IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZmlsZUJhY2tlZFJl
c291cmNlTWluaW11bVNpemUoKQogICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VT
aXplKCk7CiB9CiAKLSNpZiBVU0UoQ0ZORVRXT1JLKQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBDRkNh
Y2hlZFVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6d2lsbENhY2hlUmVzcG9uc2VBc3luYyhDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIGNmUmVzcG9u
c2UpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0K
ICAgICBpZiAobV9ieXRlc1JlY2VpdmVkID49IGZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXpl
KCkpCiAgICAgICAgIE5ldHdvcmtEaXNrQ2FjaGVNb25pdG9yOjptb25pdG9yRmlsZUJhY2tpbmdT
dG9yZUNyZWF0aW9uKGNmUmVzcG9uc2UsIHRoaXMpOwotCi0gICAgbV9oYW5kbGUtPmNvbnRpbnVl
V2lsbENhY2hlUmVzcG9uc2UoY2ZSZXNwb25zZSk7CiB9CiAKLSNlbGlmICFVU0UoTkVUV09SS19T
RVNTSU9OKQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2VB
c3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBOU0NhY2hlZFVSTFJlc3BvbnNlICpuc1Jlc3Bv
bnNlKQotewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwot
Ci0gICAgaWYgKG1fYnl0ZXNSZWNlaXZlZCA+PSBmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6
ZSgpKQotICAgICAgICBOZXR3b3JrRGlza0NhY2hlTW9uaXRvcjo6bW9uaXRvckZpbGVCYWNraW5n
U3RvcmVDcmVhdGlvbihbbnNSZXNwb25zZSBfQ0ZDYWNoZWRVUkxSZXNwb25zZV0sIHRoaXMpOwot
Ci0gICAgbV9oYW5kbGUtPmNvbnRpbnVlV2lsbENhY2hlUmVzcG9uc2UobnNSZXNwb25zZSk7Ci19
Ci0KLSNlbmRpZiAvLyAhVVNFKENGTkVUV09SSykKLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
ICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFr
ZQppbmRleCA2YzY1ZmNjNjEzNGRiZWNkZTkyYTE5NDBiZWNhZjZlOGYwMGU0ZjVkLi4zZjVkMmU0
N2FlNmIzOTk5YjE2MGUyNWE4NTA0MzM3MWJhZDY0ZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5j
bWFrZQpAQCAtMTgsNiArMTgsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBO
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCiAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya0Rpc2tDYWNoZU1vbml0b3IubW0KKyAgICBOZXR3b3JrUHJvY2Vz
cy9tYWMvTmV0d29ya0xvYWRNYWMubW0KICAgICBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1By
b2Nlc3NNYWMubW0KICAgICBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVy
TWFjLm1tCiAgICAgTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1t
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMzM1ODRhMGYzODQ3NTdiMzlkOTdlOTJkYWVlOTg5YmM2NDFkN2NiYi4uMzVkOTc0ZjFl
NjY5NWQ3MTY0MjNmOTEwOWFjZThmZGQyN2I5NmExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE4MCw2ICsxMTgwLDcgQEAK
IAkJODM0QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEIyNTEwMUE4
NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggKi87IH07CiAJCTgzNjAz
NDlGMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM2MDM0OUQxQUNCMzRE
NjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi87IH07CiAJCTgzNjAz
NEEwMUFDQjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNjAzNDlFMUFDQjM0RDYw
MDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuaCAqLzsgfTsKKwkJODM2RUVCODAx
QkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtMb2FkTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM2RUVCN0YxQkU5RUM5RTAwNkI0QjgyIC8qIE5l
dHdvcmtMb2FkTWFjLm1tICovOyB9OwogCQk4MzcyREIyNTFBNjc0QzhGMDBDNjk3QzUgLyogV0tQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI0MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTgzNzJEQjI4MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5jcHAgKi87IH07CiAJCTgzNzJEQjI5MUE2NzU2MjgwMEM2OTdDNSAvKiBX
ZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKQEAgLTExODgsNyArMTE4OSwxMiBAQAog
CQk4Mzg5MUI2OTFBNjhCRUJDMDAzMEYzODYgLyogX1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM4OTFC
NjgxQTY4QkVCQzAwMzBGMzg2IC8qIF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4Mzg5MUI2QzFB
NjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzODkxQjZBMUE2OEMzMEIwMDMwRjM4
NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovOyB9OwogCQk4Mzg5MUI2RDFBNjhDMzBC
MDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Mzg5MUI2QjFBNjhDMzBCMDAzMEYzODYgLyog
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW0gKi87IH07CisJCTgzOTE0OTY0MUJFQTgzODUwMEQy
RDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM5MTQ5NjIxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdv
cmtMb2FkUGFyYW1ldGVycy5jcHAgKi87IH07CisJCTgzOTE0OTY1MUJFQTgzODUwMEQyRDk1MyAv
KiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgzOTE0OTYzMUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBh
cmFtZXRlcnMuaCAqLzsgfTsKKwkJODM5OTAyMDIxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtM
b2FkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgz
OTkwMUZGMUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgKi87IH07CisJCTgzOTkw
MjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODM5OTAxRkUxQkU5QTAxQjAwMEYzNjUzIC8qIE5l
dHdvcmtMb2FkLmggKi87IH07CiAJCTgzQkRDQ0I5MUFDNUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgzQkRDQ0I4MUFDNUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0
aWNzLmNwcCAqLzsgfTsKKwkJODNENDU0RDcxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtMb2Fk
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCAqLzsgfTsKIAkJ
ODQ0Nzc4NTMxNzZGQ0MwODAwQ0RDN0JCIC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdE1l
ZGlhVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODQ0Nzc4NTExNzZGQ0FDMTAwQ0RDN0JCIC8qIEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdE1l
ZGlhVHlwZS5oICovOyB9OwogCQk4NjgxNjBEMDE4NzY0NTU3MDAyMUU3OUQgLyogV2luZG93U2Vy
dmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2ODE2MENGMTg3NjQ1MzcwMDIxRTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9u
Lm1tICovOyB9OwogCQk4NkU2N0EyNTE5MTBCOUQxMDAwMDRBQjcgLyogUHJvY2Vzc1Rocm90dGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFNjdB
MjExOTBGNDExODAwMDA0QUI3IC8qIFByb2Nlc3NUaHJvdHRsZXIuaCAqLzsgfTsKQEAgLTM0MDgs
NiArMzQxNCw3IEBACiAJCTgzNEIyNTEwMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVT
dGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNo
ZVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM2MDM0OUQxQUNC
MzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzYwMzQ5RTFBQ0IzNEQ2MDA2MjY1NDkgLyog
V2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4MzZFRUI3RjFCRTlFQzlFMDA2QjRCODIgLyogTmV0d29ya0xvYWRNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrTG9hZE1hYy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjQxQTY3NEM4RjAwQzY5N0M1IC8qIFdL
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0
MTYsNyArMzQyMywxMiBAQAogCQk4Mzg5MUI2ODFBNjhCRUJDMDAzMEYzODYgLyogX1dLRGlhZ25v
c3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBf
V0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTgzODkxQjZBMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2QjFBNjhDMzBCMDAzMEYz
ODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODM5MTQ5NjIxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2Fk
UGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3
b3JrTG9hZFBhcmFtZXRlcnMuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODM5MTQ5NjMxQkVB
ODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaDsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0xvYWQuaDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtMb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzOTkwMUZG
MUJFOUEwMUIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrTG9hZC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrTG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzQkRDQ0I4MUFD
NUZEQjYwMDNGNjQ0MSAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQgLyogTmV0
d29ya0xvYWRDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29y
a0xvYWRDbGllbnQuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0NDc3ODUxMTc2RkNBQzEwMENEQzdCQiAv
KiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHRNZWRpYVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2ODE2MENEMTg3NjNENEIwMDIxRTc5RCAv
KiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdpbmRvd1NlcnZlckNv
bm5lY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4MTYwQ0YxODc2NDUz
NzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTU5OSw2ICs1NjExLDExIEBACiAJCQkJNTEzQTE2NDkxNjMwQTlCRjAwNUQ3RDIyIC8q
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQk1MTNBMTY0QTE2MzBB
OUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywKIAkJCQk1
MTNBMTY0QjE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4gKi8sCisJCQkJODM5OTAxRkYxQkU5QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtM
b2FkLmNwcCAqLywKKwkJCQk4Mzk5MDFGRTFCRTlBMDFCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQu
aCAqLywKKwkJCQk4M0Q0NTRENjFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQu
aCAqLywKKwkJCQk4MzkxNDk2MjFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0
ZXJzLmNwcCAqLywKKwkJCQk4MzkxNDk2MzFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzLmggKi8sCiAJCQkJNTEwQ0M3REYxNjEzOEUyOTAwRDAzRUQzIC8qIE5ldHdvcmtQ
cm9jZXNzLmNwcCAqLywKIAkJCQk1MTBDQzdFMDE2MTM4RTI5MDBEMDNFRDMgLyogTmV0d29ya1By
b2Nlc3MuaCAqLywKIAkJCQk1MUE4QTYxNzE2MjdGNUJCMDAwRDkwRTkgLyogTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW4gKi8sCkBAIC01NjE5LDYgKzU2MzYsNyBAQAogCQkJCUUxN0FFMkMxMTZC
OUMxMzkwMDFDNDJGMSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtQcm9jZXNzLnNiLmluICov
LAogCQkJCTUxNjdFRTlFMTcwMzc3QkYwMDc2ODFDQSAvKiBOZXR3b3JrRGlza0NhY2hlTW9uaXRv
ci5oICovLAogCQkJCTUxNjdFRTlGMTcwMzc3QkYwMDc2ODFDQSAvKiBOZXR3b3JrRGlza0NhY2hl
TW9uaXRvci5tbSAqLywKKwkJCQk4MzZFRUI3RjFCRTlFQzlFMDA2QjRCODIgLyogTmV0d29ya0xv
YWRNYWMubW0gKi8sCiAJCQkJNTFBOEE2MTUxNjI3RjNGOTAwMEQ5MEU5IC8qIE5ldHdvcmtQcm9j
ZXNzTWFjLm1tICovLAogCQkJCTUxRTNCNjdFMTZGMjY2QjMwMDk5NjhEQyAvKiBOZXR3b3JrUmVz
b3VyY2VMb2FkZXJNYWMubW0gKi8sCiAJCQkJRTFCNzg0NzIxNjNGMjUzRTAwMDdCNjkyIC8qIFJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tICovLApAQCAtNzY0Myw2ICs3NjYxLDcgQEAKIAkJCQkz
NzYzMTFGRDFBM0ZCNUY3MDA1QTJFNTEgLyogX1dLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjMxMUZFMUEzRkI2MDAwMDVBMkU1MSAvKiBfV0tTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uVHlwZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTAw
MkQ0NDE5NkIzMzg5MDBCOUFENDQgLyogX1dLU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4Mzk5MDIwMzFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBMDAyRDQzMTk2QjMzNzAwMEI5QUQ0NCAvKiBfV0tTZXNzaW9uU3RhdGVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ2QjM3MUIxOEE5NjdBRDAwNDJBRTgwIC8qIF9X
S1RodW1ibmFpbFZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUNFNjRFMThBREJGRjAwMEU0
Q0E3NiAvKiBfV0tUaHVtYm5haWxWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtNzkx
MCw2ICs3OTI5LDcgQEAKIAkJCQkxQThFRjRDQjEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29u
dHJvbGxlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThFRjk2RjEyNTJBRjZCMDBGNzA2
N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBMTc5NzgwMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9h
ZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzRjhDOTExNzNBRjUyRDAwN0I3RjM5IC8q
IFBsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUVGQ0MxMjExRDAxRjk2
MDA4MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNENjEw
MjEzQTdDQzJBMDBGOTVENEUgLyogUGx1Z2luTW9kdWxlSW5mby5oIGluIEhlYWRlcnMgKi8sCkBA
IC03OTYyLDYgKzc5ODIsNyBAQAogCQkJCTFBQUI0QThEMTI5NkYwQTIwMDIzOTUyRiAvKiBTYW5k
Ym94RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUU1NTJDNTE2QUUwNjVGMDA0RUQ2
NTMgLyogU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MzFDMUMxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9s
bGluZ05vZGVJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzOTE0OTY1MUJFQTgzODUwMEQyRDk1
MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDEzMDU0
MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxRDEzMDU2MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMTc5MDg4RjE2OUJBQTZBMDA2OTA0QzcgLyogU2VjSXRlbVNoaW0u
aCBpbiBIZWFkZXJzICovLApAQCAtOTUyOSw2ICs5NTUwLDcgQEAKIAkJCQlCQzAzMkRBNTEwRjQz
N0QxMDA1OEMxNUEgLyogQXJndW1lbnREZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
MDMyREE3MTBGNDM3RDEwMDU4QzE1QSAvKiBBcmd1bWVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzU5QzRBNTgxOEI4MTE3NDAwN0JEQ0I2IC8qIEFzc2lzdGVkTm9kZUluZm9ybWF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTgzOTkwMjAyMUJFOUEwMkIwMDBGMzY1MyAvKiBO
ZXR3b3JrTG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTVFNzcyNzE4M0RENkY2MDAwNzIw
M0YgLyogQXN5bmNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUU5NjZDMTEyRkFG
NTcwMDZCQ0MyNCAvKiBBdHRhY2htZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTMxNzM1
MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCkBA
IC05NTQ3LDYgKzk1NjksNyBAQAogCQkJCTlGNTRGODhGMTY0ODhFODcwMDdERjgxQSAvKiBDaGls
ZFByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUZBRUMzQjFCMDY1NzY4MDAwOUM0
RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxNTEzQzY2MTY2RUFCQjIwMDE0OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk4MzkxNDk2NDFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJh
bWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkE0QjBFMTU4NkEyMjQwMDkwQzlFOSAv
KiBDb2xvclNwYWNlRGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNkY5RkI3MTFFMTQwODUw
MERCMTM3MSAvKiBDb21tYW5kTGluZVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3QkVD
NEUwMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLm1tIGlu
IFNvdXJjZXMgKi8sCkBAIC05ODQxLDYgKzk4NjQsNyBAQAogCQkJCTRBM0NDMThDMTlCMDY0MTUw
MEQxNEFFRiAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0RTg2NDkyMUIxNjc1MDEwMEM4MkY0MCAvKiBWZXJzaW9uQ2hlY2tzLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkRBRjRGRkIxQjYzNjE4MTAwNjAxM0Q2IC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MzZFRUI4MDFCRTlFQzlFMDA2QjRC
ODIgLyogTmV0d29ya0xvYWRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREY5NTkzQjE4QTQy
NDEyMDA5Nzg1QTEgLyogVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkQxMjVDNUYxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlck1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJEMUI1RDVEMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3
R2VzdHVyZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264826</attachid>
            <date>2015-11-04 16:41:21 -0800</date>
            <delta_ts>2015-11-04 16:55:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150898-20151104164023.patch</filename>
            <type>text/plain</type>
            <size>2221</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjFiMTc5Yjc4N2QyNjg3
NWZjMmFmYTY4MjE4YzVhNWQ2ODM1NDg2Yi4uZmY0YWRjN2Y3ODBhMjgyOTRkZDk3Mjg0YTU3ZDRl
Y2Y5ZjY1N2MyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIyIEBACiAyMDE1LTExLTA0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgUmVncmVzc2lvbihyMTkyMDM4
KTogQ3Jhc2ggaW4gflNhbmRib3hFeHRlbnNpb24oKQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwODk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgYXJlIHNlZWluZyBhIGNvdXBsZSBvZiBjcmFzaGVz
IHVuZGVyIH5TYW5kYm94RXh0ZW5zaW9uKCkgb24gdGhlIGJvdHMKKyAgICAgICAgYWZ0ZXIgflNh
bmRib3hFeHRlbnNpb24oKS4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSBTYW5kQm94RXh0ZW5zaW9u
IGlzCisgICAgICAgIHN0aWxsIGluIHVzZSAodXNlQ291bnQgPiAwKSB3aGVuIGRlc3Ryb3llZC4g
VGhpcyBoYXBwZW5zIGR1ZSB0byBhIGJ1ZworICAgICAgICBpbiBzZXREZWZlcnNMb2FkaW5nKCkg
dGhhdCBjb3VsZCBjYXVzZSB0aGUgbG9hZCB0byBnZXQgc3RhcnRlZCBtb3JlCisgICAgICAgIHRo
YW4gb25jZSBhbmQgdGh1cyB0aGUgU2FuZGJveEV4dGVuc2lvbiB0byBiZSBjb25zdW1lZCBtb3Jl
IHRoYW4gb25jZS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2V0RGVm
ZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29u
c3VtZVNhbmRib3hFeHRlbnNpb25zKToKKworMjAxNS0xMS0wNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgorCiAgICAgICAgIFtXSzJdIEV4dHJhY3QgbmV0d29ya2luZyBjb2RlIG91
dCBvZiBOZXR3b3JrUmVzb3VyY2VMb2FkZXIgY2xhc3MgdG8gaW1wcm92ZSByZXVzYWJpbGl0eQog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwODk4CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCmluZGV4IDg1ZDQyMTEzMGEzZmZjZWZkMzE0MzRiMmFmMDVkOGFjOTk1N2Qz
ZTguLjk1ZWFhMWMyNmNkZDlkYzczMWE4NThhZmEwOGUzZDE0NjAxZjlhZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVy
LmNwcApAQCAtMTg0LDcgKzE4NCwxMCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fZGVmZXJz
TG9hZGluZyA9IGRlZmVyczsKIAotICAgIG1fbmV0d29ya0xvYWQtPnNldERlZmVyc0xvYWRpbmco
ZGVmZXJzKTsKKyAgICBpZiAobV9uZXR3b3JrTG9hZCkgeworICAgICAgICBtX25ldHdvcmtMb2Fk
LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICBpZiAoIW1fZGVmZXJzTG9hZGluZykKICAgICAgICAgc3RhcnQoKTsKQEAgLTUyNCw2ICs1Mjcs
OCBAQCBJUEM6OkNvbm5lY3Rpb24qIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24oKQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29uc3VtZVNhbmRi
b3hFeHRlbnNpb25zKCkKIHsKKyAgICBBU1NFUlQoIW1fZGlkQ29uc3VtZVNhbmRib3hFeHRlbnNp
b25zKTsKKwogICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogbV9wYXJhbWV0ZXJzLnJlcXVlc3RC
b2R5U2FuZGJveEV4dGVuc2lvbnMpCiAgICAgICAgIGV4dGVuc2lvbi0+Y29uc3VtZSgpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>