<?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>182578</bug_id>
          
          <creation_ts>2018-02-07 13:35:05 -0800</creation_ts>
          <short_desc>[Curl] Unify logic of ResourceHandleCurlDelegate into ResourceHandle</short_desc>
          <delta_ts>2018-02-16 13:40:31 -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>WebCore Misc.</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>117300</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>basuke</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1397274</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-07 13:35:05 -0800</bug_when>
    <thetext>ResourceHandleCurlDelegate was created for migration to the CurlRequest classes. Every features required by NetworkLoadTask are moved to CurlRequest class and remainings are ResourceHandle related logic. It&apos;s time to merge back to ResourceHandle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397615</commentid>
    <comment_count>1</comment_count>
      <attachid>333397</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-08 11:44:02 -0800</bug_when>
    <thetext>Created attachment 333397
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397623</commentid>
    <comment_count>2</comment_count>
      <attachid>333400</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-08 11:53:13 -0800</bug_when>
    <thetext>Created attachment 333400
Another try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397652</commentid>
    <comment_count>3</comment_count>
      <attachid>333410</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-08 12:38:26 -0800</bug_when>
    <thetext>Created attachment 333410
Fix break of other port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398167</commentid>
    <comment_count>4</comment_count>
      <attachid>333537</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-09 17:06:00 -0800</bug_when>
    <thetext>Created attachment 333537
WIP redesign classes

With Alex&apos;s advice, I restructured classes and made no need to implement interface directy on ResourceHandle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398168</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-09 17:07:03 -0800</bug_when>
    <thetext>Attachment 333537 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.cpp:47:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.cpp:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.h:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
ERROR: Suppressing further [whitespace/carriage_return] reports for this file.
ERROR: Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.h:45:  The parameter name &quot;handle&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.h:51:  The parameter name &quot;response&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 80 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398171</commentid>
    <comment_count>6</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-09 17:10:11 -0800</bug_when>
    <thetext>One of the goal with this patch is to make WinCairo port looks same with other ports. We use Mac port as a reference for task separation. 

WebCoreResourceHandleAsOperationQueueDelegate =&gt; CurlResourceHandleDelegate

We have our dedicated scheduler which handle thread handling, so CurlResourceHandleDelegate is much simpler than Mac&apos;s one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398371</commentid>
    <comment_count>7</comment_count>
      <attachid>333601</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-12 09:57:15 -0800</bug_when>
    <thetext>Created attachment 333601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1398710</commentid>
    <comment_count>8</comment_count>
      <attachid>333709</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-13 11:21:45 -0800</bug_when>
    <thetext>Created attachment 333709
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399517</commentid>
    <comment_count>9</comment_count>
      <attachid>333709</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-02-15 10:46:24 -0800</bug_when>
    <thetext>Comment on attachment 333709
PATCH

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

&gt; Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.cpp:93
&gt; +    for (auto header : response.headers) {

const auto&amp; header

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:342
&gt; +        return std::pair&lt;String, String&gt;(&quot;&quot;, &quot;&quot;);

If you really need empty String which is non-null internally, use WTF::emptyString()

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:519
&gt; +        mediaType = &quot;text/plain&quot;;

It should be ASCIILiteral(&quot;text/plain&quot;)

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:525
&gt; +        charset = &quot;US-ASCII&quot;;

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399551</commentid>
    <comment_count>10</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-15 11:36:52 -0800</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #9)
&gt; Comment on attachment 333709 [details]
&gt; PATCH
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=333709&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.cpp:93
&gt; &gt; +    for (auto header : response.headers) {
&gt; 
&gt; const auto&amp; header

right.

 
&gt; &gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:342
&gt; &gt; +        return std::pair&lt;String, String&gt;(&quot;&quot;, &quot;&quot;);
&gt; 
&gt; If you really need empty String which is non-null internally, use
&gt; WTF::emptyString()

Good point. These empty strings are not required to be set, so I will make them std::optional.


&gt; &gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:519
&gt; &gt; +        mediaType = &quot;text/plain&quot;;
&gt; 
&gt; It should be ASCIILiteral(&quot;text/plain&quot;)
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:525
&gt; &gt; +        charset = &quot;US-ASCII&quot;;
&gt; 
&gt; Ditto


Got them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399552</commentid>
    <comment_count>11</comment_count>
      <attachid>333926</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-15 11:43:31 -0800</bug_when>
    <thetext>Created attachment 333926
Fix reviewed points</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399553</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-02-15 11:45:58 -0800</bug_when>
    <thetext>Attachment 333926 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/CurlRequest.h:97:  The parameter name &quot;client&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1399561</commentid>
    <comment_count>13</comment_count>
      <attachid>333927</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-02-15 11:56:48 -0800</bug_when>
    <thetext>Created attachment 333927
Fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400006</commentid>
    <comment_count>14</comment_count>
      <attachid>333927</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-16 13:39:44 -0800</bug_when>
    <thetext>Comment on attachment 333927
Fix style

Clearing flags on attachment: 333927

Committed r228577: &lt;https://trac.webkit.org/changeset/228577&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400007</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-16 13:39:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400009</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-16 13:40:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/37616884&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333397</attachid>
            <date>2018-02-08 11:44:02 -0800</date>
            <delta_ts>2018-02-08 11:53:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>182578.diff</filename>
            <type>text/plain</type>
            <size>47903</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzJiNWExMjg1Ni4uYjY0MWQ5ODNmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxOC0wMi0wOCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFVuaWZ5IGxvZ2ljIG9mIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlIGludG8gUmVzb3VyY2VIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlJ3Mgbm8gYmVo
YXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vQ3VybC5jbWFrZToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpSZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmNhbmNlbGxlZE9yQ2xpZW50bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmN1cmxEaWRTZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVDb29raWVI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkUmVj
ZWl2ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3VybERpZENv
bXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkRmFpbFdp
dGhFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXRE
ZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpnZXRDcmVkZW50aWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZXN0YXJ0UmVxdWVzdFdpdGhDcmVkZW50aWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtQ29u
dGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6Y29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2hvdWxkUmVkaXJlY3RBc0dFVCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZS5oOiBSZW1vdmVkLgorCiAyMDE4LTAyLTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBtX3RpbWVPcmlnaW4g
aW4gUGVyZm9ybWFuY2U6OlBlcmZvcm1hbmNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtl
CmluZGV4IDczYzAxNGYxNWMxLi5iNTVmM2M0N2FiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJs
LmNtYWtlCkBAIC0yNSw3ICsyNSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3JDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1N5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50Q3VybC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCA2MjE1NDA3MTRmNi4uNzY1NDlkYTEzM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmgKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlm
CiAKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJsUmVxdWVzdENsaWVudC5oIgorI2VuZGlm
CisKICNpZiBVU0UoU09VUCkKIHR5cGVkZWYgc3RydWN0IF9HVGxzQ2VydGlmaWNhdGUgR1Rsc0Nl
cnRpZmljYXRlOwogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwpAQCAt
OTIsNyArOTYsMTUgQEAgY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwogY2xhc3MgVGltZXI7CiAKLWNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlZkNv
dW50ZWQ8UmVzb3VyY2VIYW5kbGU+LCBwdWJsaWMgQXV0aGVudGljYXRpb25DbGllbnQgeworI2lm
IFVTRShDVVJMKQorY2xhc3MgQ3VybFJlcXVlc3Q7CisjZW5kaWYKKworY2xhc3MgUmVzb3VyY2VI
YW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT4sIHB1YmxpYyBBdXRoZW50
aWNhdGlvbkNsaWVudAorI2lmIFVTRShDVVJMKQorLCBwdWJsaWMgQ3VybFJlcXVlc3RDbGllbnQK
KyNlbmRpZgorewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNo
b3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYg
ZGF0YSk7CkBAIC0xMDMsNiArMTE1LDExIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflJlc291cmNlSGFuZGxlKCk7CiAKKyNpZiBVU0UoQ1VSTCkKKyAgICB2b2lkIHJl
ZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT46OnJlZigpOyB9CisgICAg
dm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT46OmRlcmVm
KCk7IH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJ
T04pCiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYsIFJlc291cmNl
UmVzcG9uc2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYp
OwogI2VuZGlmCkBAIC0yNzgsNiArMjk1LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0aW1lb3V0
RmlyZWQoKTsKICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisgICAgUmVmPEN1cmxSZXF1ZXN0PiBj
cmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGN1cmxEaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgQ3VybFJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2
ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRD
b21wbGV0ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3Qg
UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOworCisgICAgYm9vbCBjYW5jZWxsZWRPckNsaWVudGxl
c3MoKTsKKyAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBi
b29sIHNob3VsZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBjcm9z
c09yaWdpbik7CisgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoKTsKKyAgICB2b2lkIGNvbnRpbnVl
QWZ0ZXJXaWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYpOworCisgICAgc3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPiBnZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYsIGJvb2wpOwor
ICAgIHZvaWQgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjb25zdCBTdHJpbmcmIHVzZXIs
IGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOworCisgICAgdm9pZCBoYW5kbGVEYXRhVVJMKCk7Cisj
ZW5kaWYKKwogICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVybmFsOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmgKaW5kZXggNTE4Y2Y5YzljYmYuLjhlYTNkODFkNzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAt
MzcsMTMgKzM3LDggQEAKICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgogI2Vu
ZGlmCiAKLSNpZiBVU0UoQ1VSTCkgJiYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KICNpZiBVU0UoQ1VSTCkKLSNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIkN1cmxSZXF1ZXN0
LmgiCiAjZW5kaWYKIAogI2lmIFVTRShTT1VQKQpAQCAtNzYsNiArNzEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgICAgICwgbV9jbGllbnQoY2xpZW50KQog
ICAgICAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICwgbV9jdXJyZW50UmVx
dWVzdChyZXF1ZXN0Lmlzb2xhdGVkQ29weSgpKQogICAgICAgICAsIG1fbGFzdEhUVFBNZXRob2Qo
cmVxdWVzdC5odHRwTWV0aG9kKCkpCiAgICAgICAgICwgbV9wYXJ0aXRpb24ocmVxdWVzdC5jYWNo
ZVBhcnRpdGlvbigpKQogICAgICAgICAsIG1fZGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKQpA
QCAtMTMyLDggKzEyOCwxMyBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNl
c3Npb25SZWY+IG1fc3RvcmFnZVNlc3Npb247CiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKLSAgICBS
ZWZQdHI8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+IG1fZGVsZWdhdGU7CiAgICAgUmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1
ZXN0OworICAgIGJvb2wgbV9jYW5jZWxsZWQgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fcmVk
aXJlY3RDb3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2F1dGhGYWlsdXJlQ291bnQgeyAwIH07
CisgICAgYm9vbCBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyB7IGZhbHNlIH07CisgICAg
UmVmUHRyPEN1cmxSZXF1ZXN0PiBtX2N1cmxSZXF1ZXN0OwogI2VuZGlmCiAKICNpZiBVU0UoU09V
UCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q2FjaGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ2FjaGVNYW5hZ2VyLmNwcAppbmRleCA5YWNkMTk1ZTI4NS4uYThkZWI5ODhlMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENh
Y2hlTWFuYWdlci5jcHAKQEAgLTE5OSwxMCArMTk5LDYgQEAgdm9pZCBDdXJsQ2FjaGVNYW5hZ2Vy
OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUmIGpvYiwgUmVzb3VyY2VSZXNwb25z
ZSYKICAgICBpZiAobV9kaXNhYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCogZCA9IGpvYi5nZXRJbnRlcm5hbCgpOwotICAgIGlmICghZC0+bV9kZWxl
Z2F0ZS0+aGFzSGFuZGxlKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGNvbnN0IFN0cmluZyYg
dXJsID0gam9iLmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpOwogCiAgICAgcmVtb3ZlQ2Fj
aGVFbnRyeUNsaWVudCh1cmwsICZqb2IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAppbmRleCAyMDgx
NTQ0NGIxYy4uYjYzYjNlZjdkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCkBAIC0zMiwyMCAr
MzIsMjggQEAKIAogI2lmIFVTRShDVVJMKQogCisjaW5jbHVkZSAiQ29va2llSmFyQ3VybC5oIgog
I2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCisjaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdl
ci5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogewotICAgIGlmIChtX2RlbGVn
YXRlKQotICAgICAgICBtX2RlbGVnYXRlLT5yZWxlYXNlSGFuZGxlKCk7CisgICAgaWYgKG1fY3Vy
bFJlcXVlc3QpCisgICAgICAgIG1fY3VybFJlcXVlc3QtPnNldENsaWVudChudWxscHRyKTsKIH0K
IAogUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpID0gZGVmYXVsdDsKQEAgLTcxLDE1
ICs3OSwxNjQgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBkLT5tX2RlbGVnYXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlKHRoaXMpKTsKLSAgICBkLT5tX2RlbGVnYXRlLT5zdGFydCgpOwor
ICAgIGF1dG8gY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWwoZC0+bV9jdXJyZW50UmVxdWVzdCwg
ZmFsc2UpOworCisgICAgZC0+bV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1f
Y3VycmVudFJlcXVlc3QpOworICAgIGQtPm1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRl
bnRpYWwuZmlyc3QsIGNyZWRlbnRpYWwuc2Vjb25kKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5z
dGFydCgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNh
bmNlbCgpCiB7Ci0gICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUt
PmNhbmNlbCgpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBkLT5tX2NhbmNl
bGxlZCA9IHRydWU7CisKKyAgICBpZiAoIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIGQtPm1f
Y3VybFJlcXVlc3QtPmNhbmNlbCgpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpjYW5jZWxs
ZWRPckNsaWVudGxlc3MoKQoreworICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gIWNsaWVudCgpOworfQorCitSZWY8Q3VybFJlcXVlc3Q+
IFJlc291cmNlSGFuZGxlOjpjcmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEN1cmxDYWNoZSA6
IGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9uCisgICAgZC0+bV9hZGRlZENhY2hl
VmFsaWRhdGlvbkhlYWRlcnMgPSBmYWxzZTsKKworICAgIGJvb2wgaGFzQ2FjaGVIZWFkZXJzID0g
cmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTW9k
aWZpZWRTaW5jZSkgfHwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhl
YWRlck5hbWU6OklmTm9uZU1hdGNoKTsKKyAgICBpZiAoIWhhc0NhY2hlSGVhZGVycykgeworICAg
ICAgICBhdXRvJiBjYWNoZSA9IEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpOworICAgICAg
ICBVUkwgY2FjaGVVcmwgPSByZXF1ZXN0LnVybCgpOworICAgICAgICBjYWNoZVVybC5yZW1vdmVG
cmFnbWVudElkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAoY2FjaGUuaXNDYWNoZWQoY2FjaGVV
cmwpKSB7CisgICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KGNhY2hlVXJsLCB0
aGlzKTsKKworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGNhY2hlLnJlcXVl
c3RIZWFkZXJzKGNhY2hlVXJsKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFk
ZXJGaWVsZChlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKKworICAgICAgICAgICAgZC0+bV9hZGRl
ZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
Q3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQgc2hvdWxkU3VzcGVuZCA9IGQtPm1fZGVmZXJzTG9h
ZGluZyA/IEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kOjpZZXMgOiBDdXJsUmVxdWVzdDo6U2hv
dWxkU3VzcGVuZDo6Tm87CisgICAgcmV0dXJuIEN1cmxSZXF1ZXN0OjpjcmVhdGUocmVxdWVzdCwg
dGhpcywgc2hvdWxkU3VzcGVuZCwgQ3VybFJlcXVlc3Q6OkVuYWJsZU11bHRpcGFydDo6WWVzKTsK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3VybERpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcg
bG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVu
dGxlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xpZW50KCktPmRpZFNlbmREYXRhKHRo
aXMsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKworc3RhdGljIHZvaWQgaGFu
ZGxlQ29va2llSGVhZGVycyhjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHN0
YXRpYyBjb25zdCBhdXRvIHNldENvb2tpZUhlYWRlciA9ICJzZXQtY29va2llOiAiOworCisgICAg
YXV0byYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKTsKKyAgICBjb25zdCBDb29raWVKYXJDdXJsJiBjb29raWVKYXIg
PSBkZWZhdWx0U3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFnZSgpOworICAgIGZvciAoYXV0byBo
ZWFkZXIgOiByZXNwb25zZS5oZWFkZXJzKSB7CisgICAgICAgIGlmIChoZWFkZXIuc3RhcnRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKHNldENvb2tpZUhlYWRlcikpIHsKKyAgICAgICAgICAgIFN0cmlu
ZyBzZXRDb29raWVTdHJpbmcgPSBoZWFkZXIucmlnaHQoaGVhZGVyLmxlbmd0aCgpIC0gc3RybGVu
KHNldENvb2tpZUhlYWRlcikpOworICAgICAgICAgICAgY29va2llSmFyLnNldENvb2tpZXNGcm9t
SFRUUFJlc3BvbnNlKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiwgcmVzcG9uc2UudXJsLCBzZXRDb29r
aWVTdHJpbmcpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpj
dXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25z
ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghZC0+bV9kZWZl
cnNMb2FkaW5nKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZC0+bV9yZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVjZWl2ZWRS
ZXNwb25zZSk7CisKKyAgICBpZiAoZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgZC0+bV9yZXNw
b25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKGQtPm1fY3VybFJlcXVlc3QtPmdl
dE5ldHdvcmtMb2FkTWV0cmljcygpKTsKKworICAgIGhhbmRsZUNvb2tpZUhlYWRlcnMocmVjZWl2
ZWRSZXNwb25zZSk7CisKKyAgICBpZiAoZC0+bV9yZXNwb25zZS5zaG91bGRSZWRpcmVjdCgpKSB7
CisgICAgICAgIHdpbGxTZW5kUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGQtPm1fcmVzcG9uc2UuaXNVbmF1dGhvcml6ZWQoKSkgeworICAgICAgICBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UocmVjZWl2ZWRSZXNwb25zZSwgZC0+bV9hdXRoRmFp
bHVyZUNvdW50LCBkLT5tX3Jlc3BvbnNlLCB0aGlzKTsKKyAgICAgICAgZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7CisgICAgICAgIGQtPm1fYXV0aEZhaWx1cmVD
b3VudCsrOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGQtPm1fcmVzcG9uc2Uu
aXNOb3RNb2RpZmllZCgpKSB7CisgICAgICAgIFVSTCBjYWNoZVVybCA9IGQtPm1fcmVzcG9uc2Uu
dXJsKCk7CisgICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworCisg
ICAgICAgIGlmIChDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDYWNoZWRSZXNwb25z
ZShjYWNoZVVybCwgZC0+bV9yZXNwb25zZSkpIHsKKyAgICAgICAgICAgIGlmIChkLT5tX2FkZGVk
Q2FjaGVWYWxpZGF0aW9uSGVhZGVycykgeworICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNl
dEhUVFBTdGF0dXNUZXh0KCJPSyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVJlc3BvbnNlKCp0
aGlzLCBkLT5tX3Jlc3BvbnNlKTsKKworICAgIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZVJl
c3BvbnNlKGQtPm1fcmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSB7CisgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB9
KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZURhdGEoKnRoaXMsIGJ1ZmZl
ci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZm
ZXIodGhpcywgV1RGTW92ZShidWZmZXIpLCBidWZmZXItPnNpemUoKSk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VIYW5kbGU6OmN1cmxEaWRDb21wbGV0ZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0
RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhkLT5tX2N1cmxSZXF1ZXN0LT5nZXROZXR3b3Jr
TG9hZE1ldHJpY3MoKSk7CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRG
aW5pc2hMb2FkaW5nKCp0aGlzKTsKKyAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlz
KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3Qg
UmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGYWlsKCp0aGlzKTsKKyAg
ICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCByZXNvdXJjZUVycm9yKTsKIH0KIAogI2lmIE9TKFdJ
TkRPV1MpCkBAIC0xMTUsOCArMjcyLDE4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
U2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCi0gICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnNl
dERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKyAgICBpZiAoZGVmZXJzID09IGQtPm1fZGVmZXJzTG9h
ZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgZC0+bV9kZWZlcnNMb2FkaW5nID0gZGVmZXJz
OworCisgICAgaWYgKCFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoZC0+bV9kZWZlcnNMb2FkaW5nKQorICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdXNwZW5k
KCk7CisgICAgZWxzZQorICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5yZXN1bWUoKTsKIH0KIAog
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQpAQCAtMTM3
LDkgKzMwNCw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAgICAgIGlmIChjaGFsbGVu
Z2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCiAgICAgICAgICAg
ICB1cmxUb1N0b3JlID0gY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOwogICAgICAg
ICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRp
dGlvbiwgY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCB1cmxUb1N0b3Jl
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICAgICAgZC0+
bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRp
YWwucGFzc3dvcmQoKSk7CisKKyAgICAgICAgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChj
cmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKIAogICAgICAgICBkLT5t
X3VzZXIgPSBTdHJpbmcoKTsKICAgICAgICAgZC0+bV9wYXNzID0gU3RyaW5nKCk7CkBAIC0xNjQs
OCArMzMwLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICAgICAgICAgICAgICAgICAgICAg
Q3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRp
b24sIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdlLmZh
aWx1cmVSZXNwb25zZSgpLnVybCgpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgICAgICAgICAgZC0+bV9kZWxlZ2F0
ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dv
cmQoKSk7CisgICAgICAgICAgICAgICAgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjcmVk
ZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwMCw4ICszNjUsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGQtPm1fZGVs
ZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRp
YWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOworICAgIHJlc3RhcnRSZXF1ZXN0V2l0
aENyZWRlbnRpYWwoY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAK
ICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CkBAIC0yMTYsMTAgKzM4MCw3IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlh
bChjb25zdCBBdXRoZW50aWNhCiAgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogCiAgICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UoZC0+bV9yZXNwb25zZSksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgIGQtPm1f
ZGVsZWdhdGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgIGNvbnRpbnVl
QWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKICAgICB9KTsKIH0KIApAQCAtMjQ2LDE4ICs0MDcs
NzggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCitzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IFJlc291cmNlSGFuZGxlOjpnZXRDcmVkZW50
aWFsKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCByZWRpcmVjdCkKK3sKKyAgICAvLyBt
X3VzZXIvbV9wYXNzIGFyZSBjcmVkZW50aWFscyBnaXZlbiBtYW51YWxseSwgZm9yIGluc3RhbmNl
LCBieSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBYTUxIdHRwUmVxdWVzdC5vcGVuKCkuCisgICAg
U3RyaW5nIHBhcnRpdGlvbiA9IHJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsKKworICAgIGlmIChz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7CisgICAgICAgIGlmIChkLT5tX3VzZXIuaXNF
bXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3Nl
IHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCisg
ICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwg
YXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KKyAgICAgICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRp
YWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHBh
cnRpdGlvbiwgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIXJlZGlyZWN0KSB7
CisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBr
bm93biBmb3IgdGhlIFVSTCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscworICAgICAgICAgICAg
Ly8gYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0LiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGlt
cGxlbWVudCBsb2dvdXQgYnkgc2VuZGluZyBhbgorICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVl
c3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVudGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1l
ZGlhdGVseSAoc28gdGhhdAorICAgICAgICAgICAgLy8gYW4gYXV0aGVudGljYXRpb24gZGlhbG9n
IGRvZXNuJ3QgcG9wIHVwKS4KKyAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0
Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9uLCBDcmVkZW50aWFsKGQtPm1fdXNlciwg
ZC0+bV9wYXNzLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgcmVxdWVzdC51cmwoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdXNlciA9IGQtPm1fdXNlcjsKKyAgICBTdHJp
bmcgcGFzc3dvcmQgPSBkLT5tX3Bhc3M7CisKKyAgICBpZiAoIWQtPm1faW5pdGlhbENyZWRlbnRp
YWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHVzZXIgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnVz
ZXIoKTsKKyAgICAgICAgcGFzc3dvcmQgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3Jk
KCk7CisgICAgfQorCisgICAgaWYgKHVzZXIuaXNFbXB0eSgpICYmIHBhc3N3b3JkLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4oIiIsICIiKTsKKwor
ICAgIHJldHVybiBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KHVzZXIsIHBhc3N3b3JkKTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjb25z
dCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIGlmICghZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGJvb2wgaXNTeW5jUmVxdWVzdCA9IGQtPm1fY3VybFJlcXVlc3QtPmlz
U3luY1JlcXVlc3QoKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKKyAgICBkLT5t
X2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0
ID0gY3JlYXRlQ3VybFJlcXVlc3QoZC0+bV9jdXJyZW50UmVxdWVzdCk7CisgICAgZC0+bV9jdXJs
UmVxdWVzdC0+c2V0VXNlclBhc3ModXNlciwgcGFzc3dvcmQpOworICAgIGQtPm1fY3VybFJlcXVl
c3QtPnN0YXJ0KGlzU3luY1JlcXVlc3QpOworfQorCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9y
PGNoYXI+JiBkYXRhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKKyAgICBhdXRv
IGxvY2FsUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgU3luY2hyb25vdXNMb2FkZXJDbGllbnQgY2xp
ZW50OwogICAgIGJvb2wgZGVmZXJzTG9hZGluZyA9IGZhbHNlOwogICAgIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmID0gdHJ1ZTsKICAgICBib29sIHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmID0g
dHJ1ZTsKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBS
ZXNvdXJjZUhhbmRsZShjb250ZXh0LCByZXF1ZXN0LCAmY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBz
aG91bGRDb250ZW50U25pZmYsIHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmKSk7CiAKLSAgICBo
YW5kbGUtPmQtPm1fZGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGUoaGFuZGxlLmdldCgpKSk7Ci0gICAgaGFuZGxlLT5kLT5tX2RlbGVnYXRlLT5kaXNwYXRj
aFN5bmNocm9ub3VzSm9iKCk7CisgICAgaWYgKGxvY2FsUmVxdWVzdC51cmwoKS5wcm90b2NvbElz
RGF0YSgpKSB7CisgICAgICAgIGhhbmRsZS0+aGFuZGxlRGF0YVVSTCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gSWYgZGVmZXJzTG9hZGluZyBpcyB0cnVlIGFuZCB3ZSBjYWxs
IGN1cmxfZWFzeV9wZXJmb3JtCisgICAgLy8gb24gYSBwYXVzZWQgaGFuZGxlLCBsaWJjVVJMIHdv
dWxkIGRvIHRoZSB0cmFuc2ZlciBhbnl3YXkKKyAgICAvLyBhbmQgd2Ugd291bGQgYXNzZXJ0IHNv
IGZvcmNlIGRlZmVyc0xvYWRpbmcgdG8gYmUgZmFsc2UuCisgICAgaGFuZGxlLT5kLT5tX2RlZmVy
c0xvYWRpbmcgPSBmYWxzZTsKKworICAgIGhhbmRsZS0+ZC0+bV9jdXJsUmVxdWVzdCA9IGhhbmRs
ZS0+Y3JlYXRlQ3VybFJlcXVlc3QobG9jYWxSZXF1ZXN0KTsKKyAgICBoYW5kbGUtPmQtPm1fY3Vy
bFJlcXVlc3QtPnN0YXJ0KHRydWUpOwogCiAgICAgZXJyb3IgPSBjbGllbnQuZXJyb3IoKTsKICAg
ICBkYXRhLnN3YXAoY2xpZW50Lm11dGFibGVEYXRhKCkpOwpAQCAtMjY4LDggKzQ4OSwxNzMgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Db250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2
ZVJlc3BvbnNlKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKGQt
Pm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnBsYXRmb3JtQ29udGludWVTeW5j
aHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZl
UmVzcG9uc2UoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVBZnRlckRpZFJl
Y2VpdmVSZXNwb25zZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8v
IGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhbmNlbCB0aGUgbG9hZC4KKyAgICBp
ZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkgfHwgIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAg
IHJldHVybjsKKworICAgIGQtPm1fY3VybFJlcXVlc3QtPmNvbXBsZXRlRGlkUmVjZWl2ZVJlc3Bv
bnNlKCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFJlZGlyZWN0QXNHRVQoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGNyb3NzT3JpZ2luKQoreworICAgIGlm
IChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCByZXF1ZXN0Lmh0dHBNZXRob2QoKSA9
PSAiSEVBRCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcmVxdWVzdC51cmwo
KS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGQtPm1fcmVzcG9uc2UuaXNTZWVPdGhlcigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmICgoZC0+bV9yZXNwb25zZS5pc01vdmVkUGVybWFuZW50bHkoKSB8fCBkLT5tX3Jlc3Bv
bnNlLmlzRm91bmQoKSkgJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIikpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNyb3NzT3JpZ2luICYmIChyZXF1ZXN0Lmh0dHBN
ZXRob2QoKSA9PSAiREVMRVRFIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVlc3QoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heFJl
ZGlyZWN0cyA9IDIwOworCisgICAgaWYgKGQtPm1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJl
Y3RzKSB7CisgICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3I6Omh0
dHBFcnJvcihDVVJMRV9UT09fTUFOWV9SRURJUkVDVFMsIGQtPm1fcmVzcG9uc2UudXJsKCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBsb2NhdGlvbiA9IGQtPm1fcmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbik7CisgICAgVVJM
IG5ld1VSTCA9IFVSTChkLT5tX3Jlc3BvbnNlLnVybCgpLCBsb2NhdGlvbik7CisgICAgYm9vbCBj
cm9zc09yaWdpbiA9ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoZC0+bV9maXJzdFJlcXVl
c3QudXJsKCksIG5ld1VSTCk7CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IGQt
Pm1fZmlyc3RSZXF1ZXN0OworICAgIG5ld1JlcXVlc3Quc2V0VVJMKG5ld1VSTCk7CisKKyAgICBp
ZiAoc2hvdWxkUmVkaXJlY3RBc0dFVChuZXdSZXF1ZXN0LCBjcm9zc09yaWdpbikpIHsKKyAgICAg
ICAgbmV3UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAgbmV3UmVxdWVzdC5z
ZXRIVFRQQm9keShudWxscHRyKTsKKyAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBDb250ZW50
VHlwZSgpOworICAgIH0KKworICAgIC8vIFNob3VsZCBub3Qgc2V0IFJlZmVyZXIgYWZ0ZXIgYSBy
ZWRpcmVjdCBmcm9tIGEgc2VjdXJlIHJlc291cmNlIHRvIG5vbi1zZWN1cmUgb25lLgorICAgIGlm
ICghbmV3VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhuZXdSZXF1ZXN0Lmh0
dHBSZWZlcnJlcigpLCAiaHR0cHMiKSAmJiBjb250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKKyAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBSZWZl
cnJlcigpOworCisgICAgZC0+bV91c2VyID0gbmV3VVJMLnVzZXIoKTsKKyAgICBkLT5tX3Bhc3Mg
PSBuZXdVUkwucGFzcygpOworICAgIG5ld1JlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKwor
ICAgIGlmIChjcm9zc09yaWdpbikgeworICAgICAgICAvLyBJZiB0aGUgbmV0d29yayBsYXllciBj
YXJyaWVzIG92ZXIgYXV0aGVudGljYXRpb24gaGVhZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1
ZXN0CisgICAgICAgIC8vIGluIGEgY3Jvc3Mtb3JpZ2luIHJlZGlyZWN0LCB3ZSB3YW50IHRvIGNs
ZWFyIHRob3NlIGhlYWRlcnMgaGVyZS4gCisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQXV0
aG9yaXphdGlvbigpOworICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUE9yaWdpbigpOworICAg
IH0KKworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2VDb3B5ID0gZC0+bV9yZXNwb25zZTsK
KyAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0QXN5bmModGhpcywgV1RGTW92ZShuZXdSZXF1
ZXN0KSwgV1RGTW92ZShyZXNwb25zZUNvcHkpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSAoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkgeworICAgICAgICBjb250aW51
ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOworICAgIH0pOworfQorCit2
b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IC8vIHdpbGxTZW5kUmVxdWVzdCBtaWdodCBjYW5jZWwgdGhlIGxvYWQuCisgICAgaWYgKGNhbmNl
bGxlZE9yQ2xpZW50bGVzcygpIHx8ICFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47
CisKKyAgICBkLT5tX2N1cnJlbnRSZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KTsKKworICAgIGJv
b2wgaXNTeW5jUmVxdWVzdCA9IGQtPm1fY3VybFJlcXVlc3QtPmlzU3luY1JlcXVlc3QoKTsKKyAg
ICBkLT5tX2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zZXRD
bGllbnQobnVsbHB0cik7CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVl
c3QoZC0+bV9jdXJyZW50UmVxdWVzdCk7CisKKyAgICBpZiAocHJvdG9jb2xIb3N0QW5kUG9ydEFy
ZUVxdWFsKGQtPm1fY3VycmVudFJlcXVlc3QudXJsKCksIGQtPm1fcmVzcG9uc2UudXJsKCkpKSB7
CisgICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWwoZC0+bV9jdXJyZW50UmVx
dWVzdCwgdHJ1ZSk7CisgICAgICAgIGQtPm1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRl
bnRpYWwuZmlyc3QsIGNyZWRlbnRpYWwuc2Vjb25kKTsKKyAgICB9CisKKyAgICBkLT5tX2N1cmxS
ZXF1ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6
aGFuZGxlRGF0YVVSTCgpCit7CisgICAgQVNTRVJUKGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNEYXRhKCkpOworICAgIFN0cmluZyB1cmwgPSBkLT5tX2ZpcnN0UmVxdWVzdC51cmwo
KS5zdHJpbmcoKTsKKworICAgIEFTU0VSVChjbGllbnQoKSk7CisKKyAgICBhdXRvIGluZGV4ID0g
dXJsLmZpbmQoJywnKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKKyAgICAgICAgY2xp
ZW50KCktPmNhbm5vdFNob3dVUkwodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBTdHJpbmcgbWVkaWFUeXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOworICAgIFN0
cmluZyBkYXRhID0gdXJsLnN1YnN0cmluZyhpbmRleCArIDEpOworICAgIGF1dG8gb3JpZ2luYWxT
aXplID0gZGF0YS5sZW5ndGgoKTsKKworICAgIGJvb2wgYmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNX
aXRoSWdub3JpbmdBU0NJSUNhc2UoIjtiYXNlNjQiKTsKKyAgICBpZiAoYmFzZTY0KQorICAgICAg
ICBtZWRpYVR5cGUgPSBtZWRpYVR5cGUubGVmdChtZWRpYVR5cGUubGVuZ3RoKCkgLSA3KTsKKwor
ICAgIGlmIChtZWRpYVR5cGUuaXNFbXB0eSgpKQorICAgICAgICBtZWRpYVR5cGUgPSAidGV4dC9w
bGFpbiI7CisKKyAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFU
eXBlKG1lZGlhVHlwZSk7CisgICAgU3RyaW5nIGNoYXJzZXQgPSBleHRyYWN0Q2hhcnNldEZyb21N
ZWRpYVR5cGUobWVkaWFUeXBlKTsKKworICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKKyAgICAg
ICAgY2hhcnNldCA9ICJVUy1BU0NJSSI7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
OworICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXNwb25zZS5zZXRU
ZXh0RW5jb2RpbmdOYW1lKGNoYXJzZXQpOworICAgIHJlc3BvbnNlLnNldFVSTChkLT5tX2ZpcnN0
UmVxdWVzdC51cmwoKSk7CisKKyAgICBpZiAoYmFzZTY0KSB7CisgICAgICAgIGRhdGEgPSBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7CisgICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZShX
VEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0g
eworICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAg
ICB9KTsKKworICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNs
aWVudCB0byBiZSBkZWxldGVkLgorICAgICAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBvdXQ7CisgICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEsIG91
dCwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAwKQorICAg
ICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKG91dC5kYXRhKCksIG91dC5zaXplKCkpLCBvcmlnaW5hbFNpemUpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKGNoYXJzZXQp
OworICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIGVuY29kaW5n
KTsKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgICAgICBjb250aW51ZUFm
dGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIGRpZFJl
Y2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCisgICAg
ICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVuY29k
aW5nLmVuY29kZShkYXRhLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50aXRpZXMp
OworICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLnNpemUoKSkKKyAgICAgICAgICAgICAgICBj
bGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZN
b3ZlKGVuY29kZWREYXRhKSksIG9yaWdpbmFsU2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjNDQ2NTU2ZmUuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBOQVZFUiBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaCIKLQotI2lmIFVTRShDVVJMKQotCi0j
aW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKLSNpbmNsdWRlICJDb29raWVKYXJD
dXJsLmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJDdXJsQ2Fj
aGVNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKLSNpbmNsdWRlICJIVFRQUGFy
c2Vycy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNs
dWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSkKLSAgICA6IG1faGFuZGxlKGhhbmRsZSkKLSAgICAsIG1fZmly
c3RSZXF1ZXN0KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBt
X2N1cnJlbnRSZXF1ZXN0KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNvbGF0ZWRDb3B5KCkpCi0g
ICAgLCBtX3Nob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGhhbmRsZS0+c2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UoKSkKLSAgICAsIG1fdXNlcihoYW5kbGUtPmdldEludGVybmFsKCktPm1fdXNl
ci5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fcGFzcyhoYW5kbGUtPmdldEludGVybmFsKCktPm1f
cGFzcy5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1faW5pdGlhbENyZWRlbnRpYWwoaGFuZGxlLT5n
ZXRJbnRlcm5hbCgpLT5tX2luaXRpYWxDcmVkZW50aWFsKQotICAgICwgbV9kZWZlcnNMb2FkaW5n
KGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9kZWZlcnNMb2FkaW5nKQotewotCi19Ci0KLVJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp+UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoKQotewot
ICAgIGlmIChtX2N1cmxSZXF1ZXN0KQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQo
bnVsbHB0cik7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6Omhhc0hhbmRs
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9oYW5kbGU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUoKQotewotICAgIG1faGFuZGxlID0gbnVs
bHB0cjsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c3RhcnQoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBhdXRvIGNyZWRlbnRpYWwgPSBnZXRD
cmVkZW50aWFsKG1fY3VycmVudFJlcXVlc3QsIGZhbHNlKTsKLQotICAgIG1fY3VybFJlcXVlc3Qg
PSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLSAgICBtX2N1cmxSZXF1ZXN0
LT5zZXRVc2VyUGFzcyhjcmVkZW50aWFsLmZpcnN0LCBjcmVkZW50aWFsLnNlY29uZCk7Ci0gICAg
bV9jdXJsUmVxdWVzdC0+c3RhcnQoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6Y2FuY2VsKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgcmVs
ZWFzZUhhbmRsZSgpOwotCi0gICAgaWYgKCFtX2N1cmxSZXF1ZXN0KQotICAgICAgICBtX2N1cmxS
ZXF1ZXN0LT5jYW5jZWwoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotCi0gICAgaWYgKGRlZmVycyA9PSBtX2RlZmVyc0xvYWRpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKLQotICAgIGlmICghbV9jdXJsUmVx
dWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGVmZXJzTG9hZGluZykKLSAgICAg
ICAgbV9jdXJsUmVxdWVzdC0+c3VzcGVuZCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXJsUmVx
dWVzdC0+cmVzdW1lKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNl
dEF1dGhlbnRpY2F0aW9uKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX2N1cmxSZXF1
ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGlzU3luY1JlcXVlc3QgPSBtX2N1cmxS
ZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci0g
ICAgbV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIpOwotCi0gICAgbV9jdXJsUmVxdWVz
dCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QpOwotICAgIG1fY3VybFJlcXVl
c3QtPnNldFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zdGFy
dChpc1N5bmNSZXF1ZXN0KTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpCi17Ci0gICAgaWYgKG1fY3VycmVudFJlcXVlc3QudXJs
KCkucHJvdG9jb2xJc0RhdGEoKSkgewotICAgICAgICBoYW5kbGVEYXRhVVJMKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiBkZWZlcnNMb2FkaW5nIGlzIHRydWUgYW5kIHdl
IGNhbGwgY3VybF9lYXN5X3BlcmZvcm0KLSAgICAvLyBvbiBhIHBhdXNlZCBoYW5kbGUsIGxpYmNV
Ukwgd291bGQgZG8gdGhlIHRyYW5zZmVydCBhbnl3YXkKLSAgICAvLyBhbmQgd2Ugd291bGQgYXNz
ZXJ0IHNvIGZvcmNlIGRlZmVyc0xvYWRpbmcgdG8gYmUgZmFsc2UuCi0gICAgbV9kZWZlcnNMb2Fk
aW5nID0gZmFsc2U7Ci0KLSAgICBtX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9j
dXJyZW50UmVxdWVzdCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQodHJ1ZSk7Ci19Ci0KLVJl
ZjxDdXJsUmVxdWVzdD4gUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNyZWF0ZUN1cmxSZXF1
ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotCi0gICAgLy8gQ3VybENhY2hlIDogYXBwZW5kIGFkZGl0aW9uYWwgY2FjaGUgaW5mb3Jt
YXRpb24KLSAgICBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IGZhbHNlOwotCi0gICAg
Ym9vbCBoYXNDYWNoZUhlYWRlcnMgPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlu
cyhIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmllZFNpbmNlKSB8fCByZXF1ZXN0Lmh0dHBIZWFkZXJG
aWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gpOwotICAgIGlmICgh
aGFzQ2FjaGVIZWFkZXJzKSB7Ci0gICAgICAgIGF1dG8mIGNhY2hlID0gQ3VybENhY2hlTWFuYWdl
cjo6c2luZ2xldG9uKCk7Ci0gICAgICAgIFVSTCBjYWNoZVVybCA9IHJlcXVlc3QudXJsKCk7Ci0g
ICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgICAgIGlm
IChjYWNoZS5pc0NhY2hlZChjYWNoZVVybCkpIHsKLSAgICAgICAgICAgIGNhY2hlLmFkZENhY2hl
RW50cnlDbGllbnQoY2FjaGVVcmwsIG1faGFuZGxlKTsKLQotICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBlbnRyeSA6IGNhY2hlLnJlcXVlc3RIZWFkZXJzKGNhY2hlVXJsKSkKLSAgICAgICAg
ICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZChlbnRyeS5rZXksIGVudHJ5LnZhbHVl
KTsKLQotICAgICAgICAgICAgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQgc2hvdWxk
U3VzcGVuZCA9IG1fZGVmZXJzTG9hZGluZyA/IEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kOjpZ
ZXMgOiBDdXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZDo6Tm87Ci0gICAgcmV0dXJuIEN1cmxSZXF1
ZXN0OjpjcmVhdGUocmVxdWVzdCwgdGhpcywgc2hvdWxkU3VzcGVuZCwgQ3VybFJlcXVlc3Q6OkVu
YWJsZU11bHRpcGFydDo6WWVzKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCkKLXsKLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiAhbV9oYW5kbGUtPmNsaWVudCgpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkU2VuZERhdGEodW5zaWduZWQg
bG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2Vu
dCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbmNlbGxlZE9y
Q2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hhbmRsZS0+Y2xpZW50KCkt
PmRpZFNlbmREYXRhKG1faGFuZGxlLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZUNvb2tpZUhlYWRlcnMoY29uc3QgQ3VybFJlc3BvbnNlJiBy
ZXNwb25zZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBzZXRDb29raWVIZWFkZXIgPSAic2V0
LWNvb2tpZTogIjsKLQotICAgIGF1dG8mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgY29uc3QgQ29va2ll
SmFyQ3VybCYgY29va2llSmFyID0gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2Uo
KTsKLSAgICBmb3IgKGF1dG8gaGVhZGVyIDogcmVzcG9uc2UuaGVhZGVycykgewotICAgICAgICBp
ZiAoaGVhZGVyLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzZXRDb29raWVIZWFkZXIpKSB7
Ci0gICAgICAgICAgICBTdHJpbmcgc2V0Q29va2llU3RyaW5nID0gaGVhZGVyLnJpZ2h0KGhlYWRl
ci5sZW5ndGgoKSAtIHN0cmxlbihzZXRDb29raWVIZWFkZXIpKTsKLSAgICAgICAgICAgIGNvb2tp
ZUphci5zZXRDb29raWVzRnJvbUhUVFBSZXNwb25zZShkZWZhdWx0U3RvcmFnZVNlc3Npb24sIHJl
c3BvbnNlLnVybCwgc2V0Q29va2llU3RyaW5nKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBDdXJsUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fZGVmZXJzTG9hZGluZyk7Ci0KLSAgICBpZiAoY2FuY2Vs
bGVkT3JDbGllbnRsZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFuZGxlLT5nZXRJ
bnRlcm5hbCgpLT5tX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNl
KTsKLQotICAgIGlmIChtX2N1cmxSZXF1ZXN0KQotICAgICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJu
YWwoKS0+bV9yZXNwb25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKG1fY3VybFJl
cXVlc3QtPmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKLQotICAgIGhhbmRsZUNvb2tpZUhlYWRl
cnMocmVjZWl2ZWRSZXNwb25zZSk7Ci0KLSAgICBpZiAocmVzcG9uc2UoKS5zaG91bGRSZWRpcmVj
dCgpKSB7Ci0gICAgICAgIHdpbGxTZW5kUmVxdWVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKHJlc3BvbnNlKCkuaXNVbmF1dGhvcml6ZWQoKSkgewotICAgICAgICBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UocmVjZWl2ZWRSZXNwb25zZSwgbV9hdXRoRmFp
bHVyZUNvdW50LCByZXNwb25zZSgpLCBtX2hhbmRsZSk7Ci0gICAgICAgIG1faGFuZGxlLT5kaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKTsKLSAgICAgICAgbV9hdXRo
RmFpbHVyZUNvdW50Kys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9oYW5k
bGUtPmNsaWVudCgpKSB7Ci0gICAgICAgIGlmIChyZXNwb25zZSgpLmlzTm90TW9kaWZpZWQoKSkg
ewotICAgICAgICAgICAgVVJMIGNhY2hlVXJsID0gbV9jdXJyZW50UmVxdWVzdC51cmwoKTsKLSAg
ICAgICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgICAg
ICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q2FjaGVkUmVzcG9uc2Uo
Y2FjaGVVcmwsIHJlc3BvbnNlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYWRkZWRDYWNo
ZVZhbGlkYXRpb25IZWFkZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlKCkuc2V0
SFRUUFN0YXR1c0NvZGUoMjAwKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UoKS5zZXRI
VFRQU3RhdHVzVGV4dCgiT0siKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRSZWNl
aXZlUmVzcG9uc2UoKm1faGFuZGxlLCByZXNwb25zZSgpKTsKLQotICAgICAgICBhdXRvIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCptX2hhbmRsZSk7Ci0gICAgICAgIG1faGFuZGxlLT5kaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSgpKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJl
Y2VpdmVSZXNwb25zZSgpOwotICAgICAgICB9KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+
JiYgYnVmZmVyKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoY2Fu
Y2VsbGVkT3JDbGllbnRsZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEN1cmxDYWNoZU1h
bmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVEYXRhKCptX2hhbmRsZSwgYnVmZmVyLT5kYXRh
KCksIGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVC
dWZmZXIobV9oYW5kbGUsIFdURk1vdmUoYnVmZmVyKSwgYnVmZmVyLT5zaXplKCkpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkQ29tcGxldGUoKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNz
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2N1cmxSZXF1ZXN0KQotICAgICAgICBt
X2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xv
YWRNZXRyaWNzKG1fY3VybFJlcXVlc3QtPmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKLQotICAg
IGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6c2lu
Z2xldG9uKCkuZGlkRmluaXNoTG9hZGluZygqbV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRsZS0+
Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcobV9oYW5kbGUpOwotICAgIH0KLX0KLQotdm9pZCBS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3QgUmVz
b3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGYWlsKCptX2hhbmRsZSk7Ci0g
ICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKG1faGFuZGxlLCByZXNvdXJjZUVycm9yKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZl
UmVzcG9uc2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBjb250aW51
ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OnBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGNvbnRpbnVlQWZ0ZXJEaWRS
ZWNlaXZlUmVzcG9uc2UoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
Y29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIC8vIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhbmNl
bCB0aGUgbG9hZC4KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkgfHwgIW1fY3VybFJl
cXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VybFJlcXVlc3QtPmNvbXBsZXRlRGlk
UmVjZWl2ZVJlc3BvbnNlKCk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OnNob3VsZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29s
IGNyb3NzT3JpZ2luKQotewotICAgIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8
fCByZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiSEVBRCIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlc3BvbnNlKCkuaXNTZWVPdGhlcigpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgocmVzcG9uc2UoKS5pc01vdmVkUGVybWFuZW50
bHkoKSB8fCByZXNwb25zZSgpLmlzRm91bmQoKSkgJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09
ICJQT1NUIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGNyb3NzT3JpZ2luICYm
IChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiREVMRVRFIikpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjp3aWxsU2VuZFJlcXVlc3QoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50IG1heFJlZGlyZWN0cyA9IDIwOwotCi0gICAgaWYgKG1fcmVk
aXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3RzKSB7Ci0gICAgICAgIG1faGFuZGxlLT5jbGllbnQo
KS0+ZGlkRmFpbChtX2hhbmRsZSwgUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKENVUkxFX1RPT19N
QU5ZX1JFRElSRUNUUywgcmVzcG9uc2UoKS51cmwoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgU3RyaW5nIGxvY2F0aW9uID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OkxvY2F0aW9uKTsKLSAgICBVUkwgbmV3VVJMID0gVVJMKG1faGFuZGxlLT5n
ZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlLnVybCgpLCBsb2NhdGlvbik7Ci0gICAgYm9vbCBjcm9z
c09yaWdpbiA9ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobV9maXJzdFJlcXVlc3QudXJs
KCksIG5ld1VSTCk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IG1fZmlyc3RS
ZXF1ZXN0OwotICAgIG5ld1JlcXVlc3Quc2V0VVJMKG5ld1VSTCk7Ci0KLSAgICBpZiAoc2hvdWxk
UmVkaXJlY3RBc0dFVChuZXdSZXF1ZXN0LCBjcm9zc09yaWdpbikpIHsKLSAgICAgICAgbmV3UmVx
dWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICAgICAgbmV3UmVxdWVzdC5zZXRIVFRQQm9k
eShudWxscHRyKTsKLSAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBDb250ZW50VHlwZSgpOwot
ICAgIH0KLQotICAgIC8vIFNob3VsZCBub3Qgc2V0IFJlZmVyZXIgYWZ0ZXIgYSByZWRpcmVjdCBm
cm9tIGEgc2VjdXJlIHJlc291cmNlIHRvIG5vbi1zZWN1cmUgb25lLgotICAgIGlmICghbmV3VVJM
LnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhuZXdSZXF1ZXN0Lmh0dHBSZWZlcnJl
cigpLCAiaHR0cHMiKSAmJiBtX2hhbmRsZS0+Y29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpCi0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQUmVm
ZXJyZXIoKTsKLQotICAgIG1fdXNlciA9IG5ld1VSTC51c2VyKCk7Ci0gICAgbV9wYXNzID0gbmV3
VVJMLnBhc3MoKTsKLSAgICBuZXdSZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0KLSAgICBp
ZiAoY3Jvc3NPcmlnaW4pIHsKLSAgICAgICAgLy8gSWYgdGhlIG5ldHdvcmsgbGF5ZXIgY2Fycmll
cyBvdmVyIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdAot
ICAgICAgICAvLyBpbiBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCwgd2Ugd2FudCB0byBjbGVhciB0
aG9zZSBoZWFkZXJzIGhlcmUuIAotICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUEF1dGhvcml6
YXRpb24oKTsKLSAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKLSAgICB9Ci0K
LSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlQ29weSA9IHJlc3BvbnNlKCk7Ci0gICAgbV9o
YW5kbGUtPmNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3RBc3luYyhtX2hhbmRsZSwgV1RGTW92ZShu
ZXdSZXF1ZXN0KSwgV1RGTW92ZShyZXNwb25zZUNvcHkpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSAoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkgewotICAgICAgICBj
b250aW51ZVdpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3Qo
UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgY29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVBZnRlcldpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICAvLyB3aWxsU2VuZFJlcXVlc3QgbWlnaHQgY2FuY2VsIHRoZSBs
b2FkLgotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSB8fCAhbV9jdXJsUmVxdWVzdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVz
dCk7Ci0KLSAgICBib29sIGlzU3luY1JlcXVlc3QgPSBtX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1
ZXN0KCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+
c2V0Q2xpZW50KG51bGxwdHIpOwotCi0gICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1
ZXN0KG1fY3VycmVudFJlcXVlc3QpOwotCi0gICAgaWYgKHByb3RvY29sSG9zdEFuZFBvcnRBcmVF
cXVhbChtX2N1cnJlbnRSZXF1ZXN0LnVybCgpLCByZXNwb25zZSgpLnVybCgpKSkgewotICAgICAg
ICBhdXRvIGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKG1fY3VycmVudFJlcXVlc3QsIHRydWUp
OwotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50aWFsLmZpcnN0LCBj
cmVkZW50aWFsLnNlY29uZCk7Ci0gICAgfQotCi0gICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQoaXNT
eW5jUmVxdWVzdCk7Ci19Ci0KLVJlc291cmNlUmVzcG9uc2UmIFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlOjpyZXNwb25zZSgpCi17Ci0gICAgcmV0dXJuIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgp
LT5tX3Jlc3BvbnNlOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5k
bGVEYXRhVVJMKCkKLXsKLSAgICBBU1NFUlQobV9maXJzdFJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
c0RhdGEoKSk7Ci0gICAgU3RyaW5nIHVybCA9IG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygp
OwotCi0gICAgQVNTRVJUKG1faGFuZGxlLT5jbGllbnQoKSk7Ci0KLSAgICBhdXRvIGluZGV4ID0g
dXJsLmZpbmQoJywnKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAgICAgbV9o
YW5kbGUtPmNsaWVudCgpLT5jYW5ub3RTaG93VVJMKG1faGFuZGxlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFN0cmluZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3RyaW5nKDUsIGluZGV4
IC0gNSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAg
YXV0byBvcmlnaW5hbFNpemUgPSBkYXRhLmxlbmd0aCgpOwotCi0gICAgYm9vbCBiYXNlNjQgPSBt
ZWRpYVR5cGUuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiO2Jhc2U2NCIpOwotICAgIGlmIChi
YXNlNjQpCi0gICAgICAgIG1lZGlhVHlwZSA9IG1lZGlhVHlwZS5sZWZ0KG1lZGlhVHlwZS5sZW5n
dGgoKSAtIDcpOwotCi0gICAgaWYgKG1lZGlhVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIG1lZGlh
VHlwZSA9ICJ0ZXh0L3BsYWluIjsKLQotICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUobWVkaWFUeXBlKTsKLSAgICBTdHJpbmcgY2hhcnNldCA9IGV4dHJh
Y3RDaGFyc2V0RnJvbU1lZGlhVHlwZShtZWRpYVR5cGUpOwotCi0gICAgaWYgKGNoYXJzZXQuaXNF
bXB0eSgpKQotICAgICAgICBjaGFyc2V0ID0gIlVTLUFTQ0lJIjsKLQotICAgIFJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2U7Ci0gICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwotICAg
IHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7Ci0gICAgcmVzcG9uc2Uuc2V0
VVJMKG1fZmlyc3RSZXF1ZXN0LnVybCgpKTsKLQotICAgIGlmIChiYXNlNjQpIHsKLSAgICAgICAg
ZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKLSAgICAgICAgbV9oYW5kbGUt
PmRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2Vp
dmVSZXNwb25zZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9u
c2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgotICAgICAgICBpZiAobV9o
YW5kbGUtPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAg
ICAgICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5l
d0xpbmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBtX2hhbmRsZS0+Y2xp
ZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG91
dC5kYXRhKCksIG91dC5zaXplKCkpLCBvcmlnaW5hbFNpemUpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKGNoYXJzZXQpOwotICAgICAgICBk
YXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIGVuY29kaW5nKTsKLSAgICAgICAg
bV9oYW5kbGUtPmRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgY29udGludWVBZnRl
ckRpZFJlY2VpdmVSZXNwb25zZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICAvLyBkaWRSZWNl
aXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgotICAgICAg
ICBpZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGVuY29kZWREYXRh
ID0gZW5jb2RpbmcuZW5jb2RlKGRhdGEsIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVuY29kZWRF
bnRpdGllcyk7Ci0gICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuc2l6ZSgpKQotICAgICAgICAg
ICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNpemUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAg
bV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlKTsKLX0KLQotc3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Z2V0Q3Jl
ZGVudGlhbChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgcmVkaXJlY3QpCi17Ci0gICAg
Ly8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0
YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgot
ICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7Ci0KLSAgICBp
ZiAobV9zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkgewotICAgICAgICBpZiAobV91c2VyLmlz
RW1wdHkoKSAmJiBtX3Bhc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBw
cmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAg
ICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFz
IGFsbG93ZWQgYnkgUkZDIDI2MTcuCi0gICAgICAgICAgICBtX2luaXRpYWxDcmVkZW50aWFsID0g
Q3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRp
b24sIHJlcXVlc3QudXJsKCkpOwotICAgICAgICB9IGVsc2UgaWYgKCFyZWRpcmVjdCkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24g
Zm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMKLSAgICAgICAgICAgIC8vIGJl
Zm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1l
bnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KLSAgICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdp
dGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRl
bHkgKHNvIHRoYXQKLSAgICAgICAgICAgIC8vIGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vz
bid0IHBvcCB1cCkuCi0gICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRl
bnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlvbiwgQ3JlZGVudGlhbChtX3VzZXIsIG1fcGFzcywg
Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgU3RyaW5nIHVzZXIgPSBtX3VzZXI7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0g
bV9wYXNzOwotCi0gICAgaWYgKCFtX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgewotICAg
ICAgICB1c2VyID0gbV9pbml0aWFsQ3JlZGVudGlhbC51c2VyKCk7Ci0gICAgICAgIHBhc3N3b3Jk
ID0gbV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpOwotICAgIH0KLQotICAgIGlmICh1c2Vy
LmlzRW1wdHkoKSAmJiBwYXNzd29yZC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdGQ6OnBh
aXI8U3RyaW5nLCBTdHJpbmc+KCIiLCAiIik7Ci0KLSAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmlu
ZywgU3RyaW5nPih1c2VyLCBwYXNzd29yZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmYmZmYTUzYmY5MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBOQVZFUiBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBVU0UoQ1VSTCkKLQotI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKLSNpbmNsdWRlICJD
dXJsUmVxdWVzdENsaWVudC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEN1cmxSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VIYW5k
bGU7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotCi1jbGFzcyBSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZT4sIHB1YmxpYyBDdXJsUmVxdWVzdENsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUqKTsKLSAgICB+UmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGUoKTsKLQotICAgIHZvaWQgcmVmKCkgb3ZlcnJpZGUgeyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZT46OnJlZigpOyB9Ci0g
ICAgdm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU+OjpkZXJlZigpOyB9Ci0KLSAgICBib29sIGhhc0hhbmRsZSgpIGNv
bnN0OwotICAgIHZvaWQgcmVsZWFzZUhhbmRsZSgpOwotCi0gICAgdm9pZCBzdGFydCgpOwotICAg
IHZvaWQgY2FuY2VsKCk7Ci0KLSAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAg
dm9pZCBzZXRBdXRoZW50aWNhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLQot
ICAgIHZvaWQgZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOwotCi0gICAgdm9pZCBjb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSgpOwotICAgIHZvaWQgcGxhdGZvcm1Db250aW51ZVN5bmNocm9ub3Vz
RGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0KLSAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KFJlc291cmNlUmVxdWVzdCYmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBDYWxsZWQgZnJvbSBtYWlu
IHRocmVhZC4KLSAgICBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpOwotCi0gICAgc3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPiBnZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYsIGJvb2wp
OwotCi0gICAgYm9vbCBjYW5jZWxsZWRPckNsaWVudGxlc3MoKTsKLQotICAgIFJlZjxDdXJsUmVx
dWVzdD4gY3JlYXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjdXJs
RGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY3VybERp
ZFJlY2VpdmVCdWZmZXIoUmVmPFNoYXJlZEJ1ZmZlcj4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
dXJsRGlkQ29tcGxldGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9y
KGNvbnN0IFJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY29udGludWVBZnRl
ckRpZFJlY2VpdmVSZXNwb25zZSgpOwotCi0gICAgYm9vbCBzaG91bGRSZWRpcmVjdEFzR0VUKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgY3Jvc3NPcmlnaW4pOwotICAgIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KCk7Ci0gICAgdm9pZCBjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmKTsKLQotICAgIHZvaWQgaGFuZGxlRGF0YVVSTCgpOwotCi0gICAgLy8gVXNl
ZCBieSBtYWluIHRocmVhZC4KLSAgICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7Ci0gICAgdW5z
aWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9OwotICAgIHVuc2lnbmVkIG1fcmVkaXJlY3RD
b3VudCB7IDAgfTsKLQotICAgIFJlc291cmNlUmVxdWVzdCBtX2ZpcnN0UmVxdWVzdDsKLSAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKLSAgICBib29sIG1fc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2U7Ci0gICAgU3RyaW5nIG1fdXNlcjsKLSAgICBTdHJpbmcgbV9wYXNzOwot
ICAgIENyZWRlbnRpYWwgbV9pbml0aWFsQ3JlZGVudGlhbDsKLSAgICBib29sIG1fZGVmZXJzTG9h
ZGluZzsKLSAgICBib29sIG1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzIHsgZmFsc2UgfTsK
LSAgICBSZWZQdHI8Q3VybFJlcXVlc3Q+IG1fY3VybFJlcXVlc3Q7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333400</attachid>
            <date>2018-02-08 11:53:13 -0800</date>
            <delta_ts>2018-02-08 12:38:26 -0800</delta_ts>
            <desc>Another try</desc>
            <filename>182578.diff</filename>
            <type>text/plain</type>
            <size>47903</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzJiNWExMjg1Ni4uYjY0MWQ5ODNmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxOC0wMi0wOCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFVuaWZ5IGxvZ2ljIG9mIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlIGludG8gUmVzb3VyY2VIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlJ3Mgbm8gYmVo
YXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vQ3VybC5jbWFrZToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpSZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmNhbmNlbGxlZE9yQ2xpZW50bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmN1cmxEaWRTZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVDb29raWVI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkUmVj
ZWl2ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3VybERpZENv
bXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkRmFpbFdp
dGhFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXRE
ZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpnZXRDcmVkZW50aWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZXN0YXJ0UmVxdWVzdFdpdGhDcmVkZW50aWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtQ29u
dGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6Y29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2hvdWxkUmVkaXJlY3RBc0dFVCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZS5oOiBSZW1vdmVkLgorCiAyMDE4LTAyLTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBtX3RpbWVPcmlnaW4g
aW4gUGVyZm9ybWFuY2U6OlBlcmZvcm1hbmNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtl
CmluZGV4IDczYzAxNGYxNWMxLi5iNTVmM2M0N2FiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJs
LmNtYWtlCkBAIC0yNSw3ICsyNSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3JDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1N5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50Q3VybC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCA2MjE1NDA3MTRmNi4uNzY1NDlkYTEzM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmgKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlm
CiAKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJsUmVxdWVzdENsaWVudC5oIgorI2VuZGlm
CisKICNpZiBVU0UoU09VUCkKIHR5cGVkZWYgc3RydWN0IF9HVGxzQ2VydGlmaWNhdGUgR1Rsc0Nl
cnRpZmljYXRlOwogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwpAQCAt
OTIsNyArOTYsMTUgQEAgY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwogY2xhc3MgVGltZXI7CiAKLWNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlZkNv
dW50ZWQ8UmVzb3VyY2VIYW5kbGU+LCBwdWJsaWMgQXV0aGVudGljYXRpb25DbGllbnQgeworI2lm
IFVTRShDVVJMKQorY2xhc3MgQ3VybFJlcXVlc3Q7CisjZW5kaWYKKworY2xhc3MgUmVzb3VyY2VI
YW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT4sIHB1YmxpYyBBdXRoZW50
aWNhdGlvbkNsaWVudAorI2lmIFVTRShDVVJMKQorLCBwdWJsaWMgQ3VybFJlcXVlc3RDbGllbnQK
KyNlbmRpZgorewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNo
b3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYg
ZGF0YSk7CkBAIC0xMDMsNiArMTE1LDExIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflJlc291cmNlSGFuZGxlKCk7CiAKKyNpZiBVU0UoQ1VSTCkKKyAgICB2b2lkIHJl
ZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT46OnJlZigpOyB9CisgICAg
dm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT46OmRlcmVm
KCk7IH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJ
T04pCiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYsIFJlc291cmNl
UmVzcG9uc2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYp
OwogI2VuZGlmCkBAIC0yNzgsNiArMjk1LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0aW1lb3V0
RmlyZWQoKTsKICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisgICAgUmVmPEN1cmxSZXF1ZXN0PiBj
cmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGN1cmxEaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgQ3VybFJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2
ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRD
b21wbGV0ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3Qg
UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOworCisgICAgYm9vbCBjYW5jZWxsZWRPckNsaWVudGxl
c3MoKTsKKyAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBi
b29sIHNob3VsZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBjcm9z
c09yaWdpbik7CisgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoKTsKKyAgICB2b2lkIGNvbnRpbnVl
QWZ0ZXJXaWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYpOworCisgICAgc3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPiBnZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYsIGJvb2wpOwor
ICAgIHZvaWQgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjb25zdCBTdHJpbmcmIHVzZXIs
IGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOworCisgICAgdm9pZCBoYW5kbGVEYXRhVVJMKCk7Cisj
ZW5kaWYKKwogICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVybmFsOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmgKaW5kZXggNTE4Y2Y5YzljYmYuLjhlYTNkODFkNzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAt
MzcsMTMgKzM3LDggQEAKICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgogI2Vu
ZGlmCiAKLSNpZiBVU0UoQ1VSTCkgJiYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KICNpZiBVU0UoQ1VSTCkKLSNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIkN1cmxSZXF1ZXN0
LmgiCiAjZW5kaWYKIAogI2lmIFVTRShTT1VQKQpAQCAtNzYsNiArNzEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgICAgICwgbV9jbGllbnQoY2xpZW50KQog
ICAgICAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICwgbV9jdXJyZW50UmVx
dWVzdChyZXF1ZXN0Lmlzb2xhdGVkQ29weSgpKQogICAgICAgICAsIG1fbGFzdEhUVFBNZXRob2Qo
cmVxdWVzdC5odHRwTWV0aG9kKCkpCiAgICAgICAgICwgbV9wYXJ0aXRpb24ocmVxdWVzdC5jYWNo
ZVBhcnRpdGlvbigpKQogICAgICAgICAsIG1fZGVmZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKQpA
QCAtMTMyLDggKzEyOCwxMyBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNl
c3Npb25SZWY+IG1fc3RvcmFnZVNlc3Npb247CiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKLSAgICBS
ZWZQdHI8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+IG1fZGVsZWdhdGU7CiAgICAgUmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1
ZXN0OworICAgIGJvb2wgbV9jYW5jZWxsZWQgeyBmYWxzZSB9OworICAgIHVuc2lnbmVkIG1fcmVk
aXJlY3RDb3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2F1dGhGYWlsdXJlQ291bnQgeyAwIH07
CisgICAgYm9vbCBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyB7IGZhbHNlIH07CisgICAg
UmVmUHRyPEN1cmxSZXF1ZXN0PiBtX2N1cmxSZXF1ZXN0OwogI2VuZGlmCiAKICNpZiBVU0UoU09V
UCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q2FjaGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ2FjaGVNYW5hZ2VyLmNwcAppbmRleCA5YWNkMTk1ZTI4NS4uYThkZWI5ODhlMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENh
Y2hlTWFuYWdlci5jcHAKQEAgLTE5OSwxMCArMTk5LDYgQEAgdm9pZCBDdXJsQ2FjaGVNYW5hZ2Vy
OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUmIGpvYiwgUmVzb3VyY2VSZXNwb25z
ZSYKICAgICBpZiAobV9kaXNhYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCogZCA9IGpvYi5nZXRJbnRlcm5hbCgpOwotICAgIGlmICghZC0+bV9kZWxl
Z2F0ZS0+aGFzSGFuZGxlKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGNvbnN0IFN0cmluZyYg
dXJsID0gam9iLmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpOwogCiAgICAgcmVtb3ZlQ2Fj
aGVFbnRyeUNsaWVudCh1cmwsICZqb2IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAppbmRleCAyMDgx
NTQ0NGIxYy4uYjYzYjNlZjdkNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCkBAIC0zMiwyMCAr
MzIsMjggQEAKIAogI2lmIFVTRShDVVJMKQogCisjaW5jbHVkZSAiQ29va2llSmFyQ3VybC5oIgog
I2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCisjaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdl
ci5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogewotICAgIGlmIChtX2RlbGVn
YXRlKQotICAgICAgICBtX2RlbGVnYXRlLT5yZWxlYXNlSGFuZGxlKCk7CisgICAgaWYgKG1fY3Vy
bFJlcXVlc3QpCisgICAgICAgIG1fY3VybFJlcXVlc3QtPnNldENsaWVudChudWxscHRyKTsKIH0K
IAogUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpID0gZGVmYXVsdDsKQEAgLTcxLDE1
ICs3OSwxNjQgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBkLT5tX2RlbGVnYXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlKHRoaXMpKTsKLSAgICBkLT5tX2RlbGVnYXRlLT5zdGFydCgpOwor
ICAgIGF1dG8gY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWwoZC0+bV9jdXJyZW50UmVxdWVzdCwg
ZmFsc2UpOworCisgICAgZC0+bV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1f
Y3VycmVudFJlcXVlc3QpOworICAgIGQtPm1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRl
bnRpYWwuZmlyc3QsIGNyZWRlbnRpYWwuc2Vjb25kKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5z
dGFydCgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNh
bmNlbCgpCiB7Ci0gICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUt
PmNhbmNlbCgpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBkLT5tX2NhbmNl
bGxlZCA9IHRydWU7CisKKyAgICBpZiAoIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIGQtPm1f
Y3VybFJlcXVlc3QtPmNhbmNlbCgpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpjYW5jZWxs
ZWRPckNsaWVudGxlc3MoKQoreworICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gIWNsaWVudCgpOworfQorCitSZWY8Q3VybFJlcXVlc3Q+
IFJlc291cmNlSGFuZGxlOjpjcmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIEN1cmxDYWNoZSA6
IGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9uCisgICAgZC0+bV9hZGRlZENhY2hl
VmFsaWRhdGlvbkhlYWRlcnMgPSBmYWxzZTsKKworICAgIGJvb2wgaGFzQ2FjaGVIZWFkZXJzID0g
cmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTW9k
aWZpZWRTaW5jZSkgfHwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhl
YWRlck5hbWU6OklmTm9uZU1hdGNoKTsKKyAgICBpZiAoIWhhc0NhY2hlSGVhZGVycykgeworICAg
ICAgICBhdXRvJiBjYWNoZSA9IEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpOworICAgICAg
ICBVUkwgY2FjaGVVcmwgPSByZXF1ZXN0LnVybCgpOworICAgICAgICBjYWNoZVVybC5yZW1vdmVG
cmFnbWVudElkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAoY2FjaGUuaXNDYWNoZWQoY2FjaGVV
cmwpKSB7CisgICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KGNhY2hlVXJsLCB0
aGlzKTsKKworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGNhY2hlLnJlcXVl
c3RIZWFkZXJzKGNhY2hlVXJsKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFk
ZXJGaWVsZChlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKKworICAgICAgICAgICAgZC0+bV9hZGRl
ZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
Q3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQgc2hvdWxkU3VzcGVuZCA9IGQtPm1fZGVmZXJzTG9h
ZGluZyA/IEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kOjpZZXMgOiBDdXJsUmVxdWVzdDo6U2hv
dWxkU3VzcGVuZDo6Tm87CisgICAgcmV0dXJuIEN1cmxSZXF1ZXN0OjpjcmVhdGUocmVxdWVzdCwg
dGhpcywgc2hvdWxkU3VzcGVuZCwgQ3VybFJlcXVlc3Q6OkVuYWJsZU11bHRpcGFydDo6WWVzKTsK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3VybERpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcg
bG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVu
dGxlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xpZW50KCktPmRpZFNlbmREYXRhKHRo
aXMsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKworc3RhdGljIHZvaWQgaGFu
ZGxlQ29va2llSGVhZGVycyhjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHN0
YXRpYyBjb25zdCBhdXRvIHNldENvb2tpZUhlYWRlciA9ICJzZXQtY29va2llOiAiOworCisgICAg
YXV0byYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZh
dWx0U3RvcmFnZVNlc3Npb24oKTsKKyAgICBjb25zdCBDb29raWVKYXJDdXJsJiBjb29raWVKYXIg
PSBkZWZhdWx0U3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFnZSgpOworICAgIGZvciAoYXV0byBo
ZWFkZXIgOiByZXNwb25zZS5oZWFkZXJzKSB7CisgICAgICAgIGlmIChoZWFkZXIuc3RhcnRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKHNldENvb2tpZUhlYWRlcikpIHsKKyAgICAgICAgICAgIFN0cmlu
ZyBzZXRDb29raWVTdHJpbmcgPSBoZWFkZXIucmlnaHQoaGVhZGVyLmxlbmd0aCgpIC0gc3RybGVu
KHNldENvb2tpZUhlYWRlcikpOworICAgICAgICAgICAgY29va2llSmFyLnNldENvb2tpZXNGcm9t
SFRUUFJlc3BvbnNlKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiwgcmVzcG9uc2UudXJsLCBzZXRDb29r
aWVTdHJpbmcpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpj
dXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25z
ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghZC0+bV9kZWZl
cnNMb2FkaW5nKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZC0+bV9yZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVjZWl2ZWRS
ZXNwb25zZSk7CisKKyAgICBpZiAoZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgZC0+bV9yZXNw
b25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKGQtPm1fY3VybFJlcXVlc3QtPmdl
dE5ldHdvcmtMb2FkTWV0cmljcygpKTsKKworICAgIGhhbmRsZUNvb2tpZUhlYWRlcnMocmVjZWl2
ZWRSZXNwb25zZSk7CisKKyAgICBpZiAoZC0+bV9yZXNwb25zZS5zaG91bGRSZWRpcmVjdCgpKSB7
CisgICAgICAgIHdpbGxTZW5kUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGQtPm1fcmVzcG9uc2UuaXNVbmF1dGhvcml6ZWQoKSkgeworICAgICAgICBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UocmVjZWl2ZWRSZXNwb25zZSwgZC0+bV9hdXRoRmFp
bHVyZUNvdW50LCBkLT5tX3Jlc3BvbnNlLCB0aGlzKTsKKyAgICAgICAgZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7CisgICAgICAgIGQtPm1fYXV0aEZhaWx1cmVD
b3VudCsrOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGQtPm1fcmVzcG9uc2Uu
aXNOb3RNb2RpZmllZCgpKSB7CisgICAgICAgIFVSTCBjYWNoZVVybCA9IGQtPm1fcmVzcG9uc2Uu
dXJsKCk7CisgICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworCisg
ICAgICAgIGlmIChDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDYWNoZWRSZXNwb25z
ZShjYWNoZVVybCwgZC0+bV9yZXNwb25zZSkpIHsKKyAgICAgICAgICAgIGlmIChkLT5tX2FkZGVk
Q2FjaGVWYWxpZGF0aW9uSGVhZGVycykgeworICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNl
dEhUVFBTdGF0dXNUZXh0KCJPSyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVJlc3BvbnNlKCp0
aGlzLCBkLT5tX3Jlc3BvbnNlKTsKKworICAgIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZVJl
c3BvbnNlKGQtPm1fcmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSB7CisgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB9
KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZURhdGEoKnRoaXMsIGJ1ZmZl
ci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZm
ZXIodGhpcywgV1RGTW92ZShidWZmZXIpLCBidWZmZXItPnNpemUoKSk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VIYW5kbGU6OmN1cmxEaWRDb21wbGV0ZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0
RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhkLT5tX2N1cmxSZXF1ZXN0LT5nZXROZXR3b3Jr
TG9hZE1ldHJpY3MoKSk7CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRG
aW5pc2hMb2FkaW5nKCp0aGlzKTsKKyAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlz
KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3Qg
UmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGYWlsKCp0aGlzKTsKKyAg
ICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCByZXNvdXJjZUVycm9yKTsKIH0KIAogI2lmIE9TKFdJ
TkRPV1MpCkBAIC0xMTUsOCArMjcyLDE4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3Jt
U2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCi0gICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnNl
dERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKyAgICBpZiAoZGVmZXJzID09IGQtPm1fZGVmZXJzTG9h
ZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgZC0+bV9kZWZlcnNMb2FkaW5nID0gZGVmZXJz
OworCisgICAgaWYgKCFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoZC0+bV9kZWZlcnNMb2FkaW5nKQorICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdXNwZW5k
KCk7CisgICAgZWxzZQorICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5yZXN1bWUoKTsKIH0KIAog
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQpAQCAtMTM3
LDkgKzMwNCw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAgICAgIGlmIChjaGFsbGVu
Z2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCiAgICAgICAgICAg
ICB1cmxUb1N0b3JlID0gY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOwogICAgICAg
ICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRp
dGlvbiwgY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCB1cmxUb1N0b3Jl
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICAgICAgZC0+
bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRp
YWwucGFzc3dvcmQoKSk7CisKKyAgICAgICAgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChj
cmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKIAogICAgICAgICBkLT5t
X3VzZXIgPSBTdHJpbmcoKTsKICAgICAgICAgZC0+bV9wYXNzID0gU3RyaW5nKCk7CkBAIC0xNjQs
OCArMzMwLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICAgICAgICAgICAgICAgICAgICAg
Q3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRp
b24sIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdlLmZh
aWx1cmVSZXNwb25zZSgpLnVybCgpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgICAgICAgICAgZC0+bV9kZWxlZ2F0
ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dv
cmQoKSk7CisgICAgICAgICAgICAgICAgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjcmVk
ZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwMCw4ICszNjUsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGQtPm1fZGVs
ZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRp
YWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOworICAgIHJlc3RhcnRSZXF1ZXN0V2l0
aENyZWRlbnRpYWwoY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAK
ICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CkBAIC0yMTYsMTAgKzM4MCw3IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlh
bChjb25zdCBBdXRoZW50aWNhCiAgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogCiAgICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UoZC0+bV9yZXNwb25zZSksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgIGQtPm1f
ZGVsZWdhdGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgIGNvbnRpbnVl
QWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKICAgICB9KTsKIH0KIApAQCAtMjQ2LDE4ICs0MDcs
NzggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCitzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IFJlc291cmNlSGFuZGxlOjpnZXRDcmVkZW50
aWFsKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCByZWRpcmVjdCkKK3sKKyAgICAvLyBt
X3VzZXIvbV9wYXNzIGFyZSBjcmVkZW50aWFscyBnaXZlbiBtYW51YWxseSwgZm9yIGluc3RhbmNl
LCBieSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBYTUxIdHRwUmVxdWVzdC5vcGVuKCkuCisgICAg
U3RyaW5nIHBhcnRpdGlvbiA9IHJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsKKworICAgIGlmIChz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7CisgICAgICAgIGlmIChkLT5tX3VzZXIuaXNF
bXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3Nl
IHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCisg
ICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwg
YXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KKyAgICAgICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRp
YWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHBh
cnRpdGlvbiwgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIXJlZGlyZWN0KSB7
CisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBr
bm93biBmb3IgdGhlIFVSTCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscworICAgICAgICAgICAg
Ly8gYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0LiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGlt
cGxlbWVudCBsb2dvdXQgYnkgc2VuZGluZyBhbgorICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVl
c3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVudGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1l
ZGlhdGVseSAoc28gdGhhdAorICAgICAgICAgICAgLy8gYW4gYXV0aGVudGljYXRpb24gZGlhbG9n
IGRvZXNuJ3QgcG9wIHVwKS4KKyAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0
Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9uLCBDcmVkZW50aWFsKGQtPm1fdXNlciwg
ZC0+bV9wYXNzLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgcmVxdWVzdC51cmwoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdXNlciA9IGQtPm1fdXNlcjsKKyAgICBTdHJp
bmcgcGFzc3dvcmQgPSBkLT5tX3Bhc3M7CisKKyAgICBpZiAoIWQtPm1faW5pdGlhbENyZWRlbnRp
YWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHVzZXIgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnVz
ZXIoKTsKKyAgICAgICAgcGFzc3dvcmQgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3Jk
KCk7CisgICAgfQorCisgICAgaWYgKHVzZXIuaXNFbXB0eSgpICYmIHBhc3N3b3JkLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4oIiIsICIiKTsKKwor
ICAgIHJldHVybiBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KHVzZXIsIHBhc3N3b3JkKTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjb25z
dCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIGlmICghZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGJvb2wgaXNTeW5jUmVxdWVzdCA9IGQtPm1fY3VybFJlcXVlc3QtPmlz
U3luY1JlcXVlc3QoKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKKyAgICBkLT5t
X2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0
ID0gY3JlYXRlQ3VybFJlcXVlc3QoZC0+bV9jdXJyZW50UmVxdWVzdCk7CisgICAgZC0+bV9jdXJs
UmVxdWVzdC0+c2V0VXNlclBhc3ModXNlciwgcGFzc3dvcmQpOworICAgIGQtPm1fY3VybFJlcXVl
c3QtPnN0YXJ0KGlzU3luY1JlcXVlc3QpOworfQorCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0
Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ks
IFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9y
PGNoYXI+JiBkYXRhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKKyAgICBhdXRv
IGxvY2FsUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgU3luY2hyb25vdXNMb2FkZXJDbGllbnQgY2xp
ZW50OwogICAgIGJvb2wgZGVmZXJzTG9hZGluZyA9IGZhbHNlOwogICAgIGJvb2wgc2hvdWxkQ29u
dGVudFNuaWZmID0gdHJ1ZTsKICAgICBib29sIHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmID0g
dHJ1ZTsKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBS
ZXNvdXJjZUhhbmRsZShjb250ZXh0LCByZXF1ZXN0LCAmY2xpZW50LCBkZWZlcnNMb2FkaW5nLCBz
aG91bGRDb250ZW50U25pZmYsIHNob3VsZENvbnRlbnRFbmNvZGluZ1NuaWZmKSk7CiAKLSAgICBo
YW5kbGUtPmQtPm1fZGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGUoaGFuZGxlLmdldCgpKSk7Ci0gICAgaGFuZGxlLT5kLT5tX2RlbGVnYXRlLT5kaXNwYXRj
aFN5bmNocm9ub3VzSm9iKCk7CisgICAgaWYgKGxvY2FsUmVxdWVzdC51cmwoKS5wcm90b2NvbElz
RGF0YSgpKSB7CisgICAgICAgIGhhbmRsZS0+aGFuZGxlRGF0YVVSTCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gSWYgZGVmZXJzTG9hZGluZyBpcyB0cnVlIGFuZCB3ZSBjYWxs
IGN1cmxfZWFzeV9wZXJmb3JtCisgICAgLy8gb24gYSBwYXVzZWQgaGFuZGxlLCBsaWJjVVJMIHdv
dWxkIGRvIHRoZSB0cmFuc2ZlciBhbnl3YXkKKyAgICAvLyBhbmQgd2Ugd291bGQgYXNzZXJ0IHNv
IGZvcmNlIGRlZmVyc0xvYWRpbmcgdG8gYmUgZmFsc2UuCisgICAgaGFuZGxlLT5kLT5tX2RlZmVy
c0xvYWRpbmcgPSBmYWxzZTsKKworICAgIGhhbmRsZS0+ZC0+bV9jdXJsUmVxdWVzdCA9IGhhbmRs
ZS0+Y3JlYXRlQ3VybFJlcXVlc3QobG9jYWxSZXF1ZXN0KTsKKyAgICBoYW5kbGUtPmQtPm1fY3Vy
bFJlcXVlc3QtPnN0YXJ0KHRydWUpOwogCiAgICAgZXJyb3IgPSBjbGllbnQuZXJyb3IoKTsKICAg
ICBkYXRhLnN3YXAoY2xpZW50Lm11dGFibGVEYXRhKCkpOwpAQCAtMjY4LDggKzQ4OSwxNzMgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Db250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2
ZVJlc3BvbnNlKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKGQt
Pm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnBsYXRmb3JtQ29udGludWVTeW5j
aHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZl
UmVzcG9uc2UoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVBZnRlckRpZFJl
Y2VpdmVSZXNwb25zZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8v
IGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhbmNlbCB0aGUgbG9hZC4KKyAgICBp
ZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkgfHwgIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAg
IHJldHVybjsKKworICAgIGQtPm1fY3VybFJlcXVlc3QtPmNvbXBsZXRlRGlkUmVjZWl2ZVJlc3Bv
bnNlKCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFJlZGlyZWN0QXNHRVQoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGNyb3NzT3JpZ2luKQoreworICAgIGlm
IChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCByZXF1ZXN0Lmh0dHBNZXRob2QoKSA9
PSAiSEVBRCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcmVxdWVzdC51cmwo
KS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGQtPm1fcmVzcG9uc2UuaXNTZWVPdGhlcigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmICgoZC0+bV9yZXNwb25zZS5pc01vdmVkUGVybWFuZW50bHkoKSB8fCBkLT5tX3Jlc3Bv
bnNlLmlzRm91bmQoKSkgJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIikpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNyb3NzT3JpZ2luICYmIChyZXF1ZXN0Lmh0dHBN
ZXRob2QoKSA9PSAiREVMRVRFIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVlc3QoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heFJl
ZGlyZWN0cyA9IDIwOworCisgICAgaWYgKGQtPm1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJl
Y3RzKSB7CisgICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3I6Omh0
dHBFcnJvcihDVVJMRV9UT09fTUFOWV9SRURJUkVDVFMsIGQtPm1fcmVzcG9uc2UudXJsKCkpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBsb2NhdGlvbiA9IGQtPm1fcmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbik7CisgICAgVVJM
IG5ld1VSTCA9IFVSTChkLT5tX3Jlc3BvbnNlLnVybCgpLCBsb2NhdGlvbik7CisgICAgYm9vbCBj
cm9zc09yaWdpbiA9ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoZC0+bV9maXJzdFJlcXVl
c3QudXJsKCksIG5ld1VSTCk7CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IGQt
Pm1fZmlyc3RSZXF1ZXN0OworICAgIG5ld1JlcXVlc3Quc2V0VVJMKG5ld1VSTCk7CisKKyAgICBp
ZiAoc2hvdWxkUmVkaXJlY3RBc0dFVChuZXdSZXF1ZXN0LCBjcm9zc09yaWdpbikpIHsKKyAgICAg
ICAgbmV3UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAgbmV3UmVxdWVzdC5z
ZXRIVFRQQm9keShudWxscHRyKTsKKyAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBDb250ZW50
VHlwZSgpOworICAgIH0KKworICAgIC8vIFNob3VsZCBub3Qgc2V0IFJlZmVyZXIgYWZ0ZXIgYSBy
ZWRpcmVjdCBmcm9tIGEgc2VjdXJlIHJlc291cmNlIHRvIG5vbi1zZWN1cmUgb25lLgorICAgIGlm
ICghbmV3VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhuZXdSZXF1ZXN0Lmh0
dHBSZWZlcnJlcigpLCAiaHR0cHMiKSAmJiBjb250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKKyAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBSZWZl
cnJlcigpOworCisgICAgZC0+bV91c2VyID0gbmV3VVJMLnVzZXIoKTsKKyAgICBkLT5tX3Bhc3Mg
PSBuZXdVUkwucGFzcygpOworICAgIG5ld1JlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKwor
ICAgIGlmIChjcm9zc09yaWdpbikgeworICAgICAgICAvLyBJZiB0aGUgbmV0d29yayBsYXllciBj
YXJyaWVzIG92ZXIgYXV0aGVudGljYXRpb24gaGVhZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1
ZXN0CisgICAgICAgIC8vIGluIGEgY3Jvc3Mtb3JpZ2luIHJlZGlyZWN0LCB3ZSB3YW50IHRvIGNs
ZWFyIHRob3NlIGhlYWRlcnMgaGVyZS4gCisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQXV0
aG9yaXphdGlvbigpOworICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUE9yaWdpbigpOworICAg
IH0KKworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2VDb3B5ID0gZC0+bV9yZXNwb25zZTsK
KyAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0QXN5bmModGhpcywgV1RGTW92ZShuZXdSZXF1
ZXN0KSwgV1RGTW92ZShyZXNwb25zZUNvcHkpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSAoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkgeworICAgICAgICBjb250aW51
ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOworICAgIH0pOworfQorCit2
b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IC8vIHdpbGxTZW5kUmVxdWVzdCBtaWdodCBjYW5jZWwgdGhlIGxvYWQuCisgICAgaWYgKGNhbmNl
bGxlZE9yQ2xpZW50bGVzcygpIHx8ICFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47
CisKKyAgICBkLT5tX2N1cnJlbnRSZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KTsKKworICAgIGJv
b2wgaXNTeW5jUmVxdWVzdCA9IGQtPm1fY3VybFJlcXVlc3QtPmlzU3luY1JlcXVlc3QoKTsKKyAg
ICBkLT5tX2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zZXRD
bGllbnQobnVsbHB0cik7CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVl
c3QoZC0+bV9jdXJyZW50UmVxdWVzdCk7CisKKyAgICBpZiAocHJvdG9jb2xIb3N0QW5kUG9ydEFy
ZUVxdWFsKGQtPm1fY3VycmVudFJlcXVlc3QudXJsKCksIGQtPm1fcmVzcG9uc2UudXJsKCkpKSB7
CisgICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWwoZC0+bV9jdXJyZW50UmVx
dWVzdCwgdHJ1ZSk7CisgICAgICAgIGQtPm1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRl
bnRpYWwuZmlyc3QsIGNyZWRlbnRpYWwuc2Vjb25kKTsKKyAgICB9CisKKyAgICBkLT5tX2N1cmxS
ZXF1ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6
aGFuZGxlRGF0YVVSTCgpCit7CisgICAgQVNTRVJUKGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNEYXRhKCkpOworICAgIFN0cmluZyB1cmwgPSBkLT5tX2ZpcnN0UmVxdWVzdC51cmwo
KS5zdHJpbmcoKTsKKworICAgIEFTU0VSVChjbGllbnQoKSk7CisKKyAgICBhdXRvIGluZGV4ID0g
dXJsLmZpbmQoJywnKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKKyAgICAgICAgY2xp
ZW50KCktPmNhbm5vdFNob3dVUkwodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBTdHJpbmcgbWVkaWFUeXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOworICAgIFN0
cmluZyBkYXRhID0gdXJsLnN1YnN0cmluZyhpbmRleCArIDEpOworICAgIGF1dG8gb3JpZ2luYWxT
aXplID0gZGF0YS5sZW5ndGgoKTsKKworICAgIGJvb2wgYmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNX
aXRoSWdub3JpbmdBU0NJSUNhc2UoIjtiYXNlNjQiKTsKKyAgICBpZiAoYmFzZTY0KQorICAgICAg
ICBtZWRpYVR5cGUgPSBtZWRpYVR5cGUubGVmdChtZWRpYVR5cGUubGVuZ3RoKCkgLSA3KTsKKwor
ICAgIGlmIChtZWRpYVR5cGUuaXNFbXB0eSgpKQorICAgICAgICBtZWRpYVR5cGUgPSAidGV4dC9w
bGFpbiI7CisKKyAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFU
eXBlKG1lZGlhVHlwZSk7CisgICAgU3RyaW5nIGNoYXJzZXQgPSBleHRyYWN0Q2hhcnNldEZyb21N
ZWRpYVR5cGUobWVkaWFUeXBlKTsKKworICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKKyAgICAg
ICAgY2hhcnNldCA9ICJVUy1BU0NJSSI7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
OworICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXNwb25zZS5zZXRU
ZXh0RW5jb2RpbmdOYW1lKGNoYXJzZXQpOworICAgIHJlc3BvbnNlLnNldFVSTChkLT5tX2ZpcnN0
UmVxdWVzdC51cmwoKSk7CisKKyAgICBpZiAoYmFzZTY0KSB7CisgICAgICAgIGRhdGEgPSBkZWNv
ZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7CisgICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZShX
VEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0g
eworICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAg
ICB9KTsKKworICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNs
aWVudCB0byBiZSBkZWxldGVkLgorICAgICAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBvdXQ7CisgICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEsIG91
dCwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAwKQorICAg
ICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKG91dC5kYXRhKCksIG91dC5zaXplKCkpLCBvcmlnaW5hbFNpemUpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKGNoYXJzZXQp
OworICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIGVuY29kaW5n
KTsKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgICAgICBjb250aW51ZUFm
dGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIGRpZFJl
Y2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCisgICAg
ICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVuY29k
aW5nLmVuY29kZShkYXRhLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50aXRpZXMp
OworICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLnNpemUoKSkKKyAgICAgICAgICAgICAgICBj
bGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZN
b3ZlKGVuY29kZWREYXRhKSksIG9yaWdpbmFsU2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjNDQ2NTU2ZmUuLjAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBOQVZFUiBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaCIKLQotI2lmIFVTRShDVVJMKQotCi0j
aW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCIKLSNpbmNsdWRlICJDb29raWVKYXJD
dXJsLmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJDdXJsQ2Fj
aGVNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKLSNpbmNsdWRlICJIVFRQUGFy
c2Vycy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNs
dWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSkKLSAgICA6IG1faGFuZGxlKGhhbmRsZSkKLSAgICAsIG1fZmly
c3RSZXF1ZXN0KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBt
X2N1cnJlbnRSZXF1ZXN0KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNvbGF0ZWRDb3B5KCkpCi0g
ICAgLCBtX3Nob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGhhbmRsZS0+c2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UoKSkKLSAgICAsIG1fdXNlcihoYW5kbGUtPmdldEludGVybmFsKCktPm1fdXNl
ci5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fcGFzcyhoYW5kbGUtPmdldEludGVybmFsKCktPm1f
cGFzcy5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1faW5pdGlhbENyZWRlbnRpYWwoaGFuZGxlLT5n
ZXRJbnRlcm5hbCgpLT5tX2luaXRpYWxDcmVkZW50aWFsKQotICAgICwgbV9kZWZlcnNMb2FkaW5n
KGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9kZWZlcnNMb2FkaW5nKQotewotCi19Ci0KLVJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp+UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoKQotewot
ICAgIGlmIChtX2N1cmxSZXF1ZXN0KQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQo
bnVsbHB0cik7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6Omhhc0hhbmRs
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9oYW5kbGU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUoKQotewotICAgIG1faGFuZGxlID0gbnVs
bHB0cjsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c3RhcnQoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBhdXRvIGNyZWRlbnRpYWwgPSBnZXRD
cmVkZW50aWFsKG1fY3VycmVudFJlcXVlc3QsIGZhbHNlKTsKLQotICAgIG1fY3VybFJlcXVlc3Qg
PSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLSAgICBtX2N1cmxSZXF1ZXN0
LT5zZXRVc2VyUGFzcyhjcmVkZW50aWFsLmZpcnN0LCBjcmVkZW50aWFsLnNlY29uZCk7Ci0gICAg
bV9jdXJsUmVxdWVzdC0+c3RhcnQoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6Y2FuY2VsKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgcmVs
ZWFzZUhhbmRsZSgpOwotCi0gICAgaWYgKCFtX2N1cmxSZXF1ZXN0KQotICAgICAgICBtX2N1cmxS
ZXF1ZXN0LT5jYW5jZWwoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotCi0gICAgaWYgKGRlZmVycyA9PSBtX2RlZmVyc0xvYWRpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKLQotICAgIGlmICghbV9jdXJsUmVx
dWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGVmZXJzTG9hZGluZykKLSAgICAg
ICAgbV9jdXJsUmVxdWVzdC0+c3VzcGVuZCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXJsUmVx
dWVzdC0+cmVzdW1lKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNl
dEF1dGhlbnRpY2F0aW9uKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX2N1cmxSZXF1
ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGlzU3luY1JlcXVlc3QgPSBtX2N1cmxS
ZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci0g
ICAgbV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIpOwotCi0gICAgbV9jdXJsUmVxdWVz
dCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QpOwotICAgIG1fY3VybFJlcXVl
c3QtPnNldFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zdGFy
dChpc1N5bmNSZXF1ZXN0KTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpCi17Ci0gICAgaWYgKG1fY3VycmVudFJlcXVlc3QudXJs
KCkucHJvdG9jb2xJc0RhdGEoKSkgewotICAgICAgICBoYW5kbGVEYXRhVVJMKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiBkZWZlcnNMb2FkaW5nIGlzIHRydWUgYW5kIHdl
IGNhbGwgY3VybF9lYXN5X3BlcmZvcm0KLSAgICAvLyBvbiBhIHBhdXNlZCBoYW5kbGUsIGxpYmNV
Ukwgd291bGQgZG8gdGhlIHRyYW5zZmVydCBhbnl3YXkKLSAgICAvLyBhbmQgd2Ugd291bGQgYXNz
ZXJ0IHNvIGZvcmNlIGRlZmVyc0xvYWRpbmcgdG8gYmUgZmFsc2UuCi0gICAgbV9kZWZlcnNMb2Fk
aW5nID0gZmFsc2U7Ci0KLSAgICBtX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9j
dXJyZW50UmVxdWVzdCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQodHJ1ZSk7Ci19Ci0KLVJl
ZjxDdXJsUmVxdWVzdD4gUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNyZWF0ZUN1cmxSZXF1
ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotCi0gICAgLy8gQ3VybENhY2hlIDogYXBwZW5kIGFkZGl0aW9uYWwgY2FjaGUgaW5mb3Jt
YXRpb24KLSAgICBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IGZhbHNlOwotCi0gICAg
Ym9vbCBoYXNDYWNoZUhlYWRlcnMgPSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlu
cyhIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmllZFNpbmNlKSB8fCByZXF1ZXN0Lmh0dHBIZWFkZXJG
aWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gpOwotICAgIGlmICgh
aGFzQ2FjaGVIZWFkZXJzKSB7Ci0gICAgICAgIGF1dG8mIGNhY2hlID0gQ3VybENhY2hlTWFuYWdl
cjo6c2luZ2xldG9uKCk7Ci0gICAgICAgIFVSTCBjYWNoZVVybCA9IHJlcXVlc3QudXJsKCk7Ci0g
ICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgICAgIGlm
IChjYWNoZS5pc0NhY2hlZChjYWNoZVVybCkpIHsKLSAgICAgICAgICAgIGNhY2hlLmFkZENhY2hl
RW50cnlDbGllbnQoY2FjaGVVcmwsIG1faGFuZGxlKTsKLQotICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBlbnRyeSA6IGNhY2hlLnJlcXVlc3RIZWFkZXJzKGNhY2hlVXJsKSkKLSAgICAgICAg
ICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZChlbnRyeS5rZXksIGVudHJ5LnZhbHVl
KTsKLQotICAgICAgICAgICAgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQgc2hvdWxk
U3VzcGVuZCA9IG1fZGVmZXJzTG9hZGluZyA/IEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kOjpZ
ZXMgOiBDdXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZDo6Tm87Ci0gICAgcmV0dXJuIEN1cmxSZXF1
ZXN0OjpjcmVhdGUocmVxdWVzdCwgdGhpcywgc2hvdWxkU3VzcGVuZCwgQ3VybFJlcXVlc3Q6OkVu
YWJsZU11bHRpcGFydDo6WWVzKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCkKLXsKLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiAhbV9oYW5kbGUtPmNsaWVudCgpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkU2VuZERhdGEodW5zaWduZWQg
bG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2Vu
dCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbmNlbGxlZE9y
Q2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hhbmRsZS0+Y2xpZW50KCkt
PmRpZFNlbmREYXRhKG1faGFuZGxlLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZUNvb2tpZUhlYWRlcnMoY29uc3QgQ3VybFJlc3BvbnNlJiBy
ZXNwb25zZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBzZXRDb29raWVIZWFkZXIgPSAic2V0
LWNvb2tpZTogIjsKLQotICAgIGF1dG8mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgY29uc3QgQ29va2ll
SmFyQ3VybCYgY29va2llSmFyID0gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2Uo
KTsKLSAgICBmb3IgKGF1dG8gaGVhZGVyIDogcmVzcG9uc2UuaGVhZGVycykgewotICAgICAgICBp
ZiAoaGVhZGVyLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzZXRDb29raWVIZWFkZXIpKSB7
Ci0gICAgICAgICAgICBTdHJpbmcgc2V0Q29va2llU3RyaW5nID0gaGVhZGVyLnJpZ2h0KGhlYWRl
ci5sZW5ndGgoKSAtIHN0cmxlbihzZXRDb29raWVIZWFkZXIpKTsKLSAgICAgICAgICAgIGNvb2tp
ZUphci5zZXRDb29raWVzRnJvbUhUVFBSZXNwb25zZShkZWZhdWx0U3RvcmFnZVNlc3Npb24sIHJl
c3BvbnNlLnVybCwgc2V0Q29va2llU3RyaW5nKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBDdXJsUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fZGVmZXJzTG9hZGluZyk7Ci0KLSAgICBpZiAoY2FuY2Vs
bGVkT3JDbGllbnRsZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFuZGxlLT5nZXRJ
bnRlcm5hbCgpLT5tX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNl
KTsKLQotICAgIGlmIChtX2N1cmxSZXF1ZXN0KQotICAgICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJu
YWwoKS0+bV9yZXNwb25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKG1fY3VybFJl
cXVlc3QtPmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKLQotICAgIGhhbmRsZUNvb2tpZUhlYWRl
cnMocmVjZWl2ZWRSZXNwb25zZSk7Ci0KLSAgICBpZiAocmVzcG9uc2UoKS5zaG91bGRSZWRpcmVj
dCgpKSB7Ci0gICAgICAgIHdpbGxTZW5kUmVxdWVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKHJlc3BvbnNlKCkuaXNVbmF1dGhvcml6ZWQoKSkgewotICAgICAgICBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2UocmVjZWl2ZWRSZXNwb25zZSwgbV9hdXRoRmFp
bHVyZUNvdW50LCByZXNwb25zZSgpLCBtX2hhbmRsZSk7Ci0gICAgICAgIG1faGFuZGxlLT5kaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKTsKLSAgICAgICAgbV9hdXRo
RmFpbHVyZUNvdW50Kys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9oYW5k
bGUtPmNsaWVudCgpKSB7Ci0gICAgICAgIGlmIChyZXNwb25zZSgpLmlzTm90TW9kaWZpZWQoKSkg
ewotICAgICAgICAgICAgVVJMIGNhY2hlVXJsID0gbV9jdXJyZW50UmVxdWVzdC51cmwoKTsKLSAg
ICAgICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgICAg
ICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q2FjaGVkUmVzcG9uc2Uo
Y2FjaGVVcmwsIHJlc3BvbnNlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYWRkZWRDYWNo
ZVZhbGlkYXRpb25IZWFkZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlKCkuc2V0
SFRUUFN0YXR1c0NvZGUoMjAwKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UoKS5zZXRI
VFRQU3RhdHVzVGV4dCgiT0siKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRSZWNl
aXZlUmVzcG9uc2UoKm1faGFuZGxlLCByZXNwb25zZSgpKTsKLQotICAgICAgICBhdXRvIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCptX2hhbmRsZSk7Ci0gICAgICAgIG1faGFuZGxlLT5kaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSgpKSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJl
Y2VpdmVSZXNwb25zZSgpOwotICAgICAgICB9KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+
JiYgYnVmZmVyKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoY2Fu
Y2VsbGVkT3JDbGllbnRsZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEN1cmxDYWNoZU1h
bmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVEYXRhKCptX2hhbmRsZSwgYnVmZmVyLT5kYXRh
KCksIGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVC
dWZmZXIobV9oYW5kbGUsIFdURk1vdmUoYnVmZmVyKSwgYnVmZmVyLT5zaXplKCkpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkQ29tcGxldGUoKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNz
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2N1cmxSZXF1ZXN0KQotICAgICAgICBt
X2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xv
YWRNZXRyaWNzKG1fY3VybFJlcXVlc3QtPmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKLQotICAg
IGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6c2lu
Z2xldG9uKCkuZGlkRmluaXNoTG9hZGluZygqbV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRsZS0+
Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcobV9oYW5kbGUpOwotICAgIH0KLX0KLQotdm9pZCBS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3QgUmVz
b3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGYWlsKCptX2hhbmRsZSk7Ci0g
ICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKG1faGFuZGxlLCByZXNvdXJjZUVycm9yKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZl
UmVzcG9uc2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBjb250aW51
ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OnBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGNvbnRpbnVlQWZ0ZXJEaWRS
ZWNlaXZlUmVzcG9uc2UoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
Y29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIC8vIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhbmNl
bCB0aGUgbG9hZC4KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkgfHwgIW1fY3VybFJl
cXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VybFJlcXVlc3QtPmNvbXBsZXRlRGlk
UmVjZWl2ZVJlc3BvbnNlKCk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OnNob3VsZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29s
IGNyb3NzT3JpZ2luKQotewotICAgIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8
fCByZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiSEVBRCIpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlc3BvbnNlKCkuaXNTZWVPdGhlcigpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgocmVzcG9uc2UoKS5pc01vdmVkUGVybWFuZW50
bHkoKSB8fCByZXNwb25zZSgpLmlzRm91bmQoKSkgJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09
ICJQT1NUIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGNyb3NzT3JpZ2luICYm
IChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiREVMRVRFIikpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjp3aWxsU2VuZFJlcXVlc3QoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0K
LSAgICBzdGF0aWMgY29uc3QgaW50IG1heFJlZGlyZWN0cyA9IDIwOwotCi0gICAgaWYgKG1fcmVk
aXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3RzKSB7Ci0gICAgICAgIG1faGFuZGxlLT5jbGllbnQo
KS0+ZGlkRmFpbChtX2hhbmRsZSwgUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKENVUkxFX1RPT19N
QU5ZX1JFRElSRUNUUywgcmVzcG9uc2UoKS51cmwoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgU3RyaW5nIGxvY2F0aW9uID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OkxvY2F0aW9uKTsKLSAgICBVUkwgbmV3VVJMID0gVVJMKG1faGFuZGxlLT5n
ZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlLnVybCgpLCBsb2NhdGlvbik7Ci0gICAgYm9vbCBjcm9z
c09yaWdpbiA9ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobV9maXJzdFJlcXVlc3QudXJs
KCksIG5ld1VSTCk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IG1fZmlyc3RS
ZXF1ZXN0OwotICAgIG5ld1JlcXVlc3Quc2V0VVJMKG5ld1VSTCk7Ci0KLSAgICBpZiAoc2hvdWxk
UmVkaXJlY3RBc0dFVChuZXdSZXF1ZXN0LCBjcm9zc09yaWdpbikpIHsKLSAgICAgICAgbmV3UmVx
dWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLSAgICAgICAgbmV3UmVxdWVzdC5zZXRIVFRQQm9k
eShudWxscHRyKTsKLSAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBDb250ZW50VHlwZSgpOwot
ICAgIH0KLQotICAgIC8vIFNob3VsZCBub3Qgc2V0IFJlZmVyZXIgYWZ0ZXIgYSByZWRpcmVjdCBm
cm9tIGEgc2VjdXJlIHJlc291cmNlIHRvIG5vbi1zZWN1cmUgb25lLgotICAgIGlmICghbmV3VVJM
LnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhuZXdSZXF1ZXN0Lmh0dHBSZWZlcnJl
cigpLCAiaHR0cHMiKSAmJiBtX2hhbmRsZS0+Y29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpCi0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQUmVm
ZXJyZXIoKTsKLQotICAgIG1fdXNlciA9IG5ld1VSTC51c2VyKCk7Ci0gICAgbV9wYXNzID0gbmV3
VVJMLnBhc3MoKTsKLSAgICBuZXdSZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0KLSAgICBp
ZiAoY3Jvc3NPcmlnaW4pIHsKLSAgICAgICAgLy8gSWYgdGhlIG5ldHdvcmsgbGF5ZXIgY2Fycmll
cyBvdmVyIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdAot
ICAgICAgICAvLyBpbiBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCwgd2Ugd2FudCB0byBjbGVhciB0
aG9zZSBoZWFkZXJzIGhlcmUuIAotICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUEF1dGhvcml6
YXRpb24oKTsKLSAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKLSAgICB9Ci0K
LSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlQ29weSA9IHJlc3BvbnNlKCk7Ci0gICAgbV9o
YW5kbGUtPmNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3RBc3luYyhtX2hhbmRsZSwgV1RGTW92ZShu
ZXdSZXF1ZXN0KSwgV1RGTW92ZShyZXNwb25zZUNvcHkpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpXSAoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkgewotICAgICAgICBj
b250aW51ZVdpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3Qo
UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotCi0gICAgY29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVBZnRlcldpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICAvLyB3aWxsU2VuZFJlcXVlc3QgbWlnaHQgY2FuY2VsIHRoZSBs
b2FkLgotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSB8fCAhbV9jdXJsUmVxdWVzdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVz
dCk7Ci0KLSAgICBib29sIGlzU3luY1JlcXVlc3QgPSBtX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1
ZXN0KCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+
c2V0Q2xpZW50KG51bGxwdHIpOwotCi0gICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1
ZXN0KG1fY3VycmVudFJlcXVlc3QpOwotCi0gICAgaWYgKHByb3RvY29sSG9zdEFuZFBvcnRBcmVF
cXVhbChtX2N1cnJlbnRSZXF1ZXN0LnVybCgpLCByZXNwb25zZSgpLnVybCgpKSkgewotICAgICAg
ICBhdXRvIGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKG1fY3VycmVudFJlcXVlc3QsIHRydWUp
OwotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50aWFsLmZpcnN0LCBj
cmVkZW50aWFsLnNlY29uZCk7Ci0gICAgfQotCi0gICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQoaXNT
eW5jUmVxdWVzdCk7Ci19Ci0KLVJlc291cmNlUmVzcG9uc2UmIFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlOjpyZXNwb25zZSgpCi17Ci0gICAgcmV0dXJuIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgp
LT5tX3Jlc3BvbnNlOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5k
bGVEYXRhVVJMKCkKLXsKLSAgICBBU1NFUlQobV9maXJzdFJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
c0RhdGEoKSk7Ci0gICAgU3RyaW5nIHVybCA9IG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygp
OwotCi0gICAgQVNTRVJUKG1faGFuZGxlLT5jbGllbnQoKSk7Ci0KLSAgICBhdXRvIGluZGV4ID0g
dXJsLmZpbmQoJywnKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAgICAgbV9o
YW5kbGUtPmNsaWVudCgpLT5jYW5ub3RTaG93VVJMKG1faGFuZGxlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFN0cmluZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3RyaW5nKDUsIGluZGV4
IC0gNSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAg
YXV0byBvcmlnaW5hbFNpemUgPSBkYXRhLmxlbmd0aCgpOwotCi0gICAgYm9vbCBiYXNlNjQgPSBt
ZWRpYVR5cGUuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiO2Jhc2U2NCIpOwotICAgIGlmIChi
YXNlNjQpCi0gICAgICAgIG1lZGlhVHlwZSA9IG1lZGlhVHlwZS5sZWZ0KG1lZGlhVHlwZS5sZW5n
dGgoKSAtIDcpOwotCi0gICAgaWYgKG1lZGlhVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIG1lZGlh
VHlwZSA9ICJ0ZXh0L3BsYWluIjsKLQotICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUobWVkaWFUeXBlKTsKLSAgICBTdHJpbmcgY2hhcnNldCA9IGV4dHJh
Y3RDaGFyc2V0RnJvbU1lZGlhVHlwZShtZWRpYVR5cGUpOwotCi0gICAgaWYgKGNoYXJzZXQuaXNF
bXB0eSgpKQotICAgICAgICBjaGFyc2V0ID0gIlVTLUFTQ0lJIjsKLQotICAgIFJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2U7Ci0gICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwotICAg
IHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7Ci0gICAgcmVzcG9uc2Uuc2V0
VVJMKG1fZmlyc3RSZXF1ZXN0LnVybCgpKTsKLQotICAgIGlmIChiYXNlNjQpIHsKLSAgICAgICAg
ZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKLSAgICAgICAgbV9oYW5kbGUt
PmRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2Vp
dmVSZXNwb25zZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9u
c2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgotICAgICAgICBpZiAobV9o
YW5kbGUtPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAg
ICAgICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5l
d0xpbmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBtX2hhbmRsZS0+Y2xp
ZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG91
dC5kYXRhKCksIG91dC5zaXplKCkpLCBvcmlnaW5hbFNpemUpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKGNoYXJzZXQpOwotICAgICAgICBk
YXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIGVuY29kaW5nKTsKLSAgICAgICAg
bV9oYW5kbGUtPmRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgY29udGludWVBZnRl
ckRpZFJlY2VpdmVSZXNwb25zZSgpOwotICAgICAgICB9KTsKLQotICAgICAgICAvLyBkaWRSZWNl
aXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgotICAgICAg
ICBpZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGVuY29kZWREYXRh
ID0gZW5jb2RpbmcuZW5jb2RlKGRhdGEsIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVuY29kZWRF
bnRpdGllcyk7Ci0gICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuc2l6ZSgpKQotICAgICAgICAg
ICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNpemUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAg
bV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlKTsKLX0KLQotc3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Z2V0Q3Jl
ZGVudGlhbChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgcmVkaXJlY3QpCi17Ci0gICAg
Ly8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0
YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgot
ICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7Ci0KLSAgICBp
ZiAobV9zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkgewotICAgICAgICBpZiAobV91c2VyLmlz
RW1wdHkoKSAmJiBtX3Bhc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBw
cmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAg
ICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFz
IGFsbG93ZWQgYnkgUkZDIDI2MTcuCi0gICAgICAgICAgICBtX2luaXRpYWxDcmVkZW50aWFsID0g
Q3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRp
b24sIHJlcXVlc3QudXJsKCkpOwotICAgICAgICB9IGVsc2UgaWYgKCFyZWRpcmVjdCkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24g
Zm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMKLSAgICAgICAgICAgIC8vIGJl
Zm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1l
bnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KLSAgICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdp
dGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRl
bHkgKHNvIHRoYXQKLSAgICAgICAgICAgIC8vIGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vz
bid0IHBvcCB1cCkuCi0gICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRl
bnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlvbiwgQ3JlZGVudGlhbChtX3VzZXIsIG1fcGFzcywg
Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgU3RyaW5nIHVzZXIgPSBtX3VzZXI7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0g
bV9wYXNzOwotCi0gICAgaWYgKCFtX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgewotICAg
ICAgICB1c2VyID0gbV9pbml0aWFsQ3JlZGVudGlhbC51c2VyKCk7Ci0gICAgICAgIHBhc3N3b3Jk
ID0gbV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpOwotICAgIH0KLQotICAgIGlmICh1c2Vy
LmlzRW1wdHkoKSAmJiBwYXNzd29yZC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdGQ6OnBh
aXI8U3RyaW5nLCBTdHJpbmc+KCIiLCAiIik7Ci0KLSAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmlu
ZywgU3RyaW5nPih1c2VyLCBwYXNzd29yZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmYmZmYTUzYmY5MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBOQVZFUiBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBVU0UoQ1VSTCkKLQotI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKLSNpbmNsdWRlICJD
dXJsUmVxdWVzdENsaWVudC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEN1cmxSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VIYW5k
bGU7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotCi1jbGFzcyBSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZT4sIHB1YmxpYyBDdXJsUmVxdWVzdENsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUqKTsKLSAgICB+UmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGUoKTsKLQotICAgIHZvaWQgcmVmKCkgb3ZlcnJpZGUgeyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZT46OnJlZigpOyB9Ci0g
ICAgdm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU+OjpkZXJlZigpOyB9Ci0KLSAgICBib29sIGhhc0hhbmRsZSgpIGNv
bnN0OwotICAgIHZvaWQgcmVsZWFzZUhhbmRsZSgpOwotCi0gICAgdm9pZCBzdGFydCgpOwotICAg
IHZvaWQgY2FuY2VsKCk7Ci0KLSAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAg
dm9pZCBzZXRBdXRoZW50aWNhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLQot
ICAgIHZvaWQgZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOwotCi0gICAgdm9pZCBjb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSgpOwotICAgIHZvaWQgcGxhdGZvcm1Db250aW51ZVN5bmNocm9ub3Vz
RGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0KLSAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KFJlc291cmNlUmVxdWVzdCYmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBDYWxsZWQgZnJvbSBtYWlu
IHRocmVhZC4KLSAgICBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpOwotCi0gICAgc3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPiBnZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYsIGJvb2wp
OwotCi0gICAgYm9vbCBjYW5jZWxsZWRPckNsaWVudGxlc3MoKTsKLQotICAgIFJlZjxDdXJsUmVx
dWVzdD4gY3JlYXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjdXJs
RGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY3VybERp
ZFJlY2VpdmVCdWZmZXIoUmVmPFNoYXJlZEJ1ZmZlcj4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
dXJsRGlkQ29tcGxldGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9y
KGNvbnN0IFJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY29udGludWVBZnRl
ckRpZFJlY2VpdmVSZXNwb25zZSgpOwotCi0gICAgYm9vbCBzaG91bGRSZWRpcmVjdEFzR0VUKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgY3Jvc3NPcmlnaW4pOwotICAgIHZvaWQgd2lsbFNl
bmRSZXF1ZXN0KCk7Ci0gICAgdm9pZCBjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmKTsKLQotICAgIHZvaWQgaGFuZGxlRGF0YVVSTCgpOwotCi0gICAgLy8gVXNl
ZCBieSBtYWluIHRocmVhZC4KLSAgICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7Ci0gICAgdW5z
aWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9OwotICAgIHVuc2lnbmVkIG1fcmVkaXJlY3RD
b3VudCB7IDAgfTsKLQotICAgIFJlc291cmNlUmVxdWVzdCBtX2ZpcnN0UmVxdWVzdDsKLSAgICBS
ZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKLSAgICBib29sIG1fc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2U7Ci0gICAgU3RyaW5nIG1fdXNlcjsKLSAgICBTdHJpbmcgbV9wYXNzOwot
ICAgIENyZWRlbnRpYWwgbV9pbml0aWFsQ3JlZGVudGlhbDsKLSAgICBib29sIG1fZGVmZXJzTG9h
ZGluZzsKLSAgICBib29sIG1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzIHsgZmFsc2UgfTsK
LSAgICBSZWZQdHI8Q3VybFJlcXVlc3Q+IG1fY3VybFJlcXVlc3Q7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333410</attachid>
            <date>2018-02-08 12:38:26 -0800</date>
            <delta_ts>2018-02-09 17:06:00 -0800</delta_ts>
            <desc>Fix break of other port</desc>
            <filename>182578.diff</filename>
            <type>text/plain</type>
            <size>47904</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzJiNWExMjg1Ni4uYjY0MWQ5ODNmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxOC0wMi0wOCAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFVuaWZ5IGxvZ2ljIG9mIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlIGludG8gUmVzb3VyY2VIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlJ3Mgbm8gYmVo
YXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vQ3VybC5jbWFrZToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpSZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmNhbmNlbGxlZE9yQ2xpZW50bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmN1cmxEaWRTZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVDb29raWVI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkUmVj
ZWl2ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3VybERpZENv
bXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjdXJsRGlkRmFpbFdp
dGhFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXRE
ZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpnZXRDcmVkZW50aWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZXN0YXJ0UmVxdWVzdFdpdGhDcmVkZW50aWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtQ29u
dGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6Y29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2hvdWxkUmVkaXJlY3RBc0dFVCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZS5oOiBSZW1vdmVkLgorCiAyMDE4LTAyLTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBtX3RpbWVPcmlnaW4g
aW4gUGVyZm9ybWFuY2U6OlBlcmZvcm1hbmNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtl
CmluZGV4IDczYzAxNGYxNWMxLi5iNTVmM2M0N2FiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJs
LmNtYWtlCkBAIC0yNSw3ICsyNSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3JDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1N5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50Q3VybC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCA2MjE1NDA3MTRmNi4uNzY1NDlkYTEzM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmgKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlm
CiAKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJsUmVxdWVzdENsaWVudC5oIgorI2VuZGlm
CisKICNpZiBVU0UoU09VUCkKIHR5cGVkZWYgc3RydWN0IF9HVGxzQ2VydGlmaWNhdGUgR1Rsc0Nl
cnRpZmljYXRlOwogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwpAQCAt
OTIsNyArOTYsMTUgQEAgY2xhc3MgU291cE5ldHdvcmtTZXNzaW9uOwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwogY2xhc3MgVGltZXI7CiAKLWNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlZkNv
dW50ZWQ8UmVzb3VyY2VIYW5kbGU+LCBwdWJsaWMgQXV0aGVudGljYXRpb25DbGllbnQgeworI2lm
IFVTRShDVVJMKQorY2xhc3MgQ3VybFJlcXVlc3Q7CisjZW5kaWYKKworY2xhc3MgUmVzb3VyY2VI
YW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT4sIHB1YmxpYyBBdXRoZW50
aWNhdGlvbkNsaWVudAorI2lmIFVTRShDVVJMKQorLCBwdWJsaWMgQ3VybFJlcXVlc3RDbGllbnQK
KyNlbmRpZgorewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8UmVz
b3VyY2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNo
b3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3
b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYg
ZGF0YSk7CkBAIC0xMDMsNiArMTE1LDExIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflJlc291cmNlSGFuZGxlKCk7CiAKKyNpZiBVU0UoQ1VSTCkKKyAgICB2b2lkIHJl
ZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT46OnJlZigpOyB9CisgICAg
dm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZT46OmRlcmVm
KCk7IH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShDRlVSTENPTk5FQ1RJ
T04pCiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYsIFJlc291cmNl
UmVzcG9uc2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXNvdXJjZVJlcXVlc3QmJik+JiYp
OwogI2VuZGlmCkBAIC0yNzgsNiArMjk1LDI2IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0aW1lb3V0
RmlyZWQoKTsKICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisgICAgUmVmPEN1cmxSZXF1ZXN0PiBj
cmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGN1cmxEaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgQ3VybFJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2
ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRD
b21wbGV0ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3Qg
UmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOworCisgICAgYm9vbCBjYW5jZWxsZWRPckNsaWVudGxl
c3MoKTsKKyAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBi
b29sIHNob3VsZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBjcm9z
c09yaWdpbik7CisgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoKTsKKyAgICB2b2lkIGNvbnRpbnVl
QWZ0ZXJXaWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYpOworCisgICAgc3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPiBnZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYsIGJvb2wpOwor
ICAgIHZvaWQgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjb25zdCBTdHJpbmcmIHVzZXIs
IGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOworCisgICAgdm9pZCBoYW5kbGVEYXRhVVJMKCk7Cisj
ZW5kaWYKKwogICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVybmFsOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmgKaW5kZXggNTE4Y2Y5YzljYmYuLjQzMTljZDE4MDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAt
MzcsMTMgKzM3LDggQEAKICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgogI2Vu
ZGlmCiAKLSNpZiBVU0UoQ1VSTCkgJiYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KICNpZiBVU0UoQ1VSTCkKLSNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIkN1cmxSZXF1ZXN0
LmgiCiAjZW5kaWYKIAogI2lmIFVTRShTT1VQKQpAQCAtODEsNyArNzYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9kZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpCiAgICAgICAgICwgbV9zaG91
bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQogICAgICAgICAsIG1fc2hvdWxkQ29u
dGVudEVuY29kaW5nU25pZmYoc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYpCi0jaWYgVVNFKENG
VVJMQ09OTkVDVElPTikKKyNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKSB8fCBVU0UoQ1VSTCkKICAg
ICAgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KHJlcXVlc3QpCiAjZW5kaWYKICNpZiBVU0UoU09VUCkK
QEAgLTEzMiw4ICsxMjcsMTMgQEAgcHVibGljOgogICAgIFJldGFpblB0cjxDRlVSTFN0b3JhZ2VT
ZXNzaW9uUmVmPiBtX3N0b3JhZ2VTZXNzaW9uOwogI2VuZGlmCiAjaWYgVVNFKENVUkwpCi0gICAg
UmVmUHRyPFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlPiBtX2RlbGVnYXRlOwogICAgIFJlc291
cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVx
dWVzdDsKKyAgICBib29sIG1fY2FuY2VsbGVkIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBtX3Jl
ZGlyZWN0Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9
OworICAgIGJvb2wgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgeyBmYWxzZSB9OworICAg
IFJlZlB0cjxDdXJsUmVxdWVzdD4gbV9jdXJsUmVxdWVzdDsKICNlbmRpZgogCiAjaWYgVVNFKFNP
VVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENhY2hlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENhY2hlTWFuYWdlci5jcHAKaW5kZXggOWFjZDE5NWUyODUuLmE4ZGViOTg4ZTFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
YWNoZU1hbmFnZXIuY3BwCkBAIC0xOTksMTAgKzE5OSw2IEBAIHZvaWQgQ3VybENhY2hlTWFuYWdl
cjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlJiBqb2IsIFJlc291cmNlUmVzcG9u
c2UmCiAgICAgaWYgKG1fZGlzYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlc291cmNl
SGFuZGxlSW50ZXJuYWwqIGQgPSBqb2IuZ2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQtPm1fZGVs
ZWdhdGUtPmhhc0hhbmRsZSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBjb25zdCBTdHJpbmcm
IHVybCA9IGpvYi5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKIAogICAgIHJlbW92ZUNh
Y2hlRW50cnlDbGllbnQodXJsLCAmam9iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggMjA4
MTU0NDRiMWMuLmI2M2IzZWY3ZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcApAQCAtMzIsMjAg
KzMyLDI4IEBACiAKICNpZiBVU0UoQ1VSTCkKIAorI2luY2x1ZGUgIkNvb2tpZUphckN1cmwuaCIK
ICNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgorI2luY2x1ZGUgIkN1cmxDYWNoZU1hbmFn
ZXIuaCIKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgorI2luY2x1ZGUgIkN1cmxSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlICJTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKIHsKLSAgICBpZiAobV9kZWxl
Z2F0ZSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cmVsZWFzZUhhbmRsZSgpOworICAgIGlmIChtX2N1
cmxSZXF1ZXN0KQorICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7CiB9
CiAKIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKSA9IGRlZmF1bHQ7CkBAIC03MSwx
NSArNzksMTY0IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgZC0+bV9kZWxlZ2F0ZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZSh0aGlzKSk7Ci0gICAgZC0+bV9kZWxlZ2F0ZS0+c3RhcnQoKTsK
KyAgICBhdXRvIGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGQtPm1fY3VycmVudFJlcXVlc3Qs
IGZhbHNlKTsKKworICAgIGQtPm1fY3VybFJlcXVlc3QgPSBjcmVhdGVDdXJsUmVxdWVzdChkLT5t
X2N1cnJlbnRSZXF1ZXN0KTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVk
ZW50aWFsLmZpcnN0LCBjcmVkZW50aWFsLnNlY29uZCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+
c3RhcnQoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpj
YW5jZWwoKQogewotICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRl
LT5jYW5jZWwoKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgZC0+bV9jYW5j
ZWxsZWQgPSB0cnVlOworCisgICAgaWYgKCFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICBkLT5t
X2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2Vs
bGVkT3JDbGllbnRsZXNzKCkKK3sKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuICFjbGllbnQoKTsKK30KKworUmVmPEN1cmxSZXF1ZXN0
PiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBDdXJsQ2FjaGUg
OiBhcHBlbmQgYWRkaXRpb25hbCBjYWNoZSBpbmZvcm1hdGlvbgorICAgIGQtPm1fYWRkZWRDYWNo
ZVZhbGlkYXRpb25IZWFkZXJzID0gZmFsc2U7CisKKyAgICBib29sIGhhc0NhY2hlSGVhZGVycyA9
IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lOjpJZk1v
ZGlmaWVkU2luY2UpIHx8IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5zKEhUVFBI
ZWFkZXJOYW1lOjpJZk5vbmVNYXRjaCk7CisgICAgaWYgKCFoYXNDYWNoZUhlYWRlcnMpIHsKKyAg
ICAgICAgYXV0byYgY2FjaGUgPSBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKTsKKyAgICAg
ICAgVVJMIGNhY2hlVXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgY2FjaGVVcmwucmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVyKCk7CisKKyAgICAgICAgaWYgKGNhY2hlLmlzQ2FjaGVkKGNhY2hl
VXJsKSkgeworICAgICAgICAgICAgY2FjaGUuYWRkQ2FjaGVFbnRyeUNsaWVudChjYWNoZVVybCwg
dGhpcyk7CisKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBjYWNoZS5yZXF1
ZXN0SGVhZGVycyhjYWNoZVVybCkpCisgICAgICAgICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVh
ZGVyRmllbGQoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7CisKKyAgICAgICAgICAgIGQtPm1fYWRk
ZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kIHNob3VsZFN1c3BlbmQgPSBkLT5tX2RlZmVyc0xv
YWRpbmcgPyBDdXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZDo6WWVzIDogQ3VybFJlcXVlc3Q6OlNo
b3VsZFN1c3BlbmQ6Ok5vOworICAgIHJldHVybiBDdXJsUmVxdWVzdDo6Y3JlYXRlKHJlcXVlc3Qs
IHRoaXMsIHNob3VsZFN1c3BlbmQsIEN1cmxSZXF1ZXN0OjpFbmFibGVNdWx0aXBhcnQ6Olllcyk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmN1cmxEaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25n
IGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoY2FuY2VsbGVkT3JDbGll
bnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsaWVudCgpLT5kaWRTZW5kRGF0YSh0
aGlzLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKK3N0YXRpYyB2b2lkIGhh
bmRsZUNvb2tpZUhlYWRlcnMoY29uc3QgQ3VybFJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBz
dGF0aWMgY29uc3QgYXV0byBzZXRDb29raWVIZWFkZXIgPSAic2V0LWNvb2tpZTogIjsKKworICAg
IGF1dG8mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVm
YXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgY29uc3QgQ29va2llSmFyQ3VybCYgY29va2llSmFy
ID0gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKKyAgICBmb3IgKGF1dG8g
aGVhZGVyIDogcmVzcG9uc2UuaGVhZGVycykgeworICAgICAgICBpZiAoaGVhZGVyLnN0YXJ0c1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZShzZXRDb29raWVIZWFkZXIpKSB7CisgICAgICAgICAgICBTdHJp
bmcgc2V0Q29va2llU3RyaW5nID0gaGVhZGVyLnJpZ2h0KGhlYWRlci5sZW5ndGgoKSAtIHN0cmxl
bihzZXRDb29raWVIZWFkZXIpKTsKKyAgICAgICAgICAgIGNvb2tpZUphci5zZXRDb29raWVzRnJv
bUhUVFBSZXNwb25zZShkZWZhdWx0U3RvcmFnZVNlc3Npb24sIHJlc3BvbnNlLnVybCwgc2V0Q29v
a2llU3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6
Y3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9u
c2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIWQtPm1fZGVm
ZXJzTG9hZGluZyk7CisKKyAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGQtPm1fcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKHJlY2VpdmVk
UmVzcG9uc2UpOworCisgICAgaWYgKGQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIGQtPm1fcmVz
cG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhkLT5tX2N1cmxSZXF1ZXN0LT5n
ZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7CisKKyAgICBoYW5kbGVDb29raWVIZWFkZXJzKHJlY2Vp
dmVkUmVzcG9uc2UpOworCisgICAgaWYgKGQtPm1fcmVzcG9uc2Uuc2hvdWxkUmVkaXJlY3QoKSkg
eworICAgICAgICB3aWxsU2VuZFJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChkLT5tX3Jlc3BvbnNlLmlzVW5hdXRob3JpemVkKCkpIHsKKyAgICAgICAgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHJlY2VpdmVkUmVzcG9uc2UsIGQtPm1fYXV0aEZh
aWx1cmVDb3VudCwgZC0+bV9yZXNwb25zZSwgdGhpcyk7CisgICAgICAgIGRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpOworICAgICAgICBkLT5tX2F1dGhGYWlsdXJl
Q291bnQrKzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkLT5tX3Jlc3BvbnNl
LmlzTm90TW9kaWZpZWQoKSkgeworICAgICAgICBVUkwgY2FjaGVVcmwgPSBkLT5tX3Jlc3BvbnNl
LnVybCgpOworICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKKwor
ICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q2FjaGVkUmVzcG9u
c2UoY2FjaGVVcmwsIGQtPm1fcmVzcG9uc2UpKSB7CisgICAgICAgICAgICBpZiAoZC0+bV9hZGRl
ZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMpIHsKKyAgICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNl
LnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisgICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5z
ZXRIVFRQU3RhdHVzVGV4dCgiT0siKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVSZXNwb25zZSgq
dGhpcywgZC0+bV9yZXNwb25zZSk7CisKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VS
ZXNwb25zZShkLT5tX3Jlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0geworICAgICAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxT
aGFyZWRCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVEYXRhKCp0aGlzLCBidWZm
ZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVm
ZmVyKHRoaXMsIFdURk1vdmUoYnVmZmVyKSwgYnVmZmVyLT5zaXplKCkpOworfQorCit2b2lkIFJl
c291cmNlSGFuZGxlOjpjdXJsRGlkQ29tcGxldGUoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICBkLT5tX3Jlc3BvbnNlLnNl
dERlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoZC0+bV9jdXJsUmVxdWVzdC0+Z2V0TmV0d29y
a0xvYWRNZXRyaWNzKCkpOworCisgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlk
RmluaXNoTG9hZGluZygqdGhpcyk7CisgICAgY2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcodGhp
cyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmN1cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0
IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkRmFpbCgqdGhpcyk7Cisg
ICAgY2xpZW50KCktPmRpZEZhaWwodGhpcywgcmVzb3VyY2VFcnJvcik7CiB9CiAKICNpZiBPUyhX
SU5ET1dTKQpAQCAtMTE1LDggKzI3MiwxOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9y
bVNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIAotICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5z
ZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CisgICAgaWYgKGRlZmVycyA9PSBkLT5tX2RlZmVyc0xv
YWRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGRlZmVy
czsKKworICAgIGlmICghZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGQtPm1fZGVmZXJzTG9hZGluZykKKyAgICAgICAgZC0+bV9jdXJsUmVxdWVzdC0+c3VzcGVu
ZCgpOworICAgIGVsc2UKKyAgICAgICAgZC0+bV9jdXJsUmVxdWVzdC0+cmVzdW1lKCk7CiB9CiAK
IGJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkKQEAgLTEz
Nyw5ICszMDQsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbAogICAgICAgICBpZiAoY2hhbGxl
bmdlLmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKQogICAgICAgICAg
ICAgdXJsVG9TdG9yZSA9IGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKTsKICAgICAg
ICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0
aXRpb24sIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9y
ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgIGQt
Pm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50
aWFsLnBhc3N3b3JkKCkpOworCisgICAgICAgIHJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwo
Y3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAKICAgICAgICAgZC0+
bV91c2VyID0gU3RyaW5nKCk7CiAgICAgICAgIGQtPm1fcGFzcyA9IFN0cmluZygpOwpAQCAtMTY0
LDggKzMzMCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAgICAgICAgICAgICAgICAg
IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0
aW9uLCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5m
YWlsdXJlUmVzcG9uc2UoKS51cmwoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgICAgICAgICAgICAgIGQtPm1fZGVsZWdh
dGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3
b3JkKCkpOworICAgICAgICAgICAgICAgIHJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY3Jl
ZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMDAsOCArMzY1LDcgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkLT5tX2Rl
bGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5zZXRBdXRoZW50aWNhdGlvbihjcmVkZW50
aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICByZXN0YXJ0UmVxdWVzdFdp
dGhDcmVkZW50aWFsKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwog
CiAgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogfQpAQCAtMjE2LDEwICszODAsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRp
YWwoY29uc3QgQXV0aGVudGljYQogICAgIGNsZWFyQXV0aGVudGljYXRpb24oKTsKIAogICAgIGRp
ZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlKGQtPm1fcmVzcG9uc2UpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICAgICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgICAgICBkLT5t
X2RlbGVnYXRlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAgICBjb250aW51
ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAgfSk7CiB9CiAKQEAgLTI0NiwxOCArNDA3
LDc4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2hhbGxlbmdlUmVqZWN0aW9uKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAorc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBSZXNvdXJjZUhhbmRsZTo6Z2V0Q3JlZGVu
dGlhbChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgcmVkaXJlY3QpCit7CisgICAgLy8g
bV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0YW5j
ZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgorICAg
IFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7CisKKyAgICBpZiAo
c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgeworICAgICAgICBpZiAoZC0+bV91c2VyLmlz
RW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyA8cmRhcjov
L3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9z
ZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAor
ICAgICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHks
IGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCisgICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50
aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChw
YXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9IGVsc2UgaWYgKCFyZWRpcmVjdCkg
eworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Ug
a25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMKKyAgICAgICAgICAg
IC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBp
bXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KKyAgICAgICAgICAgIC8vIFhNTEh0dHBSZXF1
ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1t
ZWRpYXRlbHkgKHNvIHRoYXQKKyAgICAgICAgICAgIC8vIGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxv
ZyBkb2Vzbid0IHBvcCB1cCkuCisgICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVs
dENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlvbiwgQ3JlZGVudGlhbChkLT5tX3VzZXIs
IGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHVzZXIgPSBkLT5tX3VzZXI7CisgICAgU3Ry
aW5nIHBhc3N3b3JkID0gZC0+bV9wYXNzOworCisgICAgaWYgKCFkLT5tX2luaXRpYWxDcmVkZW50
aWFsLmlzRW1wdHkoKSkgeworICAgICAgICB1c2VyID0gZC0+bV9pbml0aWFsQ3JlZGVudGlhbC51
c2VyKCk7CisgICAgICAgIHBhc3N3b3JkID0gZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29y
ZCgpOworICAgIH0KKworICAgIGlmICh1c2VyLmlzRW1wdHkoKSAmJiBwYXNzd29yZC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KCIiLCAiIik7CisK
KyAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPih1c2VyLCBwYXNzd29yZCk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY29u
c3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBib29sIGlzU3luY1JlcXVlc3QgPSBkLT5tX2N1cmxSZXF1ZXN0LT5p
c1N5bmNSZXF1ZXN0KCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7CisgICAgZC0+
bV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIpOworCisgICAgZC0+bV9jdXJsUmVxdWVz
dCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1fY3VycmVudFJlcXVlc3QpOworICAgIGQtPm1fY3Vy
bFJlcXVlc3QtPnNldFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKKyAgICBkLT5tX2N1cmxSZXF1
ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKK30KKwogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxh
dGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisgICAgYXV0
byBsb2NhbFJlcXVlc3QgPSByZXF1ZXN0OwogICAgIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50IGNs
aWVudDsKICAgICBib29sIGRlZmVyc0xvYWRpbmcgPSBmYWxzZTsKICAgICBib29sIHNob3VsZENv
bnRlbnRTbmlmZiA9IHRydWU7CiAgICAgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiA9
IHRydWU7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihuZXcg
UmVzb3VyY2VIYW5kbGUoY29udGV4dCwgcmVxdWVzdCwgJmNsaWVudCwgZGVmZXJzTG9hZGluZywg
c2hvdWxkQ29udGVudFNuaWZmLCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZikpOwogCi0gICAg
aGFuZGxlLT5kLT5tX2RlbGVnYXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlKGhhbmRsZS5nZXQoKSkpOwotICAgIGhhbmRsZS0+ZC0+bV9kZWxlZ2F0ZS0+ZGlzcGF0
Y2hTeW5jaHJvbm91c0pvYigpOworICAgIGlmIChsb2NhbFJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
c0RhdGEoKSkgeworICAgICAgICBoYW5kbGUtPmhhbmRsZURhdGFVUkwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIElmIGRlZmVyc0xvYWRpbmcgaXMgdHJ1ZSBhbmQgd2UgY2Fs
bCBjdXJsX2Vhc3lfcGVyZm9ybQorICAgIC8vIG9uIGEgcGF1c2VkIGhhbmRsZSwgbGliY1VSTCB3
b3VsZCBkbyB0aGUgdHJhbnNmZXIgYW55d2F5CisgICAgLy8gYW5kIHdlIHdvdWxkIGFzc2VydCBz
byBmb3JjZSBkZWZlcnNMb2FkaW5nIHRvIGJlIGZhbHNlLgorICAgIGhhbmRsZS0+ZC0+bV9kZWZl
cnNMb2FkaW5nID0gZmFsc2U7CisKKyAgICBoYW5kbGUtPmQtPm1fY3VybFJlcXVlc3QgPSBoYW5k
bGUtPmNyZWF0ZUN1cmxSZXF1ZXN0KGxvY2FsUmVxdWVzdCk7CisgICAgaGFuZGxlLT5kLT5tX2N1
cmxSZXF1ZXN0LT5zdGFydCh0cnVlKTsKIAogICAgIGVycm9yID0gY2xpZW50LmVycm9yKCk7CiAg
ICAgZGF0YS5zd2FwKGNsaWVudC5tdXRhYmxlRGF0YSgpKTsKQEAgLTI2OCw4ICs0ODksMTczIEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91c0RpZFJlY2Vp
dmVSZXNwb25zZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmIChk
LT5tX2RlbGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5wbGF0Zm9ybUNvbnRpbnVlU3lu
Y2hyb25vdXNEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2
ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQWZ0ZXJEaWRS
ZWNlaXZlUmVzcG9uc2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAv
LyBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYW5jZWwgdGhlIGxvYWQuCisgICAg
aWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpIHx8ICFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5jb21wbGV0ZURpZFJlY2VpdmVSZXNw
b25zZSgpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRSZWRpcmVjdEFzR0VUKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBjcm9zc09yaWdpbikKK3sKKyAgICBp
ZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgcmVxdWVzdC5odHRwTWV0aG9kKCkg
PT0gIkhFQUQiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlcXVlc3QudXJs
KCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChkLT5tX3Jlc3BvbnNlLmlzU2VlT3RoZXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoKGQtPm1fcmVzcG9uc2UuaXNNb3ZlZFBlcm1hbmVudGx5KCkgfHwgZC0+bV9yZXNw
b25zZS5pc0ZvdW5kKCkpICYmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjcm9zc09yaWdpbiAmJiAocmVxdWVzdC5odHRw
TWV0aG9kKCkgPT0gIkRFTEVURSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhS
ZWRpcmVjdHMgPSAyMDsKKworICAgIGlmIChkLT5tX3JlZGlyZWN0Q291bnQrKyA+IG1heFJlZGly
ZWN0cykgeworICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yOjpo
dHRwRXJyb3IoQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTLCBkLT5tX3Jlc3BvbnNlLnVybCgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBkLT5tX3Jl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pOworICAgIFVS
TCBuZXdVUkwgPSBVUkwoZC0+bV9yZXNwb25zZS51cmwoKSwgbG9jYXRpb24pOworICAgIGJvb2wg
Y3Jvc3NPcmlnaW4gPSAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGQtPm1fZmlyc3RSZXF1
ZXN0LnVybCgpLCBuZXdVUkwpOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSBk
LT5tX2ZpcnN0UmVxdWVzdDsKKyAgICBuZXdSZXF1ZXN0LnNldFVSTChuZXdVUkwpOworCisgICAg
aWYgKHNob3VsZFJlZGlyZWN0QXNHRVQobmV3UmVxdWVzdCwgY3Jvc3NPcmlnaW4pKSB7CisgICAg
ICAgIG5ld1JlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgIG5ld1JlcXVlc3Qu
c2V0SFRUUEJvZHkobnVsbHB0cik7CisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQ29udGVu
dFR5cGUoKTsKKyAgICB9CisKKyAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVyIGEg
cmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KKyAgICBp
ZiAoIW5ld1VSTC5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3RvY29sSXMobmV3UmVxdWVzdC5o
dHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYgY29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpCisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQUmVm
ZXJyZXIoKTsKKworICAgIGQtPm1fdXNlciA9IG5ld1VSTC51c2VyKCk7CisgICAgZC0+bV9wYXNz
ID0gbmV3VVJMLnBhc3MoKTsKKyAgICBuZXdSZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisK
KyAgICBpZiAoY3Jvc3NPcmlnaW4pIHsKKyAgICAgICAgLy8gSWYgdGhlIG5ldHdvcmsgbGF5ZXIg
Y2FycmllcyBvdmVyIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVx
dWVzdAorICAgICAgICAvLyBpbiBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCwgd2Ugd2FudCB0byBj
bGVhciB0aG9zZSBoZWFkZXJzIGhlcmUuIAorICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUEF1
dGhvcml6YXRpb24oKTsKKyAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKKyAg
ICB9CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlQ29weSA9IGQtPm1fcmVzcG9uc2U7
CisgICAgY2xpZW50KCktPndpbGxTZW5kUmVxdWVzdEFzeW5jKHRoaXMsIFdURk1vdmUobmV3UmVx
dWVzdCksIFdURk1vdmUocmVzcG9uc2VDb3B5KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0gKFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpIHsKKyAgICAgICAgY29udGlu
dWVBZnRlcldpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICB9KTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QmJiByZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICAvLyB3aWxsU2VuZFJlcXVlc3QgbWlnaHQgY2FuY2VsIHRoZSBsb2FkLgorICAgIGlmIChjYW5j
ZWxsZWRPckNsaWVudGxlc3MoKSB8fCAhZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZC0+bV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCk7CisKKyAgICBi
b29sIGlzU3luY1JlcXVlc3QgPSBkLT5tX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7Cisg
ICAgZC0+bV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0
Q2xpZW50KG51bGxwdHIpOworCisgICAgZC0+bV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1
ZXN0KGQtPm1fY3VycmVudFJlcXVlc3QpOworCisgICAgaWYgKHByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChkLT5tX2N1cnJlbnRSZXF1ZXN0LnVybCgpLCBkLT5tX3Jlc3BvbnNlLnVybCgpKSkg
eworICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGQtPm1fY3VycmVudFJl
cXVlc3QsIHRydWUpOworICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVk
ZW50aWFsLmZpcnN0LCBjcmVkZW50aWFsLnNlY29uZCk7CisgICAgfQorCisgICAgZC0+bV9jdXJs
UmVxdWVzdC0+c3RhcnQoaXNTeW5jUmVxdWVzdCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
OmhhbmRsZURhdGFVUkwoKQoreworICAgIEFTU0VSVChkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5w
cm90b2NvbElzRGF0YSgpKTsKKyAgICBTdHJpbmcgdXJsID0gZC0+bV9maXJzdFJlcXVlc3QudXJs
KCkuc3RyaW5nKCk7CisKKyAgICBBU1NFUlQoY2xpZW50KCkpOworCisgICAgYXV0byBpbmRleCA9
IHVybC5maW5kKCcsJyk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgIGNs
aWVudCgpLT5jYW5ub3RTaG93VVJMKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU3RyaW5nIG1lZGlhVHlwZSA9IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKKyAgICBT
dHJpbmcgZGF0YSA9IHVybC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKKyAgICBhdXRvIG9yaWdpbmFs
U2l6ZSA9IGRhdGEubGVuZ3RoKCk7CisKKyAgICBib29sIGJhc2U2NCA9IG1lZGlhVHlwZS5lbmRz
V2l0aElnbm9yaW5nQVNDSUlDYXNlKCI7YmFzZTY0Iik7CisgICAgaWYgKGJhc2U2NCkKKyAgICAg
ICAgbWVkaWFUeXBlID0gbWVkaWFUeXBlLmxlZnQobWVkaWFUeXBlLmxlbmd0aCgpIC0gNyk7CisK
KyAgICBpZiAobWVkaWFUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgbWVkaWFUeXBlID0gInRleHQv
cGxhaW4iOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlh
VHlwZShtZWRpYVR5cGUpOworICAgIFN0cmluZyBjaGFyc2V0ID0gZXh0cmFjdENoYXJzZXRGcm9t
TWVkaWFUeXBlKG1lZGlhVHlwZSk7CisKKyAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCisgICAg
ICAgIGNoYXJzZXQgPSAiVVMtQVNDSUkiOworCisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZTsKKyAgICByZXNwb25zZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CisgICAgcmVzcG9uc2Uuc2V0
VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKKyAgICByZXNwb25zZS5zZXRVUkwoZC0+bV9maXJz
dFJlcXVlc3QudXJsKCkpOworCisgICAgaWYgKGJhc2U2NCkgeworICAgICAgICBkYXRhID0gZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEpOworICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2Uo
V1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
IHsKKyAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBj
bGllbnQgdG8gYmUgZGVsZXRlZC4KKyAgICAgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gb3V0OworICAgICAgICAgICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBv
dXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKKyAg
ICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0
KTsKKyAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhLCBlbmNvZGlu
Zyk7CisgICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICAgICAgY29udGludWVB
ZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBkaWRS
ZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgorICAg
ICAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBlbmNv
ZGluZy5lbmNvZGUoZGF0YSwgVW5lbmNvZGFibGVIYW5kbGluZzo6VVJMRW5jb2RlZEVudGl0aWVz
KTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5zaXplKCkpCisgICAgICAgICAgICAgICAg
Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNpemUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYzQ0NjU1NmZlLi4w
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTIzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgTkFWRVIgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgiCi0KLSNpZiBVU0UoQ1VSTCkKLQot
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiQ29va2llSmFy
Q3VybC5oIgotI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiQ3VybENh
Y2hlTWFuYWdlci5oIgotI2luY2x1ZGUgIkN1cmxSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSFRUUFBh
cnNlcnMuaCIKLSNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUpCi0gICAgOiBtX2hhbmRsZShoYW5kbGUpCi0gICAgLCBtX2Zp
cnN0UmVxdWVzdChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmlzb2xhdGVkQ29weSgpKQotICAgICwg
bV9jdXJyZW50UmVxdWVzdChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmlzb2xhdGVkQ29weSgpKQot
ICAgICwgbV9zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShoYW5kbGUtPnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCkpCi0gICAgLCBtX3VzZXIoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Vz
ZXIuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX3Bhc3MoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5t
X3Bhc3MuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2luaXRpYWxDcmVkZW50aWFsKGhhbmRsZS0+
Z2V0SW50ZXJuYWwoKS0+bV9pbml0aWFsQ3JlZGVudGlhbCkKLSAgICAsIG1fZGVmZXJzTG9hZGlu
ZyhoYW5kbGUtPmdldEludGVybmFsKCktPm1fZGVmZXJzTG9hZGluZykKLXsKLQotfQotCi1SZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6flJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKCkKLXsK
LSAgICBpZiAobV9jdXJsUmVxdWVzdCkKLSAgICAgICAgbV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50
KG51bGxwdHIpOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYXNIYW5k
bGUoKSBjb25zdAotewotICAgIHJldHVybiAhIW1faGFuZGxlOwotfQotCi12b2lkIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpyZWxlYXNlSGFuZGxlKCkKLXsKLSAgICBtX2hhbmRsZSA9IG51
bGxwdHI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnN0YXJ0KCkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgYXV0byBjcmVkZW50aWFsID0gZ2V0
Q3JlZGVudGlhbChtX2N1cnJlbnRSZXF1ZXN0LCBmYWxzZSk7Ci0KLSAgICBtX2N1cmxSZXF1ZXN0
ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7Ci0gICAgbV9jdXJsUmVxdWVz
dC0+c2V0VXNlclBhc3MoY3JlZGVudGlhbC5maXJzdCwgY3JlZGVudGlhbC5zZWNvbmQpOwotICAg
IG1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGU6OmNhbmNlbCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHJl
bGVhc2VIYW5kbGUoKTsKLQotICAgIGlmICghbV9jdXJsUmVxdWVzdCkKLSAgICAgICAgbV9jdXJs
UmVxdWVzdC0+Y2FuY2VsKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIGlmIChkZWZlcnMgPT0gbV9kZWZlcnNMb2FkaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RlZmVyc0xvYWRpbmcgPSBkZWZlcnM7Ci0KLSAgICBpZiAoIW1fY3VybFJl
cXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2RlZmVyc0xvYWRpbmcpCi0gICAg
ICAgIG1fY3VybFJlcXVlc3QtPnN1c3BlbmQoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VybFJl
cXVlc3QtPnJlc3VtZSgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpz
ZXRBdXRoZW50aWNhdGlvbihjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dv
cmQpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV9jdXJsUmVx
dWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBpc1N5bmNSZXF1ZXN0ID0gbV9jdXJs
UmVxdWVzdC0+aXNTeW5jUmVxdWVzdCgpOwotICAgIG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOwot
ICAgIG1fY3VybFJlcXVlc3QtPnNldENsaWVudChudWxscHRyKTsKLQotICAgIG1fY3VybFJlcXVl
c3QgPSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLSAgICBtX2N1cmxSZXF1
ZXN0LT5zZXRVc2VyUGFzcyh1c2VyLCBwYXNzd29yZCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c3Rh
cnQoaXNTeW5jUmVxdWVzdCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OmRpc3BhdGNoU3luY2hyb25vdXNKb2IoKQotewotICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNEYXRhKCkpIHsKLSAgICAgICAgaGFuZGxlRGF0YVVSTCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgZGVmZXJzTG9hZGluZyBpcyB0cnVlIGFuZCB3
ZSBjYWxsIGN1cmxfZWFzeV9wZXJmb3JtCi0gICAgLy8gb24gYSBwYXVzZWQgaGFuZGxlLCBsaWJj
VVJMIHdvdWxkIGRvIHRoZSB0cmFuc2ZlcnQgYW55d2F5Ci0gICAgLy8gYW5kIHdlIHdvdWxkIGFz
c2VydCBzbyBmb3JjZSBkZWZlcnNMb2FkaW5nIHRvIGJlIGZhbHNlLgotICAgIG1fZGVmZXJzTG9h
ZGluZyA9IGZhbHNlOwotCi0gICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1f
Y3VycmVudFJlcXVlc3QpOwotICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KHRydWUpOwotfQotCi1S
ZWY8Q3VybFJlcXVlc3Q+IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjcmVhdGVDdXJsUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIC8vIEN1cmxDYWNoZSA6IGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9y
bWF0aW9uCi0gICAgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSBmYWxzZTsKLQotICAg
IGJvb2wgaGFzQ2FjaGVIZWFkZXJzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFp
bnMoSFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSkgfHwgcmVxdWVzdC5odHRwSGVhZGVy
RmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoKTsKLSAgICBpZiAo
IWhhc0NhY2hlSGVhZGVycykgewotICAgICAgICBhdXRvJiBjYWNoZSA9IEN1cmxDYWNoZU1hbmFn
ZXI6OnNpbmdsZXRvbigpOwotICAgICAgICBVUkwgY2FjaGVVcmwgPSByZXF1ZXN0LnVybCgpOwot
ICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgICAgICBp
ZiAoY2FjaGUuaXNDYWNoZWQoY2FjaGVVcmwpKSB7Ci0gICAgICAgICAgICBjYWNoZS5hZGRDYWNo
ZUVudHJ5Q2xpZW50KGNhY2hlVXJsLCBtX2hhbmRsZSk7Ci0KLSAgICAgICAgICAgIGZvciAoY29u
c3QgYXV0byYgZW50cnkgOiBjYWNoZS5yZXF1ZXN0SGVhZGVycyhjYWNoZVVybCkpCi0gICAgICAg
ICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGQoZW50cnkua2V5LCBlbnRyeS52YWx1
ZSk7Ci0KLSAgICAgICAgICAgIG1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kIHNob3Vs
ZFN1c3BlbmQgPSBtX2RlZmVyc0xvYWRpbmcgPyBDdXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZDo6
WWVzIDogQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQ6Ok5vOwotICAgIHJldHVybiBDdXJsUmVx
dWVzdDo6Y3JlYXRlKHJlcXVlc3QsIHRoaXMsIHNob3VsZFN1c3BlbmQsIEN1cmxSZXF1ZXN0OjpF
bmFibGVNdWx0aXBhcnQ6Olllcyk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGU6OmNhbmNlbGxlZE9yQ2xpZW50bGVzcygpCi17Ci0gICAgaWYgKCFtX2hhbmRsZSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gIW1faGFuZGxlLT5jbGllbnQoKTsKLX0KLQot
dm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZFNlbmREYXRhKHVuc2lnbmVk
IGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNl
bnQpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChjYW5jZWxsZWRP
ckNsaWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYW5kbGUtPmNsaWVudCgp
LT5kaWRTZW5kRGF0YShtX2hhbmRsZSwgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwot
fQotCi1zdGF0aWMgdm9pZCBoYW5kbGVDb29raWVIZWFkZXJzKGNvbnN0IEN1cmxSZXNwb25zZSYg
cmVzcG9uc2UpCi17Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gc2V0Q29va2llSGVhZGVyID0gInNl
dC1jb29raWU6ICI7Ci0KLSAgICBhdXRvJiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIGNvbnN0IENvb2tp
ZUphckN1cmwmIGNvb2tpZUphciA9IGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi5jb29raWVTdG9yYWdl
KCk7Ci0gICAgZm9yIChhdXRvIGhlYWRlciA6IHJlc3BvbnNlLmhlYWRlcnMpIHsKLSAgICAgICAg
aWYgKGhlYWRlci5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uoc2V0Q29va2llSGVhZGVyKSkg
ewotICAgICAgICAgICAgU3RyaW5nIHNldENvb2tpZVN0cmluZyA9IGhlYWRlci5yaWdodChoZWFk
ZXIubGVuZ3RoKCkgLSBzdHJsZW4oc2V0Q29va2llSGVhZGVyKSk7Ci0gICAgICAgICAgICBjb29r
aWVKYXIuc2V0Q29va2llc0Zyb21IVFRQUmVzcG9uc2UoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLCBy
ZXNwb25zZS51cmwsIHNldENvb2tpZVN0cmluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgQ3VybFJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2RlZmVyc0xvYWRpbmcpOwotCi0gICAgaWYgKGNhbmNl
bGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hhbmRsZS0+Z2V0
SW50ZXJuYWwoKS0+bV9yZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25z
ZSk7Ci0KLSAgICBpZiAobV9jdXJsUmVxdWVzdCkKLSAgICAgICAgbV9oYW5kbGUtPmdldEludGVy
bmFsKCktPm1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhtX2N1cmxS
ZXF1ZXN0LT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7Ci0KLSAgICBoYW5kbGVDb29raWVIZWFk
ZXJzKHJlY2VpdmVkUmVzcG9uc2UpOwotCi0gICAgaWYgKHJlc3BvbnNlKCkuc2hvdWxkUmVkaXJl
Y3QoKSkgewotICAgICAgICB3aWxsU2VuZFJlcXVlc3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChyZXNwb25zZSgpLmlzVW5hdXRob3JpemVkKCkpIHsKLSAgICAgICAgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHJlY2VpdmVkUmVzcG9uc2UsIG1fYXV0aEZh
aWx1cmVDb3VudCwgcmVzcG9uc2UoKSwgbV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRsZS0+ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7Ci0gICAgICAgIG1fYXV0
aEZhaWx1cmVDb3VudCsrOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faGFu
ZGxlLT5jbGllbnQoKSkgewotICAgICAgICBpZiAocmVzcG9uc2UoKS5pc05vdE1vZGlmaWVkKCkp
IHsKLSAgICAgICAgICAgIFVSTCBjYWNoZVVybCA9IG1fY3VycmVudFJlcXVlc3QudXJsKCk7Ci0g
ICAgICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgICAg
ICAgICAgaWYgKEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmdldENhY2hlZFJlc3BvbnNl
KGNhY2hlVXJsLCByZXNwb25zZSgpKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2FkZGVkQ2Fj
aGVWYWxpZGF0aW9uSGVhZGVycykgewotICAgICAgICAgICAgICAgICAgICByZXNwb25zZSgpLnNl
dEhUVFBTdGF0dXNDb2RlKDIwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlKCkuc2V0
SFRUUFN0YXR1c1RleHQoIk9LIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVj
ZWl2ZVJlc3BvbnNlKCptX2hhbmRsZSwgcmVzcG9uc2UoKSk7Ci0KLSAgICAgICAgYXV0byBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqbV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRsZS0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UoKSksIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRS
ZWNlaXZlUmVzcG9uc2UoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVy
PiYmIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNh
bmNlbGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDdXJsQ2FjaGVN
YW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZlRGF0YSgqbV9oYW5kbGUsIGJ1ZmZlci0+ZGF0
YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZl
QnVmZmVyKG1faGFuZGxlLCBXVEZNb3ZlKGJ1ZmZlciksIGJ1ZmZlci0+c2l6ZSgpKTsKLX0KLQot
dm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZENvbXBsZXRlKCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVz
cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jdXJsUmVxdWVzdCkKLSAgICAgICAg
bV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtM
b2FkTWV0cmljcyhtX2N1cmxSZXF1ZXN0LT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7Ci0KLSAg
ICBpZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0gICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNp
bmdsZXRvbigpLmRpZEZpbmlzaExvYWRpbmcoKm1faGFuZGxlKTsKLSAgICAgICAgbV9oYW5kbGUt
PmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlKTsKLSAgICB9Ci19Ci0KLXZvaWQg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0IFJl
c291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkRmFpbCgqbV9oYW5kbGUpOwot
ICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRsZSwgcmVzb3VyY2VFcnJvcik7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgY29udGlu
dWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpwbGF0Zm9ybUNvbnRpbnVlU3luY2hyb25vdXNEaWRSZWNlaXZlUmVzcG9uc2Uo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBjb250aW51ZUFmdGVyRGlk
UmVjZWl2ZVJlc3BvbnNlKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OmNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICAvLyBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYW5j
ZWwgdGhlIGxvYWQuCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpIHx8ICFtX2N1cmxS
ZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2N1cmxSZXF1ZXN0LT5jb21wbGV0ZURp
ZFJlY2VpdmVSZXNwb25zZSgpOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
OjpzaG91bGRSZWRpcmVjdEFzR0VUKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9v
bCBjcm9zc09yaWdpbikKLXsKLSAgICBpZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkdFVCIg
fHwgcmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkhFQUQiKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZXNwb25zZSgpLmlzU2VlT3RoZXIoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKHJlc3BvbnNlKCkuaXNNb3ZlZFBlcm1hbmVu
dGx5KCkgfHwgcmVzcG9uc2UoKS5pc0ZvdW5kKCkpICYmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9
PSAiUE9TVCIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjcm9zc09yaWdpbiAm
JiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkRFTEVURSIpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYXhSZWRpcmVjdHMgPSAyMDsKLQotICAgIGlmIChtX3Jl
ZGlyZWN0Q291bnQrKyA+IG1heFJlZGlyZWN0cykgewotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50
KCktPmRpZEZhaWwobV9oYW5kbGUsIFJlc291cmNlRXJyb3I6Omh0dHBFcnJvcihDVVJMRV9UT09f
TUFOWV9SRURJUkVDVFMsIHJlc3BvbnNlKCkudXJsKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIFN0cmluZyBsb2NhdGlvbiA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhU
VFBIZWFkZXJOYW1lOjpMb2NhdGlvbik7Ci0gICAgVVJMIG5ld1VSTCA9IFVSTChtX2hhbmRsZS0+
Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZS51cmwoKSwgbG9jYXRpb24pOwotICAgIGJvb2wgY3Jv
c3NPcmlnaW4gPSAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1fZmlyc3RSZXF1ZXN0LnVy
bCgpLCBuZXdVUkwpOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSBtX2ZpcnN0
UmVxdWVzdDsKLSAgICBuZXdSZXF1ZXN0LnNldFVSTChuZXdVUkwpOwotCi0gICAgaWYgKHNob3Vs
ZFJlZGlyZWN0QXNHRVQobmV3UmVxdWVzdCwgY3Jvc3NPcmlnaW4pKSB7Ci0gICAgICAgIG5ld1Jl
cXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUEJv
ZHkobnVsbHB0cik7Ci0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsK
LSAgICB9Ci0KLSAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3Qg
ZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KLSAgICBpZiAoIW5ld1VS
TC5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3RvY29sSXMobmV3UmVxdWVzdC5odHRwUmVmZXJy
ZXIoKSwgImh0dHBzIikgJiYgbV9oYW5kbGUtPmNvbnRleHQoKS0+c2hvdWxkQ2xlYXJSZWZlcnJl
ck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgpKQotICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUFJl
ZmVycmVyKCk7Ci0KLSAgICBtX3VzZXIgPSBuZXdVUkwudXNlcigpOwotICAgIG1fcGFzcyA9IG5l
d1VSTC5wYXNzKCk7Ci0gICAgbmV3UmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOwotCi0gICAg
aWYgKGNyb3NzT3JpZ2luKSB7Ci0gICAgICAgIC8vIElmIHRoZSBuZXR3b3JrIGxheWVyIGNhcnJp
ZXMgb3ZlciBhdXRoZW50aWNhdGlvbiBoZWFkZXJzIGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QK
LSAgICAgICAgLy8gaW4gYSBjcm9zcy1vcmlnaW4gcmVkaXJlY3QsIHdlIHdhbnQgdG8gY2xlYXIg
dGhvc2UgaGVhZGVycyBoZXJlLiAKLSAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBBdXRob3Jp
emF0aW9uKCk7Ci0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQT3JpZ2luKCk7Ci0gICAgfQot
Ci0gICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZUNvcHkgPSByZXNwb25zZSgpOwotICAgIG1f
aGFuZGxlLT5jbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0QXN5bmMobV9oYW5kbGUsIFdURk1vdmUo
bmV3UmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2VDb3B5KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0gKFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpIHsKLSAgICAgICAg
Y29udGludWVXaWxsU2VuZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0
KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIGNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNvbnRpbnVlQWZ0ZXJXaWxs
U2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgLy8gd2lsbFNlbmRSZXF1ZXN0IG1pZ2h0IGNhbmNlbCB0aGUg
bG9hZC4KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkgfHwgIW1fY3VybFJlcXVlc3Qp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVudFJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVl
c3QpOwotCi0gICAgYm9vbCBpc1N5bmNSZXF1ZXN0ID0gbV9jdXJsUmVxdWVzdC0+aXNTeW5jUmVx
dWVzdCgpOwotICAgIG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOwotICAgIG1fY3VybFJlcXVlc3Qt
PnNldENsaWVudChudWxscHRyKTsKLQotICAgIG1fY3VybFJlcXVlc3QgPSBjcmVhdGVDdXJsUmVx
dWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLQotICAgIGlmIChwcm90b2NvbEhvc3RBbmRQb3J0QXJl
RXF1YWwobV9jdXJyZW50UmVxdWVzdC51cmwoKSwgcmVzcG9uc2UoKS51cmwoKSkpIHsKLSAgICAg
ICAgYXV0byBjcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbChtX2N1cnJlbnRSZXF1ZXN0LCB0cnVl
KTsKLSAgICAgICAgbV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3MoY3JlZGVudGlhbC5maXJzdCwg
Y3JlZGVudGlhbC5zZWNvbmQpOwotICAgIH0KLQotICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KGlz
U3luY1JlcXVlc3QpOwotfQotCi1SZXNvdXJjZVJlc3BvbnNlJiBSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZTo6cmVzcG9uc2UoKQotewotICAgIHJldHVybiBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwo
KS0+bV9yZXNwb25zZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFu
ZGxlRGF0YVVSTCgpCi17Ci0gICAgQVNTRVJUKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnByb3RvY29s
SXNEYXRhKCkpOwotICAgIFN0cmluZyB1cmwgPSBtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmco
KTsKLQotICAgIEFTU0VSVChtX2hhbmRsZS0+Y2xpZW50KCkpOwotCi0gICAgYXV0byBpbmRleCA9
IHVybC5maW5kKCcsJyk7Ci0gICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIG1f
aGFuZGxlLT5jbGllbnQoKS0+Y2Fubm90U2hvd1VSTChtX2hhbmRsZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbWVkaWFUeXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRl
eCAtIDUpOwotICAgIFN0cmluZyBkYXRhID0gdXJsLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAg
IGF1dG8gb3JpZ2luYWxTaXplID0gZGF0YS5sZW5ndGgoKTsKLQotICAgIGJvb2wgYmFzZTY0ID0g
bWVkaWFUeXBlLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIjtiYXNlNjQiKTsKLSAgICBpZiAo
YmFzZTY0KQotICAgICAgICBtZWRpYVR5cGUgPSBtZWRpYVR5cGUubGVmdChtZWRpYVR5cGUubGVu
Z3RoKCkgLSA3KTsKLQotICAgIGlmIChtZWRpYVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBtZWRp
YVR5cGUgPSAidGV4dC9wbGFpbiI7Ci0KLSAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0TUlN
RVR5cGVGcm9tTWVkaWFUeXBlKG1lZGlhVHlwZSk7Ci0gICAgU3RyaW5nIGNoYXJzZXQgPSBleHRy
YWN0Q2hhcnNldEZyb21NZWRpYVR5cGUobWVkaWFUeXBlKTsKLQotICAgIGlmIChjaGFyc2V0Lmlz
RW1wdHkoKSkKLSAgICAgICAgY2hhcnNldCA9ICJVUy1BU0NJSSI7Ci0KLSAgICBSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlOwotICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKLSAg
ICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGNoYXJzZXQpOwotICAgIHJlc3BvbnNlLnNl
dFVSTChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7Ci0KLSAgICBpZiAoYmFzZTY0KSB7Ci0gICAgICAg
IGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7Ci0gICAgICAgIG1faGFuZGxl
LT5kaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3Bv
bnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KLSAgICAgICAgaWYgKG1f
aGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAg
ICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGF0YSwgb3V0LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmRO
ZXdMaW5lcykgJiYgb3V0LnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNs
aWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKG1faGFuZGxlLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShv
dXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsKLSAgICAgICAg
ZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhLCBlbmNvZGluZyk7Ci0gICAgICAg
IG1faGFuZGxlLT5kaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGNvbnRpbnVlQWZ0
ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gZGlkUmVj
ZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KLSAgICAg
ICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0
YSA9IGVuY29kaW5nLmVuY29kZShkYXRhLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVk
RW50aXRpZXMpOwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLnNpemUoKSkKLSAgICAgICAg
ICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZW5jb2RlZERhdGEpKSwgb3JpZ2luYWxTaXplKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7Ci19Ci0KLXN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmdldENy
ZWRlbnRpYWwoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHJlZGlyZWN0KQotewotICAg
IC8vIG1fdXNlci9tX3Bhc3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5z
dGFuY2UsIGJ5IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4K
LSAgICBTdHJpbmcgcGFydGl0aW9uID0gcmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpOwotCi0gICAg
aWYgKG1fc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpIHsKLSAgICAgICAgaWYgKG1fdXNlci5p
c0VtcHR5KCkgJiYgbV9wYXNzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gPHJkYXI6Ly9w
cm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgb2YgdGhvc2Ug
cHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLCAKLSAg
ICAgICAgICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBh
cyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgotICAgICAgICAgICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9
IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0
aW9uLCByZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICghcmVkaXJlY3QpIHsKLSAg
ICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtub3du
IGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzCi0gICAgICAgICAgICAvLyBi
ZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVt
ZW50IGxvZ291dCBieSBzZW5kaW5nIGFuCi0gICAgICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdCB3
aXRoIGtub3duIGluY29ycmVjdCBjcmVkZW50aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0
ZWx5IChzbyB0aGF0Ci0gICAgICAgICAgICAvLyBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9l
c24ndCBwb3AgdXApLgotICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVk
ZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIENyZWRlbnRpYWwobV91c2VyLCBtX3Bhc3Ms
IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCByZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIFN0cmluZyB1c2VyID0gbV91c2VyOwotICAgIFN0cmluZyBwYXNzd29yZCA9
IG1fcGFzczsKLQotICAgIGlmICghbV9pbml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgdXNlciA9IG1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpOwotICAgICAgICBwYXNzd29y
ZCA9IG1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKTsKLSAgICB9Ci0KLSAgICBpZiAodXNl
ci5pc0VtcHR5KCkgJiYgcGFzc3dvcmQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPigiIiwgIiIpOwotCi0gICAgcmV0dXJuIHN0ZDo6cGFpcjxTdHJp
bmcsIFN0cmluZz4odXNlciwgcGFzc3dvcmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZmJmZmE1M2JmOTEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgTkFWRVIgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
NyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgVVNFKENVUkwpCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsLmgiCi0jaW5jbHVkZSAi
Q3VybFJlcXVlc3RDbGllbnQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDdXJsUmVxdWVzdDsKLWNsYXNzIFJlc291cmNlSGFu
ZGxlOwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLQotY2xhc3MgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGUgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU+LCBwdWJsaWMgQ3VybFJlcXVlc3RDbGllbnQgewotcHVibGljOgotICAg
IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKFJlc291cmNlSGFuZGxlKik7Ci0gICAgflJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlKCk7Ci0KLSAgICB2b2lkIHJlZigpIG92ZXJyaWRlIHsgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+OjpyZWYoKTsgfQot
ICAgIHZvaWQgZGVyZWYoKSBvdmVycmlkZSB7IFRocmVhZFNhZmVSZWZDb3VudGVkPFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlPjo6ZGVyZWYoKTsgfQotCi0gICAgYm9vbCBoYXNIYW5kbGUoKSBj
b25zdDsKLSAgICB2b2lkIHJlbGVhc2VIYW5kbGUoKTsKLQotICAgIHZvaWQgc3RhcnQoKTsKLSAg
ICB2b2lkIGNhbmNlbCgpOwotCi0gICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwotICAg
IHZvaWQgc2V0QXV0aGVudGljYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0K
LSAgICB2b2lkIGRpc3BhdGNoU3luY2hyb25vdXNKb2IoKTsKLQotICAgIHZvaWQgY29udGludWVE
aWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91
c0RpZFJlY2VpdmVSZXNwb25zZSgpOwotCi0gICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmJik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gQ2FsbGVkIGZyb20gbWFp
biB0aHJlYWQuCi0gICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKTsKLQotICAgIHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4gZ2V0Q3JlZGVudGlhbChSZXNvdXJjZVJlcXVlc3QmLCBib29s
KTsKLQotICAgIGJvb2wgY2FuY2VsbGVkT3JDbGllbnRsZXNzKCk7Ci0KLSAgICBSZWY8Q3VybFJl
cXVlc3Q+IGNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgY3Vy
bERpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgY3VybERpZFJlY2Vp
dmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIGN1cmxE
aWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y3VybERpZENvbXBsZXRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJv
cihjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNvbnRpbnVlQWZ0
ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLQotICAgIGJvb2wgc2hvdWxkUmVkaXJlY3RBc0dFVChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGNyb3NzT3JpZ2luKTsKLSAgICB2b2lkIHdpbGxT
ZW5kUmVxdWVzdCgpOwotICAgIHZvaWQgY29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmJik7Ci0KLSAgICB2b2lkIGhhbmRsZURhdGFVUkwoKTsKLQotICAgIC8vIFVz
ZWQgYnkgbWFpbiB0aHJlYWQuCi0gICAgUmVzb3VyY2VIYW5kbGUqIG1faGFuZGxlOwotICAgIHVu
c2lnbmVkIG1fYXV0aEZhaWx1cmVDb3VudCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3JlZGlyZWN0
Q291bnQgeyAwIH07Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVlc3Q7Ci0gICAg
UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7Ci0gICAgYm9vbCBtX3Nob3VsZFVzZUNy
ZWRlbnRpYWxTdG9yYWdlOwotICAgIFN0cmluZyBtX3VzZXI7Ci0gICAgU3RyaW5nIG1fcGFzczsK
LSAgICBDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7Ci0gICAgYm9vbCBtX2RlZmVyc0xv
YWRpbmc7Ci0gICAgYm9vbCBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyB7IGZhbHNlIH07
Ci0gICAgUmVmUHRyPEN1cmxSZXF1ZXN0PiBtX2N1cmxSZXF1ZXN0OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333537</attachid>
            <date>2018-02-09 17:06:00 -0800</date>
            <delta_ts>2018-02-12 09:57:15 -0800</delta_ts>
            <desc>WIP redesign classes</desc>
            <filename>182578.diff</filename>
            <type>text/plain</type>
            <size>62892</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCmluZGV4IDczYzAxNGYxNWMxLi40YTgyZWIwOTlm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCkBAIC0xOCw2ICsxOCw3IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTXVs
dGlwYXJ0SGFuZGxlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5j
cHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3RTY2hlZHVsZXIuY3BwCisg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFuZGxlLmNwcAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL0ROU0N1cmwuY3BwCkBAIC0yNSw3ICsyNiw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3JDdXJsLmNwcAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50Q3VybC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCA2MjE1NDA3MTRmNi4uZjUw
MWM0YzlmZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmgKQEAgLTM2LDYgKzM2LDEwIEBACiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgogI2VuZGlmCiAKKyNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDdXJsUmVzb3VyY2VIYW5kbGVE
ZWxlZ2F0ZS5oIgorI2VuZGlmCisKICNpZiBVU0UoU09VUCkKIHR5cGVkZWYgc3RydWN0IF9HVGxz
Q2VydGlmaWNhdGUgR1Rsc0NlcnRpZmljYXRlOwogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9u
IFNvdXBTZXNzaW9uOwpAQCAtOTIsNiArOTYsMTEgQEAgY2xhc3MgU291cE5ldHdvcmtTZXNzaW9u
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgVGltZXI7CiAKKyNpZiBVU0UoQ1VSTCkKK2Ns
YXNzIEN1cmxSZXF1ZXN0OworY2xhc3MgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU7CisjZW5k
aWYKKwogY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvdXJjZUhh
bmRsZT4sIHB1YmxpYyBBdXRoZW50aWNhdGlvbkNsaWVudCB7CiBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKE5ldHdvcmtpbmdD
b250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBi
b29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENv
bnRlbnRFbmNvZGluZ1NuaWZmKTsKQEAgLTE4NSw2ICsxOTQsMTUgQEAgcHVibGljOgogICAgIE1v
bm90b25pY1RpbWUgbV9yZXF1ZXN0VGltZTsKICNlbmRpZgogCisjaWYgVVNFKENVUkwpCisgICAg
Ym9vbCBjYW5jZWxsZWRPckNsaWVudGxlc3MoKTsKKyAgICBDdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZSogZGVsZWdhdGUoKTsKKworICAgIHZvaWQgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNw
b25zZSgpOworICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KCk7CisgICAgdm9pZCBjb250aW51ZUFm
dGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmKTsKKyNlbmRpZgorCiAgICAgYm9v
bCBoYXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJBdXRo
ZW50aWNhdGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsK
QEAgLTI3OCw2ICsyOTYsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRpbWVvdXRGaXJlZCgpOwog
I2VuZGlmCiAKKyNpZiBVU0UoQ1VSTCkKKyAgICBSZWY8Q3VybFJlcXVlc3Q+IGNyZWF0ZUN1cmxS
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOworCisgICAgYm9vbCBzaG91bGRSZWRpcmVjdEFzR0VU
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgY3Jvc3NPcmlnaW4pOworCisgICAgc3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPiBnZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYsIGJvb2wp
OworICAgIHZvaWQgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjb25zdCBTdHJpbmcmIHVz
ZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOworCisgICAgdm9pZCBoYW5kbGVEYXRhVVJMKCk7
CisjZW5kaWYKKwogICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVybmFsOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUhhbmRsZUludGVybmFsPiBkOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmgKaW5kZXggNTE4Y2Y5YzljYmYuLjAwODRiNjJjZGFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApA
QCAtMzcsMTMgKzM3LDggQEAKICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NGTmV0d29ya1NQSS5oPgog
I2VuZGlmCiAKLSNpZiBVU0UoQ1VSTCkgJiYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHdpbnNv
Y2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KICNpZiBVU0UoQ1VSTCkKLSNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIkN1cmxSZXF1
ZXN0LmgiCiAjZW5kaWYKIAogI2lmIFVTRShTT1VQKQpAQCAtODEsNyArNzYsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9kZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpCiAgICAgICAgICwgbV9z
aG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQogICAgICAgICAsIG1fc2hvdWxk
Q29udGVudEVuY29kaW5nU25pZmYoc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYpCi0jaWYgVVNF
KENGVVJMQ09OTkVDVElPTikKKyNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKSB8fCBVU0UoQ1VSTCkK
ICAgICAgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KHJlcXVlc3QpCiAjZW5kaWYKICNpZiBVU0UoU09V
UCkKQEAgLTEzMiw4ICsxMjcsMTQgQEAgcHVibGljOgogICAgIFJldGFpblB0cjxDRlVSTFN0b3Jh
Z2VTZXNzaW9uUmVmPiBtX3N0b3JhZ2VTZXNzaW9uOwogI2VuZGlmCiAjaWYgVVNFKENVUkwpCi0g
ICAgUmVmUHRyPFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlPiBtX2RlbGVnYXRlOwotICAgIFJl
c291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VybFJlc291
cmNlSGFuZGxlRGVsZWdhdGU+IG1fZGVsZWdhdGU7CisgICAgCisgICAgUmVzb3VyY2VSZXF1ZXN0
IG1fY3VycmVudFJlcXVlc3Q7CisgICAgYm9vbCBtX2NhbmNlbGxlZCB7IGZhbHNlIH07CisgICAg
dW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fYXV0aEZhaWx1
cmVDb3VudCB7IDAgfTsKKyAgICBib29sIG1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzIHsg
ZmFsc2UgfTsKKyAgICBSZWZQdHI8Q3VybFJlcXVlc3Q+IG1fY3VybFJlcXVlc3Q7CiAjZW5kaWYK
IAogI2lmIFVTRShTT1VQKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3BwCmluZGV4IDlhY2QxOTVlMjg1Li5hOGRl
Yjk4OGUxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxDYWNoZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcApAQCAtMTk5LDEwICsxOTksNiBAQCB2b2lkIEN1
cmxDYWNoZU1hbmFnZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSYgam9iLCBS
ZXNvdXJjZVJlc3BvbnNlJgogICAgIGlmIChtX2Rpc2FibGVkKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gam9iLmdldEludGVybmFsKCk7Ci0gICAg
aWYgKCFkLT5tX2RlbGVnYXRlLT5oYXNIYW5kbGUoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
Y29uc3QgU3RyaW5nJiB1cmwgPSBqb2IuZmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7CiAK
ICAgICByZW1vdmVDYWNoZUVudHJ5Q2xpZW50KHVybCwgJmpvYik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCmluZGV4IGMw
MzM1MzhhYTViLi5jMzQxOWI3NTllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKQEAgLTc2LDEwICs3NiwxMiBAQCBi
b29sIEN1cmxEb3dubG9hZDo6Y2FuY2VsKCkKIAogUmVmPEN1cmxSZXF1ZXN0PiBDdXJsRG93bmxv
YWQ6OmNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBy
ZXR1cm4gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0LCB0aGlzKTsKKyAgICBhdXRvIGN1cmxS
ZXF1ZXN0ID0gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0KTsKKyAgICBjdXJsUmVxdWVzdC0+
c2V0Q2xpZW50KHRoaXMpOworICAgIHJldHVybiBjdXJsUmVxdWVzdDsKIH0KIAotdm9pZCBDdXJs
RG93bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgQ3VybFJlc3BvbnNlJiByZXNw
b25zZSkKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKEN1cmxSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTEwMCw3ICsxMDIsNyBAQCB2b2lkIEN1cmxEb3dubG9h
ZDo6Y3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlKQog
fQogCiAKLXZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVk
QnVmZmVyPiYmIGJ1ZmZlcikKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZl
cihDdXJsUmVxdWVzdCYgcmVxdWVzdCwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMTExLDcgKzExMyw3IEBAIHZvaWQgQ3Vy
bERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZl
cikKICAgICAgICAgbV9saXN0ZW5lci0+ZGlkUmVjZWl2ZURhdGFPZkxlbmd0aChidWZmZXItPnNp
emUoKSk7CiB9CiAKLXZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkQ29tcGxldGUoKQordm9pZCBD
dXJsRG93bmxvYWQ6OmN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xMjcsNyArMTI5LDcgQEAgdm9pZCBDdXJs
RG93bmxvYWQ6OmN1cmxEaWRDb21wbGV0ZSgpCiAgICAgICAgIG1fbGlzdGVuZXItPmRpZEZpbmlz
aCgpOwogfQogCi12b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3Qg
UmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlk
RmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYg
cmVzb3VyY2VFcnJvcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKaW5k
ZXggOGFhZjcwZmIwZjIuLmZlMGI4MzgzN2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC03MCwxMSArNzAsMTEgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRlQ3VybFJlcXVl
c3QoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjdXJsRGlkU2VuZERhdGEodW5zaWduZWQg
bG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY3Vy
bERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY3VybERpZENvbXBsZXRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkRmFp
bFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJs
RGlkU2VuZERhdGEoQ3VybFJlcXVlc3QmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxv
bmcgbG9uZykgeyB9CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKEN1cmxSZXF1ZXN0
JiwgY29uc3QgQ3VybFJlc3BvbnNlJik7CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihD
dXJsUmVxdWVzdCYsIFJlZjxTaGFyZWRCdWZmZXI+JiYpOworICAgIHZvaWQgY3VybERpZENvbXBs
ZXRlKEN1cmxSZXF1ZXN0Jik7CisgICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVx
dWVzdCYsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAogICAgIGJvb2wgc2hvdWxkUmVkaXJlY3RB
c0dFVChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGNyb3NzT3JpZ2luKTsKICAgICB2b2lk
IHdpbGxTZW5kUmVxdWVzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAKaW5kZXggZjNlYmQ2OGY3MWUuLjBjOTI2Mzc4YzIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJl
cXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
UmVxdWVzdC5jcHAKQEAgLTM3LDE1ICszNywxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUN1cmxSZXF1ZXN0OjpDdXJsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmcmVxdWVzdCwg
Q3VybFJlcXVlc3RDbGllbnQqIGNsaWVudCwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJs
ZU11bHRpcGFydCkKK0N1cmxSZXF1ZXN0OjpDdXJsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmcmVxdWVzdCwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJsZU11bHRpcGFydCkKICAg
ICA6IG1fcmVxdWVzdChyZXF1ZXN0Lmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9zaG91bGRTdXNw
ZW5kKHNob3VsZFN1c3BlbmQpCiAgICAgLCBtX2VuYWJsZU11bHRpcGFydChlbmFibGVNdWx0aXBh
cnQpCiAgICAgLCBtX2Zvcm1EYXRhU3RyZWFtKG1fcmVxdWVzdC5odHRwQm9keSgpKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzZXRDbGllbnQoY2xpZW50KTsKIH0KIAog
dm9pZCBDdXJsUmVxdWVzdDo6c2V0VXNlclBhc3MoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBT
dHJpbmcmIHBhc3N3b3JkKQpAQCAtMTQyLDE4ICsxNDAsMTggQEAgdm9pZCBDdXJsUmVxdWVzdDo6
cmVzdW1lKCkKIH0KIAogLyogYHRoaXNgIGlzIHByb3RlY3RlZCBpbnNpZGUgdGhpcyBtZXRob2Qu
ICovCi12b2lkIEN1cmxSZXF1ZXN0OjpjYWxsQ2xpZW50KFdURjo6RnVuY3Rpb248dm9pZChDdXJs
UmVxdWVzdENsaWVudCYpPiB0YXNrKQordm9pZCBDdXJsUmVxdWVzdDo6Y2FsbENsaWVudChXVEY6
OkZ1bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3QmLCBDdXJsUmVxdWVzdENsaWVudCYpPiB0YXNrKQog
ewogICAgIGlmIChpc01haW5UaHJlYWQoKSkgewogICAgICAgICBpZiAoQ3VybFJlcXVlc3RDbGll
bnQqIGNsaWVudCA9IG1fY2xpZW50KSB7CiAgICAgICAgICAgICBSZWZQdHI8Q3VybFJlcXVlc3RD
bGllbnQ+IHByb3RlY3RlZENsaWVudChjbGllbnQpOwotICAgICAgICAgICAgdGFzaygqY2xpZW50
KTsKKyAgICAgICAgICAgIHRhc2soKnRoaXMsICpjbGllbnQpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0YXNrID0g
V1RGTW92ZSh0YXNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChDdXJsUmVxdWVzdENs
aWVudCogY2xpZW50ID0gcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQpIHsKICAgICAgICAgICAgICAg
ICBSZWZQdHI8Q3VybFJlcXVlc3RDbGllbnQ+IHByb3RlY3RlZENsaWVudChjbGllbnQpOwotICAg
ICAgICAgICAgICAgIHRhc2soKmNsaWVudCk7CisgICAgICAgICAgICAgICAgdGFzaygqdGhpcywg
KmNsaWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTI1OSw4ICsy
NTcsOCBAQCBzaXplX3QgQ3VybFJlcXVlc3Q6OndpbGxTZW5kRGF0YShjaGFyKiBidWZmZXIsIHNp
emVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZgogICAgICAgICByZXR1cm4gQ1VSTF9SRUFE
RlVOQ19BQk9SVDsKICAgICB9CiAKLSAgICBjYWxsQ2xpZW50KFt0aGlzLCB0b3RhbFJlYWRTaXpl
ID0gbV9mb3JtRGF0YVN0cmVhbS50b3RhbFJlYWRTaXplKCksIHRvdGFsU2l6ZSA9IG1fZm9ybURh
dGFTdHJlYW0udG90YWxTaXplKCldKEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKLSAgICAg
ICAgY2xpZW50LmN1cmxEaWRTZW5kRGF0YSh0b3RhbFJlYWRTaXplLCB0b3RhbFNpemUpOworICAg
IGNhbGxDbGllbnQoW3RvdGFsUmVhZFNpemUgPSBtX2Zvcm1EYXRhU3RyZWFtLnRvdGFsUmVhZFNp
emUoKSwgdG90YWxTaXplID0gbV9mb3JtRGF0YVN0cmVhbS50b3RhbFNpemUoKV0oQ3VybFJlcXVl
c3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgY2xpZW50
LmN1cmxEaWRTZW5kRGF0YShyZXF1ZXN0LCB0b3RhbFJlYWRTaXplLCB0b3RhbFNpemUpOwogICAg
IH0pOwogCiAgICAgcmV0dXJuICpzZW5kQnl0ZXM7CkBAIC0zNjEsOCArMzU5LDggQEAgc2l6ZV90
IEN1cmxSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikK
ICAgICAgICAgaWYgKG1fbXVsdGlwYXJ0SGFuZGxlKQogICAgICAgICAgICAgbV9tdWx0aXBhcnRI
YW5kbGUtPmRpZFJlY2VpdmVEYXRhKGJ1ZmZlcik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgY2FsbENsaWVudChbYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShDdXJsUmVxdWVzdENsaWVu
dCYgY2xpZW50KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjbGllbnQuY3VybERpZFJlY2Vp
dmVCdWZmZXIoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgICAgIGNhbGxDbGllbnQoW2J1ZmZl
ciA9IFdURk1vdmUoYnVmZmVyKV0oQ3VybFJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xp
ZW50JiBjbGllbnQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNsaWVudC5jdXJsRGlkUmVj
ZWl2ZUJ1ZmZlcihyZXF1ZXN0LCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zOTMsOCArMzkxLDggQEAgdm9pZCBDdXJsUmVxdWVzdDo6ZGlk
UmVjZWl2ZURhdGFGcm9tTXVsdGlwYXJ0KFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQogICAg
IGF1dG8gcmVjZWl2ZUJ5dGVzID0gYnVmZmVyLT5zaXplKCk7CiAKICAgICBpZiAocmVjZWl2ZUJ5
dGVzKSB7Ci0gICAgICAgIGNhbGxDbGllbnQoW2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oQ3Vy
bFJlcXVlc3RDbGllbnQmIGNsaWVudCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjbGllbnQuY3Vy
bERpZFJlY2VpdmVCdWZmZXIoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgY2FsbENsaWVudChb
YnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShDdXJsUmVxdWVzdCYgcmVxdWVzdCwgQ3VybFJlcXVl
c3RDbGllbnQmIGNsaWVudCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjbGllbnQuY3VybERpZFJl
Y2VpdmVCdWZmZXIocmVxdWVzdCwgV1RGTW92ZShidWZmZXIpKTsKICAgICAgICAgfSk7CiAgICAg
fQogfQpAQCAtNDIxLDggKzQxOSw4IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJh
bnNmZXIoQ1VSTGNvZGUgcmVzdWx0KQogICAgICAgICAgICAgICAgIG1fbmV0d29ya0xvYWRNZXRy
aWNzID0gKm1ldHJpY3M7CiAKICAgICAgICAgICAgIGZpbmFsaXplVHJhbnNmZXIoKTsKLSAgICAg
ICAgICAgIGNhbGxDbGllbnQoW10oQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgewotICAgICAg
ICAgICAgICAgIGNsaWVudC5jdXJsRGlkQ29tcGxldGUoKTsKKyAgICAgICAgICAgIGNhbGxDbGll
bnQoW10oQ3VybFJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsK
KyAgICAgICAgICAgICAgICBjbGllbnQuY3VybERpZENvbXBsZXRlKHJlcXVlc3QpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtNDMyLDggKzQzMCw4IEBAIHZv
aWQgQ3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNmZXIoQ1VSTGNvZGUgcmVzdWx0KQogICAg
ICAgICAgICAgcmVzb3VyY2VFcnJvci5zZXRTc2xFcnJvcnMobV9zc2xWZXJpZmllci0+c3NsRXJy
b3JzKCkpOwogCiAgICAgICAgIGZpbmFsaXplVHJhbnNmZXIoKTsKLSAgICAgICAgY2FsbENsaWVu
dChbZXJyb3IgPSByZXNvdXJjZUVycm9yLmlzb2xhdGVkQ29weSgpXShDdXJsUmVxdWVzdENsaWVu
dCYgY2xpZW50KSB7Ci0gICAgICAgICAgICBjbGllbnQuY3VybERpZEZhaWxXaXRoRXJyb3IoZXJy
b3IpOworICAgICAgICBjYWxsQ2xpZW50KFtlcnJvciA9IHJlc291cmNlRXJyb3IuaXNvbGF0ZWRD
b3B5KCldKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50KSB7
CisgICAgICAgICAgICBjbGllbnQuY3VybERpZEZhaWxXaXRoRXJyb3IocmVxdWVzdCwgZXJyb3Ip
OwogICAgICAgICB9KTsKICAgICB9CiB9CkBAIC01MzMsOCArNTMxLDggQEAgdm9pZCBDdXJsUmVx
dWVzdDo6aW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9u
c2UsIEFjdGlvbgogICAgIG1fZGlkTm90aWZ5UmVzcG9uc2UgPSB0cnVlOwogICAgIG1fYWN0aW9u
QWZ0ZXJJbnZva2UgPSBiZWhhdmlvckFmdGVySW52b2tlOwogCi0gICAgY2FsbENsaWVudChbcmVz
cG9uc2UgPSByZXNwb25zZS5pc29sYXRlZENvcHkoKV0oQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVu
dCkgewotICAgICAgICBjbGllbnQuY3VybERpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Cisg
ICAgY2FsbENsaWVudChbcmVzcG9uc2UgPSByZXNwb25zZS5pc29sYXRlZENvcHkoKV0oQ3VybFJl
cXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgY2xp
ZW50LmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0pOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVx
dWVzdC5oCmluZGV4IDgyZmRjODVjMDk4Li42YmQ0ZTA3NWZjZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmgKQEAgLTU2LDkgKzU2
LDkgQEAgcHVibGljOgogICAgICAgICBZZXMgPSB0cnVlCiAgICAgfTsKIAotICAgIHN0YXRpYyBS
ZWY8Q3VybFJlcXVlc3Q+IGNyZWF0ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEN1
cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQsIFNob3VsZFN1c3BlbmQgc2hvdWxkU3VzcGVuZCA9IFNo
b3VsZFN1c3BlbmQ6Ok5vLCBFbmFibGVNdWx0aXBhcnQgZW5hYmxlTXVsdGlwYXJ0ID0gRW5hYmxl
TXVsdGlwYXJ0OjpObykKKyAgICBzdGF0aWMgUmVmPEN1cmxSZXF1ZXN0PiBjcmVhdGUoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTaG91bGRTdXNwZW5kIHNob3VsZFN1c3BlbmQgPSBT
aG91bGRTdXNwZW5kOjpObywgRW5hYmxlTXVsdGlwYXJ0IGVuYWJsZU11bHRpcGFydCA9IEVuYWJs
ZU11bHRpcGFydDo6Tm8pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDdXJs
UmVxdWVzdChyZXF1ZXN0LCBjbGllbnQsIHNob3VsZFN1c3BlbmQgPT0gU2hvdWxkU3VzcGVuZDo6
WWVzLCBlbmFibGVNdWx0aXBhcnQgPT0gRW5hYmxlTXVsdGlwYXJ0OjpZZXMpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3VybFJlcXVlc3QocmVxdWVzdCwgc2hvdWxkU3VzcGVuZCA9
PSBTaG91bGRTdXNwZW5kOjpZZXMsIGVuYWJsZU11bHRpcGFydCA9PSBFbmFibGVNdWx0aXBhcnQ6
OlllcykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkN1cmxSZXF1ZXN0KCkgPSBkZWZhdWx0OwpA
QCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogICAgICAgICBGaW5pc2hUcmFuc2ZlcgogICAgIH07
CiAKLSAgICBDdXJsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBDdXJsUmVxdWVzdENs
aWVudCosIGJvb2wgc2hvdWxkU3VzcGVuZCwgYm9vbCBlbmFibGVNdWx0aXBhcnQpOworICAgIEN1
cmxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hvdWxkU3VzcGVuZCwgYm9v
bCBlbmFibGVNdWx0aXBhcnQpOwogCiAgICAgdm9pZCByZXRhaW4oKSBvdmVycmlkZSB7IHJlZigp
OyB9CiAgICAgdm9pZCByZWxlYXNlKCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9CkBAIC0xMDIsNyAr
MTAyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc3RhcnRXaXRoSm9iTWFuYWdlcigpOwogCi0g
ICAgdm9pZCBjYWxsQ2xpZW50KFdURjo6RnVuY3Rpb248dm9pZChDdXJsUmVxdWVzdENsaWVudCYp
Pik7CisgICAgdm9pZCBjYWxsQ2xpZW50KFdURjo6RnVuY3Rpb248dm9pZChDdXJsUmVxdWVzdCYs
IEN1cmxSZXF1ZXN0Q2xpZW50Jik+KTsKIAogICAgIC8vIFRyYW5zZmVyIHByb2Nlc3Npbmcgb2Yg
UmVxdWVzdCBib2R5LCBSZXNwb25zZSBoZWFkZXIvYm9keQogICAgIC8vIENhbGxlZCBieSB3b3Jr
ZXIgdGhyZWFkIGluIGNhc2Ugb2YgYXN5bmMsIG1haW4gdGhyZWFkIGluIGNhc2Ugb2Ygc3luYy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVx
dWVzdENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxS
ZXF1ZXN0Q2xpZW50LmgKaW5kZXggMzljMjAyMmMzNGQuLjAzM2I4ZTkzYTMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3RDbGllbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3RD
bGllbnQuaApAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEN1cmxSZXF1ZXN0OwogY2xhc3MgQ3VybFJlc3BvbnNlOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKQEAgLTM4LDExICszOSwxMSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHJlZigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSA9IDA7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgY3VybERpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1Nl
bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+
JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3VybERpZENvbXBsZXRlKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkU2VuZERhdGEoQ3VybFJlcXVlc3QmLCB1bnNpZ25l
ZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVT
ZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoQ3VybFJl
cXVlc3QmLCBjb25zdCBDdXJsUmVzcG9uc2UmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cmxE
aWRSZWNlaXZlQnVmZmVyKEN1cmxSZXF1ZXN0JiwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkQ29tcGxldGUoQ3VybFJlcXVlc3QmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9yKEN1cmxSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VFcnJvciYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5k
bGVEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFJlc291cmNlSGFuZGxlRGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi40ODIxZmVjMGYyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5jcHAKQEAg
LTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTkFWRVIgQ29ycC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1
cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNl
c3Npb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorCisj
aW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisKKyNpZiBVU0UoQ1VSTCkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Q3VybFJlc291
cmNlSGFuZGxlRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUmIGhhbmRsZSkKKyA6IG1faGFuZGxlKGhh
bmRsZSkKK3sKKworfQorCisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykK
Kwordm9pZCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVzdWx0KQoreworCit9CisKKyNlbmRpZgor
Cit2b2lkIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjb250aW51ZVdpbGxDYWNoZVJlc3Bv
bnNlKFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworCit9CisKK3ZvaWQgQ3VybFJlc291
cmNlSGFuZGxlRGVsZWdhdGU6OnJlZigpCit7CisgICAgbV9oYW5kbGUucmVmKCk7Cit9CisKK3Zv
aWQgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmRlcmVmKCkKK3sKKyAgICBtX2hhbmRsZS5k
ZXJlZigpOworfQorCitib29sIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjYW5jZWxsZWRP
ckNsaWVudGxlc3MoKQoreworICAgIHJldHVybiBoYW5kbGUoKS0+Y2FuY2VsbGVkT3JDbGllbnRs
ZXNzKCk7Cit9CisKK1Jlc291cmNlSGFuZGxlQ2xpZW50KiBDdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZTo6Y2xpZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYW5kbGUuY2xpZW50KCk7Cit9
CisKK1Jlc291cmNlSGFuZGxlSW50ZXJuYWwqIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpk
KCkKK3sKKyAgICByZXR1cm4gaGFuZGxlKCktPmdldEludGVybmFsKCk7Cit9CisKK3ZvaWQgQ3Vy
bFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRTZW5kRGF0YShDdXJsUmVxdWVzdCYgcmVx
dWVzdCwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAg
aWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGll
bnQoKS0+ZGlkU2VuZERhdGEoJm1faGFuZGxlLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2Vu
dCk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZUNvb2tpZUhlYWRlcnMoY29uc3QgQ3VybFJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgYXV0byBzZXRDb29raWVIZWFkZXIg
PSAic2V0LWNvb2tpZTogIjsKKworICAgIGF1dG8mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgY29uc3Qg
Q29va2llSmFyQ3VybCYgY29va2llSmFyID0gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0
b3JhZ2UoKTsKKyAgICBmb3IgKGF1dG8gaGVhZGVyIDogcmVzcG9uc2UuaGVhZGVycykgeworICAg
ICAgICBpZiAoaGVhZGVyLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzZXRDb29raWVIZWFk
ZXIpKSB7CisgICAgICAgICAgICBTdHJpbmcgc2V0Q29va2llU3RyaW5nID0gaGVhZGVyLnJpZ2h0
KGhlYWRlci5sZW5ndGgoKSAtIHN0cmxlbihzZXRDb29raWVIZWFkZXIpKTsKKyAgICAgICAgICAg
IGNvb2tpZUphci5zZXRDb29raWVzRnJvbUhUVFBSZXNwb25zZShkZWZhdWx0U3RvcmFnZVNlc3Np
b24sIHJlc3BvbnNlLnVybCwgc2V0Q29va2llU3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVSZXNwb25z
ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ3VybFJlc3BvbnNlJiByZWNlaXZlZFJlc3Bv
bnNlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFkKCktPm1f
ZGVmZXJzTG9hZGluZyk7CisKKyAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKHJlY2VpdmVk
UmVzcG9uc2UpOworICAgIG1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmlj
cyhyZXF1ZXN0LmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKKworICAgIGhhbmRsZUNvb2tpZUhl
YWRlcnMocmVjZWl2ZWRSZXNwb25zZSk7CisKKyAgICBpZiAobV9yZXNwb25zZS5zaG91bGRSZWRp
cmVjdCgpKSB7CisgICAgICAgIGhhbmRsZSgpLT53aWxsU2VuZFJlcXVlc3QoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Jlc3BvbnNlLmlzVW5hdXRob3JpemVkKCkpIHsK
KyAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHJlY2VpdmVkUmVzcG9u
c2UsIGQoKS0+bV9hdXRoRmFpbHVyZUNvdW50LCBtX3Jlc3BvbnNlLCBoYW5kbGUoKSk7CisgICAg
ICAgIGhhbmRsZSgpLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdl
KTsKKyAgICAgICAgZCgpLT5tX2F1dGhGYWlsdXJlQ291bnQrKzsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChtX3Jlc3BvbnNlLmlzTm90TW9kaWZpZWQoKSkgeworICAgICAgICBV
UkwgY2FjaGVVcmwgPSBtX3Jlc3BvbnNlLnVybCgpOworICAgICAgICBjYWNoZVVybC5yZW1vdmVG
cmFnbWVudElkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6c2lu
Z2xldG9uKCkuZ2V0Q2FjaGVkUmVzcG9uc2UoY2FjaGVVcmwsIG1fcmVzcG9uc2UpKSB7CisgICAg
ICAgICAgICBpZiAoZCgpLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgeworICAgICAg
ICAgICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgICAg
ICAgICBtX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KCJPSyIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlk
UmVjZWl2ZVJlc3BvbnNlKCpoYW5kbGUoKSwgbV9yZXNwb25zZSk7CisKKyAgICBoYW5kbGUoKS0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UobV9yZXNwb25zZSksIFt0aGlzLCBw
cm90ZWN0ZWRIYW5kbGUgPSBtYWtlUmVmKCpoYW5kbGUoKSldIHsKKyAgICAgICAgaGFuZGxlKCkt
PmNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB9KTsKK30KKwordm9pZCBD
dXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVCdWZmZXIoQ3VybFJlcXVl
c3QmIHJlcXVlc3QsIFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2Vp
dmVEYXRhKCpoYW5kbGUoKSwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICBj
bGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihoYW5kbGUoKSwgV1RGTW92ZShidWZmZXIpLCBidWZm
ZXItPnNpemUoKSk7Cit9CisKK3ZvaWQgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxE
aWRDb21wbGV0ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3Jlc3BvbnNlLnNldERlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MocmVx
dWVzdC5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpz
aW5nbGV0b24oKS5kaWRGaW5pc2hMb2FkaW5nKCpoYW5kbGUoKSk7CisgICAgY2xpZW50KCktPmRp
ZEZpbmlzaExvYWRpbmcoaGFuZGxlKCkpOworfQorCit2b2lkIEN1cmxSZXNvdXJjZUhhbmRsZURl
bGVnYXRlOjpjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYgcmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGYWlsKG1faGFuZGxlKTsK
KyAgICBjbGllbnQoKS0+ZGlkRmFpbCgmbV9oYW5kbGUsIHJlc291cmNlRXJyb3IpOworfQorCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVE
ZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yNTUwNDJi
OTc0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qDQor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCisgKiBhcmUgbWV0Og0KKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkNCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUg0KKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SDQorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsDQorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLA0KKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
Ug0KKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkNCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiANCisgKi8NCisNCisjcHJhZ21hIG9uY2UNCisNCisjaW5jbHVkZSAiQ3VybFJlcXVlc3RD
bGllbnQuaCINCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIg0KKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCINCisNCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4NCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+DQorI2luY2x1ZGUgPHd0Zi9SZWYuaD4NCisNCituYW1lc3BhY2Ug
V2ViQ29yZSB7DQorDQorY2xhc3MgUmVzb3VyY2VIYW5kbGU7DQorY2xhc3MgUmVzb3VyY2VIYW5k
bGVDbGllbnQ7DQorY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsNCisNCitjbGFzcyBDdXJs
UmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZSA6IHB1YmxpYyBDdXJsUmVxdWVzdENsaWVudCB7DQorICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7DQorcHVibGljOg0KKyAgICBDdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZShSZXNvdXJjZUhhbmRsZSYgaGFuZGxlKTsNCisNCisjaWYgVVNFKFBST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSykNCisgICAgdm9pZCBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2UoYm9vbCByZXN1bHQpOw0KKyNlbmRpZg0KKw0KKyAgICB2b2lkIGNv
bnRpbnVlV2lsbENhY2hlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpOw0KKw0K
KyAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzcG9uc2U7IH0NCisNCisgICAgLy8gQ3VybFJlcXVlc3RDbGllbnQgbWV0aG9kcw0KKw0KKyAg
ICB2b2lkIHJlZigpOw0KKyAgICB2b2lkIGRlcmVmKCk7DQorDQorICAgIHZvaWQgY3VybERpZFNl
bmREYXRhKEN1cmxSZXF1ZXN0JiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWdu
ZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7DQorICAgIHZvaWQgY3VybERpZFJlY2Vp
dmVSZXNwb25zZShDdXJsUmVxdWVzdCYsIGNvbnN0IEN1cmxSZXNwb25zZSYpOw0KKyAgICB2b2lk
IGN1cmxEaWRSZWNlaXZlQnVmZmVyKEN1cmxSZXF1ZXN0JiwgUmVmPFNoYXJlZEJ1ZmZlcj4mJik7
DQorICAgIHZvaWQgY3VybERpZENvbXBsZXRlKEN1cmxSZXF1ZXN0Jik7DQorICAgIHZvaWQgY3Vy
bERpZEZhaWxXaXRoRXJyb3IoQ3VybFJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9yJik7DQor
DQorcHJpdmF0ZToNCisgICAgUmVzb3VyY2VIYW5kbGUmIG1faGFuZGxlOw0KKyAgICBSZXNvdXJj
ZVJlc3BvbnNlIG1fcmVzcG9uc2U7DQorDQorICAgIGJvb2wgY2FuY2VsbGVkT3JDbGllbnRsZXNz
KCk7DQorICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUoKSB7IHJldHVybiAmbV9oYW5kbGU7IH0N
CisgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIGNvbnN0Ow0KKyAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBkKCk7DQorfTsNCisNCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcAppbmRleCAyMDgxNTQ0NGIxYy4uOWVjYjVlNjZjNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmwuY3BwCkBAIC0zMiwyMCArMzIsMjcgQEAKIAogI2lmIFVTRShDVVJMKQog
CisjaW5jbHVkZSAiQ29va2llSmFyQ3VybC5oIgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdl
LmgiCisjaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0
LmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisj
aW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5n
LmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogewotICAgIGlmIChtX2RlbGVnYXRlKQot
ICAgICAgICBtX2RlbGVnYXRlLT5yZWxlYXNlSGFuZGxlKCk7CisgICAgaWYgKG1fY3VybFJlcXVl
c3QpCisgICAgICAgIG1fY3VybFJlcXVlc3QtPnNldENsaWVudChudWxscHRyKTsKIH0KIAogUmVz
b3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpID0gZGVmYXVsdDsKQEAgLTU2LDYgKzYzLDkg
QEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQogCiAgICAgQ3VybENvbnRleHQ6OnNpbmds
ZXRvbigpOwogCisgICAgaWYgKCFkLT5tX2RlbGVnYXRlLmdldCgpKQorICAgICAgICBkLT5tX2Rl
bGVnYXRlID0gc3RkOjptYWtlX3VuaXF1ZTxDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZT4oKnRo
aXMpOworCiAgICAgLy8gVGhlIGZyYW1lIGNvdWxkIGJlIG51bGwgaWYgdGhlIFJlc291cmNlSGFu
ZGxlIGlzIG5vdCBhc3NvY2lhdGVkIHRvIGFueQogICAgIC8vIEZyYW1lLCBlLmcuIGlmIHdlIGFy
ZSBkb3dubG9hZGluZyBhIGZpbGUuCiAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIG5vdCBudWxsIGJ1
dCB0aGUgcGFnZSBpcyBudWxsIHRoaXMgbXVzdCBiZSBhbiBhdHRlbXB0ZWQKQEAgLTcxLDE1ICs4
MSw2OCBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIGQtPm1fZGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGUodGhpcykpOwotICAgIGQtPm1fZGVsZWdhdGUtPnN0YXJ0KCk7CisgICAg
YXV0byBjcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbChkLT5tX2N1cnJlbnRSZXF1ZXN0LCBmYWxz
ZSk7CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QoZC0+bV9jdXJy
ZW50UmVxdWVzdCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3MoY3JlZGVudGlh
bC5maXJzdCwgY3JlZGVudGlhbC5zZWNvbmQpOworICAgIGQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0
KCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2Vs
KCkKIHsKLSAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+Y2Fu
Y2VsKCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGQtPm1fY2FuY2VsbGVk
ID0gdHJ1ZTsKKworICAgIGlmICghZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgZC0+bV9jdXJs
UmVxdWVzdC0+Y2FuY2VsKCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbGxlZE9y
Q2xpZW50bGVzcygpCit7CisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiAhY2xpZW50KCk7Cit9CisKK1JlZjxDdXJsUmVxdWVzdD4gUmVz
b3VyY2VIYW5kbGU6OmNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gQ3VybENhY2hlIDogYXBw
ZW5kIGFkZGl0aW9uYWwgY2FjaGUgaW5mb3JtYXRpb24KKyAgICBkLT5tX2FkZGVkQ2FjaGVWYWxp
ZGF0aW9uSGVhZGVycyA9IGZhbHNlOworCisgICAgYm9vbCBoYXNDYWNoZUhlYWRlcnMgPSByZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmll
ZFNpbmNlKSB8fCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVy
TmFtZTo6SWZOb25lTWF0Y2gpOworICAgIGlmICghaGFzQ2FjaGVIZWFkZXJzKSB7CisgICAgICAg
IGF1dG8mIGNhY2hlID0gQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCk7CisgICAgICAgIFVS
TCBjYWNoZVVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdt
ZW50SWRlbnRpZmllcigpOworCisgICAgICAgIGlmIChjYWNoZS5pc0NhY2hlZChjYWNoZVVybCkp
IHsKKyAgICAgICAgICAgIGNhY2hlLmFkZENhY2hlRW50cnlDbGllbnQoY2FjaGVVcmwsIHRoaXMp
OworCisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogY2FjaGUucmVxdWVzdEhl
YWRlcnMoY2FjaGVVcmwpKQorICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZp
ZWxkKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOworCisgICAgICAgICAgICBkLT5tX2FkZGVkQ2Fj
aGVWYWxpZGF0aW9uSGVhZGVycyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDdXJs
UmVxdWVzdDo6U2hvdWxkU3VzcGVuZCBzaG91bGRTdXNwZW5kID0gZC0+bV9kZWZlcnNMb2FkaW5n
ID8gQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQ6OlllcyA6IEN1cmxSZXF1ZXN0OjpTaG91bGRT
dXNwZW5kOjpObzsKKyAgICBhdXRvIGN1cmxSZXF1ZXN0ID0gQ3VybFJlcXVlc3Q6OmNyZWF0ZShy
ZXF1ZXN0LCBzaG91bGRTdXNwZW5kLCBDdXJsUmVxdWVzdDo6RW5hYmxlTXVsdGlwYXJ0OjpZZXMp
OworICAgIAorICAgIGN1cmxSZXF1ZXN0LT5zZXRDbGllbnQoZGVsZWdhdGUoKSk7CisKKyAgICBy
ZXR1cm4gY3VybFJlcXVlc3Q7Cit9CisKK0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKiBSZXNv
dXJjZUhhbmRsZTo6ZGVsZWdhdGUoKQoreworICAgIEFTU0VSVChkLT5tX2RlbGVnYXRlKTsKKyAg
ICByZXR1cm4gZC0+bV9kZWxlZ2F0ZS5nZXQoKTsKIH0KIAogI2lmIE9TKFdJTkRPV1MpCkBAIC0x
MTUsOCArMTc4LDE4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9h
ZGluZyhib29sIGRlZmVycykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAg
aWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldERlZmVyc0xvYWRp
bmcoZGVmZXJzKTsKKyAgICBpZiAoZGVmZXJzID09IGQtPm1fZGVmZXJzTG9hZGluZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZC0+bV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOworCisgICAgaWYg
KCFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZC0+bV9kZWZl
cnNMb2FkaW5nKQorICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdXNwZW5kKCk7CisgICAgZWxz
ZQorICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5yZXN1bWUoKTsKIH0KIAogYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQpAQCAtMTM3LDkgKzIxMCw4IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShj
b25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJl
c3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDEpCiAgICAgICAgICAgICB1cmxUb1N0b3Jl
ID0gY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOwogICAgICAgICBDcmVkZW50aWFs
U3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlvbiwgY3JlZGVu
dGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCB1cmxUb1N0b3JlKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+
c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQo
KSk7CisKKyAgICAgICAgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjcmVkZW50aWFsLnVz
ZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKIAogICAgICAgICBkLT5tX3VzZXIgPSBTdHJp
bmcoKTsKICAgICAgICAgZC0+bV9wYXNzID0gU3RyaW5nKCk7CkBAIC0xNjQsOCArMjM2LDcgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICAgICAgICAgICAgICAgICAgICAgQ3JlZGVudGlhbFN0
b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIGNyZWRlbnRp
YWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25z
ZSgpLnVybCgpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoZC0+
bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVu
dGljYXRpb24oY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisgICAg
ICAgICAgICAgICAgcmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjcmVkZW50aWFsLnVzZXIo
KSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwMCw4ICsyNzEsNyBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNo
YWxsZW5nZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAg
ICAgIGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBj
cmVkZW50aWFsLnBhc3N3b3JkKCkpOworICAgIHJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwo
Y3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAKICAgICBjbGVhckF1
dGhlbnRpY2F0aW9uKCk7CiB9CkBAIC0yMTUsMTEgKzI4NSw4IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRo
ZW50aWNhCiAKICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiAKLSAgICBkaWRSZWNlaXZlUmVz
cG9uc2UoUmVzb3VyY2VSZXNwb25zZShkLT5tX3Jlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+
Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoUmVz
b3VyY2VSZXNwb25zZShkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJl
c3BvbnNlKCk7CiAgICAgfSk7CiB9CiAKQEAgLTI0NiwxOCArMzEzLDc4IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnJlY2VpdmVkQ2hhbGxlbmdlUmVqZWN0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorc3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPiBSZXNvdXJjZUhhbmRsZTo6Z2V0Q3JlZGVudGlhbChSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGJvb2wgcmVkaXJlY3QpCit7CisgICAgLy8gbV91c2VyL21fcGFzcyBhcmUg
Y3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50
cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgorICAgIFN0cmluZyBwYXJ0aXRpb24g
PSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7CisKKyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoKSkgeworICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bh
c3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4g
LSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxs
ZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAorICAgICAgICAgICAgLy8gdHJ5
IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZD
IDI2MTcuCisgICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0
b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3Qu
dXJsKCkpOworICAgICAgICB9IGVsc2UgaWYgKCFyZWRpcmVjdCkgeworICAgICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkws
IHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMKKyAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5n
IGEgcmVxdWVzdC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5
IHNlbmRpbmcgYW4KKyAgICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5j
b3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQK
KyAgICAgICAgICAgIC8vIGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCku
CisgICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdl
KCkuc2V0KHBhcnRpdGlvbiwgQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVu
dGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9CisgICAgfQor
CisgICAgU3RyaW5nIHVzZXIgPSBkLT5tX3VzZXI7CisgICAgU3RyaW5nIHBhc3N3b3JkID0gZC0+
bV9wYXNzOworCisgICAgaWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgewor
ICAgICAgICB1c2VyID0gZC0+bV9pbml0aWFsQ3JlZGVudGlhbC51c2VyKCk7CisgICAgICAgIHBh
c3N3b3JkID0gZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpOworICAgIH0KKworICAg
IGlmICh1c2VyLmlzRW1wdHkoKSAmJiBwYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KCIiLCAiIik7CisKKyAgICByZXR1cm4gc3RkOjpw
YWlyPFN0cmluZywgU3RyaW5nPih1c2VyLCBwYXNzd29yZCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY29uc3QgU3RyaW5nJiB1c2VyLCBj
b25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBpZiAoIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBi
b29sIGlzU3luY1JlcXVlc3QgPSBkLT5tX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7Cisg
ICAgZC0+bV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0
Q2xpZW50KG51bGxwdHIpOworCisgICAgZC0+bV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1
ZXN0KGQtPm1fY3VycmVudFJlcXVlc3QpOworICAgIGQtPm1fY3VybFJlcXVlc3QtPnNldFVzZXJQ
YXNzKHVzZXIsIHBhc3N3b3JkKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdGFydChpc1N5bmNS
ZXF1ZXN0KTsKK30KKwogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisgICAgYXV0byBsb2NhbFJlcXVlc3QgPSBy
ZXF1ZXN0OwogICAgIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50IGNsaWVudDsKICAgICBib29sIGRl
ZmVyc0xvYWRpbmcgPSBmYWxzZTsKICAgICBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRydWU7
CiAgICAgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiA9IHRydWU7CiAgICAgUmVmUHRy
PFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUoY29u
dGV4dCwgcmVxdWVzdCwgJmNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZm
LCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZikpOwogCi0gICAgaGFuZGxlLT5kLT5tX2RlbGVn
YXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKGhhbmRsZS5nZXQo
KSkpOwotICAgIGhhbmRsZS0+ZC0+bV9kZWxlZ2F0ZS0+ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigp
OworICAgIGlmIChsb2NhbFJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0RhdGEoKSkgeworICAgICAg
ICBoYW5kbGUtPmhhbmRsZURhdGFVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIElmIGRlZmVyc0xvYWRpbmcgaXMgdHJ1ZSBhbmQgd2UgY2FsbCBjdXJsX2Vhc3lfcGVyZm9y
bQorICAgIC8vIG9uIGEgcGF1c2VkIGhhbmRsZSwgbGliY1VSTCB3b3VsZCBkbyB0aGUgdHJhbnNm
ZXIgYW55d2F5CisgICAgLy8gYW5kIHdlIHdvdWxkIGFzc2VydCBzbyBmb3JjZSBkZWZlcnNMb2Fk
aW5nIHRvIGJlIGZhbHNlLgorICAgIGhhbmRsZS0+ZC0+bV9kZWZlcnNMb2FkaW5nID0gZmFsc2U7
CisKKyAgICBoYW5kbGUtPmQtPm1fY3VybFJlcXVlc3QgPSBoYW5kbGUtPmNyZWF0ZUN1cmxSZXF1
ZXN0KGxvY2FsUmVxdWVzdCk7CisgICAgaGFuZGxlLT5kLT5tX2N1cmxSZXF1ZXN0LT5zdGFydCh0
cnVlKTsKIAogICAgIGVycm9yID0gY2xpZW50LmVycm9yKCk7CiAgICAgZGF0YS5zd2FwKGNsaWVu
dC5tdXRhYmxlRGF0YSgpKTsKQEAgLTI2OCw4ICszOTUsMTczIEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OnBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAg
ICAgICBkLT5tX2RlbGVnYXRlLT5wbGF0Zm9ybUNvbnRpbnVlU3luY2hyb25vdXNEaWRSZWNlaXZl
UmVzcG9uc2UoKTsKKyAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBjb250aW51ZURpZFJlY2Vp
dmVSZXNwb25zZSBtaWdodCBjYW5jZWwgdGhlIGxvYWQuCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xp
ZW50bGVzcygpIHx8ICFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBk
LT5tX2N1cmxSZXF1ZXN0LT5jb21wbGV0ZURpZFJlY2VpdmVSZXNwb25zZSgpOworfQorCitib29s
IFJlc291cmNlSGFuZGxlOjpzaG91bGRSZWRpcmVjdEFzR0VUKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgYm9vbCBjcm9zc09yaWdpbikKK3sKKyAgICBpZiAocmVxdWVzdC5odHRwTWV0
aG9kKCkgPT0gIkdFVCIgfHwgcmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkhFQUQiKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRU
UEZhbWlseSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChkZWxlZ2F0ZSgpLT5y
ZXNwb25zZSgpLmlzU2VlT3RoZXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
KGRlbGVnYXRlKCktPnJlc3BvbnNlKCkuaXNNb3ZlZFBlcm1hbmVudGx5KCkgfHwgZGVsZWdhdGUo
KS0+cmVzcG9uc2UoKS5pc0ZvdW5kKCkpICYmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUE9T
VCIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjcm9zc09yaWdpbiAmJiAocmVx
dWVzdC5odHRwTWV0aG9kKCkgPT0gIkRFTEVURSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1
ZXN0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgc3RhdGljIGNvbnN0
IGludCBtYXhSZWRpcmVjdHMgPSAyMDsKKworICAgIGlmIChkLT5tX3JlZGlyZWN0Q291bnQrKyA+
IG1heFJlZGlyZWN0cykgeworICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJj
ZUVycm9yOjpodHRwRXJyb3IoQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTLCBkZWxlZ2F0ZSgpLT5y
ZXNwb25zZSgpLnVybCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcg
bG9jYXRpb24gPSBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZTo6TG9jYXRpb24pOworICAgIFVSTCBuZXdVUkwgPSBVUkwoZGVsZWdhdGUoKS0+cmVz
cG9uc2UoKS51cmwoKSwgbG9jYXRpb24pOworICAgIGJvb2wgY3Jvc3NPcmlnaW4gPSAhcHJvdG9j
b2xIb3N0QW5kUG9ydEFyZUVxdWFsKGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLCBuZXdVUkwpOwor
CisgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSBkLT5tX2ZpcnN0UmVxdWVzdDsKKyAg
ICBuZXdSZXF1ZXN0LnNldFVSTChuZXdVUkwpOworCisgICAgaWYgKHNob3VsZFJlZGlyZWN0QXNH
RVQobmV3UmVxdWVzdCwgY3Jvc3NPcmlnaW4pKSB7CisgICAgICAgIG5ld1JlcXVlc3Quc2V0SFRU
UE1ldGhvZCgiR0VUIik7CisgICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUEJvZHkobnVsbHB0cik7
CisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICB9CisKKyAg
ICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3Vy
ZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KKyAgICBpZiAoIW5ld1VSTC5wcm90b2NvbElz
KCJodHRwcyIpICYmIHByb3RvY29sSXMobmV3UmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBz
IikgJiYgY29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
KCkpCisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKKworICAgIGQtPm1f
dXNlciA9IG5ld1VSTC51c2VyKCk7CisgICAgZC0+bV9wYXNzID0gbmV3VVJMLnBhc3MoKTsKKyAg
ICBuZXdSZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisKKyAgICBpZiAoY3Jvc3NPcmlnaW4p
IHsKKyAgICAgICAgLy8gSWYgdGhlIG5ldHdvcmsgbGF5ZXIgY2FycmllcyBvdmVyIGF1dGhlbnRp
Y2F0aW9uIGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdAorICAgICAgICAvLyBpbiBh
IGNyb3NzLW9yaWdpbiByZWRpcmVjdCwgd2Ugd2FudCB0byBjbGVhciB0aG9zZSBoZWFkZXJzIGhl
cmUuIAorICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUEF1dGhvcml6YXRpb24oKTsKKyAgICAg
ICAgbmV3UmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlQ29weSA9IGRlbGVnYXRlKCktPnJlc3BvbnNlKCk7CisgICAgY2xpZW50
KCktPndpbGxTZW5kUmVxdWVzdEFzeW5jKHRoaXMsIFdURk1vdmUobmV3UmVxdWVzdCksIFdURk1v
dmUocmVzcG9uc2VDb3B5KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0g
KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpIHsKKyAgICAgICAgY29udGludWVBZnRlcldpbGxT
ZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJj
ZUhhbmRsZTo6Y29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiBy
ZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyB3aWxsU2Vu
ZFJlcXVlc3QgbWlnaHQgY2FuY2VsIHRoZSBsb2FkLgorICAgIGlmIChjYW5jZWxsZWRPckNsaWVu
dGxlc3MoKSB8fCAhZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZC0+
bV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCk7CisKKyAgICBib29sIGlzU3luY1Jl
cXVlc3QgPSBkLT5tX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7CisgICAgZC0+bV9jdXJs
UmVxdWVzdC0+Y2FuY2VsKCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxw
dHIpOworCisgICAgZC0+bV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1fY3Vy
cmVudFJlcXVlc3QpOworCisgICAgaWYgKHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChkLT5t
X2N1cnJlbnRSZXF1ZXN0LnVybCgpLCBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLnVybCgpKSkgewor
ICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGQtPm1fY3VycmVudFJlcXVl
c3QsIHRydWUpOworICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50
aWFsLmZpcnN0LCBjcmVkZW50aWFsLnNlY29uZCk7CisgICAgfQorCisgICAgZC0+bV9jdXJsUmVx
dWVzdC0+c3RhcnQoaXNTeW5jUmVxdWVzdCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6Omhh
bmRsZURhdGFVUkwoKQoreworICAgIEFTU0VSVChkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5wcm90
b2NvbElzRGF0YSgpKTsKKyAgICBTdHJpbmcgdXJsID0gZC0+bV9maXJzdFJlcXVlc3QudXJsKCku
c3RyaW5nKCk7CisKKyAgICBBU1NFUlQoY2xpZW50KCkpOworCisgICAgYXV0byBpbmRleCA9IHVy
bC5maW5kKCcsJyk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgIGNsaWVu
dCgpLT5jYW5ub3RTaG93VVJMKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
U3RyaW5nIG1lZGlhVHlwZSA9IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKKyAgICBTdHJp
bmcgZGF0YSA9IHVybC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKKyAgICBhdXRvIG9yaWdpbmFsU2l6
ZSA9IGRhdGEubGVuZ3RoKCk7CisKKyAgICBib29sIGJhc2U2NCA9IG1lZGlhVHlwZS5lbmRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKCI7YmFzZTY0Iik7CisgICAgaWYgKGJhc2U2NCkKKyAgICAgICAg
bWVkaWFUeXBlID0gbWVkaWFUeXBlLmxlZnQobWVkaWFUeXBlLmxlbmd0aCgpIC0gNyk7CisKKyAg
ICBpZiAobWVkaWFUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgbWVkaWFUeXBlID0gInRleHQvcGxh
aW4iOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlw
ZShtZWRpYVR5cGUpOworICAgIFN0cmluZyBjaGFyc2V0ID0gZXh0cmFjdENoYXJzZXRGcm9tTWVk
aWFUeXBlKG1lZGlhVHlwZSk7CisKKyAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCisgICAgICAg
IGNoYXJzZXQgPSAiVVMtQVNDSUkiOworCisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsK
KyAgICByZXNwb25zZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CisgICAgcmVzcG9uc2Uuc2V0VGV4
dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKKyAgICByZXNwb25zZS5zZXRVUkwoZC0+bV9maXJzdFJl
cXVlc3QudXJsKCkpOworCisgICAgaWYgKGJhc2U2NCkgeworICAgICAgICBkYXRhID0gZGVjb2Rl
VVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEpOworICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoV1RG
TW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsK
KyAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGll
bnQgdG8gYmUgZGVsZXRlZC4KKyAgICAgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gb3V0OworICAgICAgICAgICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBvdXQs
IEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKKyAgICAg
ICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsK
KyAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhLCBlbmNvZGluZyk7
CisgICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICAgICAgY29udGludWVBZnRl
ckRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBkaWRSZWNl
aXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgorICAgICAg
ICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBlbmNvZGlu
Zy5lbmNvZGUoZGF0YSwgVW5lbmNvZGFibGVIYW5kbGluZzo6VVJMRW5jb2RlZEVudGl0aWVzKTsK
KyAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5zaXplKCkpCisgICAgICAgICAgICAgICAgY2xp
ZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYzQ0NjU1NmZlLi4wMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTIzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgTkFWRVIgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgiCi0KLSNpZiBVU0UoQ1VSTCkKLQotI2lu
Y2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyQ3Vy
bC5oIgotI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiQ3VybENhY2hl
TWFuYWdlci5oIgotI2luY2x1ZGUgIkN1cmxSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSFRUUFBhcnNl
cnMuaCIKLSNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKLSNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUpCi0gICAgOiBtX2hhbmRsZShoYW5kbGUpCi0gICAgLCBtX2ZpcnN0
UmVxdWVzdChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9j
dXJyZW50UmVxdWVzdChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmlzb2xhdGVkQ29weSgpKQotICAg
ICwgbV9zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShoYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKCkpCi0gICAgLCBtX3VzZXIoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3VzZXIu
aXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX3Bhc3MoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Bh
c3MuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2luaXRpYWxDcmVkZW50aWFsKGhhbmRsZS0+Z2V0
SW50ZXJuYWwoKS0+bV9pbml0aWFsQ3JlZGVudGlhbCkKLSAgICAsIG1fZGVmZXJzTG9hZGluZyho
YW5kbGUtPmdldEludGVybmFsKCktPm1fZGVmZXJzTG9hZGluZykKLXsKLQotfQotCi1SZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6flJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKCkKLXsKLSAg
ICBpZiAobV9jdXJsUmVxdWVzdCkKLSAgICAgICAgbV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51
bGxwdHIpOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYXNIYW5kbGUo
KSBjb25zdAotewotICAgIHJldHVybiAhIW1faGFuZGxlOwotfQotCi12b2lkIFJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpyZWxlYXNlSGFuZGxlKCkKLXsKLSAgICBtX2hhbmRsZSA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnN0YXJ0KCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgYXV0byBjcmVkZW50aWFsID0gZ2V0Q3Jl
ZGVudGlhbChtX2N1cnJlbnRSZXF1ZXN0LCBmYWxzZSk7Ci0KLSAgICBtX2N1cmxSZXF1ZXN0ID0g
Y3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+
c2V0VXNlclBhc3MoY3JlZGVudGlhbC5maXJzdCwgY3JlZGVudGlhbC5zZWNvbmQpOwotICAgIG1f
Y3VybFJlcXVlc3QtPnN0YXJ0KCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGU6OmNhbmNlbCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHJlbGVh
c2VIYW5kbGUoKTsKLQotICAgIGlmICghbV9jdXJsUmVxdWVzdCkKLSAgICAgICAgbV9jdXJsUmVx
dWVzdC0+Y2FuY2VsKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNl
dERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIGlmIChkZWZlcnMgPT0gbV9kZWZlcnNMb2FkaW5nKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2RlZmVyc0xvYWRpbmcgPSBkZWZlcnM7Ci0KLSAgICBpZiAoIW1fY3VybFJlcXVl
c3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2RlZmVyc0xvYWRpbmcpCi0gICAgICAg
IG1fY3VybFJlcXVlc3QtPnN1c3BlbmQoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VybFJlcXVl
c3QtPnJlc3VtZSgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXRB
dXRoZW50aWNhdGlvbihjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV9jdXJsUmVxdWVz
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBpc1N5bmNSZXF1ZXN0ID0gbV9jdXJsUmVx
dWVzdC0+aXNTeW5jUmVxdWVzdCgpOwotICAgIG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOwotICAg
IG1fY3VybFJlcXVlc3QtPnNldENsaWVudChudWxscHRyKTsKLQotICAgIG1fY3VybFJlcXVlc3Qg
PSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLSAgICBtX2N1cmxSZXF1ZXN0
LT5zZXRVc2VyUGFzcyh1c2VyLCBwYXNzd29yZCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQo
aXNTeW5jUmVxdWVzdCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRp
c3BhdGNoU3luY2hyb25vdXNKb2IoKQotewotICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0LnVybCgp
LnByb3RvY29sSXNEYXRhKCkpIHsKLSAgICAgICAgaGFuZGxlRGF0YVVSTCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgZGVmZXJzTG9hZGluZyBpcyB0cnVlIGFuZCB3ZSBj
YWxsIGN1cmxfZWFzeV9wZXJmb3JtCi0gICAgLy8gb24gYSBwYXVzZWQgaGFuZGxlLCBsaWJjVVJM
IHdvdWxkIGRvIHRoZSB0cmFuc2ZlcnQgYW55d2F5Ci0gICAgLy8gYW5kIHdlIHdvdWxkIGFzc2Vy
dCBzbyBmb3JjZSBkZWZlcnNMb2FkaW5nIHRvIGJlIGZhbHNlLgotICAgIG1fZGVmZXJzTG9hZGlu
ZyA9IGZhbHNlOwotCi0gICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1fY3Vy
cmVudFJlcXVlc3QpOwotICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KHRydWUpOwotfQotCi1SZWY8
Q3VybFJlcXVlc3Q+IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjcmVhdGVDdXJsUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIC8vIEN1cmxDYWNoZSA6IGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0
aW9uCi0gICAgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSBmYWxzZTsKLQotICAgIGJv
b2wgaGFzQ2FjaGVIZWFkZXJzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMo
SFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSkgfHwgcmVxdWVzdC5odHRwSGVhZGVyRmll
bGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoKTsKLSAgICBpZiAoIWhh
c0NhY2hlSGVhZGVycykgewotICAgICAgICBhdXRvJiBjYWNoZSA9IEN1cmxDYWNoZU1hbmFnZXI6
OnNpbmdsZXRvbigpOwotICAgICAgICBVUkwgY2FjaGVVcmwgPSByZXF1ZXN0LnVybCgpOwotICAg
ICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgICAgICBpZiAo
Y2FjaGUuaXNDYWNoZWQoY2FjaGVVcmwpKSB7Ci0gICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVu
dHJ5Q2xpZW50KGNhY2hlVXJsLCBtX2hhbmRsZSk7Ci0KLSAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgZW50cnkgOiBjYWNoZS5yZXF1ZXN0SGVhZGVycyhjYWNoZVVybCkpCi0gICAgICAgICAg
ICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGQoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7
Ci0KLSAgICAgICAgICAgIG1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kIHNob3VsZFN1
c3BlbmQgPSBtX2RlZmVyc0xvYWRpbmcgPyBDdXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZDo6WWVz
IDogQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQ6Ok5vOwotICAgIHJldHVybiBDdXJsUmVxdWVz
dDo6Y3JlYXRlKHJlcXVlc3QsIHRoaXMsIHNob3VsZFN1c3BlbmQsIEN1cmxSZXF1ZXN0OjpFbmFi
bGVNdWx0aXBhcnQ6Olllcyk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OmNhbmNlbGxlZE9yQ2xpZW50bGVzcygpCi17Ci0gICAgaWYgKCFtX2hhbmRsZSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gIW1faGFuZGxlLT5jbGllbnQoKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZFNlbmREYXRhKHVuc2lnbmVkIGxv
bmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChjYW5jZWxsZWRPckNs
aWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYW5kbGUtPmNsaWVudCgpLT5k
aWRTZW5kRGF0YShtX2hhbmRsZSwgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotfQot
Ci1zdGF0aWMgdm9pZCBoYW5kbGVDb29raWVIZWFkZXJzKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVz
cG9uc2UpCi17Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gc2V0Q29va2llSGVhZGVyID0gInNldC1j
b29raWU6ICI7Ci0KLSAgICBhdXRvJiBkZWZhdWx0U3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOwotICAgIGNvbnN0IENvb2tpZUph
ckN1cmwmIGNvb2tpZUphciA9IGRlZmF1bHRTdG9yYWdlU2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7
Ci0gICAgZm9yIChhdXRvIGhlYWRlciA6IHJlc3BvbnNlLmhlYWRlcnMpIHsKLSAgICAgICAgaWYg
KGhlYWRlci5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uoc2V0Q29va2llSGVhZGVyKSkgewot
ICAgICAgICAgICAgU3RyaW5nIHNldENvb2tpZVN0cmluZyA9IGhlYWRlci5yaWdodChoZWFkZXIu
bGVuZ3RoKCkgLSBzdHJsZW4oc2V0Q29va2llSGVhZGVyKSk7Ci0gICAgICAgICAgICBjb29raWVK
YXIuc2V0Q29va2llc0Zyb21IVFRQUmVzcG9uc2UoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLCByZXNw
b25zZS51cmwsIHNldENvb2tpZVN0cmluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
Q3VybFJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgQVNTRVJUKCFtX2RlZmVyc0xvYWRpbmcpOwotCi0gICAgaWYgKGNhbmNlbGxl
ZE9yQ2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hhbmRsZS0+Z2V0SW50
ZXJuYWwoKS0+bV9yZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSk7
Ci0KLSAgICBpZiAobV9jdXJsUmVxdWVzdCkKLSAgICAgICAgbV9oYW5kbGUtPmdldEludGVybmFs
KCktPm1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhtX2N1cmxSZXF1
ZXN0LT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7Ci0KLSAgICBoYW5kbGVDb29raWVIZWFkZXJz
KHJlY2VpdmVkUmVzcG9uc2UpOwotCi0gICAgaWYgKHJlc3BvbnNlKCkuc2hvdWxkUmVkaXJlY3Qo
KSkgewotICAgICAgICB3aWxsU2VuZFJlcXVlc3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChyZXNwb25zZSgpLmlzVW5hdXRob3JpemVkKCkpIHsKLSAgICAgICAgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHJlY2VpdmVkUmVzcG9uc2UsIG1fYXV0aEZhaWx1
cmVDb3VudCwgcmVzcG9uc2UoKSwgbV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRsZS0+ZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7Ci0gICAgICAgIG1fYXV0aEZh
aWx1cmVDb3VudCsrOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faGFuZGxl
LT5jbGllbnQoKSkgewotICAgICAgICBpZiAocmVzcG9uc2UoKS5pc05vdE1vZGlmaWVkKCkpIHsK
LSAgICAgICAgICAgIFVSTCBjYWNoZVVybCA9IG1fY3VycmVudFJlcXVlc3QudXJsKCk7Ci0gICAg
ICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgICAgICAg
ICAgaWYgKEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmdldENhY2hlZFJlc3BvbnNlKGNh
Y2hlVXJsLCByZXNwb25zZSgpKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2FkZGVkQ2FjaGVW
YWxpZGF0aW9uSGVhZGVycykgewotICAgICAgICAgICAgICAgICAgICByZXNwb25zZSgpLnNldEhU
VFBTdGF0dXNDb2RlKDIwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlKCkuc2V0SFRU
UFN0YXR1c1RleHQoIk9LIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2
ZVJlc3BvbnNlKCptX2hhbmRsZSwgcmVzcG9uc2UoKSk7Ci0KLSAgICAgICAgYXV0byBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqbV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UoKSksIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYm
IGJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbmNl
bGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDdXJsQ2FjaGVNYW5h
Z2VyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZlRGF0YSgqbV9oYW5kbGUsIGJ1ZmZlci0+ZGF0YSgp
LCBidWZmZXItPnNpemUoKSk7Ci0gICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlQnVm
ZmVyKG1faGFuZGxlLCBXVEZNb3ZlKGJ1ZmZlciksIGJ1ZmZlci0+c2l6ZSgpKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZENvbXBsZXRlKCkKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9jdXJsUmVxdWVzdCkKLSAgICAgICAgbV9o
YW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2Fk
TWV0cmljcyhtX2N1cmxSZXF1ZXN0LT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7Ci0KLSAgICBp
ZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0gICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmds
ZXRvbigpLmRpZEZpbmlzaExvYWRpbmcoKm1faGFuZGxlKTsKLSAgICAgICAgbV9oYW5kbGUtPmNs
aWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0IFJlc291
cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkRmFpbCgqbV9oYW5kbGUpOwotICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRsZSwgcmVzb3VyY2VFcnJvcik7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNvbnRpbnVlRGlkUmVjZWl2ZVJl
c3BvbnNlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgY29udGludWVB
ZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlOjpwbGF0Zm9ybUNvbnRpbnVlU3luY2hyb25vdXNEaWRSZWNlaXZlUmVzcG9uc2UoKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBjb250aW51ZUFmdGVyRGlkUmVj
ZWl2ZVJlc3BvbnNlKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNv
bnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICAvLyBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYW5jZWwg
dGhlIGxvYWQuCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpIHx8ICFtX2N1cmxSZXF1
ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2N1cmxSZXF1ZXN0LT5jb21wbGV0ZURpZFJl
Y2VpdmVSZXNwb25zZSgpOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpz
aG91bGRSZWRpcmVjdEFzR0VUKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBj
cm9zc09yaWdpbikKLXsKLSAgICBpZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwg
cmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkhFQUQiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZXNwb25zZSgpLmlzU2VlT3RoZXIoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoKHJlc3BvbnNlKCkuaXNNb3ZlZFBlcm1hbmVudGx5
KCkgfHwgcmVzcG9uc2UoKS5pc0ZvdW5kKCkpICYmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAi
UE9TVCIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjcm9zc09yaWdpbiAmJiAo
cmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkRFTEVURSIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6d2lsbFNlbmRSZXF1ZXN0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0g
ICAgc3RhdGljIGNvbnN0IGludCBtYXhSZWRpcmVjdHMgPSAyMDsKLQotICAgIGlmIChtX3JlZGly
ZWN0Q291bnQrKyA+IG1heFJlZGlyZWN0cykgewotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCkt
PmRpZEZhaWwobV9oYW5kbGUsIFJlc291cmNlRXJyb3I6Omh0dHBFcnJvcihDVVJMRV9UT09fTUFO
WV9SRURJUkVDVFMsIHJlc3BvbnNlKCkudXJsKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFN0cmluZyBsb2NhdGlvbiA9IHJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBI
ZWFkZXJOYW1lOjpMb2NhdGlvbik7Ci0gICAgVVJMIG5ld1VSTCA9IFVSTChtX2hhbmRsZS0+Z2V0
SW50ZXJuYWwoKS0+bV9yZXNwb25zZS51cmwoKSwgbG9jYXRpb24pOwotICAgIGJvb2wgY3Jvc3NP
cmlnaW4gPSAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1fZmlyc3RSZXF1ZXN0LnVybCgp
LCBuZXdVUkwpOwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSBtX2ZpcnN0UmVx
dWVzdDsKLSAgICBuZXdSZXF1ZXN0LnNldFVSTChuZXdVUkwpOwotCi0gICAgaWYgKHNob3VsZFJl
ZGlyZWN0QXNHRVQobmV3UmVxdWVzdCwgY3Jvc3NPcmlnaW4pKSB7Ci0gICAgICAgIG5ld1JlcXVl
c3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0gICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUEJvZHko
bnVsbHB0cik7Ci0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKLSAg
ICB9Ci0KLSAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJv
bSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KLSAgICBpZiAoIW5ld1VSTC5w
cm90b2NvbElzKCJodHRwcyIpICYmIHByb3RvY29sSXMobmV3UmVxdWVzdC5odHRwUmVmZXJyZXIo
KSwgImh0dHBzIikgJiYgbV9oYW5kbGUtPmNvbnRleHQoKS0+c2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCgpKQotICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUFJlZmVy
cmVyKCk7Ci0KLSAgICBtX3VzZXIgPSBuZXdVUkwudXNlcigpOwotICAgIG1fcGFzcyA9IG5ld1VS
TC5wYXNzKCk7Ci0gICAgbmV3UmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOwotCi0gICAgaWYg
KGNyb3NzT3JpZ2luKSB7Ci0gICAgICAgIC8vIElmIHRoZSBuZXR3b3JrIGxheWVyIGNhcnJpZXMg
b3ZlciBhdXRoZW50aWNhdGlvbiBoZWFkZXJzIGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QKLSAg
ICAgICAgLy8gaW4gYSBjcm9zcy1vcmlnaW4gcmVkaXJlY3QsIHdlIHdhbnQgdG8gY2xlYXIgdGhv
c2UgaGVhZGVycyBoZXJlLiAKLSAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBBdXRob3JpemF0
aW9uKCk7Ci0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQT3JpZ2luKCk7Ci0gICAgfQotCi0g
ICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZUNvcHkgPSByZXNwb25zZSgpOwotICAgIG1faGFu
ZGxlLT5jbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0QXN5bmMobV9oYW5kbGUsIFdURk1vdmUobmV3
UmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2VDb3B5KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0gKFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpIHsKLSAgICAgICAgY29u
dGludWVXaWxsU2VuZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFJl
c291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQotICAgIGNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNvbnRpbnVlQWZ0ZXJXaWxsU2Vu
ZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgLy8gd2lsbFNlbmRSZXF1ZXN0IG1pZ2h0IGNhbmNlbCB0aGUgbG9h
ZC4KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkgfHwgIW1fY3VybFJlcXVlc3QpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVudFJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3Qp
OwotCi0gICAgYm9vbCBpc1N5bmNSZXF1ZXN0ID0gbV9jdXJsUmVxdWVzdC0+aXNTeW5jUmVxdWVz
dCgpOwotICAgIG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOwotICAgIG1fY3VybFJlcXVlc3QtPnNl
dENsaWVudChudWxscHRyKTsKLQotICAgIG1fY3VybFJlcXVlc3QgPSBjcmVhdGVDdXJsUmVxdWVz
dChtX2N1cnJlbnRSZXF1ZXN0KTsKLQotICAgIGlmIChwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1
YWwobV9jdXJyZW50UmVxdWVzdC51cmwoKSwgcmVzcG9uc2UoKS51cmwoKSkpIHsKLSAgICAgICAg
YXV0byBjcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbChtX2N1cnJlbnRSZXF1ZXN0LCB0cnVlKTsK
LSAgICAgICAgbV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3MoY3JlZGVudGlhbC5maXJzdCwgY3Jl
ZGVudGlhbC5zZWNvbmQpOwotICAgIH0KLQotICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KGlzU3lu
Y1JlcXVlc3QpOwotfQotCi1SZXNvdXJjZVJlc3BvbnNlJiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6cmVzcG9uc2UoKQotewotICAgIHJldHVybiBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+
bV9yZXNwb25zZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFuZGxl
RGF0YVVSTCgpCi17Ci0gICAgQVNTRVJUKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnByb3RvY29sSXNE
YXRhKCkpOwotICAgIFN0cmluZyB1cmwgPSBtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKTsK
LQotICAgIEFTU0VSVChtX2hhbmRsZS0+Y2xpZW50KCkpOwotCi0gICAgYXV0byBpbmRleCA9IHVy
bC5maW5kKCcsJyk7Ci0gICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIG1faGFu
ZGxlLT5jbGllbnQoKS0+Y2Fubm90U2hvd1VSTChtX2hhbmRsZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBTdHJpbmcgbWVkaWFUeXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRleCAt
IDUpOwotICAgIFN0cmluZyBkYXRhID0gdXJsLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgIGF1
dG8gb3JpZ2luYWxTaXplID0gZGF0YS5sZW5ndGgoKTsKLQotICAgIGJvb2wgYmFzZTY0ID0gbWVk
aWFUeXBlLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIjtiYXNlNjQiKTsKLSAgICBpZiAoYmFz
ZTY0KQotICAgICAgICBtZWRpYVR5cGUgPSBtZWRpYVR5cGUubGVmdChtZWRpYVR5cGUubGVuZ3Ro
KCkgLSA3KTsKLQotICAgIGlmIChtZWRpYVR5cGUuaXNFbXB0eSgpKQotICAgICAgICBtZWRpYVR5
cGUgPSAidGV4dC9wbGFpbiI7Ci0KLSAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5
cGVGcm9tTWVkaWFUeXBlKG1lZGlhVHlwZSk7Ci0gICAgU3RyaW5nIGNoYXJzZXQgPSBleHRyYWN0
Q2hhcnNldEZyb21NZWRpYVR5cGUobWVkaWFUeXBlKTsKLQotICAgIGlmIChjaGFyc2V0LmlzRW1w
dHkoKSkKLSAgICAgICAgY2hhcnNldCA9ICJVUy1BU0NJSSI7Ci0KLSAgICBSZXNvdXJjZVJlc3Bv
bnNlIHJlc3BvbnNlOwotICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKLSAgICBy
ZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGNoYXJzZXQpOwotICAgIHJlc3BvbnNlLnNldFVS
TChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7Ci0KLSAgICBpZiAoYmFzZTY0KSB7Ci0gICAgICAgIGRh
dGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7Ci0gICAgICAgIG1faGFuZGxlLT5k
aWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZl
UmVzcG9uc2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNl
IG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KLSAgICAgICAgaWYgKG1faGFu
ZGxlLT5jbGllbnQoKSkgewotICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAg
ICAgIGlmIChiYXNlNjREZWNvZGUoZGF0YSwgb3V0LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdM
aW5lcykgJiYgb3V0LnNpemUoKSA+IDApCi0gICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNsaWVu
dCgpLT5kaWRSZWNlaXZlQnVmZmVyKG1faGFuZGxlLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShvdXQu
ZGF0YSgpLCBvdXQuc2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsKLSAgICAgICAgZGF0
YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhLCBlbmNvZGluZyk7Ci0gICAgICAgIG1f
aGFuZGxlLT5kaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJE
aWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gZGlkUmVjZWl2
ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KLSAgICAgICAg
aWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9
IGVuY29kaW5nLmVuY29kZShkYXRhLCBVbmVuY29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50
aXRpZXMpOwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLnNpemUoKSkKLSAgICAgICAgICAg
ICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZW5jb2RlZERhdGEpKSwgb3JpZ2luYWxTaXplKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIG1f
aGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7Ci19Ci0KLXN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4gUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmdldENyZWRl
bnRpYWwoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHJlZGlyZWN0KQotewotICAgIC8v
IG1fdXNlci9tX3Bhc3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFu
Y2UsIGJ5IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4KLSAg
ICBTdHJpbmcgcGFydGl0aW9uID0gcmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpOwotCi0gICAgaWYg
KG1fc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpIHsKLSAgICAgICAgaWYgKG1fdXNlci5pc0Vt
cHR5KCkgJiYgbV9wYXNzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJl
dmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLCAKLSAgICAg
ICAgICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBh
bGxvd2VkIGJ5IFJGQyAyNjE3LgotICAgICAgICAgICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IENy
ZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0aW9u
LCByZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICghcmVkaXJlY3QpIHsKLSAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtub3duIGZv
ciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzCi0gICAgICAgICAgICAvLyBiZWZv
cmUgc2VuZGluZyBhIHJlcXVlc3QuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50
IGxvZ291dCBieSBzZW5kaW5nIGFuCi0gICAgICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdCB3aXRo
IGtub3duIGluY29ycmVjdCBjcmVkZW50aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5
IChzbyB0aGF0Ci0gICAgICAgICAgICAvLyBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24n
dCBwb3AgdXApLgotICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50
aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIENyZWRlbnRpYWwobV91c2VyLCBtX3Bhc3MsIENy
ZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCByZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIFN0cmluZyB1c2VyID0gbV91c2VyOwotICAgIFN0cmluZyBwYXNzd29yZCA9IG1f
cGFzczsKLQotICAgIGlmICghbV9pbml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgdXNlciA9IG1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpOwotICAgICAgICBwYXNzd29yZCA9
IG1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKTsKLSAgICB9Ci0KLSAgICBpZiAodXNlci5p
c0VtcHR5KCkgJiYgcGFzc3dvcmQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gc3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPigiIiwgIiIpOwotCi0gICAgcmV0dXJuIHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4odXNlciwgcGFzc3dvcmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZmJmZmE1M2JmOTEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
TkFWRVIgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgVVNFKENVUkwpCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsLmgiCi0jaW5jbHVkZSAiQ3Vy
bFJlcXVlc3RDbGllbnQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBDdXJsUmVxdWVzdDsKLWNsYXNzIFJlc291cmNlSGFuZGxl
OwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLQotY2xhc3MgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGUgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGU+LCBwdWJsaWMgQ3VybFJlcXVlc3RDbGllbnQgewotcHVibGljOgotICAgIFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlKFJlc291cmNlSGFuZGxlKik7Ci0gICAgflJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlKCk7Ci0KLSAgICB2b2lkIHJlZigpIG92ZXJyaWRlIHsgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+OjpyZWYoKTsgfQotICAg
IHZvaWQgZGVyZWYoKSBvdmVycmlkZSB7IFRocmVhZFNhZmVSZWZDb3VudGVkPFJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlPjo6ZGVyZWYoKTsgfQotCi0gICAgYm9vbCBoYXNIYW5kbGUoKSBjb25z
dDsKLSAgICB2b2lkIHJlbGVhc2VIYW5kbGUoKTsKLQotICAgIHZvaWQgc3RhcnQoKTsKLSAgICB2
b2lkIGNhbmNlbCgpOwotCi0gICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwotICAgIHZv
aWQgc2V0QXV0aGVudGljYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICB2b2lkIGRpc3BhdGNoU3luY2hyb25vdXNKb2IoKTsKLQotICAgIHZvaWQgY29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2UoKTsKLSAgICB2b2lkIHBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91c0Rp
ZFJlY2VpdmVSZXNwb25zZSgpOwotCi0gICAgdm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmJik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gQ2FsbGVkIGZyb20gbWFpbiB0
aHJlYWQuCi0gICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKTsKLQotICAgIHN0ZDo6cGFp
cjxTdHJpbmcsIFN0cmluZz4gZ2V0Q3JlZGVudGlhbChSZXNvdXJjZVJlcXVlc3QmLCBib29sKTsK
LQotICAgIGJvb2wgY2FuY2VsbGVkT3JDbGllbnRsZXNzKCk7Ci0KLSAgICBSZWY8Q3VybFJlcXVl
c3Q+IGNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgY3VybERp
ZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgY3VybERpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIGN1cmxEaWRS
ZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY3Vy
bERpZENvbXBsZXRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihj
b25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJE
aWRSZWNlaXZlUmVzcG9uc2UoKTsKLQotICAgIGJvb2wgc2hvdWxkUmVkaXJlY3RBc0dFVChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGNyb3NzT3JpZ2luKTsKLSAgICB2b2lkIHdpbGxTZW5k
UmVxdWVzdCgpOwotICAgIHZvaWQgY29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QmJik7Ci0KLSAgICB2b2lkIGhhbmRsZURhdGFVUkwoKTsKLQotICAgIC8vIFVzZWQg
YnkgbWFpbiB0aHJlYWQuCi0gICAgUmVzb3VyY2VIYW5kbGUqIG1faGFuZGxlOwotICAgIHVuc2ln
bmVkIG1fYXV0aEZhaWx1cmVDb3VudCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291
bnQgeyAwIH07Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVlc3Q7Ci0gICAgUmVz
b3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7Ci0gICAgYm9vbCBtX3Nob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlOwotICAgIFN0cmluZyBtX3VzZXI7Ci0gICAgU3RyaW5nIG1fcGFzczsKLSAg
ICBDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7Ci0gICAgYm9vbCBtX2RlZmVyc0xvYWRp
bmc7Ci0gICAgYm9vbCBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyB7IGZhbHNlIH07Ci0g
ICAgUmVmUHRyPEN1cmxSZXF1ZXN0PiBtX2N1cmxSZXF1ZXN0OwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333601</attachid>
            <date>2018-02-12 09:57:15 -0800</date>
            <delta_ts>2018-02-13 11:21:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>182578.diff</filename>
            <type>text/plain</type>
            <size>67421</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzJiNWExLi5kZmIxY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMg
QEAKKzIwMTgtMDItMTIgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgor
CisgICAgICAgIFtDdXJsXSBVbmlmeSBsb2dpYyBvZiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZSBpbnRvIFJlc291cmNlSGFuZGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODI1NzgKKworICAgICAgICBSZWNvbnN0cnVjdCB0aGUgY2xhc3NlcyB0
byBtYXRjaCBDdXJsIHBvcnQgbmV0d29yayBsYXllciBtb3JlIHNpbWlsYXIKKyAgICAgICAgc3Ry
dWN0dXJlIHdpdGggb3RoZXIgcG9ydHMuIE1vdmUgQ3VybFJlcXVlc3QgaGFuZGxpbmcgaW50byBS
ZXNvdXJjZUhhbmRsZQorICAgICAgICBhbmQgbWFrZXMgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdh
dGUgc2ltcGxlIGxpZmUgY3ljbGUuIEFsc28gaXRzIGR1dHkgaXMKKyAgICAgICAgZm9yIG1vc3Qg
b2YgaW5jb21pbmcgZGF0YSBhbmQgZXZlbnQgaGFuZGxpbmcgZnJvbSBDdXJSZXF1ZXN0LgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBiZWNhdXNlIHRoZXJlJ3Mgbm8gbmV3IGJlaGF2aW9yLgorCisgICAgICAgICogcGxhdGZvcm0v
Q3VybC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsQ2FjaGVNYW5hZ2VyOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjcmVhdGVDdXJsUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRGYWlsV2l0aEVycm9yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRTZW5kRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpDdXJsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y2FsbENsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6d2lsbFNlbmREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGFGcm9tTXVsdGlwYXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpkaWRDb21wbGV0ZVRyYW5zZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxSZXF1ZXN0OjppbnZva2VEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxSZXF1ZXN0Q2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxS
ZXNvdXJjZUhhbmRsZURlbGVnYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
UmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmNvbnRpbnVlQ2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
UmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y29udGludWVXaWxsQ2FjaGVSZXNwb25zZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6cmVmKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpkZXJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y2FuY2VsbGVkT3JDbGllbnRsZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjbGllbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRT
ZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVDb29raWVIZWFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkUmVjZWl2ZVJl
c3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpj
dXJsRGlkUmVjZWl2ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVzb3VyY2VIYW5k
bGVEZWxlZ2F0ZTo6Y3VybERpZENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNv
dXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkRmFpbFdpdGhFcnJvcik6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OnJlc3BvbnNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpoYW5k
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNl
SGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNlbGxlZE9yQ2xpZW50bGVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVl
V2l0aG91dENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6Omdl
dENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRS
ZXF1ZXN0V2l0aENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Db250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2ZVJlc3Bv
bnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyRGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzaG91
bGRSZWRpcmVjdEFzR0VUKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxs
U2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVl
QWZ0ZXJXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmhhbmRsZURhdGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmg6IFJlbW92ZWQuCisKIDIwMTgt
MDItMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VS
VElPTiBGQUlMRUQ6IG1fdGltZU9yaWdpbiBpbiBQZXJmb3JtYW5jZTo6UGVyZm9ybWFuY2UoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKaW5kZXggNzNjMDE0Zi4uNGE4MmViMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCkBAIC0xOCw2ICsxOCw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsTXVsdGlwYXJ0SGFu
ZGxlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3RTY2hlZHVsZXIuY3BwCisgICAgcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsU1NMSGFuZGxlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0ROU0N1
cmwuY3BwCkBAIC0yNSw3ICsyNiw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3JDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCi0gICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1N5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50Q3VybC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCA2MjE1NDA3Li5mNTAxYzRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCkBAIC0z
Niw2ICszNiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCisjaWYg
VVNFKENVUkwpCisjaW5jbHVkZSAiQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuaCIKKyNlbmRp
ZgorCiAjaWYgVVNFKFNPVVApCiB0eXBlZGVmIHN0cnVjdCBfR1Rsc0NlcnRpZmljYXRlIEdUbHND
ZXJ0aWZpY2F0ZTsKIHR5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKQEAg
LTkyLDYgKzk2LDExIEBAIGNsYXNzIFNvdXBOZXR3b3JrU2Vzc2lvbjsKIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIGNsYXNzIFRpbWVyOwogCisjaWYgVVNFKENVUkwpCitjbGFzcyBDdXJsUmVxdWVzdDsK
K2NsYXNzIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOworI2VuZGlmCisKIGNsYXNzIFJlc291
cmNlSGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGU+LCBwdWJsaWMgQXV0
aGVudGljYXRpb25DbGllbnQgewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5n
LCBib29sIHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlm
Zik7CkBAIC0xODUsNiArMTk0LDE1IEBAIHB1YmxpYzoKICAgICBNb25vdG9uaWNUaW1lIG1fcmVx
dWVzdFRpbWU7CiAjZW5kaWYKIAorI2lmIFVTRShDVVJMKQorICAgIGJvb2wgY2FuY2VsbGVkT3JD
bGllbnRsZXNzKCk7CisgICAgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUqIGRlbGVnYXRlKCk7
CisKKyAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB2b2lk
IHdpbGxTZW5kUmVxdWVzdCgpOworICAgIHZvaWQgY29udGludWVBZnRlcldpbGxTZW5kUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmJik7CisjZW5kaWYKKwogICAgIGJvb2wgaGFzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyQXV0aGVudGljYXRpb24oKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2FuY2VsKCk7CkBAIC0yNzgsNiArMjk2LDE3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKICNlbmRpZgogCisjaWYgVVNF
KENVUkwpCisgICAgUmVmPEN1cmxSZXF1ZXN0PiBjcmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QmKTsKKworICAgIGJvb2wgc2hvdWxkUmVkaXJlY3RBc0dFVChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBib29sIGNyb3NzT3JpZ2luKTsKKworICAgIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmlu
Zz4gZ2V0Q3JlZGVudGlhbChSZXNvdXJjZVJlcXVlc3QmLCBib29sKTsKKyAgICB2b2lkIHJlc3Rh
cnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcm
IHBhc3N3b3JkKTsKKworICAgIHZvaWQgaGFuZGxlRGF0YVVSTCgpOworI2VuZGlmCisKICAgICBm
cmllbmQgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbD4gZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCmluZGV4IDUxOGNm
OWMuLjAwODRiNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC0zNywxMyArMzcsOCBAQAogI2luY2x1
ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CiAjZW5kaWYKIAotI2lmIFVTRShDVVJMKSAm
JiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dz
Lmg+Ci0jZW5kaWYKLQogI2lmIFVTRShDVVJMKQotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKICNlbmRpZgogCiAjaWYgVVNF
KFNPVVApCkBAIC04MSw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RlZmVyc0xvYWRp
bmcoZGVmZXJzTG9hZGluZykKICAgICAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91bGRD
b250ZW50U25pZmYpCiAgICAgICAgICwgbV9zaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZihzaG91
bGRDb250ZW50RW5jb2RpbmdTbmlmZikKLSNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQorI2lmIFVT
RShDRlVSTENPTk5FQ1RJT04pIHx8IFVTRShDVVJMKQogICAgICAgICAsIG1fY3VycmVudFJlcXVl
c3QocmVxdWVzdCkKICNlbmRpZgogI2lmIFVTRShTT1VQKQpAQCAtMTMyLDggKzEyNywxNCBAQCBw
dWJsaWM6CiAgICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IG1fc3RvcmFnZVNl
c3Npb247CiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGU+IG1fZGVsZWdhdGU7Ci0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZT4gbV9kZWxl
Z2F0ZTsKKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKKyAgICBi
b29sIG1fY2FuY2VsbGVkIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291bnQg
eyAwIH07CisgICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9OworICAgIGJvb2wg
bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgeyBmYWxzZSB9OworICAgIFJlZlB0cjxDdXJs
UmVxdWVzdD4gbV9jdXJsUmVxdWVzdDsKICNlbmRpZgogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFu
YWdlci5jcHAKaW5kZXggOWFjZDE5NS4uYThkZWI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2FjaGVNYW5hZ2VyLmNwcApAQCAt
MTk5LDEwICsxOTksNiBAQCB2b2lkIEN1cmxDYWNoZU1hbmFnZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShSZXNvdXJjZUhhbmRsZSYgam9iLCBSZXNvdXJjZVJlc3BvbnNlJgogICAgIGlmIChtX2Rpc2Fi
bGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0g
am9iLmdldEludGVybmFsKCk7Ci0gICAgaWYgKCFkLT5tX2RlbGVnYXRlLT5oYXNIYW5kbGUoKSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgY29uc3QgU3RyaW5nJiB1cmwgPSBqb2IuZmlyc3RSZXF1
ZXN0KCkudXJsKCkuc3RyaW5nKCk7CiAKICAgICByZW1vdmVDYWNoZUVudHJ5Q2xpZW50KHVybCwg
JmpvYik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuY3BwCmluZGV4IGMwMzM1MzguLmMzNDE5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBAIC03
NiwxMCArNzYsMTIgQEAgYm9vbCBDdXJsRG93bmxvYWQ6OmNhbmNlbCgpCiAKIFJlZjxDdXJsUmVx
dWVzdD4gQ3VybERvd25sb2FkOjpjcmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCiB7Ci0gICAgcmV0dXJuIEN1cmxSZXF1ZXN0OjpjcmVhdGUocmVxdWVzdCwgdGhpcyk7
CisgICAgYXV0byBjdXJsUmVxdWVzdCA9IEN1cmxSZXF1ZXN0OjpjcmVhdGUocmVxdWVzdCk7Cisg
ICAgY3VybFJlcXVlc3QtPnNldENsaWVudCh0aGlzKTsKKyAgICByZXR1cm4gY3VybFJlcXVlc3Q7
CiB9CiAKLXZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1
cmxSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZFJlY2VpdmVS
ZXNwb25zZShDdXJsUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgQ3VybFJlc3BvbnNlJiByZXNwb25z
ZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xMDAsNyArMTAyLDcgQEAg
dm9pZCBDdXJsRG93bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgQ3VybFJlc3Bv
bnNlJiByZXNwb25zZSkKIH0KIAogCi12b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZFJlY2VpdmVC
dWZmZXIoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit2b2lkIEN1cmxEb3dubG9hZDo6Y3Vy
bERpZFJlY2VpdmVCdWZmZXIoQ3VybFJlcXVlc3QmIHJlcXVlc3QsIFJlZjxTaGFyZWRCdWZmZXI+
JiYgYnVmZmVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKQEAgLTExMSw3ICsx
MTMsNyBAQCB2b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNoYXJl
ZEJ1ZmZlcj4mJiBidWZmZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRpZFJlY2VpdmVEYXRhT2ZM
ZW5ndGgoYnVmZmVyLT5zaXplKCkpOwogfQogCi12b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZENv
bXBsZXRlKCkKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkQ29tcGxldGUoQ3VybFJlcXVlc3Qm
IHJlcXVlc3QpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMTI3LDcgKzEy
OSw3IEBAIHZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkQ29tcGxldGUoKQogICAgICAgICBtX2xp
c3RlbmVyLT5kaWRGaW5pc2goKTsKIH0KIAotdm9pZCBDdXJsRG93bmxvYWQ6OmN1cmxEaWRGYWls
V2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCit2b2lkIEN1cmxE
b3dubG9hZDo6Y3VybERpZEZhaWxXaXRoRXJyb3IoQ3VybFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxEb3dubG9hZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxEb3dubG9hZC5oCmluZGV4IDhhYWY3MGYuLmZlMGI4MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTcwLDExICs3
MCwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgUmVmPEN1cmxSZXF1ZXN0PiBjcmVhdGVD
dXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICB2b2lkIGN1cmxEaWRTZW5kRGF0YSh1
bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZykgb3ZlcnJpZGUgeyB9Ci0gICAg
dm9pZCBjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYpIG92ZXJyaWRl
OwotICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNoYXJlZEJ1ZmZlcj4mJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkQ29tcGxldGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGN1
cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKKyAgICB2
b2lkIGN1cmxEaWRTZW5kRGF0YShDdXJsUmVxdWVzdCYsIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5z
aWduZWQgbG9uZyBsb25nKSB7IH0KKyAgICB2b2lkIGN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoQ3Vy
bFJlcXVlc3QmLCBjb25zdCBDdXJsUmVzcG9uc2UmKTsKKyAgICB2b2lkIGN1cmxEaWRSZWNlaXZl
QnVmZmVyKEN1cmxSZXF1ZXN0JiwgUmVmPFNoYXJlZEJ1ZmZlcj4mJik7CisgICAgdm9pZCBjdXJs
RGlkQ29tcGxldGUoQ3VybFJlcXVlc3QmKTsKKyAgICB2b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9y
KEN1cmxSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgYm9vbCBzaG91bGRS
ZWRpcmVjdEFzR0VUKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgY3Jvc3NPcmlnaW4pOwog
ICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcAppbmRleCBmM2ViZDY4Li4wYzkyNjM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJl
cXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
UmVxdWVzdC5jcHAKQEAgLTM3LDE1ICszNywxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUN1cmxSZXF1ZXN0OjpDdXJsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmcmVxdWVzdCwg
Q3VybFJlcXVlc3RDbGllbnQqIGNsaWVudCwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJs
ZU11bHRpcGFydCkKK0N1cmxSZXF1ZXN0OjpDdXJsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmcmVxdWVzdCwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJsZU11bHRpcGFydCkKICAg
ICA6IG1fcmVxdWVzdChyZXF1ZXN0Lmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9zaG91bGRTdXNw
ZW5kKHNob3VsZFN1c3BlbmQpCiAgICAgLCBtX2VuYWJsZU11bHRpcGFydChlbmFibGVNdWx0aXBh
cnQpCiAgICAgLCBtX2Zvcm1EYXRhU3RyZWFtKG1fcmVxdWVzdC5odHRwQm9keSgpKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzZXRDbGllbnQoY2xpZW50KTsKIH0KIAog
dm9pZCBDdXJsUmVxdWVzdDo6c2V0VXNlclBhc3MoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBT
dHJpbmcmIHBhc3N3b3JkKQpAQCAtMTQyLDE4ICsxNDAsMTggQEAgdm9pZCBDdXJsUmVxdWVzdDo6
cmVzdW1lKCkKIH0KIAogLyogYHRoaXNgIGlzIHByb3RlY3RlZCBpbnNpZGUgdGhpcyBtZXRob2Qu
ICovCi12b2lkIEN1cmxSZXF1ZXN0OjpjYWxsQ2xpZW50KFdURjo6RnVuY3Rpb248dm9pZChDdXJs
UmVxdWVzdENsaWVudCYpPiB0YXNrKQordm9pZCBDdXJsUmVxdWVzdDo6Y2FsbENsaWVudChXVEY6
OkZ1bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3QmLCBDdXJsUmVxdWVzdENsaWVudCYpPiB0YXNrKQog
ewogICAgIGlmIChpc01haW5UaHJlYWQoKSkgewogICAgICAgICBpZiAoQ3VybFJlcXVlc3RDbGll
bnQqIGNsaWVudCA9IG1fY2xpZW50KSB7CiAgICAgICAgICAgICBSZWZQdHI8Q3VybFJlcXVlc3RD
bGllbnQ+IHByb3RlY3RlZENsaWVudChjbGllbnQpOwotICAgICAgICAgICAgdGFzaygqY2xpZW50
KTsKKyAgICAgICAgICAgIHRhc2soKnRoaXMsICpjbGllbnQpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0YXNrID0g
V1RGTW92ZSh0YXNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChDdXJsUmVxdWVzdENs
aWVudCogY2xpZW50ID0gcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQpIHsKICAgICAgICAgICAgICAg
ICBSZWZQdHI8Q3VybFJlcXVlc3RDbGllbnQ+IHByb3RlY3RlZENsaWVudChjbGllbnQpOwotICAg
ICAgICAgICAgICAgIHRhc2soKmNsaWVudCk7CisgICAgICAgICAgICAgICAgdGFzaygqdGhpcywg
KmNsaWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTI1OSw4ICsy
NTcsOCBAQCBzaXplX3QgQ3VybFJlcXVlc3Q6OndpbGxTZW5kRGF0YShjaGFyKiBidWZmZXIsIHNp
emVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZgogICAgICAgICByZXR1cm4gQ1VSTF9SRUFE
RlVOQ19BQk9SVDsKICAgICB9CiAKLSAgICBjYWxsQ2xpZW50KFt0aGlzLCB0b3RhbFJlYWRTaXpl
ID0gbV9mb3JtRGF0YVN0cmVhbS50b3RhbFJlYWRTaXplKCksIHRvdGFsU2l6ZSA9IG1fZm9ybURh
dGFTdHJlYW0udG90YWxTaXplKCldKEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKLSAgICAg
ICAgY2xpZW50LmN1cmxEaWRTZW5kRGF0YSh0b3RhbFJlYWRTaXplLCB0b3RhbFNpemUpOworICAg
IGNhbGxDbGllbnQoW3RvdGFsUmVhZFNpemUgPSBtX2Zvcm1EYXRhU3RyZWFtLnRvdGFsUmVhZFNp
emUoKSwgdG90YWxTaXplID0gbV9mb3JtRGF0YVN0cmVhbS50b3RhbFNpemUoKV0oQ3VybFJlcXVl
c3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgY2xpZW50
LmN1cmxEaWRTZW5kRGF0YShyZXF1ZXN0LCB0b3RhbFJlYWRTaXplLCB0b3RhbFNpemUpOwogICAg
IH0pOwogCiAgICAgcmV0dXJuICpzZW5kQnl0ZXM7CkBAIC0zNjEsOCArMzU5LDggQEAgc2l6ZV90
IEN1cmxSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikK
ICAgICAgICAgaWYgKG1fbXVsdGlwYXJ0SGFuZGxlKQogICAgICAgICAgICAgbV9tdWx0aXBhcnRI
YW5kbGUtPmRpZFJlY2VpdmVEYXRhKGJ1ZmZlcik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgY2FsbENsaWVudChbYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShDdXJsUmVxdWVzdENsaWVu
dCYgY2xpZW50KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjbGllbnQuY3VybERpZFJlY2Vp
dmVCdWZmZXIoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgICAgIGNhbGxDbGllbnQoW2J1ZmZl
ciA9IFdURk1vdmUoYnVmZmVyKV0oQ3VybFJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xp
ZW50JiBjbGllbnQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNsaWVudC5jdXJsRGlkUmVj
ZWl2ZUJ1ZmZlcihyZXF1ZXN0LCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zOTMsOCArMzkxLDggQEAgdm9pZCBDdXJsUmVxdWVzdDo6ZGlk
UmVjZWl2ZURhdGFGcm9tTXVsdGlwYXJ0KFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQogICAg
IGF1dG8gcmVjZWl2ZUJ5dGVzID0gYnVmZmVyLT5zaXplKCk7CiAKICAgICBpZiAocmVjZWl2ZUJ5
dGVzKSB7Ci0gICAgICAgIGNhbGxDbGllbnQoW2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oQ3Vy
bFJlcXVlc3RDbGllbnQmIGNsaWVudCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBjbGllbnQuY3Vy
bERpZFJlY2VpdmVCdWZmZXIoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgY2FsbENsaWVudChb
YnVmZmVyID0gV1RGTW92ZShidWZmZXIpXShDdXJsUmVxdWVzdCYgcmVxdWVzdCwgQ3VybFJlcXVl
c3RDbGllbnQmIGNsaWVudCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjbGllbnQuY3VybERpZFJl
Y2VpdmVCdWZmZXIocmVxdWVzdCwgV1RGTW92ZShidWZmZXIpKTsKICAgICAgICAgfSk7CiAgICAg
fQogfQpAQCAtNDIxLDggKzQxOSw4IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJh
bnNmZXIoQ1VSTGNvZGUgcmVzdWx0KQogICAgICAgICAgICAgICAgIG1fbmV0d29ya0xvYWRNZXRy
aWNzID0gKm1ldHJpY3M7CiAKICAgICAgICAgICAgIGZpbmFsaXplVHJhbnNmZXIoKTsKLSAgICAg
ICAgICAgIGNhbGxDbGllbnQoW10oQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgewotICAgICAg
ICAgICAgICAgIGNsaWVudC5jdXJsRGlkQ29tcGxldGUoKTsKKyAgICAgICAgICAgIGNhbGxDbGll
bnQoW10oQ3VybFJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsK
KyAgICAgICAgICAgICAgICBjbGllbnQuY3VybERpZENvbXBsZXRlKHJlcXVlc3QpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtNDMyLDggKzQzMCw4IEBAIHZv
aWQgQ3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNmZXIoQ1VSTGNvZGUgcmVzdWx0KQogICAg
ICAgICAgICAgcmVzb3VyY2VFcnJvci5zZXRTc2xFcnJvcnMobV9zc2xWZXJpZmllci0+c3NsRXJy
b3JzKCkpOwogCiAgICAgICAgIGZpbmFsaXplVHJhbnNmZXIoKTsKLSAgICAgICAgY2FsbENsaWVu
dChbZXJyb3IgPSByZXNvdXJjZUVycm9yLmlzb2xhdGVkQ29weSgpXShDdXJsUmVxdWVzdENsaWVu
dCYgY2xpZW50KSB7Ci0gICAgICAgICAgICBjbGllbnQuY3VybERpZEZhaWxXaXRoRXJyb3IoZXJy
b3IpOworICAgICAgICBjYWxsQ2xpZW50KFtlcnJvciA9IHJlc291cmNlRXJyb3IuaXNvbGF0ZWRD
b3B5KCldKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50KSB7
CisgICAgICAgICAgICBjbGllbnQuY3VybERpZEZhaWxXaXRoRXJyb3IocmVxdWVzdCwgZXJyb3Ip
OwogICAgICAgICB9KTsKICAgICB9CiB9CkBAIC01MzMsOCArNTMxLDggQEAgdm9pZCBDdXJsUmVx
dWVzdDo6aW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9u
c2UsIEFjdGlvbgogICAgIG1fZGlkTm90aWZ5UmVzcG9uc2UgPSB0cnVlOwogICAgIG1fYWN0aW9u
QWZ0ZXJJbnZva2UgPSBiZWhhdmlvckFmdGVySW52b2tlOwogCi0gICAgY2FsbENsaWVudChbcmVz
cG9uc2UgPSByZXNwb25zZS5pc29sYXRlZENvcHkoKV0oQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVu
dCkgewotICAgICAgICBjbGllbnQuY3VybERpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7Cisg
ICAgY2FsbENsaWVudChbcmVzcG9uc2UgPSByZXNwb25zZS5pc29sYXRlZENvcHkoKV0oQ3VybFJl
cXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKKyAgICAgICAgY2xp
ZW50LmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgIH0pOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVx
dWVzdC5oCmluZGV4IDgyZmRjODUuLjZiZDRlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCkBAIC01Niw5ICs1Niw5IEBAIHB1
YmxpYzoKICAgICAgICAgWWVzID0gdHJ1ZQogICAgIH07CiAKLSAgICBzdGF0aWMgUmVmPEN1cmxS
ZXF1ZXN0PiBjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVz
dENsaWVudCogY2xpZW50LCBTaG91bGRTdXNwZW5kIHNob3VsZFN1c3BlbmQgPSBTaG91bGRTdXNw
ZW5kOjpObywgRW5hYmxlTXVsdGlwYXJ0IGVuYWJsZU11bHRpcGFydCA9IEVuYWJsZU11bHRpcGFy
dDo6Tm8pCisgICAgc3RhdGljIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgU2hvdWxkU3VzcGVuZCBzaG91bGRTdXNwZW5kID0gU2hvdWxkU3Vz
cGVuZDo6Tm8sIEVuYWJsZU11bHRpcGFydCBlbmFibGVNdWx0aXBhcnQgPSBFbmFibGVNdWx0aXBh
cnQ6Ok5vKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3VybFJlcXVlc3Qo
cmVxdWVzdCwgY2xpZW50LCBzaG91bGRTdXNwZW5kID09IFNob3VsZFN1c3BlbmQ6OlllcywgZW5h
YmxlTXVsdGlwYXJ0ID09IEVuYWJsZU11bHRpcGFydDo6WWVzKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEN1cmxSZXF1ZXN0KHJlcXVlc3QsIHNob3VsZFN1c3BlbmQgPT0gU2hvdWxk
U3VzcGVuZDo6WWVzLCBlbmFibGVNdWx0aXBhcnQgPT0gRW5hYmxlTXVsdGlwYXJ0OjpZZXMpKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5DdXJsUmVxdWVzdCgpID0gZGVmYXVsdDsKQEAgLTk0LDcg
Kzk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgRmluaXNoVHJhbnNmZXIKICAgICB9OwogCi0gICAg
Q3VybFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ3VybFJlcXVlc3RDbGllbnQqLCBi
b29sIHNob3VsZFN1c3BlbmQsIGJvb2wgZW5hYmxlTXVsdGlwYXJ0KTsKKyAgICBDdXJsUmVxdWVz
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIHNob3VsZFN1c3BlbmQsIGJvb2wgZW5hYmxl
TXVsdGlwYXJ0KTsKIAogICAgIHZvaWQgcmV0YWluKCkgb3ZlcnJpZGUgeyByZWYoKTsgfQogICAg
IHZvaWQgcmVsZWFzZSgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQpAQCAtMTAyLDcgKzEwMiw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHN0YXJ0V2l0aEpvYk1hbmFnZXIoKTsKIAotICAgIHZvaWQg
Y2FsbENsaWVudChXVEY6OkZ1bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3RDbGllbnQmKT4pOworICAg
IHZvaWQgY2FsbENsaWVudChXVEY6OkZ1bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3QmLCBDdXJsUmVx
dWVzdENsaWVudCYpPik7CiAKICAgICAvLyBUcmFuc2ZlciBwcm9jZXNzaW5nIG9mIFJlcXVlc3Qg
Ym9keSwgUmVzcG9uc2UgaGVhZGVyL2JvZHkKICAgICAvLyBDYWxsZWQgYnkgd29ya2VyIHRocmVh
ZCBpbiBjYXNlIG9mIGFzeW5jLCBtYWluIHRocmVhZCBpbiBjYXNlIG9mIHN5bmMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3RDbGll
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENs
aWVudC5oCmluZGV4IDM5YzIwMjIuLjAzM2I4ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oCkBAIC0yOSw2
ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3VybFJlcXVlc3Q7CiBj
bGFzcyBDdXJsUmVzcG9uc2U7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwpAQCAtMzgsMTEgKzM5LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVmKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBj
dXJsRGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgY3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNoYXJlZEJ1ZmZlcj4mJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjdXJsRGlkQ29tcGxldGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cmxE
aWRGYWlsV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGN1cmxEaWRTZW5kRGF0YShDdXJsUmVxdWVzdCYsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRl
c1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShDdXJsUmVxdWVzdCYsIGNvbnN0IEN1
cmxSZXNwb25zZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIo
Q3VybFJlcXVlc3QmLCBSZWY8U2hhcmVkQnVmZmVyPiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3Vy
bERpZEZhaWxXaXRoRXJyb3IoQ3VybFJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9yJikgPSAw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVE
ZWxlZ2F0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwMmRiYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5jcHAKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
TkFWRVIgQ29ycC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRl
LmgiCisKKyNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVl
c3QuaCIKKyNpbmNsdWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25I
YW5kbGVyLmg+CisKKyNpZiBVU0UoQ1VSTCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXJs
UmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUoUmVzb3Vy
Y2VIYW5kbGUmIGhhbmRsZSkKKyAgICA6IG1faGFuZGxlKGhhbmRsZSkKK3sKKworfQorCisjaWYg
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKwordm9pZCBDdXJsUmVzb3VyY2VI
YW5kbGVEZWxlZ2F0ZTo6Y29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNw
YWNlKGJvb2wgcmVzdWx0KQoreworCit9CisKKyNlbmRpZgorCit2b2lkIEN1cmxSZXNvdXJjZUhh
bmRsZURlbGVnYXRlOjpjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworCit9CisKK3ZvaWQgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OnJl
ZigpCit7CisgICAgbV9oYW5kbGUucmVmKCk7Cit9CisKK3ZvaWQgQ3VybFJlc291cmNlSGFuZGxl
RGVsZWdhdGU6OmRlcmVmKCkKK3sKKyAgICBtX2hhbmRsZS5kZXJlZigpOworfQorCitib29sIEN1
cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MoKQoreworICAg
IHJldHVybiBoYW5kbGUoKS0+Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCk7Cit9CisKK1Jlc291cmNl
SGFuZGxlQ2xpZW50KiBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y2xpZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9oYW5kbGUuY2xpZW50KCk7Cit9CisKK1Jlc291cmNlSGFuZGxlSW50
ZXJuYWwqIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpkKCkKK3sKKyAgICByZXR1cm4gaGFu
ZGxlKCktPmdldEludGVybmFsKCk7Cit9CisKK3ZvaWQgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdh
dGU6OmN1cmxEaWRTZW5kRGF0YShDdXJsUmVxdWVzdCYgcmVxdWVzdCwgdW5zaWduZWQgbG9uZyBs
b25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50
bGVzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGllbnQoKS0+ZGlkU2VuZERhdGEoJm1f
aGFuZGxlLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Cit9CisKK3N0YXRpYyB2b2lk
IGhhbmRsZUNvb2tpZUhlYWRlcnMoY29uc3QgQ3VybFJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAg
ICBzdGF0aWMgY29uc3QgYXV0byBzZXRDb29raWVIZWFkZXIgPSAic2V0LWNvb2tpZTogIjsKKwor
ICAgIGF1dG8mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CisgICAgY29uc3QgQ29va2llSmFyQ3VybCYgY29va2ll
SmFyID0gZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKKyAgICBmb3IgKGF1
dG8gaGVhZGVyIDogcmVzcG9uc2UuaGVhZGVycykgeworICAgICAgICBpZiAoaGVhZGVyLnN0YXJ0
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzZXRDb29raWVIZWFkZXIpKSB7CisgICAgICAgICAgICBT
dHJpbmcgc2V0Q29va2llU3RyaW5nID0gaGVhZGVyLnJpZ2h0KGhlYWRlci5sZW5ndGgoKSAtIHN0
cmxlbihzZXRDb29raWVIZWFkZXIpKTsKKyAgICAgICAgICAgIGNvb2tpZUphci5zZXRDb29raWVz
RnJvbUhUVFBSZXNwb25zZShkZWZhdWx0U3RvcmFnZVNlc3Npb24sIHJlc3BvbnNlLnVybCwgc2V0
Q29va2llU3RyaW5nKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDdXJsUmVzb3VyY2VI
YW5kbGVEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVSZXNwb25zZShDdXJsUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgQ3VybFJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFkKCktPm1fZGVmZXJzTG9hZGluZyk7CisKKyAg
ICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
cmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKHJlY2VpdmVkUmVzcG9uc2UpOworICAgIG1fcmVz
cG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhyZXF1ZXN0LmdldE5ldHdvcmtM
b2FkTWV0cmljcygpKTsKKworICAgIGhhbmRsZUNvb2tpZUhlYWRlcnMocmVjZWl2ZWRSZXNwb25z
ZSk7CisKKyAgICBpZiAobV9yZXNwb25zZS5zaG91bGRSZWRpcmVjdCgpKSB7CisgICAgICAgIGhh
bmRsZSgpLT53aWxsU2VuZFJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX3Jlc3BvbnNlLmlzVW5hdXRob3JpemVkKCkpIHsKKyAgICAgICAgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UgY2hhbGxlbmdlKHJlY2VpdmVkUmVzcG9uc2UsIGQoKS0+bV9hdXRoRmFpbHVy
ZUNvdW50LCBtX3Jlc3BvbnNlLCBoYW5kbGUoKSk7CisgICAgICAgIGhhbmRsZSgpLT5kaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKTsKKyAgICAgICAgZCgpLT5tX2F1
dGhGYWlsdXJlQ291bnQrKzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Jl
c3BvbnNlLmlzTm90TW9kaWZpZWQoKSkgeworICAgICAgICBVUkwgY2FjaGVVcmwgPSBtX3Jlc3Bv
bnNlLnVybCgpOworICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsK
KworICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q2FjaGVkUmVz
cG9uc2UoY2FjaGVVcmwsIG1fcmVzcG9uc2UpKSB7CisgICAgICAgICAgICBpZiAoZCgpLT5tX2Fk
ZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgeworICAgICAgICAgICAgICAgIG1fcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldEhU
VFBTdGF0dXNUZXh0KCJPSyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVJlc3BvbnNlKCpoYW5k
bGUoKSwgbV9yZXNwb25zZSk7CisKKyAgICBoYW5kbGUoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKFJl
c291cmNlUmVzcG9uc2UobV9yZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRIYW5kbGUgPSBtYWtl
UmVmKCpoYW5kbGUoKSldIHsKKyAgICAgICAgaGFuZGxlKCktPmNvbnRpbnVlQWZ0ZXJEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKKyAgICB9KTsKK30KKwordm9pZCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZTo6Y3VybERpZFJlY2VpdmVCdWZmZXIoQ3VybFJlcXVlc3QmIHJlcXVlc3QsIFJlZjxTaGFy
ZWRCdWZmZXI+JiYgYnVmZmVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEN1
cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVEYXRhKCpoYW5kbGUoKSwgYnVm
ZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1
ZmZlcihoYW5kbGUoKSwgV1RGTW92ZShidWZmZXIpLCBidWZmZXItPnNpemUoKSk7Cit9CisKK3Zv
aWQgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVz
dCYgcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKGNh
bmNlbGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc3BvbnNl
LnNldERlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MocmVxdWVzdC5nZXROZXR3b3JrTG9hZE1l
dHJpY3MoKSk7CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGaW5pc2hM
b2FkaW5nKCpoYW5kbGUoKSk7CisgICAgY2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxl
KCkpOworfQorCit2b2lkIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkRmFpbFdp
dGhFcnJvcihDdXJsUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3Vy
Y2VFcnJvcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKGNhbmNl
bGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBDdXJsQ2FjaGVNYW5h
Z2VyOjpzaW5nbGV0b24oKS5kaWRGYWlsKG1faGFuZGxlKTsKKyAgICBjbGllbnQoKS0+ZGlkRmFp
bCgmbV9oYW5kbGUsIHJlc291cmNlRXJyb3IpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMTRkMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlc291cmNlSGFuZGxlRGVsZWdh
dGUuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkN1cmxSZXF1ZXN0
Q2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVzb3VyY2VIYW5kbGU7CitjbGFzcyBSZXNvdXJjZUhhbmRsZUNsaWVudDsK
K2NsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CisKK2NsYXNzIEN1cmxSZXNvdXJjZUhhbmRs
ZURlbGVnYXRlIDogcHVibGljIEN1cmxSZXF1ZXN0Q2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKFJlc291cmNlSGFu
ZGxlJik7CisKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQorICAgIHZv
aWQgY29udGludWVDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGJvb2wgcmVz
dWx0KTsKKyNlbmRpZgorCisgICAgdm9pZCBjb250aW51ZVdpbGxDYWNoZVJlc3BvbnNlKFJlc291
cmNlUmVzcG9uc2UmKTsKKworICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQorCisgICAgLy8gQ3VybFJlcXVlc3RDbGllbnQg
bWV0aG9kcworCisgICAgdm9pZCByZWYoKTsKKyAgICB2b2lkIGRlcmVmKCk7CisKKyAgICB2b2lk
IGN1cmxEaWRTZW5kRGF0YShDdXJsUmVxdWVzdCYsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1Nl
bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOworICAgIHZvaWQgY3Vy
bERpZFJlY2VpdmVSZXNwb25zZShDdXJsUmVxdWVzdCYsIGNvbnN0IEN1cmxSZXNwb25zZSYpOwor
ICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoQ3VybFJlcXVlc3QmLCBSZWY8U2hhcmVkQnVm
ZmVyPiYmKTsKKyAgICB2b2lkIGN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYpOworICAgIHZv
aWQgY3VybERpZEZhaWxXaXRoRXJyb3IoQ3VybFJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7CisKK3ByaXZhdGU6CisgICAgUmVzb3VyY2VIYW5kbGUmIG1faGFuZGxlOworICAgIFJlc291
cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKworICAgIGJvb2wgY2FuY2VsbGVkT3JDbGllbnRsZXNz
KCk7CisgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSgpIHsgcmV0dXJuICZtX2hhbmRsZTsgfQor
ICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQoKSBjb25zdDsKKyAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBkKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVD
dXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZUN1cmwuY3BwCmluZGV4IDIwODE1NDQuLjllY2I1ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwu
Y3BwCkBAIC0zMiwyMCArMzIsMjcgQEAKIAogI2lmIFVTRShDVVJMKQogCisjaW5jbHVkZSAiQ29v
a2llSmFyQ3VybC5oIgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCisjaW5jbHVkZSAi
Q3VybENhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVkZSAi
Q3VybFJlcXVlc3QuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiSFRUUFBh
cnNlcnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlN5bmNocm9u
b3VzTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNl
SGFuZGxlSW50ZXJuYWwoKQogewotICAgIGlmIChtX2RlbGVnYXRlKQotICAgICAgICBtX2RlbGVn
YXRlLT5yZWxlYXNlSGFuZGxlKCk7CisgICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAgICAgIG1f
Y3VybFJlcXVlc3QtPnNldENsaWVudChudWxscHRyKTsKIH0KIAogUmVzb3VyY2VIYW5kbGU6On5S
ZXNvdXJjZUhhbmRsZSgpID0gZGVmYXVsdDsKQEAgLTU2LDYgKzYzLDkgQEAgYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQoKQogCiAgICAgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOwogCisgICAg
aWYgKCFkLT5tX2RlbGVnYXRlLmdldCgpKQorICAgICAgICBkLT5tX2RlbGVnYXRlID0gc3RkOjpt
YWtlX3VuaXF1ZTxDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZT4oKnRoaXMpOworCiAgICAgLy8g
VGhlIGZyYW1lIGNvdWxkIGJlIG51bGwgaWYgdGhlIFJlc291cmNlSGFuZGxlIGlzIG5vdCBhc3Nv
Y2lhdGVkIHRvIGFueQogICAgIC8vIEZyYW1lLCBlLmcuIGlmIHdlIGFyZSBkb3dubG9hZGluZyBh
IGZpbGUuCiAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIG5vdCBudWxsIGJ1dCB0aGUgcGFnZSBpcyBu
dWxsIHRoaXMgbXVzdCBiZSBhbiBhdHRlbXB0ZWQKQEAgLTcxLDE1ICs4MSw2OCBAQCBib29sIFJl
c291cmNlSGFuZGxlOjpzdGFydCgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IGQtPm1fZGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUo
dGhpcykpOwotICAgIGQtPm1fZGVsZWdhdGUtPnN0YXJ0KCk7CisgICAgYXV0byBjcmVkZW50aWFs
ID0gZ2V0Q3JlZGVudGlhbChkLT5tX2N1cnJlbnRSZXF1ZXN0LCBmYWxzZSk7CisKKyAgICBkLT5t
X2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QoZC0+bV9jdXJyZW50UmVxdWVzdCk7Cisg
ICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3MoY3JlZGVudGlhbC5maXJzdCwgY3JlZGVu
dGlhbC5zZWNvbmQpOworICAgIGQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKCkKIHsKLSAgICBpZiAo
ZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+Y2FuY2VsKCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGQtPm1fY2FuY2VsbGVkID0gdHJ1ZTsKKworICAg
IGlmICghZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgZC0+bV9jdXJsUmVxdWVzdC0+Y2FuY2Vs
KCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbGxlZE9yQ2xpZW50bGVzcygpCit7
CisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiAhY2xpZW50KCk7Cit9CisKK1JlZjxDdXJsUmVxdWVzdD4gUmVzb3VyY2VIYW5kbGU6OmNy
ZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gQ3VybENhY2hlIDogYXBwZW5kIGFkZGl0aW9uYWwg
Y2FjaGUgaW5mb3JtYXRpb24KKyAgICBkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9
IGZhbHNlOworCisgICAgYm9vbCBoYXNDYWNoZUhlYWRlcnMgPSByZXF1ZXN0Lmh0dHBIZWFkZXJG
aWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmllZFNpbmNlKSB8fCByZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0
Y2gpOworICAgIGlmICghaGFzQ2FjaGVIZWFkZXJzKSB7CisgICAgICAgIGF1dG8mIGNhY2hlID0g
Q3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCk7CisgICAgICAgIFVSTCBjYWNoZVVybCA9IHJl
cXVlc3QudXJsKCk7CisgICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OworCisgICAgICAgIGlmIChjYWNoZS5pc0NhY2hlZChjYWNoZVVybCkpIHsKKyAgICAgICAgICAg
IGNhY2hlLmFkZENhY2hlRW50cnlDbGllbnQoY2FjaGVVcmwsIHRoaXMpOworCisgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogY2FjaGUucmVxdWVzdEhlYWRlcnMoY2FjaGVVcmwp
KQorICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkKGVudHJ5LmtleSwg
ZW50cnkudmFsdWUpOworCisgICAgICAgICAgICBkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVh
ZGVycyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDdXJsUmVxdWVzdDo6U2hvdWxk
U3VzcGVuZCBzaG91bGRTdXNwZW5kID0gZC0+bV9kZWZlcnNMb2FkaW5nID8gQ3VybFJlcXVlc3Q6
OlNob3VsZFN1c3BlbmQ6OlllcyA6IEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kOjpObzsKKyAg
ICBhdXRvIGN1cmxSZXF1ZXN0ID0gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0LCBzaG91bGRT
dXNwZW5kLCBDdXJsUmVxdWVzdDo6RW5hYmxlTXVsdGlwYXJ0OjpZZXMpOworICAgIAorICAgIGN1
cmxSZXF1ZXN0LT5zZXRDbGllbnQoZGVsZWdhdGUoKSk7CisKKyAgICByZXR1cm4gY3VybFJlcXVl
c3Q7Cit9CisKK0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKiBSZXNvdXJjZUhhbmRsZTo6ZGVs
ZWdhdGUoKQoreworICAgIEFTU0VSVChkLT5tX2RlbGVnYXRlKTsKKyAgICByZXR1cm4gZC0+bV9k
ZWxlZ2F0ZS5nZXQoKTsKIH0KIAogI2lmIE9TKFdJTkRPV1MpCkBAIC0xMTUsOCArMTc4LDE4IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVy
cykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKGQtPm1fZGVsZWdh
dGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKyAg
ICBpZiAoZGVmZXJzID09IGQtPm1fZGVmZXJzTG9hZGluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZC0+bV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOworCisgICAgaWYgKCFkLT5tX2N1cmxSZXF1
ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZC0+bV9kZWZlcnNMb2FkaW5nKQorICAg
ICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdXNwZW5kKCk7CisgICAgZWxzZQorICAgICAgICBkLT5t
X2N1cmxSZXF1ZXN0LT5yZXN1bWUoKTsKIH0KIAogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQpAQCAtMTM3LDkgKzIxMCw4IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsCiAgICAgICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0
YXR1c0NvZGUoKSA9PSA0MDEpCiAgICAgICAgICAgICB1cmxUb1N0b3JlID0gY2hhbGxlbmdlLmZh
aWx1cmVSZXNwb25zZSgpLnVybCgpOwogICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVs
dENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlvbiwgY3JlZGVudGlhbCwgY2hhbGxlbmdl
LnByb3RlY3Rpb25TcGFjZSgpLCB1cmxUb1N0b3JlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChk
LT5tX2RlbGVnYXRlKQotICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRp
b24oY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisKKyAgICAgICAg
cmVzdGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjcmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlh
bC5wYXNzd29yZCgpKTsKIAogICAgICAgICBkLT5tX3VzZXIgPSBTdHJpbmcoKTsKICAgICAgICAg
ZC0+bV9wYXNzID0gU3RyaW5nKCk7CkBAIC0xNjQsOCArMjM2LDcgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGwKICAgICAgICAgICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRD
cmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5w
cm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpKTsKICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAg
ICAgICAgICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVu
dGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisgICAgICAgICAgICAgICAgcmVz
dGFydFJlcXVlc3RXaXRoQ3JlZGVudGlhbChjcmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5w
YXNzd29yZCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTIwMCw4ICsyNzEsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENy
ZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdh
dGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3
b3JkKCkpOworICAgIHJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY3JlZGVudGlhbC51c2Vy
KCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAKICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7
CiB9CkBAIC0yMTUsMTEgKzI4NSw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVx
dWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhCiAKICAgICBj
bGVhckF1dGhlbnRpY2F0aW9uKCk7CiAKLSAgICBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VS
ZXNwb25zZShkLT5tX3Jlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0gewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAgIGlmIChk
LT5tX2RlbGVnYXRlKQotICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+Y29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UoKTsKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShk
ZWxlZ2F0ZSgpLT5yZXNwb25zZSgpKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKV0geworICAgICAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAg
fSk7CiB9CiAKQEAgLTI0NiwxOCArMzEzLDc4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2Vp
dmVkQ2hhbGxlbmdlUmVqZWN0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBS
ZXNvdXJjZUhhbmRsZTo6Z2V0Q3JlZGVudGlhbChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJv
b2wgcmVkaXJlY3QpCit7CisgICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2
ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1M
SHR0cFJlcXVlc3Qub3BlbigpLgorICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hl
UGFydGl0aW9uKCk7CisKKyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgewor
ICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0
IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAg
QmFzaWMgYXV0aGVudGljYXRpb24sIAorICAgICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUg
Y3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCisgICAgICAg
ICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRD
cmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOworICAgICAg
ICB9IGVsc2UgaWYgKCFyZWRpcmVjdCkgeworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxy
ZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQg
Y3JlZGVudGlhbHMKKyAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KKyAg
ICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRp
YWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQKKyAgICAgICAgICAgIC8v
IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCkuCisgICAgICAgICAgICBD
cmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlv
biwgQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNl
Tm9uZSksIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHVz
ZXIgPSBkLT5tX3VzZXI7CisgICAgU3RyaW5nIHBhc3N3b3JkID0gZC0+bV9wYXNzOworCisgICAg
aWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICB1c2VyID0g
ZC0+bV9pbml0aWFsQ3JlZGVudGlhbC51c2VyKCk7CisgICAgICAgIHBhc3N3b3JkID0gZC0+bV9p
bml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpOworICAgIH0KKworICAgIGlmICh1c2VyLmlzRW1w
dHkoKSAmJiBwYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8U3Ry
aW5nLCBTdHJpbmc+KCIiLCAiIik7CisKKyAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPih1c2VyLCBwYXNzd29yZCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRS
ZXF1ZXN0V2l0aENyZWRlbnRpYWwoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBh
c3N3b3JkKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIWQtPm1f
Y3VybFJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGlzU3luY1JlcXVl
c3QgPSBkLT5tX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7CisgICAgZC0+bV9jdXJsUmVx
dWVzdC0+Y2FuY2VsKCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIp
OworCisgICAgZC0+bV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1fY3VycmVu
dFJlcXVlc3QpOworICAgIGQtPm1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKHVzZXIsIHBhc3N3
b3JkKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKK30KKwog
dm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCisgICAgYXV0byBsb2NhbFJlcXVlc3QgPSByZXF1ZXN0OwogICAgIFN5
bmNocm9ub3VzTG9hZGVyQ2xpZW50IGNsaWVudDsKICAgICBib29sIGRlZmVyc0xvYWRpbmcgPSBm
YWxzZTsKICAgICBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9IHRydWU7CiAgICAgYm9vbCBzaG91
bGRDb250ZW50RW5jb2RpbmdTbmlmZiA9IHRydWU7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxl
PiBoYW5kbGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUoY29udGV4dCwgcmVxdWVzdCwg
JmNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBzaG91bGRDb250ZW50
RW5jb2RpbmdTbmlmZikpOwogCi0gICAgaGFuZGxlLT5kLT5tX2RlbGVnYXRlID0gYWRvcHRSZWYo
bmV3IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKGhhbmRsZS5nZXQoKSkpOwotICAgIGhhbmRs
ZS0+ZC0+bV9kZWxlZ2F0ZS0+ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOworICAgIGlmIChsb2Nh
bFJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0RhdGEoKSkgeworICAgICAgICBoYW5kbGUtPmhhbmRs
ZURhdGFVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIGRlZmVyc0xv
YWRpbmcgaXMgdHJ1ZSBhbmQgd2UgY2FsbCBjdXJsX2Vhc3lfcGVyZm9ybQorICAgIC8vIG9uIGEg
cGF1c2VkIGhhbmRsZSwgbGliY1VSTCB3b3VsZCBkbyB0aGUgdHJhbnNmZXIgYW55d2F5CisgICAg
Ly8gYW5kIHdlIHdvdWxkIGFzc2VydCBzbyBmb3JjZSBkZWZlcnNMb2FkaW5nIHRvIGJlIGZhbHNl
LgorICAgIGhhbmRsZS0+ZC0+bV9kZWZlcnNMb2FkaW5nID0gZmFsc2U7CisKKyAgICBoYW5kbGUt
PmQtPm1fY3VybFJlcXVlc3QgPSBoYW5kbGUtPmNyZWF0ZUN1cmxSZXF1ZXN0KGxvY2FsUmVxdWVz
dCk7CisgICAgaGFuZGxlLT5kLT5tX2N1cmxSZXF1ZXN0LT5zdGFydCh0cnVlKTsKIAogICAgIGVy
cm9yID0gY2xpZW50LmVycm9yKCk7CiAgICAgZGF0YS5zd2FwKGNsaWVudC5tdXRhYmxlRGF0YSgp
KTsKQEAgLTI2OCw4ICszOTUsMTczIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtQ29u
dGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAotICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVn
YXRlLT5wbGF0Zm9ybUNvbnRpbnVlU3luY2hyb25vdXNEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAg
ICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6OmNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtaWdo
dCBjYW5jZWwgdGhlIGxvYWQuCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpIHx8ICFk
LT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0
LT5jb21wbGV0ZURpZFJlY2VpdmVSZXNwb25zZSgpOworfQorCitib29sIFJlc291cmNlSGFuZGxl
OjpzaG91bGRSZWRpcmVjdEFzR0VUKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9v
bCBjcm9zc09yaWdpbikKK3sKKyAgICBpZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkdFVCIg
fHwgcmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkhFQUQiKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLmlzU2Vl
T3RoZXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGRlbGVnYXRlKCktPnJl
c3BvbnNlKCkuaXNNb3ZlZFBlcm1hbmVudGx5KCkgfHwgZGVsZWdhdGUoKS0+cmVzcG9uc2UoKS5p
c0ZvdW5kKCkpICYmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjcm9zc09yaWdpbiAmJiAocmVxdWVzdC5odHRwTWV0aG9k
KCkgPT0gIkRFTEVURSIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhSZWRpcmVj
dHMgPSAyMDsKKworICAgIGlmIChkLT5tX3JlZGlyZWN0Q291bnQrKyA+IG1heFJlZGlyZWN0cykg
eworICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yOjpodHRwRXJy
b3IoQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTLCBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLnVybCgp
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWxl
Z2F0ZSgpLT5yZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRp
b24pOworICAgIFVSTCBuZXdVUkwgPSBVUkwoZGVsZWdhdGUoKS0+cmVzcG9uc2UoKS51cmwoKSwg
bG9jYXRpb24pOworICAgIGJvb2wgY3Jvc3NPcmlnaW4gPSAhcHJvdG9jb2xIb3N0QW5kUG9ydEFy
ZUVxdWFsKGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLCBuZXdVUkwpOworCisgICAgUmVzb3VyY2VS
ZXF1ZXN0IG5ld1JlcXVlc3QgPSBkLT5tX2ZpcnN0UmVxdWVzdDsKKyAgICBuZXdSZXF1ZXN0LnNl
dFVSTChuZXdVUkwpOworCisgICAgaWYgKHNob3VsZFJlZGlyZWN0QXNHRVQobmV3UmVxdWVzdCwg
Y3Jvc3NPcmlnaW4pKSB7CisgICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7
CisgICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUEJvZHkobnVsbHB0cik7CisgICAgICAgIG5ld1Jl
cXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICB9CisKKyAgICAvLyBTaG91bGQgbm90
IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBu
b24tc2VjdXJlIG9uZS4KKyAgICBpZiAoIW5ld1VSTC5wcm90b2NvbElzKCJodHRwcyIpICYmIHBy
b3RvY29sSXMobmV3UmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYgY29udGV4dCgp
LT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpCisgICAgICAgIG5l
d1JlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKKworICAgIGQtPm1fdXNlciA9IG5ld1VSTC51
c2VyKCk7CisgICAgZC0+bV9wYXNzID0gbmV3VVJMLnBhc3MoKTsKKyAgICBuZXdSZXF1ZXN0LnJl
bW92ZUNyZWRlbnRpYWxzKCk7CisKKyAgICBpZiAoY3Jvc3NPcmlnaW4pIHsKKyAgICAgICAgLy8g
SWYgdGhlIG5ldHdvcmsgbGF5ZXIgY2FycmllcyBvdmVyIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMg
ZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdAorICAgICAgICAvLyBpbiBhIGNyb3NzLW9yaWdpbiBy
ZWRpcmVjdCwgd2Ugd2FudCB0byBjbGVhciB0aG9zZSBoZWFkZXJzIGhlcmUuIAorICAgICAgICBu
ZXdSZXF1ZXN0LmNsZWFySFRUUEF1dGhvcml6YXRpb24oKTsKKyAgICAgICAgbmV3UmVxdWVzdC5j
bGVhckhUVFBPcmlnaW4oKTsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
Q29weSA9IGRlbGVnYXRlKCktPnJlc3BvbnNlKCk7CisgICAgY2xpZW50KCktPndpbGxTZW5kUmVx
dWVzdEFzeW5jKHRoaXMsIFdURk1vdmUobmV3UmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2VDb3B5
KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFJlc291cmNlUmVxdWVz
dCYmIHJlcXVlc3QpIHsKKyAgICAgICAgY29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChXVEZN
b3ZlKHJlcXVlc3QpKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGlu
dWVBZnRlcldpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyB3aWxsU2VuZFJlcXVlc3QgbWlnaHQg
Y2FuY2VsIHRoZSBsb2FkLgorICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSB8fCAhZC0+
bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZC0+bV9jdXJyZW50UmVxdWVz
dCA9IFdURk1vdmUocmVxdWVzdCk7CisKKyAgICBib29sIGlzU3luY1JlcXVlc3QgPSBkLT5tX2N1
cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+Y2FuY2Vs
KCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIpOworCisgICAgZC0+
bV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1fY3VycmVudFJlcXVlc3QpOwor
CisgICAgaWYgKHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChkLT5tX2N1cnJlbnRSZXF1ZXN0
LnVybCgpLCBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLnVybCgpKSkgeworICAgICAgICBhdXRvIGNy
ZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKGQtPm1fY3VycmVudFJlcXVlc3QsIHRydWUpOworICAg
ICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50aWFsLmZpcnN0LCBjcmVk
ZW50aWFsLnNlY29uZCk7CisgICAgfQorCisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c3RhcnQoaXNT
eW5jUmVxdWVzdCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQor
eworICAgIEFTU0VSVChkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0YSgpKTsK
KyAgICBTdHJpbmcgdXJsID0gZC0+bV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCk7CisKKyAg
ICBBU1NFUlQoY2xpZW50KCkpOworCisgICAgYXV0byBpbmRleCA9IHVybC5maW5kKCcsJyk7Cisg
ICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgIGNsaWVudCgpLT5jYW5ub3RTaG93
VVJMKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nIG1lZGlhVHlw
ZSA9IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKKyAgICBTdHJpbmcgZGF0YSA9IHVybC5z
dWJzdHJpbmcoaW5kZXggKyAxKTsKKyAgICBhdXRvIG9yaWdpbmFsU2l6ZSA9IGRhdGEubGVuZ3Ro
KCk7CisKKyAgICBib29sIGJhc2U2NCA9IG1lZGlhVHlwZS5lbmRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKCI7YmFzZTY0Iik7CisgICAgaWYgKGJhc2U2NCkKKyAgICAgICAgbWVkaWFUeXBlID0gbWVk
aWFUeXBlLmxlZnQobWVkaWFUeXBlLmxlbmd0aCgpIC0gNyk7CisKKyAgICBpZiAobWVkaWFUeXBl
LmlzRW1wdHkoKSkKKyAgICAgICAgbWVkaWFUeXBlID0gInRleHQvcGxhaW4iOworCisgICAgU3Ry
aW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtZWRpYVR5cGUpOwor
ICAgIFN0cmluZyBjaGFyc2V0ID0gZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKG1lZGlhVHlw
ZSk7CisKKyAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCisgICAgICAgIGNoYXJzZXQgPSAiVVMt
QVNDSUkiOworCisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICByZXNwb25zZS5z
ZXRNaW1lVHlwZShtaW1lVHlwZSk7CisgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShj
aGFyc2V0KTsKKyAgICByZXNwb25zZS5zZXRVUkwoZC0+bV9maXJzdFJlcXVlc3QudXJsKCkpOwor
CisgICAgaWYgKGJhc2U2NCkgeworICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzKGRhdGEpOworICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgICAgIGNv
bnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
Ly8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRl
ZC4KKyAgICAgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0
OworICAgICAgICAgICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNw
YWNlc0FuZE5ld0xpbmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICBjbGll
bnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShvdXQuZGF0
YSgpLCBvdXQuc2l6ZSgpKSwgb3JpZ2luYWxTaXplKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsKKyAgICAgICAgZGF0YSA9
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhLCBlbmNvZGluZyk7CisgICAgICAgIGRpZFJl
Y2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0geworICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNw
b25zZSgpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWln
aHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgorICAgICAgICBpZiAoY2xpZW50KCkp
IHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwg
VW5lbmNvZGFibGVIYW5kbGluZzo6VVJMRW5jb2RlZEVudGl0aWVzKTsKKyAgICAgICAgICAgIGlm
IChlbmNvZGVkRGF0YS5zaXplKCkpCisgICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2Vp
dmVCdWZmZXIodGhpcywgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShlbmNvZGVkRGF0YSkp
LCBvcmlnaW5hbFNpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNsaWVudCgpKQor
ICAgICAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYzQ0NjUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDUyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29w
eXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IE5BVkVSIENvcnAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZS5oIgotCi0jaWYgVVNFKENVUkwpCi0KLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgotI2luY2x1ZGUgIkNvb2tpZUphckN1cmwuaCIKLSNpbmNsdWRlICJDcmVkZW50
aWFsU3RvcmFnZS5oIgotI2luY2x1ZGUgIkN1cmxDYWNoZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJD
dXJsUmVxdWVzdC5oIgotI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2lu
Y2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2
NC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
OjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotICAg
IDogbV9oYW5kbGUoaGFuZGxlKQotICAgICwgbV9maXJzdFJlcXVlc3QoaGFuZGxlLT5maXJzdFJl
cXVlc3QoKS5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fY3VycmVudFJlcXVlc3QoaGFuZGxlLT5m
aXJzdFJlcXVlc3QoKS5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoaGFuZGxlLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKQotICAgICwgbV91
c2VyKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV91c2VyLmlzb2xhdGVkQ29weSgpKQotICAgICwg
bV9wYXNzKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9wYXNzLmlzb2xhdGVkQ29weSgpKQotICAg
ICwgbV9pbml0aWFsQ3JlZGVudGlhbChoYW5kbGUtPmdldEludGVybmFsKCktPm1faW5pdGlhbENy
ZWRlbnRpYWwpCi0gICAgLCBtX2RlZmVyc0xvYWRpbmcoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5t
X2RlZmVyc0xvYWRpbmcpCi17Ci0KLX0KLQotUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6On5S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZSgpCi17Ci0gICAgaWYgKG1fY3VybFJlcXVlc3QpCi0g
ICAgICAgIG1fY3VybFJlcXVlc3QtPnNldENsaWVudChudWxscHRyKTsKLX0KLQotYm9vbCBSZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFzSGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ISFtX2hhbmRsZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cmVsZWFz
ZUhhbmRsZSgpCi17Ci0gICAgbV9oYW5kbGUgPSBudWxscHRyOwotfQotCi12b2lkIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpzdGFydCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIGF1dG8gY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWwobV9jdXJyZW50UmVxdWVz
dCwgZmFsc2UpOwotCi0gICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1fY3Vy
cmVudFJlcXVlc3QpOwotICAgIG1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRlbnRpYWwu
Zmlyc3QsIGNyZWRlbnRpYWwuc2Vjb25kKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zdGFydCgpOwot
fQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjYW5jZWwoKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICByZWxlYXNlSGFuZGxlKCk7Ci0KLSAgICBpZiAo
IW1fY3VybFJlcXVlc3QpCi0gICAgICAgIG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVm
ZXJzKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoZGVmZXJzID09
IG1fZGVmZXJzTG9hZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kZWZlcnNMb2FkaW5n
ID0gZGVmZXJzOwotCi0gICAgaWYgKCFtX2N1cmxSZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9kZWZlcnNMb2FkaW5nKQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zdXNwZW5k
KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5yZXN1bWUoKTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0QXV0aGVudGljYXRpb24oY29uc3QgU3Ry
aW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBpZiAoIW1fY3VybFJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGJvb2wgaXNTeW5jUmVxdWVzdCA9IG1fY3VybFJlcXVlc3QtPmlzU3luY1JlcXVlc3QoKTsK
LSAgICBtX2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGll
bnQobnVsbHB0cik7Ci0KLSAgICBtX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9j
dXJyZW50UmVxdWVzdCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3ModXNlciwgcGFz
c3dvcmQpOwotICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KGlzU3luY1JlcXVlc3QpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkK
LXsKLSAgICBpZiAobV9jdXJyZW50UmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0YSgpKSB7Ci0g
ICAgICAgIGhhbmRsZURhdGFVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IElmIGRlZmVyc0xvYWRpbmcgaXMgdHJ1ZSBhbmQgd2UgY2FsbCBjdXJsX2Vhc3lfcGVyZm9ybQot
ICAgIC8vIG9uIGEgcGF1c2VkIGhhbmRsZSwgbGliY1VSTCB3b3VsZCBkbyB0aGUgdHJhbnNmZXJ0
IGFueXdheQotICAgIC8vIGFuZCB3ZSB3b3VsZCBhc3NlcnQgc28gZm9yY2UgZGVmZXJzTG9hZGlu
ZyB0byBiZSBmYWxzZS4KLSAgICBtX2RlZmVyc0xvYWRpbmcgPSBmYWxzZTsKLQotICAgIG1fY3Vy
bFJlcXVlc3QgPSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLSAgICBtX2N1
cmxSZXF1ZXN0LT5zdGFydCh0cnVlKTsKLX0KLQotUmVmPEN1cmxSZXF1ZXN0PiBSZXNvdXJjZUhh
bmRsZUN1cmxEZWxlZ2F0ZTo6Y3JlYXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBDdXJsQ2FjaGUg
OiBhcHBlbmQgYWRkaXRpb25hbCBjYWNoZSBpbmZvcm1hdGlvbgotICAgIG1fYWRkZWRDYWNoZVZh
bGlkYXRpb25IZWFkZXJzID0gZmFsc2U7Ci0KLSAgICBib29sIGhhc0NhY2hlSGVhZGVycyA9IHJl
cXVlc3QuaHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lOjpJZk1vZGlm
aWVkU2luY2UpIHx8IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5zKEhUVFBIZWFk
ZXJOYW1lOjpJZk5vbmVNYXRjaCk7Ci0gICAgaWYgKCFoYXNDYWNoZUhlYWRlcnMpIHsKLSAgICAg
ICAgYXV0byYgY2FjaGUgPSBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKTsKLSAgICAgICAg
VVJMIGNhY2hlVXJsID0gcmVxdWVzdC51cmwoKTsKLSAgICAgICAgY2FjaGVVcmwucmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgaWYgKGNhY2hlLmlzQ2FjaGVkKGNhY2hlVXJs
KSkgewotICAgICAgICAgICAgY2FjaGUuYWRkQ2FjaGVFbnRyeUNsaWVudChjYWNoZVVybCwgbV9o
YW5kbGUpOwotCi0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogY2FjaGUucmVx
dWVzdEhlYWRlcnMoY2FjaGVVcmwpKQotICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhl
YWRlckZpZWxkKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOwotCi0gICAgICAgICAgICBtX2FkZGVk
Q2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBD
dXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZCBzaG91bGRTdXNwZW5kID0gbV9kZWZlcnNMb2FkaW5n
ID8gQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQ6OlllcyA6IEN1cmxSZXF1ZXN0OjpTaG91bGRT
dXNwZW5kOjpObzsKLSAgICByZXR1cm4gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0LCB0aGlz
LCBzaG91bGRTdXNwZW5kLCBDdXJsUmVxdWVzdDo6RW5hYmxlTXVsdGlwYXJ0OjpZZXMpOwotfQot
Ci1ib29sIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjYW5jZWxsZWRPckNsaWVudGxlc3Mo
KQotewotICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0
dXJuICFtX2hhbmRsZS0+Y2xpZW50KCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGU6OmN1cmxEaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkU2VuZERhdGEobV9oYW5kbGUsIGJ5
dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlQ29v
a2llSGVhZGVycyhjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHN0YXRpYyBj
b25zdCBhdXRvIHNldENvb2tpZUhlYWRlciA9ICJzZXQtY29va2llOiAiOwotCi0gICAgYXV0byYg
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3Rv
cmFnZVNlc3Npb24oKTsKLSAgICBjb25zdCBDb29raWVKYXJDdXJsJiBjb29raWVKYXIgPSBkZWZh
dWx0U3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFnZSgpOwotICAgIGZvciAoYXV0byBoZWFkZXIg
OiByZXNwb25zZS5oZWFkZXJzKSB7Ci0gICAgICAgIGlmIChoZWFkZXIuc3RhcnRzV2l0aElnbm9y
aW5nQVNDSUlDYXNlKHNldENvb2tpZUhlYWRlcikpIHsKLSAgICAgICAgICAgIFN0cmluZyBzZXRD
b29raWVTdHJpbmcgPSBoZWFkZXIucmlnaHQoaGVhZGVyLmxlbmd0aCgpIC0gc3RybGVuKHNldENv
b2tpZUhlYWRlcikpOwotICAgICAgICAgICAgY29va2llSmFyLnNldENvb2tpZXNGcm9tSFRUUFJl
c3BvbnNlKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiwgcmVzcG9uc2UudXJsLCBzZXRDb29raWVTdHJp
bmcpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVjZWl2ZWRS
ZXNwb25zZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9k
ZWZlcnNMb2FkaW5nKTsKLQotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2UgPSBS
ZXNvdXJjZVJlc3BvbnNlKHJlY2VpdmVkUmVzcG9uc2UpOwotCi0gICAgaWYgKG1fY3VybFJlcXVl
c3QpCi0gICAgICAgIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlLnNldERlcHJl
Y2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MobV9jdXJsUmVxdWVzdC0+Z2V0TmV0d29ya0xvYWRNZXRy
aWNzKCkpOwotCi0gICAgaGFuZGxlQ29va2llSGVhZGVycyhyZWNlaXZlZFJlc3BvbnNlKTsKLQot
ICAgIGlmIChyZXNwb25zZSgpLnNob3VsZFJlZGlyZWN0KCkpIHsKLSAgICAgICAgd2lsbFNlbmRS
ZXF1ZXN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocmVzcG9uc2UoKS5p
c1VuYXV0aG9yaXplZCgpKSB7Ci0gICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxs
ZW5nZShyZWNlaXZlZFJlc3BvbnNlLCBtX2F1dGhGYWlsdXJlQ291bnQsIHJlc3BvbnNlKCksIG1f
aGFuZGxlKTsKLSAgICAgICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShjaGFsbGVuZ2UpOwotICAgICAgICBtX2F1dGhGYWlsdXJlQ291bnQrKzsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAg
aWYgKHJlc3BvbnNlKCkuaXNOb3RNb2RpZmllZCgpKSB7Ci0gICAgICAgICAgICBVUkwgY2FjaGVV
cmwgPSBtX2N1cnJlbnRSZXF1ZXN0LnVybCgpOwotICAgICAgICAgICAgY2FjaGVVcmwucmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChDdXJsQ2FjaGVNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5nZXRDYWNoZWRSZXNwb25zZShjYWNoZVVybCwgcmVzcG9uc2UoKSkpIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVzcG9uc2UoKS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOwotICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZSgpLnNldEhUVFBTdGF0dXNUZXh0KCJPSyIpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEN1cmxD
YWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVSZXNwb25zZSgqbV9oYW5kbGUsIHJl
c3BvbnNlKCkpOwotCi0gICAgICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKm1faGFu
ZGxlKTsKLSAgICAgICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZVJlc3Bv
bnNlKHJlc3BvbnNlKCkpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7
Ci0gICAgICAgICAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgICAg
IH0pOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERp
ZFJlY2VpdmVCdWZmZXIoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVj
ZWl2ZURhdGEoKm1faGFuZGxlLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwotICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgV1RGTW92ZShi
dWZmZXIpLCBidWZmZXItPnNpemUoKSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGU6OmN1cmxEaWRDb21wbGV0ZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LQotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fY3VybFJlcXVlc3QpCi0gICAgICAgIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5t
X3Jlc3BvbnNlLnNldERlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MobV9jdXJsUmVxdWVzdC0+
Z2V0TmV0d29ya0xvYWRNZXRyaWNzKCkpOwotCi0gICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkg
ewotICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGaW5pc2hMb2FkaW5n
KCptX2hhbmRsZSk7Ci0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGlu
ZyhtX2hhbmRsZSk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
OjpjdXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9y
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoY2FuY2VsbGVkT3JD
bGllbnRsZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNp
bmdsZXRvbigpLmRpZEZhaWwoKm1faGFuZGxlKTsKLSAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRp
ZEZhaWwobV9oYW5kbGUsIHJlc291cmNlRXJyb3IpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2Uo
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cGxhdGZvcm1Db250aW51
ZVN5bmNocm9ub3VzRGlkUmVjZWl2ZVJlc3BvbnNlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotCi0gICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJl
c3BvbnNlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gY29udGlu
dWVEaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2FuY2VsIHRoZSBsb2FkLgotICAgIGlmIChjYW5j
ZWxsZWRPckNsaWVudGxlc3MoKSB8fCAhbV9jdXJsUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jdXJsUmVxdWVzdC0+Y29tcGxldGVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLX0KLQot
Ym9vbCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2hvdWxkUmVkaXJlY3RBc0dFVChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgY3Jvc3NPcmlnaW4pCi17Ci0gICAgaWYg
KHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJHRVQiIHx8IHJlcXVlc3QuaHR0cE1ldGhvZCgpID09
ICJIRUFEIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgp
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAocmVzcG9uc2UoKS5pc1NlZU90aGVyKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKChyZXNwb25zZSgpLmlzTW92ZWRQZXJtYW5lbnRseSgpIHx8IHJlc3BvbnNlKCkuaXNGb3Vu
ZCgpKSAmJiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoY3Jvc3NPcmlnaW4gJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09
ICJERUxFVEUiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCgpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
UmVkaXJlY3RzID0gMjA7Ci0KLSAgICBpZiAobV9yZWRpcmVjdENvdW50KysgPiBtYXhSZWRpcmVj
dHMpIHsKLSAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKG1faGFuZGxlLCBSZXNv
dXJjZUVycm9yOjpodHRwRXJyb3IoQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTLCByZXNwb25zZSgp
LnVybCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbG9jYXRpb24g
PSByZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pOwot
ICAgIFVSTCBuZXdVUkwgPSBVUkwobV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2Uu
dXJsKCksIGxvY2F0aW9uKTsKLSAgICBib29sIGNyb3NzT3JpZ2luID0gIXByb3RvY29sSG9zdEFu
ZFBvcnRBcmVFcXVhbChtX2ZpcnN0UmVxdWVzdC51cmwoKSwgbmV3VVJMKTsKLQotICAgIFJlc291
cmNlUmVxdWVzdCBuZXdSZXF1ZXN0ID0gbV9maXJzdFJlcXVlc3Q7Ci0gICAgbmV3UmVxdWVzdC5z
ZXRVUkwobmV3VVJMKTsKLQotICAgIGlmIChzaG91bGRSZWRpcmVjdEFzR0VUKG5ld1JlcXVlc3Qs
IGNyb3NzT3JpZ2luKSkgewotICAgICAgICBuZXdSZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIp
OwotICAgICAgICBuZXdSZXF1ZXN0LnNldEhUVFBCb2R5KG51bGxwdHIpOwotICAgICAgICBuZXdS
ZXF1ZXN0LmNsZWFySFRUUENvbnRlbnRUeXBlKCk7Ci0gICAgfQotCi0gICAgLy8gU2hvdWxkIG5v
dCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVzb3VyY2UgdG8g
bm9uLXNlY3VyZSBvbmUuCi0gICAgaWYgKCFuZXdVUkwucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBw
cm90b2NvbElzKG5ld1JlcXVlc3QuaHR0cFJlZmVycmVyKCksICJodHRwcyIpICYmIG1faGFuZGxl
LT5jb250ZXh0KCktPnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkK
LSAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOwotCi0gICAgbV91c2VyID0g
bmV3VVJMLnVzZXIoKTsKLSAgICBtX3Bhc3MgPSBuZXdVUkwucGFzcygpOwotICAgIG5ld1JlcXVl
c3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKLQotICAgIGlmIChjcm9zc09yaWdpbikgewotICAgICAg
ICAvLyBJZiB0aGUgbmV0d29yayBsYXllciBjYXJyaWVzIG92ZXIgYXV0aGVudGljYXRpb24gaGVh
ZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0Ci0gICAgICAgIC8vIGluIGEgY3Jvc3Mtb3Jp
Z2luIHJlZGlyZWN0LCB3ZSB3YW50IHRvIGNsZWFyIHRob3NlIGhlYWRlcnMgaGVyZS4gCi0gICAg
ICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQXV0aG9yaXphdGlvbigpOwotICAgICAgICBuZXdSZXF1
ZXN0LmNsZWFySFRUUE9yaWdpbigpOwotICAgIH0KLQotICAgIFJlc291cmNlUmVzcG9uc2UgcmVz
cG9uc2VDb3B5ID0gcmVzcG9uc2UoKTsKLSAgICBtX2hhbmRsZS0+Y2xpZW50KCktPndpbGxTZW5k
UmVxdWVzdEFzeW5jKG1faGFuZGxlLCBXVEZNb3ZlKG5ld1JlcXVlc3QpLCBXVEZNb3ZlKHJlc3Bv
bnNlQ29weSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChSZXNvdXJj
ZVJlcXVlc3QmJiByZXF1ZXN0KSB7Ci0gICAgICAgIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdU
Rk1vdmUocmVxdWVzdCkpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBjb250aW51ZUFmdGVyV2ls
bFNlbmRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVz
dCYmIHJlcXVlc3QpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIHdp
bGxTZW5kUmVxdWVzdCBtaWdodCBjYW5jZWwgdGhlIGxvYWQuCi0gICAgaWYgKGNhbmNlbGxlZE9y
Q2xpZW50bGVzcygpIHx8ICFtX2N1cmxSZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2N1cnJlbnRSZXF1ZXN0ID0gV1RGTW92ZShyZXF1ZXN0KTsKLQotICAgIGJvb2wgaXNTeW5jUmVx
dWVzdCA9IG1fY3VybFJlcXVlc3QtPmlzU3luY1JlcXVlc3QoKTsKLSAgICBtX2N1cmxSZXF1ZXN0
LT5jYW5jZWwoKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7Ci0KLSAg
ICBtX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7Ci0K
LSAgICBpZiAocHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG1fY3VycmVudFJlcXVlc3QudXJs
KCksIHJlc3BvbnNlKCkudXJsKCkpKSB7Ci0gICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IGdldENy
ZWRlbnRpYWwobV9jdXJyZW50UmVxdWVzdCwgdHJ1ZSk7Ci0gICAgICAgIG1fY3VybFJlcXVlc3Qt
PnNldFVzZXJQYXNzKGNyZWRlbnRpYWwuZmlyc3QsIGNyZWRlbnRpYWwuc2Vjb25kKTsKLSAgICB9
Ci0KLSAgICBtX2N1cmxSZXF1ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKLX0KLQotUmVzb3Vy
Y2VSZXNwb25zZSYgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnJlc3BvbnNlKCkKLXsKLSAg
ICByZXR1cm4gbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2U7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRsZURhdGFVUkwoKQotewotICAgIEFTU0VS
VChtX2ZpcnN0UmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0YSgpKTsKLSAgICBTdHJpbmcgdXJs
ID0gbV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCk7Ci0KLSAgICBBU1NFUlQobV9oYW5kbGUt
PmNsaWVudCgpKTsKLQotICAgIGF1dG8gaW5kZXggPSB1cmwuZmluZCgnLCcpOwotICAgIGlmIChp
bmRleCA9PSBub3RGb3VuZCkgewotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmNhbm5vdFNo
b3dVUkwobV9oYW5kbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIG1l
ZGlhVHlwZSA9IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKLSAgICBTdHJpbmcgZGF0YSA9
IHVybC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICBhdXRvIG9yaWdpbmFsU2l6ZSA9IGRhdGEu
bGVuZ3RoKCk7Ci0KLSAgICBib29sIGJhc2U2NCA9IG1lZGlhVHlwZS5lbmRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKCI7YmFzZTY0Iik7Ci0gICAgaWYgKGJhc2U2NCkKLSAgICAgICAgbWVkaWFUeXBl
ID0gbWVkaWFUeXBlLmxlZnQobWVkaWFUeXBlLmxlbmd0aCgpIC0gNyk7Ci0KLSAgICBpZiAobWVk
aWFUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgbWVkaWFUeXBlID0gInRleHQvcGxhaW4iOwotCi0g
ICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtZWRpYVR5
cGUpOwotICAgIFN0cmluZyBjaGFyc2V0ID0gZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKG1l
ZGlhVHlwZSk7Ci0KLSAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCi0gICAgICAgIGNoYXJzZXQg
PSAiVVMtQVNDSUkiOwotCi0gICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKLSAgICByZXNw
b25zZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7Ci0gICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5n
TmFtZShjaGFyc2V0KTsKLSAgICByZXNwb25zZS5zZXRVUkwobV9maXJzdFJlcXVlc3QudXJsKCkp
OwotCi0gICAgaWYgKGJhc2U2NCkgewotICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzKGRhdGEpOwotICAgICAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKFdURk1v
dmUocmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0g
ICAgICAgICAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgICAgIH0p
OwotCi0gICAgICAgIC8vIGRpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50
IHRvIGJlIGRlbGV0ZWQuCi0gICAgICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRh
dGEsIG91dCwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAw
KQotICAgICAgICAgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlciht
X2hhbmRsZSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUob3V0LmRhdGEoKSwgb3V0LnNpemUoKSksIG9y
aWdpbmFsU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBUZXh0RW5jb2Rp
bmcgZW5jb2RpbmcoY2hhcnNldCk7Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1
ZW5jZXMoZGF0YSwgZW5jb2RpbmcpOwotICAgICAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZVJlc3Bv
bnNlKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSB7Ci0gICAgICAgICAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIC8vIGRpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0
aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCi0gICAgICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkp
IHsKLSAgICAgICAgICAgIGF1dG8gZW5jb2RlZERhdGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwg
VW5lbmNvZGFibGVIYW5kbGluZzo6VVJMRW5jb2RlZEVudGl0aWVzKTsKLSAgICAgICAgICAgIGlm
IChlbmNvZGVkRGF0YS5zaXplKCkpCi0gICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgp
LT5kaWRSZWNlaXZlQnVmZmVyKG1faGFuZGxlLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3Zl
KGVuY29kZWREYXRhKSksIG9yaWdpbmFsU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobV9oYW5kbGUtPmNsaWVudCgpKQotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZp
bmlzaExvYWRpbmcobV9oYW5kbGUpOwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpnZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgYm9vbCByZWRpcmVjdCkKLXsKLSAgICAvLyBtX3VzZXIvbV9wYXNzIGFyZSBjcmVk
ZW50aWFscyBnaXZlbiBtYW51YWxseSwgZm9yIGluc3RhbmNlLCBieSB0aGUgYXJndW1lbnRzIHBh
c3NlZCB0byBYTUxIdHRwUmVxdWVzdC5vcGVuKCkuCi0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IHJl
cXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsKLQotICAgIGlmIChtX3Nob3VsZFVzZUNyZWRlbnRpYWxT
dG9yYWdlKSB7Ci0gICAgICAgIGlmIChtX3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxz
IHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3Ig
SFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCi0gICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNl
IHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAg
ICAgICAgICAgIG1faW5pdGlhbENyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVs
dENyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHBhcnRpdGlvbiwgcmVxdWVzdC51cmwoKSk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIXJlZGlyZWN0KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
bHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93biBmb3IgdGhlIFVSTCwgdXBkYXRlIHN0b3Jl
ZCBjcmVkZW50aWFscwotICAgICAgICAgICAgLy8gYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0LiBU
aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBsb2dvdXQgYnkgc2VuZGluZyBhbgot
ICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVu
dGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVseSAoc28gdGhhdAotICAgICAgICAgICAg
Ly8gYW4gYXV0aGVudGljYXRpb24gZGlhbG9nIGRvZXNuJ3QgcG9wIHVwKS4KLSAgICAgICAgICAg
IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0
aW9uLCBDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25l
KSwgcmVxdWVzdC51cmwoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgdXNlciA9
IG1fdXNlcjsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBtX3Bhc3M7Ci0KLSAgICBpZiAoIW1faW5p
dGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHVzZXIgPSBtX2luaXRpYWxDcmVk
ZW50aWFsLnVzZXIoKTsKLSAgICAgICAgcGFzc3dvcmQgPSBtX2luaXRpYWxDcmVkZW50aWFsLnBh
c3N3b3JkKCk7Ci0gICAgfQotCi0gICAgaWYgKHVzZXIuaXNFbXB0eSgpICYmIHBhc3N3b3JkLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4oIiIsICIi
KTsKLQotICAgIHJldHVybiBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KHVzZXIsIHBhc3N3b3Jk
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZmZhNTMu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBOQVZFUiBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ1VSTCkKLQotI2luY2x1ZGUgIkNy
ZWRlbnRpYWwuaCIKLSNpbmNsdWRlICJDdXJsUmVxdWVzdENsaWVudC5oIgotI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEN1cmxSZXF1
ZXN0OwotY2xhc3MgUmVzb3VyY2VIYW5kbGU7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotCi1j
bGFzcyBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZT4sIHB1YmxpYyBDdXJsUmVxdWVz
dENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoUmVzb3Vy
Y2VIYW5kbGUqKTsKLSAgICB+UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoKTsKLQotICAgIHZv
aWQgcmVmKCkgb3ZlcnJpZGUgeyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZT46OnJlZigpOyB9Ci0gICAgdm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+OjpkZXJlZigpOyB9Ci0K
LSAgICBib29sIGhhc0hhbmRsZSgpIGNvbnN0OwotICAgIHZvaWQgcmVsZWFzZUhhbmRsZSgpOwot
Ci0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgY2FuY2VsKCk7Ci0KLSAgICB2b2lkIHNldERl
ZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAgdm9pZCBzZXRBdXRoZW50aWNhdGlvbihjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigp
OwotCi0gICAgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwotICAgIHZvaWQgcGxh
dGZvcm1Db250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0KLSAgICB2b2lk
IGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmKTsKLQotcHJpdmF0ZToK
LSAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KLSAgICBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSgpOwotCi0gICAgc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBnZXRDcmVkZW50aWFs
KFJlc291cmNlUmVxdWVzdCYsIGJvb2wpOwotCi0gICAgYm9vbCBjYW5jZWxsZWRPckNsaWVudGxl
c3MoKTsKLQotICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VS
ZXF1ZXN0Jik7Ci0gICAgdm9pZCBjdXJsRGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNoYXJlZEJ1ZmZlcj4m
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkQ29tcGxldGUoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOwotCi0gICAgYm9v
bCBzaG91bGRSZWRpcmVjdEFzR0VUKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgY3Jvc3NP
cmlnaW4pOwotICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KCk7Ci0gICAgdm9pZCBjb250aW51ZUFm
dGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmKTsKLQotICAgIHZvaWQgaGFuZGxl
RGF0YVVSTCgpOwotCi0gICAgLy8gVXNlZCBieSBtYWluIHRocmVhZC4KLSAgICBSZXNvdXJjZUhh
bmRsZSogbV9oYW5kbGU7Ci0gICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9Owot
ICAgIHVuc2lnbmVkIG1fcmVkaXJlY3RDb3VudCB7IDAgfTsKLQotICAgIFJlc291cmNlUmVxdWVz
dCBtX2ZpcnN0UmVxdWVzdDsKLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsK
LSAgICBib29sIG1fc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U7Ci0gICAgU3RyaW5nIG1fdXNl
cjsKLSAgICBTdHJpbmcgbV9wYXNzOwotICAgIENyZWRlbnRpYWwgbV9pbml0aWFsQ3JlZGVudGlh
bDsKLSAgICBib29sIG1fZGVmZXJzTG9hZGluZzsKLSAgICBib29sIG1fYWRkZWRDYWNoZVZhbGlk
YXRpb25IZWFkZXJzIHsgZmFsc2UgfTsKLSAgICBSZWZQdHI8Q3VybFJlcXVlc3Q+IG1fY3VybFJl
cXVlc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333709</attachid>
            <date>2018-02-13 11:21:45 -0800</date>
            <delta_ts>2018-02-15 11:43:31 -0800</delta_ts>
            <desc>PATCH</desc>
            <filename>182578.diff</filename>
            <type>text/plain</type>
            <size>68459</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzJiNWExMjg1Ni4uMjQ5ZWVkMDc3ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NCBAQAorMjAxOC0wMi0xMyAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFVuaWZ5IGxvZ2ljIG9mIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlIGludG8gUmVzb3VyY2VIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU3OAorCisgICAgICAgIFJlY29uc3RydWN0IHRoZSBj
bGFzc2VzIHRvIG1hdGNoIEN1cmwgcG9ydCBuZXR3b3JrIGxheWVyIG1vcmUgc2ltaWxhcgorICAg
ICAgICBzdHJ1Y3R1cmUgd2l0aCBvdGhlciBwb3J0cy4gTW92ZSBDdXJsUmVxdWVzdCBoYW5kbGlu
ZyBpbnRvIFJlc291cmNlSGFuZGxlCisgICAgICAgIGFuZCBtYWtlcyBDdXJsUmVzb3VyY2VIYW5k
bGVEZWxlZ2F0ZSBzaW1wbGUgbGlmZSBjeWNsZS4gQWxzbyBpdHMgZHV0eSBpcworICAgICAgICBm
b3IgbW9zdCBvZiBpbmNvbWluZyBkYXRhIGFuZCBldmVudCBoYW5kbGluZyBmcm9tIEN1clJlcXVl
c3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUncyBubyBuZXcgYmVoYXZpb3IuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9DdXJsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2Fj
aGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjcmVhdGVDdXJsUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRGYWlsV2l0aEVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpDdXJsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y2FuY2VsKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpjYWxsQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxSZXF1ZXN0Ojp3aWxsU2VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpkaWRSZWNlaXZlRGF0YUZyb21NdWx0aXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJl
cXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVl
c3Q6Omludm9rZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjppbnZhbGlkYXRlQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpzZXRDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OkN1
cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJj
ZUhhbmRsZURlbGVnYXRlOjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFu
ZGxlRGVsZWdhdGU6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRs
ZURlbGVnYXRlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmNsaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6ZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
UmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y3VybERpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmhhbmRsZUNvb2tpZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNl
SGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkQ29tcGxl
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxE
aWRGYWlsV2l0aEVycm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJl
c291cmNlSGFuZGxlRGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVz
b3VyY2VIYW5kbGVEZWxlZ2F0ZTo6cmVzcG9uc2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhbmNlbGxlZE9yQ2xpZW50bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNl
dERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmdldENyZWRlbnRpYWwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1D
b250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzaG91bGRSZWRpcmVjdEFzR0VUKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlLmg6IFJlbW92ZWQuCisKIDIwMTgtMDItMDcgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IG1fdGltZU9yaWdp
biBpbiBQZXJmb3JtYW5jZTo6UGVyZm9ybWFuY2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21h
a2UKaW5kZXggNzNjMDE0ZjE1YzEuLjRhODJlYjA5OWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1
cmwuY21ha2UKQEAgLTE4LDYgKzE4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNdWx0aXBhcnRIYW5kbGUuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdFNjaGVkdWxlci5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxTU0xIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJp
Zmllci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvRE5TQ3VybC5jcHAKQEAgLTI1LDcg
KzI2LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Byb3h5U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VFcnJvckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VD
dXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Q3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU3luY2hyb25vdXNMb2FkZXJDbGll
bnRDdXJsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCmluZGV4IDYyMTU0MDcxNGY2Li5mNTAxYzRjOWZmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAtMzYsNiArMzYs
MTAgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAorI2lmIFVTRShDVVJM
KQorI2luY2x1ZGUgIkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgiCisjZW5kaWYKKwogI2lm
IFVTRShTT1VQKQogdHlwZWRlZiBzdHJ1Y3QgX0dUbHNDZXJ0aWZpY2F0ZSBHVGxzQ2VydGlmaWNh
dGU7CiB0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CkBAIC05Miw2ICs5
NiwxMSBAQCBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBj
bGFzcyBUaW1lcjsKIAorI2lmIFVTRShDVVJMKQorY2xhc3MgQ3VybFJlcXVlc3Q7CitjbGFzcyBD
dXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTsKKyNlbmRpZgorCiBjbGFzcyBSZXNvdXJjZUhhbmRs
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPiwgcHVibGljIEF1dGhlbnRpY2F0
aW9uQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFJl
c291cmNlSGFuZGxlPiBjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBz
aG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYpOwpAQCAt
MTg1LDYgKzE5NCwxNSBAQCBwdWJsaWM6CiAgICAgTW9ub3RvbmljVGltZSBtX3JlcXVlc3RUaW1l
OwogI2VuZGlmCiAKKyNpZiBVU0UoQ1VSTCkKKyAgICBib29sIGNhbmNlbGxlZE9yQ2xpZW50bGVz
cygpOworICAgIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKiBkZWxlZ2F0ZSgpOworCisgICAg
dm9pZCBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgdm9pZCB3aWxsU2Vu
ZFJlcXVlc3QoKTsKKyAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0JiYpOworI2VuZGlmCisKICAgICBib29sIGhhc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwpAQCAtMjc4LDYgKzI5NiwxNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgdGltZW91dEZpcmVkKCk7CiAjZW5kaWYKIAorI2lmIFVTRShDVVJMKQor
ICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7
CisKKyAgICBib29sIHNob3VsZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Ym9vbCBjcm9zc09yaWdpbik7CisKKyAgICBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IGdldENy
ZWRlbnRpYWwoUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCk7CisgICAgdm9pZCByZXN0YXJ0UmVxdWVz
dFdpdGhDcmVkZW50aWFsKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29y
ZCk7CisKKyAgICB2b2lkIGhhbmRsZURhdGFVUkwoKTsKKyNlbmRpZgorCiAgICAgZnJpZW5kIGNs
YXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNl
SGFuZGxlSW50ZXJuYWw+IGQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAppbmRleCA1MThjZjljOWNiZi4u
MDA4NGI2MmNkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC0zNywxMyArMzcsOCBAQAogI2luY2x1
ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CiAjZW5kaWYKIAotI2lmIFVTRShDVVJMKSAm
JiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dz
Lmg+Ci0jZW5kaWYKLQogI2lmIFVTRShDVVJMKQotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKICNlbmRpZgogCiAjaWYgVVNF
KFNPVVApCkBAIC04MSw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RlZmVyc0xvYWRp
bmcoZGVmZXJzTG9hZGluZykKICAgICAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91bGRD
b250ZW50U25pZmYpCiAgICAgICAgICwgbV9zaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZihzaG91
bGRDb250ZW50RW5jb2RpbmdTbmlmZikKLSNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9OKQorI2lmIFVT
RShDRlVSTENPTk5FQ1RJT04pIHx8IFVTRShDVVJMKQogICAgICAgICAsIG1fY3VycmVudFJlcXVl
c3QocmVxdWVzdCkKICNlbmRpZgogI2lmIFVTRShTT1VQKQpAQCAtMTMyLDggKzEyNywxNCBAQCBw
dWJsaWM6CiAgICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25SZWY+IG1fc3RvcmFnZVNl
c3Npb247CiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGU+IG1fZGVsZWdhdGU7Ci0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZT4gbV9kZWxl
Z2F0ZTsKKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKKyAgICBi
b29sIG1fY2FuY2VsbGVkIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291bnQg
eyAwIH07CisgICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9OworICAgIGJvb2wg
bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgeyBmYWxzZSB9OworICAgIFJlZlB0cjxDdXJs
UmVxdWVzdD4gbV9jdXJsUmVxdWVzdDsKICNlbmRpZgogCiAjaWYgVVNFKFNPVVApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFu
YWdlci5jcHAKaW5kZXggOWFjZDE5NWUyODUuLmE4ZGViOTg4ZTFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hlTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDYWNoZU1hbmFnZXIu
Y3BwCkBAIC0xOTksMTAgKzE5OSw2IEBAIHZvaWQgQ3VybENhY2hlTWFuYWdlcjo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlJiBqb2IsIFJlc291cmNlUmVzcG9uc2UmCiAgICAgaWYg
KG1fZGlzYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQgPSBqb2IuZ2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQtPm1fZGVsZWdhdGUtPmhhc0hh
bmRsZSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBjb25zdCBTdHJpbmcmIHVybCA9IGpvYi5m
aXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKIAogICAgIHJlbW92ZUNhY2hlRW50cnlDbGll
bnQodXJsLCAmam9iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKaW5kZXggYzAzMzUzOGFhNWIuLjE4NjQyMGFmZGYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25s
b2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBDdXJsRG93
bmxvYWQ6On5DdXJsRG93bmxvYWQoKQogewogICAgIGlmIChtX2N1cmxSZXF1ZXN0KQotICAgICAg
ICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7CisgICAgICAgIG1fY3VybFJlcXVl
c3QtPmludmFsaWRhdGVDbGllbnQoKTsKIH0KIAogdm9pZCBDdXJsRG93bmxvYWQ6OmluaXQoQ3Vy
bERvd25sb2FkTGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBVUkwmIHVybCkKQEAgLTc2LDEwICs3
NiwxMSBAQCBib29sIEN1cmxEb3dubG9hZDo6Y2FuY2VsKCkKIAogUmVmPEN1cmxSZXF1ZXN0PiBD
dXJsRG93bmxvYWQ6OmNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
IHsKLSAgICByZXR1cm4gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0LCB0aGlzKTsKKyAgICBh
dXRvIGN1cmxSZXF1ZXN0ID0gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0LCAqdGhpcyk7Cisg
ICAgcmV0dXJuIGN1cmxSZXF1ZXN0OwogfQogCi12b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBDdXJsRG93
bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoQ3VybFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
IApAQCAtOTYsMTEgKzk3LDExIEBAIHZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCiAgICAgaWYgKG1fbGlzdGVuZXIp
CiAgICAgICAgIG1fbGlzdGVuZXItPmRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc3BvbnNlKTsKIAot
ICAgIG1fY3VybFJlcXVlc3QtPmNvbXBsZXRlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgcmVx
dWVzdC5jb21wbGV0ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogfQogCiAKLXZvaWQgQ3VybERvd25s
b2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3Zv
aWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihDdXJsUmVxdWVzdCYgcmVxdWVz
dCwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIApAQCAtMTExLDcgKzExMiw3IEBAIHZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVj
ZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKICAgICAgICAgbV9saXN0ZW5l
ci0+ZGlkUmVjZWl2ZURhdGFPZkxlbmd0aChidWZmZXItPnNpemUoKSk7CiB9CiAKLXZvaWQgQ3Vy
bERvd25sb2FkOjpjdXJsRGlkQ29tcGxldGUoKQordm9pZCBDdXJsRG93bmxvYWQ6OmN1cmxEaWRD
b21wbGV0ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCkBAIC0xMTksMjMgKzEyMCwyMyBAQCB2b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZENv
bXBsZXRlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2Rlc3RpbmF0aW9uLmlzRW1w
dHkoKSkgewotICAgICAgICBpZiAobV9jdXJsUmVxdWVzdCAmJiAhbV9jdXJsUmVxdWVzdC0+Z2V0
RG93bmxvYWRlZEZpbGVQYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgRmlsZVN5c3RlbTo6
bW92ZUZpbGUobV9jdXJsUmVxdWVzdC0+Z2V0RG93bmxvYWRlZEZpbGVQYXRoKCksIG1fZGVzdGlu
YXRpb24pOworICAgICAgICBpZiAoIXJlcXVlc3QuZ2V0RG93bmxvYWRlZEZpbGVQYXRoKCkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUocmVxdWVzdC5nZXREb3du
bG9hZGVkRmlsZVBhdGgoKSwgbV9kZXN0aW5hdGlvbik7CiAgICAgfQogCiAgICAgaWYgKG1fbGlz
dGVuZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRpZEZpbmlzaCgpOwogfQogCi12b2lkIEN1cmxE
b3dubG9hZDo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3Vy
Y2VFcnJvcikKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKG1faXNDYW5jZWxsZWQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX2RlbGV0ZXNGaWxlVXBvbkZhaWx1cmUgJiYgbV9jdXJs
UmVxdWVzdCAmJiAhbV9jdXJsUmVxdWVzdC0+Z2V0RG93bmxvYWRlZEZpbGVQYXRoKCkuaXNFbXB0
eSgpKQotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fY3VybFJlcXVlc3QtPmdldERv
d25sb2FkZWRGaWxlUGF0aCgpKTsKKyAgICBpZiAobV9kZWxldGVzRmlsZVVwb25GYWlsdXJlICYm
ICFyZXF1ZXN0LmdldERvd25sb2FkZWRGaWxlUGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAgRmls
ZVN5c3RlbTo6ZGVsZXRlRmlsZShyZXF1ZXN0LmdldERvd25sb2FkZWRGaWxlUGF0aCgpKTsKIAog
ICAgIGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xpc3RlbmVyLT5kaWRGYWlsKCk7CkBAIC0x
OTQsNyArMTk1LDYgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OndpbGxTZW5kUmVxdWVzdCgpCiAgICAg
fQogCiAgICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c2V0
Q2xpZW50KG51bGxwdHIpOwogCiAgICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0
KG5ld1JlcXVlc3QpOwogICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKaW5kZXggOGFh
ZjcwZmIwZjIuLmM2ZjVjNTk2ZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC03MCwxMSArNzAsMTEgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRlQ3VybFJlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjdXJsRGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBs
b25nLCB1bnNpZ25lZCBsb25nIGxvbmcpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgY3VybERpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIGN1
cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgY3VybERpZENvbXBsZXRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhF
cnJvcihjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkU2Vu
ZERhdGEoQ3VybFJlcXVlc3QmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9u
Zykgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKEN1cmxSZXF1
ZXN0JiwgY29uc3QgQ3VybFJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkUmVj
ZWl2ZUJ1ZmZlcihDdXJsUmVxdWVzdCYsIFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgY3VybERpZENvbXBsZXRlKEN1cmxSZXF1ZXN0Jikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlRXJyb3Im
KSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2hvdWxkUmVkaXJlY3RBc0dFVChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBib29sIGNyb3NzT3JpZ2luKTsKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVx
dWVzdC5jcHAKaW5kZXggZjNlYmQ2OGY3MWUuLjAzNjUzN2Y4YTUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAKQEAgLTM5
LDEzICszOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEN1cmxSZXF1ZXN0OjpDdXJsUmVx
dWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmcmVxdWVzdCwgQ3VybFJlcXVlc3RDbGllbnQqIGNs
aWVudCwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJsZU11bHRpcGFydCkKICAgICA6IG1f
cmVxdWVzdChyZXF1ZXN0Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9jbGllbnQoY2xpZW50KQog
ICAgICwgbV9zaG91bGRTdXNwZW5kKHNob3VsZFN1c3BlbmQpCiAgICAgLCBtX2VuYWJsZU11bHRp
cGFydChlbmFibGVNdWx0aXBhcnQpCiAgICAgLCBtX2Zvcm1EYXRhU3RyZWFtKG1fcmVxdWVzdC5o
dHRwQm9keSgpKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzZXRDbGll
bnQoY2xpZW50KTsKIH0KIAogdm9pZCBDdXJsUmVxdWVzdDo6c2V0VXNlclBhc3MoY29uc3QgU3Ry
aW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQpAQCAtMTI1LDYgKzEyNCw3IEBAIHZv
aWQgQ3VybFJlcXVlc3Q6OmNhbmNlbCgpCiAKICAgICBzZXRSZXF1ZXN0UGF1c2VkKGZhbHNlKTsK
ICAgICBzZXRDYWxsYmFja1BhdXNlZChmYWxzZSk7CisgICAgaW52YWxpZGF0ZUNsaWVudCgpOwog
fQogCiB2b2lkIEN1cmxSZXF1ZXN0OjpzdXNwZW5kKCkKQEAgLTE0MiwxOCArMTQyLDE4IEBAIHZv
aWQgQ3VybFJlcXVlc3Q6OnJlc3VtZSgpCiB9CiAKIC8qIGB0aGlzYCBpcyBwcm90ZWN0ZWQgaW5z
aWRlIHRoaXMgbWV0aG9kLiAqLwotdm9pZCBDdXJsUmVxdWVzdDo6Y2FsbENsaWVudChXVEY6OkZ1
bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3RDbGllbnQmKT4gdGFzaykKK3ZvaWQgQ3VybFJlcXVlc3Q6
OmNhbGxDbGllbnQoV1RGOjpGdW5jdGlvbjx2b2lkKEN1cmxSZXF1ZXN0JiwgQ3VybFJlcXVlc3RD
bGllbnQmKT4gdGFzaykKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKICAgICAgICAgaWYg
KEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQgPSBtX2NsaWVudCkgewogICAgICAgICAgICAgUmVm
UHRyPEN1cmxSZXF1ZXN0Q2xpZW50PiBwcm90ZWN0ZWRDbGllbnQoY2xpZW50KTsKLSAgICAgICAg
ICAgIHRhc2soKmNsaWVudCk7CisgICAgICAgICAgICB0YXNrKCp0aGlzLCAqY2xpZW50KTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFzayldKCkgbXV0YWJsZSB7
CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFzayldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBp
ZiAoQ3VybFJlcXVlc3RDbGllbnQqIGNsaWVudCA9IHByb3RlY3RlZFRoaXMtPm1fY2xpZW50KSB7
CiAgICAgICAgICAgICAgICAgUmVmUHRyPEN1cmxSZXF1ZXN0Q2xpZW50PiBwcm90ZWN0ZWRDbGll
bnQoY2xpZW50KTsKLSAgICAgICAgICAgICAgICB0YXNrKCpjbGllbnQpOworICAgICAgICAgICAg
ICAgIHRhc2soKnRoaXMsICpjbGllbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAg
ICB9CkBAIC0yNTksOCArMjU5LDggQEAgc2l6ZV90IEN1cmxSZXF1ZXN0Ojp3aWxsU2VuZERhdGEo
Y2hhciogYnVmZmVyLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2YKICAgICAgICAg
cmV0dXJuIENVUkxfUkVBREZVTkNfQUJPUlQ7CiAgICAgfQogCi0gICAgY2FsbENsaWVudChbdGhp
cywgdG90YWxSZWFkU2l6ZSA9IG1fZm9ybURhdGFTdHJlYW0udG90YWxSZWFkU2l6ZSgpLCB0b3Rh
bFNpemUgPSBtX2Zvcm1EYXRhU3RyZWFtLnRvdGFsU2l6ZSgpXShDdXJsUmVxdWVzdENsaWVudCYg
Y2xpZW50KSB7Ci0gICAgICAgIGNsaWVudC5jdXJsRGlkU2VuZERhdGEodG90YWxSZWFkU2l6ZSwg
dG90YWxTaXplKTsKKyAgICBjYWxsQ2xpZW50KFt0b3RhbFJlYWRTaXplID0gbV9mb3JtRGF0YVN0
cmVhbS50b3RhbFJlYWRTaXplKCksIHRvdGFsU2l6ZSA9IG1fZm9ybURhdGFTdHJlYW0udG90YWxT
aXplKCldKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50KSB7
CisgICAgICAgIGNsaWVudC5jdXJsRGlkU2VuZERhdGEocmVxdWVzdCwgdG90YWxSZWFkU2l6ZSwg
dG90YWxTaXplKTsKICAgICB9KTsKIAogICAgIHJldHVybiAqc2VuZEJ5dGVzOwpAQCAtMzYxLDgg
KzM2MSw4IEBAIHNpemVfdCBDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJlZEJ1
ZmZlcj4mJiBidWZmZXIpCiAgICAgICAgIGlmIChtX211bHRpcGFydEhhbmRsZSkKICAgICAgICAg
ICAgIG1fbXVsdGlwYXJ0SGFuZGxlLT5kaWRSZWNlaXZlRGF0YShidWZmZXIpOwogICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGNhbGxDbGllbnQoW2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0o
Q3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY2xp
ZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgICAgICBj
YWxsQ2xpZW50KFtidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKEN1cmxSZXF1ZXN0JiByZXF1ZXN0
LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBj
bGllbnQuY3VybERpZFJlY2VpdmVCdWZmZXIocmVxdWVzdCwgV1RGTW92ZShidWZmZXIpKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQpAQCAtMzkzLDggKzM5Myw4IEBAIHZvaWQg
Q3VybFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhRnJvbU11bHRpcGFydChSZWY8U2hhcmVkQnVmZmVy
PiYmIGJ1ZmZlcikKICAgICBhdXRvIHJlY2VpdmVCeXRlcyA9IGJ1ZmZlci0+c2l6ZSgpOwogCiAg
ICAgaWYgKHJlY2VpdmVCeXRlcykgewotICAgICAgICBjYWxsQ2xpZW50KFtidWZmZXIgPSBXVEZN
b3ZlKGJ1ZmZlcildKEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIG11dGFibGUgewotICAgICAg
ICAgICAgY2xpZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSk7CisgICAg
ICAgIGNhbGxDbGllbnQoW2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0oQ3VybFJlcXVlc3QmIHJl
cXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIG11dGFibGUgeworICAgICAgICAgICAg
Y2xpZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKHJlcXVlc3QsIFdURk1vdmUoYnVmZmVyKSk7CiAg
ICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTQyMSw4ICs0MjEsOCBAQCB2b2lkIEN1cmxSZXF1ZXN0
OjpkaWRDb21wbGV0ZVRyYW5zZmVyKENVUkxjb2RlIHJlc3VsdCkKICAgICAgICAgICAgICAgICBt
X25ldHdvcmtMb2FkTWV0cmljcyA9ICptZXRyaWNzOwogCiAgICAgICAgICAgICBmaW5hbGl6ZVRy
YW5zZmVyKCk7Ci0gICAgICAgICAgICBjYWxsQ2xpZW50KFtdKEN1cmxSZXF1ZXN0Q2xpZW50JiBj
bGllbnQpIHsKLSAgICAgICAgICAgICAgICBjbGllbnQuY3VybERpZENvbXBsZXRlKCk7CisgICAg
ICAgICAgICBjYWxsQ2xpZW50KFtdKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENs
aWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRDb21wbGV0ZShy
ZXF1ZXN0KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTQz
Miw4ICs0MzIsOCBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpkaWRDb21wbGV0ZVRyYW5zZmVyKENVUkxj
b2RlIHJlc3VsdCkKICAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0U3NsRXJyb3JzKG1fc3Ns
VmVyaWZpZXItPnNzbEVycm9ycygpKTsKIAogICAgICAgICBmaW5hbGl6ZVRyYW5zZmVyKCk7Ci0g
ICAgICAgIGNhbGxDbGllbnQoW2Vycm9yID0gcmVzb3VyY2VFcnJvci5pc29sYXRlZENvcHkoKV0o
Q3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgewotICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRG
YWlsV2l0aEVycm9yKGVycm9yKTsKKyAgICAgICAgY2FsbENsaWVudChbZXJyb3IgPSByZXNvdXJj
ZUVycm9yLmlzb2xhdGVkQ29weSgpXShDdXJsUmVxdWVzdCYgcmVxdWVzdCwgQ3VybFJlcXVlc3RD
bGllbnQmIGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRGYWlsV2l0aEVycm9y
KHJlcXVlc3QsIGVycm9yKTsKICAgICAgICAgfSk7CiAgICAgfQogfQpAQCAtNTMzLDggKzUzMyw4
IEBAIHZvaWQgQ3VybFJlcXVlc3Q6Omludm9rZURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJs
UmVzcG9uc2UmIHJlc3BvbnNlLCBBY3Rpb24KICAgICBtX2RpZE5vdGlmeVJlc3BvbnNlID0gdHJ1
ZTsKICAgICBtX2FjdGlvbkFmdGVySW52b2tlID0gYmVoYXZpb3JBZnRlckludm9rZTsKIAotICAg
IGNhbGxDbGllbnQoW3Jlc3BvbnNlID0gcmVzcG9uc2UuaXNvbGF0ZWRDb3B5KCldKEN1cmxSZXF1
ZXN0Q2xpZW50JiBjbGllbnQpIHsKLSAgICAgICAgY2xpZW50LmN1cmxEaWRSZWNlaXZlUmVzcG9u
c2UocmVzcG9uc2UpOworICAgIGNhbGxDbGllbnQoW3Jlc3BvbnNlID0gcmVzcG9uc2UuaXNvbGF0
ZWRDb3B5KCldKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50
KSB7CisgICAgICAgIGNsaWVudC5jdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKHJlcXVlc3QsIHJlc3Bv
bnNlKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAppbmRleCA4MmZkYzg1YzA5OC4uYzRmYjcwYzJjODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVz
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVz
dC5oCkBAIC01NiwxNCArNTYsMTQgQEAgcHVibGljOgogICAgICAgICBZZXMgPSB0cnVlCiAgICAg
fTsKIAotICAgIHN0YXRpYyBSZWY8Q3VybFJlcXVlc3Q+IGNyZWF0ZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQsIFNob3VsZFN1c3BlbmQg
c2hvdWxkU3VzcGVuZCA9IFNob3VsZFN1c3BlbmQ6Ok5vLCBFbmFibGVNdWx0aXBhcnQgZW5hYmxl
TXVsdGlwYXJ0ID0gRW5hYmxlTXVsdGlwYXJ0OjpObykKKyAgICBzdGF0aWMgUmVmPEN1cmxSZXF1
ZXN0PiBjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENs
aWVudCYgY2xpZW50LCBTaG91bGRTdXNwZW5kIHNob3VsZFN1c3BlbmQgPSBTaG91bGRTdXNwZW5k
OjpObywgRW5hYmxlTXVsdGlwYXJ0IGVuYWJsZU11bHRpcGFydCA9IEVuYWJsZU11bHRpcGFydDo6
Tm8pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDdXJsUmVxdWVzdChyZXF1
ZXN0LCBjbGllbnQsIHNob3VsZFN1c3BlbmQgPT0gU2hvdWxkU3VzcGVuZDo6WWVzLCBlbmFibGVN
dWx0aXBhcnQgPT0gRW5hYmxlTXVsdGlwYXJ0OjpZZXMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ3VybFJlcXVlc3QocmVxdWVzdCwgJmNsaWVudCwgc2hvdWxkU3VzcGVuZCA9PSBT
aG91bGRTdXNwZW5kOjpZZXMsIGVuYWJsZU11bHRpcGFydCA9PSBFbmFibGVNdWx0aXBhcnQ6Olll
cykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkN1cmxSZXF1ZXN0KCkgPSBkZWZhdWx0OwogCi0g
ICAgdm9pZCBzZXRDbGllbnQoQ3VybFJlcXVlc3RDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9
IGNsaWVudDsgIH0KKyAgICB2b2lkIGludmFsaWRhdGVDbGllbnQoKSB7IG1fY2xpZW50ID0gbnVs
bHB0cjsgIH0KICAgICB2b2lkIHNldFVzZXJQYXNzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgdm9pZCBzdGFydChib29sIGlzU3luY1JlcXVlc3QgPSBmYWxzZSk7CkBAIC0x
MDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc3RhcnRXaXRoSm9iTWFuYWdlcigp
OwogCi0gICAgdm9pZCBjYWxsQ2xpZW50KFdURjo6RnVuY3Rpb248dm9pZChDdXJsUmVxdWVzdENs
aWVudCYpPik7CisgICAgdm9pZCBjYWxsQ2xpZW50KFdURjo6RnVuY3Rpb248dm9pZChDdXJsUmVx
dWVzdCYsIEN1cmxSZXF1ZXN0Q2xpZW50Jik+KTsKIAogICAgIC8vIFRyYW5zZmVyIHByb2Nlc3Np
bmcgb2YgUmVxdWVzdCBib2R5LCBSZXNwb25zZSBoZWFkZXIvYm9keQogICAgIC8vIENhbGxlZCBi
eSB3b3JrZXIgdGhyZWFkIGluIGNhc2Ugb2YgYXN5bmMsIG1haW4gdGhyZWFkIGluIGNhc2Ugb2Yg
c3luYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsUmVxdWVzdENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxSZXF1ZXN0Q2xpZW50LmgKaW5kZXggMzljMjAyMmMzNGQuLjAzM2I4ZTkzYTMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3RD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJl
cXVlc3RDbGllbnQuaApAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEN1cmxSZXF1ZXN0OwogY2xhc3MgQ3VybFJlc3BvbnNlOwogY2xhc3MgUmVzb3VyY2VF
cnJvcjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKQEAgLTM4LDExICszOSwxMSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHJlZigpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSA9IDA7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3VybERpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2Um
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRC
dWZmZXI+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3VybERpZENvbXBsZXRlKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkU2VuZERhdGEoQ3VybFJlcXVlc3QmLCB1
bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRl
c1RvQmVTZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cmxEaWRSZWNlaXZlUmVzcG9uc2Uo
Q3VybFJlcXVlc3QmLCBjb25zdCBDdXJsUmVzcG9uc2UmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGN1cmxEaWRSZWNlaXZlQnVmZmVyKEN1cmxSZXF1ZXN0JiwgUmVmPFNoYXJlZEJ1ZmZlcj4mJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkQ29tcGxldGUoQ3VybFJlcXVlc3QmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9yKEN1cmxSZXF1ZXN0JiwgY29u
c3QgUmVzb3VyY2VFcnJvciYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3Vy
Y2VIYW5kbGVEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi4zY2U3YWZiOWI4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5j
cHAKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTkFWRVIgQ29ycC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgiCisKKyNpbmNsdWRlICJDdXJsQ2FjaGVN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKKyNpbmNsdWRlICJOZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
IgorCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisKKyNpZiBVU0UoQ1VSTCkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Q3Vy
bFJlc291cmNlSGFuZGxlRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUmIGhhbmRsZSkKKyAgICA6IG1f
aGFuZGxlKGhhbmRsZSkKK3sKKworfQorCit2b2lkIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRl
OjpyZWYoKQoreworICAgIG1faGFuZGxlLnJlZigpOworfQorCit2b2lkIEN1cmxSZXNvdXJjZUhh
bmRsZURlbGVnYXRlOjpkZXJlZigpCit7CisgICAgbV9oYW5kbGUuZGVyZWYoKTsKK30KKworYm9v
bCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCkKK3sK
KyAgICByZXR1cm4gbV9oYW5kbGUuY2FuY2VsbGVkT3JDbGllbnRsZXNzKCk7Cit9CisKK1Jlc291
cmNlSGFuZGxlQ2xpZW50KiBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y2xpZW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9oYW5kbGUuY2xpZW50KCk7Cit9CisKK1Jlc291cmNlSGFuZGxl
SW50ZXJuYWwqIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpkKCkKK3sKKyAgICByZXR1cm4g
bV9oYW5kbGUuZ2V0SW50ZXJuYWwoKTsKK30KKwordm9pZCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZTo6Y3VybERpZFNlbmREYXRhKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCB1bnNpZ25lZCBsb25n
IGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoY2FuY2VsbGVkT3JDbGll
bnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsaWVudCgpLT5kaWRTZW5kRGF0YSgm
bV9oYW5kbGUsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsKK30KKworc3RhdGljIHZv
aWQgaGFuZGxlQ29va2llSGVhZGVycyhjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlKQorewor
ICAgIHN0YXRpYyBjb25zdCBhdXRvIHNldENvb2tpZUhlYWRlciA9ICJzZXQtY29va2llOiAiOwor
CisgICAgYXV0byYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKKyAgICBjb25zdCBDb29raWVKYXJDdXJsJiBjb29r
aWVKYXIgPSBkZWZhdWx0U3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFnZSgpOworICAgIGZvciAo
YXV0byBoZWFkZXIgOiByZXNwb25zZS5oZWFkZXJzKSB7CisgICAgICAgIGlmIChoZWFkZXIuc3Rh
cnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHNldENvb2tpZUhlYWRlcikpIHsKKyAgICAgICAgICAg
IFN0cmluZyBzZXRDb29raWVTdHJpbmcgPSBoZWFkZXIucmlnaHQoaGVhZGVyLmxlbmd0aCgpIC0g
c3RybGVuKHNldENvb2tpZUhlYWRlcikpOworICAgICAgICAgICAgY29va2llSmFyLnNldENvb2tp
ZXNGcm9tSFRUUFJlc3BvbnNlKGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiwgcmVzcG9uc2UudXJsLCBz
ZXRDb29raWVTdHJpbmcpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEN1cmxSZXNvdXJj
ZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKEN1cmxSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBDdXJsUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIWQoKS0+bV9kZWZlcnNMb2FkaW5nKTsKKwor
ICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9yZXNwb25zZSA9IFJlc291cmNlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSk7CisgICAgbV9y
ZXNwb25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKHJlcXVlc3QuZ2V0TmV0d29y
a0xvYWRNZXRyaWNzKCkpOworCisgICAgaGFuZGxlQ29va2llSGVhZGVycyhyZWNlaXZlZFJlc3Bv
bnNlKTsKKworICAgIGlmIChtX3Jlc3BvbnNlLnNob3VsZFJlZGlyZWN0KCkpIHsKKyAgICAgICAg
bV9oYW5kbGUud2lsbFNlbmRSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9yZXNwb25zZS5pc1VuYXV0aG9yaXplZCgpKSB7CisgICAgICAgIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZShyZWNlaXZlZFJlc3BvbnNlLCBkKCktPm1fYXV0aEZhaWx1
cmVDb3VudCwgbV9yZXNwb25zZSwgJm1faGFuZGxlKTsKKyAgICAgICAgbV9oYW5kbGUuZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7CisgICAgICAgIGQoKS0+bV9h
dXRoRmFpbHVyZUNvdW50Kys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9y
ZXNwb25zZS5pc05vdE1vZGlmaWVkKCkpIHsKKyAgICAgICAgVVJMIGNhY2hlVXJsID0gbV9yZXNw
b25zZS51cmwoKTsKKyAgICAgICAgY2FjaGVVcmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7
CisKKyAgICAgICAgaWYgKEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmdldENhY2hlZFJl
c3BvbnNlKGNhY2hlVXJsLCBtX3Jlc3BvbnNlKSkgeworICAgICAgICAgICAgaWYgKGQoKS0+bV9h
ZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMpIHsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNl
LnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRI
VFRQU3RhdHVzVGV4dCgiT0siKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVSZXNwb25zZShtX2hh
bmRsZSwgbV9yZXNwb25zZSk7CisKKyAgICBtX2hhbmRsZS5kaWRSZWNlaXZlUmVzcG9uc2UoUmVz
b3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZEhhbmRsZSA9IG1ha2VS
ZWYobV9oYW5kbGUpXSB7CisgICAgICAgIG1faGFuZGxlLmNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZl
UmVzcG9uc2UoKTsKKyAgICB9KTsKK30KKwordm9pZCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0
ZTo6Y3VybERpZFJlY2VpdmVCdWZmZXIoQ3VybFJlcXVlc3QmIHJlcXVlc3QsIFJlZjxTaGFyZWRC
dWZmZXI+JiYgYnVmZmVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBp
ZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEN1cmxD
YWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVEYXRhKG1faGFuZGxlLCBidWZmZXIt
PmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVy
KCZtX2hhbmRsZSwgV1RGTW92ZShidWZmZXIpLCBidWZmZXItPnNpemUoKSk7Cit9CisKK3ZvaWQg
Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKGNhbmNl
bGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc3BvbnNlLnNl
dERlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MocmVxdWVzdC5nZXROZXR3b3JrTG9hZE1ldHJp
Y3MoKSk7CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGaW5pc2hMb2Fk
aW5nKG1faGFuZGxlKTsKKyAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZygmbV9oYW5kbGUp
OworfQorCit2b2lkIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkRmFpbFdpdGhF
cnJvcihDdXJsUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VF
cnJvcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKGNhbmNlbGxl
ZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5kaWRGYWlsKG1faGFuZGxlKTsKKyAgICBjbGllbnQoKS0+ZGlkRmFpbCgm
bV9oYW5kbGUsIHJlc291cmNlRXJyb3IpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZGRhOGYzMGRhZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVE
ZWxlZ2F0ZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ3VybFJl
cXVlc3RDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBSZXNvdXJjZUhhbmRsZTsKK2NsYXNzIFJlc291cmNlSGFuZGxlQ2xp
ZW50OworY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKKworY2xhc3MgQ3VybFJlc291cmNl
SGFuZGxlRGVsZWdhdGUgOiBwdWJsaWMgQ3VybFJlcXVlc3RDbGllbnQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUoUmVzb3Vy
Y2VIYW5kbGUmKTsKKworICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29u
c3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQorCisgICAgLy8gQ3VybFJlcXVlc3RDbGllbnQgbWV0
aG9kcworCisgICAgdm9pZCByZWYoKTsKKyAgICB2b2lkIGRlcmVmKCk7CisKKyAgICB2b2lkIGN1
cmxEaWRTZW5kRGF0YShDdXJsUmVxdWVzdCYsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQs
IHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlOworICAgIHZv
aWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShDdXJsUmVxdWVzdCYsIGNvbnN0IEN1cmxSZXNwb25z
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoQ3VybFJlcXVlc3Qm
LCBSZWY8U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRDb21wbGV0
ZShDdXJsUmVxdWVzdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZEZhaWxXaXRoRXJyb3Io
Q3VybFJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgUmVzb3VyY2VIYW5kbGUmIG1faGFuZGxlOworICAgIFJlc291cmNlUmVzcG9uc2UgbV9y
ZXNwb25zZTsKKworICAgIGJvb2wgY2FuY2VsbGVkT3JDbGllbnRsZXNzKCk7CisgICAgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCgpIGNvbnN0OworICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5j
cHAKaW5kZXggMjA4MTU0NDRiMWMuLjgzNDhjMzc3ZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNw
cApAQCAtMzIsMjAgKzMyLDI3IEBACiAKICNpZiBVU0UoQ1VSTCkKIAorI2luY2x1ZGUgIkNvb2tp
ZUphckN1cmwuaCIKICNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgorI2luY2x1ZGUgIkN1
cmxDYWNoZU1hbmFnZXIuaCIKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgorI2luY2x1ZGUgIkN1
cmxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkhUVFBQYXJz
ZXJzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50
ZXJuYWwuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTeW5jaHJvbm91
c0xvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0
Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhh
bmRsZUludGVybmFsKCkKIHsKLSAgICBpZiAobV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxlZ2F0
ZS0+cmVsZWFzZUhhbmRsZSgpOworICAgIGlmIChtX2N1cmxSZXF1ZXN0KQorICAgICAgICBtX2N1
cmxSZXF1ZXN0LT5pbnZhbGlkYXRlQ2xpZW50KCk7CiB9CiAKIFJlc291cmNlSGFuZGxlOjp+UmVz
b3VyY2VIYW5kbGUoKSA9IGRlZmF1bHQ7CkBAIC01Niw2ICs2Myw5IEBAIGJvb2wgUmVzb3VyY2VI
YW5kbGU6OnN0YXJ0KCkKIAogICAgIEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKTsKIAorICAgIGlm
ICghZC0+bV9kZWxlZ2F0ZS5nZXQoKSkKKyAgICAgICAgZC0+bV9kZWxlZ2F0ZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU+KCp0aGlzKTsKKwogICAgIC8vIFRo
ZSBmcmFtZSBjb3VsZCBiZSBudWxsIGlmIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNzb2Np
YXRlZCB0byBhbnkKICAgICAvLyBGcmFtZSwgZS5nLiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcgYSBm
aWxlLgogICAgIC8vIElmIHRoZSBmcmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBhZ2UgaXMgbnVs
bCB0aGlzIG11c3QgYmUgYW4gYXR0ZW1wdGVkCkBAIC03MSwxNSArODEsNjYgQEAgYm9vbCBSZXNv
dXJjZUhhbmRsZTo6c3RhcnQoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBk
LT5tX2RlbGVnYXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKHRo
aXMpKTsKLSAgICBkLT5tX2RlbGVnYXRlLT5zdGFydCgpOworICAgIGF1dG8gY3JlZGVudGlhbCA9
IGdldENyZWRlbnRpYWwoZC0+bV9jdXJyZW50UmVxdWVzdCwgZmFsc2UpOworCisgICAgZC0+bV9j
dXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1fY3VycmVudFJlcXVlc3QpOworICAg
IGQtPm1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRlbnRpYWwuZmlyc3QsIGNyZWRlbnRp
YWwuc2Vjb25kKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdGFydCgpOworCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgpCiB7Ci0gICAgaWYgKGQt
Pm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPmNhbmNlbCgpOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBkLT5tX2NhbmNlbGxlZCA9IHRydWU7CisKKyAgICBp
ZiAoIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIGQtPm1fY3VybFJlcXVlc3QtPmNhbmNlbCgp
OworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MoKQorewor
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gIWNsaWVudCgpOworfQorCitSZWY8Q3VybFJlcXVlc3Q+IFJlc291cmNlSGFuZGxlOjpjcmVh
dGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIC8vIEN1cmxDYWNoZSA6IGFwcGVuZCBhZGRpdGlvbmFsIGNh
Y2hlIGluZm9ybWF0aW9uCisgICAgZC0+bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSBm
YWxzZTsKKworICAgIGJvb2wgaGFzQ2FjaGVIZWFkZXJzID0gcmVxdWVzdC5odHRwSGVhZGVyRmll
bGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSkgfHwgcmVxdWVz
dC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNo
KTsKKyAgICBpZiAoIWhhc0NhY2hlSGVhZGVycykgeworICAgICAgICBhdXRvJiBjYWNoZSA9IEN1
cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpOworICAgICAgICBVUkwgY2FjaGVVcmwgPSByZXF1
ZXN0LnVybCgpOworICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsK
KworICAgICAgICBpZiAoY2FjaGUuaXNDYWNoZWQoY2FjaGVVcmwpKSB7CisgICAgICAgICAgICBj
YWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KGNhY2hlVXJsLCB0aGlzKTsKKworICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGNhY2hlLnJlcXVlc3RIZWFkZXJzKGNhY2hlVXJsKSkK
KyAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZChlbnRyeS5rZXksIGVu
dHJ5LnZhbHVlKTsKKworICAgICAgICAgICAgZC0+bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRl
cnMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgQ3VybFJlcXVlc3Q6OlNob3VsZFN1
c3BlbmQgc2hvdWxkU3VzcGVuZCA9IGQtPm1fZGVmZXJzTG9hZGluZyA/IEN1cmxSZXF1ZXN0OjpT
aG91bGRTdXNwZW5kOjpZZXMgOiBDdXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZDo6Tm87CisgICAg
YXV0byBjdXJsUmVxdWVzdCA9IEN1cmxSZXF1ZXN0OjpjcmVhdGUocmVxdWVzdCwgKmRlbGVnYXRl
KCksIHNob3VsZFN1c3BlbmQsIEN1cmxSZXF1ZXN0OjpFbmFibGVNdWx0aXBhcnQ6Olllcyk7Cisg
ICAgCisgICAgcmV0dXJuIGN1cmxSZXF1ZXN0OworfQorCitDdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZSogUmVzb3VyY2VIYW5kbGU6OmRlbGVnYXRlKCkKK3sKKyAgICBBU1NFUlQoZC0+bV9kZWxl
Z2F0ZSk7CisgICAgcmV0dXJuIGQtPm1fZGVsZWdhdGUuZ2V0KCk7CiB9CiAKICNpZiBPUyhXSU5E
T1dTKQpAQCAtMTE1LDggKzE3NiwxOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNl
dERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKIAotICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5zZXRE
ZWZlcnNMb2FkaW5nKGRlZmVycyk7CisgICAgaWYgKGRlZmVycyA9PSBkLT5tX2RlZmVyc0xvYWRp
bmcpCisgICAgICAgIHJldHVybjsKKworICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsK
KworICAgIGlmICghZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGQtPm1fZGVmZXJzTG9hZGluZykKKyAgICAgICAgZC0+bV9jdXJsUmVxdWVzdC0+c3VzcGVuZCgp
OworICAgIGVsc2UKKyAgICAgICAgZC0+bV9jdXJsUmVxdWVzdC0+cmVzdW1lKCk7CiB9CiAKIGJv
b2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkKQEAgLTEzNyw5
ICsyMDgsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbAogICAgICAgICBpZiAoY2hhbGxlbmdl
LmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKQogICAgICAgICAgICAg
dXJsVG9TdG9yZSA9IGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKTsKICAgICAgICAg
Q3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRp
b24sIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9yZSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgIGQtPm1f
ZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFs
LnBhc3N3b3JkKCkpOworCisgICAgICAgIHJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY3Jl
ZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAKICAgICAgICAgZC0+bV91
c2VyID0gU3RyaW5nKCk7CiAgICAgICAgIGQtPm1fcGFzcyA9IFN0cmluZygpOwpAQCAtMTY0LDgg
KzIzNCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAgICAgICAgICAgICAgICAgIENy
ZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9u
LCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWls
dXJlUmVzcG9uc2UoKS51cmwoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgICAgICAgICAgICAgIGQtPm1fZGVsZWdhdGUt
PnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3Jk
KCkpOworICAgICAgICAgICAgICAgIHJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY3JlZGVu
dGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMDAsOCArMjY5LDcgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiBjaGFsbGVuZ2UKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkLT5tX2RlbGVn
YXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5zZXRBdXRoZW50aWNhdGlvbihjcmVkZW50aWFs
LnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICByZXN0YXJ0UmVxdWVzdFdpdGhD
cmVkZW50aWFsKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwogCiAg
ICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogfQpAQCAtMjE1LDExICsyODMsOCBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwo
Y29uc3QgQXV0aGVudGljYQogCiAgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogCi0gICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UoZC0+bV9yZXNwb25zZSksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgIGQtPm1f
ZGVsZWdhdGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgZGlkUmVjZWl2ZVJl
c3BvbnNlKFJlc291cmNlUmVzcG9uc2UoZGVsZWdhdGUoKS0+cmVzcG9uc2UoKSksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgY29udGludWVBZnRlckRp
ZFJlY2VpdmVSZXNwb25zZSgpOwogICAgIH0pOwogfQogCkBAIC0yNDYsMTggKzMxMSw3NyBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbihjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3N0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gUmVzb3VyY2VIYW5kbGU6OmdldENyZWRlbnRpYWwoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHJlZGlyZWN0KQoreworICAgIC8vIG1fdXNlci9t
X3Bhc3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFuY2UsIGJ5IHRo
ZSBhcmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4KKyAgICBTdHJpbmcg
cGFydGl0aW9uID0gcmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpOworCisgICAgaWYgKHNob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKCkpIHsKKyAgICAgICAgaWYgKGQtPm1fdXNlci5pc0VtcHR5KCkg
JiYgZC0+bV9wYXNzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVt
LzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJldmlv
dXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLCAKKyAgICAgICAg
ICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBhbGxv
d2VkIGJ5IFJGQyAyNjE3LgorICAgICAgICAgICAgZC0+bV9pbml0aWFsQ3JlZGVudGlhbCA9IENy
ZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0aW9u
LCByZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghcmVkaXJlY3QpIHsKKyAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtub3duIGZv
ciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzCisgICAgICAgICAgICAvLyBiZWZv
cmUgc2VuZGluZyBhIHJlcXVlc3QuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50
IGxvZ291dCBieSBzZW5kaW5nIGFuCisgICAgICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdCB3aXRo
IGtub3duIGluY29ycmVjdCBjcmVkZW50aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5
IChzbyB0aGF0CisgICAgICAgICAgICAvLyBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24n
dCBwb3AgdXApLgorICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50
aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIENyZWRlbnRpYWwoZC0+bV91c2VyLCBkLT5tX3Bh
c3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCByZXF1ZXN0LnVybCgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFN0cmluZyB1c2VyID0gZC0+bV91c2VyOworICAgIFN0cmluZyBwYXNz
d29yZCA9IGQtPm1fcGFzczsKKworICAgIGlmICghZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgdXNlciA9IGQtPm1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpOwor
ICAgICAgICBwYXNzd29yZCA9IGQtPm1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKTsKKyAg
ICB9CisKKyAgICBpZiAodXNlci5pc0VtcHR5KCkgJiYgcGFzc3dvcmQuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPigiIiwgIiIpOworCisgICAgcmV0
dXJuIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4odXNlciwgcGFzc3dvcmQpOworfQorCit2b2lk
IFJlc291cmNlSGFuZGxlOjpyZXN0YXJ0UmVxdWVzdFdpdGhDcmVkZW50aWFsKGNvbnN0IFN0cmlu
ZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworCisgICAgaWYgKCFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgYm9vbCBpc1N5bmNSZXF1ZXN0ID0gZC0+bV9jdXJsUmVxdWVzdC0+aXNTeW5jUmVx
dWVzdCgpOworICAgIGQtPm1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOworCisgICAgZC0+bV9jdXJs
UmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1fY3VycmVudFJlcXVlc3QpOworICAgIGQt
Pm1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKKyAgICBkLT5tX2N1
cmxSZXF1ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKK30KKwogdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxz
UG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisg
ICAgYXV0byBsb2NhbFJlcXVlc3QgPSByZXF1ZXN0OwogICAgIFN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50IGNsaWVudDsKICAgICBib29sIGRlZmVyc0xvYWRpbmcgPSBmYWxzZTsKICAgICBib29sIHNo
b3VsZENvbnRlbnRTbmlmZiA9IHRydWU7CiAgICAgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdT
bmlmZiA9IHRydWU7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJl
ZihuZXcgUmVzb3VyY2VIYW5kbGUoY29udGV4dCwgcmVxdWVzdCwgJmNsaWVudCwgZGVmZXJzTG9h
ZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZikpOwog
Ci0gICAgaGFuZGxlLT5kLT5tX2RlbGVnYXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlKGhhbmRsZS5nZXQoKSkpOwotICAgIGhhbmRsZS0+ZC0+bV9kZWxlZ2F0ZS0+
ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOworICAgIGlmIChsb2NhbFJlcXVlc3QudXJsKCkucHJv
dG9jb2xJc0RhdGEoKSkgeworICAgICAgICBoYW5kbGUtPmhhbmRsZURhdGFVUkwoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIElmIGRlZmVyc0xvYWRpbmcgaXMgdHJ1ZSBhbmQg
d2UgY2FsbCBjdXJsX2Vhc3lfcGVyZm9ybQorICAgIC8vIG9uIGEgcGF1c2VkIGhhbmRsZSwgbGli
Y1VSTCB3b3VsZCBkbyB0aGUgdHJhbnNmZXIgYW55d2F5CisgICAgLy8gYW5kIHdlIHdvdWxkIGFz
c2VydCBzbyBmb3JjZSBkZWZlcnNMb2FkaW5nIHRvIGJlIGZhbHNlLgorICAgIGhhbmRsZS0+ZC0+
bV9kZWZlcnNMb2FkaW5nID0gZmFsc2U7CisKKyAgICBoYW5kbGUtPmQtPm1fY3VybFJlcXVlc3Qg
PSBoYW5kbGUtPmNyZWF0ZUN1cmxSZXF1ZXN0KGxvY2FsUmVxdWVzdCk7CisgICAgaGFuZGxlLT5k
LT5tX2N1cmxSZXF1ZXN0LT5zdGFydCh0cnVlKTsKIAogICAgIGVycm9yID0gY2xpZW50LmVycm9y
KCk7CiAgICAgZGF0YS5zd2FwKGNsaWVudC5tdXRhYmxlRGF0YSgpKTsKQEAgLTI2OCw4ICszOTIs
MTcyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91c0Rp
ZFJlY2VpdmVSZXNwb25zZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAg
IGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5wbGF0Zm9ybUNvbnRp
bnVlU3luY2hyb25vdXNEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBjb250aW51ZUFmdGVyRGlk
UmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQWZ0
ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICAvLyBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYW5jZWwgdGhlIGxvYWQu
CisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpIHx8ICFkLT5tX2N1cmxSZXF1ZXN0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5jb21wbGV0ZURpZFJlY2Vp
dmVSZXNwb25zZSgpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRSZWRpcmVjdEFz
R0VUKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBjcm9zc09yaWdpbikKK3sK
KyAgICBpZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgcmVxdWVzdC5odHRwTWV0
aG9kKCkgPT0gIkhFQUQiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlcXVl
c3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLmlzU2VlT3RoZXIoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoKGRlbGVnYXRlKCktPnJlc3BvbnNlKCkuaXNNb3ZlZFBl
cm1hbmVudGx5KCkgfHwgZGVsZWdhdGUoKS0+cmVzcG9uc2UoKS5pc0ZvdW5kKCkpICYmIChyZXF1
ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChjcm9zc09yaWdpbiAmJiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkRFTEVURSIpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZXNv
dXJjZUhhbmRsZTo6d2lsbFNlbmRSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhSZWRpcmVjdHMgPSAyMDsKKworICAgIGlm
IChkLT5tX3JlZGlyZWN0Q291bnQrKyA+IG1heFJlZGlyZWN0cykgeworICAgICAgICBjbGllbnQo
KS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yOjpodHRwRXJyb3IoQ1VSTEVfVE9PX01BTllf
UkVESVJFQ1RTLCBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLnVybCgpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgp
Lmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pOworICAgIFVSTCBuZXdV
UkwgPSBVUkwoZGVsZWdhdGUoKS0+cmVzcG9uc2UoKS51cmwoKSwgbG9jYXRpb24pOworICAgIGJv
b2wgY3Jvc3NPcmlnaW4gPSAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGQtPm1fZmlyc3RS
ZXF1ZXN0LnVybCgpLCBuZXdVUkwpOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3Qg
PSBkLT5tX2ZpcnN0UmVxdWVzdDsKKyAgICBuZXdSZXF1ZXN0LnNldFVSTChuZXdVUkwpOworCisg
ICAgaWYgKHNob3VsZFJlZGlyZWN0QXNHRVQobmV3UmVxdWVzdCwgY3Jvc3NPcmlnaW4pKSB7Cisg
ICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgIG5ld1JlcXVl
c3Quc2V0SFRUUEJvZHkobnVsbHB0cik7CisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQ29u
dGVudFR5cGUoKTsKKyAgICB9CisKKyAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVy
IGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KKyAg
ICBpZiAoIW5ld1VSTC5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3RvY29sSXMobmV3UmVxdWVz
dC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYgY29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVy
cmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KCkpCisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQ
UmVmZXJyZXIoKTsKKworICAgIGQtPm1fdXNlciA9IG5ld1VSTC51c2VyKCk7CisgICAgZC0+bV9w
YXNzID0gbmV3VVJMLnBhc3MoKTsKKyAgICBuZXdSZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7
CisKKyAgICBpZiAoY3Jvc3NPcmlnaW4pIHsKKyAgICAgICAgLy8gSWYgdGhlIG5ldHdvcmsgbGF5
ZXIgY2FycmllcyBvdmVyIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwg
cmVxdWVzdAorICAgICAgICAvLyBpbiBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCwgd2Ugd2FudCB0
byBjbGVhciB0aG9zZSBoZWFkZXJzIGhlcmUuIAorICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRU
UEF1dGhvcml6YXRpb24oKTsKKyAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsK
KyAgICB9CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlQ29weSA9IGRlbGVnYXRlKCkt
PnJlc3BvbnNlKCk7CisgICAgY2xpZW50KCktPndpbGxTZW5kUmVxdWVzdEFzeW5jKHRoaXMsIFdU
Rk1vdmUobmV3UmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2VDb3B5KSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpIHsKKyAg
ICAgICAgY29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVBZnRlcldpbGxTZW5kUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICAvLyB3aWxsU2VuZFJlcXVlc3QgbWlnaHQgY2FuY2VsIHRoZSBsb2FkLgor
ICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSB8fCAhZC0+bV9jdXJsUmVxdWVzdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZC0+bV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVz
dCk7CisKKyAgICBib29sIGlzU3luY1JlcXVlc3QgPSBkLT5tX2N1cmxSZXF1ZXN0LT5pc1N5bmNS
ZXF1ZXN0KCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7CisKKyAgICBkLT5tX2N1
cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QoZC0+bV9jdXJyZW50UmVxdWVzdCk7CisKKyAg
ICBpZiAocHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGQtPm1fY3VycmVudFJlcXVlc3QudXJs
KCksIGRlbGVnYXRlKCktPnJlc3BvbnNlKCkudXJsKCkpKSB7CisgICAgICAgIGF1dG8gY3JlZGVu
dGlhbCA9IGdldENyZWRlbnRpYWwoZC0+bV9jdXJyZW50UmVxdWVzdCwgdHJ1ZSk7CisgICAgICAg
IGQtPm1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRlbnRpYWwuZmlyc3QsIGNyZWRlbnRp
YWwuc2Vjb25kKTsKKyAgICB9CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdGFydChpc1N5bmNS
ZXF1ZXN0KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCgpCit7Cisg
ICAgQVNTRVJUKGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpOworICAg
IFN0cmluZyB1cmwgPSBkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKKworICAgIEFT
U0VSVChjbGllbnQoKSk7CisKKyAgICBhdXRvIGluZGV4ID0gdXJsLmZpbmQoJywnKTsKKyAgICBp
ZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKKyAgICAgICAgY2xpZW50KCktPmNhbm5vdFNob3dVUkwo
dGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcgbWVkaWFUeXBlID0g
dXJsLnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOworICAgIFN0cmluZyBkYXRhID0gdXJsLnN1YnN0
cmluZyhpbmRleCArIDEpOworICAgIGF1dG8gb3JpZ2luYWxTaXplID0gZGF0YS5sZW5ndGgoKTsK
KworICAgIGJvb2wgYmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uo
IjtiYXNlNjQiKTsKKyAgICBpZiAoYmFzZTY0KQorICAgICAgICBtZWRpYVR5cGUgPSBtZWRpYVR5
cGUubGVmdChtZWRpYVR5cGUubGVuZ3RoKCkgLSA3KTsKKworICAgIGlmIChtZWRpYVR5cGUuaXNF
bXB0eSgpKQorICAgICAgICBtZWRpYVR5cGUgPSAidGV4dC9wbGFpbiI7CisKKyAgICBTdHJpbmcg
bWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1lZGlhVHlwZSk7CisgICAg
U3RyaW5nIGNoYXJzZXQgPSBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUobWVkaWFUeXBlKTsK
KworICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgY2hhcnNldCA9ICJVUy1BU0NJ
SSI7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgIHJlc3BvbnNlLnNldE1p
bWVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGNoYXJz
ZXQpOworICAgIHJlc3BvbnNlLnNldFVSTChkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKSk7CisKKyAg
ICBpZiAoYmFzZTY0KSB7CisgICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
ZGF0YSk7CisgICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICAgICAgY29udGlu
dWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAgICB9KTsKKworICAgICAgICAvLyBk
aWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgor
ICAgICAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBvdXQ7Cisg
ICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEsIG91dCwgQmFzZTY0SWdub3JlU3BhY2Vz
QW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAwKQorICAgICAgICAgICAgICAgIGNsaWVudCgp
LT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG91dC5kYXRhKCks
IG91dC5zaXplKCkpLCBvcmlnaW5hbFNpemUpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKGNoYXJzZXQpOworICAgICAgICBkYXRhID0gZGVj
b2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIGVuY29kaW5nKTsKKyAgICAgICAgZGlkUmVjZWl2
ZVJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7CisgICAgICAgICAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNl
KCk7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIGRpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBj
YXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCisgICAgICAgIGlmIChjbGllbnQoKSkgewor
ICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVuY29kaW5nLmVuY29kZShkYXRhLCBVbmVu
Y29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50aXRpZXMpOworICAgICAgICAgICAgaWYgKGVu
Y29kZWREYXRhLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1
ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGVuY29kZWREYXRhKSksIG9y
aWdpbmFsU2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2xpZW50KCkpCisgICAg
ICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjNDQ2NTU2ZmUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAq
IENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBOQVZFUiBDb3Jw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGUuaCIKLQotI2lmIFVTRShDVVJMKQotCi0jaW5jbHVkZSAiQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaCIKLSNpbmNsdWRlICJDb29raWVKYXJDdXJsLmgiCi0jaW5jbHVkZSAiQ3Jl
ZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiQ3VybFJlcXVlc3QuaCIKLSNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgotI2luY2x1ZGUgIk5l
dHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwu
aCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIK
LSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkK
LSAgICA6IG1faGFuZGxlKGhhbmRsZSkKLSAgICAsIG1fZmlyc3RSZXF1ZXN0KGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX2N1cnJlbnRSZXF1ZXN0KGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX3Nob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKGhhbmRsZS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkKLSAgICAs
IG1fdXNlcihoYW5kbGUtPmdldEludGVybmFsKCktPm1fdXNlci5pc29sYXRlZENvcHkoKSkKLSAg
ICAsIG1fcGFzcyhoYW5kbGUtPmdldEludGVybmFsKCktPm1fcGFzcy5pc29sYXRlZENvcHkoKSkK
LSAgICAsIG1faW5pdGlhbENyZWRlbnRpYWwoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2luaXRp
YWxDcmVkZW50aWFsKQotICAgICwgbV9kZWZlcnNMb2FkaW5nKGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KS0+bV9kZWZlcnNMb2FkaW5nKQotewotCi19Ci0KLVJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
Ojp+UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoKQotewotICAgIGlmIChtX2N1cmxSZXF1ZXN0
KQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7Ci19Ci0KLWJvb2wg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6Omhhc0hhbmRsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICEhbV9oYW5kbGU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnJl
bGVhc2VIYW5kbGUoKQotewotICAgIG1faGFuZGxlID0gbnVsbHB0cjsKLX0KLQotdm9pZCBSZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c3RhcnQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICBhdXRvIGNyZWRlbnRpYWwgPSBnZXRDcmVkZW50aWFsKG1fY3VycmVudFJl
cXVlc3QsIGZhbHNlKTsKLQotICAgIG1fY3VybFJlcXVlc3QgPSBjcmVhdGVDdXJsUmVxdWVzdCht
X2N1cnJlbnRSZXF1ZXN0KTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50
aWFsLmZpcnN0LCBjcmVkZW50aWFsLnNlY29uZCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQo
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y2FuY2VsKCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgcmVsZWFzZUhhbmRsZSgpOwotCi0gICAg
aWYgKCFtX2N1cmxSZXF1ZXN0KQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0RGVmZXJzTG9hZGluZyhib29s
IGRlZmVycykKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGRlZmVy
cyA9PSBtX2RlZmVyc0xvYWRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGVmZXJzTG9h
ZGluZyA9IGRlZmVyczsKLQotICAgIGlmICghbV9jdXJsUmVxdWVzdCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fZGVmZXJzTG9hZGluZykKLSAgICAgICAgbV9jdXJsUmVxdWVzdC0+c3Vz
cGVuZCgpOwotICAgIGVsc2UKLSAgICAgICAgbV9jdXJsUmVxdWVzdC0+cmVzdW1lKCk7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldEF1dGhlbnRpY2F0aW9uKGNvbnN0
IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgaWYgKCFtX2N1cmxSZXF1ZXN0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBib29sIGlzU3luY1JlcXVlc3QgPSBtX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0
KCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c2V0
Q2xpZW50KG51bGxwdHIpOwotCi0gICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0
KG1fY3VycmVudFJlcXVlc3QpOwotICAgIG1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKHVzZXIs
IHBhc3N3b3JkKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKLX0K
LQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlzcGF0Y2hTeW5jaHJvbm91c0pv
YigpCi17Ci0gICAgaWYgKG1fY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0RhdGEoKSkg
ewotICAgICAgICBoYW5kbGVEYXRhVVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBJZiBkZWZlcnNMb2FkaW5nIGlzIHRydWUgYW5kIHdlIGNhbGwgY3VybF9lYXN5X3BlcmZv
cm0KLSAgICAvLyBvbiBhIHBhdXNlZCBoYW5kbGUsIGxpYmNVUkwgd291bGQgZG8gdGhlIHRyYW5z
ZmVydCBhbnl3YXkKLSAgICAvLyBhbmQgd2Ugd291bGQgYXNzZXJ0IHNvIGZvcmNlIGRlZmVyc0xv
YWRpbmcgdG8gYmUgZmFsc2UuCi0gICAgbV9kZWZlcnNMb2FkaW5nID0gZmFsc2U7Ci0KLSAgICBt
X2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7Ci0gICAg
bV9jdXJsUmVxdWVzdC0+c3RhcnQodHJ1ZSk7Ci19Ci0KLVJlZjxDdXJsUmVxdWVzdD4gUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gQ3VybENh
Y2hlIDogYXBwZW5kIGFkZGl0aW9uYWwgY2FjaGUgaW5mb3JtYXRpb24KLSAgICBtX2FkZGVkQ2Fj
aGVWYWxpZGF0aW9uSGVhZGVycyA9IGZhbHNlOwotCi0gICAgYm9vbCBoYXNDYWNoZUhlYWRlcnMg
PSByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZN
b2RpZmllZFNpbmNlKSB8fCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlucyhIVFRQ
SGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gpOwotICAgIGlmICghaGFzQ2FjaGVIZWFkZXJzKSB7Ci0g
ICAgICAgIGF1dG8mIGNhY2hlID0gQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCk7Ci0gICAg
ICAgIFVSTCBjYWNoZVVybCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgICAgIGNhY2hlVXJsLnJlbW92
ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgICAgIGlmIChjYWNoZS5pc0NhY2hlZChjYWNo
ZVVybCkpIHsKLSAgICAgICAgICAgIGNhY2hlLmFkZENhY2hlRW50cnlDbGllbnQoY2FjaGVVcmws
IG1faGFuZGxlKTsKLQotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGNhY2hl
LnJlcXVlc3RIZWFkZXJzKGNhY2hlVXJsKSkKLSAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEhU
VFBIZWFkZXJGaWVsZChlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKLQotICAgICAgICAgICAgbV9h
ZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQgc2hvdWxkU3VzcGVuZCA9IG1fZGVmZXJzTG9h
ZGluZyA/IEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kOjpZZXMgOiBDdXJsUmVxdWVzdDo6U2hv
dWxkU3VzcGVuZDo6Tm87Ci0gICAgcmV0dXJuIEN1cmxSZXF1ZXN0OjpjcmVhdGUocmVxdWVzdCwg
dGhpcywgc2hvdWxkU3VzcGVuZCwgQ3VybFJlcXVlc3Q6OkVuYWJsZU11bHRpcGFydDo6WWVzKTsK
LX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y2FuY2VsbGVkT3JDbGllbnRs
ZXNzKCkKLXsKLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHJldHVybiAhbV9oYW5kbGUtPmNsaWVudCgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpjdXJsRGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwg
dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFNlbmREYXRhKG1faGFuZGxl
LCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRs
ZUNvb2tpZUhlYWRlcnMoY29uc3QgQ3VybFJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBzdGF0
aWMgY29uc3QgYXV0byBzZXRDb29raWVIZWFkZXIgPSAic2V0LWNvb2tpZTogIjsKLQotICAgIGF1
dG8mIGRlZmF1bHRTdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCk7Ci0gICAgY29uc3QgQ29va2llSmFyQ3VybCYgY29va2llSmFyID0g
ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKLSAgICBmb3IgKGF1dG8gaGVh
ZGVyIDogcmVzcG9uc2UuaGVhZGVycykgewotICAgICAgICBpZiAoaGVhZGVyLnN0YXJ0c1dpdGhJ
Z25vcmluZ0FTQ0lJQ2FzZShzZXRDb29raWVIZWFkZXIpKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
c2V0Q29va2llU3RyaW5nID0gaGVhZGVyLnJpZ2h0KGhlYWRlci5sZW5ndGgoKSAtIHN0cmxlbihz
ZXRDb29raWVIZWFkZXIpKTsKLSAgICAgICAgICAgIGNvb2tpZUphci5zZXRDb29raWVzRnJvbUhU
VFBSZXNwb25zZShkZWZhdWx0U3RvcmFnZVNlc3Npb24sIHJlc3BvbnNlLnVybCwgc2V0Q29va2ll
U3RyaW5nKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmIHJlY2Vp
dmVkUmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
IW1fZGVmZXJzTG9hZGluZyk7Ci0KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNl
ID0gUmVzb3VyY2VSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNlKTsKLQotICAgIGlmIChtX2N1cmxS
ZXF1ZXN0KQotICAgICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZS5zZXRE
ZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKG1fY3VybFJlcXVlc3QtPmdldE5ldHdvcmtMb2Fk
TWV0cmljcygpKTsKLQotICAgIGhhbmRsZUNvb2tpZUhlYWRlcnMocmVjZWl2ZWRSZXNwb25zZSk7
Ci0KLSAgICBpZiAocmVzcG9uc2UoKS5zaG91bGRSZWRpcmVjdCgpKSB7Ci0gICAgICAgIHdpbGxT
ZW5kUmVxdWVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHJlc3BvbnNl
KCkuaXNVbmF1dGhvcml6ZWQoKSkgewotICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBj
aGFsbGVuZ2UocmVjZWl2ZWRSZXNwb25zZSwgbV9hdXRoRmFpbHVyZUNvdW50LCByZXNwb25zZSgp
LCBtX2hhbmRsZSk7Ci0gICAgICAgIG1faGFuZGxlLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoY2hhbGxlbmdlKTsKLSAgICAgICAgbV9hdXRoRmFpbHVyZUNvdW50Kys7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0gICAg
ICAgIGlmIChyZXNwb25zZSgpLmlzTm90TW9kaWZpZWQoKSkgewotICAgICAgICAgICAgVVJMIGNh
Y2hlVXJsID0gbV9jdXJyZW50UmVxdWVzdC51cmwoKTsKLSAgICAgICAgICAgIGNhY2hlVXJsLnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgICAgICAgICBpZiAoQ3VybENhY2hlTWFu
YWdlcjo6c2luZ2xldG9uKCkuZ2V0Q2FjaGVkUmVzcG9uc2UoY2FjaGVVcmwsIHJlc3BvbnNlKCkp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlKCkuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsK
LSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UoKS5zZXRIVFRQU3RhdHVzVGV4dCgiT0siKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBD
dXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZlUmVzcG9uc2UoKm1faGFuZGxl
LCByZXNwb25zZSgpKTsKLQotICAgICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCpt
X2hhbmRsZSk7Ci0gICAgICAgIG1faGFuZGxlLT5kaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VS
ZXNwb25zZShyZXNwb25zZSgpKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0gewotICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOwotICAg
ICAgICB9KTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1
cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRp
ZFJlY2VpdmVEYXRhKCptX2hhbmRsZSwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsK
LSAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFdURk1v
dmUoYnVmZmVyKSwgYnVmZmVyLT5zaXplKCkpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpjdXJsRGlkQ29tcGxldGUoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2N1cmxSZXF1ZXN0KQotICAgICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwo
KS0+bV9yZXNwb25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKG1fY3VybFJlcXVl
c3QtPmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKLQotICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50
KCkpIHsKLSAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkRmluaXNoTG9h
ZGluZygqbV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZpbmlzaExv
YWRpbmcobV9oYW5kbGUpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VF
cnJvcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbmNlbGxl
ZE9yQ2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDdXJsQ2FjaGVNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5kaWRGYWlsKCptX2hhbmRsZSk7Ci0gICAgbV9oYW5kbGUtPmNsaWVudCgp
LT5kaWRGYWlsKG1faGFuZGxlLCByZXNvdXJjZUVycm9yKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhh
bmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3Bv
bnNlKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnBsYXRmb3JtQ29u
dGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLQotICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVBZnRlckRpZFJlY2Vp
dmVSZXNwb25zZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIGNv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhbmNlbCB0aGUgbG9hZC4KLSAgICBpZiAo
Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCkgfHwgIW1fY3VybFJlcXVlc3QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY3VybFJlcXVlc3QtPmNvbXBsZXRlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci19
Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNob3VsZFJlZGlyZWN0QXNHRVQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGNyb3NzT3JpZ2luKQotewotICAg
IGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCByZXF1ZXN0Lmh0dHBNZXRob2Qo
KSA9PSAiSEVBRCIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcmVxdWVzdC51
cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgaWYgKHJlc3BvbnNlKCkuaXNTZWVPdGhlcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmICgocmVzcG9uc2UoKS5pc01vdmVkUGVybWFuZW50bHkoKSB8fCByZXNwb25zZSgpLmlz
Rm91bmQoKSkgJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgaWYgKGNyb3NzT3JpZ2luICYmIChyZXF1ZXN0Lmh0dHBNZXRob2Qo
KSA9PSAiREVMRVRFIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp3aWxsU2VuZFJlcXVlc3Qo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50
IG1heFJlZGlyZWN0cyA9IDIwOwotCi0gICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVk
aXJlY3RzKSB7Ci0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFpbChtX2hhbmRsZSwg
UmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKENVUkxFX1RPT19NQU5ZX1JFRElSRUNUUywgcmVzcG9u
c2UoKS51cmwoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIGxvY2F0
aW9uID0gcmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkxvY2F0aW9u
KTsKLSAgICBVUkwgbmV3VVJMID0gVVJMKG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3Bv
bnNlLnVybCgpLCBsb2NhdGlvbik7Ci0gICAgYm9vbCBjcm9zc09yaWdpbiA9ICFwcm90b2NvbEhv
c3RBbmRQb3J0QXJlRXF1YWwobV9maXJzdFJlcXVlc3QudXJsKCksIG5ld1VSTCk7Ci0KLSAgICBS
ZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IG1fZmlyc3RSZXF1ZXN0OwotICAgIG5ld1JlcXVl
c3Quc2V0VVJMKG5ld1VSTCk7Ci0KLSAgICBpZiAoc2hvdWxkUmVkaXJlY3RBc0dFVChuZXdSZXF1
ZXN0LCBjcm9zc09yaWdpbikpIHsKLSAgICAgICAgbmV3UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJH
RVQiKTsKLSAgICAgICAgbmV3UmVxdWVzdC5zZXRIVFRQQm9keShudWxscHRyKTsKLSAgICAgICAg
bmV3UmVxdWVzdC5jbGVhckhUVFBDb250ZW50VHlwZSgpOwotICAgIH0KLQotICAgIC8vIFNob3Vs
ZCBub3Qgc2V0IFJlZmVyZXIgYWZ0ZXIgYSByZWRpcmVjdCBmcm9tIGEgc2VjdXJlIHJlc291cmNl
IHRvIG5vbi1zZWN1cmUgb25lLgotICAgIGlmICghbmV3VVJMLnByb3RvY29sSXMoImh0dHBzIikg
JiYgcHJvdG9jb2xJcyhuZXdSZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLCAiaHR0cHMiKSAmJiBtX2hh
bmRsZS0+Y29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
KCkpCi0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKLQotICAgIG1fdXNl
ciA9IG5ld1VSTC51c2VyKCk7Ci0gICAgbV9wYXNzID0gbmV3VVJMLnBhc3MoKTsKLSAgICBuZXdS
ZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0KLSAgICBpZiAoY3Jvc3NPcmlnaW4pIHsKLSAg
ICAgICAgLy8gSWYgdGhlIG5ldHdvcmsgbGF5ZXIgY2FycmllcyBvdmVyIGF1dGhlbnRpY2F0aW9u
IGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVzdAotICAgICAgICAvLyBpbiBhIGNyb3Nz
LW9yaWdpbiByZWRpcmVjdCwgd2Ugd2FudCB0byBjbGVhciB0aG9zZSBoZWFkZXJzIGhlcmUuIAot
ICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUEF1dGhvcml6YXRpb24oKTsKLSAgICAgICAgbmV3
UmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlQ29weSA9IHJlc3BvbnNlKCk7Ci0gICAgbV9oYW5kbGUtPmNsaWVudCgpLT53aWxs
U2VuZFJlcXVlc3RBc3luYyhtX2hhbmRsZSwgV1RGTW92ZShuZXdSZXF1ZXN0KSwgV1RGTW92ZShy
ZXNwb25zZUNvcHkpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoUmVz
b3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkgewotICAgICAgICBjb250aW51ZVdpbGxTZW5kUmVxdWVz
dChXVEZNb3ZlKHJlcXVlc3QpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgY29udGludWVBZnRl
cldpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhh
bmRsZUN1cmxEZWxlZ2F0ZTo6Y29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QmJiByZXF1ZXN0KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAv
LyB3aWxsU2VuZFJlcXVlc3QgbWlnaHQgY2FuY2VsIHRoZSBsb2FkLgotICAgIGlmIChjYW5jZWxs
ZWRPckNsaWVudGxlc3MoKSB8fCAhbV9jdXJsUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCk7Ci0KLSAgICBib29sIGlzU3lu
Y1JlcXVlc3QgPSBtX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7Ci0gICAgbV9jdXJsUmVx
dWVzdC0+Y2FuY2VsKCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIpOwot
Ci0gICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3Qp
OwotCi0gICAgaWYgKHByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX2N1cnJlbnRSZXF1ZXN0
LnVybCgpLCByZXNwb25zZSgpLnVybCgpKSkgewotICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBn
ZXRDcmVkZW50aWFsKG1fY3VycmVudFJlcXVlc3QsIHRydWUpOwotICAgICAgICBtX2N1cmxSZXF1
ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50aWFsLmZpcnN0LCBjcmVkZW50aWFsLnNlY29uZCk7Ci0g
ICAgfQotCi0gICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQoaXNTeW5jUmVxdWVzdCk7Ci19Ci0KLVJl
c291cmNlUmVzcG9uc2UmIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpyZXNwb25zZSgpCi17
Ci0gICAgcmV0dXJuIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5kbGVEYXRhVVJMKCkKLXsKLSAgICBB
U1NFUlQobV9maXJzdFJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0RhdGEoKSk7Ci0gICAgU3RyaW5n
IHVybCA9IG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpOwotCi0gICAgQVNTRVJUKG1faGFu
ZGxlLT5jbGllbnQoKSk7Ci0KLSAgICBhdXRvIGluZGV4ID0gdXJsLmZpbmQoJywnKTsKLSAgICBp
ZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKLSAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5jYW5u
b3RTaG93VVJMKG1faGFuZGxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmlu
ZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3RyaW5nKDUsIGluZGV4IC0gNSk7Ci0gICAgU3RyaW5nIGRh
dGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSk7Ci0gICAgYXV0byBvcmlnaW5hbFNpemUgPSBk
YXRhLmxlbmd0aCgpOwotCi0gICAgYm9vbCBiYXNlNjQgPSBtZWRpYVR5cGUuZW5kc1dpdGhJZ25v
cmluZ0FTQ0lJQ2FzZSgiO2Jhc2U2NCIpOwotICAgIGlmIChiYXNlNjQpCi0gICAgICAgIG1lZGlh
VHlwZSA9IG1lZGlhVHlwZS5sZWZ0KG1lZGlhVHlwZS5sZW5ndGgoKSAtIDcpOwotCi0gICAgaWYg
KG1lZGlhVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIG1lZGlhVHlwZSA9ICJ0ZXh0L3BsYWluIjsK
LQotICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUobWVk
aWFUeXBlKTsKLSAgICBTdHJpbmcgY2hhcnNldCA9IGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlw
ZShtZWRpYVR5cGUpOwotCi0gICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgpKQotICAgICAgICBjaGFy
c2V0ID0gIlVTLUFTQ0lJIjsKLQotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0gICAg
cmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwotICAgIHJlc3BvbnNlLnNldFRleHRFbmNv
ZGluZ05hbWUoY2hhcnNldCk7Ci0gICAgcmVzcG9uc2Uuc2V0VVJMKG1fZmlyc3RSZXF1ZXN0LnVy
bCgpKTsKLQotICAgIGlmIChiYXNlNjQpIHsKLSAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyhkYXRhKTsKLSAgICAgICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVSZXNwb25zZShX
VEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0g
ewotICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOwotICAgICAg
ICB9KTsKLQotICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNs
aWVudCB0byBiZSBkZWxldGVkLgotICAgICAgICBpZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0g
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OwotICAgICAgICAgICAgaWYgKGJhc2U2NERlY29k
ZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xpbmVzKSAmJiBvdXQuc2l6ZSgp
ID4gMCkKLSAgICAgICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVCdWZm
ZXIobV9oYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKG91dC5kYXRhKCksIG91dC5zaXplKCkp
LCBvcmlnaW5hbFNpemUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVGV4dEVu
Y29kaW5nIGVuY29kaW5nKGNoYXJzZXQpOwotICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKGRhdGEsIGVuY29kaW5nKTsKLSAgICAgICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVS
ZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0gewotICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgp
OwotICAgICAgICB9KTsKLQotICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1
c2UgdGhlIGNsaWVudCB0byBiZSBkZWxldGVkLgotICAgICAgICBpZiAobV9oYW5kbGUtPmNsaWVu
dCgpKSB7Ci0gICAgICAgICAgICBhdXRvIGVuY29kZWREYXRhID0gZW5jb2RpbmcuZW5jb2RlKGRh
dGEsIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVuY29kZWRFbnRpdGllcyk7Ci0gICAgICAgICAg
ICBpZiAoZW5jb2RlZERhdGEuc2l6ZSgpKQotICAgICAgICAgICAgICAgIG1faGFuZGxlLT5jbGll
bnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RG
TW92ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNpemUpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5k
aWRGaW5pc2hMb2FkaW5nKG1faGFuZGxlKTsKLX0KLQotc3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
PiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Z2V0Q3JlZGVudGlhbChSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGJvb2wgcmVkaXJlY3QpCi17Ci0gICAgLy8gbV91c2VyL21fcGFzcyBhcmUg
Y3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50
cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgotICAgIFN0cmluZyBwYXJ0aXRpb24g
PSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7Ci0KLSAgICBpZiAobV9zaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZSkgewotICAgICAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3MuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3Ig
VVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQg
Zm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAgICAgICAgICAgLy8gdHJ5IGFuZCBy
ZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcu
Ci0gICAgICAgICAgICBtX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmRl
ZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOwot
ICAgICAgICB9IGVsc2UgaWYgKCFyZWRpcmVjdCkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUg
aXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBz
dG9yZWQgY3JlZGVudGlhbHMKLSAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVz
dC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcg
YW4KLSAgICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNy
ZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQKLSAgICAgICAg
ICAgIC8vIGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCkuCi0gICAgICAg
ICAgICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBh
cnRpdGlvbiwgQ3JlZGVudGlhbChtX3VzZXIsIG1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNl
Tm9uZSksIHJlcXVlc3QudXJsKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIHVz
ZXIgPSBtX3VzZXI7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gbV9wYXNzOwotCi0gICAgaWYgKCFt
X2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgewotICAgICAgICB1c2VyID0gbV9pbml0aWFs
Q3JlZGVudGlhbC51c2VyKCk7Ci0gICAgICAgIHBhc3N3b3JkID0gbV9pbml0aWFsQ3JlZGVudGlh
bC5wYXNzd29yZCgpOwotICAgIH0KLQotICAgIGlmICh1c2VyLmlzRW1wdHkoKSAmJiBwYXNzd29y
ZC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KCIi
LCAiIik7Ci0KLSAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPih1c2VyLCBwYXNz
d29yZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmZm
YTUzYmY5MS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBOQVZFUiBDb3JwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ1VSTCkKLQot
I2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKLSNpbmNsdWRlICJDdXJsUmVxdWVzdENsaWVudC5oIgot
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEN1cmxSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VIYW5kbGU7Ci1jbGFzcyBSZXNvdXJjZVJl
c3BvbnNlOwotCi1jbGFzcyBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZSBmaW5hbCA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZT4sIHB1Ymxp
YyBDdXJsUmVxdWVzdENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGUoUmVzb3VyY2VIYW5kbGUqKTsKLSAgICB+UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUo
KTsKLQotICAgIHZvaWQgcmVmKCkgb3ZlcnJpZGUgeyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZT46OnJlZigpOyB9Ci0gICAgdm9pZCBkZXJlZigpIG92ZXJy
aWRlIHsgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+Ojpk
ZXJlZigpOyB9Ci0KLSAgICBib29sIGhhc0hhbmRsZSgpIGNvbnN0OwotICAgIHZvaWQgcmVsZWFz
ZUhhbmRsZSgpOwotCi0gICAgdm9pZCBzdGFydCgpOwotICAgIHZvaWQgY2FuY2VsKCk7Ci0KLSAg
ICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7Ci0gICAgdm9pZCBzZXRBdXRoZW50aWNhdGlv
bihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hTeW5j
aHJvbm91c0pvYigpOwotCi0gICAgdm9pZCBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwot
ICAgIHZvaWQgcGxhdGZvcm1Db250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2ZVJlc3BvbnNlKCk7
Ci0KLSAgICB2b2lkIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmKTsK
LQotcHJpdmF0ZToKLSAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KLSAgICBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSgpOwotCi0gICAgc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBn
ZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYsIGJvb2wpOwotCi0gICAgYm9vbCBjYW5jZWxs
ZWRPckNsaWVudGxlc3MoKTsKLQotICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRlQ3VybFJlcXVl
c3QoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjdXJsRGlkU2VuZERhdGEodW5zaWduZWQg
bG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2Vu
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxS
ZXNwb25zZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNo
YXJlZEJ1ZmZlcj4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjdXJsRGlkQ29tcGxldGUoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3Im
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgp
OwotCi0gICAgYm9vbCBzaG91bGRSZWRpcmVjdEFzR0VUKGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGJvb2wgY3Jvc3NPcmlnaW4pOwotICAgIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KCk7Ci0gICAgdm9p
ZCBjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmKTsKLQotICAg
IHZvaWQgaGFuZGxlRGF0YVVSTCgpOwotCi0gICAgLy8gVXNlZCBieSBtYWluIHRocmVhZC4KLSAg
ICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7Ci0gICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNv
dW50IHsgMCB9OwotICAgIHVuc2lnbmVkIG1fcmVkaXJlY3RDb3VudCB7IDAgfTsKLQotICAgIFJl
c291cmNlUmVxdWVzdCBtX2ZpcnN0UmVxdWVzdDsKLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJy
ZW50UmVxdWVzdDsKLSAgICBib29sIG1fc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U7Ci0gICAg
U3RyaW5nIG1fdXNlcjsKLSAgICBTdHJpbmcgbV9wYXNzOwotICAgIENyZWRlbnRpYWwgbV9pbml0
aWFsQ3JlZGVudGlhbDsKLSAgICBib29sIG1fZGVmZXJzTG9hZGluZzsKLSAgICBib29sIG1fYWRk
ZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzIHsgZmFsc2UgfTsKLSAgICBSZWZQdHI8Q3VybFJlcXVl
c3Q+IG1fY3VybFJlcXVlc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
Zgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333926</attachid>
            <date>2018-02-15 11:43:31 -0800</date>
            <delta_ts>2018-02-15 11:56:48 -0800</delta_ts>
            <desc>Fix reviewed points</desc>
            <filename>182578.diff</filename>
            <type>text/plain</type>
            <size>68850</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzJiNWExMjg1Ni4uNTI2ZTlmMzFjZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NCBAQAorMjAxOC0wMi0xNSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFVuaWZ5IGxvZ2ljIG9mIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlIGludG8gUmVzb3VyY2VIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU3OAorCisgICAgICAgIFJlY29uc3RydWN0IHRoZSBj
bGFzc2VzIHRvIG1hdGNoIEN1cmwgcG9ydCBuZXR3b3JrIGxheWVyIG1vcmUgc2ltaWxhcgorICAg
ICAgICBzdHJ1Y3R1cmUgd2l0aCBvdGhlciBwb3J0cy4gTW92ZSBDdXJsUmVxdWVzdCBoYW5kbGlu
ZyBpbnRvIFJlc291cmNlSGFuZGxlCisgICAgICAgIGFuZCBtYWtlcyBDdXJsUmVzb3VyY2VIYW5k
bGVEZWxlZ2F0ZSBzaW1wbGUgbGlmZSBjeWNsZS4gQWxzbyBpdHMgZHV0eSBpcworICAgICAgICBm
b3IgbW9zdCBvZiBpbmNvbWluZyBkYXRhIGFuZCBldmVudCBoYW5kbGluZyBmcm9tIEN1clJlcXVl
c3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUncyBubyBuZXcgYmVoYXZpb3IuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9DdXJsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2Fj
aGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjcmVhdGVDdXJsUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRGYWlsV2l0aEVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpDdXJsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y2FuY2VsKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpjYWxsQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxSZXF1ZXN0Ojp3aWxsU2VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpkaWRSZWNlaXZlRGF0YUZyb21NdWx0aXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJl
cXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVl
c3Q6Omludm9rZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjppbnZhbGlkYXRlQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpzZXRDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OkN1
cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJj
ZUhhbmRsZURlbGVnYXRlOjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFu
ZGxlRGVsZWdhdGU6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRs
ZURlbGVnYXRlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmNsaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6ZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
UmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y3VybERpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmhhbmRsZUNvb2tpZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNl
SGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkQ29tcGxl
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxE
aWRGYWlsV2l0aEVycm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJl
c291cmNlSGFuZGxlRGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVz
b3VyY2VIYW5kbGVEZWxlZ2F0ZTo6cmVzcG9uc2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhbmNlbGxlZE9yQ2xpZW50bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNl
dERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmdldENyZWRlbnRpYWwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1D
b250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzaG91bGRSZWRpcmVjdEFzR0VUKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlLmg6IFJlbW92ZWQuCisKIDIwMTgtMDItMDcgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IG1fdGltZU9yaWdp
biBpbiBQZXJmb3JtYW5jZTo6UGVyZm9ybWFuY2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21h
a2UKaW5kZXggNzNjMDE0ZjE1YzEuLjRhODJlYjA5OWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1
cmwuY21ha2UKQEAgLTE4LDYgKzE4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNdWx0aXBhcnRIYW5kbGUuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdFNjaGVkdWxlci5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxTU0xIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJp
Zmllci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvRE5TQ3VybC5jcHAKQEAgLTI1LDcg
KzI2LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Byb3h5U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VFcnJvckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VD
dXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Q3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU3luY2hyb25vdXNMb2FkZXJDbGll
bnRDdXJsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCmluZGV4IDYyMTU0MDcxNGY2Li40OWFhNzk5MzVlMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAtMzYsNiArMzYs
MTAgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAorI2lmIFVTRShDVVJM
KQorI2luY2x1ZGUgIkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgiCisjZW5kaWYKKwogI2lm
IFVTRShTT1VQKQogdHlwZWRlZiBzdHJ1Y3QgX0dUbHNDZXJ0aWZpY2F0ZSBHVGxzQ2VydGlmaWNh
dGU7CiB0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CkBAIC05Miw2ICs5
NiwxMSBAQCBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBj
bGFzcyBUaW1lcjsKIAorI2lmIFVTRShDVVJMKQorY2xhc3MgQ3VybFJlcXVlc3Q7CitjbGFzcyBD
dXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTsKKyNlbmRpZgorCiBjbGFzcyBSZXNvdXJjZUhhbmRs
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPiwgcHVibGljIEF1dGhlbnRpY2F0
aW9uQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFJl
c291cmNlSGFuZGxlPiBjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBz
aG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYpOwpAQCAt
MTg1LDYgKzE5NCwxNSBAQCBwdWJsaWM6CiAgICAgTW9ub3RvbmljVGltZSBtX3JlcXVlc3RUaW1l
OwogI2VuZGlmCiAKKyNpZiBVU0UoQ1VSTCkKKyAgICBib29sIGNhbmNlbGxlZE9yQ2xpZW50bGVz
cygpOworICAgIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKiBkZWxlZ2F0ZSgpOworCisgICAg
dm9pZCBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgdm9pZCB3aWxsU2Vu
ZFJlcXVlc3QoKTsKKyAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0JiYpOworI2VuZGlmCisKICAgICBib29sIGhhc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwpAQCAtMjc4LDYgKzI5NiwxNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgdGltZW91dEZpcmVkKCk7CiAjZW5kaWYKIAorI2lmIFVTRShDVVJMKQor
ICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7
CisKKyAgICBib29sIHNob3VsZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Ym9vbCBjcm9zc09yaWdpbik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4+IGdldENyZWRlbnRpYWwoUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCk7CisgICAgdm9p
ZCByZXN0YXJ0UmVxdWVzdFdpdGhDcmVkZW50aWFsKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3Qg
U3RyaW5nJiBwYXNzd29yZCk7CisKKyAgICB2b2lkIGhhbmRsZURhdGFVUkwoKTsKKyNlbmRpZgor
CiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IGQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAppbmRl
eCA1MThjZjljOWNiZi4uMDA4NGI2MmNkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC0zNywxMyAr
MzcsOCBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CiAjZW5kaWYKIAot
I2lmIFVTRShDVVJMKSAmJiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNp
bmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQogI2lmIFVTRShDVVJMKQotI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKICNl
bmRpZgogCiAjaWYgVVNFKFNPVVApCkBAIC04MSw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2RlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZykKICAgICAgICAgLCBtX3Nob3VsZENvbnRl
bnRTbmlmZihzaG91bGRDb250ZW50U25pZmYpCiAgICAgICAgICwgbV9zaG91bGRDb250ZW50RW5j
b2RpbmdTbmlmZihzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZikKLSNpZiBVU0UoQ0ZVUkxDT05O
RUNUSU9OKQorI2lmIFVTRShDRlVSTENPTk5FQ1RJT04pIHx8IFVTRShDVVJMKQogICAgICAgICAs
IG1fY3VycmVudFJlcXVlc3QocmVxdWVzdCkKICNlbmRpZgogI2lmIFVTRShTT1VQKQpAQCAtMTMy
LDggKzEyNywxNCBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25S
ZWY+IG1fc3RvcmFnZVNlc3Npb247CiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKLSAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+IG1fZGVsZWdhdGU7Ci0gICAgUmVzb3VyY2VSZXNw
b25zZSBtX3Jlc3BvbnNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJsUmVzb3VyY2VIYW5kbGVE
ZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsKKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50
UmVxdWVzdDsKKyAgICBib29sIG1fY2FuY2VsbGVkIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBt
X3JlZGlyZWN0Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsg
MCB9OworICAgIGJvb2wgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgeyBmYWxzZSB9Owor
ICAgIFJlZlB0cjxDdXJsUmVxdWVzdD4gbV9jdXJsUmVxdWVzdDsKICNlbmRpZgogCiAjaWYgVVNF
KFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENhY2hlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybENhY2hlTWFuYWdlci5jcHAKaW5kZXggOWFjZDE5NWUyODUuLmE4ZGViOTg4ZTFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hl
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDYWNoZU1hbmFnZXIuY3BwCkBAIC0xOTksMTAgKzE5OSw2IEBAIHZvaWQgQ3VybENhY2hlTWFu
YWdlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlJiBqb2IsIFJlc291cmNlUmVz
cG9uc2UmCiAgICAgaWYgKG1fZGlzYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2IuZ2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQtPm1f
ZGVsZWdhdGUtPmhhc0hhbmRsZSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBjb25zdCBTdHJp
bmcmIHVybCA9IGpvYi5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKIAogICAgIHJlbW92
ZUNhY2hlRW50cnlDbGllbnQodXJsLCAmam9iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKaW5kZXggYzAzMzUzOGFhNWIu
LjE4NjQyMGFmZGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQoKQogewogICAgIGlmIChtX2N1cmxS
ZXF1ZXN0KQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7CisgICAg
ICAgIG1fY3VybFJlcXVlc3QtPmludmFsaWRhdGVDbGllbnQoKTsKIH0KIAogdm9pZCBDdXJsRG93
bmxvYWQ6OmluaXQoQ3VybERvd25sb2FkTGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBVUkwmIHVy
bCkKQEAgLTc2LDEwICs3NiwxMSBAQCBib29sIEN1cmxEb3dubG9hZDo6Y2FuY2VsKCkKIAogUmVm
PEN1cmxSZXF1ZXN0PiBDdXJsRG93bmxvYWQ6OmNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0
LCB0aGlzKTsKKyAgICBhdXRvIGN1cmxSZXF1ZXN0ID0gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1
ZXN0LCAqdGhpcyk7CisgICAgcmV0dXJuIGN1cmxSZXF1ZXN0OwogfQogCi12b2lkIEN1cmxEb3du
bG9hZDo6Y3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNl
KQordm9pZCBDdXJsRG93bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoQ3VybFJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIApAQCAtOTYsMTEgKzk3LDExIEBAIHZvaWQgQ3VybERvd25sb2FkOjpj
dXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCiAgICAg
aWYgKG1fbGlzdGVuZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRpZFJlY2VpdmVSZXNwb25zZSht
X3Jlc3BvbnNlKTsKIAotICAgIG1fY3VybFJlcXVlc3QtPmNvbXBsZXRlRGlkUmVjZWl2ZVJlc3Bv
bnNlKCk7CisgICAgcmVxdWVzdC5jb21wbGV0ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogfQogCiAK
LXZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVy
PiYmIGJ1ZmZlcikKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihDdXJs
UmVxdWVzdCYgcmVxdWVzdCwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMTExLDcgKzExMiw3IEBAIHZvaWQgQ3VybERvd25s
b2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKICAg
ICAgICAgbV9saXN0ZW5lci0+ZGlkUmVjZWl2ZURhdGFPZkxlbmd0aChidWZmZXItPnNpemUoKSk7
CiB9CiAKLXZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkQ29tcGxldGUoKQordm9pZCBDdXJsRG93
bmxvYWQ6OmN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xMTksMjMgKzEyMCwyMyBAQCB2b2lkIEN1cmxEb3du
bG9hZDo6Y3VybERpZENvbXBsZXRlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2Rl
c3RpbmF0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9jdXJsUmVxdWVzdCAmJiAhbV9j
dXJsUmVxdWVzdC0+Z2V0RG93bmxvYWRlZEZpbGVQYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUobV9jdXJsUmVxdWVzdC0+Z2V0RG93bmxvYWRlZEZpbGVQ
YXRoKCksIG1fZGVzdGluYXRpb24pOworICAgICAgICBpZiAoIXJlcXVlc3QuZ2V0RG93bmxvYWRl
ZEZpbGVQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUo
cmVxdWVzdC5nZXREb3dubG9hZGVkRmlsZVBhdGgoKSwgbV9kZXN0aW5hdGlvbik7CiAgICAgfQog
CiAgICAgaWYgKG1fbGlzdGVuZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRpZEZpbmlzaCgpOwog
fQogCi12b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkRmFpbFdp
dGhFcnJvcihDdXJsUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3Vy
Y2VFcnJvcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKG1faXND
YW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RlbGV0ZXNGaWxlVXBvbkZh
aWx1cmUgJiYgbV9jdXJsUmVxdWVzdCAmJiAhbV9jdXJsUmVxdWVzdC0+Z2V0RG93bmxvYWRlZEZp
bGVQYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fY3Vy
bFJlcXVlc3QtPmdldERvd25sb2FkZWRGaWxlUGF0aCgpKTsKKyAgICBpZiAobV9kZWxldGVzRmls
ZVVwb25GYWlsdXJlICYmICFyZXF1ZXN0LmdldERvd25sb2FkZWRGaWxlUGF0aCgpLmlzRW1wdHko
KSkKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShyZXF1ZXN0LmdldERvd25sb2FkZWRG
aWxlUGF0aCgpKTsKIAogICAgIGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xpc3RlbmVyLT5k
aWRGYWlsKCk7CkBAIC0xOTQsNyArMTk1LDYgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OndpbGxTZW5k
UmVxdWVzdCgpCiAgICAgfQogCiAgICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci0gICAgbV9j
dXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIpOwogCiAgICAgbV9jdXJsUmVxdWVzdCA9IGNy
ZWF0ZUN1cmxSZXF1ZXN0KG5ld1JlcXVlc3QpOwogICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25s
b2FkLmgKaW5kZXggOGFhZjcwZmIwZjIuLmM2ZjVjNTk2ZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC03MCwxMSAr
NzAsMTEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRl
Q3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjdXJsRGlkU2VuZERhdGEo
dW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY3VybERpZENvbXBsZXRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
dXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBjdXJsRGlkU2VuZERhdGEoQ3VybFJlcXVlc3QmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVu
c2lnbmVkIGxvbmcgbG9uZykgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2ZVJl
c3BvbnNlKEN1cmxSZXF1ZXN0JiwgY29uc3QgQ3VybFJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihDdXJsUmVxdWVzdCYsIFJlZjxTaGFyZWRCdWZmZXI+
JiYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZENvbXBsZXRlKEN1cmxSZXF1ZXN0Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2hvdWxkUmVkaXJlY3RBc0dF
VChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGNyb3NzT3JpZ2luKTsKICAgICB2b2lkIHdp
bGxTZW5kUmVxdWVzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsUmVxdWVzdC5jcHAKaW5kZXggZjNlYmQ2OGY3MWUuLjAzNjUzN2Y4YTUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVx
dWVzdC5jcHAKQEAgLTM5LDEzICszOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEN1cmxS
ZXF1ZXN0OjpDdXJsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmcmVxdWVzdCwgQ3VybFJl
cXVlc3RDbGllbnQqIGNsaWVudCwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJsZU11bHRp
cGFydCkKICAgICA6IG1fcmVxdWVzdChyZXF1ZXN0Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9j
bGllbnQoY2xpZW50KQogICAgICwgbV9zaG91bGRTdXNwZW5kKHNob3VsZFN1c3BlbmQpCiAgICAg
LCBtX2VuYWJsZU11bHRpcGFydChlbmFibGVNdWx0aXBhcnQpCiAgICAgLCBtX2Zvcm1EYXRhU3Ry
ZWFtKG1fcmVxdWVzdC5odHRwQm9keSgpKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBzZXRDbGllbnQoY2xpZW50KTsKIH0KIAogdm9pZCBDdXJsUmVxdWVzdDo6c2V0VXNl
clBhc3MoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQpAQCAtMTI1
LDYgKzEyNCw3IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmNhbmNlbCgpCiAKICAgICBzZXRSZXF1ZXN0
UGF1c2VkKGZhbHNlKTsKICAgICBzZXRDYWxsYmFja1BhdXNlZChmYWxzZSk7CisgICAgaW52YWxp
ZGF0ZUNsaWVudCgpOwogfQogCiB2b2lkIEN1cmxSZXF1ZXN0OjpzdXNwZW5kKCkKQEAgLTE0Miwx
OCArMTQyLDE4IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OnJlc3VtZSgpCiB9CiAKIC8qIGB0aGlzYCBp
cyBwcm90ZWN0ZWQgaW5zaWRlIHRoaXMgbWV0aG9kLiAqLwotdm9pZCBDdXJsUmVxdWVzdDo6Y2Fs
bENsaWVudChXVEY6OkZ1bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3RDbGllbnQmKT4gdGFzaykKK3Zv
aWQgQ3VybFJlcXVlc3Q6OmNhbGxDbGllbnQoV1RGOjpGdW5jdGlvbjx2b2lkKEN1cmxSZXF1ZXN0
JiwgQ3VybFJlcXVlc3RDbGllbnQmKT4gdGFzaykKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkp
IHsKICAgICAgICAgaWYgKEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQgPSBtX2NsaWVudCkgewog
ICAgICAgICAgICAgUmVmUHRyPEN1cmxSZXF1ZXN0Q2xpZW50PiBwcm90ZWN0ZWRDbGllbnQoY2xp
ZW50KTsKLSAgICAgICAgICAgIHRhc2soKmNsaWVudCk7CisgICAgICAgICAgICB0YXNrKCp0aGlz
LCAqY2xpZW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFz
ayldKCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFzayldKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBpZiAoQ3VybFJlcXVlc3RDbGllbnQqIGNsaWVudCA9IHByb3RlY3RlZFRo
aXMtPm1fY2xpZW50KSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPEN1cmxSZXF1ZXN0Q2xpZW50
PiBwcm90ZWN0ZWRDbGllbnQoY2xpZW50KTsKLSAgICAgICAgICAgICAgICB0YXNrKCpjbGllbnQp
OworICAgICAgICAgICAgICAgIHRhc2soKnRoaXMsICpjbGllbnQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9KTsKICAgICB9CkBAIC0yNTksOCArMjU5LDggQEAgc2l6ZV90IEN1cmxSZXF1ZXN0
Ojp3aWxsU2VuZERhdGEoY2hhciogYnVmZmVyLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVt
YmVyT2YKICAgICAgICAgcmV0dXJuIENVUkxfUkVBREZVTkNfQUJPUlQ7CiAgICAgfQogCi0gICAg
Y2FsbENsaWVudChbdGhpcywgdG90YWxSZWFkU2l6ZSA9IG1fZm9ybURhdGFTdHJlYW0udG90YWxS
ZWFkU2l6ZSgpLCB0b3RhbFNpemUgPSBtX2Zvcm1EYXRhU3RyZWFtLnRvdGFsU2l6ZSgpXShDdXJs
UmVxdWVzdENsaWVudCYgY2xpZW50KSB7Ci0gICAgICAgIGNsaWVudC5jdXJsRGlkU2VuZERhdGEo
dG90YWxSZWFkU2l6ZSwgdG90YWxTaXplKTsKKyAgICBjYWxsQ2xpZW50KFt0b3RhbFJlYWRTaXpl
ID0gbV9mb3JtRGF0YVN0cmVhbS50b3RhbFJlYWRTaXplKCksIHRvdGFsU2l6ZSA9IG1fZm9ybURh
dGFTdHJlYW0udG90YWxTaXplKCldKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENs
aWVudCYgY2xpZW50KSB7CisgICAgICAgIGNsaWVudC5jdXJsRGlkU2VuZERhdGEocmVxdWVzdCwg
dG90YWxSZWFkU2l6ZSwgdG90YWxTaXplKTsKICAgICB9KTsKIAogICAgIHJldHVybiAqc2VuZEJ5
dGVzOwpAQCAtMzYxLDggKzM2MSw4IEBAIHNpemVfdCBDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZURh
dGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCiAgICAgICAgIGlmIChtX211bHRpcGFydEhh
bmRsZSkKICAgICAgICAgICAgIG1fbXVsdGlwYXJ0SGFuZGxlLT5kaWRSZWNlaXZlRGF0YShidWZm
ZXIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxDbGllbnQoW2J1ZmZlciA9IFdU
Rk1vdmUoYnVmZmVyKV0oQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSk7
CisgICAgICAgICAgICBjYWxsQ2xpZW50KFtidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKEN1cmxS
ZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50KSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBjbGllbnQuY3VybERpZFJlY2VpdmVCdWZmZXIocmVxdWVzdCwgV1RGTW92
ZShidWZmZXIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQpAQCAtMzkzLDgg
KzM5Myw4IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhRnJvbU11bHRpcGFydChS
ZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKICAgICBhdXRvIHJlY2VpdmVCeXRlcyA9IGJ1ZmZl
ci0+c2l6ZSgpOwogCiAgICAgaWYgKHJlY2VpdmVCeXRlcykgewotICAgICAgICBjYWxsQ2xpZW50
KFtidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIG11
dGFibGUgewotICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUo
YnVmZmVyKSk7CisgICAgICAgIGNhbGxDbGllbnQoW2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0o
Q3VybFJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIG11dGFibGUg
eworICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKHJlcXVlc3QsIFdURk1v
dmUoYnVmZmVyKSk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTQyMSw4ICs0MjEsOCBAQCB2
b2lkIEN1cmxSZXF1ZXN0OjpkaWRDb21wbGV0ZVRyYW5zZmVyKENVUkxjb2RlIHJlc3VsdCkKICAg
ICAgICAgICAgICAgICBtX25ldHdvcmtMb2FkTWV0cmljcyA9ICptZXRyaWNzOwogCiAgICAgICAg
ICAgICBmaW5hbGl6ZVRyYW5zZmVyKCk7Ci0gICAgICAgICAgICBjYWxsQ2xpZW50KFtdKEN1cmxS
ZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKLSAgICAgICAgICAgICAgICBjbGllbnQuY3VybERpZENv
bXBsZXRlKCk7CisgICAgICAgICAgICBjYWxsQ2xpZW50KFtdKEN1cmxSZXF1ZXN0JiByZXF1ZXN0
LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICAgICAgY2xpZW50LmN1
cmxEaWRDb21wbGV0ZShyZXF1ZXN0KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKQEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpkaWRDb21wbGV0
ZVRyYW5zZmVyKENVUkxjb2RlIHJlc3VsdCkKICAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0
U3NsRXJyb3JzKG1fc3NsVmVyaWZpZXItPnNzbEVycm9ycygpKTsKIAogICAgICAgICBmaW5hbGl6
ZVRyYW5zZmVyKCk7Ci0gICAgICAgIGNhbGxDbGllbnQoW2Vycm9yID0gcmVzb3VyY2VFcnJvci5p
c29sYXRlZENvcHkoKV0oQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgewotICAgICAgICAgICAg
Y2xpZW50LmN1cmxEaWRGYWlsV2l0aEVycm9yKGVycm9yKTsKKyAgICAgICAgY2FsbENsaWVudChb
ZXJyb3IgPSByZXNvdXJjZUVycm9yLmlzb2xhdGVkQ29weSgpXShDdXJsUmVxdWVzdCYgcmVxdWVz
dCwgQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50LmN1cmxE
aWRGYWlsV2l0aEVycm9yKHJlcXVlc3QsIGVycm9yKTsKICAgICAgICAgfSk7CiAgICAgfQogfQpA
QCAtNTMzLDggKzUzMyw4IEBAIHZvaWQgQ3VybFJlcXVlc3Q6Omludm9rZURpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlLCBBY3Rpb24KICAgICBtX2RpZE5vdGlm
eVJlc3BvbnNlID0gdHJ1ZTsKICAgICBtX2FjdGlvbkFmdGVySW52b2tlID0gYmVoYXZpb3JBZnRl
ckludm9rZTsKIAotICAgIGNhbGxDbGllbnQoW3Jlc3BvbnNlID0gcmVzcG9uc2UuaXNvbGF0ZWRD
b3B5KCldKEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKLSAgICAgICAgY2xpZW50LmN1cmxE
aWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIGNhbGxDbGllbnQoW3Jlc3BvbnNlID0g
cmVzcG9uc2UuaXNvbGF0ZWRDb3B5KCldKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVz
dENsaWVudCYgY2xpZW50KSB7CisgICAgICAgIGNsaWVudC5jdXJsRGlkUmVjZWl2ZVJlc3BvbnNl
KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAppbmRleCA4MmZkYzg1YzA5OC4u
NTczNzIzZGI0YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdC5oCkBAIC01NiwxNCArNTYsMTQgQEAgcHVibGljOgogICAgICAgICBZ
ZXMgPSB0cnVlCiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8Q3VybFJlcXVlc3Q+IGNyZWF0ZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQs
IFNob3VsZFN1c3BlbmQgc2hvdWxkU3VzcGVuZCA9IFNob3VsZFN1c3BlbmQ6Ok5vLCBFbmFibGVN
dWx0aXBhcnQgZW5hYmxlTXVsdGlwYXJ0ID0gRW5hYmxlTXVsdGlwYXJ0OjpObykKKyAgICBzdGF0
aWMgUmVmPEN1cmxSZXF1ZXN0PiBjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50LCBTaG91bGRTdXNwZW5kIHNob3VsZFN1c3BlbmQg
PSBTaG91bGRTdXNwZW5kOjpObywgRW5hYmxlTXVsdGlwYXJ0IGVuYWJsZU11bHRpcGFydCA9IEVu
YWJsZU11bHRpcGFydDo6Tm8pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
dXJsUmVxdWVzdChyZXF1ZXN0LCBjbGllbnQsIHNob3VsZFN1c3BlbmQgPT0gU2hvdWxkU3VzcGVu
ZDo6WWVzLCBlbmFibGVNdWx0aXBhcnQgPT0gRW5hYmxlTXVsdGlwYXJ0OjpZZXMpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3VybFJlcXVlc3QocmVxdWVzdCwgJmNsaWVudCwgc2hv
dWxkU3VzcGVuZCA9PSBTaG91bGRTdXNwZW5kOjpZZXMsIGVuYWJsZU11bHRpcGFydCA9PSBFbmFi
bGVNdWx0aXBhcnQ6OlllcykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkN1cmxSZXF1ZXN0KCkg
PSBkZWZhdWx0OwogCi0gICAgdm9pZCBzZXRDbGllbnQoQ3VybFJlcXVlc3RDbGllbnQqIGNsaWVu
dCkgeyBtX2NsaWVudCA9IGNsaWVudDsgIH0KKyAgICB2b2lkIGludmFsaWRhdGVDbGllbnQoKSB7
IG1fY2xpZW50ID0gbnVsbHB0cjsgIH0KICAgICB2b2lkIHNldFVzZXJQYXNzKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBzdGFydChib29sIGlzU3luY1JlcXVlc3Qg
PSBmYWxzZSk7CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIEZpbmlzaFRyYW5z
ZmVyCiAgICAgfTsKIAotICAgIEN1cmxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEN1
cmxSZXF1ZXN0Q2xpZW50KiwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJsZU11bHRpcGFy
dCk7CisgICAgQ3VybFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ3VybFJlcXVlc3RD
bGllbnQqIGNsaWVudCwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJsZU11bHRpcGFydCk7
CiAKICAgICB2b2lkIHJldGFpbigpIG92ZXJyaWRlIHsgcmVmKCk7IH0KICAgICB2b2lkIHJlbGVh
c2UoKSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KQEAgLTEwMiw3ICsxMDIsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBzdGFydFdpdGhKb2JNYW5hZ2VyKCk7CiAKLSAgICB2b2lkIGNhbGxDbGllbnQo
V1RGOjpGdW5jdGlvbjx2b2lkKEN1cmxSZXF1ZXN0Q2xpZW50Jik+KTsKKyAgICB2b2lkIGNhbGxD
bGllbnQoV1RGOjpGdW5jdGlvbjx2b2lkKEN1cmxSZXF1ZXN0JiwgQ3VybFJlcXVlc3RDbGllbnQm
KT4pOwogCiAgICAgLy8gVHJhbnNmZXIgcHJvY2Vzc2luZyBvZiBSZXF1ZXN0IGJvZHksIFJlc3Bv
bnNlIGhlYWRlci9ib2R5CiAgICAgLy8gQ2FsbGVkIGJ5IHdvcmtlciB0aHJlYWQgaW4gY2FzZSBv
ZiBhc3luYywgbWFpbiB0aHJlYWQgaW4gY2FzZSBvZiBzeW5jLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Q2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3RDbGllbnQuaAppbmRl
eCAzOWMyMDIyYzM0ZC4uMDMzYjhlOTNhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oCkBAIC0yOSw2ICsy
OSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3VybFJlcXVlc3Q7CiBjbGFz
cyBDdXJsUmVzcG9uc2U7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgU2hhcmVkQnVmZmVy
OwpAQCAtMzgsMTEgKzM5LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBjdXJs
RGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkUmVj
ZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNoYXJlZEJ1ZmZlcj4mJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjdXJsRGlkQ29tcGxldGUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cmxEaWRG
YWlsV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGN1cmxEaWRTZW5kRGF0YShDdXJsUmVxdWVzdCYsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1Nl
bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShDdXJsUmVxdWVzdCYsIGNvbnN0IEN1cmxS
ZXNwb25zZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoQ3Vy
bFJlcXVlc3QmLCBSZWY8U2hhcmVkQnVmZmVyPiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1
cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY3VybERp
ZEZhaWxXaXRoRXJyb3IoQ3VybFJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJiZmM3MzNj
NDFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNyBOQVZFUiBDb3JwLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VybFJlc291cmNlSGFuZGxlRGVs
ZWdhdGUuaCIKKworI2luY2x1ZGUgIkN1cmxDYWNoZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJs
UmVxdWVzdC5oIgorI2luY2x1ZGUgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgorI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29tcGxl
dGlvbkhhbmRsZXIuaD4KKworI2lmIFVTRShDVVJMKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZShS
ZXNvdXJjZUhhbmRsZSYgaGFuZGxlKQorICAgIDogbV9oYW5kbGUoaGFuZGxlKQoreworCit9CisK
K3ZvaWQgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OnJlZigpCit7CisgICAgbV9oYW5kbGUu
cmVmKCk7Cit9CisKK3ZvaWQgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmRlcmVmKCkKK3sK
KyAgICBtX2hhbmRsZS5kZXJlZigpOworfQorCitib29sIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVn
YXRlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MoKQoreworICAgIHJldHVybiBtX2hhbmRsZS5jYW5j
ZWxsZWRPckNsaWVudGxlc3MoKTsKK30KKworUmVzb3VyY2VIYW5kbGVDbGllbnQqIEN1cmxSZXNv
dXJjZUhhbmRsZURlbGVnYXRlOjpjbGllbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhbmRs
ZS5jbGllbnQoKTsKK30KKworUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogQ3VybFJlc291cmNlSGFu
ZGxlRGVsZWdhdGU6OmQoKQoreworICAgIHJldHVybiBtX2hhbmRsZS5nZXRJbnRlcm5hbCgpOwor
fQorCit2b2lkIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkU2VuZERhdGEoQ3Vy
bFJlcXVlc3QmIHJlcXVlc3QsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVk
IGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2xpZW50KCktPmRpZFNlbmREYXRhKCZtX2hhbmRsZSwgYnl0ZXNTZW50LCB0b3Rh
bEJ5dGVzVG9CZVNlbnQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVDb29raWVIZWFkZXJzKGNv
bnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gc2V0
Q29va2llSGVhZGVyID0gInNldC1jb29raWU6ICI7CisKKyAgICBjb25zdCBhdXRvJiBzdG9yYWdl
U2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7
CisgICAgY29uc3QgYXV0byYgY29va2llSmFyID0gc3RvcmFnZVNlc3Npb24uY29va2llU3RvcmFn
ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogcmVzcG9uc2UuaGVhZGVycykgewor
ICAgICAgICBpZiAoaGVhZGVyLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShzZXRDb29raWVI
ZWFkZXIpKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvIGNvbnRlbnRzID0gaGVhZGVyLnJpZ2h0
KGhlYWRlci5sZW5ndGgoKSAtIHN0cmxlbihzZXRDb29raWVIZWFkZXIpKTsKKyAgICAgICAgICAg
IGNvb2tpZUphci5zZXRDb29raWVzRnJvbUhUVFBSZXNwb25zZShzdG9yYWdlU2Vzc2lvbiwgcmVz
cG9uc2UudXJsLCBjb250ZW50cyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ3VybFJl
c291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoQ3VybFJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IEN1cmxSZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25zZSkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghZCgpLT5tX2RlZmVyc0xvYWRpbmcp
OworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNlKTsKKyAg
ICBtX3Jlc3BvbnNlLnNldERlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MocmVxdWVzdC5nZXRO
ZXR3b3JrTG9hZE1ldHJpY3MoKSk7CisKKyAgICBoYW5kbGVDb29raWVIZWFkZXJzKHJlY2VpdmVk
UmVzcG9uc2UpOworCisgICAgaWYgKG1fcmVzcG9uc2Uuc2hvdWxkUmVkaXJlY3QoKSkgeworICAg
ICAgICBtX2hhbmRsZS53aWxsU2VuZFJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChtX3Jlc3BvbnNlLmlzVW5hdXRob3JpemVkKCkpIHsKKyAgICAgICAgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHJlY2VpdmVkUmVzcG9uc2UsIGQoKS0+bV9hdXRo
RmFpbHVyZUNvdW50LCBtX3Jlc3BvbnNlLCAmbV9oYW5kbGUpOworICAgICAgICBtX2hhbmRsZS5k
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKTsKKyAgICAgICAgZCgp
LT5tX2F1dGhGYWlsdXJlQ291bnQrKzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChtX3Jlc3BvbnNlLmlzTm90TW9kaWZpZWQoKSkgeworICAgICAgICBVUkwgY2FjaGVVcmwgPSBt
X3Jlc3BvbnNlLnVybCgpOworICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZp
ZXIoKTsKKworICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0Q2Fj
aGVkUmVzcG9uc2UoY2FjaGVVcmwsIG1fcmVzcG9uc2UpKSB7CisgICAgICAgICAgICBpZiAoZCgp
LT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgeworICAgICAgICAgICAgICAgIG1fcmVz
cG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNl
LnNldEhUVFBTdGF0dXNUZXh0KCJPSyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVJlc3BvbnNl
KG1faGFuZGxlLCBtX3Jlc3BvbnNlKTsKKworICAgIG1faGFuZGxlLmRpZFJlY2VpdmVSZXNwb25z
ZShSZXNvdXJjZVJlc3BvbnNlKG1fcmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkSGFuZGxlID0g
bWFrZVJlZihtX2hhbmRsZSldIHsKKyAgICAgICAgbV9oYW5kbGUuY29udGludWVBZnRlckRpZFJl
Y2VpdmVSZXNwb25zZSgpOworICAgIH0pOworfQorCit2b2lkIEN1cmxSZXNvdXJjZUhhbmRsZURl
bGVnYXRlOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihDdXJsUmVxdWVzdCYgcmVxdWVzdCwgUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZURhdGEobV9oYW5kbGUsIGJ1
ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgY2xpZW50KCktPmRpZFJlY2VpdmVC
dWZmZXIoJm1faGFuZGxlLCBXVEZNb3ZlKGJ1ZmZlciksIGJ1ZmZlci0+c2l6ZSgpKTsKK30KKwor
dm9pZCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y3VybERpZENvbXBsZXRlKEN1cmxSZXF1
ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAo
Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVzcG9u
c2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhyZXF1ZXN0LmdldE5ldHdvcmtMb2Fk
TWV0cmljcygpKTsKKworICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZEZpbmlz
aExvYWRpbmcobV9oYW5kbGUpOworICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKCZtX2hh
bmRsZSk7Cit9CisKK3ZvaWQgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRGYWls
V2l0aEVycm9yKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNv
dXJjZUVycm9yKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoY2Fu
Y2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEN1cmxDYWNoZU1h
bmFnZXI6OnNpbmdsZXRvbigpLmRpZEZhaWwobV9oYW5kbGUpOworICAgIGNsaWVudCgpLT5kaWRG
YWlsKCZtX2hhbmRsZSwgcmVzb3VyY2VFcnJvcik7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkZGE4ZjMwZGFkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNvdXJjZUhh
bmRsZURlbGVnYXRlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJD
dXJsUmVxdWVzdENsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlc291cmNlSGFuZGxlOworY2xhc3MgUmVzb3VyY2VIYW5k
bGVDbGllbnQ7CitjbGFzcyBSZXNvdXJjZUhhbmRsZUludGVybmFsOworCitjbGFzcyBDdXJsUmVz
b3VyY2VIYW5kbGVEZWxlZ2F0ZSA6IHB1YmxpYyBDdXJsUmVxdWVzdENsaWVudCB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZShS
ZXNvdXJjZUhhbmRsZSYpOworCisgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Uo
KSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CisKKyAgICAvLyBDdXJsUmVxdWVzdENsaWVu
dCBtZXRob2RzCisKKyAgICB2b2lkIHJlZigpOworICAgIHZvaWQgZGVyZWYoKTsKKworICAgIHZv
aWQgY3VybERpZFNlbmREYXRhKEN1cmxSZXF1ZXN0JiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVz
U2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKEN1cmxSZXF1ZXN0JiwgY29uc3QgQ3VybFJl
c3BvbnNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihDdXJsUmVx
dWVzdCYsIFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZENv
bXBsZXRlKEN1cmxSZXF1ZXN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhF
cnJvcihDdXJsUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBSZXNvdXJjZUhhbmRsZSYgbV9oYW5kbGU7CisgICAgUmVzb3VyY2VSZXNwb25z
ZSBtX3Jlc3BvbnNlOworCisgICAgYm9vbCBjYW5jZWxsZWRPckNsaWVudGxlc3MoKTsKKyAgICBS
ZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KCkgY29uc3Q7CisgICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCogZCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVD
dXJsLmNwcAppbmRleCAyMDgxNTQ0NGIxYy4uZTdhMTMwOTMzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmwuY3BwCkBAIC0zMiwyMCArMzIsMjcgQEAKIAogI2lmIFVTRShDVVJMKQogCisjaW5jbHVkZSAi
Q29va2llSmFyQ3VybC5oIgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCisjaW5jbHVk
ZSAiQ3VybENhY2hlTWFuYWdlci5oIgogI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVk
ZSAiQ3VybFJlcXVlc3QuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiSFRU
UFBhcnNlcnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291
cmNlSGFuZGxlSW50ZXJuYWwoKQogewotICAgIGlmIChtX2RlbGVnYXRlKQotICAgICAgICBtX2Rl
bGVnYXRlLT5yZWxlYXNlSGFuZGxlKCk7CisgICAgaWYgKG1fY3VybFJlcXVlc3QpCisgICAgICAg
IG1fY3VybFJlcXVlc3QtPmludmFsaWRhdGVDbGllbnQoKTsKIH0KIAogUmVzb3VyY2VIYW5kbGU6
On5SZXNvdXJjZUhhbmRsZSgpID0gZGVmYXVsdDsKQEAgLTU2LDYgKzYzLDkgQEAgYm9vbCBSZXNv
dXJjZUhhbmRsZTo6c3RhcnQoKQogCiAgICAgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOwogCisg
ICAgaWYgKCFkLT5tX2RlbGVnYXRlLmdldCgpKQorICAgICAgICBkLT5tX2RlbGVnYXRlID0gc3Rk
OjptYWtlX3VuaXF1ZTxDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZT4oKnRoaXMpOworCiAgICAg
Ly8gVGhlIGZyYW1lIGNvdWxkIGJlIG51bGwgaWYgdGhlIFJlc291cmNlSGFuZGxlIGlzIG5vdCBh
c3NvY2lhdGVkIHRvIGFueQogICAgIC8vIEZyYW1lLCBlLmcuIGlmIHdlIGFyZSBkb3dubG9hZGlu
ZyBhIGZpbGUuCiAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIG5vdCBudWxsIGJ1dCB0aGUgcGFnZSBp
cyBudWxsIHRoaXMgbXVzdCBiZSBhbiBhdHRlbXB0ZWQKQEAgLTcxLDE1ICs4MSw2NyBAQCBib29s
IFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIGQtPm1fZGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGUodGhpcykpOwotICAgIGQtPm1fZGVsZWdhdGUtPnN0YXJ0KCk7CisgICAgZC0+bV9jdXJsUmVx
dWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1fY3VycmVudFJlcXVlc3QpOworCisgICAgaWYg
KGF1dG8gY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWwoZC0+bV9jdXJyZW50UmVxdWVzdCwgZmFs
c2UpKQorICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50aWFsLT5m
aXJzdCwgY3JlZGVudGlhbC0+c2Vjb25kKTsKKworICAgIGQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0
KCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2Vs
KCkKIHsKLSAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+Y2Fu
Y2VsKCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGQtPm1fY2FuY2VsbGVk
ID0gdHJ1ZTsKKworICAgIGlmICghZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgZC0+bV9jdXJs
UmVxdWVzdC0+Y2FuY2VsKCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbGxlZE9y
Q2xpZW50bGVzcygpCit7CisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiAhY2xpZW50KCk7Cit9CisKK1JlZjxDdXJsUmVxdWVzdD4gUmVz
b3VyY2VIYW5kbGU6OmNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gQ3VybENhY2hlIDogYXBw
ZW5kIGFkZGl0aW9uYWwgY2FjaGUgaW5mb3JtYXRpb24KKyAgICBkLT5tX2FkZGVkQ2FjaGVWYWxp
ZGF0aW9uSGVhZGVycyA9IGZhbHNlOworCisgICAgYm9vbCBoYXNDYWNoZUhlYWRlcnMgPSByZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmll
ZFNpbmNlKSB8fCByZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5jb250YWlucyhIVFRQSGVhZGVy
TmFtZTo6SWZOb25lTWF0Y2gpOworICAgIGlmICghaGFzQ2FjaGVIZWFkZXJzKSB7CisgICAgICAg
IGF1dG8mIGNhY2hlID0gQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCk7CisgICAgICAgIFVS
TCBjYWNoZVVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIGNhY2hlVXJsLnJlbW92ZUZyYWdt
ZW50SWRlbnRpZmllcigpOworCisgICAgICAgIGlmIChjYWNoZS5pc0NhY2hlZChjYWNoZVVybCkp
IHsKKyAgICAgICAgICAgIGNhY2hlLmFkZENhY2hlRW50cnlDbGllbnQoY2FjaGVVcmwsIHRoaXMp
OworCisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogY2FjaGUucmVxdWVzdEhl
YWRlcnMoY2FjaGVVcmwpKQorICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZp
ZWxkKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOworCisgICAgICAgICAgICBkLT5tX2FkZGVkQ2Fj
aGVWYWxpZGF0aW9uSGVhZGVycyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDdXJs
UmVxdWVzdDo6U2hvdWxkU3VzcGVuZCBzaG91bGRTdXNwZW5kID0gZC0+bV9kZWZlcnNMb2FkaW5n
ID8gQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3BlbmQ6OlllcyA6IEN1cmxSZXF1ZXN0OjpTaG91bGRT
dXNwZW5kOjpObzsKKyAgICBhdXRvIGN1cmxSZXF1ZXN0ID0gQ3VybFJlcXVlc3Q6OmNyZWF0ZShy
ZXF1ZXN0LCAqZGVsZWdhdGUoKSwgc2hvdWxkU3VzcGVuZCwgQ3VybFJlcXVlc3Q6OkVuYWJsZU11
bHRpcGFydDo6WWVzKTsKKyAgICAKKyAgICByZXR1cm4gY3VybFJlcXVlc3Q7Cit9CisKK0N1cmxS
ZXNvdXJjZUhhbmRsZURlbGVnYXRlKiBSZXNvdXJjZUhhbmRsZTo6ZGVsZWdhdGUoKQoreworICAg
IEFTU0VSVChkLT5tX2RlbGVnYXRlKTsKKyAgICByZXR1cm4gZC0+bV9kZWxlZ2F0ZS5nZXQoKTsK
IH0KIAogI2lmIE9TKFdJTkRPV1MpCkBAIC0xMTUsOCArMTc3LDE4IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQt
Pm1fZGVsZWdhdGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKyAgICBpZiAoZGVmZXJzID09
IGQtPm1fZGVmZXJzTG9hZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgZC0+bV9kZWZlcnNM
b2FkaW5nID0gZGVmZXJzOworCisgICAgaWYgKCFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoZC0+bV9kZWZlcnNMb2FkaW5nKQorICAgICAgICBkLT5tX2N1cmxS
ZXF1ZXN0LT5zdXNwZW5kKCk7CisgICAgZWxzZQorICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5y
ZXN1bWUoKTsKIH0KIAogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoKQpAQCAtMTM3LDkgKzIwOSw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2Vp
dmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAg
ICAgIGlmIChjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSA9PSA0
MDEpCiAgICAgICAgICAgICB1cmxUb1N0b3JlID0gY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgp
LnVybCgpOwogICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9y
YWdlKCkuc2V0KHBhcnRpdGlvbiwgY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFj
ZSgpLCB1cmxUb1N0b3JlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkLT5tX2RlbGVnYXRlKQot
ICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51
c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisKKyAgICAgICAgcmVzdGFydFJlcXVlc3RX
aXRoQ3JlZGVudGlhbChjcmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsK
IAogICAgICAgICBkLT5tX3VzZXIgPSBTdHJpbmcoKTsKICAgICAgICAgZC0+bV9wYXNzID0gU3Ry
aW5nKCk7CkBAIC0xNjQsOCArMjM1LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICAgICAg
ICAgICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFn
ZSgpLnNldChwYXJ0aXRpb24sIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KSwgY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpKTsKICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgICAgICAg
ICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51c2VyKCksIGNy
ZWRlbnRpYWwucGFzc3dvcmQoKSk7CisgICAgICAgICAgICAgICAgcmVzdGFydFJlcXVlc3RXaXRo
Q3JlZGVudGlhbChjcmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwMCw4
ICsyNzAsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRp
Y2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOworICAgIHJl
c3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY3JlZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwu
cGFzc3dvcmQoKSk7CiAKICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CkBAIC0yMTUsMTEg
KzI4NCw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVX
aXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhCiAKICAgICBjbGVhckF1dGhlbnRpY2F0
aW9uKCk7CiAKLSAgICBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShkLT5tX3Jl
c3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAgIGlmIChkLT5tX2RlbGVnYXRlKQot
ICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsK
KyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZShkZWxlZ2F0ZSgpLT5yZXNw
b25zZSgpKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAg
ICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiAgICAgfSk7CiB9CiAKQEAgLTI0
NiwxOCArMzEyLDc3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2hhbGxlbmdlUmVq
ZWN0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAorc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBS
ZXNvdXJjZUhhbmRsZTo6Z2V0Q3JlZGVudGlhbChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJv
b2wgcmVkaXJlY3QpCit7CisgICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2
ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1M
SHR0cFJlcXVlc3Qub3BlbigpLgorICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hl
UGFydGl0aW9uKCk7CisKKyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgewor
ICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0
IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAg
QmFzaWMgYXV0aGVudGljYXRpb24sIAorICAgICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUg
Y3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCisgICAgICAg
ICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRD
cmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOworICAgICAg
ICB9IGVsc2UgaWYgKCFyZWRpcmVjdCkgeworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxy
ZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQg
Y3JlZGVudGlhbHMKKyAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KKyAg
ICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRp
YWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQKKyAgICAgICAgICAgIC8v
IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCkuCisgICAgICAgICAgICBD
cmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlv
biwgQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNl
Tm9uZSksIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHVz
ZXIgPSBkLT5tX3VzZXI7CisgICAgU3RyaW5nIHBhc3N3b3JkID0gZC0+bV9wYXNzOworCisgICAg
aWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICB1c2VyID0g
ZC0+bV9pbml0aWFsQ3JlZGVudGlhbC51c2VyKCk7CisgICAgICAgIHBhc3N3b3JkID0gZC0+bV9p
bml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpOworICAgIH0KKworICAgIGlmICh1c2VyLmlzRW1w
dHkoKSAmJiBwYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPih1c2VyLCBwYXNzd29yZCk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwo
Y29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBib29sIGlzU3luY1JlcXVlc3QgPSBkLT5tX2N1cmxSZXF1ZXN0
LT5pc1N5bmNSZXF1ZXN0KCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7CisKKyAg
ICBkLT5tX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QoZC0+bV9jdXJyZW50UmVxdWVz
dCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3ModXNlciwgcGFzc3dvcmQpOwor
ICAgIGQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0KGlzU3luY1JlcXVlc3QpOworfQorCiB2b2lkIFJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAKKyAgICBhdXRvIGxvY2FsUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgU3luY2hyb25v
dXNMb2FkZXJDbGllbnQgY2xpZW50OwogICAgIGJvb2wgZGVmZXJzTG9hZGluZyA9IGZhbHNlOwog
ICAgIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmID0gdHJ1ZTsKICAgICBib29sIHNob3VsZENvbnRl
bnRFbmNvZGluZ1NuaWZmID0gdHJ1ZTsKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRs
ZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShjb250ZXh0LCByZXF1ZXN0LCAmY2xpZW50
LCBkZWZlcnNMb2FkaW5nLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENvbnRlbnRFbmNvZGlu
Z1NuaWZmKSk7CiAKLSAgICBoYW5kbGUtPmQtPm1fZGVsZWdhdGUgPSBhZG9wdFJlZihuZXcgUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoaGFuZGxlLmdldCgpKSk7Ci0gICAgaGFuZGxlLT5kLT5t
X2RlbGVnYXRlLT5kaXNwYXRjaFN5bmNocm9ub3VzSm9iKCk7CisgICAgaWYgKGxvY2FsUmVxdWVz
dC51cmwoKS5wcm90b2NvbElzRGF0YSgpKSB7CisgICAgICAgIGhhbmRsZS0+aGFuZGxlRGF0YVVS
TCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgZGVmZXJzTG9hZGluZyBp
cyB0cnVlIGFuZCB3ZSBjYWxsIGN1cmxfZWFzeV9wZXJmb3JtCisgICAgLy8gb24gYSBwYXVzZWQg
aGFuZGxlLCBsaWJjVVJMIHdvdWxkIGRvIHRoZSB0cmFuc2ZlciBhbnl3YXkKKyAgICAvLyBhbmQg
d2Ugd291bGQgYXNzZXJ0IHNvIGZvcmNlIGRlZmVyc0xvYWRpbmcgdG8gYmUgZmFsc2UuCisgICAg
aGFuZGxlLT5kLT5tX2RlZmVyc0xvYWRpbmcgPSBmYWxzZTsKKworICAgIGhhbmRsZS0+ZC0+bV9j
dXJsUmVxdWVzdCA9IGhhbmRsZS0+Y3JlYXRlQ3VybFJlcXVlc3QobG9jYWxSZXF1ZXN0KTsKKyAg
ICBoYW5kbGUtPmQtPm1fY3VybFJlcXVlc3QtPnN0YXJ0KHRydWUpOwogCiAgICAgZXJyb3IgPSBj
bGllbnQuZXJyb3IoKTsKICAgICBkYXRhLnN3YXAoY2xpZW50Lm11dGFibGVEYXRhKCkpOwpAQCAt
MjY4LDggKzM5MywxNzIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Db250aW51ZVN5
bmNocm9ub3VzRGlkUmVjZWl2ZVJlc3BvbnNlKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCi0gICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnBs
YXRmb3JtQ29udGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIGNvbnRp
bnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6
Y29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIC8vIGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhbmNl
bCB0aGUgbG9hZC4KKyAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkgfHwgIWQtPm1fY3Vy
bFJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIGQtPm1fY3VybFJlcXVlc3QtPmNvbXBs
ZXRlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3Vs
ZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIGNyb3Nz
T3JpZ2luKQoreworICAgIGlmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiR0VUIiB8fCByZXF1
ZXN0Lmh0dHBNZXRob2QoKSA9PSAiSEVBRCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKGRlbGVnYXRlKCktPnJlc3BvbnNlKCkuaXNTZWVPdGhlcigp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoZGVsZWdhdGUoKS0+cmVzcG9uc2Uo
KS5pc01vdmVkUGVybWFuZW50bHkoKSB8fCBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLmlzRm91bmQo
KSkgJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJQT1NUIikpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGNyb3NzT3JpZ2luICYmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAi
REVMRVRFIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVlc3QoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heFJlZGlyZWN0cyA9IDIw
OworCisgICAgaWYgKGQtPm1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3RzKSB7CisgICAg
ICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3I6Omh0dHBFcnJvcihDVVJM
RV9UT09fTUFOWV9SRURJUkVDVFMsIGRlbGVnYXRlKCktPnJlc3BvbnNlKCkudXJsKCkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBsb2NhdGlvbiA9IGRlbGVnYXRlKCkt
PnJlc3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbik7Cisg
ICAgVVJMIG5ld1VSTCA9IFVSTChkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLnVybCgpLCBsb2NhdGlv
bik7CisgICAgYm9vbCBjcm9zc09yaWdpbiA9ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwo
ZC0+bV9maXJzdFJlcXVlc3QudXJsKCksIG5ld1VSTCk7CisKKyAgICBSZXNvdXJjZVJlcXVlc3Qg
bmV3UmVxdWVzdCA9IGQtPm1fZmlyc3RSZXF1ZXN0OworICAgIG5ld1JlcXVlc3Quc2V0VVJMKG5l
d1VSTCk7CisKKyAgICBpZiAoc2hvdWxkUmVkaXJlY3RBc0dFVChuZXdSZXF1ZXN0LCBjcm9zc09y
aWdpbikpIHsKKyAgICAgICAgbmV3UmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAg
ICAgbmV3UmVxdWVzdC5zZXRIVFRQQm9keShudWxscHRyKTsKKyAgICAgICAgbmV3UmVxdWVzdC5j
bGVhckhUVFBDb250ZW50VHlwZSgpOworICAgIH0KKworICAgIC8vIFNob3VsZCBub3Qgc2V0IFJl
ZmVyZXIgYWZ0ZXIgYSByZWRpcmVjdCBmcm9tIGEgc2VjdXJlIHJlc291cmNlIHRvIG5vbi1zZWN1
cmUgb25lLgorICAgIGlmICghbmV3VVJMLnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJ
cyhuZXdSZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLCAiaHR0cHMiKSAmJiBjb250ZXh0KCktPnNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKKyAgICAgICAgbmV3UmVxdWVz
dC5jbGVhckhUVFBSZWZlcnJlcigpOworCisgICAgZC0+bV91c2VyID0gbmV3VVJMLnVzZXIoKTsK
KyAgICBkLT5tX3Bhc3MgPSBuZXdVUkwucGFzcygpOworICAgIG5ld1JlcXVlc3QucmVtb3ZlQ3Jl
ZGVudGlhbHMoKTsKKworICAgIGlmIChjcm9zc09yaWdpbikgeworICAgICAgICAvLyBJZiB0aGUg
bmV0d29yayBsYXllciBjYXJyaWVzIG92ZXIgYXV0aGVudGljYXRpb24gaGVhZGVycyBmcm9tIHRo
ZSBvcmlnaW5hbCByZXF1ZXN0CisgICAgICAgIC8vIGluIGEgY3Jvc3Mtb3JpZ2luIHJlZGlyZWN0
LCB3ZSB3YW50IHRvIGNsZWFyIHRob3NlIGhlYWRlcnMgaGVyZS4gCisgICAgICAgIG5ld1JlcXVl
c3QuY2xlYXJIVFRQQXV0aG9yaXphdGlvbigpOworICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRU
UE9yaWdpbigpOworICAgIH0KKworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2VDb3B5ID0g
ZGVsZWdhdGUoKS0+cmVzcG9uc2UoKTsKKyAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0QXN5
bmModGhpcywgV1RGTW92ZShuZXdSZXF1ZXN0KSwgV1RGTW92ZShyZXNwb25zZUNvcHkpLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoUmVzb3VyY2VSZXF1ZXN0JiYgcmVx
dWVzdCkgeworICAgICAgICBjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFdURk1vdmUocmVx
dWVzdCkpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVy
V2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIHdpbGxTZW5kUmVxdWVzdCBtaWdodCBjYW5jZWwg
dGhlIGxvYWQuCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpIHx8ICFkLT5tX2N1cmxS
ZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBkLT5tX2N1cnJlbnRSZXF1ZXN0ID0gV1RG
TW92ZShyZXF1ZXN0KTsKKworICAgIGJvb2wgaXNTeW5jUmVxdWVzdCA9IGQtPm1fY3VybFJlcXVl
c3QtPmlzU3luY1JlcXVlc3QoKTsKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKKwor
ICAgIGQtPm1fY3VybFJlcXVlc3QgPSBjcmVhdGVDdXJsUmVxdWVzdChkLT5tX2N1cnJlbnRSZXF1
ZXN0KTsKKworICAgIGlmIChwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwoZC0+bV9jdXJyZW50
UmVxdWVzdC51cmwoKSwgZGVsZWdhdGUoKS0+cmVzcG9uc2UoKS51cmwoKSkpIHsKKyAgICAgICAg
aWYgKGF1dG8gY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWwoZC0+bV9jdXJyZW50UmVxdWVzdCwg
dHJ1ZSkpCisgICAgICAgICAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50
aWFsLT5maXJzdCwgY3JlZGVudGlhbC0+c2Vjb25kKTsKKyAgICB9CisKKyAgICBkLT5tX2N1cmxS
ZXF1ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6
aGFuZGxlRGF0YVVSTCgpCit7CisgICAgQVNTRVJUKGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNEYXRhKCkpOworICAgIFN0cmluZyB1cmwgPSBkLT5tX2ZpcnN0UmVxdWVzdC51cmwo
KS5zdHJpbmcoKTsKKworICAgIEFTU0VSVChjbGllbnQoKSk7CisKKyAgICBhdXRvIGluZGV4ID0g
dXJsLmZpbmQoJywnKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKKyAgICAgICAgY2xp
ZW50KCktPmNhbm5vdFNob3dVUkwodGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBTdHJpbmcgbWVkaWFUeXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOworICAgIFN0
cmluZyBkYXRhID0gdXJsLnN1YnN0cmluZyhpbmRleCArIDEpOworICAgIGF1dG8gb3JpZ2luYWxT
aXplID0gZGF0YS5sZW5ndGgoKTsKKworICAgIGJvb2wgYmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNX
aXRoSWdub3JpbmdBU0NJSUNhc2UoIjtiYXNlNjQiKTsKKyAgICBpZiAoYmFzZTY0KQorICAgICAg
ICBtZWRpYVR5cGUgPSBtZWRpYVR5cGUubGVmdChtZWRpYVR5cGUubGVuZ3RoKCkgLSA3KTsKKwor
ICAgIGlmIChtZWRpYVR5cGUuaXNFbXB0eSgpKQorICAgICAgICBtZWRpYVR5cGUgPSBBU0NJSUxp
dGVyYWwoInRleHQvcGxhaW4iKTsKKworICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUobWVkaWFUeXBlKTsKKyAgICBTdHJpbmcgY2hhcnNldCA9IGV4dHJh
Y3RDaGFyc2V0RnJvbU1lZGlhVHlwZShtZWRpYVR5cGUpOworCisgICAgaWYgKGNoYXJzZXQuaXNF
bXB0eSgpKQorICAgICAgICBjaGFyc2V0ID0gQVNDSUlMaXRlcmFsKCJVUy1BU0NJSSIpOworCisg
ICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICByZXNwb25zZS5zZXRNaW1lVHlwZSht
aW1lVHlwZSk7CisgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKKyAg
ICByZXNwb25zZS5zZXRVUkwoZC0+bV9maXJzdFJlcXVlc3QudXJsKCkpOworCisgICAgaWYgKGJh
c2U2NCkgeworICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEpOwor
ICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJE
aWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gZGlkUmVjZWl2
ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVsZXRlZC4KKyAgICAgICAg
aWYgKGNsaWVudCgpKSB7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gb3V0OworICAgICAgICAg
ICAgaWYgKGJhc2U2NERlY29kZShkYXRhLCBvdXQsIEJhc2U2NElnbm9yZVNwYWNlc0FuZE5ld0xp
bmVzKSAmJiBvdXQuc2l6ZSgpID4gMCkKKyAgICAgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVj
ZWl2ZUJ1ZmZlcih0aGlzLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShvdXQuZGF0YSgpLCBvdXQuc2l6
ZSgpKSwgb3JpZ2luYWxTaXplKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFRl
eHRFbmNvZGluZyBlbmNvZGluZyhjaGFyc2V0KTsKKyAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVz
Y2FwZVNlcXVlbmNlcyhkYXRhLCBlbmNvZGluZyk7CisgICAgICAgIGRpZFJlY2VpdmVSZXNwb25z
ZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0geworICAgICAgICAgICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOworICAg
ICAgICB9KTsKKworICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhl
IGNsaWVudCB0byBiZSBkZWxldGVkLgorICAgICAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gZW5jb2RlZERhdGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwgVW5lbmNvZGFibGVI
YW5kbGluZzo6VVJMRW5jb2RlZEVudGl0aWVzKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0
YS5zaXplKCkpCisgICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhp
cywgU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShlbmNvZGVkRGF0YSkpLCBvcmlnaW5hbFNp
emUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwYzQ0NjU1NmZlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNTIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTkFWRVIgQ29ycC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlLmgiCi0KLSNpZiBVU0UoQ1VSTCkKLQotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyQ3VybC5oIgotI2luY2x1ZGUgIkNyZWRlbnRpYWxT
dG9yYWdlLmgiCi0jaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdlci5oIgotI2luY2x1ZGUgIkN1cmxS
ZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNpbmNsdWRlICJOZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OlJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCi0gICAgOiBt
X2hhbmRsZShoYW5kbGUpCi0gICAgLCBtX2ZpcnN0UmVxdWVzdChoYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9jdXJyZW50UmVxdWVzdChoYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9zaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShoYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkpCi0gICAgLCBtX3VzZXIo
aGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3VzZXIuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBtX3Bh
c3MoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Bhc3MuaXNvbGF0ZWRDb3B5KCkpCi0gICAgLCBt
X2luaXRpYWxDcmVkZW50aWFsKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9pbml0aWFsQ3JlZGVu
dGlhbCkKLSAgICAsIG1fZGVmZXJzTG9hZGluZyhoYW5kbGUtPmdldEludGVybmFsKCktPm1fZGVm
ZXJzTG9hZGluZykKLXsKLQotfQotCi1SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6flJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlKCkKLXsKLSAgICBpZiAobV9jdXJsUmVxdWVzdCkKLSAgICAg
ICAgbV9jdXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIpOwotfQotCi1ib29sIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpoYXNIYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiAhIW1f
aGFuZGxlOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpyZWxlYXNlSGFu
ZGxlKCkKLXsKLSAgICBtX2hhbmRsZSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OnN0YXJ0KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgYXV0byBjcmVkZW50aWFsID0gZ2V0Q3JlZGVudGlhbChtX2N1cnJlbnRSZXF1ZXN0LCBm
YWxzZSk7Ci0KLSAgICBtX2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50
UmVxdWVzdCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3MoY3JlZGVudGlhbC5maXJz
dCwgY3JlZGVudGlhbC5zZWNvbmQpOwotICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNhbmNlbCgpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQotICAgIHJlbGVhc2VIYW5kbGUoKTsKLQotICAgIGlmICghbV9j
dXJsUmVxdWVzdCkKLSAgICAgICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChkZWZlcnMgPT0gbV9k
ZWZlcnNMb2FkaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RlZmVyc0xvYWRpbmcgPSBk
ZWZlcnM7Ci0KLSAgICBpZiAoIW1fY3VybFJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2RlZmVyc0xvYWRpbmcpCi0gICAgICAgIG1fY3VybFJlcXVlc3QtPnN1c3BlbmQoKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fY3VybFJlcXVlc3QtPnJlc3VtZSgpOwotfQotCi12b2lkIFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXRBdXRoZW50aWNhdGlvbihjb25zdCBTdHJpbmcm
IHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIGlmICghbV9jdXJsUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ym9vbCBpc1N5bmNSZXF1ZXN0ID0gbV9jdXJsUmVxdWVzdC0+aXNTeW5jUmVxdWVzdCgpOwotICAg
IG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOwotICAgIG1fY3VybFJlcXVlc3QtPnNldENsaWVudChu
dWxscHRyKTsKLQotICAgIG1fY3VybFJlcXVlc3QgPSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJl
bnRSZXF1ZXN0KTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zZXRVc2VyUGFzcyh1c2VyLCBwYXNzd29y
ZCk7Ci0gICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQoaXNTeW5jUmVxdWVzdCk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpc3BhdGNoU3luY2hyb25vdXNKb2IoKQotewot
ICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpIHsKLSAgICAg
ICAgaGFuZGxlRGF0YVVSTCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYg
ZGVmZXJzTG9hZGluZyBpcyB0cnVlIGFuZCB3ZSBjYWxsIGN1cmxfZWFzeV9wZXJmb3JtCi0gICAg
Ly8gb24gYSBwYXVzZWQgaGFuZGxlLCBsaWJjVVJMIHdvdWxkIGRvIHRoZSB0cmFuc2ZlcnQgYW55
d2F5Ci0gICAgLy8gYW5kIHdlIHdvdWxkIGFzc2VydCBzbyBmb3JjZSBkZWZlcnNMb2FkaW5nIHRv
IGJlIGZhbHNlLgotICAgIG1fZGVmZXJzTG9hZGluZyA9IGZhbHNlOwotCi0gICAgbV9jdXJsUmVx
dWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QpOwotICAgIG1fY3VybFJl
cXVlc3QtPnN0YXJ0KHRydWUpOwotfQotCi1SZWY8Q3VybFJlcXVlc3Q+IFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpjcmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIEN1cmxDYWNoZSA6IGFw
cGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9uCi0gICAgbV9hZGRlZENhY2hlVmFsaWRh
dGlvbkhlYWRlcnMgPSBmYWxzZTsKLQotICAgIGJvb2wgaGFzQ2FjaGVIZWFkZXJzID0gcmVxdWVz
dC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRT
aW5jZSkgfHwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5h
bWU6OklmTm9uZU1hdGNoKTsKLSAgICBpZiAoIWhhc0NhY2hlSGVhZGVycykgewotICAgICAgICBh
dXRvJiBjYWNoZSA9IEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpOwotICAgICAgICBVUkwg
Y2FjaGVVcmwgPSByZXF1ZXN0LnVybCgpOwotICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVu
dElkZW50aWZpZXIoKTsKLQotICAgICAgICBpZiAoY2FjaGUuaXNDYWNoZWQoY2FjaGVVcmwpKSB7
Ci0gICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KGNhY2hlVXJsLCBtX2hhbmRs
ZSk7Ci0KLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBjYWNoZS5yZXF1ZXN0
SGVhZGVycyhjYWNoZVVybCkpCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVy
RmllbGQoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7Ci0KLSAgICAgICAgICAgIG1fYWRkZWRDYWNo
ZVZhbGlkYXRpb25IZWFkZXJzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEN1cmxS
ZXF1ZXN0OjpTaG91bGRTdXNwZW5kIHNob3VsZFN1c3BlbmQgPSBtX2RlZmVyc0xvYWRpbmcgPyBD
dXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZDo6WWVzIDogQ3VybFJlcXVlc3Q6OlNob3VsZFN1c3Bl
bmQ6Ok5vOwotICAgIHJldHVybiBDdXJsUmVxdWVzdDo6Y3JlYXRlKHJlcXVlc3QsIHRoaXMsIHNo
b3VsZFN1c3BlbmQsIEN1cmxSZXF1ZXN0OjpFbmFibGVNdWx0aXBhcnQ6Olllcyk7Ci19Ci0KLWJv
b2wgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNhbmNlbGxlZE9yQ2xpZW50bGVzcygpCi17
Ci0gICAgaWYgKCFtX2hhbmRsZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
IW1faGFuZGxlLT5jbGllbnQoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6Y3VybERpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVk
IGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRTZW5kRGF0YShtX2hhbmRsZSwgYnl0ZXNT
ZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVDb29raWVI
ZWFkZXJzKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgc3RhdGljIGNvbnN0
IGF1dG8gc2V0Q29va2llSGVhZGVyID0gInNldC1jb29raWU6ICI7Ci0KLSAgICBhdXRvJiBkZWZh
dWx0U3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdl
U2Vzc2lvbigpOwotICAgIGNvbnN0IENvb2tpZUphckN1cmwmIGNvb2tpZUphciA9IGRlZmF1bHRT
dG9yYWdlU2Vzc2lvbi5jb29raWVTdG9yYWdlKCk7Ci0gICAgZm9yIChhdXRvIGhlYWRlciA6IHJl
c3BvbnNlLmhlYWRlcnMpIHsKLSAgICAgICAgaWYgKGhlYWRlci5zdGFydHNXaXRoSWdub3JpbmdB
U0NJSUNhc2Uoc2V0Q29va2llSGVhZGVyKSkgewotICAgICAgICAgICAgU3RyaW5nIHNldENvb2tp
ZVN0cmluZyA9IGhlYWRlci5yaWdodChoZWFkZXIubGVuZ3RoKCkgLSBzdHJsZW4oc2V0Q29va2ll
SGVhZGVyKSk7Ci0gICAgICAgICAgICBjb29raWVKYXIuc2V0Q29va2llc0Zyb21IVFRQUmVzcG9u
c2UoZGVmYXVsdFN0b3JhZ2VTZXNzaW9uLCByZXNwb25zZS51cmwsIHNldENvb2tpZVN0cmluZyk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgQ3VybFJlc3BvbnNlJiByZWNlaXZlZFJlc3Bv
bnNlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2RlZmVy
c0xvYWRpbmcpOwotCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZSA9IFJlc291
cmNlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSk7Ci0KLSAgICBpZiAobV9jdXJsUmVxdWVzdCkK
LSAgICAgICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRl
ZE5ldHdvcmtMb2FkTWV0cmljcyhtX2N1cmxSZXF1ZXN0LT5nZXROZXR3b3JrTG9hZE1ldHJpY3Mo
KSk7Ci0KLSAgICBoYW5kbGVDb29raWVIZWFkZXJzKHJlY2VpdmVkUmVzcG9uc2UpOwotCi0gICAg
aWYgKHJlc3BvbnNlKCkuc2hvdWxkUmVkaXJlY3QoKSkgewotICAgICAgICB3aWxsU2VuZFJlcXVl
c3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChyZXNwb25zZSgpLmlzVW5h
dXRob3JpemVkKCkpIHsKLSAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdl
KHJlY2VpdmVkUmVzcG9uc2UsIG1fYXV0aEZhaWx1cmVDb3VudCwgcmVzcG9uc2UoKSwgbV9oYW5k
bGUpOwotICAgICAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KGNoYWxsZW5nZSk7Ci0gICAgICAgIG1fYXV0aEZhaWx1cmVDb3VudCsrOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICBpZiAo
cmVzcG9uc2UoKS5pc05vdE1vZGlmaWVkKCkpIHsKLSAgICAgICAgICAgIFVSTCBjYWNoZVVybCA9
IG1fY3VycmVudFJlcXVlc3QudXJsKCk7Ci0gICAgICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFn
bWVudElkZW50aWZpZXIoKTsKLQotICAgICAgICAgICAgaWYgKEN1cmxDYWNoZU1hbmFnZXI6OnNp
bmdsZXRvbigpLmdldENhY2hlZFJlc3BvbnNlKGNhY2hlVXJsLCByZXNwb25zZSgpKSkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgewotICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZSgpLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlKCkuc2V0SFRUUFN0YXR1c1RleHQoIk9LIik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQ3VybENhY2hl
TWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZVJlc3BvbnNlKCptX2hhbmRsZSwgcmVzcG9u
c2UoKSk7Ci0KLSAgICAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqbV9oYW5kbGUp
OwotICAgICAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2Uo
cmVzcG9uc2UoKSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAg
ICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICAgICAgfSk7
Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkUmVj
ZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRSZWNlaXZl
RGF0YSgqbV9oYW5kbGUsIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Ci0gICAgbV9o
YW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKG1faGFuZGxlLCBXVEZNb3ZlKGJ1ZmZl
ciksIGJ1ZmZlci0+c2l6ZSgpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6Y3VybERpZENvbXBsZXRlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0g
ICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9jdXJsUmVxdWVzdCkKLSAgICAgICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVz
cG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhtX2N1cmxSZXF1ZXN0LT5nZXRO
ZXR3b3JrTG9hZE1ldHJpY3MoKSk7Ci0KLSAgICBpZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0g
ICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZEZpbmlzaExvYWRpbmcoKm1f
aGFuZGxlKTsKLSAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKG1f
aGFuZGxlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1
cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChjYW5jZWxsZWRPckNsaWVu
dGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ3VybENhY2hlTWFuYWdlcjo6c2luZ2xl
dG9uKCkuZGlkRmFpbCgqbV9oYW5kbGUpOwotICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmFp
bChtX2hhbmRsZSwgcmVzb3VyY2VFcnJvcik7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgY29udGludWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOwot
fQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpwbGF0Zm9ybUNvbnRpbnVlU3lu
Y2hyb25vdXNEaWRSZWNlaXZlUmVzcG9uc2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9u
c2UoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBjb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYW5jZWwgdGhlIGxvYWQuCi0gICAgaWYgKGNhbmNlbGxl
ZE9yQ2xpZW50bGVzcygpIHx8ICFtX2N1cmxSZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2N1cmxSZXF1ZXN0LT5jb21wbGV0ZURpZFJlY2VpdmVSZXNwb25zZSgpOwotfQotCi1ib29s
IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzaG91bGRSZWRpcmVjdEFzR0VUKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBjcm9zc09yaWdpbikKLXsKLSAgICBpZiAocmVx
dWVzdC5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgcmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkhF
QUQiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJlcXVlc3QudXJsKCkucHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChy
ZXNwb25zZSgpLmlzU2VlT3RoZXIoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
KHJlc3BvbnNlKCkuaXNNb3ZlZFBlcm1hbmVudGx5KCkgfHwgcmVzcG9uc2UoKS5pc0ZvdW5kKCkp
ICYmIChyZXF1ZXN0Lmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGlmIChjcm9zc09yaWdpbiAmJiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkRF
TEVURSIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNlbmRSZXF1ZXN0KCkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBtYXhSZWRp
cmVjdHMgPSAyMDsKLQotICAgIGlmIChtX3JlZGlyZWN0Q291bnQrKyA+IG1heFJlZGlyZWN0cykg
ewotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwobV9oYW5kbGUsIFJlc291cmNl
RXJyb3I6Omh0dHBFcnJvcihDVVJMRV9UT09fTUFOWV9SRURJUkVDVFMsIHJlc3BvbnNlKCkudXJs
KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBsb2NhdGlvbiA9IHJl
c3BvbnNlKCkuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbik7Ci0gICAg
VVJMIG5ld1VSTCA9IFVSTChtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZS51cmwo
KSwgbG9jYXRpb24pOwotICAgIGJvb2wgY3Jvc3NPcmlnaW4gPSAhcHJvdG9jb2xIb3N0QW5kUG9y
dEFyZUVxdWFsKG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBuZXdVUkwpOwotCi0gICAgUmVzb3VyY2VS
ZXF1ZXN0IG5ld1JlcXVlc3QgPSBtX2ZpcnN0UmVxdWVzdDsKLSAgICBuZXdSZXF1ZXN0LnNldFVS
TChuZXdVUkwpOwotCi0gICAgaWYgKHNob3VsZFJlZGlyZWN0QXNHRVQobmV3UmVxdWVzdCwgY3Jv
c3NPcmlnaW4pKSB7Ci0gICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7Ci0g
ICAgICAgIG5ld1JlcXVlc3Quc2V0SFRUUEJvZHkobnVsbHB0cik7Ci0gICAgICAgIG5ld1JlcXVl
c3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKLSAgICB9Ci0KLSAgICAvLyBTaG91bGQgbm90IHNl
dCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24t
c2VjdXJlIG9uZS4KLSAgICBpZiAoIW5ld1VSTC5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3Rv
Y29sSXMobmV3UmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikgJiYgbV9oYW5kbGUtPmNv
bnRleHQoKS0+c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCgpKQotICAg
ICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUFJlZmVycmVyKCk7Ci0KLSAgICBtX3VzZXIgPSBuZXdV
UkwudXNlcigpOwotICAgIG1fcGFzcyA9IG5ld1VSTC5wYXNzKCk7Ci0gICAgbmV3UmVxdWVzdC5y
ZW1vdmVDcmVkZW50aWFscygpOwotCi0gICAgaWYgKGNyb3NzT3JpZ2luKSB7Ci0gICAgICAgIC8v
IElmIHRoZSBuZXR3b3JrIGxheWVyIGNhcnJpZXMgb3ZlciBhdXRoZW50aWNhdGlvbiBoZWFkZXJz
IGZyb20gdGhlIG9yaWdpbmFsIHJlcXVlc3QKLSAgICAgICAgLy8gaW4gYSBjcm9zcy1vcmlnaW4g
cmVkaXJlY3QsIHdlIHdhbnQgdG8gY2xlYXIgdGhvc2UgaGVhZGVycyBoZXJlLiAKLSAgICAgICAg
bmV3UmVxdWVzdC5jbGVhckhUVFBBdXRob3JpemF0aW9uKCk7Ci0gICAgICAgIG5ld1JlcXVlc3Qu
Y2xlYXJIVFRQT3JpZ2luKCk7Ci0gICAgfQotCi0gICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZUNvcHkgPSByZXNwb25zZSgpOwotICAgIG1faGFuZGxlLT5jbGllbnQoKS0+d2lsbFNlbmRSZXF1
ZXN0QXN5bmMobV9oYW5kbGUsIFdURk1vdmUobmV3UmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2VD
b3B5KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKFJlc291cmNlUmVx
dWVzdCYmIHJlcXVlc3QpIHsKLSAgICAgICAgY29udGludWVXaWxsU2VuZFJlcXVlc3QoV1RGTW92
ZShyZXF1ZXN0KSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGU6OmNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGNvbnRpbnVlQWZ0ZXJXaWxsU2Vu
ZFJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OmNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYg
cmVxdWVzdCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gd2lsbFNl
bmRSZXF1ZXN0IG1pZ2h0IGNhbmNlbCB0aGUgbG9hZC4KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGll
bnRsZXNzKCkgfHwgIW1fY3VybFJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3Vy
cmVudFJlcXVlc3QgPSBXVEZNb3ZlKHJlcXVlc3QpOwotCi0gICAgYm9vbCBpc1N5bmNSZXF1ZXN0
ID0gbV9jdXJsUmVxdWVzdC0+aXNTeW5jUmVxdWVzdCgpOwotICAgIG1fY3VybFJlcXVlc3QtPmNh
bmNlbCgpOwotICAgIG1fY3VybFJlcXVlc3QtPnNldENsaWVudChudWxscHRyKTsKLQotICAgIG1f
Y3VybFJlcXVlc3QgPSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLQotICAg
IGlmIChwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobV9jdXJyZW50UmVxdWVzdC51cmwoKSwg
cmVzcG9uc2UoKS51cmwoKSkpIHsKLSAgICAgICAgYXV0byBjcmVkZW50aWFsID0gZ2V0Q3JlZGVu
dGlhbChtX2N1cnJlbnRSZXF1ZXN0LCB0cnVlKTsKLSAgICAgICAgbV9jdXJsUmVxdWVzdC0+c2V0
VXNlclBhc3MoY3JlZGVudGlhbC5maXJzdCwgY3JlZGVudGlhbC5zZWNvbmQpOwotICAgIH0KLQot
ICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KGlzU3luY1JlcXVlc3QpOwotfQotCi1SZXNvdXJjZVJl
c3BvbnNlJiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cmVzcG9uc2UoKQotewotICAgIHJl
dHVybiBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZTsKLX0KLQotdm9pZCBSZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFuZGxlRGF0YVVSTCgpCi17Ci0gICAgQVNTRVJUKG1f
Zmlyc3RSZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpOwotICAgIFN0cmluZyB1cmwgPSBt
X2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKLQotICAgIEFTU0VSVChtX2hhbmRsZS0+Y2xp
ZW50KCkpOwotCi0gICAgYXV0byBpbmRleCA9IHVybC5maW5kKCcsJyk7Ci0gICAgaWYgKGluZGV4
ID09IG5vdEZvdW5kKSB7Ci0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+Y2Fubm90U2hvd1VS
TChtX2hhbmRsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbWVkaWFU
eXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOwotICAgIFN0cmluZyBkYXRhID0gdXJs
LnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgIGF1dG8gb3JpZ2luYWxTaXplID0gZGF0YS5sZW5n
dGgoKTsKLQotICAgIGJvb2wgYmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNXaXRoSWdub3JpbmdBU0NJ
SUNhc2UoIjtiYXNlNjQiKTsKLSAgICBpZiAoYmFzZTY0KQotICAgICAgICBtZWRpYVR5cGUgPSBt
ZWRpYVR5cGUubGVmdChtZWRpYVR5cGUubGVuZ3RoKCkgLSA3KTsKLQotICAgIGlmIChtZWRpYVR5
cGUuaXNFbXB0eSgpKQotICAgICAgICBtZWRpYVR5cGUgPSAidGV4dC9wbGFpbiI7Ci0KLSAgICBT
dHJpbmcgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1lZGlhVHlwZSk7
Ci0gICAgU3RyaW5nIGNoYXJzZXQgPSBleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUobWVkaWFU
eXBlKTsKLQotICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKLSAgICAgICAgY2hhcnNldCA9ICJV
Uy1BU0NJSSI7Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotICAgIHJlc3BvbnNl
LnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKLSAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1l
KGNoYXJzZXQpOwotICAgIHJlc3BvbnNlLnNldFVSTChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7Ci0K
LSAgICBpZiAoYmFzZTY0KSB7Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5j
ZXMoZGF0YSk7Ci0gICAgICAgIG1faGFuZGxlLT5kaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShy
ZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAg
ICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8g
YmUgZGVsZXRlZC4KLSAgICAgICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICAgICAgICAgIGlmIChiYXNlNjREZWNvZGUoZGF0YSwg
b3V0LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgJiYgb3V0LnNpemUoKSA+IDApCi0g
ICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKG1faGFu
ZGxlLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSwgb3JpZ2lu
YWxTaXplKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRleHRFbmNvZGluZyBl
bmNvZGluZyhjaGFyc2V0KTsKLSAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyhkYXRhLCBlbmNvZGluZyk7Ci0gICAgICAgIG1faGFuZGxlLT5kaWRSZWNlaXZlUmVzcG9uc2Uo
V1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
IHsKLSAgICAgICAgICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBj
bGllbnQgdG8gYmUgZGVsZXRlZC4KLSAgICAgICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewot
ICAgICAgICAgICAgYXV0byBlbmNvZGVkRGF0YSA9IGVuY29kaW5nLmVuY29kZShkYXRhLCBVbmVu
Y29kYWJsZUhhbmRsaW5nOjpVUkxFbmNvZGVkRW50aXRpZXMpOwotICAgICAgICAgICAgaWYgKGVu
Y29kZWREYXRhLnNpemUoKSkKLSAgICAgICAgICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRp
ZFJlY2VpdmVCdWZmZXIobV9oYW5kbGUsIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZW5j
b2RlZERhdGEpKSwgb3JpZ2luYWxTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICht
X2hhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNo
TG9hZGluZyhtX2hhbmRsZSk7Ci19Ci0KLXN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OmdldENyZWRlbnRpYWwoUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBib29sIHJlZGlyZWN0KQotewotICAgIC8vIG1fdXNlci9tX3Bhc3MgYXJlIGNyZWRlbnRp
YWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFuY2UsIGJ5IHRoZSBhcmd1bWVudHMgcGFzc2Vk
IHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4KLSAgICBTdHJpbmcgcGFydGl0aW9uID0gcmVxdWVz
dC5jYWNoZVBhcnRpdGlvbigpOwotCi0gICAgaWYgKG1fc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpIHsKLSAgICAgICAgaWYgKG1fdXNlci5pc0VtcHR5KCkgJiYgbV9wYXNzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhh
dCBtYXRjaCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQ
IEJhc2ljIGF1dGhlbnRpY2F0aW9uLCAKLSAgICAgICAgICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhl
IGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgotICAgICAg
ICAgICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3Jl
ZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0aW9uLCByZXF1ZXN0LnVybCgpKTsKLSAgICAgICAg
fSBlbHNlIGlmICghcmVkaXJlY3QpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVh
ZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtub3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNy
ZWRlbnRpYWxzCi0gICAgICAgICAgICAvLyBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QuIFRoaXMg
bWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFuCi0gICAg
ICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29ycmVjdCBjcmVkZW50aWFs
cywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5IChzbyB0aGF0Ci0gICAgICAgICAgICAvLyBh
biBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgotICAgICAgICAgICAgQ3Jl
ZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24s
IENyZWRlbnRpYWwobV91c2VyLCBtX3Bhc3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCBy
ZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyB1c2VyID0gbV91
c2VyOwotICAgIFN0cmluZyBwYXNzd29yZCA9IG1fcGFzczsKLQotICAgIGlmICghbV9pbml0aWFs
Q3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgdXNlciA9IG1faW5pdGlhbENyZWRlbnRp
YWwudXNlcigpOwotICAgICAgICBwYXNzd29yZCA9IG1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dv
cmQoKTsKLSAgICB9Ci0KLSAgICBpZiAodXNlci5pc0VtcHR5KCkgJiYgcGFzc3dvcmQuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPigiIiwgIiIpOwot
Ci0gICAgcmV0dXJuIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4odXNlciwgcGFzc3dvcmQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmZmE1M2JmOTEu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTkFWRVIgQ29ycC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENVUkwpCi0KLSNpbmNsdWRl
ICJDcmVkZW50aWFsLmgiCi0jaW5jbHVkZSAiQ3VybFJlcXVlc3RDbGllbnQuaCIKLSNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDdXJs
UmVxdWVzdDsKLWNsYXNzIFJlc291cmNlSGFuZGxlOwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
LQotY2xhc3MgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUgZmluYWwgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+LCBwdWJsaWMgQ3VybFJl
cXVlc3RDbGllbnQgewotcHVibGljOgotICAgIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKFJl
c291cmNlSGFuZGxlKik7Ci0gICAgflJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKCk7Ci0KLSAg
ICB2b2lkIHJlZigpIG92ZXJyaWRlIHsgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU+OjpyZWYoKTsgfQotICAgIHZvaWQgZGVyZWYoKSBvdmVycmlkZSB7IFRo
cmVhZFNhZmVSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlPjo6ZGVyZWYoKTsg
fQotCi0gICAgYm9vbCBoYXNIYW5kbGUoKSBjb25zdDsKLSAgICB2b2lkIHJlbGVhc2VIYW5kbGUo
KTsKLQotICAgIHZvaWQgc3RhcnQoKTsKLSAgICB2b2lkIGNhbmNlbCgpOwotCi0gICAgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpOwotICAgIHZvaWQgc2V0QXV0aGVudGljYXRpb24oY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICB2b2lkIGRpc3BhdGNoU3luY2hyb25vdXNK
b2IoKTsKLQotICAgIHZvaWQgY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICB2b2lk
IHBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91c0RpZFJlY2VpdmVSZXNwb25zZSgpOwotCi0gICAg
dm9pZCBjb250aW51ZVdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJik7Ci0KLXByaXZh
dGU6Ci0gICAgLy8gQ2FsbGVkIGZyb20gbWFpbiB0aHJlYWQuCi0gICAgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UoKTsKLQotICAgIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gZ2V0Q3JlZGVu
dGlhbChSZXNvdXJjZVJlcXVlc3QmLCBib29sKTsKLQotICAgIGJvb2wgY2FuY2VsbGVkT3JDbGll
bnRsZXNzKCk7Ci0KLSAgICBSZWY8Q3VybFJlcXVlc3Q+IGNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgY3VybERpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJy
aWRlOwotICAgIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2Um
KSBvdmVycmlkZTsKLSAgICB2b2lkIGN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZm
ZXI+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY3VybERpZENvbXBsZXRlKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLQotICAg
IGJvb2wgc2hvdWxkUmVkaXJlY3RBc0dFVChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGNy
b3NzT3JpZ2luKTsKLSAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdCgpOwotICAgIHZvaWQgY29udGlu
dWVBZnRlcldpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJik7Ci0KLSAgICB2b2lkIGhh
bmRsZURhdGFVUkwoKTsKLQotICAgIC8vIFVzZWQgYnkgbWFpbiB0aHJlYWQuCi0gICAgUmVzb3Vy
Y2VIYW5kbGUqIG1faGFuZGxlOwotICAgIHVuc2lnbmVkIG1fYXV0aEZhaWx1cmVDb3VudCB7IDAg
fTsKLSAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291bnQgeyAwIH07Ci0KLSAgICBSZXNvdXJjZVJl
cXVlc3QgbV9maXJzdFJlcXVlc3Q7Ci0gICAgUmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVl
c3Q7Ci0gICAgYm9vbCBtX3Nob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOwotICAgIFN0cmluZyBt
X3VzZXI7Ci0gICAgU3RyaW5nIG1fcGFzczsKLSAgICBDcmVkZW50aWFsIG1faW5pdGlhbENyZWRl
bnRpYWw7Ci0gICAgYm9vbCBtX2RlZmVyc0xvYWRpbmc7Ci0gICAgYm9vbCBtX2FkZGVkQ2FjaGVW
YWxpZGF0aW9uSGVhZGVycyB7IGZhbHNlIH07Ci0gICAgUmVmUHRyPEN1cmxSZXF1ZXN0PiBtX2N1
cmxSZXF1ZXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>333927</attachid>
            <date>2018-02-15 11:56:48 -0800</date>
            <delta_ts>2018-02-16 13:39:44 -0800</delta_ts>
            <desc>Fix style</desc>
            <filename>182578.diff</filename>
            <type>text/plain</type>
            <size>68491</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5YzJiNWExMjg1Ni4uNTI2ZTlmMzFjZjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NCBAQAorMjAxOC0wMi0xNSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFVuaWZ5IGxvZ2ljIG9mIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlIGludG8gUmVzb3VyY2VIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjU3OAorCisgICAgICAgIFJlY29uc3RydWN0IHRoZSBj
bGFzc2VzIHRvIG1hdGNoIEN1cmwgcG9ydCBuZXR3b3JrIGxheWVyIG1vcmUgc2ltaWxhcgorICAg
ICAgICBzdHJ1Y3R1cmUgd2l0aCBvdGhlciBwb3J0cy4gTW92ZSBDdXJsUmVxdWVzdCBoYW5kbGlu
ZyBpbnRvIFJlc291cmNlSGFuZGxlCisgICAgICAgIGFuZCBtYWtlcyBDdXJsUmVzb3VyY2VIYW5k
bGVEZWxlZ2F0ZSBzaW1wbGUgbGlmZSBjeWNsZS4gQWxzbyBpdHMgZHV0eSBpcworICAgICAgICBm
b3IgbW9zdCBvZiBpbmNvbWluZyBkYXRhIGFuZCBldmVudCBoYW5kbGluZyBmcm9tIEN1clJlcXVl
c3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUncyBubyBuZXcgYmVoYXZpb3IuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9DdXJsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ2Fj
aGVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDYWNoZU1hbmFnZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjcmVhdGVDdXJsUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRDb21wbGV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmN1cmxEaWRGYWlsV2l0aEVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpDdXJsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y2FuY2VsKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpjYWxsQ2xpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxSZXF1ZXN0Ojp3aWxsU2VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpkaWRSZWNlaXZlRGF0YUZyb21NdWx0aXBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJl
cXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVl
c3Q6Omludm9rZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjppbnZhbGlkYXRlQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpzZXRDbGllbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OkN1
cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJj
ZUhhbmRsZURlbGVnYXRlOjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFu
ZGxlRGVsZWdhdGU6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRs
ZURlbGVnYXRlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmNsaWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6ZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
UmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y3VybERpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmhhbmRsZUNvb2tpZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNl
SGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRSZWNlaXZlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkQ29tcGxl
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGU6OmN1cmxE
aWRGYWlsV2l0aEVycm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJl
c291cmNlSGFuZGxlRGVsZWdhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVz
b3VyY2VIYW5kbGVEZWxlZ2F0ZTo6cmVzcG9uc2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhbmNlbGxlZE9yQ2xpZW50bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlQ3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmRlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNl
dERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmdldENyZWRlbnRpYWwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1D
b250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzaG91bGRSZWRpcmVjdEFzR0VUKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlLmg6IFJlbW92ZWQuCisKIDIwMTgtMDItMDcgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IG1fdGltZU9yaWdp
biBpbiBQZXJmb3JtYW5jZTo6UGVyZm9ybWFuY2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21h
a2UKaW5kZXggNzNjMDE0ZjE1YzEuLjRhODJlYjA5OWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1
cmwuY21ha2UKQEAgLTE4LDYgKzE4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxNdWx0aXBhcnRIYW5kbGUuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdFNjaGVkdWxlci5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxTU0xIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJp
Zmllci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvRE5TQ3VybC5jcHAKQEAgLTI1LDcg
KzI2LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Byb3h5U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VFcnJvckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VD
dXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Q3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU3luY2hyb25vdXNMb2FkZXJDbGll
bnRDdXJsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCmluZGV4IDYyMTU0MDcxNGY2Li40OWFhNzk5MzVlMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAtMzYsNiArMzYs
MTAgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjZW5kaWYKIAorI2lmIFVTRShDVVJM
KQorI2luY2x1ZGUgIkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgiCisjZW5kaWYKKwogI2lm
IFVTRShTT1VQKQogdHlwZWRlZiBzdHJ1Y3QgX0dUbHNDZXJ0aWZpY2F0ZSBHVGxzQ2VydGlmaWNh
dGU7CiB0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CkBAIC05Miw2ICs5
NiwxMSBAQCBjbGFzcyBTb3VwTmV0d29ya1Nlc3Npb247CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBj
bGFzcyBUaW1lcjsKIAorI2lmIFVTRShDVVJMKQorY2xhc3MgQ3VybFJlcXVlc3Q7CitjbGFzcyBD
dXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTsKKyNlbmRpZgorCiBjbGFzcyBSZXNvdXJjZUhhbmRs
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlPiwgcHVibGljIEF1dGhlbnRpY2F0
aW9uQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFJl
c291cmNlSGFuZGxlPiBjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBz
aG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ29udGVudEVuY29kaW5nU25pZmYpOwpAQCAt
MTg1LDYgKzE5NCwxNSBAQCBwdWJsaWM6CiAgICAgTW9ub3RvbmljVGltZSBtX3JlcXVlc3RUaW1l
OwogI2VuZGlmCiAKKyNpZiBVU0UoQ1VSTCkKKyAgICBib29sIGNhbmNlbGxlZE9yQ2xpZW50bGVz
cygpOworICAgIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKiBkZWxlZ2F0ZSgpOworCisgICAg
dm9pZCBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgdm9pZCB3aWxsU2Vu
ZFJlcXVlc3QoKTsKKyAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0JiYpOworI2VuZGlmCisKICAgICBib29sIGhhc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiAgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwpAQCAtMjc4LDYgKzI5NiwxNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgdGltZW91dEZpcmVkKCk7CiAjZW5kaWYKIAorI2lmIFVTRShDVVJMKQor
ICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7
CisKKyAgICBib29sIHNob3VsZFJlZGlyZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Ym9vbCBjcm9zc09yaWdpbik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxTdHJpbmcs
IFN0cmluZz4+IGdldENyZWRlbnRpYWwoUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCk7CisgICAgdm9p
ZCByZXN0YXJ0UmVxdWVzdFdpdGhDcmVkZW50aWFsKGNvbnN0IFN0cmluZyYgdXNlciwgY29uc3Qg
U3RyaW5nJiBwYXNzd29yZCk7CisKKyAgICB2b2lkIGhhbmRsZURhdGFVUkwoKTsKKyNlbmRpZgor
CiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IGQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAppbmRl
eCA1MThjZjljOWNiZi4uMDA4NGI2MmNkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC0zNywxMyAr
MzcsOCBAQAogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg+CiAjZW5kaWYKIAot
I2lmIFVTRShDVVJMKSAmJiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNp
bmNsdWRlIDx3aW5kb3dzLmg+Ci0jZW5kaWYKLQogI2lmIFVTRShDVVJMKQotI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKICNl
bmRpZgogCiAjaWYgVVNFKFNPVVApCkBAIC04MSw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2RlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZykKICAgICAgICAgLCBtX3Nob3VsZENvbnRl
bnRTbmlmZihzaG91bGRDb250ZW50U25pZmYpCiAgICAgICAgICwgbV9zaG91bGRDb250ZW50RW5j
b2RpbmdTbmlmZihzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZikKLSNpZiBVU0UoQ0ZVUkxDT05O
RUNUSU9OKQorI2lmIFVTRShDRlVSTENPTk5FQ1RJT04pIHx8IFVTRShDVVJMKQogICAgICAgICAs
IG1fY3VycmVudFJlcXVlc3QocmVxdWVzdCkKICNlbmRpZgogI2lmIFVTRShTT1VQKQpAQCAtMTMy
LDggKzEyNywxNCBAQCBwdWJsaWM6CiAgICAgUmV0YWluUHRyPENGVVJMU3RvcmFnZVNlc3Npb25S
ZWY+IG1fc3RvcmFnZVNlc3Npb247CiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKLSAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU+IG1fZGVsZWdhdGU7Ci0gICAgUmVzb3VyY2VSZXNw
b25zZSBtX3Jlc3BvbnNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJsUmVzb3VyY2VIYW5kbGVE
ZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsKKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50
UmVxdWVzdDsKKyAgICBib29sIG1fY2FuY2VsbGVkIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBt
X3JlZGlyZWN0Q291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9hdXRoRmFpbHVyZUNvdW50IHsg
MCB9OworICAgIGJvb2wgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgeyBmYWxzZSB9Owor
ICAgIFJlZlB0cjxDdXJsUmVxdWVzdD4gbV9jdXJsUmVxdWVzdDsKICNlbmRpZgogCiAjaWYgVVNF
KFNPVVApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENhY2hlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybENhY2hlTWFuYWdlci5jcHAKaW5kZXggOWFjZDE5NWUyODUuLmE4ZGViOTg4ZTFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENhY2hl
TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDYWNoZU1hbmFnZXIuY3BwCkBAIC0xOTksMTAgKzE5OSw2IEBAIHZvaWQgQ3VybENhY2hlTWFu
YWdlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlJiBqb2IsIFJlc291cmNlUmVz
cG9uc2UmCiAgICAgaWYgKG1fZGlzYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2IuZ2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoIWQtPm1f
ZGVsZWdhdGUtPmhhc0hhbmRsZSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBjb25zdCBTdHJp
bmcmIHVybCA9IGpvYi5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKIAogICAgIHJlbW92
ZUNhY2hlRW50cnlDbGllbnQodXJsLCAmam9iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKaW5kZXggYzAzMzUzOGFhNWIu
LjE4NjQyMGFmZGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBDdXJsRG93bmxvYWQ6On5DdXJsRG93bmxvYWQoKQogewogICAgIGlmIChtX2N1cmxS
ZXF1ZXN0KQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7CisgICAg
ICAgIG1fY3VybFJlcXVlc3QtPmludmFsaWRhdGVDbGllbnQoKTsKIH0KIAogdm9pZCBDdXJsRG93
bmxvYWQ6OmluaXQoQ3VybERvd25sb2FkTGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBVUkwmIHVy
bCkKQEAgLTc2LDEwICs3NiwxMSBAQCBib29sIEN1cmxEb3dubG9hZDo6Y2FuY2VsKCkKIAogUmVm
PEN1cmxSZXF1ZXN0PiBDdXJsRG93bmxvYWQ6OmNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0
LCB0aGlzKTsKKyAgICBhdXRvIGN1cmxSZXF1ZXN0ID0gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1
ZXN0LCAqdGhpcyk7CisgICAgcmV0dXJuIGN1cmxSZXF1ZXN0OwogfQogCi12b2lkIEN1cmxEb3du
bG9hZDo6Y3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNl
KQordm9pZCBDdXJsRG93bmxvYWQ6OmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoQ3VybFJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIApAQCAtOTYsMTEgKzk3LDExIEBAIHZvaWQgQ3VybERvd25sb2FkOjpj
dXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVzcG9uc2UpCiAgICAg
aWYgKG1fbGlzdGVuZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRpZFJlY2VpdmVSZXNwb25zZSht
X3Jlc3BvbnNlKTsKIAotICAgIG1fY3VybFJlcXVlc3QtPmNvbXBsZXRlRGlkUmVjZWl2ZVJlc3Bv
bnNlKCk7CisgICAgcmVxdWVzdC5jb21wbGV0ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogfQogCiAK
LXZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVy
PiYmIGJ1ZmZlcikKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihDdXJs
UmVxdWVzdCYgcmVxdWVzdCwgUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMTExLDcgKzExMiw3IEBAIHZvaWQgQ3VybERvd25s
b2FkOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKICAg
ICAgICAgbV9saXN0ZW5lci0+ZGlkUmVjZWl2ZURhdGFPZkxlbmd0aChidWZmZXItPnNpemUoKSk7
CiB9CiAKLXZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkQ29tcGxldGUoKQordm9pZCBDdXJsRG93
bmxvYWQ6OmN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xMTksMjMgKzEyMCwyMyBAQCB2b2lkIEN1cmxEb3du
bG9hZDo6Y3VybERpZENvbXBsZXRlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2Rl
c3RpbmF0aW9uLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9jdXJsUmVxdWVzdCAmJiAhbV9j
dXJsUmVxdWVzdC0+Z2V0RG93bmxvYWRlZEZpbGVQYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUobV9jdXJsUmVxdWVzdC0+Z2V0RG93bmxvYWRlZEZpbGVQ
YXRoKCksIG1fZGVzdGluYXRpb24pOworICAgICAgICBpZiAoIXJlcXVlc3QuZ2V0RG93bmxvYWRl
ZEZpbGVQYXRoKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgRmlsZVN5c3RlbTo6bW92ZUZpbGUo
cmVxdWVzdC5nZXREb3dubG9hZGVkRmlsZVBhdGgoKSwgbV9kZXN0aW5hdGlvbik7CiAgICAgfQog
CiAgICAgaWYgKG1fbGlzdGVuZXIpCiAgICAgICAgIG1fbGlzdGVuZXItPmRpZEZpbmlzaCgpOwog
fQogCi12b2lkIEN1cmxEb3dubG9hZDo6Y3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3ZvaWQgQ3VybERvd25sb2FkOjpjdXJsRGlkRmFpbFdp
dGhFcnJvcihDdXJsUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3Vy
Y2VFcnJvcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKG1faXND
YW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2RlbGV0ZXNGaWxlVXBvbkZh
aWx1cmUgJiYgbV9jdXJsUmVxdWVzdCAmJiAhbV9jdXJsUmVxdWVzdC0+Z2V0RG93bmxvYWRlZEZp
bGVQYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fY3Vy
bFJlcXVlc3QtPmdldERvd25sb2FkZWRGaWxlUGF0aCgpKTsKKyAgICBpZiAobV9kZWxldGVzRmls
ZVVwb25GYWlsdXJlICYmICFyZXF1ZXN0LmdldERvd25sb2FkZWRGaWxlUGF0aCgpLmlzRW1wdHko
KSkKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShyZXF1ZXN0LmdldERvd25sb2FkZWRG
aWxlUGF0aCgpKTsKIAogICAgIGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xpc3RlbmVyLT5k
aWRGYWlsKCk7CkBAIC0xOTQsNyArMTk1LDYgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OndpbGxTZW5k
UmVxdWVzdCgpCiAgICAgfQogCiAgICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7Ci0gICAgbV9j
dXJsUmVxdWVzdC0+c2V0Q2xpZW50KG51bGxwdHIpOwogCiAgICAgbV9jdXJsUmVxdWVzdCA9IGNy
ZWF0ZUN1cmxSZXF1ZXN0KG5ld1JlcXVlc3QpOwogICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25s
b2FkLmgKaW5kZXggOGFhZjcwZmIwZjIuLmM2ZjVjNTk2ZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oCkBAIC03MCwxMSAr
NzAsMTEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFJlZjxDdXJsUmVxdWVzdD4gY3JlYXRl
Q3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjdXJsRGlkU2VuZERhdGEo
dW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpIG92ZXJyaWRlIHsgfQotICAg
IHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY3VybERpZENvbXBsZXRlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
dXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBjdXJsRGlkU2VuZERhdGEoQ3VybFJlcXVlc3QmLCB1bnNpZ25lZCBsb25nIGxvbmcsIHVu
c2lnbmVkIGxvbmcgbG9uZykgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2ZVJl
c3BvbnNlKEN1cmxSZXF1ZXN0JiwgY29uc3QgQ3VybFJlc3BvbnNlJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihDdXJsUmVxdWVzdCYsIFJlZjxTaGFyZWRCdWZmZXI+
JiYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZENvbXBsZXRlKEN1cmxSZXF1ZXN0Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlRXJyb3ImKSBvdmVycmlkZTsKIAogICAgIGJvb2wgc2hvdWxkUmVkaXJlY3RBc0dF
VChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sIGNyb3NzT3JpZ2luKTsKICAgICB2b2lkIHdp
bGxTZW5kUmVxdWVzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsUmVxdWVzdC5jcHAKaW5kZXggZjNlYmQ2OGY3MWUuLjAzNjUzN2Y4YTUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVx
dWVzdC5jcHAKQEAgLTM5LDEzICszOSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEN1cmxS
ZXF1ZXN0OjpDdXJsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmcmVxdWVzdCwgQ3VybFJl
cXVlc3RDbGllbnQqIGNsaWVudCwgYm9vbCBzaG91bGRTdXNwZW5kLCBib29sIGVuYWJsZU11bHRp
cGFydCkKICAgICA6IG1fcmVxdWVzdChyZXF1ZXN0Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9j
bGllbnQoY2xpZW50KQogICAgICwgbV9zaG91bGRTdXNwZW5kKHNob3VsZFN1c3BlbmQpCiAgICAg
LCBtX2VuYWJsZU11bHRpcGFydChlbmFibGVNdWx0aXBhcnQpCiAgICAgLCBtX2Zvcm1EYXRhU3Ry
ZWFtKG1fcmVxdWVzdC5odHRwQm9keSgpKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICBzZXRDbGllbnQoY2xpZW50KTsKIH0KIAogdm9pZCBDdXJsUmVxdWVzdDo6c2V0VXNl
clBhc3MoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQpAQCAtMTI1
LDYgKzEyNCw3IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmNhbmNlbCgpCiAKICAgICBzZXRSZXF1ZXN0
UGF1c2VkKGZhbHNlKTsKICAgICBzZXRDYWxsYmFja1BhdXNlZChmYWxzZSk7CisgICAgaW52YWxp
ZGF0ZUNsaWVudCgpOwogfQogCiB2b2lkIEN1cmxSZXF1ZXN0OjpzdXNwZW5kKCkKQEAgLTE0Miwx
OCArMTQyLDE4IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OnJlc3VtZSgpCiB9CiAKIC8qIGB0aGlzYCBp
cyBwcm90ZWN0ZWQgaW5zaWRlIHRoaXMgbWV0aG9kLiAqLwotdm9pZCBDdXJsUmVxdWVzdDo6Y2Fs
bENsaWVudChXVEY6OkZ1bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3RDbGllbnQmKT4gdGFzaykKK3Zv
aWQgQ3VybFJlcXVlc3Q6OmNhbGxDbGllbnQoV1RGOjpGdW5jdGlvbjx2b2lkKEN1cmxSZXF1ZXN0
JiwgQ3VybFJlcXVlc3RDbGllbnQmKT4gdGFzaykKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkp
IHsKICAgICAgICAgaWYgKEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQgPSBtX2NsaWVudCkgewog
ICAgICAgICAgICAgUmVmUHRyPEN1cmxSZXF1ZXN0Q2xpZW50PiBwcm90ZWN0ZWRDbGllbnQoY2xp
ZW50KTsKLSAgICAgICAgICAgIHRhc2soKmNsaWVudCk7CisgICAgICAgICAgICB0YXNrKCp0aGlz
LCAqY2xpZW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFz
ayldKCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdURk1vdmUodGFzayldKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBpZiAoQ3VybFJlcXVlc3RDbGllbnQqIGNsaWVudCA9IHByb3RlY3RlZFRo
aXMtPm1fY2xpZW50KSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPEN1cmxSZXF1ZXN0Q2xpZW50
PiBwcm90ZWN0ZWRDbGllbnQoY2xpZW50KTsKLSAgICAgICAgICAgICAgICB0YXNrKCpjbGllbnQp
OworICAgICAgICAgICAgICAgIHRhc2soKnRoaXMsICpjbGllbnQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9KTsKICAgICB9CkBAIC0yNTksOCArMjU5LDggQEAgc2l6ZV90IEN1cmxSZXF1ZXN0
Ojp3aWxsU2VuZERhdGEoY2hhciogYnVmZmVyLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVt
YmVyT2YKICAgICAgICAgcmV0dXJuIENVUkxfUkVBREZVTkNfQUJPUlQ7CiAgICAgfQogCi0gICAg
Y2FsbENsaWVudChbdGhpcywgdG90YWxSZWFkU2l6ZSA9IG1fZm9ybURhdGFTdHJlYW0udG90YWxS
ZWFkU2l6ZSgpLCB0b3RhbFNpemUgPSBtX2Zvcm1EYXRhU3RyZWFtLnRvdGFsU2l6ZSgpXShDdXJs
UmVxdWVzdENsaWVudCYgY2xpZW50KSB7Ci0gICAgICAgIGNsaWVudC5jdXJsRGlkU2VuZERhdGEo
dG90YWxSZWFkU2l6ZSwgdG90YWxTaXplKTsKKyAgICBjYWxsQ2xpZW50KFt0b3RhbFJlYWRTaXpl
ID0gbV9mb3JtRGF0YVN0cmVhbS50b3RhbFJlYWRTaXplKCksIHRvdGFsU2l6ZSA9IG1fZm9ybURh
dGFTdHJlYW0udG90YWxTaXplKCldKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENs
aWVudCYgY2xpZW50KSB7CisgICAgICAgIGNsaWVudC5jdXJsRGlkU2VuZERhdGEocmVxdWVzdCwg
dG90YWxSZWFkU2l6ZSwgdG90YWxTaXplKTsKICAgICB9KTsKIAogICAgIHJldHVybiAqc2VuZEJ5
dGVzOwpAQCAtMzYxLDggKzM2MSw4IEBAIHNpemVfdCBDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZURh
dGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCiAgICAgICAgIGlmIChtX211bHRpcGFydEhh
bmRsZSkKICAgICAgICAgICAgIG1fbXVsdGlwYXJ0SGFuZGxlLT5kaWRSZWNlaXZlRGF0YShidWZm
ZXIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxDbGllbnQoW2J1ZmZlciA9IFdU
Rk1vdmUoYnVmZmVyKV0oQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSk7
CisgICAgICAgICAgICBjYWxsQ2xpZW50KFtidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKEN1cmxS
ZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50KSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBjbGllbnQuY3VybERpZFJlY2VpdmVCdWZmZXIocmVxdWVzdCwgV1RGTW92
ZShidWZmZXIpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgfQpAQCAtMzkzLDgg
KzM5Myw4IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhRnJvbU11bHRpcGFydChS
ZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKICAgICBhdXRvIHJlY2VpdmVCeXRlcyA9IGJ1ZmZl
ci0+c2l6ZSgpOwogCiAgICAgaWYgKHJlY2VpdmVCeXRlcykgewotICAgICAgICBjYWxsQ2xpZW50
KFtidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIG11
dGFibGUgewotICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUo
YnVmZmVyKSk7CisgICAgICAgIGNhbGxDbGllbnQoW2J1ZmZlciA9IFdURk1vdmUoYnVmZmVyKV0o
Q3VybFJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIG11dGFibGUg
eworICAgICAgICAgICAgY2xpZW50LmN1cmxEaWRSZWNlaXZlQnVmZmVyKHJlcXVlc3QsIFdURk1v
dmUoYnVmZmVyKSk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTQyMSw4ICs0MjEsOCBAQCB2
b2lkIEN1cmxSZXF1ZXN0OjpkaWRDb21wbGV0ZVRyYW5zZmVyKENVUkxjb2RlIHJlc3VsdCkKICAg
ICAgICAgICAgICAgICBtX25ldHdvcmtMb2FkTWV0cmljcyA9ICptZXRyaWNzOwogCiAgICAgICAg
ICAgICBmaW5hbGl6ZVRyYW5zZmVyKCk7Ci0gICAgICAgICAgICBjYWxsQ2xpZW50KFtdKEN1cmxS
ZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKLSAgICAgICAgICAgICAgICBjbGllbnQuY3VybERpZENv
bXBsZXRlKCk7CisgICAgICAgICAgICBjYWxsQ2xpZW50KFtdKEN1cmxSZXF1ZXN0JiByZXF1ZXN0
LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50KSB7CisgICAgICAgICAgICAgICAgY2xpZW50LmN1
cmxEaWRDb21wbGV0ZShyZXF1ZXN0KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAg
fSBlbHNlIHsKQEAgLTQzMiw4ICs0MzIsOCBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpkaWRDb21wbGV0
ZVRyYW5zZmVyKENVUkxjb2RlIHJlc3VsdCkKICAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0
U3NsRXJyb3JzKG1fc3NsVmVyaWZpZXItPnNzbEVycm9ycygpKTsKIAogICAgICAgICBmaW5hbGl6
ZVRyYW5zZmVyKCk7Ci0gICAgICAgIGNhbGxDbGllbnQoW2Vycm9yID0gcmVzb3VyY2VFcnJvci5p
c29sYXRlZENvcHkoKV0oQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgewotICAgICAgICAgICAg
Y2xpZW50LmN1cmxEaWRGYWlsV2l0aEVycm9yKGVycm9yKTsKKyAgICAgICAgY2FsbENsaWVudChb
ZXJyb3IgPSByZXNvdXJjZUVycm9yLmlzb2xhdGVkQ29weSgpXShDdXJsUmVxdWVzdCYgcmVxdWVz
dCwgQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgeworICAgICAgICAgICAgY2xpZW50LmN1cmxE
aWRGYWlsV2l0aEVycm9yKHJlcXVlc3QsIGVycm9yKTsKICAgICAgICAgfSk7CiAgICAgfQogfQpA
QCAtNTMzLDggKzUzMyw4IEBAIHZvaWQgQ3VybFJlcXVlc3Q6Omludm9rZURpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBDdXJsUmVzcG9uc2UmIHJlc3BvbnNlLCBBY3Rpb24KICAgICBtX2RpZE5vdGlm
eVJlc3BvbnNlID0gdHJ1ZTsKICAgICBtX2FjdGlvbkFmdGVySW52b2tlID0gYmVoYXZpb3JBZnRl
ckludm9rZTsKIAotICAgIGNhbGxDbGllbnQoW3Jlc3BvbnNlID0gcmVzcG9uc2UuaXNvbGF0ZWRD
b3B5KCldKEN1cmxSZXF1ZXN0Q2xpZW50JiBjbGllbnQpIHsKLSAgICAgICAgY2xpZW50LmN1cmxE
aWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIGNhbGxDbGllbnQoW3Jlc3BvbnNlID0g
cmVzcG9uc2UuaXNvbGF0ZWRDb3B5KCldKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBDdXJsUmVxdWVz
dENsaWVudCYgY2xpZW50KSB7CisgICAgICAgIGNsaWVudC5jdXJsRGlkUmVjZWl2ZVJlc3BvbnNl
KHJlcXVlc3QsIHJlc3BvbnNlKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAppbmRleCA4MmZkYzg1YzA5OC4u
YzRmYjcwYzJjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdC5oCkBAIC01NiwxNCArNTYsMTQgQEAgcHVibGljOgogICAgICAgICBZ
ZXMgPSB0cnVlCiAgICAgfTsKIAotICAgIHN0YXRpYyBSZWY8Q3VybFJlcXVlc3Q+IGNyZWF0ZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQs
IFNob3VsZFN1c3BlbmQgc2hvdWxkU3VzcGVuZCA9IFNob3VsZFN1c3BlbmQ6Ok5vLCBFbmFibGVN
dWx0aXBhcnQgZW5hYmxlTXVsdGlwYXJ0ID0gRW5hYmxlTXVsdGlwYXJ0OjpObykKKyAgICBzdGF0
aWMgUmVmPEN1cmxSZXF1ZXN0PiBjcmVhdGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBDdXJsUmVxdWVzdENsaWVudCYgY2xpZW50LCBTaG91bGRTdXNwZW5kIHNob3VsZFN1c3BlbmQg
PSBTaG91bGRTdXNwZW5kOjpObywgRW5hYmxlTXVsdGlwYXJ0IGVuYWJsZU11bHRpcGFydCA9IEVu
YWJsZU11bHRpcGFydDo6Tm8pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
dXJsUmVxdWVzdChyZXF1ZXN0LCBjbGllbnQsIHNob3VsZFN1c3BlbmQgPT0gU2hvdWxkU3VzcGVu
ZDo6WWVzLCBlbmFibGVNdWx0aXBhcnQgPT0gRW5hYmxlTXVsdGlwYXJ0OjpZZXMpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3VybFJlcXVlc3QocmVxdWVzdCwgJmNsaWVudCwgc2hv
dWxkU3VzcGVuZCA9PSBTaG91bGRTdXNwZW5kOjpZZXMsIGVuYWJsZU11bHRpcGFydCA9PSBFbmFi
bGVNdWx0aXBhcnQ6OlllcykpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkN1cmxSZXF1ZXN0KCkg
PSBkZWZhdWx0OwogCi0gICAgdm9pZCBzZXRDbGllbnQoQ3VybFJlcXVlc3RDbGllbnQqIGNsaWVu
dCkgeyBtX2NsaWVudCA9IGNsaWVudDsgIH0KKyAgICB2b2lkIGludmFsaWRhdGVDbGllbnQoKSB7
IG1fY2xpZW50ID0gbnVsbHB0cjsgIH0KICAgICB2b2lkIHNldFVzZXJQYXNzKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBzdGFydChib29sIGlzU3luY1JlcXVlc3Qg
PSBmYWxzZSk7CkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc3RhcnRX
aXRoSm9iTWFuYWdlcigpOwogCi0gICAgdm9pZCBjYWxsQ2xpZW50KFdURjo6RnVuY3Rpb248dm9p
ZChDdXJsUmVxdWVzdENsaWVudCYpPik7CisgICAgdm9pZCBjYWxsQ2xpZW50KFdURjo6RnVuY3Rp
b248dm9pZChDdXJsUmVxdWVzdCYsIEN1cmxSZXF1ZXN0Q2xpZW50Jik+KTsKIAogICAgIC8vIFRy
YW5zZmVyIHByb2Nlc3Npbmcgb2YgUmVxdWVzdCBib2R5LCBSZXNwb25zZSBoZWFkZXIvYm9keQog
ICAgIC8vIENhbGxlZCBieSB3b3JrZXIgdGhyZWFkIGluIGNhc2Ugb2YgYXN5bmMsIG1haW4gdGhy
ZWFkIGluIGNhc2Ugb2Ygc3luYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Q2xpZW50LmgKaW5kZXggMzljMjAyMmMzNGQuLjAz
M2I4ZTkzYTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybFJlcXVlc3RDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybFJlcXVlc3RDbGllbnQuaApAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEN1cmxSZXF1ZXN0OwogY2xhc3MgQ3VybFJlc3BvbnNlOwog
Y2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKQEAgLTM4LDExICszOSwx
MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZigpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGVyZWYoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3VybERpZFNlbmREYXRhKHVuc2ln
bmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9C
ZVNlbnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBDdXJsUmVzcG9uc2UmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGN1cmxEaWRSZWNlaXZlQnVm
ZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3VybERpZENv
bXBsZXRlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihjb25z
dCBSZXNvdXJjZUVycm9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkU2VuZERhdGEo
Q3VybFJlcXVlc3QmLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25n
IGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cmxEaWRS
ZWNlaXZlUmVzcG9uc2UoQ3VybFJlcXVlc3QmLCBjb25zdCBDdXJsUmVzcG9uc2UmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGN1cmxEaWRSZWNlaXZlQnVmZmVyKEN1cmxSZXF1ZXN0JiwgUmVmPFNo
YXJlZEJ1ZmZlcj4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkQ29tcGxldGUoQ3Vy
bFJlcXVlc3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9yKEN1
cmxSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYmZjNzMzYzQxYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VI
YW5kbGVEZWxlZ2F0ZS5jcHAKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTkFWRVIgQ29ycC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgiCisKKyNpbmNs
dWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKKyNpbmNs
dWRlICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIgorCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisK
KyNpZiBVU0UoQ1VSTCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDdXJsUmVzb3VyY2VIYW5k
bGVEZWxlZ2F0ZTo6Q3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUmIGhh
bmRsZSkKKyAgICA6IG1faGFuZGxlKGhhbmRsZSkKK3sKKworfQorCit2b2lkIEN1cmxSZXNvdXJj
ZUhhbmRsZURlbGVnYXRlOjpyZWYoKQoreworICAgIG1faGFuZGxlLnJlZigpOworfQorCit2b2lk
IEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpkZXJlZigpCit7CisgICAgbV9oYW5kbGUuZGVy
ZWYoKTsKK30KKworYm9vbCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y2FuY2VsbGVkT3JD
bGllbnRsZXNzKCkKK3sKKyAgICByZXR1cm4gbV9oYW5kbGUuY2FuY2VsbGVkT3JDbGllbnRsZXNz
KCk7Cit9CisKK1Jlc291cmNlSGFuZGxlQ2xpZW50KiBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0
ZTo6Y2xpZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYW5kbGUuY2xpZW50KCk7Cit9CisK
K1Jlc291cmNlSGFuZGxlSW50ZXJuYWwqIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpkKCkK
K3sKKyAgICByZXR1cm4gbV9oYW5kbGUuZ2V0SW50ZXJuYWwoKTsKK30KKwordm9pZCBDdXJsUmVz
b3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y3VybERpZFNlbmREYXRhKEN1cmxSZXF1ZXN0JiByZXF1ZXN0
LCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxC
eXRlc1RvQmVTZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAo
Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsaWVudCgp
LT5kaWRTZW5kRGF0YSgmbV9oYW5kbGUsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KTsK
K30KKworc3RhdGljIHZvaWQgaGFuZGxlQ29va2llSGVhZGVycyhjb25zdCBDdXJsUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIHN0YXRpYyBjb25zdCBhdXRvIHNldENvb2tpZUhlYWRlciA9ICJz
ZXQtY29va2llOiAiOworCisgICAgY29uc3QgYXV0byYgc3RvcmFnZVNlc3Npb24gPSBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpOworICAgIGNvbnN0IGF1dG8m
IGNvb2tpZUphciA9IHN0b3JhZ2VTZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGhlYWRlciA6IHJlc3BvbnNlLmhlYWRlcnMpIHsKKyAgICAgICAgaWYgKGhlYWRl
ci5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2Uoc2V0Q29va2llSGVhZGVyKSkgeworICAgICAg
ICAgICAgY29uc3QgYXV0byBjb250ZW50cyA9IGhlYWRlci5yaWdodChoZWFkZXIubGVuZ3RoKCkg
LSBzdHJsZW4oc2V0Q29va2llSGVhZGVyKSk7CisgICAgICAgICAgICBjb29raWVKYXIuc2V0Q29v
a2llc0Zyb21IVFRQUmVzcG9uc2Uoc3RvcmFnZVNlc3Npb24sIHJlc3BvbnNlLnVybCwgY29udGVu
dHMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEN1cmxSZXNvdXJjZUhhbmRsZURlbGVn
YXRlOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKEN1cmxSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBD
dXJsUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlQoIWQoKS0+bV9kZWZlcnNMb2FkaW5nKTsKKworICAgIGlmIChjYW5j
ZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZXNwb25zZSA9
IFJlc291cmNlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSk7CisgICAgbV9yZXNwb25zZS5zZXRE
ZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKHJlcXVlc3QuZ2V0TmV0d29ya0xvYWRNZXRyaWNz
KCkpOworCisgICAgaGFuZGxlQ29va2llSGVhZGVycyhyZWNlaXZlZFJlc3BvbnNlKTsKKworICAg
IGlmIChtX3Jlc3BvbnNlLnNob3VsZFJlZGlyZWN0KCkpIHsKKyAgICAgICAgbV9oYW5kbGUud2ls
bFNlbmRSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yZXNw
b25zZS5pc1VuYXV0aG9yaXplZCgpKSB7CisgICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
IGNoYWxsZW5nZShyZWNlaXZlZFJlc3BvbnNlLCBkKCktPm1fYXV0aEZhaWx1cmVDb3VudCwgbV9y
ZXNwb25zZSwgJm1faGFuZGxlKTsKKyAgICAgICAgbV9oYW5kbGUuZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7CisgICAgICAgIGQoKS0+bV9hdXRoRmFpbHVyZUNv
dW50Kys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yZXNwb25zZS5pc05v
dE1vZGlmaWVkKCkpIHsKKyAgICAgICAgVVJMIGNhY2hlVXJsID0gbV9yZXNwb25zZS51cmwoKTsK
KyAgICAgICAgY2FjaGVVcmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisKKyAgICAgICAg
aWYgKEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmdldENhY2hlZFJlc3BvbnNlKGNhY2hl
VXJsLCBtX3Jlc3BvbnNlKSkgeworICAgICAgICAgICAgaWYgKGQoKS0+bV9hZGRlZENhY2hlVmFs
aWRhdGlvbkhlYWRlcnMpIHsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldEhUVFBTdGF0
dXNDb2RlKDIwMCk7CisgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4
dCgiT0siKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEN1cmxDYWNo
ZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZSwgbV9yZXNw
b25zZSk7CisKKyAgICBtX2hhbmRsZS5kaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25z
ZShtX3Jlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZEhhbmRsZSA9IG1ha2VSZWYobV9oYW5kbGUp
XSB7CisgICAgICAgIG1faGFuZGxlLmNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsK
KyAgICB9KTsKK30KKwordm9pZCBDdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZTo6Y3VybERpZFJl
Y2VpdmVCdWZmZXIoQ3VybFJlcXVlc3QmIHJlcXVlc3QsIFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVm
ZmVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoY2FuY2VsbGVk
T3JDbGllbnRsZXNzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEN1cmxDYWNoZU1hbmFnZXI6
OnNpbmdsZXRvbigpLmRpZFJlY2VpdmVEYXRhKG1faGFuZGxlLCBidWZmZXItPmRhdGEoKSwgYnVm
ZmVyLT5zaXplKCkpOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKCZtX2hhbmRsZSwg
V1RGTW92ZShidWZmZXIpLCBidWZmZXItPnNpemUoKSk7Cit9CisKK3ZvaWQgQ3VybFJlc291cmNl
SGFuZGxlRGVsZWdhdGU6OmN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50
bGVzcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc3BvbnNlLnNldERlcHJlY2F0ZWRO
ZXR3b3JrTG9hZE1ldHJpY3MocmVxdWVzdC5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7CisKKyAg
ICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGaW5pc2hMb2FkaW5nKG1faGFuZGxl
KTsKKyAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZygmbV9oYW5kbGUpOworfQorCit2b2lk
IEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlOjpjdXJsRGlkRmFpbFdpdGhFcnJvcihDdXJsUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVz
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24o
KS5kaWRGYWlsKG1faGFuZGxlKTsKKyAgICBjbGllbnQoKS0+ZGlkRmFpbCgmbV9oYW5kbGUsIHJl
c291cmNlRXJyb3IpOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlc291
cmNlSGFuZGxlRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi4xZGRhOGYzMGRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5oCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ3VybFJlcXVlc3RDbGllbnQu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBSZXNvdXJjZUhhbmRsZTsKK2NsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50OworY2xhc3Mg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKKworY2xhc3MgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdh
dGUgOiBwdWJsaWMgQ3VybFJlcXVlc3RDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEN1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgQ3VybFJlc291cmNlSGFuZGxlRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUmKTsK
KworICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNwb25zZTsgfQorCisgICAgLy8gQ3VybFJlcXVlc3RDbGllbnQgbWV0aG9kcworCisgICAg
dm9pZCByZWYoKTsKKyAgICB2b2lkIGRlcmVmKCk7CisKKyAgICB2b2lkIGN1cmxEaWRTZW5kRGF0
YShDdXJsUmVxdWVzdCYsIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZFJl
Y2VpdmVSZXNwb25zZShDdXJsUmVxdWVzdCYsIGNvbnN0IEN1cmxSZXNwb25zZSYpIG92ZXJyaWRl
OworICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoQ3VybFJlcXVlc3QmLCBSZWY8U2hhcmVk
QnVmZmVyPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRDb21wbGV0ZShDdXJsUmVxdWVz
dCYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZEZhaWxXaXRoRXJyb3IoQ3VybFJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZUVycm9yJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVzb3Vy
Y2VIYW5kbGUmIG1faGFuZGxlOworICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKwor
ICAgIGJvb2wgY2FuY2VsbGVkT3JDbGllbnRsZXNzKCk7CisgICAgUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCgpIGNvbnN0OworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQoKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggMjA4
MTU0NDRiMWMuLmU3YTEzMDkzMzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcApAQCAtMzIsMjAg
KzMyLDI3IEBACiAKICNpZiBVU0UoQ1VSTCkKIAorI2luY2x1ZGUgIkNvb2tpZUphckN1cmwuaCIK
ICNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgorI2luY2x1ZGUgIkN1cmxDYWNoZU1hbmFn
ZXIuaCIKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgorI2luY2x1ZGUgIkN1cmxSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTeW5jaHJvbm91c0xvYWRlckNsaWVu
dC5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9u
SGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFs
KCkKIHsKLSAgICBpZiAobV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cmVsZWFzZUhh
bmRsZSgpOworICAgIGlmIChtX2N1cmxSZXF1ZXN0KQorICAgICAgICBtX2N1cmxSZXF1ZXN0LT5p
bnZhbGlkYXRlQ2xpZW50KCk7CiB9CiAKIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUo
KSA9IGRlZmF1bHQ7CkBAIC01Niw2ICs2Myw5IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0
KCkKIAogICAgIEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKTsKIAorICAgIGlmICghZC0+bV9kZWxl
Z2F0ZS5nZXQoKSkKKyAgICAgICAgZC0+bV9kZWxlZ2F0ZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q3Vy
bFJlc291cmNlSGFuZGxlRGVsZWdhdGU+KCp0aGlzKTsKKwogICAgIC8vIFRoZSBmcmFtZSBjb3Vs
ZCBiZSBudWxsIGlmIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNzb2NpYXRlZCB0byBhbnkK
ICAgICAvLyBGcmFtZSwgZS5nLiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcgYSBmaWxlLgogICAgIC8v
IElmIHRoZSBmcmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBhZ2UgaXMgbnVsbCB0aGlzIG11c3Qg
YmUgYW4gYXR0ZW1wdGVkCkBAIC03MSwxNSArODEsNjcgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6
c3RhcnQoKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBkLT5tX2RlbGVnYXRl
ID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKHRoaXMpKTsKLSAgICBk
LT5tX2RlbGVnYXRlLT5zdGFydCgpOworICAgIGQtPm1fY3VybFJlcXVlc3QgPSBjcmVhdGVDdXJs
UmVxdWVzdChkLT5tX2N1cnJlbnRSZXF1ZXN0KTsKKworICAgIGlmIChhdXRvIGNyZWRlbnRpYWwg
PSBnZXRDcmVkZW50aWFsKGQtPm1fY3VycmVudFJlcXVlc3QsIGZhbHNlKSkKKyAgICAgICAgZC0+
bV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3MoY3JlZGVudGlhbC0+Zmlyc3QsIGNyZWRlbnRpYWwt
PnNlY29uZCk7CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5zdGFydCgpOworCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgpCiB7Ci0gICAgaWYgKGQt
Pm1fZGVsZWdhdGUpCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPmNhbmNlbCgpOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBkLT5tX2NhbmNlbGxlZCA9IHRydWU7CisKKyAgICBp
ZiAoIWQtPm1fY3VybFJlcXVlc3QpCisgICAgICAgIGQtPm1fY3VybFJlcXVlc3QtPmNhbmNlbCgp
OworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MoKQorewor
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gIWNsaWVudCgpOworfQorCitSZWY8Q3VybFJlcXVlc3Q+IFJlc291cmNlSGFuZGxlOjpjcmVh
dGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKworICAgIC8vIEN1cmxDYWNoZSA6IGFwcGVuZCBhZGRpdGlvbmFsIGNh
Y2hlIGluZm9ybWF0aW9uCisgICAgZC0+bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSBm
YWxzZTsKKworICAgIGJvb2wgaGFzQ2FjaGVIZWFkZXJzID0gcmVxdWVzdC5odHRwSGVhZGVyRmll
bGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSkgfHwgcmVxdWVz
dC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNo
KTsKKyAgICBpZiAoIWhhc0NhY2hlSGVhZGVycykgeworICAgICAgICBhdXRvJiBjYWNoZSA9IEN1
cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpOworICAgICAgICBVUkwgY2FjaGVVcmwgPSByZXF1
ZXN0LnVybCgpOworICAgICAgICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsK
KworICAgICAgICBpZiAoY2FjaGUuaXNDYWNoZWQoY2FjaGVVcmwpKSB7CisgICAgICAgICAgICBj
YWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KGNhY2hlVXJsLCB0aGlzKTsKKworICAgICAgICAgICAg
Zm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGNhY2hlLnJlcXVlc3RIZWFkZXJzKGNhY2hlVXJsKSkK
KyAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZChlbnRyeS5rZXksIGVu
dHJ5LnZhbHVlKTsKKworICAgICAgICAgICAgZC0+bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRl
cnMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgQ3VybFJlcXVlc3Q6OlNob3VsZFN1
c3BlbmQgc2hvdWxkU3VzcGVuZCA9IGQtPm1fZGVmZXJzTG9hZGluZyA/IEN1cmxSZXF1ZXN0OjpT
aG91bGRTdXNwZW5kOjpZZXMgOiBDdXJsUmVxdWVzdDo6U2hvdWxkU3VzcGVuZDo6Tm87CisgICAg
YXV0byBjdXJsUmVxdWVzdCA9IEN1cmxSZXF1ZXN0OjpjcmVhdGUocmVxdWVzdCwgKmRlbGVnYXRl
KCksIHNob3VsZFN1c3BlbmQsIEN1cmxSZXF1ZXN0OjpFbmFibGVNdWx0aXBhcnQ6Olllcyk7Cisg
ICAgCisgICAgcmV0dXJuIGN1cmxSZXF1ZXN0OworfQorCitDdXJsUmVzb3VyY2VIYW5kbGVEZWxl
Z2F0ZSogUmVzb3VyY2VIYW5kbGU6OmRlbGVnYXRlKCkKK3sKKyAgICBBU1NFUlQoZC0+bV9kZWxl
Z2F0ZSk7CisgICAgcmV0dXJuIGQtPm1fZGVsZWdhdGUuZ2V0KCk7CiB9CiAKICNpZiBPUyhXSU5E
T1dTKQpAQCAtMTE1LDggKzE3NywxOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNl
dERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKIAotICAgIGlmIChkLT5tX2RlbGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5zZXRE
ZWZlcnNMb2FkaW5nKGRlZmVycyk7CisgICAgaWYgKGRlZmVycyA9PSBkLT5tX2RlZmVyc0xvYWRp
bmcpCisgICAgICAgIHJldHVybjsKKworICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsK
KworICAgIGlmICghZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGQtPm1fZGVmZXJzTG9hZGluZykKKyAgICAgICAgZC0+bV9jdXJsUmVxdWVzdC0+c3VzcGVuZCgp
OworICAgIGVsc2UKKyAgICAgICAgZC0+bV9jdXJsUmVxdWVzdC0+cmVzdW1lKCk7CiB9CiAKIGJv
b2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkKQEAgLTEzNyw5
ICsyMDksOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbAogICAgICAgICBpZiAoY2hhbGxlbmdl
LmZhaWx1cmVSZXNwb25zZSgpLmh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxKQogICAgICAgICAgICAg
dXJsVG9TdG9yZSA9IGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKTsKICAgICAgICAg
Q3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRp
b24sIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgdXJsVG9TdG9yZSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgIGQtPm1f
ZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFs
LnBhc3N3b3JkKCkpOworCisgICAgICAgIHJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY3Jl
ZGVudGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAKICAgICAgICAgZC0+bV91
c2VyID0gU3RyaW5nKCk7CiAgICAgICAgIGQtPm1fcGFzcyA9IFN0cmluZygpOwpAQCAtMTY0LDgg
KzIzNSw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAgICAgICAgICAgICAgICAgIENy
ZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9u
LCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWls
dXJlUmVzcG9uc2UoKS51cmwoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgaWYgKGQtPm1fZGVsZWdhdGUpCi0gICAgICAgICAgICAgICAgICAgIGQtPm1fZGVsZWdhdGUt
PnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3Jk
KCkpOworICAgICAgICAgICAgICAgIHJlc3RhcnRSZXF1ZXN0V2l0aENyZWRlbnRpYWwoY3JlZGVu
dGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMDAsOCArMjcwLDcgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiBjaGFsbGVuZ2UKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkLT5tX2RlbGVn
YXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5zZXRBdXRoZW50aWNhdGlvbihjcmVkZW50aWFs
LnVzZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICByZXN0YXJ0UmVxdWVzdFdpdGhD
cmVkZW50aWFsKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwogCiAg
ICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogfQpAQCAtMjE1LDExICsyODQsOCBAQCB2b2lkIFJl
c291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwo
Y29uc3QgQXV0aGVudGljYQogCiAgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogCi0gICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UoZC0+bV9yZXNwb25zZSksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKLSAgICAgICAgICAgIGQtPm1f
ZGVsZWdhdGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgZGlkUmVjZWl2ZVJl
c3BvbnNlKFJlc291cmNlUmVzcG9uc2UoZGVsZWdhdGUoKS0+cmVzcG9uc2UoKSksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgY29udGludWVBZnRlckRp
ZFJlY2VpdmVSZXNwb25zZSgpOwogICAgIH0pOwogfQogCkBAIC0yNDYsMTggKzMxMiw3NyBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENoYWxsZW5nZVJlamVjdGlvbihjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3N0
ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gUmVzb3VyY2VIYW5kbGU6Omdl
dENyZWRlbnRpYWwoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHJlZGlyZWN0KQorewor
ICAgIC8vIG1fdXNlci9tX3Bhc3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1hbnVhbGx5LCBmb3Ig
aW5zdGFuY2UsIGJ5IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4o
KS4KKyAgICBTdHJpbmcgcGFydGl0aW9uID0gcmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpOworCisg
ICAgaWYgKHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkpIHsKKyAgICAgICAgaWYgKGQtPm1f
dXNlci5pc0VtcHR5KCkgJiYgZC0+bV9wYXNzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8g
PHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUgcGF0aHMg
b2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0
aW9uLCAKKyAgICAgICAgICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJlZW1w
dGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgorICAgICAgICAgICAgZC0+bV9pbml0aWFs
Q3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2Uo
KS5nZXQocGFydGl0aW9uLCByZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghcmVk
aXJlY3QpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9u
IHNwYWNlIGtub3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzCisgICAg
ICAgICAgICAvLyBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QuIFRoaXMgbWFrZXMgaXQgcG9zc2li
bGUgdG8gaW1wbGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFuCisgICAgICAgICAgICAvLyBYTUxI
dHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29ycmVjdCBjcmVkZW50aWFscywgYW5kIGFib3J0aW5n
IGl0IGltbWVkaWF0ZWx5IChzbyB0aGF0CisgICAgICAgICAgICAvLyBhbiBhdXRoZW50aWNhdGlv
biBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgorICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6
OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIENyZWRlbnRpYWwoZC0+
bV91c2VyLCBkLT5tX3Bhc3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCByZXF1ZXN0LnVy
bCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyB1c2VyID0gZC0+bV91c2VyOwor
ICAgIFN0cmluZyBwYXNzd29yZCA9IGQtPm1fcGFzczsKKworICAgIGlmICghZC0+bV9pbml0aWFs
Q3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgdXNlciA9IGQtPm1faW5pdGlhbENyZWRl
bnRpYWwudXNlcigpOworICAgICAgICBwYXNzd29yZCA9IGQtPm1faW5pdGlhbENyZWRlbnRpYWwu
cGFzc3dvcmQoKTsKKyAgICB9CisKKyAgICBpZiAodXNlci5pc0VtcHR5KCkgJiYgcGFzc3dvcmQu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4odXNlciwgcGFzc3dvcmQpOworfQorCit2b2lkIFJlc291
cmNlSGFuZGxlOjpyZXN0YXJ0UmVxdWVzdFdpdGhDcmVkZW50aWFsKGNvbnN0IFN0cmluZyYgdXNl
ciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCisgICAgaWYgKCFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgYm9vbCBpc1N5bmNSZXF1ZXN0ID0gZC0+bV9jdXJsUmVxdWVzdC0+aXNTeW5jUmVxdWVzdCgp
OworICAgIGQtPm1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOworCisgICAgZC0+bV9jdXJsUmVxdWVz
dCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KGQtPm1fY3VycmVudFJlcXVlc3QpOworICAgIGQtPm1fY3Vy
bFJlcXVlc3QtPnNldFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKKyAgICBkLT5tX2N1cmxSZXF1
ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKK30KKwogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxh
dGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisgICAgYXV0
byBsb2NhbFJlcXVlc3QgPSByZXF1ZXN0OwogICAgIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50IGNs
aWVudDsKICAgICBib29sIGRlZmVyc0xvYWRpbmcgPSBmYWxzZTsKICAgICBib29sIHNob3VsZENv
bnRlbnRTbmlmZiA9IHRydWU7CiAgICAgYm9vbCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZiA9
IHRydWU7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihuZXcg
UmVzb3VyY2VIYW5kbGUoY29udGV4dCwgcmVxdWVzdCwgJmNsaWVudCwgZGVmZXJzTG9hZGluZywg
c2hvdWxkQ29udGVudFNuaWZmLCBzaG91bGRDb250ZW50RW5jb2RpbmdTbmlmZikpOwogCi0gICAg
aGFuZGxlLT5kLT5tX2RlbGVnYXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlKGhhbmRsZS5nZXQoKSkpOwotICAgIGhhbmRsZS0+ZC0+bV9kZWxlZ2F0ZS0+ZGlzcGF0
Y2hTeW5jaHJvbm91c0pvYigpOworICAgIGlmIChsb2NhbFJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
c0RhdGEoKSkgeworICAgICAgICBoYW5kbGUtPmhhbmRsZURhdGFVUkwoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIElmIGRlZmVyc0xvYWRpbmcgaXMgdHJ1ZSBhbmQgd2UgY2Fs
bCBjdXJsX2Vhc3lfcGVyZm9ybQorICAgIC8vIG9uIGEgcGF1c2VkIGhhbmRsZSwgbGliY1VSTCB3
b3VsZCBkbyB0aGUgdHJhbnNmZXIgYW55d2F5CisgICAgLy8gYW5kIHdlIHdvdWxkIGFzc2VydCBz
byBmb3JjZSBkZWZlcnNMb2FkaW5nIHRvIGJlIGZhbHNlLgorICAgIGhhbmRsZS0+ZC0+bV9kZWZl
cnNMb2FkaW5nID0gZmFsc2U7CisKKyAgICBoYW5kbGUtPmQtPm1fY3VybFJlcXVlc3QgPSBoYW5k
bGUtPmNyZWF0ZUN1cmxSZXF1ZXN0KGxvY2FsUmVxdWVzdCk7CisgICAgaGFuZGxlLT5kLT5tX2N1
cmxSZXF1ZXN0LT5zdGFydCh0cnVlKTsKIAogICAgIGVycm9yID0gY2xpZW50LmVycm9yKCk7CiAg
ICAgZGF0YS5zd2FwKGNsaWVudC5tdXRhYmxlRGF0YSgpKTsKQEAgLTI2OCw4ICszOTMsMTcyIEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtQ29udGludWVTeW5jaHJvbm91c0RpZFJlY2Vp
dmVSZXNwb25zZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmIChk
LT5tX2RlbGVnYXRlKQotICAgICAgICBkLT5tX2RlbGVnYXRlLT5wbGF0Zm9ybUNvbnRpbnVlU3lu
Y2hyb25vdXNEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2
ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNvbnRpbnVlQWZ0ZXJEaWRS
ZWNlaXZlUmVzcG9uc2UoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAv
LyBjb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYW5jZWwgdGhlIGxvYWQuCisgICAg
aWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpIHx8ICFkLT5tX2N1cmxSZXF1ZXN0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBkLT5tX2N1cmxSZXF1ZXN0LT5jb21wbGV0ZURpZFJlY2VpdmVSZXNw
b25zZSgpOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRSZWRpcmVjdEFzR0VUKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCBjcm9zc09yaWdpbikKK3sKKyAgICBp
ZiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkdFVCIgfHwgcmVxdWVzdC5odHRwTWV0aG9kKCkg
PT0gIkhFQUQiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlcXVlc3QudXJs
KCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLmlzU2VlT3RoZXIoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoKGRlbGVnYXRlKCktPnJlc3BvbnNlKCkuaXNNb3ZlZFBlcm1hbmVu
dGx5KCkgfHwgZGVsZWdhdGUoKS0+cmVzcG9uc2UoKS5pc0ZvdW5kKCkpICYmIChyZXF1ZXN0Lmh0
dHBNZXRob2QoKSA9PSAiUE9TVCIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChj
cm9zc09yaWdpbiAmJiAocmVxdWVzdC5odHRwTWV0aG9kKCkgPT0gIkRFTEVURSIpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZXNvdXJjZUhh
bmRsZTo6d2lsbFNlbmRSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhSZWRpcmVjdHMgPSAyMDsKKworICAgIGlmIChkLT5t
X3JlZGlyZWN0Q291bnQrKyA+IG1heFJlZGlyZWN0cykgeworICAgICAgICBjbGllbnQoKS0+ZGlk
RmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yOjpodHRwRXJyb3IoQ1VSTEVfVE9PX01BTllfUkVESVJF
Q1RTLCBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLnVybCgpKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBkZWxlZ2F0ZSgpLT5yZXNwb25zZSgpLmh0dHBI
ZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pOworICAgIFVSTCBuZXdVUkwgPSBV
UkwoZGVsZWdhdGUoKS0+cmVzcG9uc2UoKS51cmwoKSwgbG9jYXRpb24pOworICAgIGJvb2wgY3Jv
c3NPcmlnaW4gPSAhcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGQtPm1fZmlyc3RSZXF1ZXN0
LnVybCgpLCBuZXdVUkwpOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSBkLT5t
X2ZpcnN0UmVxdWVzdDsKKyAgICBuZXdSZXF1ZXN0LnNldFVSTChuZXdVUkwpOworCisgICAgaWYg
KHNob3VsZFJlZGlyZWN0QXNHRVQobmV3UmVxdWVzdCwgY3Jvc3NPcmlnaW4pKSB7CisgICAgICAg
IG5ld1JlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgIG5ld1JlcXVlc3Quc2V0
SFRUUEJvZHkobnVsbHB0cik7CisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5
cGUoKTsKKyAgICB9CisKKyAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVk
aXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KKyAgICBpZiAo
IW5ld1VSTC5wcm90b2NvbElzKCJodHRwcyIpICYmIHByb3RvY29sSXMobmV3UmVxdWVzdC5odHRw
UmVmZXJyZXIoKSwgImh0dHBzIikgJiYgY29udGV4dCgpLT5zaG91bGRDbGVhclJlZmVycmVyT25I
VFRQU1RvSFRUUFJlZGlyZWN0KCkpCisgICAgICAgIG5ld1JlcXVlc3QuY2xlYXJIVFRQUmVmZXJy
ZXIoKTsKKworICAgIGQtPm1fdXNlciA9IG5ld1VSTC51c2VyKCk7CisgICAgZC0+bV9wYXNzID0g
bmV3VVJMLnBhc3MoKTsKKyAgICBuZXdSZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisKKyAg
ICBpZiAoY3Jvc3NPcmlnaW4pIHsKKyAgICAgICAgLy8gSWYgdGhlIG5ldHdvcmsgbGF5ZXIgY2Fy
cmllcyBvdmVyIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgcmVxdWVz
dAorICAgICAgICAvLyBpbiBhIGNyb3NzLW9yaWdpbiByZWRpcmVjdCwgd2Ugd2FudCB0byBjbGVh
ciB0aG9zZSBoZWFkZXJzIGhlcmUuIAorICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUEF1dGhv
cml6YXRpb24oKTsKKyAgICAgICAgbmV3UmVxdWVzdC5jbGVhckhUVFBPcmlnaW4oKTsKKyAgICB9
CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlQ29weSA9IGRlbGVnYXRlKCktPnJlc3Bv
bnNlKCk7CisgICAgY2xpZW50KCktPndpbGxTZW5kUmVxdWVzdEFzeW5jKHRoaXMsIFdURk1vdmUo
bmV3UmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2VDb3B5KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKV0gKFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpIHsKKyAgICAgICAg
Y29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKTsKKyAgICB9KTsK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y29udGludWVBZnRlcldpbGxTZW5kUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICAvLyB3aWxsU2VuZFJlcXVlc3QgbWlnaHQgY2FuY2VsIHRoZSBsb2FkLgorICAgIGlm
IChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSB8fCAhZC0+bV9jdXJsUmVxdWVzdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZC0+bV9jdXJyZW50UmVxdWVzdCA9IFdURk1vdmUocmVxdWVzdCk7CisK
KyAgICBib29sIGlzU3luY1JlcXVlc3QgPSBkLT5tX2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0
KCk7CisgICAgZC0+bV9jdXJsUmVxdWVzdC0+Y2FuY2VsKCk7CisKKyAgICBkLT5tX2N1cmxSZXF1
ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QoZC0+bV9jdXJyZW50UmVxdWVzdCk7CisKKyAgICBpZiAo
cHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKGQtPm1fY3VycmVudFJlcXVlc3QudXJsKCksIGRl
bGVnYXRlKCktPnJlc3BvbnNlKCkudXJsKCkpKSB7CisgICAgICAgIGlmIChhdXRvIGNyZWRlbnRp
YWwgPSBnZXRDcmVkZW50aWFsKGQtPm1fY3VycmVudFJlcXVlc3QsIHRydWUpKQorICAgICAgICAg
ICAgZC0+bV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3MoY3JlZGVudGlhbC0+Zmlyc3QsIGNyZWRl
bnRpYWwtPnNlY29uZCk7CisgICAgfQorCisgICAgZC0+bV9jdXJsUmVxdWVzdC0+c3RhcnQoaXNT
eW5jUmVxdWVzdCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQor
eworICAgIEFTU0VSVChkLT5tX2ZpcnN0UmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0YSgpKTsK
KyAgICBTdHJpbmcgdXJsID0gZC0+bV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCk7CisKKyAg
ICBBU1NFUlQoY2xpZW50KCkpOworCisgICAgYXV0byBpbmRleCA9IHVybC5maW5kKCcsJyk7Cisg
ICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgIGNsaWVudCgpLT5jYW5ub3RTaG93
VVJMKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nIG1lZGlhVHlw
ZSA9IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKKyAgICBTdHJpbmcgZGF0YSA9IHVybC5z
dWJzdHJpbmcoaW5kZXggKyAxKTsKKyAgICBhdXRvIG9yaWdpbmFsU2l6ZSA9IGRhdGEubGVuZ3Ro
KCk7CisKKyAgICBib29sIGJhc2U2NCA9IG1lZGlhVHlwZS5lbmRzV2l0aElnbm9yaW5nQVNDSUlD
YXNlKCI7YmFzZTY0Iik7CisgICAgaWYgKGJhc2U2NCkKKyAgICAgICAgbWVkaWFUeXBlID0gbWVk
aWFUeXBlLmxlZnQobWVkaWFUeXBlLmxlbmd0aCgpIC0gNyk7CisKKyAgICBpZiAobWVkaWFUeXBl
LmlzRW1wdHkoKSkKKyAgICAgICAgbWVkaWFUeXBlID0gQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWlu
Iik7CisKKyAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBl
KG1lZGlhVHlwZSk7CisgICAgU3RyaW5nIGNoYXJzZXQgPSBleHRyYWN0Q2hhcnNldEZyb21NZWRp
YVR5cGUobWVkaWFUeXBlKTsKKworICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
Y2hhcnNldCA9IEFTQ0lJTGl0ZXJhbCgiVVMtQVNDSUkiKTsKKworICAgIFJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2U7CisgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOworICAgIHJl
c3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7CisgICAgcmVzcG9uc2Uuc2V0VVJM
KGQtPm1fZmlyc3RSZXF1ZXN0LnVybCgpKTsKKworICAgIGlmIChiYXNlNjQpIHsKKyAgICAgICAg
ZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKKyAgICAgICAgZGlkUmVjZWl2
ZVJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7CisgICAgICAgICAgICBjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNl
KCk7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIGRpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBj
YXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCisgICAgICAgIGlmIChjbGllbnQoKSkgewor
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IG91dDsKKyAgICAgICAgICAgIGlmIChiYXNlNjREZWNv
ZGUoZGF0YSwgb3V0LCBCYXNlNjRJZ25vcmVTcGFjZXNBbmROZXdMaW5lcykgJiYgb3V0LnNpemUo
KSA+IDApCisgICAgICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVCdWZmZXIodGhpcywg
U2hhcmVkQnVmZmVyOjpjcmVhdGUob3V0LmRhdGEoKSwgb3V0LnNpemUoKSksIG9yaWdpbmFsU2l6
ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBUZXh0RW5jb2RpbmcgZW5jb2Rp
bmcoY2hhcnNldCk7CisgICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0
YSwgZW5jb2RpbmcpOworICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25z
ZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgICAg
IGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUgZGVs
ZXRlZC4KKyAgICAgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgICAgICBhdXRvIGVuY29kZWRE
YXRhID0gZW5jb2RpbmcuZW5jb2RlKGRhdGEsIFVuZW5jb2RhYmxlSGFuZGxpbmc6OlVSTEVuY29k
ZWRFbnRpdGllcyk7CisgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKHRoaXMsIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKFdURk1vdmUoZW5jb2RlZERhdGEpKSwgb3JpZ2luYWxTaXplKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpZEZpbmlzaExv
YWRpbmcodGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGM0
NDY1NTZmZS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDUyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IE5BVkVSIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oIgotCi0jaWYgVVNF
KENVUkwpCi0KLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIgotI2luY2x1ZGUg
IkNvb2tpZUphckN1cmwuaCIKLSNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgotI2luY2x1
ZGUgIkN1cmxDYWNoZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJDdXJsUmVxdWVzdC5oIgotI2luY2x1
ZGUgIkhUVFBQYXJzZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9u
SGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZShSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotICAgIDogbV9oYW5kbGUoaGFuZGxlKQot
ICAgICwgbV9maXJzdFJlcXVlc3QoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5pc29sYXRlZENvcHko
KSkKLSAgICAsIG1fY3VycmVudFJlcXVlc3QoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5pc29sYXRl
ZENvcHkoKSkKLSAgICAsIG1fc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoaGFuZGxlLT5zaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKQotICAgICwgbV91c2VyKGhhbmRsZS0+Z2V0SW50ZXJu
YWwoKS0+bV91c2VyLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9wYXNzKGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKS0+bV9wYXNzLmlzb2xhdGVkQ29weSgpKQotICAgICwgbV9pbml0aWFsQ3JlZGVudGlh
bChoYW5kbGUtPmdldEludGVybmFsKCktPm1faW5pdGlhbENyZWRlbnRpYWwpCi0gICAgLCBtX2Rl
ZmVyc0xvYWRpbmcoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2RlZmVyc0xvYWRpbmcpCi17Ci0K
LX0KLQotUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6On5SZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZSgpCi17Ci0gICAgaWYgKG1fY3VybFJlcXVlc3QpCi0gICAgICAgIG1fY3VybFJlcXVlc3Qt
PnNldENsaWVudChudWxscHRyKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6aGFzSGFuZGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gISFtX2hhbmRsZTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cmVsZWFzZUhhbmRsZSgpCi17Ci0gICAgbV9o
YW5kbGUgPSBudWxscHRyOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpz
dGFydCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGF1dG8gY3JlZGVu
dGlhbCA9IGdldENyZWRlbnRpYWwobV9jdXJyZW50UmVxdWVzdCwgZmFsc2UpOwotCi0gICAgbV9j
dXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QpOwotICAgIG1f
Y3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRlbnRpYWwuZmlyc3QsIGNyZWRlbnRpYWwuc2Vj
b25kKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zdGFydCgpOwotfQotCi12b2lkIFJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpjYW5jZWwoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICByZWxlYXNlSGFuZGxlKCk7Ci0KLSAgICBpZiAoIW1fY3VybFJlcXVlc3QpCi0gICAg
ICAgIG1fY3VybFJlcXVlc3QtPmNhbmNlbCgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoZGVmZXJzID09IG1fZGVmZXJzTG9hZGluZykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOwotCi0gICAgaWYg
KCFtX2N1cmxSZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kZWZlcnNMb2Fk
aW5nKQotICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zdXNwZW5kKCk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2N1cmxSZXF1ZXN0LT5yZXN1bWUoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZTo6c2V0QXV0aGVudGljYXRpb24oY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJp
bmcmIHBhc3N3b3JkKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAo
IW1fY3VybFJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaXNTeW5jUmVxdWVz
dCA9IG1fY3VybFJlcXVlc3QtPmlzU3luY1JlcXVlc3QoKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5j
YW5jZWwoKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7Ci0KLSAgICBt
X2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7Ci0gICAg
bV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3ModXNlciwgcGFzc3dvcmQpOwotICAgIG1fY3VybFJl
cXVlc3QtPnN0YXJ0KGlzU3luY1JlcXVlc3QpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKLXsKLSAgICBpZiAobV9jdXJyZW50
UmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0YSgpKSB7Ci0gICAgICAgIGhhbmRsZURhdGFVUkwo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIGRlZmVyc0xvYWRpbmcgaXMg
dHJ1ZSBhbmQgd2UgY2FsbCBjdXJsX2Vhc3lfcGVyZm9ybQotICAgIC8vIG9uIGEgcGF1c2VkIGhh
bmRsZSwgbGliY1VSTCB3b3VsZCBkbyB0aGUgdHJhbnNmZXJ0IGFueXdheQotICAgIC8vIGFuZCB3
ZSB3b3VsZCBhc3NlcnQgc28gZm9yY2UgZGVmZXJzTG9hZGluZyB0byBiZSBmYWxzZS4KLSAgICBt
X2RlZmVyc0xvYWRpbmcgPSBmYWxzZTsKLQotICAgIG1fY3VybFJlcXVlc3QgPSBjcmVhdGVDdXJs
UmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5zdGFydCh0cnVl
KTsKLX0KLQotUmVmPEN1cmxSZXF1ZXN0PiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3Jl
YXRlQ3VybFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBDdXJsQ2FjaGUgOiBhcHBlbmQgYWRkaXRpb25hbCBj
YWNoZSBpbmZvcm1hdGlvbgotICAgIG1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzID0gZmFs
c2U7Ci0KLSAgICBib29sIGhhc0NhY2hlSGVhZGVycyA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxk
cygpLmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UpIHx8IHJlcXVlc3Qu
aHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lOjpJZk5vbmVNYXRjaCk7
Ci0gICAgaWYgKCFoYXNDYWNoZUhlYWRlcnMpIHsKLSAgICAgICAgYXV0byYgY2FjaGUgPSBDdXJs
Q2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKTsKLSAgICAgICAgVVJMIGNhY2hlVXJsID0gcmVxdWVz
dC51cmwoKTsKLSAgICAgICAgY2FjaGVVcmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0K
LSAgICAgICAgaWYgKGNhY2hlLmlzQ2FjaGVkKGNhY2hlVXJsKSkgewotICAgICAgICAgICAgY2Fj
aGUuYWRkQ2FjaGVFbnRyeUNsaWVudChjYWNoZVVybCwgbV9oYW5kbGUpOwotCi0gICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogY2FjaGUucmVxdWVzdEhlYWRlcnMoY2FjaGVVcmwp
KQotICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkKGVudHJ5LmtleSwg
ZW50cnkudmFsdWUpOwotCi0gICAgICAgICAgICBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVy
cyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDdXJsUmVxdWVzdDo6U2hvdWxkU3Vz
cGVuZCBzaG91bGRTdXNwZW5kID0gbV9kZWZlcnNMb2FkaW5nID8gQ3VybFJlcXVlc3Q6OlNob3Vs
ZFN1c3BlbmQ6OlllcyA6IEN1cmxSZXF1ZXN0OjpTaG91bGRTdXNwZW5kOjpObzsKLSAgICByZXR1
cm4gQ3VybFJlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0LCB0aGlzLCBzaG91bGRTdXNwZW5kLCBDdXJs
UmVxdWVzdDo6RW5hYmxlTXVsdGlwYXJ0OjpZZXMpOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MoKQotewotICAgIGlmICghbV9oYW5k
bGUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuICFtX2hhbmRsZS0+Y2xpZW50
KCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRTZW5kRGF0
YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxC
eXRlc1RvQmVTZW50KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAo
Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFuZGxl
LT5jbGllbnQoKS0+ZGlkU2VuZERhdGEobV9oYW5kbGUsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1Rv
QmVTZW50KTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlQ29va2llSGVhZGVycyhjb25zdCBDdXJs
UmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHN0YXRpYyBjb25zdCBhdXRvIHNldENvb2tpZUhl
YWRlciA9ICJzZXQtY29va2llOiAiOwotCi0gICAgYXV0byYgZGVmYXVsdFN0b3JhZ2VTZXNzaW9u
ID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKLSAgICBj
b25zdCBDb29raWVKYXJDdXJsJiBjb29raWVKYXIgPSBkZWZhdWx0U3RvcmFnZVNlc3Npb24uY29v
a2llU3RvcmFnZSgpOwotICAgIGZvciAoYXV0byBoZWFkZXIgOiByZXNwb25zZS5oZWFkZXJzKSB7
Ci0gICAgICAgIGlmIChoZWFkZXIuc3RhcnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHNldENvb2tp
ZUhlYWRlcikpIHsKLSAgICAgICAgICAgIFN0cmluZyBzZXRDb29raWVTdHJpbmcgPSBoZWFkZXIu
cmlnaHQoaGVhZGVyLmxlbmd0aCgpIC0gc3RybGVuKHNldENvb2tpZUhlYWRlcikpOwotICAgICAg
ICAgICAgY29va2llSmFyLnNldENvb2tpZXNGcm9tSFRUUFJlc3BvbnNlKGRlZmF1bHRTdG9yYWdl
U2Vzc2lvbiwgcmVzcG9uc2UudXJsLCBzZXRDb29raWVTdHJpbmcpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25zZSkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9kZWZlcnNMb2FkaW5nKTsKLQotICAg
IGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9o
YW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKHJlY2Vp
dmVkUmVzcG9uc2UpOwotCi0gICAgaWYgKG1fY3VybFJlcXVlc3QpCi0gICAgICAgIG1faGFuZGxl
LT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlLnNldERlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJp
Y3MobV9jdXJsUmVxdWVzdC0+Z2V0TmV0d29ya0xvYWRNZXRyaWNzKCkpOwotCi0gICAgaGFuZGxl
Q29va2llSGVhZGVycyhyZWNlaXZlZFJlc3BvbnNlKTsKLQotICAgIGlmIChyZXNwb25zZSgpLnNo
b3VsZFJlZGlyZWN0KCkpIHsKLSAgICAgICAgd2lsbFNlbmRSZXF1ZXN0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAocmVzcG9uc2UoKS5pc1VuYXV0aG9yaXplZCgpKSB7Ci0g
ICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZShyZWNlaXZlZFJlc3BvbnNl
LCBtX2F1dGhGYWlsdXJlQ291bnQsIHJlc3BvbnNlKCksIG1faGFuZGxlKTsKLSAgICAgICAgbV9o
YW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpOwotICAg
ICAgICBtX2F1dGhGYWlsdXJlQ291bnQrKzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgaWYgKHJlc3BvbnNlKCkuaXNOb3RN
b2RpZmllZCgpKSB7Ci0gICAgICAgICAgICBVUkwgY2FjaGVVcmwgPSBtX2N1cnJlbnRSZXF1ZXN0
LnVybCgpOwotICAgICAgICAgICAgY2FjaGVVcmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7
Ci0KLSAgICAgICAgICAgIGlmIChDdXJsQ2FjaGVNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRDYWNo
ZWRSZXNwb25zZShjYWNoZVVybCwgcmVzcG9uc2UoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVz
cG9uc2UoKS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOwotICAgICAgICAgICAgICAgICAgICByZXNw
b25zZSgpLnNldEhUVFBTdGF0dXNUZXh0KCJPSyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRv
bigpLmRpZFJlY2VpdmVSZXNwb25zZSgqbV9oYW5kbGUsIHJlc3BvbnNlKCkpOwotCi0gICAgICAg
IGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKm1faGFuZGxlKTsKLSAgICAgICAgbV9oYW5k
bGUtPmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlKCkpLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBjb250aW51
ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQot
ICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Q3VybENhY2hlTWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkUmVjZWl2ZURhdGEoKm1faGFuZGxlLCBi
dWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOwotICAgIG1faGFuZGxlLT5jbGllbnQoKS0+
ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgV1RGTW92ZShidWZmZXIpLCBidWZmZXItPnNpemUo
KSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRDb21wbGV0
ZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChjYW5jZWxsZWRP
ckNsaWVudGxlc3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fY3VybFJlcXVlc3Qp
Ci0gICAgICAgIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlLnNldERlcHJlY2F0
ZWROZXR3b3JrTG9hZE1ldHJpY3MobV9jdXJsUmVxdWVzdC0+Z2V0TmV0d29ya0xvYWRNZXRyaWNz
KCkpOwotCi0gICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICBDdXJsQ2FjaGVN
YW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRGaW5pc2hMb2FkaW5nKCptX2hhbmRsZSk7Ci0gICAgICAg
IG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkRmFpbFdpdGhFcnJv
cihjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEN1cmxDYWNoZU1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZEZhaWwoKm1f
aGFuZGxlKTsKLSAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZhaWwobV9oYW5kbGUsIHJlc291
cmNlRXJyb3IpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQot
ICAgIGNvbnRpbnVlQWZ0ZXJEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cGxhdGZvcm1Db250aW51ZVN5bmNocm9ub3VzRGlkUmVjZWl2
ZVJlc3BvbnNlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgY29udGlu
dWVBZnRlckRpZFJlY2VpdmVSZXNwb25zZSgpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpjb250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gY29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ug
bWlnaHQgY2FuY2VsIHRoZSBsb2FkLgotICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSB8
fCAhbV9jdXJsUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jdXJsUmVxdWVzdC0+
Y29tcGxldGVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6c2hvdWxkUmVkaXJlY3RBc0dFVChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGJvb2wgY3Jvc3NPcmlnaW4pCi17Ci0gICAgaWYgKHJlcXVlc3QuaHR0cE1ldGhvZCgp
ID09ICJHRVQiIHx8IHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJIRUFEIikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVzcG9uc2UoKS5pc1NlZU90
aGVyKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKChyZXNwb25zZSgpLmlzTW92
ZWRQZXJtYW5lbnRseSgpIHx8IHJlc3BvbnNlKCkuaXNGb3VuZCgpKSAmJiAocmVxdWVzdC5odHRw
TWV0aG9kKCkgPT0gIlBPU1QiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoY3Jv
c3NPcmlnaW4gJiYgKHJlcXVlc3QuaHR0cE1ldGhvZCgpID09ICJERUxFVEUiKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OndpbGxTZW5kUmVxdWVzdCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4UmVkaXJlY3RzID0gMjA7Ci0KLSAg
ICBpZiAobV9yZWRpcmVjdENvdW50KysgPiBtYXhSZWRpcmVjdHMpIHsKLSAgICAgICAgbV9oYW5k
bGUtPmNsaWVudCgpLT5kaWRGYWlsKG1faGFuZGxlLCBSZXNvdXJjZUVycm9yOjpodHRwRXJyb3Io
Q1VSTEVfVE9PX01BTllfUkVESVJFQ1RTLCByZXNwb25zZSgpLnVybCgpKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbG9jYXRpb24gPSByZXNwb25zZSgpLmh0dHBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pOwotICAgIFVSTCBuZXdVUkwgPSBVUkwo
bV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2UudXJsKCksIGxvY2F0aW9uKTsKLSAg
ICBib29sIGNyb3NzT3JpZ2luID0gIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX2ZpcnN0
UmVxdWVzdC51cmwoKSwgbmV3VVJMKTsKLQotICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0
ID0gbV9maXJzdFJlcXVlc3Q7Ci0gICAgbmV3UmVxdWVzdC5zZXRVUkwobmV3VVJMKTsKLQotICAg
IGlmIChzaG91bGRSZWRpcmVjdEFzR0VUKG5ld1JlcXVlc3QsIGNyb3NzT3JpZ2luKSkgewotICAg
ICAgICBuZXdSZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOwotICAgICAgICBuZXdSZXF1ZXN0
LnNldEhUVFBCb2R5KG51bGxwdHIpOwotICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUENvbnRl
bnRUeXBlKCk7Ci0gICAgfQotCi0gICAgLy8gU2hvdWxkIG5vdCBzZXQgUmVmZXJlciBhZnRlciBh
IHJlZGlyZWN0IGZyb20gYSBzZWN1cmUgcmVzb3VyY2UgdG8gbm9uLXNlY3VyZSBvbmUuCi0gICAg
aWYgKCFuZXdVUkwucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBwcm90b2NvbElzKG5ld1JlcXVlc3Qu
aHR0cFJlZmVycmVyKCksICJodHRwcyIpICYmIG1faGFuZGxlLT5jb250ZXh0KCktPnNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QoKSkKLSAgICAgICAgbmV3UmVxdWVzdC5j
bGVhckhUVFBSZWZlcnJlcigpOwotCi0gICAgbV91c2VyID0gbmV3VVJMLnVzZXIoKTsKLSAgICBt
X3Bhc3MgPSBuZXdVUkwucGFzcygpOwotICAgIG5ld1JlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMo
KTsKLQotICAgIGlmIChjcm9zc09yaWdpbikgewotICAgICAgICAvLyBJZiB0aGUgbmV0d29yayBs
YXllciBjYXJyaWVzIG92ZXIgYXV0aGVudGljYXRpb24gaGVhZGVycyBmcm9tIHRoZSBvcmlnaW5h
bCByZXF1ZXN0Ci0gICAgICAgIC8vIGluIGEgY3Jvc3Mtb3JpZ2luIHJlZGlyZWN0LCB3ZSB3YW50
IHRvIGNsZWFyIHRob3NlIGhlYWRlcnMgaGVyZS4gCi0gICAgICAgIG5ld1JlcXVlc3QuY2xlYXJI
VFRQQXV0aG9yaXphdGlvbigpOwotICAgICAgICBuZXdSZXF1ZXN0LmNsZWFySFRUUE9yaWdpbigp
OwotICAgIH0KLQotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2VDb3B5ID0gcmVzcG9uc2Uo
KTsKLSAgICBtX2hhbmRsZS0+Y2xpZW50KCktPndpbGxTZW5kUmVxdWVzdEFzeW5jKG1faGFuZGxl
LCBXVEZNb3ZlKG5ld1JlcXVlc3QpLCBXVEZNb3ZlKHJlc3BvbnNlQ29weSksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KSB7
Ci0gICAgICAgIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpOwotICAg
IH0pOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBjb250aW51ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFdURk1vdmUo
cmVxdWVzdCkpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjb250aW51
ZUFmdGVyV2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIC8vIHdpbGxTZW5kUmVxdWVzdCBtaWdodCBj
YW5jZWwgdGhlIGxvYWQuCi0gICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpIHx8ICFtX2N1
cmxSZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2N1cnJlbnRSZXF1ZXN0ID0gV1RG
TW92ZShyZXF1ZXN0KTsKLQotICAgIGJvb2wgaXNTeW5jUmVxdWVzdCA9IG1fY3VybFJlcXVlc3Qt
PmlzU3luY1JlcXVlc3QoKTsKLSAgICBtX2N1cmxSZXF1ZXN0LT5jYW5jZWwoKTsKLSAgICBtX2N1
cmxSZXF1ZXN0LT5zZXRDbGllbnQobnVsbHB0cik7Ci0KLSAgICBtX2N1cmxSZXF1ZXN0ID0gY3Jl
YXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7Ci0KLSAgICBpZiAocHJvdG9jb2xIb3N0
QW5kUG9ydEFyZUVxdWFsKG1fY3VycmVudFJlcXVlc3QudXJsKCksIHJlc3BvbnNlKCkudXJsKCkp
KSB7Ci0gICAgICAgIGF1dG8gY3JlZGVudGlhbCA9IGdldENyZWRlbnRpYWwobV9jdXJyZW50UmVx
dWVzdCwgdHJ1ZSk7Ci0gICAgICAgIG1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKGNyZWRlbnRp
YWwuZmlyc3QsIGNyZWRlbnRpYWwuc2Vjb25kKTsKLSAgICB9Ci0KLSAgICBtX2N1cmxSZXF1ZXN0
LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKLX0KLQotUmVzb3VyY2VSZXNwb25zZSYgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OnJlc3BvbnNlKCkKLXsKLSAgICByZXR1cm4gbV9oYW5kbGUtPmdl
dEludGVybmFsKCktPm1fcmVzcG9uc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGU6OmhhbmRsZURhdGFVUkwoKQotewotICAgIEFTU0VSVChtX2ZpcnN0UmVxdWVzdC51cmwo
KS5wcm90b2NvbElzRGF0YSgpKTsKLSAgICBTdHJpbmcgdXJsID0gbV9maXJzdFJlcXVlc3QudXJs
KCkuc3RyaW5nKCk7Ci0KLSAgICBBU1NFUlQobV9oYW5kbGUtPmNsaWVudCgpKTsKLQotICAgIGF1
dG8gaW5kZXggPSB1cmwuZmluZCgnLCcpOwotICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgewot
ICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmNhbm5vdFNob3dVUkwobV9oYW5kbGUpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIG1lZGlhVHlwZSA9IHVybC5zdWJzdHJp
bmcoNSwgaW5kZXggLSA1KTsKLSAgICBTdHJpbmcgZGF0YSA9IHVybC5zdWJzdHJpbmcoaW5kZXgg
KyAxKTsKLSAgICBhdXRvIG9yaWdpbmFsU2l6ZSA9IGRhdGEubGVuZ3RoKCk7Ci0KLSAgICBib29s
IGJhc2U2NCA9IG1lZGlhVHlwZS5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCI7YmFzZTY0Iik7
Ci0gICAgaWYgKGJhc2U2NCkKLSAgICAgICAgbWVkaWFUeXBlID0gbWVkaWFUeXBlLmxlZnQobWVk
aWFUeXBlLmxlbmd0aCgpIC0gNyk7Ci0KLSAgICBpZiAobWVkaWFUeXBlLmlzRW1wdHkoKSkKLSAg
ICAgICAgbWVkaWFUeXBlID0gInRleHQvcGxhaW4iOwotCi0gICAgU3RyaW5nIG1pbWVUeXBlID0g
ZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtZWRpYVR5cGUpOwotICAgIFN0cmluZyBjaGFy
c2V0ID0gZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKG1lZGlhVHlwZSk7Ci0KLSAgICBpZiAo
Y2hhcnNldC5pc0VtcHR5KCkpCi0gICAgICAgIGNoYXJzZXQgPSAiVVMtQVNDSUkiOwotCi0gICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKLSAgICByZXNwb25zZS5zZXRNaW1lVHlwZShtaW1l
VHlwZSk7Ci0gICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKLSAgICBy
ZXNwb25zZS5zZXRVUkwobV9maXJzdFJlcXVlc3QudXJsKCkpOwotCi0gICAgaWYgKGJhc2U2NCkg
ewotICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEpOwotICAgICAg
ICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBjb250aW51ZUFm
dGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIGRpZFJl
Y2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCi0gICAg
ICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBv
dXQ7Ci0gICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEsIG91dCwgQmFzZTY0SWdub3Jl
U3BhY2VzQW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAgIG1f
aGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZUJ1ZmZlcihtX2hhbmRsZSwgU2hhcmVkQnVmZmVy
OjpjcmVhdGUob3V0LmRhdGEoKSwgb3V0LnNpemUoKSksIG9yaWdpbmFsU2l6ZSk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcoY2hhcnNldCk7
Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSwgZW5jb2Rpbmcp
OwotICAgICAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2Up
LCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgICAgICBj
b250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IC8vIGRpZFJlY2VpdmVSZXNwb25zZSBtaWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0
ZWQuCi0gICAgICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIGF1dG8g
ZW5jb2RlZERhdGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwgVW5lbmNvZGFibGVIYW5kbGluZzo6
VVJMRW5jb2RlZEVudGl0aWVzKTsKLSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5zaXplKCkp
Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlQnVmZmVyKG1f
aGFuZGxlLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGVuY29kZWREYXRhKSksIG9yaWdp
bmFsU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9oYW5kbGUtPmNsaWVudCgp
KQotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcobV9oYW5kbGUp
OwotfQotCi1zdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjpnZXRDcmVkZW50aWFsKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCByZWRpcmVj
dCkKLXsKLSAgICAvLyBtX3VzZXIvbV9wYXNzIGFyZSBjcmVkZW50aWFscyBnaXZlbiBtYW51YWxs
eSwgZm9yIGluc3RhbmNlLCBieSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBYTUxIdHRwUmVxdWVz
dC5vcGVuKCkuCi0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IHJlcXVlc3QuY2FjaGVQYXJ0aXRpb24o
KTsKLQotICAgIGlmIChtX3Nob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKSB7Ci0gICAgICAgIGlm
IChtX3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8v
IDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhz
IG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNh
dGlvbiwgCi0gICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVt
cHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAgICAgICAgICAgIG1faW5pdGlhbENy
ZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCku
Z2V0KHBhcnRpdGlvbiwgcmVxdWVzdC51cmwoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXJlZGly
ZWN0KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBz
cGFjZSBrbm93biBmb3IgdGhlIFVSTCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscwotICAgICAg
ICAgICAgLy8gYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0LiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxl
IHRvIGltcGxlbWVudCBsb2dvdXQgYnkgc2VuZGluZyBhbgotICAgICAgICAgICAgLy8gWE1MSHR0
cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVudGlhbHMsIGFuZCBhYm9ydGluZyBp
dCBpbW1lZGlhdGVseSAoc28gdGhhdAotICAgICAgICAgICAgLy8gYW4gYXV0aGVudGljYXRpb24g
ZGlhbG9nIGRvZXNuJ3QgcG9wIHVwKS4KLSAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpk
ZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9uLCBDcmVkZW50aWFsKG1fdXNl
ciwgbV9wYXNzLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgcmVxdWVzdC51cmwoKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgdXNlciA9IG1fdXNlcjsKLSAgICBTdHJpbmcg
cGFzc3dvcmQgPSBtX3Bhc3M7Ci0KLSAgICBpZiAoIW1faW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHVzZXIgPSBtX2luaXRpYWxDcmVkZW50aWFsLnVzZXIoKTsKLSAgICAg
ICAgcGFzc3dvcmQgPSBtX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3JkKCk7Ci0gICAgfQotCi0g
ICAgaWYgKHVzZXIuaXNFbXB0eSgpICYmIHBhc3N3b3JkLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4oIiIsICIiKTsKLQotICAgIHJldHVybiBzdGQ6
OnBhaXI8U3RyaW5nLCBTdHJpbmc+KHVzZXIsIHBhc3N3b3JkKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZmZhNTNiZjkxLi4wMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IE5BVkVSIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIFVTRShDVVJMKQotCi0jaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgot
I2luY2x1ZGUgIkN1cmxSZXF1ZXN0Q2xpZW50LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ3VybFJlcXVlc3Q7Ci1jbGFzcyBS
ZXNvdXJjZUhhbmRsZTsKLWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci0KLWNsYXNzIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlIGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlPiwgcHVibGljIEN1cmxSZXF1ZXN0Q2xpZW50IHsKLXB1
YmxpYzoKLSAgICBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZShSZXNvdXJjZUhhbmRsZSopOwot
ICAgIH5SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZSgpOwotCi0gICAgdm9pZCByZWYoKSBvdmVy
cmlkZSB7IFRocmVhZFNhZmVSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlPjo6
cmVmKCk7IH0KLSAgICB2b2lkIGRlcmVmKCkgb3ZlcnJpZGUgeyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZT46OmRlcmVmKCk7IH0KLQotICAgIGJvb2wgaGFz
SGFuZGxlKCkgY29uc3Q7Ci0gICAgdm9pZCByZWxlYXNlSGFuZGxlKCk7Ci0KLSAgICB2b2lkIHN0
YXJ0KCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLQotICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhi
b29sKTsKLSAgICB2b2lkIHNldEF1dGhlbnRpY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpOwotCi0gICAgdm9pZCBkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCk7Ci0KLSAgICB2b2lk
IGNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUNvbnRpbnVl
U3luY2hyb25vdXNEaWRSZWNlaXZlUmVzcG9uc2UoKTsKLQotICAgIHZvaWQgY29udGludWVXaWxs
U2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYpOwotCi1wcml2YXRlOgotICAgIC8vIENhbGxl
ZCBmcm9tIG1haW4gdGhyZWFkLgotICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCk7Ci0K
LSAgICBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IGdldENyZWRlbnRpYWwoUmVzb3VyY2VSZXF1
ZXN0JiwgYm9vbCk7Ci0KLSAgICBib29sIGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpOwotCi0gICAg
UmVmPEN1cmxSZXF1ZXN0PiBjcmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKLSAg
ICB2b2lkIGN1cmxEaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNp
Z25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGN1
cmxEaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgQ3VybFJlc3BvbnNlJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGN1cmxEaWRDb21wbGV0ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgY3VybERpZEZh
aWxXaXRoRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBj
b250aW51ZUFmdGVyRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0KLSAgICBib29sIHNob3VsZFJlZGly
ZWN0QXNHRVQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCBjcm9zc09yaWdpbik7Ci0gICAg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoKTsKLSAgICB2b2lkIGNvbnRpbnVlQWZ0ZXJXaWxsU2VuZFJl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYpOwotCi0gICAgdm9pZCBoYW5kbGVEYXRhVVJMKCk7Ci0K
LSAgICAvLyBVc2VkIGJ5IG1haW4gdGhyZWFkLgotICAgIFJlc291cmNlSGFuZGxlKiBtX2hhbmRs
ZTsKLSAgICB1bnNpZ25lZCBtX2F1dGhGYWlsdXJlQ291bnQgeyAwIH07Ci0gICAgdW5zaWduZWQg
bV9yZWRpcmVjdENvdW50IHsgMCB9OwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG1fZmlyc3RSZXF1
ZXN0OwotICAgIFJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OwotICAgIGJvb2wgbV9z
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTsKLSAgICBTdHJpbmcgbV91c2VyOwotICAgIFN0cmlu
ZyBtX3Bhc3M7Ci0gICAgQ3JlZGVudGlhbCBtX2luaXRpYWxDcmVkZW50aWFsOwotICAgIGJvb2wg
bV9kZWZlcnNMb2FkaW5nOwotICAgIGJvb2wgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMg
eyBmYWxzZSB9OwotICAgIFJlZlB0cjxDdXJsUmVxdWVzdD4gbV9jdXJsUmVxdWVzdDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>