<?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>81065</bug_id>
          
          <creation_ts>2012-03-13 18:03:14 -0700</creation_ts>
          <short_desc>WebKitTestRunner crashes when running release Tests</short_desc>
          <delta_ts>2012-03-16 17:31:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (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, MakingBotsRed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephanie Lewis">slewis</reporter>
          <assigned_to name="Stephanie Lewis">slewis</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jberlin</cc>
    
    <cc>mrowe</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>578061</commentid>
    <comment_count>0</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-03-13 18:03:14 -0700</bug_when>
    <thetext>WebKitTestRunner crashes when running release due to the ostringstream object used to dump output.  When copying strings out of it it allocates the strings with FastMalloc and then tries to free them with system free.  I am moving WebKitTestRunner off of ostringstream.

Radar &lt;rdar://problem/10944309&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578521</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-14 10:11:58 -0700</bug_when>
    <thetext>This is confusing. Is it known that there is some deep problem preventing stringstream from working in WTR?

I don&apos;t think that we should be abandoning parts of C++ any time some misconfiguration in the project breaks such part (assuming it is a misconfiguration in the project).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578649</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-14 12:31:53 -0700</bug_when>
    <thetext>&gt; Is it known that there is some deep problem preventing stringstream from working in WTR?

Yes.

&gt; I don&apos;t think that we should be abandoning parts of C++ any time some misconfiguration in the project breaks such part (assuming it is a misconfiguration in the project).

The problem isn&apos;t misconfiguration -- the problem is that C++ libraries that do some allocations in inlined functions and some allocations in out-of-line functions are incompatible with our FastMalloc configuration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578761</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-14 14:17:37 -0700</bug_when>
    <thetext>There is nothing magic in FastMalloc, we&apos;re just overriding global new and delete operators and using STL as designed. In a correctly configured project with a correct C++ implementation, this should just work. If we believe that we&apos;re doing it correctly, then we should file a bug against clang.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578762</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-03-14 14:18:58 -0700</bug_when>
    <thetext>Stephanie, what are the mismatched calls to operator new and operator delete? It seems to me that it&apos;s better to try to fix that problem instead of rewriting huge parts of WKTR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578888</commentid>
    <comment_count>5</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-03-14 16:05:05 -0700</bug_when>
    <thetext>I talked to Anders and we looked at the disassembly.  The call to allocate the string is inlined in the WebKitTestRunner file and so when it allocates it uses the FastMalloc override.  The destructor is not inlined, so it uses the system free.

Anders suggested just turning off FastMalloc for WebKitTestRunner which is what I&apos;m going to do since I&apos;m running into encoding differences replacing ostringstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578893</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2012-03-14 16:09:29 -0700</bug_when>
    <thetext>It is possible that could cause the opposite problem if WebKitTestRunner uses anything from WTF that inlines an allocation but not a deletion, as the code built in to JavaScriptCore would still be compiled with FastMalloc enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580109</commentid>
    <comment_count>7</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-03-15 21:25:36 -0700</bug_when>
    <thetext>Based on Mark&apos;s comment I went back to replacing ostringstream.  Uploading patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580110</commentid>
    <comment_count>8</comment_count>
      <attachid>132191</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-03-15 21:26:21 -0700</bug_when>
    <thetext>Created attachment 132191
patch - replace ostringstream</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580114</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 21:29:19 -0700</bug_when>
    <thetext>Attachment 132191 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/WebKitTestRunner...&quot; exit_code: 1
Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:198:  One line control clauses should not use braces.  [whitespace/braces] [4]
Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1229:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 9 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>580125</commentid>
    <comment_count>10</comment_count>
      <attachid>132191</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-15 21:45:57 -0700</bug_when>
    <thetext>Comment on attachment 132191
patch - replace ostringstream

Attachment 132191 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11955982</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580141</commentid>
    <comment_count>11</comment_count>
      <attachid>132191</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-15 22:24:18 -0700</bug_when>
    <thetext>Comment on attachment 132191
patch - replace ostringstream

r=me if you can get Windows to agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580956</commentid>
    <comment_count>12</comment_count>
      <attachid>132379</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-03-16 14:27:39 -0700</bug_when>
    <thetext>Created attachment 132379
second patch

verifying I fixed Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580957</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 14:29:05 -0700</bug_when>
    <thetext>Attachment 132379 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/WebKitTestRunner...&quot; exit_code: 1
Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 9 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>581023</commentid>
    <comment_count>14</comment_count>
      <attachid>132379</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-16 15:22:24 -0700</bug_when>
    <thetext>Comment on attachment 132379
second patch

Attachment 132379 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11967454</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581094</commentid>
    <comment_count>15</comment_count>
      <attachid>132416</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-03-16 16:45:12 -0700</bug_when>
    <thetext>Created attachment 132416
patch - this time with exports

This time with exports for Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581136</commentid>
    <comment_count>16</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2012-03-16 17:31:06 -0700</bug_when>
    <thetext>Committed http://trac.webkit.org/projects/webkit/changeset/111097</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132191</attachid>
            <date>2012-03-15 21:26:21 -0700</date>
            <delta_ts>2012-03-15 22:24:18 -0700</delta_ts>
            <desc>patch - replace ostringstream</desc>
            <filename>WTRRelease.txt</filename>
            <type>text/plain</type>
            <size>47573</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExMDg4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgyIEBACisyMDEyLTAzLTE1ICBTdGVwaGFuaWUgTGV3aXMgIDxzbGV3aXNAYXBwbGUuY29t
PgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA2
NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NDQzMDk+IENyYXNoVHJhY2VyOiBbVVNFUl0g
MTExIGNyYXNoZXMgaW4gV2ViUHJvY2VzcyBhdCBXZWJLaXRUZXN0UnVubmVySW5qZWN0ZWRCdW5k
bGU6IFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRvbmUgKyAxNDIKKyAgICAgICAgRml4IGNyYXNoIHBy
ZXZlbnRpbmcgV2ViS2l0VGVzdFJ1bm5lciBmcm9tIHdvcmtpbmcgaW4gUmVsZWFzZS4gIAorICAg
ICAgICBXZWJLaXRUZXN0UnVubmVyIHVzZWQgb3N0cmluZ3N0cmVhbSB0byBjb2xsZWN0IG91dHB1
dCBmcm9tIHRoZSB0ZXN0LiAgb3N0cmluZ3N0cmVhbSBpcyBpbmNvbXBhdGlibGUgd2l0aCBvdXIK
KyAgICAgICAgRmFzdE1hbGxvYyBvdmVycmlkZXMuICBXaGVuIGNvcHlpbmcgc3RyaW5ncyBvdXQg
b3N0cmluZ3N0cmVhbSBhIG5ldyBzdHJpbmcgaXMgYWxsb2NhdGVkIHdpdGggRmFzdE1hbGxvYyBi
ZWNhdXNlCisgICAgICAgIHRoZSBhbGxvY2F0aW9uIGlzIGlubGluZWQuICBXaGVuIHRoYXQgc3Ry
aW5nIGlzIGZyZWVkIGlzIHVzZXMgdGhlIHN5c3RlbSBtYWxsb2MgYmVjYXVzZSB0aGF0IGNhbGwg
aXMgbm90IGlubGluZWQuCisKKyAgICAgICAgSSByZW1vdmVkIG9zdHJpbmdzdHJlYW0gaW4gZmF2
b3Igb2YgU3RyaW5nQnVpbGRlci4gIAorCisgICAgICAgIFByb3Blcmx5IHNldCBOREVCVUcgb24g
UmVsZWFzZSBidWlsZHMgc28gd2UgZG9uJ3QgY3Jhc2ggd2hlbiB3aGVuIHdlIGZyZWUgdGhlIHN0
cmluZ3MgU3RyaW5nQnVpbGRlciBjcmVhdGVkLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBERUJVR19ERUZJTkVTIHRvIHNldCBOREVCVUcgb24g
cmVsZWFzZSBidWlsZHMuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1
bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIFJlbW92ZSBvc3RyaW5n
c3RyZWFtIG1lbWJlciBpbiBmYXZvciBvZiBTdHJpbmdCdWlsZGVyLgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpiZWdpblRlc3RpbmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZG9u
ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnN0
cmluZ0J1aWxkZXIpOgorICAgICAgICAoSW5qZWN0ZWRCdW5kbGUpOgorCisgICAgICAgIEFwcGVu
ZCBvdXRwdXQgdG8gU3RyaW5nQnVpbGRlci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXVFI6Omhhc1By
ZWZpeCk6CisgICAgICAgIChXVFI6OmR1bXBQYXRoKToKKyAgICAgICAgKFdUUjo6cmFuZ2VUb1N0
cik6CisgICAgICAgIChXVFI6OnN0eWxlRGVjVG9TdHIpOgorICAgICAgICAoV1RSOjpmcmFtZVRv
U3RyKToKKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAo
V1RSOjpkdW1wRnJhbWVUZXh0KToKKyAgICAgICAgKFdUUjo6ZHVtcERlc2NlbmRhbnRGcmFtZXNU
ZXh0KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKToKKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJh
bWUpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZv
ckZyYW1lKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9u
ZW50KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRkTWVzc2FnZVRv
Q29uc29sZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1
c2JhclRleHQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZh
U2NyaXB0QWxlcnQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5K
YXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6
OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkSW5zZXJ0Tm9kZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxk
SW5zZXJ0VGV4dCk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRGVs
ZXRlUmFuZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3Vs
ZEFwcGx5U3R5bGUpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2lu
RWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGlu
Zyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24pOgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnN1cHBvcnRzRnVsbFNjcmVlbik6CisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6Cisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpiZWdhbkVudGVyRnVsbFNjcmVl
bik6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6YmVnYW5FeGl0RnVsbFNjcmVl
bik6CisgICAgICAgIChXVFI6OmR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyRmlyZWQpOgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZp
Z3VyYXRpb25Gb3JWaWV3cG9ydCk6CisgICAgICAgIAorICAgICAgICBDb252ZXJ0IGJldHdlZW4g
V1RGOjpTdHJpbmcgYW5kIFdLU3RyaW5nUmVmLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
U3RyaW5nRnVuY3Rpb25zLmg6CisgICAgICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAg
KFdUUik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZSk6CisKIDIwMTItMDMtMTUgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNv
bT4KIAogICAgICAgICBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMuaHRtbCBhbmQg
ZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLTIuaHRtbCBmYWlsaW5nIG9uCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHJldmlzaW9uIDExMDg3OSkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV1RSIHsKQEAgLTc3LDMyICs3OCwxNyBAQCBpbmxpbmUgc3RkOjpzdHJpbmcg
dG9TVEQoY29uc3QgV0tSZXRhaW5QCiAgICAgcmV0dXJuIHRvU1REKHN0cmluZy5nZXQoKSk7CiB9
CiAKLS8vIFN0cmVhbWluZyBmdW5jdGlvbnMKLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0
b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQoraW5saW5lIFdU
Rjo6U3RyaW5nIHRvV1RGU3RyaW5nKFdLU3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICBpZiAoIXN0
cmluZ1JlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLQotICAgIHJldHVybiBvdXQgPDwgdG9TVEQo
c3RyaW5nUmVmKTsKLX0KLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9z
dHJlYW0mIG91dCwgY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmdSZWYpCi17
Ci0gICAgcmV0dXJuIG91dCA8PCBzdHJpbmdSZWYuZ2V0KCk7Ci19Ci0KLWlubGluZSBzdGQ6Om9z
dHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIFdLVVJMUmVmIHVybFJlZikKLXsK
LSAgICBpZiAoIXVybFJlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLQotICAgIHJldHVybiBvdXQg
PDwgdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsUmVmKSkpOworICAgIHNpemVfdCBi
dWZmZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7Cisg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltidWZm
ZXJTaXplXSk7CisgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJp
bmcoc3RyaW5nLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBXVEY6OlN0
cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmdldCgpLCBzdHJpbmdMZW5n
dGggLSAxKTsKIH0KLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG91dCwgY29uc3QgV0tSZXRhaW5QdHI8V0tVUkxSZWY+JiB1cmxSZWYpCisgICAgCitpbmxp
bmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
JiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIG91dCA8PCB1cmxSZWYuZ2V0KCk7CisgICAgcmV0dXJu
IHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRl
eDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDEx
MDg3OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
QXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPGRpcmVjdC5oPiAvLyBGb3IgX2dldGN3ZC4KQEAgLTI0Miw3ICsyNDMs
NyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyCiAgICAgICAgIFdL
QXJyYXlSZWYgcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHJlcGFpbnRSZWN0c0tleS5n
ZXQoKSkpOyAgICAgICAgCiAKICAgICAgICAgLy8gRHVtcCB0ZXh0LgotICAgICAgICBkdW1wKHRv
U1REKHRleHRPdXRwdXQpLmNfc3RyKCksIHRydWUpOworICAgICAgICBkdW1wKHRvV1RGU3RyaW5n
KHRleHRPdXRwdXQpLnV0ZjgoKS5kYXRhKCksIHRydWUpOwogCiAgICAgICAgIC8vIER1bXAgcGl4
ZWxzIChpZiBuZWNlc3NhcnkpLgogICAgICAgICBpZiAobV9kdW1wUGl4ZWxzICYmIHBpeGVsUmVz
dWx0KQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhj
Y29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAKIEhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
dXNyL2xvY2FsL2luY2x1ZGUgJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRp
bmdIZWFkZXJzICR7U1JDUk9PVH0vLi4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdSAkKE5F
WFRfUk9PVCkvdXNyL2xvY2FsL2luY2x1ZGUvV2ViQ29yZVRlc3RTdXBwb3J0OwogRlJBTUVXT1JL
X1NFQVJDSF9QQVRIUyA9ICQoU1lTVEVNX0xJQlJBUllfRElSKS9GcmFtZXdvcmtzL1F1YXJ0ei5m
cmFtZXdvcmsvRnJhbWV3b3JrcyAkKFNZU1RFTV9MSUJSQVJZX0RJUikvRnJhbWV3b3Jrcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzICQoU1lTVEVNX0xJQlJBUllfRElS
KS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3JrczsKLUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQgV0VCS0lUX1ZF
UlNJT05fTUlOX1JFUVVJUkVEPVdFQktJVF9WRVJTSU9OX0xBVEVTVDsKK0dDQ19QUkVQUk9DRVNT
T1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9S
VCBXRUJLSVRfVkVSU0lPTl9NSU5fUkVRVUlSRUQ9V0VCS0lUX1ZFUlNJT05fTEFURVNUOwogREVC
VUdfSU5GT1JNQVRJT05fRk9STUFUID0gZHdhcmYKIFBSRUJJTkRJTkcgPSBOTwogR0NDX0NfTEFO
R1VBR0VfU1RBTkRBUkQgPSBnbnU5OQpAQCAtNDAsNiArNDAsMTAgQEAgTElOS0VSX0RJU1BMQVlT
X01BTkdMRURfTkFNRVMgPSBZRVM7CiBWQUxJRF9BUkNIUyA9IGkzODYgeDg2XzY0OwogR0NDX1BS
RUZJWF9IRUFERVIgPSBXZWJLaXRUZXN0UnVubmVyUHJlZml4LmgKIAorREVCVUdfREVGSU5FU19k
ZWJ1ZyA9IDsKK0RFQlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOworREVCVUdfREVGSU5FUyA9
ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOworCiBDTEFOR19DWFhfTElCUkFS
WSA9ICQoQ0xBTkdfQ1hYX0xJQlJBUllfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikp
OwogQ0xBTkdfQ1hYX0xJQlJBUllfMTA2MCA9IGxpYnN0ZGMrKzsKIENMQU5HX0NYWF9MSUJSQVJZ
XzEwNzAgPSBsaWJjKys7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMTEwODc5KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dL
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdUUiB7CkBAIC03OCw2ICs4MCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJl
Y2VpdmVNZXNzYWdlKFcKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemUoV0tCdW5kbGVS
ZWYgYnVuZGxlLCBXS1R5cGVSZWYgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKIHsKICAgICBtX2J1
bmRsZSA9IGJ1bmRsZTsKKyAgICBtX3N0cmluZ0J1aWxkZXIgPSBXVEY6OmFkb3B0UHRyKG5ldyBX
VEY6OlN0cmluZ0J1aWxkZXIoKSk7CiAKICAgICBXS0J1bmRsZUNsaWVudCBjbGllbnQgPSB7CiAg
ICAgICAgIGtXS0J1bmRsZUNsaWVudEN1cnJlbnRWZXJzaW9uLApAQCAtMTkxLDkgKzE5NCw5IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZygpCiB7CiAgICAgbV9zdGF0ZSA9IFRl
c3Rpbmc7CiAKLSAgICBtX291dHB1dFN0cmVhbS5zdHIoIiIpOwogICAgIG1fcGl4ZWxSZXN1bHQu
Y2xlYXIoKTsKICAgICBtX3JlcGFpbnRSZWN0cy5jbGVhcigpOworICAgIG1fc3RyaW5nQnVpbGRl
ci0+Y2xlYXIoKTsKIAogICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y3JlYXRlKCk7CiAgICAgbV9nY0NvbnRyb2xsZXIgPSBHQ0NvbnRyb2xsZXI6OmNy
ZWF0ZSgpOwpAQCAtMjMwLDcgKzIzMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUoKQog
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdlQm9keShB
ZG9wdFdLLCBXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRleHRPdXRwdXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRleHRPdXRwdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRl
eHRPdXRwdXQoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9vdXRwdXRT
dHJlYW0uc3RyKCkuY19zdHIoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0
T3V0cHV0KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fc3RyaW5nQnVp
bGRlci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgV0tEaWN0aW9uYXJ5QWRkSXRl
bShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHRleHRPdXRwdXRLZXkuZ2V0KCksIHRleHRPdXRwdXQu
Z2V0KCkpOwogICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0Iikp
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuaAkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSwxMCBAQAogCiAjaW5jbHVkZSA8c3N0cmVhbT4KIAorbmFtZXNwYWNlIFdURiB7
CisgICAgY2xhc3MgU3RyaW5nQnVpbGRlcjsKK30KKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNz
IEluamVjdGVkQnVuZGxlUGFnZTsKQEAgLTY2LDcgKzcwLDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcygpOwogCiAgICAgdm9pZCBkb25lKCk7Ci0g
ICAgc3RkOjpvc3RyaW5nc3RyZWFtJiBvcygpIHsgcmV0dXJuIG1fb3V0cHV0U3RyZWFtOyB9Cisg
ICAgV1RGOjpTdHJpbmdCdWlsZGVyKiBzdHJpbmdCdWlsZGVyKCkgeyByZXR1cm4gbV9zdHJpbmdC
dWlsZGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRQaXhlbFJlc3VsdChXS0ltYWdlUmVmIGltYWdl
KSB7IG1fcGl4ZWxSZXN1bHQgPSBpbWFnZTsgfQogICAgIHZvaWQgc2V0UmVwYWludFJlY3RzKFdL
QXJyYXlSZWYgcmVjdHMpIHsgbV9yZXBhaW50UmVjdHMgPSByZWN0czsgfQogCkBAIC0xMTYsNyAr
MTIwLDcgQEAgcHJpdmF0ZToKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgbV90b3BMb2FkaW5nRnJh
bWU7CiAKLSAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbV9vdXRwdXRTdHJlYW07CisgICAgT3duUHRy
PFdURjo6U3RyaW5nQnVpbGRlcj4gbV9zdHJpbmdCdWlsZGVyOwogICAgIAogICAgIGVudW0gU3Rh
dGUgewogICAgICAgICBJZGxlLApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAkocmV2aXNp
b24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBACiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS0J1bmRsZU5vZGVIYW5kbGVQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0J1bmRsZVBhZ2VQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1VSTFJlcXVl
c3QuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQuaCIKQEAgLTUxLDkgKzUzLDkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBib29sIGhhc1ByZWZpeChjb25zdCBzdHJpbmcm
IHNlYXJjaFN0cmluZywgY29uc3Qgc3RyaW5nJiBwcmVmaXgpCitzdGF0aWMgYm9vbCBoYXNQcmVm
aXgoY29uc3QgV1RGOjpTdHJpbmcmIHNlYXJjaFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHBy
ZWZpeCkKIHsKLSAgICByZXR1cm4gc2VhcmNoU3RyaW5nLmxlbmd0aCgpID49IHByZWZpeC5sZW5n
dGgoKSAmJiBzZWFyY2hTdHJpbmcuc3Vic3RyKDAsIHByZWZpeC5sZW5ndGgoKSkgPT0gcHJlZml4
OworICAgIHJldHVybiBzZWFyY2hTdHJpbmcubGVuZ3RoKCkgPj0gcHJlZml4Lmxlbmd0aCgpICYm
IHNlYXJjaFN0cmluZy5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCgpKSA9PSBwcmVmaXg7CiB9
CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHByb3BlcnR5VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQpAQCAtODMsNyAr
ODUsNyBAQCBzdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlCiAgICAgcmV0
dXJuIHByb3BlcnR5VmFsdWVEb3VibGUoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1zdGF0aWMgc3RyaW5nIGR1bXBQYXRoKEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBub2RlVmFsdWUpCitzdGF0aWMg
V1RGOjpTdHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG5vZGVWYWx1ZSkKIHsKICAgICBKU1ZhbHVlUmVmIG5vZGVOYW1lVmFsdWUgPSBwcm9wZXJ0
eVZhbHVlKGNvbnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIik7CiAgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGpzU3RyaW5nTm9kZU5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgbm9kZU5hbWVWYWx1ZSwgMCkpOwpAQCAtOTEsMTYgKzkzLDE4IEBAIHN0YXRpYyBz
dHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmUKIAogICAgIEpTVmFsdWVSZWYgcGFyZW50
Tm9kZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwog
Ci0gICAgb3N0cmluZ3N0cmVhbSBvdXQ7Ci0gICAgb3V0IDw8IG5vZGVOYW1lOworICAgIFdURjo6
U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKG5vZGVOYW1lKSk7CiAKLSAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNP
YmplY3QoY29udGV4dCwgcGFyZW50Tm9kZSkpCi0gICAgICAgIG91dCA8PCAiID4gIiA8PCBkdW1w
UGF0aChjb250ZXh0LCAoSlNPYmplY3RSZWYpcGFyZW50Tm9kZSk7CisgICAgaWYgKHBhcmVudE5v
ZGUgJiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHBhcmVudE5vZGUpKSB7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgPiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
ZHVtcFBhdGgoY29udGV4dCwgKEpTT2JqZWN0UmVmKXBhcmVudE5vZGUpKTsKKyAgICB9CiAKLSAg
ICByZXR1cm4gb3V0LnN0cigpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
CiB9CiAKLXN0YXRpYyBzdHJpbmcgZHVtcFBhdGgoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVu
ZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlKQorc3Rh
dGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSkKIHsKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAiKG51bGwpIjsKQEAgLTExNSwxMSArMTE5LDExIEBA
IHN0YXRpYyBzdHJpbmcgZHVtcFBhdGgoV0tCdW5kbGVQYWdlUmVmIHAKICAgICByZXR1cm4gZHVt
cFBhdGgoY29udGV4dCwgbm9kZU9iamVjdCk7CiB9CiAKLXN0YXRpYyBzdHJpbmcgdG9TdHIoV0tC
dW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxl
UmFuZ2VIYW5kbGVSZWYgcmFuZ2VSZWYpCitzdGF0aWMgV1RGOjpTdHJpbmcgcmFuZ2VUb1N0cihX
S0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5k
bGVSYW5nZUhhbmRsZVJlZiByYW5nZVJlZikKIHsKICAgICBpZiAoIXJhbmdlUmVmKQogICAgICAg
ICByZXR1cm4gIihudWxsKSI7Ci0KKyAKICAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwg
d29ybGQpOwpAQCAtMTM4LDEyICsxNDIsMjAgQEAgc3RhdGljIHN0cmluZyB0b1N0cihXS0J1bmRs
ZVBhZ2VSZWYgcGFnZQogICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5VmFsdWVJbnQoY29u
dGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIpOwogICAgIGludCBlbmRPZmZzZXQgPSBw
cm9wZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0Iik7CiAKLSAg
ICBvc3RyaW5nc3RyZWFtIG91dDsKLSAgICBvdXQgPDwgInJhbmdlIGZyb20gIiA8PCBzdGFydE9m
ZnNldCA8PCAiIG9mICIgPDwgZHVtcFBhdGgoY29udGV4dCwgc3RhcnROb2RlT2JqZWN0KSA8PCAi
IHRvICIgPDwgZW5kT2Zmc2V0IDw8ICIgb2YgIiA8PCBkdW1wUGF0aChjb250ZXh0LCBlbmROb2Rl
T2JqZWN0KTsKLSAgICByZXR1cm4gb3V0LnN0cigpOworICAgIFdURjo6U3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJyYW5nZSBmcm9tICIpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFdURjo6U3RyaW5nOjpudW1iZXIoc3RhcnRPZmZzZXQp
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIG9mICIpOworICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIHN0YXJ0Tm9kZU9iamVjdCkpOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIgdG8gIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV1RGOjpTdHJp
bmc6Om51bWJlcihlbmRPZmZzZXQpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIG9mICIp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIGVuZE5vZGVPYmpl
Y3QpKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiBX
VEY6OlN0cmluZygpOwogfQogCi1zdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hdmln
YXRpb25UeXBlVG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cGUpCitzdGF0aWMgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tGcmFtZU5hdmln
YXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBrV0tGcmFt
ZU5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ6CkBAIC0xNjIsMzEgKzE3NCwzOSBAQCBzdGF0aWMg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hdmlnYXRpCiAgICAgcmV0dXJuIGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImlsbGVnYWwgdmFsdWUiKSk7CiB9CiAKLXN0YXRp
YyBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwgV0tCdW5kbGVDU1NTdHlsZURlY2xh
cmF0aW9uUmVmIHN0eWxlKQorc3RhdGljIFdURjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5k
bGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQogewogICAgIC8vIER1bXBSZW5kZXJUcmVl
IGNhbGxzIC1bRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZXNjcmlwdGlvbl0sIHdoaWNoIGp1c3Qg
ZHVtcHMgY2xhc3MgbmFtZSBhbmQgb2JqZWN0IGFkZHJlc3MuCiAgICAgLy8gTm8gZXhpc3Rpbmcg
dGVzdHMgYWN0dWFsbHkgaGl0IHRoaXMgY29kZSBwYXRoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3Jp
dGluZywgYmVjYXVzZSBXZWJDb3JlIGRvZXNuJ3QgY2FsbAogICAgIC8vIHRoZSBlZGl0aW5nIGNs
aWVudCBpZiB0aGUgc3R5bGluZyBvcGVyYXRpb24gc291cmNlIGlzIENvbW1hbmRGcm9tRE9NIG9y
IENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRlcmZhY2UuCi0gICAgb3V0IDw8ICI8RE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbiBBRERSRVNTPiI7Ci0gICAgcmV0dXJuIG91dDsKKyAgICBXVEY6OlN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gQUREUkVTUz4iKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOwogfQogCi1zdGF0aWMgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvdXQs
IFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCitzdGF0aWMgV1RGOjpTdHJpbmcgZnJhbWVUb1N0cihX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBu
YW1lKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOworICAgIFdURjo6U3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJh
bWUoZnJhbWUpKSB7Ci0gICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKQot
ICAgICAgICAgICAgb3V0IDw8ICJtYWluIGZyYW1lIFwiIiA8PCBuYW1lIDw8ICJcIiI7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG91dCA8PCAibWFpbiBmcmFtZSI7CisgICAgICAgIGlmICgh
V0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgibWFpbiBmcmFtZSBcIiIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQodG9XVEZTdHJpbmcobmFtZSkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IlwiIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgibWFpbiBmcmFtZSIpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFX
S1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpCi0gICAgICAgICAgICBvdXQgPDwgImZyYW1lIFwi
IiA8PCBuYW1lIDw8ICJcIiI7CisgICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0
KCkpKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiZnJhbWUgXCIiKTsKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcIiIpOworICAgICAgICB9CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG91dCA8PCAiZnJhbWUgKGFub255bW91cykiOworICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoImZyYW1lIChhbm9ueW1vdXMpIik7CiAgICAgfQotCi0gICAg
cmV0dXJuIG91dDsKKyAgICAKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwog
fQogCiBJbmplY3RlZEJ1bmRsZVBhZ2U6OkluamVjdGVkQnVuZGxlUGFnZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSkKQEAgLTQ3NSw5ICs0OTUsMTUgQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lU2Nyb2xs
UG9zaXRpb24oV0tCdQogICAgIGlmIChmYWJzKHgpID4gMC4wMDAwMDAwMSB8fCBmYWJzKHkpID4g
MC4wMDAwMDAwMSkgewogICAgICAgICBpZiAoc2hvdWxkSW5jbHVkZUZyYW1lTmFtZSkgewogICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUoQWRvcHRXSywgV0tCdW5kbGVG
cmFtZUNvcHlOYW1lKGZyYW1lKSk7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3MoKSA8PCAiZnJhbWUgJyIgPDwgbmFtZSA8PCAiJyAiOworICAgICAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJmcmFtZSAnIik7Cisg
ICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQodG9XVEZTdHJpbmcobmFtZSkpOworICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCInICIpOwogICAgICAgICB9Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJzY3JvbGxlZCB0byAiIDw8IHggPDwgIiwi
IDw8IHkgPDwgIlxuIjsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCJzY3JvbGxlZCB0byAiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKFdURjo6U3RyaW5nOjpudW1iZXIoeCkp
OworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoIiwiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKFdURjo6U3RyaW5nOjpudW1iZXIoeSkpOworICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CiAgICAgfQogfQogCkBA
IC01MzIsNyArNTU4LDggQEAgc3RhdGljIHZvaWQgZHVtcEZyYW1lVGV4dChXS0J1bmRsZUZyYW1l
UgogICAgICAgICByZXR1cm47CiAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGV4dChB
ZG9wdFdLLCBXS0J1bmRsZUZyYW1lQ29weUlubmVyVGV4dChmcmFtZSkpOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8IHRleHQgPDwgIlxuIjsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodGV4dCkpOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4i
KTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcERlc2NlbmRhbnRGcmFtZXNUZXh0KFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUpCkBAIC01NDIsNyArNTY5LDkgQEAgc3RhdGljIHZvaWQgZHVtcERlc2NlbmRh
bnRGcmFtZXNUZXh0KFdLQgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
CiAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgc3ViZnJhbWUgPSBzdGF0aWNfY2FzdDxXS0J1bmRs
ZUZyYW1lUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoY2hpbGRGcmFtZXMuZ2V0KCksIGkpKTsK
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1YmZyYW1lTmFtZShBZG9wdFdLLCBX
S0J1bmRsZUZyYW1lQ29weU5hbWUoc3ViZnJhbWUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm9zKCkgPDwgIlxuLS0tLS0tLS1cbkZyYW1lOiAnIiA8PCBzdWJmcmFtZU5hbWUg
PDwgIidcbi0tLS0tLS0tXG4iOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7CisgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmlu
ZyhzdWJmcmFtZU5hbWUpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKCInXG4tLS0tLS0tLVxuIik7CiAgICAgICAgIGR1bXBGcmFtZVRl
eHQoc3ViZnJhbWUpOwogICAgICAgICBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoc3ViZnJhbWUp
OwogICAgIH0KQEAgLTU2NiwxNCArNTk1LDE0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wKCkKICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQobV9wYWdlKTsKIAogICAgIFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKTsKLSAg
ICBzdHJpbmcgdXJsID0gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoYWRvcHRXSyhXS0J1
bmRsZUZyYW1lQ29weVVSTChmcmFtZSkpLmdldCgpKSkpOwotICAgIGlmIChzdHJzdHIodXJsLmNf
c3RyKCksICJkdW1wQXNUZXh0LyIpKQorICAgIFdURjo6U3RyaW5nIHVybCA9IHRvV1RGU3RyaW5n
KGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwoZnJh
bWUpKS5nZXQoKSkpKTsKKyAgICBpZiAodXJsLmZpbmQoImR1bXBBc1RleHQvIikgIT0gV1RGOjpu
b3RGb3VuZCkKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250
cm9sbGVyKCktPmR1bXBBc1RleHQoZmFsc2UpOwogCiAgICAgc3dpdGNoIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2hhdFRvRHVtcCgpKSB7CiAgICAg
Y2FzZSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6UmVuZGVyVHJlZTogewogICAgICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdGV4dChBZG9wdFdLLCBXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJl
ZUV4dGVybmFsUmVwcmVzZW50YXRpb24obV9wYWdlKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vcygpIDw8IHRleHQ7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIExheW91dFRlc3RDb250cm9sbGVyOjpNYWluRnJhbWVUZXh0
OgpAQCAtNjM5LDcgKzY2OCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZl
VGl0bGUKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJv
bGxlcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJUSVRMRSBDSEFOR0VEOiAiIDw8IHRp
dGxlIDw8ICJcbiI7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKCJUSVRMRSBDSEFOR0VEOiAiKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQpCkBAIC02ODcsOCAr
NzE4LDEyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWUKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzID0gV0tC
dW5kbGVGcmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChmcmFtZSk7Ci0gICAgaWYgKHBlbmRpbmdG
cmFtZVVubG9hZEV2ZW50cykKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkg
PDwgZnJhbWUgPDwgIiAtIGhhcyAiIDw8IHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cyA8PCAiIG9u
dW5sb2FkIGhhbmRsZXIocylcbiI7CisgICAgaWYgKHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cykg
eworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoZnJhbWVUb1N0cihmcmFtZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiAtIGhhcyAiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKFdURjo6U3RyaW5nOjpudW1iZXIo
cGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIG9udW5sb2FkIGhhbmRsZXIocylcbiIpOwor
ICAgIH0KIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEhhbmRsZU9ubG9hZEV2ZW50
c0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCkBAIC03MjEsMTIgKzc1NiwxNSBAQCBX
S1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsCiAgICAgV0tSZXRhaW5QdHI8
V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CiAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3QgPSBhZG9wdFdLKFdLVVJMQ29weUhvc3RO
YW1lKHVybC5nZXQoKSkpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY2hlbWUgPSBh
ZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwuZ2V0KCkpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdXJsU3RyaW5nID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSk7
CiAgICAgaWYgKGhvc3QgJiYgIVdLU3RyaW5nSXNFbXB0eShob3N0LmdldCgpKQogICAgICAgICAm
JiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZ0lnbm9yaW5nQ2FzZShzY2hlbWUuZ2V0KCks
ICJodHRwIikgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZ0lnbm9yaW5nQ2FzZShzY2hl
bWUuZ2V0KCksICJodHRwcyIpKQogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhob3N0LmdldCgpLCAiMTI3LjAuMC4xIikKICAgICAgICAgJiYgIVdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoaG9zdC5nZXQoKSwgIjI1NS4yNTUuMjU1LjI1NSIpIC8vIFVzZWQgaW4g
c29tZSB0ZXN0cyB0aGF0IGV4cGVjdCB0byBnZXQgYmFjayBhbiBlcnJvci4KICAgICAgICAgJiYg
IVdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmdJZ25vcmluZ0Nhc2UoaG9zdC5nZXQoKSwgImxv
Y2FsaG9zdCIpKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJC
bG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIiA8PCB1cmwgPDwgIlxuIjsKKyAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJCbG9ja2Vk
IGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKKyAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJc
biIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTc4MiwxMiArODIwLDE5IEBAIFdL
QnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVAKICAgICAgICAgcmV0dXJuIFdL
QnVuZGxlUGFnZVBvbGljeUFjdGlvblVzZTsKIAogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2FpdFRvRHVtcCgpKSB7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQg
dG8gbG9hZCAiIDw8IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSkgPDwgIiB3
aXRoIG5hdmlnYXRpb24gdHlwZSBcJyIgPDwgbmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0J1bmRs
ZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9uKSkgPDwg
IlwnIjsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybCA9IGFkb3B0V0soV0tV
UkxDb3B5U3RyaW5nKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpKTsKKyAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJQb2xpY3kgZGVs
ZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHVybCkpOworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiB3aXRoIG5h
dmlnYXRpb24gdHlwZSBcJyIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcoTmF2aWdhdGlvblR5cGVUb1N0cmluZyhX
S0J1bmRsZU5hdmlnYXRpb25BY3Rpb25HZXROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uQWN0aW9u
KSkpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKCJcJyIpOwogICAgICAgICBXS0J1bmRsZUhpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJl
c3VsdFJlZiA9IFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkNvcHlIaXRUZXN0UmVzdWx0KG5hdmln
YXRpb25BY3Rpb24pOwotICAgICAgICBpZiAoaGl0VGVzdFJlc3VsdFJlZikKLSAgICAgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICIgb3JpZ2luYXRpbmcgZnJvbSAiIDw8
IGR1bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29w
eU5vZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZikpOworICAgICAgICBpZiAoaGl0VGVzdFJlc3Vs
dFJlZikgeworICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKCIgb3JpZ2luYXRpbmcgZnJvbSAiKTsgCisgICAgICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoZHVtcFBhdGgobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCBXS0J1bmRsZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhhbmRsZShoaXRU
ZXN0UmVzdWx0UmVmKSkpOworICAgICAgICB9CiAKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm9zKCkgPDwgIlxuIjsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+bm90aWZ5RG9uZSgpOwogICAgIH0KIApAQCAt
ODM3LDIyICs4ODIsMjIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2Ny
aQogICAgIHN0YXRpY19jYXN0PEluamVjdGVkQnVuZGxlUGFnZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+
KGNsaWVudEluZm8pKS0+d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQobWVzc2FnZSwgZGVmYXVsdFZh
bHVlLCBmcmFtZSk7CiB9CiAKLXN0YXRpYyBzdHJpbmcgbGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50
KGNvbnN0IHN0cmluZyYgcGF0aCkKK3N0YXRpYyBXVEY6OlN0cmluZyBsYXN0RmlsZVVSTFBhdGhD
b21wb25lbnQoY29uc3QgV1RGOjpTdHJpbmcmIHBhdGgpCiB7CiAgICAgc2l6ZV90IHBvcyA9IHBh
dGguZmluZCgiZmlsZTovLyIpOwotICAgIEFTU0VSVChzdHJpbmc6Om5wb3MgIT0gcG9zKTsKKyAg
ICBBU1NFUlQoV1RGOjpub3RGb3VuZCAhPSBwb3MpOwogCi0gICAgc3RyaW5nIHRtcFBhdGggPSBw
YXRoLnN1YnN0cihwb3MgKyA3KTsKKyAgICBXVEY6OlN0cmluZyB0bXBQYXRoID0gcGF0aC5zdWJz
dHJpbmcocG9zICsgNyk7CiAgICAgaWYgKHRtcFBhdGgubGVuZ3RoKCkgPCAyKSAvLyBLZWVwIHRo
ZSBsb25lIHNsYXNoIHRvIGF2b2lkIGVtcHR5IG91dHB1dC4KICAgICAgICAgcmV0dXJuIHRtcFBh
dGg7CiAKICAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGRlbGltaXRlcgogICAgIGlmICh0bXBQ
YXRoW3RtcFBhdGgubGVuZ3RoKCkgLSAxXSA9PSAnLycpCi0gICAgICAgIHRtcFBhdGguZXJhc2Uo
dG1wUGF0aC5sZW5ndGgoKSAtIDEpOworICAgICAgICB0bXBQYXRoLnJlbW92ZSh0bXBQYXRoLmxl
bmd0aCgpIC0gMSk7CiAKLSAgICBwb3MgPSB0bXBQYXRoLnJmaW5kKCcvJyk7Ci0gICAgaWYgKHN0
cmluZzo6bnBvcyAhPSBwb3MpCi0gICAgICAgIHJldHVybiB0bXBQYXRoLnN1YnN0cihwb3MgKyAx
KTsKKyAgICBwb3MgPSB0bXBQYXRoLnJldmVyc2VGaW5kKCcvJyk7CisgICAgaWYgKFdURjo6bm90
Rm91bmQgIT0gcG9zKQorICAgICAgICByZXR1cm4gdG1wUGF0aC5zdWJzdHJpbmcocG9zICsgMSk7
CiAKICAgICByZXR1cm4gdG1wUGF0aDsKIH0KQEAgLTg2MiwxNiArOTA3LDIwIEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRkTWVzc2FnZVQKICAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0cmlu
ZyBtZXNzYWdlU3RyaW5nID0gdG9TVEQobWVzc2FnZSk7CisgICAgV1RGOjpTdHJpbmcgbWVzc2Fn
ZVN0cmluZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOwogICAgIHNpemVfdCBmaWxlUHJvdG9jb2xT
dGFydCA9IG1lc3NhZ2VTdHJpbmcuZmluZCgiZmlsZTovLyIpOwotICAgIGlmIChmaWxlUHJvdG9j
b2xTdGFydCAhPSBzdHJpbmc6Om5wb3MpCisgICAgaWYgKGZpbGVQcm90b2NvbFN0YXJ0ICE9IFdU
Rjo6bm90Rm91bmQpCiAgICAgICAgIC8vIEZJWE1FOiBUaGUgY29kZSBiZWxvdyBkb2VzIG5vdCBo
YW5kbGUgYWRkaXRpb25hbCB0ZXh0IGFmdGVyIHVybCBub3IgbXVsdGlwbGUgdXJscy4gVGhpcyBt
YXRjaGVzIER1bXBSZW5kZXJUcmVlIGltcGxlbWVudGF0aW9uLgotICAgICAgICBtZXNzYWdlU3Ry
aW5nID0gbWVzc2FnZVN0cmluZy5zdWJzdHIoMCwgZmlsZVByb3RvY29sU3RhcnQpICsgbGFzdEZp
bGVVUkxQYXRoQ29tcG9uZW50KG1lc3NhZ2VTdHJpbmcuc3Vic3RyKGZpbGVQcm90b2NvbFN0YXJ0
KSk7CisgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnN1YnN0cmluZygwLCBm
aWxlUHJvdG9jb2xTdGFydCkgKyBsYXN0RmlsZVVSTFBhdGhDb21wb25lbnQobWVzc2FnZVN0cmlu
Zy5zdWJzdHJpbmcoZmlsZVByb3RvY29sU3RhcnQpKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vcygpIDw8ICJDT05TT0xFIE1FU1NBR0U6ICI7Ci0gICAgaWYgKGxpbmVOdW1iZXIp
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJsaW5lICIgPDwgbGlu
ZU51bWJlciA8PCAiOiAiOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8IG1l
c3NhZ2VTdHJpbmcgPDwgIlxuIjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQoIkNPTlNPTEUgTUVTU0FHRTogIik7CisgICAgaWYgKGxpbmVOdW1i
ZXIpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKCJsaW5lICIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQoV1RGOjpTdHJpbmc6Om51bWJlcihsaW5lTnVtYmVyKSk7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiOiAi
KTsKKyAgICB9CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKG1lc3NhZ2VTdHJpbmcpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKIAogfQogCkBAIC04ODMsNyArOTMyLDkgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYQogICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBTdGF0dXND
YWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm9zKCkgPDwgIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoi
IDw8IHN0YXR1c2JhclRleHQgPDwgIlxuIjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0
U3RhdHVzVGV4dDoiKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQodG9XVEZTdHJpbmcoc3RhdHVzYmFyVGV4dCkpOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0QWxlcnQoV0tTdHJpbmdSZWYgbWVz
c2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKQEAgLTg5MSw3ICs5NDIsOSBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiQUxFUlQ6ICIgPDwgbWVzc2FnZSA8PCAiXG4iOworICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiQUxFUlQ6
ICIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCh0b1dURlN0cmluZyhtZXNzYWdlKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbFJ1bkphdmFTY3JpcHRDb25maXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxl
RnJhbWVSZWYpCkBAIC04OTksMTIgKzk1MiwxOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
d2lsbFJ1bkphdmFTY3JpCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0
UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3MoKSA8PCAiQ09ORklSTTogIiA8PCBtZXNzYWdlIDw8ICJcbiI7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJDT05GSVJNOiAiKTsKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZT
dHJpbmcobWVzc2FnZSkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZCgiXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxS
dW5KYXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLU3RyaW5nUmVmIGRlZmF1
bHRWYWx1ZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3MoKSA8PCAiUFJPTVBUOiAiIDw8IG1lc3NhZ2UgPDwgIiwgZGVmYXVsdCB0ZXh0OiAiIDw8
IGRlZmF1bHRWYWx1ZSA8PCAgIlxuIjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoIlBST01QVDogIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiwgZGVm
YXVsdCB0ZXh0OiAiKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQodG9XVEZTdHJpbmcoZGVmYXVsdFZhbHVlKSk7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwogfQogCiAvLyBFZGl0
b3IgQ2xpZW50IENhbGxiYWNrcwpAQCAtOTY5LDggKzEwMjgsMTEgQEAgYm9vbCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdAogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygp
IDw8ICJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIgPDwg
dG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkgPDwgIlxuIjsKKyAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRp
bmdJbkRPTVJhbmdlOiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdl
KSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgiXG4iKTsKKyAgICB9CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtOTc5
LDggKzEwNDEsMTEgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRpbgog
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91
dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiBzaG91
bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiIDw8IHRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwg
cmFuZ2UpIDw8ICJcbiI7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRU
ZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJVElO
RyBERUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7CisgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1f
cGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0KICAgICByZXR1cm4g
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZEFs
bG93RWRpdGluZygpOwogfQogCkBAIC05OTUsOCArMTA2MCwxNSBAQCBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kCiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uRHJv
cHBlZCIsCiAgICAgfTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEluc2VydE5vZGU6IiA8PCBkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGUpIDw8
ICIgcmVwbGFjaW5nRE9NUmFuZ2U6IiA8PCB0b1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJh
bmdlVG9SZXBsYWNlKSA8PCAiIGdpdmVuQWN0aW9uOiIgPDwgaW5zZXJ0YWN0aW9uc3RyaW5nW2Fj
dGlvbl0gPDwgIlxuIjsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRl
c3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxk
LmdldCgpLCBub2RlKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOworICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0cihtX3Bh
Z2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSk7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIGdpdmVuQWN0aW9uOiIpOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
aW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CisgICAgfQogICAgIHJldHVybiBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkQWxs
b3dFZGl0aW5nKCk7CiB9CiAKQEAgLTEwMTEsOCArMTA4MywxNSBAQCBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4CiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uRHJv
cHBlZCIsCiAgICAgfTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEluc2VydFRleHQ6IiA8PCB0ZXh0IDw8ICIgcmVwbGFjaW5nRE9NUmFuZ2U6IiA8PCB0b1N0ciht
X3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSA8PCAiIGdpdmVuQWN0aW9uOiIg
PDwgaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0gPDwgIlxuIjsKKyAgICBpZiAoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiIpOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
dG9XVEZTdHJpbmcodGV4dCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoIiByZXBsYWNpbmdET01SYW5nZToiKTsKKyAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIo
bV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOworICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiBnaXZlbkFjdGlvbjoi
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0KICAgICByZXR1
cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3Vs
ZEFsbG93RWRpdGluZygpOwogfQogCkBAIC0xMDIxLDggKzExMDAsMTEgQEAgYm9vbCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJhbgogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5v
cygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiIDw8IHRvU3Ry
KG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpIDw8ICJcbiI7CisgICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6
Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKKyAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwor
ICAgIH0KICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250
cm9sbGVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCkBAIC0xMDQwLDggKzExMjIsMTcg
QEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbAogICAgICAgICAiVFJV
RSIKICAgICB9OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0
Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZToiIDw8IHRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgZnJv
bVJhbmdlKSA8PCAiIHRvRE9NUmFuZ2U6IiA8PCB0b1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCks
IHRvUmFuZ2UpIDw8ICIgYWZmaW5pdHk6IiA8PCBhZmZpbml0eXN0cmluZ1thZmZpbml0eV0gPDwg
IiBzdGlsbFNlbGVjdGluZzoiIDw8IGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddIDw8ICJcbiI7
CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxk
LmdldCgpLCBmcm9tUmFuZ2UpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgdG9ET01SYW5nZToiKTsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCB0b1JhbmdlKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIGFmZmluaXR5OiIpOworICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoYWZmaW5pdHlzdHJp
bmdbYWZmaW5pdHldKTsgCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCgiIHN0aWxsU2VsZWN0aW5nOiIpOworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoYm9vbHN0cmluZ1tzdGlsbFNl
bGVjdGluZ10pOyAKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0KICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQog
CkBAIC0xMDUwLDggKzExNDEsMTMgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFw
cGx5U3R5bAogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmco
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkp
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVH
QVRFOiBzaG91bGRBcHBseVN0eWxlOiIgPDwgc3R5bGUgPDwgIiB0b0VsZW1lbnRzSW5ET01SYW5n
ZToiIDw8IHRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpICA8PCAiXG4iOworICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFw
cGx5U3R5bGU6Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZChzdHlsZURlY1RvU3RyKHN0eWxlKSk7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIHRvRWxlbWVudHNJbkRPTVJh
bmdlOiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4i
KTsKKyAgICB9CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0
Q29udHJvbGxlcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTA2MCw4ICsxMTU2
LDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcKICAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVk
aXRpbmc6IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJcbiI7CisgICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzoi
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0KIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcoV0tTdHJpbmdSZWYgbm90aWZp
Y2F0aW9uTmFtZSkKQEAgLTEwNjksOCArMTE2OCwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkRW5kRWRpdGluZyhXCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNU
ZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiIDw8IG5vdGlmaWNhdGlvbk5hbWUgPDwg
IlxuIjsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRF
OiB3ZWJWaWV3RGlkRW5kRWRpdGluZzoiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUp
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCJcbiIpOworICAgIH0KIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5n
ZShXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAtMTA3OCw4ICsxMTgwLDExIEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2UoV0tTdHIKICAgICBpZiAoIUluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6IiA8PCBub3Rp
ZmljYXRpb25OYW1lIDw8ICJcbiI7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Cisg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgi
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZToiKTsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlm
aWNhdGlvbk5hbWUpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0KIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAt
MTA4NywyMiArMTE5MiwyNSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2Vs
ZWN0CiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91
dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIgPDwgbm90aWZpY2F0aW9uTmFtZSA8PCAiXG4iOworICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb246Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7Cisg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgi
XG4iKTsKKyAgICB9CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiBib29sIEluamVj
dGVkQnVuZGxlUGFnZTo6c3VwcG9ydHNGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVm
LCBXS0Z1bGxTY3JlZW5LZXlib2FyZFJlcXVlc3RUeXBlIHJlcXVlc3RUeXBlKQogewogICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxk
RHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm9zKCkgPDwgInN1cHBvcnRzRnVsbFNjcmVlbigpID09IHRydWVcbiI7CisgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgic3VwcG9ydHNG
dWxsU2NyZWVuKCkgPT0gdHJ1ZVxuIik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdLQnVuZGxlUGFnZVJl
ZiBwYWdlUmVmLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudFJlZikKIHsKICAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1
bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5vcygpIDw8ICJlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiI7CisgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiZW50ZXJGdWxsU2Ny
ZWVuRm9yRWxlbWVudCgpXG4iKTsKICAgICBXS0J1bmRsZVBhZ2VXaWxsRW50ZXJGdWxsU2NyZWVu
KHBhZ2VSZWYpOwogICAgIFdLQnVuZGxlUGFnZURpZEVudGVyRnVsbFNjcmVlbihwYWdlUmVmKTsK
IH0KQEAgLTExMTAsNyArMTIxOCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjplbnRlckZ1
bGxTY3JlZW4KIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpleGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBlbGVtZW50
UmVmKQogewogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRy
b2xsZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgImV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgpXG4i
OworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoImV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgpXG4iKTsKICAgICBXS0J1bmRsZVBhZ2VXaWxs
RXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7CiAgICAgV0tCdW5kbGVQYWdlRGlkRXhpdEZ1bGxTY3Jl
ZW4ocGFnZVJlZik7CiB9CkBAIC0xMTE4LDEzICsxMjI2LDEzIEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpleGl0RnVsbFNjcmVlbkYKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpiZWdhbkVu
dGVyRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYsIFdLUmVjdCwgV0tSZWN0KQogewogICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxk
RHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm9zKCkgPDwgImJlZ2FuRW50ZXJGdWxsU2NyZWVuKClcbiI7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiYmVnYW5FbnRlckZ1bGxT
Y3JlZW4oKVxuIik7OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6YmVnYW5FeGl0RnVs
bFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYsIFdLUmVjdCwgV0tSZWN0KQogewogICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEZ1
bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9z
KCkgPDwgImJlZ2FuRXhpdEZ1bGxTY3JlZW4oKVxuIjsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJiZWdhbkV4aXRGdWxsU2NyZWVuKClc
biIpOwogfQogI2VuZGlmCiAKQEAgLTExMzcsMzMgKzEyNDUsMzcgQEAgc3RhdGljIHZvaWQgZHVt
cEJhY2tGb3J3YXJkTGlzdEl0ZW0oV0tCdQogewogICAgIHVuc2lnbmVkIGNvbHVtbiA9IDA7CiAg
ICAgaWYgKGlzQ3VycmVudEl0ZW0pIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm9zKCkgPDwgImN1cnItPiI7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgiY3Vyci0+Iik7CiAgICAgICAgIGNvbHVtbiA9IDY7CiAgICAg
fQogICAgIGZvciAodW5zaWduZWQgaSA9IGNvbHVtbjsgaSA8IGluZGVudDsgaSsrKQotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAnICc7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnICcpOwogCi0gICAgc3Ry
aW5nIHVybCA9IHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGFkb3B0V0soV0tCdW5kbGVC
YWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChpdGVtKSkuZ2V0KCkpKSk7CisgICAgV1RGOjpTdHJp
bmcgdXJsID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoYWRvcHRXSyhXS0J1
bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VVJMKGl0ZW0pKS5nZXQoKSkpKTsKICAgICBpZiAo
aGFzUHJlZml4KHVybCwgImZpbGU6IikpIHsKLSAgICAgICAgc3RyaW5nIGRpcmVjdG9yeU5hbWUg
PSAiL0xheW91dFRlc3RzLyI7CisgICAgICAgIFdURjo6U3RyaW5nIGRpcmVjdG9yeU5hbWUgPSAi
L0xheW91dFRlc3RzLyI7CiAgICAgICAgIHNpemVfdCBzdGFydCA9IHVybC5maW5kKGRpcmVjdG9y
eU5hbWUpOwotICAgICAgICBpZiAoc3RhcnQgPT0gc3RyaW5nOjpucG9zKQorICAgICAgICBpZiAo
c3RhcnQgPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc3RhcnQgKz0gZGlyZWN0b3J5TmFtZS5zaXplKCk7Ci0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICIoZmlsZSB0ZXN0KToiIDw8IHVybC5z
dWJzdHIoc3RhcnQpOworICAgICAgICAgICAgc3RhcnQgKz0gZGlyZWN0b3J5TmFtZS5sZW5ndGgo
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCIoZmlsZSB0ZXN0KToiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHVybC5zdWJzdHJpbmcoc3RhcnQpKTsKICAgICB9IGVsc2UK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgdXJsOworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodXJsKTsKIAot
ICAgIHN0cmluZyB0YXJnZXQgPSB0b1NURChhZG9wdFdLKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbUNvcHlUYXJnZXQoaXRlbSkpKTsKLSAgICBpZiAodGFyZ2V0Lmxlbmd0aCgpKQotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiIChpbiBmcmFtZSBcIiIgPDwgdGFy
Z2V0IDw8ICJcIikiOworICAgIFdURjo6U3RyaW5nIHRhcmdldCA9IHRvV1RGU3RyaW5nKGFkb3B0
V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRhcmdldChpdGVtKSkpOworICAgIGlm
ICh0YXJnZXQubGVuZ3RoKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgKGluIGZyYW1lIFwiIik7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0YXJnZXQpOworICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlwiKSIp
OworICAgIH0KIAogICAgIC8vIEZJWE1FOiBOZWVkIFdLQmFja0ZvcndhcmRMaXN0SXRlbUlzVGFy
Z2V0SXRlbS4KICAgICBpZiAoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtSXNUYXJnZXRJdGVt
KGl0ZW0pKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiICAqKm5h
diB0YXJnZXQqKiI7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZCgiICAqKm5hdiB0YXJnZXQqKiIpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm9zKCkgPDwgJ1xuJzsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CiAKICAgICBpZiAoV0tSZXRhaW5QdHI8V0tBcnJh
eVJlZj4ga2lkcyA9IGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weUNoaWxk
cmVuKGl0ZW0pKSkgewogICAgICAgICAvLyBTb3J0IHRvIGVsaW1pbmF0ZSBhcmJpdHJhcnkgcmVz
dWx0IG9yZGVyaW5nIHdoaWNoIGRlZmVhdHMgcmVwcm9kdWNpYmxlIHRlc3RpbmcuCkBAIC0xMTc5
LDcgKzEyOTEsNyBAQCBzdGF0aWMgdm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0SXRlbShXS0J1CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQmFja0ZvcndhcmRMaXN0KCkKIHsKLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiXG49PT09PT09PT09PT09PSBCYWNrIEZv
cndhcmQgTGlzdCA9PT09PT09PT09PT09PVxuIjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuPT09PT09PT09PT09PT0gQmFjayBGb3J3YXJk
IExpc3QgPT09PT09PT09PT09PT1cbiIpOwogCiAgICAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RS
ZWYgbGlzdCA9IFdLQnVuZGxlUGFnZUdldEJhY2tGb3J3YXJkTGlzdChtX3BhZ2UpOwogCkBAIC0x
MjEwLDcgKzEzMjIsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEJhY2tGb3J3YXJk
CiAgICAgZm9yIChpbnQgaSA9IGl0ZW1zVG9QcmludC5zaXplKCkgLSAxOyBpID49IDA7IGktLSkK
ICAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbXNUb1ByaW50W2ldLmdldCgpLCA4
LCBpID09IGN1cnJlbnRJdGVtSW5kZXgpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm9zKCkgPDwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
XG4iOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAxMTA4NzkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dlYktpdDIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKQEAgLTE1OCw3ICsxNTksOCBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VG9EdW1wV2F0CiB7CiAgICAgaW52YWxp
ZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCk7CiAgICAgY29uc3QgY2hhciogbWVzc2FnZSA9
ICJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcbiI7
Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgbWVzc2FnZSA8PCAiXG4iOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChtZXNz
YWdlKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoIlxuIik7CiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmRvbmUoKTsKIH0KIApAQCAt
NTI3LDcgKzUyOSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNob3VsZFN0YXkK
IAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dChpbnQgZGV2aWNlRFBJLCBpbnQgZGV2aWNlV2lkdGgsIGludCBkZXZpY2VIZWlnaHQsIGludCBh
dmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKIHsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkub3MoKSA8PCB0b1NURChhZG9wdFdLKFdLQnVuZGxlUGFnZVZpZXdwb3J0Q29u
ZmlndXJhdGlvbkFzVGV4dChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCks
IGRldmljZURQSSwgZGV2aWNlV2lkdGgsIGRldmljZUhlaWdodCwgYXZhaWxhYmxlV2lkdGgsIGF2
YWlsYWJsZUhlaWdodCkpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZVBhZ2VWaWV3cG9ydENv
bmZpZ3VyYXRpb25Bc1RleHQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgp
LCBkZXZpY2VEUEksIGRldmljZVdpZHRoLCBkZXZpY2VIZWlnaHQsIGF2YWlsYWJsZVdpZHRoLCBh
dmFpbGFibGVIZWlnaHQpKSkpOwogfQogCiB0eXBlZGVmIFdURjo6SGFzaE1hcDx1bnNpZ25lZCwg
SlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJL
aXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTYzNSw2ICs2MzUsNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDNzkzNDI3MTE4RjdEQUYwMDVFQThFMiAvKiBEZWJ1
Z1JlbGVhc2UueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCURFQlVHX0RF
RklORVMgPSAiJChERUJVR19ERUZJTkVTX2RlYnVnKSI7CiAJCQkJR0NDX09QVElNSVpBVElPTl9M
RVZFTCA9IDA7CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwo=
</data>
<flag name="review"
          id="135753"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="135762"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132379</attachid>
            <date>2012-03-16 14:27:39 -0700</date>
            <delta_ts>2012-03-16 16:45:12 -0700</delta_ts>
            <desc>second patch</desc>
            <filename>WTRRelease.txt</filename>
            <type>text/plain</type>
            <size>47532</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExMDg4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgyIEBACisyMDEyLTAzLTE1ICBTdGVwaGFuaWUgTGV3aXMgIDxzbGV3aXNAYXBwbGUuY29t
PgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA2
NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NDQzMDk+IENyYXNoVHJhY2VyOiBbVVNFUl0g
MTExIGNyYXNoZXMgaW4gV2ViUHJvY2VzcyBhdCBXZWJLaXRUZXN0UnVubmVySW5qZWN0ZWRCdW5k
bGU6IFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRvbmUgKyAxNDIKKyAgICAgICAgRml4IGNyYXNoIHBy
ZXZlbnRpbmcgV2ViS2l0VGVzdFJ1bm5lciBmcm9tIHdvcmtpbmcgaW4gUmVsZWFzZS4gIAorICAg
ICAgICBXZWJLaXRUZXN0UnVubmVyIHVzZWQgb3N0cmluZ3N0cmVhbSB0byBjb2xsZWN0IG91dHB1
dCBmcm9tIHRoZSB0ZXN0LiAgb3N0cmluZ3N0cmVhbSBpcyBpbmNvbXBhdGlibGUgd2l0aCBvdXIK
KyAgICAgICAgRmFzdE1hbGxvYyBvdmVycmlkZXMuICBXaGVuIGNvcHlpbmcgc3RyaW5ncyBvdXQg
b3N0cmluZ3N0cmVhbSBhIG5ldyBzdHJpbmcgaXMgYWxsb2NhdGVkIHdpdGggRmFzdE1hbGxvYyBi
ZWNhdXNlCisgICAgICAgIHRoZSBhbGxvY2F0aW9uIGlzIGlubGluZWQuICBXaGVuIHRoYXQgc3Ry
aW5nIGlzIGZyZWVkIGlzIHVzZXMgdGhlIHN5c3RlbSBtYWxsb2MgYmVjYXVzZSB0aGF0IGNhbGwg
aXMgbm90IGlubGluZWQuCisKKyAgICAgICAgSSByZW1vdmVkIG9zdHJpbmdzdHJlYW0gaW4gZmF2
b3Igb2YgU3RyaW5nQnVpbGRlci4gIAorCisgICAgICAgIFByb3Blcmx5IHNldCBOREVCVUcgb24g
UmVsZWFzZSBidWlsZHMgc28gd2UgZG9uJ3QgY3Jhc2ggd2hlbiB3aGVuIHdlIGZyZWUgdGhlIHN0
cmluZ3MgU3RyaW5nQnVpbGRlciBjcmVhdGVkLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBERUJVR19ERUZJTkVTIHRvIHNldCBOREVCVUcgb24g
cmVsZWFzZSBidWlsZHMuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1
bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIFJlbW92ZSBvc3RyaW5n
c3RyZWFtIG1lbWJlciBpbiBmYXZvciBvZiBTdHJpbmdCdWlsZGVyLgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpiZWdpblRlc3RpbmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZG9u
ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnN0
cmluZ0J1aWxkZXIpOgorICAgICAgICAoSW5qZWN0ZWRCdW5kbGUpOgorCisgICAgICAgIEFwcGVu
ZCBvdXRwdXQgdG8gU3RyaW5nQnVpbGRlci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXVFI6Omhhc1By
ZWZpeCk6CisgICAgICAgIChXVFI6OmR1bXBQYXRoKToKKyAgICAgICAgKFdUUjo6cmFuZ2VUb1N0
cik6CisgICAgICAgIChXVFI6OnN0eWxlRGVjVG9TdHIpOgorICAgICAgICAoV1RSOjpmcmFtZVRv
U3RyKToKKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAo
V1RSOjpkdW1wRnJhbWVUZXh0KToKKyAgICAgICAgKFdUUjo6ZHVtcERlc2NlbmRhbnRGcmFtZXNU
ZXh0KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKToKKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJh
bWUpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZv
ckZyYW1lKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9u
ZW50KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRkTWVzc2FnZVRv
Q29uc29sZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1
c2JhclRleHQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZh
U2NyaXB0QWxlcnQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5K
YXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6
OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkSW5zZXJ0Tm9kZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxk
SW5zZXJ0VGV4dCk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRGVs
ZXRlUmFuZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3Vs
ZEFwcGx5U3R5bGUpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2lu
RWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGlu
Zyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24pOgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnN1cHBvcnRzRnVsbFNjcmVlbik6CisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6Cisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpiZWdhbkVudGVyRnVsbFNjcmVl
bik6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6YmVnYW5FeGl0RnVsbFNjcmVl
bik6CisgICAgICAgIChXVFI6OmR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyRmlyZWQpOgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZp
Z3VyYXRpb25Gb3JWaWV3cG9ydCk6CisgICAgICAgIAorICAgICAgICBDb252ZXJ0IGJldHdlZW4g
V1RGOjpTdHJpbmcgYW5kIFdLU3RyaW5nUmVmLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
U3RyaW5nRnVuY3Rpb25zLmg6CisgICAgICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAg
KFdUUik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZSk6CisKIDIwMTItMDMtMTUgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNv
bT4KIAogICAgICAgICBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMuaHRtbCBhbmQg
ZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLTIuaHRtbCBmYWlsaW5nIG9uCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHJldmlzaW9uIDExMDg3OSkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV1RSIHsKQEAgLTc3LDMyICs3OCwxNyBAQCBpbmxpbmUgc3RkOjpzdHJpbmcg
dG9TVEQoY29uc3QgV0tSZXRhaW5QCiAgICAgcmV0dXJuIHRvU1REKHN0cmluZy5nZXQoKSk7CiB9
CiAKLS8vIFN0cmVhbWluZyBmdW5jdGlvbnMKLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0
b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQoraW5saW5lIFdU
Rjo6U3RyaW5nIHRvV1RGU3RyaW5nKFdLU3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICBpZiAoIXN0
cmluZ1JlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLQotICAgIHJldHVybiBvdXQgPDwgdG9TVEQo
c3RyaW5nUmVmKTsKLX0KLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9z
dHJlYW0mIG91dCwgY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmdSZWYpCi17
Ci0gICAgcmV0dXJuIG91dCA8PCBzdHJpbmdSZWYuZ2V0KCk7Ci19Ci0KLWlubGluZSBzdGQ6Om9z
dHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIFdLVVJMUmVmIHVybFJlZikKLXsK
LSAgICBpZiAoIXVybFJlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLQotICAgIHJldHVybiBvdXQg
PDwgdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsUmVmKSkpOworICAgIHNpemVfdCBi
dWZmZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7Cisg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltidWZm
ZXJTaXplXSk7CisgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJp
bmcoc3RyaW5nLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBXVEY6OlN0
cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmdldCgpLCBzdHJpbmdMZW5n
dGggLSAxKTsKIH0KLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG91dCwgY29uc3QgV0tSZXRhaW5QdHI8V0tVUkxSZWY+JiB1cmxSZWYpCisgICAgCitpbmxp
bmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
JiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIG91dCA8PCB1cmxSZWYuZ2V0KCk7CisgICAgcmV0dXJu
IHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRl
eDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDEx
MDg3OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
QXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPGRpcmVjdC5oPiAvLyBGb3IgX2dldGN3ZC4KQEAgLTI0Miw3ICsyNDMs
NyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyCiAgICAgICAgIFdL
QXJyYXlSZWYgcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHJlcGFpbnRSZWN0c0tleS5n
ZXQoKSkpOyAgICAgICAgCiAKICAgICAgICAgLy8gRHVtcCB0ZXh0LgotICAgICAgICBkdW1wKHRv
U1REKHRleHRPdXRwdXQpLmNfc3RyKCksIHRydWUpOworICAgICAgICBkdW1wKHRvV1RGU3RyaW5n
KHRleHRPdXRwdXQpLnV0ZjgoKS5kYXRhKCksIHRydWUpOwogCiAgICAgICAgIC8vIER1bXAgcGl4
ZWxzIChpZiBuZWNlc3NhcnkpLgogICAgICAgICBpZiAobV9kdW1wUGl4ZWxzICYmIHBpeGVsUmVz
dWx0KQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhj
Y29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAKIEhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
dXNyL2xvY2FsL2luY2x1ZGUgJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRp
bmdIZWFkZXJzICR7U1JDUk9PVH0vLi4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdSAkKE5F
WFRfUk9PVCkvdXNyL2xvY2FsL2luY2x1ZGUvV2ViQ29yZVRlc3RTdXBwb3J0OwogRlJBTUVXT1JL
X1NFQVJDSF9QQVRIUyA9ICQoU1lTVEVNX0xJQlJBUllfRElSKS9GcmFtZXdvcmtzL1F1YXJ0ei5m
cmFtZXdvcmsvRnJhbWV3b3JrcyAkKFNZU1RFTV9MSUJSQVJZX0RJUikvRnJhbWV3b3Jrcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzICQoU1lTVEVNX0xJQlJBUllfRElS
KS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3JrczsKLUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQgV0VCS0lUX1ZF
UlNJT05fTUlOX1JFUVVJUkVEPVdFQktJVF9WRVJTSU9OX0xBVEVTVDsKK0dDQ19QUkVQUk9DRVNT
T1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9S
VCBXRUJLSVRfVkVSU0lPTl9NSU5fUkVRVUlSRUQ9V0VCS0lUX1ZFUlNJT05fTEFURVNUOwogREVC
VUdfSU5GT1JNQVRJT05fRk9STUFUID0gZHdhcmYKIFBSRUJJTkRJTkcgPSBOTwogR0NDX0NfTEFO
R1VBR0VfU1RBTkRBUkQgPSBnbnU5OQpAQCAtNDAsNiArNDAsMTAgQEAgTElOS0VSX0RJU1BMQVlT
X01BTkdMRURfTkFNRVMgPSBZRVM7CiBWQUxJRF9BUkNIUyA9IGkzODYgeDg2XzY0OwogR0NDX1BS
RUZJWF9IRUFERVIgPSBXZWJLaXRUZXN0UnVubmVyUHJlZml4LmgKIAorREVCVUdfREVGSU5FU19k
ZWJ1ZyA9IDsKK0RFQlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOworREVCVUdfREVGSU5FUyA9
ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOworCiBDTEFOR19DWFhfTElCUkFS
WSA9ICQoQ0xBTkdfQ1hYX0xJQlJBUllfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikp
OwogQ0xBTkdfQ1hYX0xJQlJBUllfMTA2MCA9IGxpYnN0ZGMrKzsKIENMQU5HX0NYWF9MSUJSQVJZ
XzEwNzAgPSBsaWJjKys7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMTEwODc5KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dL
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdUUiB7CkBAIC03OCw2ICs4MCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJl
Y2VpdmVNZXNzYWdlKFcKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemUoV0tCdW5kbGVS
ZWYgYnVuZGxlLCBXS1R5cGVSZWYgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKIHsKICAgICBtX2J1
bmRsZSA9IGJ1bmRsZTsKKyAgICBtX3N0cmluZ0J1aWxkZXIgPSBXVEY6OmFkb3B0UHRyKG5ldyBX
VEY6OlN0cmluZ0J1aWxkZXIoKSk7CiAKICAgICBXS0J1bmRsZUNsaWVudCBjbGllbnQgPSB7CiAg
ICAgICAgIGtXS0J1bmRsZUNsaWVudEN1cnJlbnRWZXJzaW9uLApAQCAtMTkxLDkgKzE5NCw5IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZygpCiB7CiAgICAgbV9zdGF0ZSA9IFRl
c3Rpbmc7CiAKLSAgICBtX291dHB1dFN0cmVhbS5zdHIoIiIpOwogICAgIG1fcGl4ZWxSZXN1bHQu
Y2xlYXIoKTsKICAgICBtX3JlcGFpbnRSZWN0cy5jbGVhcigpOworICAgIG1fc3RyaW5nQnVpbGRl
ci0+Y2xlYXIoKTsKIAogICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y3JlYXRlKCk7CiAgICAgbV9nY0NvbnRyb2xsZXIgPSBHQ0NvbnRyb2xsZXI6OmNy
ZWF0ZSgpOwpAQCAtMjMwLDcgKzIzMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUoKQog
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdlQm9keShB
ZG9wdFdLLCBXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRleHRPdXRwdXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRleHRPdXRwdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRl
eHRPdXRwdXQoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9vdXRwdXRT
dHJlYW0uc3RyKCkuY19zdHIoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0
T3V0cHV0KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fc3RyaW5nQnVp
bGRlci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgV0tEaWN0aW9uYXJ5QWRkSXRl
bShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHRleHRPdXRwdXRLZXkuZ2V0KCksIHRleHRPdXRwdXQu
Z2V0KCkpOwogICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0Iikp
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuaAkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSwxMCBAQAogCiAjaW5jbHVkZSA8c3N0cmVhbT4KIAorbmFtZXNwYWNlIFdURiB7
CisgICAgY2xhc3MgU3RyaW5nQnVpbGRlcjsKK30KKwogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNz
IEluamVjdGVkQnVuZGxlUGFnZTsKQEAgLTY2LDcgKzcwLDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcygpOwogCiAgICAgdm9pZCBkb25lKCk7Ci0g
ICAgc3RkOjpvc3RyaW5nc3RyZWFtJiBvcygpIHsgcmV0dXJuIG1fb3V0cHV0U3RyZWFtOyB9Cisg
ICAgV1RGOjpTdHJpbmdCdWlsZGVyKiBzdHJpbmdCdWlsZGVyKCkgeyByZXR1cm4gbV9zdHJpbmdC
dWlsZGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRQaXhlbFJlc3VsdChXS0ltYWdlUmVmIGltYWdl
KSB7IG1fcGl4ZWxSZXN1bHQgPSBpbWFnZTsgfQogICAgIHZvaWQgc2V0UmVwYWludFJlY3RzKFdL
QXJyYXlSZWYgcmVjdHMpIHsgbV9yZXBhaW50UmVjdHMgPSByZWN0czsgfQogCkBAIC0xMTYsNyAr
MTIwLDcgQEAgcHJpdmF0ZToKIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgbV90b3BMb2FkaW5nRnJh
bWU7CiAKLSAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbV9vdXRwdXRTdHJlYW07CisgICAgT3duUHRy
PFdURjo6U3RyaW5nQnVpbGRlcj4gbV9zdHJpbmdCdWlsZGVyOwogICAgIAogICAgIGVudW0gU3Rh
dGUgewogICAgICAgICBJZGxlLApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAkocmV2aXNp
b24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBACiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS0J1bmRsZU5vZGVIYW5kbGVQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0J1bmRsZVBhZ2VQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1VSTFJlcXVl
c3QuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQuaCIKQEAgLTUxLDkgKzUzLDkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBib29sIGhhc1ByZWZpeChjb25zdCBzdHJpbmcm
IHNlYXJjaFN0cmluZywgY29uc3Qgc3RyaW5nJiBwcmVmaXgpCitzdGF0aWMgYm9vbCBoYXNQcmVm
aXgoY29uc3QgV1RGOjpTdHJpbmcmIHNlYXJjaFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIHBy
ZWZpeCkKIHsKLSAgICByZXR1cm4gc2VhcmNoU3RyaW5nLmxlbmd0aCgpID49IHByZWZpeC5sZW5n
dGgoKSAmJiBzZWFyY2hTdHJpbmcuc3Vic3RyKDAsIHByZWZpeC5sZW5ndGgoKSkgPT0gcHJlZml4
OworICAgIHJldHVybiBzZWFyY2hTdHJpbmcubGVuZ3RoKCkgPj0gcHJlZml4Lmxlbmd0aCgpICYm
IHNlYXJjaFN0cmluZy5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCgpKSA9PSBwcmVmaXg7CiB9
CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIHByb3BlcnR5VmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIG9iamVjdCwgY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQpAQCAtODMsNyAr
ODUsNyBAQCBzdGF0aWMgZG91YmxlIG51bWVyaWNXaW5kb3dQcm9wZXJ0eVZhbHVlCiAgICAgcmV0
dXJuIHByb3BlcnR5VmFsdWVEb3VibGUoY29udGV4dCwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpLCBwcm9wZXJ0eU5hbWUpOwogfQogCi1zdGF0aWMgc3RyaW5nIGR1bXBQYXRoKEpT
R2xvYmFsQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBub2RlVmFsdWUpCitzdGF0aWMg
V1RGOjpTdHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIG5vZGVWYWx1ZSkKIHsKICAgICBKU1ZhbHVlUmVmIG5vZGVOYW1lVmFsdWUgPSBwcm9wZXJ0
eVZhbHVlKGNvbnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1lIik7CiAgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGpzU3RyaW5nTm9kZU5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgbm9kZU5hbWVWYWx1ZSwgMCkpOwpAQCAtOTEsMTYgKzkzLDE4IEBAIHN0YXRpYyBz
dHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0UmUKIAogICAgIEpTVmFsdWVSZWYgcGFyZW50
Tm9kZSA9IHByb3BlcnR5VmFsdWUoY29udGV4dCwgbm9kZVZhbHVlLCAicGFyZW50Tm9kZSIpOwog
Ci0gICAgb3N0cmluZ3N0cmVhbSBvdXQ7Ci0gICAgb3V0IDw8IG5vZGVOYW1lOworICAgIFdURjo6
U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRv
V1RGU3RyaW5nKG5vZGVOYW1lKSk7CiAKLSAgICBpZiAocGFyZW50Tm9kZSAmJiBKU1ZhbHVlSXNP
YmplY3QoY29udGV4dCwgcGFyZW50Tm9kZSkpCi0gICAgICAgIG91dCA8PCAiID4gIiA8PCBkdW1w
UGF0aChjb250ZXh0LCAoSlNPYmplY3RSZWYpcGFyZW50Tm9kZSk7CisgICAgaWYgKHBhcmVudE5v
ZGUgJiYgSlNWYWx1ZUlzT2JqZWN0KGNvbnRleHQsIHBhcmVudE5vZGUpKSB7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgPiAiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
ZHVtcFBhdGgoY29udGV4dCwgKEpTT2JqZWN0UmVmKXBhcmVudE5vZGUpKTsKKyAgICB9CiAKLSAg
ICByZXR1cm4gb3V0LnN0cigpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
CiB9CiAKLXN0YXRpYyBzdHJpbmcgZHVtcFBhdGgoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVu
ZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlKQorc3Rh
dGljIFdURjo6U3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNj
cmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSkKIHsKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAiKG51bGwpIjsKQEAgLTExNSwxMSArMTE5LDExIEBA
IHN0YXRpYyBzdHJpbmcgZHVtcFBhdGgoV0tCdW5kbGVQYWdlUmVmIHAKICAgICByZXR1cm4gZHVt
cFBhdGgoY29udGV4dCwgbm9kZU9iamVjdCk7CiB9CiAKLXN0YXRpYyBzdHJpbmcgdG9TdHIoV0tC
dW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29ybGQsIFdLQnVuZGxl
UmFuZ2VIYW5kbGVSZWYgcmFuZ2VSZWYpCitzdGF0aWMgV1RGOjpTdHJpbmcgcmFuZ2VUb1N0cihX
S0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5k
bGVSYW5nZUhhbmRsZVJlZiByYW5nZVJlZikKIHsKICAgICBpZiAoIXJhbmdlUmVmKQogICAgICAg
ICByZXR1cm4gIihudWxsKSI7Ci0KKyAKICAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwg
d29ybGQpOwpAQCAtMTM4LDEyICsxNDIsMTkgQEAgc3RhdGljIHN0cmluZyB0b1N0cihXS0J1bmRs
ZVBhZ2VSZWYgcGFnZQogICAgIGludCBzdGFydE9mZnNldCA9IHByb3BlcnR5VmFsdWVJbnQoY29u
dGV4dCwgcmFuZ2VPYmplY3QsICJzdGFydE9mZnNldCIpOwogICAgIGludCBlbmRPZmZzZXQgPSBw
cm9wZXJ0eVZhbHVlSW50KGNvbnRleHQsIHJhbmdlT2JqZWN0LCAiZW5kT2Zmc2V0Iik7CiAKLSAg
ICBvc3RyaW5nc3RyZWFtIG91dDsKLSAgICBvdXQgPDwgInJhbmdlIGZyb20gIiA8PCBzdGFydE9m
ZnNldCA8PCAiIG9mICIgPDwgZHVtcFBhdGgoY29udGV4dCwgc3RhcnROb2RlT2JqZWN0KSA8PCAi
IHRvICIgPDwgZW5kT2Zmc2V0IDw8ICIgb2YgIiA8PCBkdW1wUGF0aChjb250ZXh0LCBlbmROb2Rl
T2JqZWN0KTsKLSAgICByZXR1cm4gb3V0LnN0cigpOworICAgIFdURjo6U3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJyYW5nZSBmcm9tICIpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKFdURjo6U3RyaW5nOjpudW1iZXIoc3RhcnRPZmZzZXQp
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIG9mICIpOworICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIHN0YXJ0Tm9kZU9iamVjdCkpOworICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIgdG8gIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoV1RGOjpTdHJp
bmc6Om51bWJlcihlbmRPZmZzZXQpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiIG9mICIp
OworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQYXRoKGNvbnRleHQsIGVuZE5vZGVPYmpl
Y3QpKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCi1zdGF0aWMg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hdmlnYXRpb25UeXBlVG9TdHJpbmcoV0tGcmFtZU5h
dmlnYXRpb25UeXBlIHR5cGUpCitzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IE5hdmln
YXRpb25UeXBlVG9TdHJpbmcoV0tGcmFtZU5hdmlnYXRpb25UeXBlIHR5cGUpCiB7CiAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgY2FzZSBrV0tGcmFtZU5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ6
CkBAIC0xNjIsMzEgKzE3MywzOCBAQCBzdGF0aWMgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5h
dmlnYXRpCiAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
ImlsbGVnYWwgdmFsdWUiKSk7CiB9CiAKLXN0YXRpYyBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJl
YW0mIG91dCwgV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlKQorc3RhdGljIFdU
Rjo6U3RyaW5nIHN0eWxlRGVjVG9TdHIoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0
eWxlKQogewogICAgIC8vIER1bXBSZW5kZXJUcmVlIGNhbGxzIC1bRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiBkZXNjcmlwdGlvbl0sIHdoaWNoIGp1c3QgZHVtcHMgY2xhc3MgbmFtZSBhbmQgb2JqZWN0
IGFkZHJlc3MuCiAgICAgLy8gTm8gZXhpc3RpbmcgdGVzdHMgYWN0dWFsbHkgaGl0IHRoaXMgY29k
ZSBwYXRoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgYmVjYXVzZSBXZWJDb3JlIGRvZXNu
J3QgY2FsbAogICAgIC8vIHRoZSBlZGl0aW5nIGNsaWVudCBpZiB0aGUgc3R5bGluZyBvcGVyYXRp
b24gc291cmNlIGlzIENvbW1hbmRGcm9tRE9NIG9yIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJbnRl
cmZhY2UuCi0gICAgb3V0IDw8ICI8RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiBBRERSRVNTPiI7Ci0g
ICAgcmV0dXJuIG91dDsKKyAgICBXVEY6OlN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiPERPTUNTU1N0eWxlRGVjbGFyYXRpb24gQUREUkVTUz4i
KTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogfQogCi1zdGF0aWMgb3N0
cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvdXQsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCitz
dGF0aWMgV1RGOjpTdHJpbmcgZnJhbWVUb1N0cihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewog
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVD
b3B5TmFtZShmcmFtZSkpOworICAgIFdURjo6U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwog
ICAgIGlmIChXS0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGlmICgh
V0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKQotICAgICAgICAgICAgb3V0IDw8ICJtYWluIGZy
YW1lIFwiIiA8PCBuYW1lIDw8ICJcIiI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dCA8
PCAibWFpbiBmcmFtZSI7CisgICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkp
KSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgibWFpbiBmcmFtZSBcIiIpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobmFtZSkpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlwiIik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIm1haW4gZnJhbWUiKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoIVdLU3RyaW5nSXNFbXB0eShuYW1lLmdldCgpKSkKLSAgICAgICAgICAg
IG91dCA8PCAiZnJhbWUgXCIiIDw8IG5hbWUgPDwgIlwiIjsKKyAgICAgICAgaWYgKCFXS1N0cmlu
Z0lzRW1wdHkobmFtZS5nZXQoKSkpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJmcmFtZSBcIiIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcobmFtZSkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlwiIik7CisgICAg
ICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0IDw8ICJmcmFtZSAoYW5vbnltb3Vz
KSI7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiZnJhbWUgKGFub255bW91cyki
KTsKICAgICB9Ci0KLSAgICByZXR1cm4gb3V0OworICAgIAorICAgIHJldHVybiBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7CiB9CiAKIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQ
YWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQpAQCAtNDc1LDkgKzQ5MywxNSBAQCBzdGF0aWMgdm9p
ZCBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1CiAgICAgaWYgKGZhYnMoeCkgPiAwLjAwMDAw
MDAxIHx8IGZhYnMoeSkgPiAwLjAwMDAwMDAxKSB7CiAgICAgICAgIGlmIChzaG91bGRJbmNsdWRl
RnJhbWVOYW1lKSB7CiAgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmFtZShB
ZG9wdFdLLCBXS0J1bmRsZUZyYW1lQ29weU5hbWUoZnJhbWUpKTsKLSAgICAgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJmcmFtZSAnIiA8PCBuYW1lIDw8ICInICI7Cisg
ICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoImZyYW1lICciKTsKKyAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7CisgICAgICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIicgIik7CiAgICAg
ICAgIH0KLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgInNjcm9sbGVk
IHRvICIgPDwgeCA8PCAiLCIgPDwgeSA8PCAiXG4iOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoInNjcm9sbGVkIHRvICIpOworICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoV1RGOjpT
dHJpbmc6Om51bWJlcih4KSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgiLCIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoV1RGOjpTdHJpbmc6Om51bWJlcih5KSk7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4i
KTsKICAgICB9CiB9CiAKQEAgLTUzMiw3ICs1NTYsOCBAQCBzdGF0aWMgdm9pZCBkdW1wRnJhbWVU
ZXh0KFdLQnVuZGxlRnJhbWVSCiAgICAgICAgIHJldHVybjsKIAogICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0ZXh0KEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5SW5uZXJUZXh0KGZyYW1l
KSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgdGV4dCA8PCAiXG4iOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dU
RlN0cmluZyh0ZXh0KSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKCJcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wRGVzY2VuZGFudEZyYW1l
c1RleHQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKQEAgLTU0Miw3ICs1NjcsOSBAQCBzdGF0aWMg
dm9pZCBkdW1wRGVzY2VuZGFudEZyYW1lc1RleHQoV0tCCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgV0tCdW5kbGVGcmFtZVJlZiBzdWJmcmFtZSA9IHN0
YXRpY19jYXN0PFdLQnVuZGxlRnJhbWVSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChjaGlsZEZy
YW1lcy5nZXQoKSwgaSkpOwogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViZnJh
bWVOYW1lKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5TmFtZShzdWJmcmFtZSkpOwotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiXG4tLS0tLS0tLVxuRnJhbWU6ICci
IDw8IHN1YmZyYW1lTmFtZSA8PCAiJ1xuLS0tLS0tLS1cbiI7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4tLS0tLS0tLVxuRnJhbWU6
ICciKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKHRvV1RGU3RyaW5nKHN1YmZyYW1lTmFtZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIidcbi0tLS0tLS0tXG4iKTsKICAg
ICAgICAgZHVtcEZyYW1lVGV4dChzdWJmcmFtZSk7CiAgICAgICAgIGR1bXBEZXNjZW5kYW50RnJh
bWVzVGV4dChzdWJmcmFtZSk7CiAgICAgfQpAQCAtNTY2LDE0ICs1OTMsMTQgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChtX3Bh
Z2UpOwogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShtX3BhZ2UpOwotICAgIHN0cmluZyB1cmwgPSB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyhhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKGZyYW1lKSkuZ2V0KCkpKSk7Ci0gICAg
aWYgKHN0cnN0cih1cmwuY19zdHIoKSwgImR1bXBBc1RleHQvIikpCisgICAgV1RGOjpTdHJpbmcg
dXJsID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoYWRvcHRXSyhXS0J1bmRs
ZUZyYW1lQ29weVVSTChmcmFtZSkpLmdldCgpKSkpOworICAgIGlmICh1cmwuZmluZCgiZHVtcEFz
VGV4dC8iKSAhPSBXVEY6Om5vdEZvdW5kKQogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+ZHVtcEFzVGV4dChmYWxzZSk7CiAKICAgICBzd2l0
Y2ggKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT53aGF0
VG9EdW1wKCkpIHsKICAgICBjYXNlIExheW91dFRlc3RDb250cm9sbGVyOjpSZW5kZXJUcmVlOiB7
CiAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0KEFkb3B0V0ssIFdLQnVuZGxl
UGFnZUNvcHlSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX3BhZ2UpKTsKLSAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgdGV4dDsKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHRl
eHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Ok1haW5GcmFtZVRleHQ6CkBAIC02MzksNyArNjY2LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIlRJVExF
IENIQU5HRUQ6ICIgPDwgdGl0bGUgPDwgIlxuIjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlRJVExFIENIQU5HRUQ6ICIpOworICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh0
aXRsZSkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgiXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93
Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3
b3JsZCkKQEAgLTY4Nyw4ICs3MTYsMTIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZp
bmlzaERvY3VtZQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBwZW5kaW5nRnJhbWVV
bmxvYWRFdmVudHMgPSBXS0J1bmRsZUZyYW1lR2V0UGVuZGluZ1VubG9hZENvdW50KGZyYW1lKTsK
LSAgICBpZiAocGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzKQotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkub3MoKSA8PCBmcmFtZSA8PCAiIC0gaGFzICIgPDwgcGVuZGluZ0ZyYW1lVW5s
b2FkRXZlbnRzIDw8ICIgb251bmxvYWQgaGFuZGxlcihzKVxuIjsKKyAgICBpZiAocGVuZGluZ0Zy
YW1lVW5sb2FkRXZlbnRzKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZChmcmFtZVRvU3RyKGZyYW1lKSk7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIC0gaGFzICIpOworICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoV1RG
OjpTdHJpbmc6Om51bWJlcihwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMpKTsKKyAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgb251bmxvYWQg
aGFuZGxlcihzKVxuIik7CisgICAgfQogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
SGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKQEAgLTcy
MSwxMiArNzU0LDE1IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGwK
ICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5
VVJMKHJlcXVlc3QpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdCA9IGFkb3B0
V0soV0tVUkxDb3B5SG9zdE5hbWUodXJsLmdldCgpKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHNjaGVtZSA9IGFkb3B0V0soV0tVUkxDb3B5U2NoZW1lKHVybC5nZXQoKSkpOworICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyh1cmwuZ2V0KCkpKTsKICAgICBpZiAoaG9zdCAmJiAhV0tTdHJpbmdJc0VtcHR5KGhvc3Qu
Z2V0KCkpCiAgICAgICAgICYmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nSWdub3JpbmdD
YXNlKHNjaGVtZS5nZXQoKSwgImh0dHAiKSB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
SWdub3JpbmdDYXNlKHNjaGVtZS5nZXQoKSwgImh0dHBzIikpCiAgICAgICAgICYmICFXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKGhvc3QuZ2V0KCksICIxMjcuMC4wLjEiKQogICAgICAgICAm
JiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhob3N0LmdldCgpLCAiMjU1LjI1NS4yNTUu
MjU1IikgLy8gVXNlZCBpbiBzb21lIHRlc3RzIHRoYXQgZXhwZWN0IHRvIGdldCBiYWNrIGFuIGVy
cm9yLgogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZ0lnbm9yaW5nQ2Fz
ZShob3N0LmdldCgpLCAibG9jYWxob3N0IikpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm9zKCkgPDwgIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiIDw8IHVybCA8
PCAiXG4iOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiKTsKKyAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5n
KHVybFN0cmluZykpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQoIlxuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNzgy
LDEyICs4MTgsMTkgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUAog
ICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uVXNlOwogCiAgICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT53YWl0VG9EdW1w
KCkpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIlBvbGljeSBk
ZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIgPDwgYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJM
KHJlcXVlc3QpKSA8PCAiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIiA8PCBuYXZpZ2F0aW9uVHlw
ZVRvU3RyaW5nKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldE5hdmlnYXRpb25UeXBlKG5hdmln
YXRpb25BY3Rpb24pKSA8PCAiXCciOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
dXJsID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0
KSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICIpOworICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmco
dXJsKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZCgiIHdpdGggbmF2aWdhdGlvbiB0eXBlIFwnIik7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhOYXZpZ2F0
aW9uVHlwZVRvU3RyaW5nKFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvbkdldE5hdmlnYXRpb25UeXBl
KG5hdmlnYXRpb25BY3Rpb24pKSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlwnIik7CiAgICAgICAgIFdLQnVuZGxlSGl0VGVzdFJl
c3VsdFJlZiBoaXRUZXN0UmVzdWx0UmVmID0gV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uQ29weUhp
dFRlc3RSZXN1bHQobmF2aWdhdGlvbkFjdGlvbik7Ci0gICAgICAgIGlmIChoaXRUZXN0UmVzdWx0
UmVmKQotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIiBvcmln
aW5hdGluZyBmcm9tICIgPDwgZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBXS0J1bmRs
ZUhpdFRlc3RSZXN1bHRDb3B5Tm9kZUhhbmRsZShoaXRUZXN0UmVzdWx0UmVmKSk7CisgICAgICAg
IGlmIChoaXRUZXN0UmVzdWx0UmVmKSB7CisgICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiBvcmlnaW5hdGluZyBmcm9tICIpOyAKKyAg
ICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIFdLQnVuZGxlSGl0VGVzdFJlc3VsdENv
cHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYpKSk7CisgICAgICAgIH0KIAotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiXG4iOworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CiAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5ub3RpZnlEb25l
KCk7CiAgICAgfQogCkBAIC04MzcsMjIgKzg4MCwyMiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbFJ1bkphdmFTY3JpCiAgICAgc3RhdGljX2Nhc3Q8SW5qZWN0ZWRCdW5kbGVQYWdlKj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT53aWxsUnVuSmF2YVNjcmlwdFByb21wdCht
ZXNzYWdlLCBkZWZhdWx0VmFsdWUsIGZyYW1lKTsKIH0KIAotc3RhdGljIHN0cmluZyBsYXN0Rmls
ZVVSTFBhdGhDb21wb25lbnQoY29uc3Qgc3RyaW5nJiBwYXRoKQorc3RhdGljIFdURjo6U3RyaW5n
IGxhc3RGaWxlVVJMUGF0aENvbXBvbmVudChjb25zdCBXVEY6OlN0cmluZyYgcGF0aCkKIHsKICAg
ICBzaXplX3QgcG9zID0gcGF0aC5maW5kKCJmaWxlOi8vIik7Ci0gICAgQVNTRVJUKHN0cmluZzo6
bnBvcyAhPSBwb3MpOworICAgIEFTU0VSVChXVEY6Om5vdEZvdW5kICE9IHBvcyk7CiAKLSAgICBz
dHJpbmcgdG1wUGF0aCA9IHBhdGguc3Vic3RyKHBvcyArIDcpOworICAgIFdURjo6U3RyaW5nIHRt
cFBhdGggPSBwYXRoLnN1YnN0cmluZyhwb3MgKyA3KTsKICAgICBpZiAodG1wUGF0aC5sZW5ndGgo
KSA8IDIpIC8vIEtlZXAgdGhlIGxvbmUgc2xhc2ggdG8gYXZvaWQgZW1wdHkgb3V0cHV0LgogICAg
ICAgICByZXR1cm4gdG1wUGF0aDsKIAogICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgZGVsaW1p
dGVyCiAgICAgaWYgKHRtcFBhdGhbdG1wUGF0aC5sZW5ndGgoKSAtIDFdID09ICcvJykKLSAgICAg
ICAgdG1wUGF0aC5lcmFzZSh0bXBQYXRoLmxlbmd0aCgpIC0gMSk7CisgICAgICAgIHRtcFBhdGgu
cmVtb3ZlKHRtcFBhdGgubGVuZ3RoKCkgLSAxKTsKIAotICAgIHBvcyA9IHRtcFBhdGgucmZpbmQo
Jy8nKTsKLSAgICBpZiAoc3RyaW5nOjpucG9zICE9IHBvcykKLSAgICAgICAgcmV0dXJuIHRtcFBh
dGguc3Vic3RyKHBvcyArIDEpOworICAgIHBvcyA9IHRtcFBhdGgucmV2ZXJzZUZpbmQoJy8nKTsK
KyAgICBpZiAoV1RGOjpub3RGb3VuZCAhPSBwb3MpCisgICAgICAgIHJldHVybiB0bXBQYXRoLnN1
YnN0cmluZyhwb3MgKyAxKTsKIAogICAgIHJldHVybiB0bXBQYXRoOwogfQpAQCAtODYyLDE2ICs5
MDUsMjAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVAogICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgc3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSB0b1NURChtZXNzYWdlKTsKKyAgICBX
VEY6OlN0cmluZyBtZXNzYWdlU3RyaW5nID0gdG9XVEZTdHJpbmcobWVzc2FnZSk7CiAgICAgc2l6
ZV90IGZpbGVQcm90b2NvbFN0YXJ0ID0gbWVzc2FnZVN0cmluZy5maW5kKCJmaWxlOi8vIik7Ci0g
ICAgaWYgKGZpbGVQcm90b2NvbFN0YXJ0ICE9IHN0cmluZzo6bnBvcykKKyAgICBpZiAoZmlsZVBy
b3RvY29sU3RhcnQgIT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb2Rl
IGJlbG93IGRvZXMgbm90IGhhbmRsZSBhZGRpdGlvbmFsIHRleHQgYWZ0ZXIgdXJsIG5vciBtdWx0
aXBsZSB1cmxzLiBUaGlzIG1hdGNoZXMgRHVtcFJlbmRlclRyZWUgaW1wbGVtZW50YXRpb24uCi0g
ICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlU3RyaW5nLnN1YnN0cigwLCBmaWxlUHJvdG9j
b2xTdGFydCkgKyBsYXN0RmlsZVVSTFBhdGhDb21wb25lbnQobWVzc2FnZVN0cmluZy5zdWJzdHIo
ZmlsZVByb3RvY29sU3RhcnQpKTsKKyAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VTdHJp
bmcuc3Vic3RyaW5nKDAsIGZpbGVQcm90b2NvbFN0YXJ0KSArIGxhc3RGaWxlVVJMUGF0aENvbXBv
bmVudChtZXNzYWdlU3RyaW5nLnN1YnN0cmluZyhmaWxlUHJvdG9jb2xTdGFydCkpOwogCi0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkNPTlNPTEUgTUVTU0FHRTogIjsKLSAg
ICBpZiAobGluZU51bWJlcikKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkg
PDwgImxpbmUgIiA8PCBsaW5lTnVtYmVyIDw8ICI6ICI7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm9zKCkgPDwgbWVzc2FnZVN0cmluZyA8PCAiXG4iOworICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiQ09OU09MRSBNRVNTQUdFOiAiKTsK
KyAgICBpZiAobGluZU51bWJlcikgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoImxpbmUgIik7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChXVEY6OlN0cmluZzo6bnVtYmVyKGxp
bmVOdW1iZXIpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKCI6ICIpOworICAgIH0KKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c3RyaW5nQnVpbGRlcigpLT5hcHBlbmQobWVzc2FnZVN0cmluZyk7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwogCiB9CiAKQEAgLTg4
Myw3ICs5MzAsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2JhCiAg
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+
c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNL
OiBzZXRTdGF0dXNUZXh0OiIgPDwgc3RhdHVzYmFyVGV4dCA8PCAiXG4iOworICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiVUkgREVMRUdBVEUgU1RB
VFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhzdGF0dXNiYXJUZXh0KSk7
CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJc
biIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVy
dChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtODkxLDcgKzk0MCw5
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmkKICAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJBTEVSVDogIiA8PCBtZXNz
YWdlIDw8ICJcbiI7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKCJBTEVSVDogIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdENvbmZpcm0oV0tTdHJpbmdSZWYg
bWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKQEAgLTg5OSwxMiArOTUwLDE4IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmkKICAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJDT05GSVJNOiAiIDw8IG1lc3NhZ2UgPDwgIlxu
IjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
IkNPTkZJUk06ICIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCh0b1dURlN0cmluZyhtZXNzYWdlKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwogfQogCiB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQoV0tTdHJpbmdSZWYgbWVzc2FnZSwg
V0tTdHJpbmdSZWYgZGVmYXVsdFZhbHVlLCBXS0J1bmRsZUZyYW1lUmVmKQogewotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJQUk9NUFQ6ICIgPDwgbWVzc2FnZSA8PCAiLCBk
ZWZhdWx0IHRleHQ6ICIgPDwgZGVmYXVsdFZhbHVlIDw8ICAiXG4iOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiUFJPTVBUOiAiKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJp
bmcobWVzc2FnZSkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCgiLCBkZWZhdWx0IHRleHQ6ICIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKTsK
KyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxu
Iik7CiB9CiAKIC8vIEVkaXRvciBDbGllbnQgQ2FsbGJhY2tzCkBAIC05NjksOCArMTAyNiwxMSBA
QCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0CiAgICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGlu
Z0luRE9NUmFuZ2U6IiA8PCB0b1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSA8PCAi
XG4iOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93
b3JsZC5nZXQoKSwgcmFuZ2UpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0KICAgICByZXR1cm4gSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZEFsbG93RWRpdGlu
ZygpOwogfQogCkBAIC05NzksOCArMTAzOSwxMSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6
c2hvdWxkRW5kRWRpdGluCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0
UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIgPDwgdG9TdHIobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCByYW5nZSkgPDwgIlxuIjsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToi
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7Cisg
ICAgfQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRy
b2xsZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTk5NSw4ICsxMDU4LDE1IEBA
IGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2QKICAgICAgICAgIldlYlZp
ZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAgICB9OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxi
YWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElO
RyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiIDw8IGR1bXBQYXRoKG1fcGFnZSwgbV93b3Js
ZC5nZXQoKSwgbm9kZSkgPDwgIiByZXBsYWNpbmdET01SYW5nZToiIDw8IHRvU3RyKG1fcGFnZSwg
bV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpIDw8ICIgZ2l2ZW5BY3Rpb246IiA8PCBpbnNl
cnRhY3Rpb25zdHJpbmdbYWN0aW9uXSA8PCAiXG4iOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEluc2VydE5vZGU6Iik7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChkdW1wUGF0
aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIG5vZGUpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iik7
CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKKyAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIg
Z2l2ZW5BY3Rpb246Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZChpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7CisgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKKyAg
ICB9CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJv
bGxlcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTAxMSw4ICsxMDgxLDE1IEBA
IGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnRUZXgKICAgICAgICAgIldlYlZp
ZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAgICB9OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxi
YWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElO
RyBERUxFR0FURTogc2hvdWxkSW5zZXJ0VGV4dDoiIDw8IHRleHQgPDwgIiByZXBsYWNpbmdET01S
YW5nZToiIDw8IHRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpIDw8
ICIgZ2l2ZW5BY3Rpb246IiA8PCBpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSA8PCAiXG4iOwor
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEluc2VydFRleHQ6Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIHJlcGxhY2luZ0RPTVJhbmdl
OiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlVG9SZXBsYWNlKSk7
CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCgiIGdpdmVuQWN0aW9uOiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOworICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7
CisgICAgfQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAgLTEwMjEsOCArMTA5OCwx
MSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRGVsZXRlUmFuCiAgICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRy
b2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERlbGV0ZURP
TVJhbmdlOiIgPDwgdG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkgPDwgIlxuIjsK
KyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCkt
PnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRFOiBzaG91
bGREZWxldGVET01SYW5nZToiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBy
YW5nZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoIlxuIik7CisgICAgfQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAg
LTEwNDAsOCArMTEyMCwxNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdl
U2VsCiAgICAgICAgICJUUlVFIgogICAgIH07CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiIgPDwgdG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpIDw8ICIgdG9ET01SYW5nZToiIDw8IHRvU3RyKG1fcGFn
ZSwgbV93b3JsZC5nZXQoKSwgdG9SYW5nZSkgPDwgIiBhZmZpbml0eToiIDw8IGFmZmluaXR5c3Ry
aW5nW2FmZmluaXR5XSA8PCAiIHN0aWxsU2VsZWN0aW5nOiIgPDwgYm9vbHN0cmluZ1tzdGlsbFNl
bGVjdGluZ10gPDwgIlxuIjsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91
dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJFRElU
SU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiIpOworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0
cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIGZyb21SYW5nZSkpOworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiB0b0RPTVJhbmdlOiIpOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
cmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHRvUmFuZ2UpKTsKKyAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgYWZmaW5pdHk6
Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZChhZmZpbml0eXN0cmluZ1thZmZpbml0eV0pOyAKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgc3RpbGxTZWxlY3Rpbmc6Iik7Cisg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChi
b29sc3RyaW5nW3N0aWxsU2VsZWN0aW5nXSk7IAorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CisgICAgfQogICAgIHJldHVybiBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkQWxs
b3dFZGl0aW5nKCk7CiB9CiAKQEAgLTEwNTAsOCArMTEzOSwxMyBAQCBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkQXBwbHlTdHlsCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkg
PDwgIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6IiA8PCBzdHlsZSA8PCAiIHRv
RWxlbWVudHNJbkRPTVJhbmdlOiIgPDwgdG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5n
ZSkgIDw8ICJcbiI7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0
Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBE
RUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZToiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHN0eWxlRGVjVG9TdHIoc3R5bGUpKTsKKyAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIg
dG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQo
KSwgcmFuZ2UpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0KICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQog
CkBAIC0xMDYwLDggKzExNTQsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2lu
RWRpdGluZwogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmco
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTog
d2ViVmlld0RpZEJlZ2luRWRpdGluZzoiIDw8IG5vdGlmaWNhdGlvbk5hbWUgPDwgIlxuIjsKKyAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNo
b3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQmVnaW5FZGl0aW5nOiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOworICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxu
Iik7CisgICAgfQogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhX
S1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQpAQCAtMTA2OSw4ICsxMTY2LDExIEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKFcKICAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxk
RHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOiIgPDwgbm90
aWZpY2F0aW9uTmFtZSA8PCAiXG4iOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
IkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOiIpOworICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmco
bm90aWZpY2F0aW9uTmFtZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3Ry
aW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CisgICAgfQogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xMDc4
LDggKzExNzgsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0cgog
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0
Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZENoYW5nZToiIDw8IG5vdGlmaWNhdGlvbk5hbWUgPDwgIlxuIjsKKyAgICBpZiAoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIpOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
dG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CisgICAgfQogfQogCiB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdLU3RyaW5nUmVmIG5vdGlm
aWNhdGlvbk5hbWUpCkBAIC0xMDg3LDIyICsxMTkwLDI1IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDaGFuZ2VTZWxlY3QKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5p
c1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJ
TkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246IiA8PCBub3RpZmljYXRpb25O
YW1lIDw8ICJcbiI7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0
Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiKTsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlm
aWNhdGlvbk5hbWUpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0KIH0KIAogI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzdXBwb3J0c0Z1bGxTY3JlZW4oV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYsIFdLRnVsbFNjcmVlbktleWJvYXJkUmVxdWVzdFR5cGUgcmVxdWVz
dFR5cGUpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29u
dHJvbGxlcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAic3VwcG9ydHNGdWxsU2NyZWVuKCkgPT0gdHJ1
ZVxuIjsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKCJzdXBwb3J0c0Z1bGxTY3JlZW4oKSA9PSB0cnVlXG4iKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmVudGVyRnVsbFNjcmVlbkZvckVsZW1l
bnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBlbGVtZW50
UmVmKQogewogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRy
b2xsZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgImVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoKVxu
IjsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCJlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOwogICAgIFdLQnVuZGxlUGFnZVdp
bGxFbnRlckZ1bGxTY3JlZW4ocGFnZVJlZik7CiAgICAgV0tCdW5kbGVQYWdlRGlkRW50ZXJGdWxs
U2NyZWVuKHBhZ2VSZWYpOwogfQpAQCAtMTExMCw3ICsxMjE2LDcgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmVudGVyRnVsbFNjcmVlbgogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGVsZW1lbnRSZWYpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygp
KQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiZXhpdEZ1bGxTY3Jl
ZW5Gb3JFbGVtZW50KClcbiI7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgiZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOwogICAg
IFdLQnVuZGxlUGFnZVdpbGxFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICBXS0J1bmRsZVBh
Z2VEaWRFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKIH0KQEAgLTExMTgsMTMgKzEyMjQsMTMgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmV4aXRGdWxsU2NyZWVuRgogdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiwgV0tSZWN0LCBX
S1JlY3QpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29u
dHJvbGxlcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiYmVnYW5FbnRlckZ1bGxTY3JlZW4oKVxuIjsK
KyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KCJiZWdhbkVudGVyRnVsbFNjcmVlbigpXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmJlZ2FuRXhpdEZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmLCBXS1JlY3QsIFdLUmVjdCkK
IHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVy
KCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJiZWdhbkV4aXRGdWxsU2NyZWVuKClcbiI7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiYmVnYW5F
eGl0RnVsbFNjcmVlbigpXG4iKTsKIH0KICNlbmRpZgogCkBAIC0xMTM3LDMzICsxMjQzLDM3IEBA
IHN0YXRpYyB2b2lkIGR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKFdLQnUKIHsKICAgICB1bnNpZ25l
ZCBjb2x1bW4gPSAwOwogICAgIGlmIChpc0N1cnJlbnRJdGVtKSB7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJjdXJyLT4iOworICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoImN1cnItPiIpOwogICAgICAgICBj
b2x1bW4gPSA2OwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2x1bW47IGkgPCBpbmRl
bnQ7IGkrKykKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgJyAnOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
JyAnKTsKIAotICAgIHN0cmluZyB1cmwgPSB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhh
ZG9wdFdLKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlVUkwoaXRlbSkpLmdldCgpKSkp
OworICAgIFdURjo6U3RyaW5nIHVybCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChpdGVtKSkuZ2V0
KCkpKSk7CiAgICAgaWYgKGhhc1ByZWZpeCh1cmwsICJmaWxlOiIpKSB7Ci0gICAgICAgIHN0cmlu
ZyBkaXJlY3RvcnlOYW1lID0gIi9MYXlvdXRUZXN0cy8iOworICAgICAgICBXVEY6OlN0cmluZyBk
aXJlY3RvcnlOYW1lID0gIi9MYXlvdXRUZXN0cy8iOwogICAgICAgICBzaXplX3Qgc3RhcnQgPSB1
cmwuZmluZChkaXJlY3RvcnlOYW1lKTsKLSAgICAgICAgaWYgKHN0YXJ0ID09IHN0cmluZzo6bnBv
cykKKyAgICAgICAgaWYgKHN0YXJ0ID09IFdURjo6bm90Rm91bmQpCiAgICAgICAgICAgICBzdGFy
dCA9IDA7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVjdG9yeU5hbWUu
c2l6ZSgpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiKGZpbGUg
dGVzdCk6IiA8PCB1cmwuc3Vic3RyKHN0YXJ0KTsKKyAgICAgICAgICAgIHN0YXJ0ICs9IGRpcmVj
dG9yeU5hbWUubGVuZ3RoKCk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgiKGZpbGUgdGVzdCk6Iik7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh1cmwuc3Vic3RyaW5nKHN0YXJ0
KSk7CiAgICAgfSBlbHNlCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8
IHVybDsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKHVybCk7CiAKLSAgICBzdHJpbmcgdGFyZ2V0ID0gdG9TVEQoYWRvcHRXSyhXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VGFyZ2V0KGl0ZW0pKSk7Ci0gICAgaWYgKHRhcmdldC5s
ZW5ndGgoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIiAoaW4g
ZnJhbWUgXCIiIDw8IHRhcmdldCA8PCAiXCIpIjsKKyAgICBXVEY6OlN0cmluZyB0YXJnZXQgPSB0
b1dURlN0cmluZyhhZG9wdFdLKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbUNvcHlUYXJnZXQo
aXRlbSkpKTsKKyAgICBpZiAodGFyZ2V0Lmxlbmd0aCgpKSB7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIChpbiBmcmFtZSBcIiIpOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
dGFyZ2V0KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIo
KS0+YXBwZW5kKCJcIikiKTsKKyAgICB9CiAKICAgICAvLyBGSVhNRTogTmVlZCBXS0JhY2tGb3J3
YXJkTGlzdEl0ZW1Jc1RhcmdldEl0ZW0uCiAgICAgaWYgKFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0
SXRlbUlzVGFyZ2V0SXRlbShpdGVtKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm9zKCkgPDwgIiAgKipuYXYgdGFyZ2V0KioiOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiAgKipuYXYgdGFyZ2V0KioiKTsKIAotICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICdcbic7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCdcbicpOwogCiAgICAgaWYgKFdL
UmV0YWluUHRyPFdLQXJyYXlSZWY+IGtpZHMgPSBhZG9wdFdLKFdLQnVuZGxlQmFja0ZvcndhcmRM
aXN0SXRlbUNvcHlDaGlsZHJlbihpdGVtKSkpIHsKICAgICAgICAgLy8gU29ydCB0byBlbGltaW5h
dGUgYXJiaXRyYXJ5IHJlc3VsdCBvcmRlcmluZyB3aGljaCBkZWZlYXRzIHJlcHJvZHVjaWJsZSB0
ZXN0aW5nLgpAQCAtMTE3OSw3ICsxMjg5LDcgQEAgc3RhdGljIHZvaWQgZHVtcEJhY2tGb3J3YXJk
TGlzdEl0ZW0oV0tCdQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEJhY2tGb3J3YXJk
TGlzdCgpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIlxuPT09PT09
PT09PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiI7CisgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbj09PT09PT09PT09
PT09IEJhY2sgRm9yd2FyZCBMaXN0ID09PT09PT09PT09PT09XG4iKTsKIAogICAgIFdLQnVuZGxl
QmFja0ZvcndhcmRMaXN0UmVmIGxpc3QgPSBXS0J1bmRsZVBhZ2VHZXRCYWNrRm9yd2FyZExpc3Qo
bV9wYWdlKTsKIApAQCAtMTIxMCw3ICsxMzIwLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmR1bXBCYWNrRm9yd2FyZAogICAgIGZvciAoaW50IGkgPSBpdGVtc1RvUHJpbnQuc2l6ZSgpIC0g
MTsgaSA+PSAwOyBpLS0pCiAgICAgICAgIGR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKGl0ZW1zVG9Q
cmludFtpXS5nZXQoKSwgOCwgaSA9PSBjdXJyZW50SXRlbUluZGV4KTsKIAotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PVxuIjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09XG4iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAj
aW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXVFIgewogCkBA
IC0xNTgsNyArMTU5LDggQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdFRvRHVtcFdh
dAogewogICAgIGludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpOwogICAgIGNvbnN0
IGNoYXIqIG1lc3NhZ2UgPSAiRkFJTDogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUg
dG8gYmUgY2FsbGVkXG4iOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8IG1l
c3NhZ2UgPDwgIlxuIjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQobWVzc2FnZSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmlu
Z0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwogICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5k
b25lKCk7CiB9CiAKQEAgLTUyNyw3ICs1MjksNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTaG91bGRTdGF5CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDb25maWd1
cmF0aW9uRm9yVmlld3BvcnQoaW50IGRldmljZURQSSwgaW50IGRldmljZVdpZHRoLCBpbnQgZGV2
aWNlSGVpZ2h0LCBpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCiB7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgdG9TVEQoYWRvcHRXSyhXS0J1bmRs
ZVBhZ2VWaWV3cG9ydENvbmZpZ3VyYXRpb25Bc1RleHQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpLCBkZXZpY2VEUEksIGRldmljZVdpZHRoLCBkZXZpY2VIZWlnaHQsIGF2
YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQpKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5k
bGVQYWdlVmlld3BvcnRDb25maWd1cmF0aW9uQXNUZXh0KEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSwgZGV2aWNlRFBJLCBkZXZpY2VXaWR0aCwgZGV2aWNlSGVpZ2h0LCBh
dmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0KSkpKTsKIH0KIAogdHlwZWRlZiBXVEY6Okhh
c2hNYXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFwOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExMDg3OSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02MzUsNiArNjM1LDcgQEAKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzc5MzQyNzExOEY3REFG
MDA1RUE4RTIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlERUJVR19ERUZJTkVTID0gIiQoREVCVUdfREVGSU5FU19kZWJ1ZykiOwogCQkJCUdD
Q19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsK
</data>
<flag name="commit-queue"
          id="136034"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132416</attachid>
            <date>2012-03-16 16:45:12 -0700</date>
            <delta_ts>2012-03-16 16:45:12 -0700</delta_ts>
            <desc>patch - this time with exports</desc>
            <filename>WTRRelease.txt</filename>
            <type>text/plain</type>
            <size>51689</size>
            <attacher name="Stephanie Lewis">slewis</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTA4NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAzLTE2ICBTdGVwaGFu
aWUgTGV3aXMgIDxzbGV3aXNAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA2NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5
NDQzMDk+IENyYXNoVHJhY2VyOiBbVVNFUl0gMTExIGNyYXNoZXMgaW4gV2ViUHJvY2VzcyBhdCBX
ZWJLaXRUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGU6IFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRvbmUg
KyAxNDIKKyAgICAgICAgQWRkIHNvbWUgc3RyaW5nIGZ1bmN0aW9uIGV4cG9ydHMgdG8gV2luZG93
cyBzbyB0aGUgV2ViS2l0VGVzdFJ1bm5lciBjYW4gdXNlIHRoZW0uCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi5kZWY6CisKIDIwMTIt
MDMtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8xMTAyNzk5Nz4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MTQxMgpJbmRleDogU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIuZGVmCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLmRlZgkocmV2aXNpb24gMTEwODc5
KQorKysgU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjMsOSArMTYzLDEyIEBAIEVYUE9SVFMKICAgICAgICAgP2NyZWF0ZUBTaGFkb3dSb290QFdlYkNv
cmVAQFNBP0FWPyRQYXNzUmVmUHRyQFZTaGFkb3dSb290QFdlYkNvcmVAQEBXVEZAQFBBVkVsZW1l
bnRAMkBBQUhAWgogICAgICAgICA/Y3JlYXRlV3JhcHBlckBXZWJDb3JlQEBZQT9BVkpTVmFsdWVA
SlNDQEBQQVZFeGVjU3RhdGVAM0BQQVZKU0RPTUdsb2JhbE9iamVjdEAxQFBBVk5vZGVAMUBAWgog
ICAgICAgICA/ZXF1YWxAV1RGQEBZQV9OUEJWU3RyaW5nSW1wbEAxQFBCRUBaCisgICAgICAgID9l
cXVhbEBXVEZAQFlBX05QQlZTdHJpbmdJbXBsQDFAMEBaCiAgICAgICAgID9lcXVhbElnbm9yaW5n
Q2FzZUBXVEZAQFlBX05QQVZTdHJpbmdJbXBsQDFAUEJFQFoKICAgICAgICAgP2V4dGVybmFsUmVw
cmVzZW50YXRpb25AV2ViQ29yZUBAWUE/QVZTdHJpbmdAV1RGQEBQQVZFbGVtZW50QDFASUBaCisg
ICAgICAgID9maW5kQFN0cmluZ0ltcGxAV1RGQEBRQUVJUEFWMTJASUBaCiAgICAgICAgID9mcmFt
ZURlc3Ryb3llZEBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXJAV2ViQ29yZUBAVUFFWFhaCisgICAg
ICAgID9mcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFja0BTdHJpbmdAV1RGQEBTQT9BVjEyQFBCRUlA
WgogICAgICAgICA/Z2V0Q2FjaGVkRE9NU3RydWN0dXJlQFdlYkNvcmVAQFlBUEFWU3RydWN0dXJl
QEpTQ0BAUEFWSlNET01HbG9iYWxPYmplY3RAMUBQQlVDbGFzc0luZm9AM0BAWgogICAgICAgICA/
Z2V0RGF0YTE2U2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRVBCX1dYWgogICAgICAgICA/Z2V0
RWxlbWVudEJ5SWRAVHJlZVNjb3BlQFdlYkNvcmVAQFFCRVBBVkVsZW1lbnRAMkBBQlZBdG9taWNT
dHJpbmdAV1RGQEBAWgpAQCAtMTc3LDYgKzE4MCw4IEBAIEVYUE9SVFMKICAgICAgICAgP2pzU3Ry
aW5nU2xvd0Nhc2VAV2ViQ29yZUBAWUE/QVZKU1ZhbHVlQEpTQ0BAUEFWRXhlY1N0YXRlQDNAQUFW
PyRIYXNoTWFwQFBBVlN0cmluZ0ltcGxAV1RGQEBWPyRXZWFrQFZKU1N0cmluZ0BKU0NAQEBKU0NA
QFVTdHJpbmdIYXNoQDJAVT8kSGFzaFRyYWl0c0BQQVZTdHJpbmdJbXBsQFdURkBAQDJAVT8kSGFz
aFRyYWl0c0BWPyRXZWFrQFZKU1N0cmluZ0BKU0NAQEBKU0NAQEAyQEBXVEZAQFBBVlN0cmluZ0lt
cGxANkBAWgogICAgICAgICA/bGFzdENoYW5nZVdhc1VzZXJFZGl0QEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50QFdlYkNvcmVAQFFCRV9OWFoKICAgICAgICAgP21hcmtlcnNGb3JARG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyQFdlYkNvcmVAQFFBRT9BVj8kVmVjdG9yQFBBVkRvY3VtZW50TWFya2Vy
QFdlYkNvcmVAQCQwQUBAV1RGQEBQQVZOb2RlQDJAVk1hcmtlclR5cGVzQERvY3VtZW50TWFya2Vy
QDJAQFoKKyAgICAgICAgP251bWJlckBTdHJpbmdAV1RGQEBTQT9BVjEyQElAWgorICAgICAgICA/
bnVtYmVyQFN0cmluZ0BXVEZAQFNBP0FWMTJASEBaCiAgICAgICAgID9vYnNlcnZlRnJhbWVARnJh
bWVEZXN0cnVjdGlvbk9ic2VydmVyQFdlYkNvcmVAQElBRVhQQVZGcmFtZUAyQEBaCiAgICAgICAg
ID9vdmVycmlkZVVzZXJQcmVmZXJyZWRMYW5ndWFnZXNAV2ViQ29yZUBAWUFYQUJWPyRWZWN0b3JA
VlN0cmluZ0BXVEZAQCQwQUBAV1RGQEBAWgogICAgICAgICA/bnVtYmVyT2ZTY29wZWRIVE1MU3R5
bGVDaGlsZHJlbkBOb2RlQFdlYkNvcmVAQFFCRUlYWgpAQCAtMTg0LDYgKzE4OSw4IEBAIEVYUE9S
VFMKICAgICAgICAgP3BhaW50Q29udHJvbFRpbnRzQEZyYW1lVmlld0BXZWJDb3JlQEBBQUVYWFoK
ICAgICAgICAgP3JhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoQFRleHRJdGVyYXRvckBXZWJDb3Jl
QEBTQT9BVj8kUGFzc1JlZlB0ckBWUmFuZ2VAV2ViQ29yZUBAQFdURkBAUEFWRWxlbWVudEAyQEhI
X05AWgogICAgICAgICA/cmVtb3ZlQWxsU2hhZG93Um9vdHNAU2hhZG93VHJlZUBXZWJDb3JlQEBR
QUVYWFoKKyAgICAgICAgP3JlbW92ZUBTdHJpbmdAV1RGQEBRQUVYSUhAWgorICAgICAgICA/cmV2
ZXJzZUZpbmRAU3RyaW5nSW1wbEBXVEZAQFFBRUlfV0lAWgogICAgICAgICA/c19mcm9udGVuZENv
dW50ZXJASW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQFdlYkNvcmVAQDBIQQogICAgICAgICA/c19p
bmZvQEpTTm9kZUBXZWJDb3JlQEAyVUNsYXNzSW5mb0BKU0NAQEIKICAgICAgICAgP3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHRASlNET01HbG9iYWxPYmplY3RAV2ViQ29yZUBAUUJFUEFWU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEAyQFhaCkBAIC0yMDgsNiArMjE1LDcgQEAgRVhQT1JUUwogICAgICAgICA/
c2V0dGluZ3NARnJhbWVAV2ViQ29yZUBAUUJFUEFWU2V0dGluZ3NAMkBYWgogICAgICAgICA/c2V0
Rml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZUBTZXR0aW5nc0BXZWJDb3JlQEBRQUVY
X05AWgogICAgICAgICA/c2hhZG93VHJlZUBFbGVtZW50QFdlYkNvcmVAQFFCRVBBVlNoYWRvd1Ry
ZWVAMkBYWgorICAgICAgICA/c3Vic3RyaW5nQFN0cmluZ0BXVEZAQFFCRT9BVjEyQElJQFoKICAg
ICAgICAgP3N1Z2dlc3RlZFZhbHVlQEhUTUxJbnB1dEVsZW1lbnRAV2ViQ29yZUBAUUJFQUJWU3Ry
aW5nQFdURkBAWFoKICAgICAgICAgP3RleHRAUmFuZ2VAV2ViQ29yZUBAUUJFP0FWU3RyaW5nQFdU
RkBAWFoKICAgICAgICAgP3RvRG9jdW1lbnRAV2ViQ29yZUBAWUFQQVZEb2N1bWVudEAxQFZKU1Zh
bHVlQEpTQ0BAQFoKQEAgLTIyMCw2ICsyMjgsNyBAQCBFWFBPUlRTCiAgICAgICAgID90b1Jhbmdl
QFdlYkNvcmVAQFlBUEFWUmFuZ2VAMUBWSlNWYWx1ZUBKU0NAQEBaCiAgICAgICAgID91cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHNARG9jdW1lbnRAV2ViQ29yZUBAUUFFWFhaCiAg
ICAgICAgID91c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQFdlYkNvcmVAQFlBP0FWPyRWZWN0b3JAVlN0
cmluZ0BXVEZAQCQwQUBAV1RGQEBYWgorICAgICAgICA/dXRmOEBTdHJpbmdAV1RGQEBRQkU/QVZD
U3RyaW5nQDJAX05AWgogICAgICAgICA/dmlld0BEb2N1bWVudEBXZWJDb3JlQEBRQkVQQVZGcmFt
ZVZpZXdAMkBYWgogICAgICAgICA/d2lsbERldGFjaFBhZ2VARnJhbWVEZXN0cnVjdGlvbk9ic2Vy
dmVyQFdlYkNvcmVAQFVBRVhYWgogICAgICAgICA/bm9kZXNGcm9tUmVjdEBEb2N1bWVudEBXZWJD
b3JlQEBRQkU/QVY/JFBhc3NSZWZQdHJAVk5vZGVMaXN0QFdlYkNvcmVAQEBXVEZAQEhISUlJSV9O
QFoKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDExMDg4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDgyIEBACisyMDEyLTAzLTE1ICBTdGVwaGFuaWUgTGV3aXMgIDxzbGV3aXNAYXBwbGUu
Y29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
MTA2NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA5NDQzMDk+IENyYXNoVHJhY2VyOiBbVVNF
Ul0gMTExIGNyYXNoZXMgaW4gV2ViUHJvY2VzcyBhdCBXZWJLaXRUZXN0UnVubmVySW5qZWN0ZWRC
dW5kbGU6IFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRvbmUgKyAxNDIKKyAgICAgICAgRml4IGNyYXNo
IHByZXZlbnRpbmcgV2ViS2l0VGVzdFJ1bm5lciBmcm9tIHdvcmtpbmcgaW4gUmVsZWFzZS4gIAor
ICAgICAgICBXZWJLaXRUZXN0UnVubmVyIHVzZWQgb3N0cmluZ3N0cmVhbSB0byBjb2xsZWN0IG91
dHB1dCBmcm9tIHRoZSB0ZXN0LiAgb3N0cmluZ3N0cmVhbSBpcyBpbmNvbXBhdGlibGUgd2l0aCBv
dXIKKyAgICAgICAgRmFzdE1hbGxvYyBvdmVycmlkZXMuICBXaGVuIGNvcHlpbmcgc3RyaW5ncyBv
dXQgb3N0cmluZ3N0cmVhbSBhIG5ldyBzdHJpbmcgaXMgYWxsb2NhdGVkIHdpdGggRmFzdE1hbGxv
YyBiZWNhdXNlCisgICAgICAgIHRoZSBhbGxvY2F0aW9uIGlzIGlubGluZWQuICBXaGVuIHRoYXQg
c3RyaW5nIGlzIGZyZWVkIGlzIHVzZXMgdGhlIHN5c3RlbSBtYWxsb2MgYmVjYXVzZSB0aGF0IGNh
bGwgaXMgbm90IGlubGluZWQuCisKKyAgICAgICAgSSByZW1vdmVkIG9zdHJpbmdzdHJlYW0gaW4g
ZmF2b3Igb2YgU3RyaW5nQnVpbGRlci4gIAorCisgICAgICAgIFByb3Blcmx5IHNldCBOREVCVUcg
b24gUmVsZWFzZSBidWlsZHMgc28gd2UgZG9uJ3QgY3Jhc2ggd2hlbiB3aGVuIHdlIGZyZWUgdGhl
IHN0cmluZ3MgU3RyaW5nQnVpbGRlciBjcmVhdGVkLgorCisgICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmIEdhcmVuLgorCisgICAgICAgIEFkZCBERUJVR19ERUZJTkVTIHRvIHNldCBOREVCVUcgb24g
cmVsZWFzZSBidWlsZHMuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1
bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgIFJlbW92ZSBvc3RyaW5n
c3RyZWFtIG1lbWJlciBpbiBmYXZvciBvZiBTdHJpbmdCdWlsZGVyLgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpiZWdpblRlc3RpbmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZG9u
ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnN0
cmluZ0J1aWxkZXIpOgorICAgICAgICAoSW5qZWN0ZWRCdW5kbGUpOgorCisgICAgICAgIEFwcGVu
ZCBvdXRwdXQgdG8gU3RyaW5nQnVpbGRlci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXVFI6Omhhc1By
ZWZpeCk6CisgICAgICAgIChXVFI6OmR1bXBQYXRoKToKKyAgICAgICAgKFdUUjo6cmFuZ2VUb1N0
cik6CisgICAgICAgIChXVFI6OnN0eWxlRGVjVG9TdHIpOgorICAgICAgICAoV1RSOjpmcmFtZVRv
U3RyKToKKyAgICAgICAgKFdUUjo6ZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAo
V1RSOjpkdW1wRnJhbWVUZXh0KToKKyAgICAgICAgKFdUUjo6ZHVtcERlc2NlbmRhbnRGcmFtZXNU
ZXh0KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKToKKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJh
bWUpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZv
ckZyYW1lKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgKFdUUjo6bGFzdEZpbGVVUkxQYXRoQ29tcG9u
ZW50KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRkTWVzc2FnZVRv
Q29uc29sZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1
c2JhclRleHQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZh
U2NyaXB0QWxlcnQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5K
YXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6
OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkSW5zZXJ0Tm9kZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxk
SW5zZXJ0VGV4dCk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRGVs
ZXRlUmFuZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3Vs
ZEFwcGx5U3R5bGUpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2lu
RWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGlu
Zyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24pOgorICAgICAg
ICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnN1cHBvcnRzRnVsbFNjcmVlbik6CisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCk6Cisg
ICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50
KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpiZWdhbkVudGVyRnVsbFNjcmVl
bik6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6YmVnYW5FeGl0RnVsbFNjcmVl
bik6CisgICAgICAgIChXVFI6OmR1bXBCYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAgKFdU
Ujo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyRmlyZWQpOgorICAgICAgICAoV1RSOjpMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZp
Z3VyYXRpb25Gb3JWaWV3cG9ydCk6CisgICAgICAgIAorICAgICAgICBDb252ZXJ0IGJldHdlZW4g
V1RGOjpTdHJpbmcgYW5kIFdLU3RyaW5nUmVmLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
U3RyaW5nRnVuY3Rpb25zLmg6CisgICAgICAgIChXVFI6OnRvV1RGU3RyaW5nKToKKyAgICAgICAg
KFdUUik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZSk6CisKIDIwMTItMDMtMTUgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNv
bT4KIAogICAgICAgICBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMuaHRtbCBhbmQg
ZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLTIuaHRtbCBmYWlsaW5nIG9uCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHJldmlzaW9uIDExMDg3OSkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV1RSIHsKQEAgLTc3LDMyICs3OCwxNyBAQCBpbmxpbmUgc3RkOjpzdHJpbmcg
dG9TVEQoY29uc3QgV0tSZXRhaW5QCiAgICAgcmV0dXJuIHRvU1REKHN0cmluZy5nZXQoKSk7CiB9
CiAKLS8vIFN0cmVhbWluZyBmdW5jdGlvbnMKLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0
b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQoraW5saW5lIFdU
Rjo6U3RyaW5nIHRvV1RGU3RyaW5nKFdLU3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICBpZiAoIXN0
cmluZ1JlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLQotICAgIHJldHVybiBvdXQgPDwgdG9TVEQo
c3RyaW5nUmVmKTsKLX0KLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9z
dHJlYW0mIG91dCwgY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmdSZWYpCi17
Ci0gICAgcmV0dXJuIG91dCA8PCBzdHJpbmdSZWYuZ2V0KCk7Ci19Ci0KLWlubGluZSBzdGQ6Om9z
dHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIFdLVVJMUmVmIHVybFJlZikKLXsK
LSAgICBpZiAoIXVybFJlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLQotICAgIHJldHVybiBvdXQg
PDwgdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsUmVmKSkpOworICAgIHNpemVfdCBi
dWZmZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7Cisg
ICAgT3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hhcltidWZm
ZXJTaXplXSk7CisgICAgc2l6ZV90IHN0cmluZ0xlbmd0aCA9IFdLU3RyaW5nR2V0VVRGOENTdHJp
bmcoc3RyaW5nLCBidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBXVEY6OlN0
cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmdldCgpLCBzdHJpbmdMZW5n
dGggLSAxKTsKIH0KLQotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG91dCwgY29uc3QgV0tSZXRhaW5QdHI8V0tVUkxSZWY+JiB1cmxSZWYpCisgICAgCitpbmxp
bmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
JiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIG91dCA8PCB1cmxSZWYuZ2V0KCk7CisgICAgcmV0dXJu
IHRvV1RGU3RyaW5nKHN0cmluZy5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRl
eDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDEx
MDg3OSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
QXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPGRpcmVjdC5oPiAvLyBGb3IgX2dldGN3ZC4KQEAgLTI0Miw3ICsyNDMs
NyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyCiAgICAgICAgIFdL
QXJyYXlSZWYgcmVwYWludFJlY3RzID0gc3RhdGljX2Nhc3Q8V0tBcnJheVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHJlcGFpbnRSZWN0c0tleS5n
ZXQoKSkpOyAgICAgICAgCiAKICAgICAgICAgLy8gRHVtcCB0ZXh0LgotICAgICAgICBkdW1wKHRv
U1REKHRleHRPdXRwdXQpLmNfc3RyKCksIHRydWUpOworICAgICAgICBkdW1wKHRvV1RGU3RyaW5n
KHRleHRPdXRwdXQpLnV0ZjgoKS5kYXRhKCksIHRydWUpOwogCiAgICAgICAgIC8vIER1bXAgcGl4
ZWxzIChpZiBuZWNlc3NhcnkpLgogICAgICAgICBpZiAobV9kdW1wUGl4ZWxzICYmIHBpeGVsUmVz
dWx0KQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhj
Y29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAKIEhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
dXNyL2xvY2FsL2luY2x1ZGUgJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRp
bmdIZWFkZXJzICR7U1JDUk9PVH0vLi4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdSAkKE5F
WFRfUk9PVCkvdXNyL2xvY2FsL2luY2x1ZGUvV2ViQ29yZVRlc3RTdXBwb3J0OwogRlJBTUVXT1JL
X1NFQVJDSF9QQVRIUyA9ICQoU1lTVEVNX0xJQlJBUllfRElSKS9GcmFtZXdvcmtzL1F1YXJ0ei5m
cmFtZXdvcmsvRnJhbWV3b3JrcyAkKFNZU1RFTV9MSUJSQVJZX0RJUikvRnJhbWV3b3Jrcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzICQoU1lTVEVNX0xJQlJBUllfRElS
KS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3JrczsKLUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQgV0VCS0lUX1ZF
UlNJT05fTUlOX1JFUVVJUkVEPVdFQktJVF9WRVJTSU9OX0xBVEVTVDsKK0dDQ19QUkVQUk9DRVNT
T1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9S
VCBXRUJLSVRfVkVSU0lPTl9NSU5fUkVRVUlSRUQ9V0VCS0lUX1ZFUlNJT05fTEFURVNUOwogREVC
VUdfSU5GT1JNQVRJT05fRk9STUFUID0gZHdhcmYKIFBSRUJJTkRJTkcgPSBOTwogR0NDX0NfTEFO
R1VBR0VfU1RBTkRBUkQgPSBnbnU5OQpAQCAtNDAsNiArNDAsMTAgQEAgTElOS0VSX0RJU1BMQVlT
X01BTkdMRURfTkFNRVMgPSBZRVM7CiBWQUxJRF9BUkNIUyA9IGkzODYgeDg2XzY0OwogR0NDX1BS
RUZJWF9IRUFERVIgPSBXZWJLaXRUZXN0UnVubmVyUHJlZml4LmgKIAorREVCVUdfREVGSU5FU19k
ZWJ1ZyA9IDsKK0RFQlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOworREVCVUdfREVGSU5FUyA9
ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOworCiBDTEFOR19DWFhfTElCUkFS
WSA9ICQoQ0xBTkdfQ1hYX0xJQlJBUllfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikp
OwogQ0xBTkdfQ1hYX0xJQlJBUllfMTA2MCA9IGxpYnN0ZGMrKzsKIENMQU5HX0NYWF9MSUJSQVJZ
XzEwNzAgPSBsaWJjKys7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMTEwODc5KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dL
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdUUiB7CkBAIC03OCw2ICs4MCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJl
Y2VpdmVNZXNzYWdlKFcKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemUoV0tCdW5kbGVS
ZWYgYnVuZGxlLCBXS1R5cGVSZWYgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKIHsKICAgICBtX2J1
bmRsZSA9IGJ1bmRsZTsKKyAgICBtX3N0cmluZ0J1aWxkZXIgPSBXVEY6OmFkb3B0UHRyKG5ldyBX
VEY6OlN0cmluZ0J1aWxkZXIoKSk7CiAKICAgICBXS0J1bmRsZUNsaWVudCBjbGllbnQgPSB7CiAg
ICAgICAgIGtXS0J1bmRsZUNsaWVudEN1cnJlbnRWZXJzaW9uLApAQCAtMTkxLDkgKzE5NCw5IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmJlZ2luVGVzdGluZygpCiB7CiAgICAgbV9zdGF0ZSA9IFRl
c3Rpbmc7CiAKLSAgICBtX291dHB1dFN0cmVhbS5zdHIoIiIpOwogICAgIG1fcGl4ZWxSZXN1bHQu
Y2xlYXIoKTsKICAgICBtX3JlcGFpbnRSZWN0cy5jbGVhcigpOworICAgIG1fc3RyaW5nQnVpbGRl
ci0+Y2xlYXIoKTsKIAogICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y3JlYXRlKCk7CiAgICAgbV9nY0NvbnRyb2xsZXIgPSBHQ0NvbnRyb2xsZXI6OmNy
ZWF0ZSgpOwpAQCAtMjMwLDcgKzIzMyw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUoKQog
ICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRvbmVNZXNzYWdlQm9keShB
ZG9wdFdLLCBXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRlKCkpOwogCiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRleHRPdXRwdXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlRleHRPdXRwdXQiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRl
eHRPdXRwdXQoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9vdXRwdXRT
dHJlYW0uc3RyKCkuY19zdHIoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0ZXh0
T3V0cHV0KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1fc3RyaW5nQnVp
bGRlci0+dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgV0tEaWN0aW9uYXJ5QWRkSXRl
bShkb25lTWVzc2FnZUJvZHkuZ2V0KCksIHRleHRPdXRwdXRLZXkuZ2V0KCksIHRleHRPdXRwdXQu
Z2V0KCkpOwogICAgIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBwaXhlbFJlc3VsdEtl
eSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlBpeGVsUmVzdWx0Iikp
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuaAkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSwxMCBAQAogCiAjaW5jbHVkZSA8c3N0cmVhbT4KIAorbmFtZXNwYWNlIFdURiB7
CitjbGFzcyBTdHJpbmdCdWlsZGVyOworfQorCiBuYW1lc3BhY2UgV1RSIHsKIAogY2xhc3MgSW5q
ZWN0ZWRCdW5kbGVQYWdlOwpAQCAtNjYsNyArNzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1w
QmFja0ZvcndhcmRMaXN0c0ZvckFsbFBhZ2VzKCk7CiAKICAgICB2b2lkIGRvbmUoKTsKLSAgICBz
dGQ6Om9zdHJpbmdzdHJlYW0mIG9zKCkgeyByZXR1cm4gbV9vdXRwdXRTdHJlYW07IH0KKyAgICBX
VEY6OlN0cmluZ0J1aWxkZXIqIHN0cmluZ0J1aWxkZXIoKSB7IHJldHVybiBtX3N0cmluZ0J1aWxk
ZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNldFBpeGVsUmVzdWx0KFdLSW1hZ2VSZWYgaW1hZ2UpIHsg
bV9waXhlbFJlc3VsdCA9IGltYWdlOyB9CiAgICAgdm9pZCBzZXRSZXBhaW50UmVjdHMoV0tBcnJh
eVJlZiByZWN0cykgeyBtX3JlcGFpbnRSZWN0cyA9IHJlY3RzOyB9CiAKQEAgLTExNiw3ICsxMjAs
NyBAQCBwcml2YXRlOgogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtX3RvcExvYWRpbmdGcmFtZTsK
IAotICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtX291dHB1dFN0cmVhbTsKKyAgICBPd25QdHI8V1RG
OjpTdHJpbmdCdWlsZGVyPiBtX3N0cmluZ0J1aWxkZXI7CiAgICAgCiAgICAgZW51bSBTdGF0ZSB7
CiAgICAgICAgIElkbGUsCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiAx
MTA4NzkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRl
IDxXZWJLaXQyL1dLQnVuZGxlTm9kZUhhbmRsZVByaXZhdGUuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dLQnVuZGxlUGFnZVByaXZhdGUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLVVJMUmVxdWVzdC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdC5oIgpAQCAtNTEsOSArNTMsOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBu
YW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIGJvb2wgaGFzUHJlZml4KGNvbnN0IHN0cmluZyYgc2Vh
cmNoU3RyaW5nLCBjb25zdCBzdHJpbmcmIHByZWZpeCkKK3N0YXRpYyBib29sIGhhc1ByZWZpeChj
b25zdCBXVEY6OlN0cmluZyYgc2VhcmNoU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcHJlZml4
KQogewotICAgIHJldHVybiBzZWFyY2hTdHJpbmcubGVuZ3RoKCkgPj0gcHJlZml4Lmxlbmd0aCgp
ICYmIHNlYXJjaFN0cmluZy5zdWJzdHIoMCwgcHJlZml4Lmxlbmd0aCgpKSA9PSBwcmVmaXg7Cisg
ICAgcmV0dXJuIHNlYXJjaFN0cmluZy5sZW5ndGgoKSA+PSBwcmVmaXgubGVuZ3RoKCkgJiYgc2Vh
cmNoU3RyaW5nLnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKCkpID09IHByZWZpeDsKIH0KIAog
c3RhdGljIEpTVmFsdWVSZWYgcHJvcGVydHlWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgb2JqZWN0LCBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUpCkBAIC04Myw3ICs4NSw3
IEBAIHN0YXRpYyBkb3VibGUgbnVtZXJpY1dpbmRvd1Byb3BlcnR5VmFsdWUKICAgICByZXR1cm4g
cHJvcGVydHlWYWx1ZURvdWJsZShjb250ZXh0LCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29u
dGV4dCksIHByb3BlcnR5TmFtZSk7CiB9CiAKLXN0YXRpYyBzdHJpbmcgZHVtcFBhdGgoSlNHbG9i
YWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1ZSkKK3N0YXRpYyBXVEY6
OlN0cmluZyBkdW1wUGF0aChKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
bm9kZVZhbHVlKQogewogICAgIEpTVmFsdWVSZWYgbm9kZU5hbWVWYWx1ZSA9IHByb3BlcnR5VmFs
dWUoY29udGV4dCwgbm9kZVZhbHVlLCAibm9kZU5hbWUiKTsKICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4ganNTdHJpbmdOb2RlTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBub2RlTmFtZVZhbHVlLCAwKSk7CkBAIC05MSwxNiArOTMsMTggQEAgc3RhdGljIHN0cmlu
ZyBkdW1wUGF0aChKU0dsb2JhbENvbnRleHRSZQogCiAgICAgSlNWYWx1ZVJlZiBwYXJlbnROb2Rl
ID0gcHJvcGVydHlWYWx1ZShjb250ZXh0LCBub2RlVmFsdWUsICJwYXJlbnROb2RlIik7CiAKLSAg
ICBvc3RyaW5nc3RyZWFtIG91dDsKLSAgICBvdXQgPDwgbm9kZU5hbWU7CisgICAgV1RGOjpTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZT
dHJpbmcobm9kZU5hbWUpKTsKIAotICAgIGlmIChwYXJlbnROb2RlICYmIEpTVmFsdWVJc09iamVj
dChjb250ZXh0LCBwYXJlbnROb2RlKSkKLSAgICAgICAgb3V0IDw8ICIgPiAiIDw8IGR1bXBQYXRo
KGNvbnRleHQsIChKU09iamVjdFJlZilwYXJlbnROb2RlKTsKKyAgICBpZiAocGFyZW50Tm9kZSAm
JiBKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgcGFyZW50Tm9kZSkpIHsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiA+ICIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1w
UGF0aChjb250ZXh0LCAoSlNPYmplY3RSZWYpcGFyZW50Tm9kZSkpOworICAgIH0KIAotICAgIHJl
dHVybiBvdXQuc3RyKCk7CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKIH0K
IAotc3RhdGljIHN0cmluZyBkdW1wUGF0aChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVT
Y3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGUpCitzdGF0aWMg
V1RGOjpTdHJpbmcgZHVtcFBhdGgoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlU2NyaXB0
V29ybGRSZWYgd29ybGQsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlKQogewogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuICIobnVsbCkiOwpAQCAtMTE1LDExICsxMTksMTEgQEAgc3Rh
dGljIHN0cmluZyBkdW1wUGF0aChXS0J1bmRsZVBhZ2VSZWYgcAogICAgIHJldHVybiBkdW1wUGF0
aChjb250ZXh0LCBub2RlT2JqZWN0KTsKIH0KIAotc3RhdGljIHN0cmluZyB0b1N0cihXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCwgV0tCdW5kbGVSYW5n
ZUhhbmRsZVJlZiByYW5nZVJlZikKK3N0YXRpYyBXVEY6OlN0cmluZyByYW5nZVRvU3RyKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxkLCBXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIHJhbmdlUmVmKQogewogICAgIGlmICghcmFuZ2VSZWYpCiAgICAgICAgIHJl
dHVybiAiKG51bGwpIjsKLQorIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3Js
ZCk7CkBAIC0xMzgsMTIgKzE0MiwxOSBAQCBzdGF0aWMgc3RyaW5nIHRvU3RyKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gcHJvcGVydHlWYWx1ZUludChjb250ZXh0
LCByYW5nZU9iamVjdCwgInN0YXJ0T2Zmc2V0Iik7CiAgICAgaW50IGVuZE9mZnNldCA9IHByb3Bl
cnR5VmFsdWVJbnQoY29udGV4dCwgcmFuZ2VPYmplY3QsICJlbmRPZmZzZXQiKTsKIAotICAgIG9z
dHJpbmdzdHJlYW0gb3V0OwotICAgIG91dCA8PCAicmFuZ2UgZnJvbSAiIDw8IHN0YXJ0T2Zmc2V0
IDw8ICIgb2YgIiA8PCBkdW1wUGF0aChjb250ZXh0LCBzdGFydE5vZGVPYmplY3QpIDw8ICIgdG8g
IiA8PCBlbmRPZmZzZXQgPDwgIiBvZiAiIDw8IGR1bXBQYXRoKGNvbnRleHQsIGVuZE5vZGVPYmpl
Y3QpOwotICAgIHJldHVybiBvdXQuc3RyKCk7CisgICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInJhbmdlIGZyb20gIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoV1RGOjpTdHJpbmc6Om51bWJlcihzdGFydE9mZnNldCkpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgb2YgIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoZHVtcFBhdGgoY29udGV4dCwgc3RhcnROb2RlT2JqZWN0KSk7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiB0byAiKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChXVEY6OlN0cmluZzo6
bnVtYmVyKGVuZE9mZnNldCkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgb2YgIik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgoY29udGV4dCwgZW5kTm9kZU9iamVjdCkp
OworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gbmF2aWdhdGlvblR5cGVUb1N0cmluZyhXS0ZyYW1lTmF2aWdh
dGlvblR5cGUgdHlwZSkKK3N0YXRpYyBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gTmF2aWdhdGlv
blR5cGVUb1N0cmluZyhXS0ZyYW1lTmF2aWdhdGlvblR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIGtXS0ZyYW1lTmF2aWdhdGlvblR5cGVMaW5rQ2xpY2tlZDoKQEAg
LTE2MiwzMSArMTczLDM4IEBAIHN0YXRpYyBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmF2aWdh
dGkKICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiaWxs
ZWdhbCB2YWx1ZSIpKTsKIH0KIAotc3RhdGljIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYg
b3V0LCBXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUpCitzdGF0aWMgV1RGOjpT
dHJpbmcgc3R5bGVEZWNUb1N0cihXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUp
CiB7CiAgICAgLy8gRHVtcFJlbmRlclRyZWUgY2FsbHMgLVtET01DU1NTdHlsZURlY2xhcmF0aW9u
IGRlc2NyaXB0aW9uXSwgd2hpY2gganVzdCBkdW1wcyBjbGFzcyBuYW1lIGFuZCBvYmplY3QgYWRk
cmVzcy4KICAgICAvLyBObyBleGlzdGluZyB0ZXN0cyBhY3R1YWxseSBoaXQgdGhpcyBjb2RlIHBh
dGggYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBiZWNhdXNlIFdlYkNvcmUgZG9lc24ndCBj
YWxsCiAgICAgLy8gdGhlIGVkaXRpbmcgY2xpZW50IGlmIHRoZSBzdHlsaW5nIG9wZXJhdGlvbiBz
b3VyY2UgaXMgQ29tbWFuZEZyb21ET00gb3IgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVyZmFj
ZS4KLSAgICBvdXQgPDwgIjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+IjsKLSAgICBy
ZXR1cm4gb3V0OworICAgIFdURjo6U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCI8RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiBBRERSRVNTPiIpOwor
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBvc3RyZWFt
JiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKK3N0YXRp
YyBXVEY6OlN0cmluZyBmcmFtZVRvU3RyKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7CiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5hbWUoQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlO
YW1lKGZyYW1lKSk7CisgICAgV1RGOjpTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAg
aWYgKFdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpIHsKLSAgICAgICAgaWYgKCFXS1N0
cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpCi0gICAgICAgICAgICBvdXQgPDwgIm1haW4gZnJhbWUg
XCIiIDw8IG5hbWUgPDwgIlwiIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3V0IDw8ICJt
YWluIGZyYW1lIjsKKyAgICAgICAgaWYgKCFXS1N0cmluZ0lzRW1wdHkobmFtZS5nZXQoKSkpIHsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJtYWluIGZyYW1lIFwiIik7CisgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhuYW1lKSk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXCIiKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgibWFpbiBmcmFtZSIpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmICghV0tTdHJpbmdJc0VtcHR5KG5hbWUuZ2V0KCkpKQotICAgICAgICAgICAgb3V0
IDw8ICJmcmFtZSBcIiIgPDwgbmFtZSA8PCAiXCIiOworICAgICAgICBpZiAoIVdLU3RyaW5nSXNF
bXB0eShuYW1lLmdldCgpKSkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoImZy
YW1lIFwiIik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhu
YW1lKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXCIiKTsKKyAgICAgICAg
fQogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQgPDwgImZyYW1lIChhbm9ueW1vdXMpIjsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJmcmFtZSAoYW5vbnltb3VzKSIpOwog
ICAgIH0KLQotICAgIHJldHVybiBvdXQ7CisgICAgCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKIH0KIAogSW5qZWN0ZWRCdW5kbGVQYWdlOjpJbmplY3RlZEJ1bmRsZVBhZ2Uo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UpCkBAIC00NzUsOSArNDkzLDE1IEBAIHN0YXRpYyB2b2lkIGR1
bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnUKICAgICBpZiAoZmFicyh4KSA+IDAuMDAwMDAwMDEg
fHwgZmFicyh5KSA+IDAuMDAwMDAwMDEpIHsKICAgICAgICAgaWYgKHNob3VsZEluY2x1ZGVGcmFt
ZU5hbWUpIHsKICAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuYW1lKEFkb3B0
V0ssIFdLQnVuZGxlRnJhbWVDb3B5TmFtZShmcmFtZSkpOwotICAgICAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgImZyYW1lICciIDw8IG5hbWUgPDwgIicgIjsKKyAgICAg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgi
ZnJhbWUgJyIpOworICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKG5hbWUpKTsKKyAgICAgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiJyAiKTsKICAgICAgICAg
fQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAic2Nyb2xsZWQgdG8g
IiA8PCB4IDw8ICIsIiA8PCB5IDw8ICJcbiI7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgic2Nyb2xsZWQgdG8gIik7CisgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChXVEY6OlN0cmlu
Zzo6bnVtYmVyKHgpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCIsIik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZChXVEY6OlN0cmluZzo6bnVtYmVyKHkpKTsKKyAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOwog
ICAgIH0KIH0KIApAQCAtNTMyLDcgKzU1Niw4IEBAIHN0YXRpYyB2b2lkIGR1bXBGcmFtZVRleHQo
V0tCdW5kbGVGcmFtZVIKICAgICAgICAgcmV0dXJuOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHRleHQoQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlJbm5lclRleHQoZnJhbWUpKTsK
LSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCB0ZXh0IDw8ICJcbiI7CisgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3Ry
aW5nKHRleHQpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoIlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4
dChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQpAQCAtNTQyLDcgKzU2Nyw5IEBAIHN0YXRpYyB2b2lk
IGR1bXBEZXNjZW5kYW50RnJhbWVzVGV4dChXS0IKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewogICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIHN1YmZyYW1lID0gc3RhdGlj
X2Nhc3Q8V0tCdW5kbGVGcmFtZVJlZj4oV0tBcnJheUdldEl0ZW1BdEluZGV4KGNoaWxkRnJhbWVz
LmdldCgpLCBpKSk7CiAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJmcmFtZU5h
bWUoQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlOYW1lKHN1YmZyYW1lKSk7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJcbi0tLS0tLS0tXG5GcmFtZTogJyIgPDwg
c3ViZnJhbWVOYW1lIDw8ICInXG4tLS0tLS0tLVxuIjsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbi0tLS0tLS0tXG5GcmFtZTogJyIp
OworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQodG9XVEZTdHJpbmcoc3ViZnJhbWVOYW1lKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiJ1xuLS0tLS0tLS1cbiIpOwogICAgICAg
ICBkdW1wRnJhbWVUZXh0KHN1YmZyYW1lKTsKICAgICAgICAgZHVtcERlc2NlbmRhbnRGcmFtZXNU
ZXh0KHN1YmZyYW1lKTsKICAgICB9CkBAIC01NjYsMTQgKzU5MywxNCBAQCB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgV0tCdW5kbGVQYWdlRm9yY2VSZXBhaW50KG1fcGFnZSk7
CiAKICAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KG1fcGFnZSk7Ci0gICAgc3RyaW5nIHVybCA9IHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5n
KGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwoZnJhbWUpKS5nZXQoKSkpKTsKLSAgICBpZiAo
c3Ryc3RyKHVybC5jX3N0cigpLCAiZHVtcEFzVGV4dC8iKSkKKyAgICBXVEY6OlN0cmluZyB1cmwg
PSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhhZG9wdFdLKFdLQnVuZGxlRnJh
bWVDb3B5VVJMKGZyYW1lKSkuZ2V0KCkpKSk7CisgICAgaWYgKHVybC5maW5kKCJkdW1wQXNUZXh0
LyIpICE9IFdURjo6bm90Rm91bmQpCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKIAogICAgIHN3aXRjaCAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndoYXRUb0R1
bXAoKSkgewogICAgIGNhc2UgTGF5b3V0VGVzdENvbnRyb2xsZXI6OlJlbmRlclRyZWU6IHsKICAg
ICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRleHQoQWRvcHRXSywgV0tCdW5kbGVQYWdl
Q29weVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKG1fcGFnZSkpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCB0ZXh0OworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodGV4dCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
TWFpbkZyYW1lVGV4dDoKQEAgLTYzOSw3ICs2NjYsOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkUmVjZWl2ZVRpdGxlCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5
b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiVElUTEUgQ0hB
TkdFRDogIiA8PCB0aXRsZSA8PCAiXG4iOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
dHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiVElUTEUgQ0hBTkdFRDogIik7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxl
KSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KCJcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JG
cmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdvcmxk
KQpAQCAtNjg3LDggKzcxNiwxMiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNo
RG9jdW1lCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIHBlbmRpbmdGcmFtZVVubG9h
ZEV2ZW50cyA9IFdLQnVuZGxlRnJhbWVHZXRQZW5kaW5nVW5sb2FkQ291bnQoZnJhbWUpOwotICAg
IGlmIChwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vcygpIDw8IGZyYW1lIDw8ICIgLSBoYXMgIiA8PCBwZW5kaW5nRnJhbWVVbmxvYWRF
dmVudHMgPDwgIiBvbnVubG9hZCBoYW5kbGVyKHMpXG4iOworICAgIGlmIChwZW5kaW5nRnJhbWVV
bmxvYWRFdmVudHMpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKGZyYW1lVG9TdHIoZnJhbWUpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgLSBoYXMgIik7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChXVEY6OlN0
cmluZzo6bnVtYmVyKHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cykpOworICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiBvbnVubG9hZCBoYW5k
bGVyKHMpXG4iKTsKKyAgICB9CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRIYW5k
bGVPbmxvYWRFdmVudHNGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQpAQCAtNzIxLDEy
ICs3NTQsMTUgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbAogICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwo
cmVxdWVzdCkpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0ID0gYWRvcHRXSyhX
S1VSTENvcHlIb3N0TmFtZSh1cmwuZ2V0KCkpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc2NoZW1lID0gYWRvcHRXSyhXS1VSTENvcHlTY2hlbWUodXJsLmdldCgpKSk7CisgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5n
KHVybC5nZXQoKSkpOwogICAgIGlmIChob3N0ICYmICFXS1N0cmluZ0lzRW1wdHkoaG9zdC5nZXQo
KSkKICAgICAgICAgJiYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmdJZ25vcmluZ0Nhc2Uo
c2NoZW1lLmdldCgpLCAiaHR0cCIpIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmdJZ25v
cmluZ0Nhc2Uoc2NoZW1lLmdldCgpLCAiaHR0cHMiKSkKICAgICAgICAgJiYgIVdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoaG9zdC5nZXQoKSwgIjEyNy4wLjAuMSIpCiAgICAgICAgICYmICFX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGhvc3QuZ2V0KCksICIyNTUuMjU1LjI1NS4yNTUi
KSAvLyBVc2VkIGluIHNvbWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3Iu
CiAgICAgICAgICYmICFXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nSWdub3JpbmdDYXNlKGhv
c3QuZ2V0KCksICJsb2NhbGhvc3QiKSkgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3MoKSA8PCAiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICIgPDwgdXJsIDw8ICJc
biI7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgiQmxvY2tlZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICIpOworICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcodXJs
U3RyaW5nKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVy
KCktPmFwcGVuZCgiXG4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC03ODIsMTIg
KzgxOCwxOSBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQCiAgICAg
ICAgIHJldHVybiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb25Vc2U7CiAKICAgICBpZiAoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPndhaXRUb0R1bXAoKSkg
ewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiUG9saWN5IGRlbGVn
YXRlOiBhdHRlbXB0IHRvIGxvYWQgIiA8PCBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVx
dWVzdCkpIDw8ICIgd2l0aCBuYXZpZ2F0aW9uIHR5cGUgXCciIDw8IG5hdmlnYXRpb25UeXBlVG9T
dHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2aWdhdGlv
bkFjdGlvbikpIDw8ICJcJyI7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmwg
PSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKSk7
CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZCgiUG9saWN5IGRlbGVnYXRlOiBhdHRlbXB0IHRvIGxvYWQgIik7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyh1cmwp
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBw
ZW5kKCIgd2l0aCBuYXZpZ2F0aW9uIHR5cGUgXCciKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKE5hdmlnYXRpb25U
eXBlVG9TdHJpbmcoV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uR2V0TmF2aWdhdGlvblR5cGUobmF2
aWdhdGlvbkFjdGlvbikpKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgiXCciKTsKICAgICAgICAgV0tCdW5kbGVIaXRUZXN0UmVzdWx0
UmVmIGhpdFRlc3RSZXN1bHRSZWYgPSBXS0J1bmRsZU5hdmlnYXRpb25BY3Rpb25Db3B5SGl0VGVz
dFJlc3VsdChuYXZpZ2F0aW9uQWN0aW9uKTsKLSAgICAgICAgaWYgKGhpdFRlc3RSZXN1bHRSZWYp
Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiIG9yaWdpbmF0
aW5nIGZyb20gIiA8PCBkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIFdLQnVuZGxlSGl0
VGVzdFJlc3VsdENvcHlOb2RlSGFuZGxlKGhpdFRlc3RSZXN1bHRSZWYpKTsKKyAgICAgICAgaWYg
KGhpdFRlc3RSZXN1bHRSZWYpIHsKKyAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIG9yaWdpbmF0aW5nIGZyb20gIik7IAorICAgICAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGR1
bXBQYXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgV0tCdW5kbGVIaXRUZXN0UmVzdWx0Q29weU5v
ZGVIYW5kbGUoaGl0VGVzdFJlc3VsdFJlZikpKTsKKyAgICAgICAgfQogCi0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJcbiI7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKICAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPm5vdGlmeURvbmUoKTsK
ICAgICB9CiAKQEAgLTgzNywyMiArODgwLDIyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3
aWxsUnVuSmF2YVNjcmkKICAgICBzdGF0aWNfY2FzdDxJbmplY3RlZEJ1bmRsZVBhZ2UqPihjb25z
dF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KG1lc3Nh
Z2UsIGRlZmF1bHRWYWx1ZSwgZnJhbWUpOwogfQogCi1zdGF0aWMgc3RyaW5nIGxhc3RGaWxlVVJM
UGF0aENvbXBvbmVudChjb25zdCBzdHJpbmcmIHBhdGgpCitzdGF0aWMgV1RGOjpTdHJpbmcgbGFz
dEZpbGVVUkxQYXRoQ29tcG9uZW50KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRoKQogewogICAgIHNp
emVfdCBwb3MgPSBwYXRoLmZpbmQoImZpbGU6Ly8iKTsKLSAgICBBU1NFUlQoc3RyaW5nOjpucG9z
ICE9IHBvcyk7CisgICAgQVNTRVJUKFdURjo6bm90Rm91bmQgIT0gcG9zKTsKIAotICAgIHN0cmlu
ZyB0bXBQYXRoID0gcGF0aC5zdWJzdHIocG9zICsgNyk7CisgICAgV1RGOjpTdHJpbmcgdG1wUGF0
aCA9IHBhdGguc3Vic3RyaW5nKHBvcyArIDcpOwogICAgIGlmICh0bXBQYXRoLmxlbmd0aCgpIDwg
MikgLy8gS2VlcCB0aGUgbG9uZSBzbGFzaCB0byBhdm9pZCBlbXB0eSBvdXRwdXQuCiAgICAgICAg
IHJldHVybiB0bXBQYXRoOwogCiAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBkZWxpbWl0ZXIK
ICAgICBpZiAodG1wUGF0aFt0bXBQYXRoLmxlbmd0aCgpIC0gMV0gPT0gJy8nKQotICAgICAgICB0
bXBQYXRoLmVyYXNlKHRtcFBhdGgubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgdG1wUGF0aC5yZW1v
dmUodG1wUGF0aC5sZW5ndGgoKSAtIDEpOwogCi0gICAgcG9zID0gdG1wUGF0aC5yZmluZCgnLycp
OwotICAgIGlmIChzdHJpbmc6Om5wb3MgIT0gcG9zKQotICAgICAgICByZXR1cm4gdG1wUGF0aC5z
dWJzdHIocG9zICsgMSk7CisgICAgcG9zID0gdG1wUGF0aC5yZXZlcnNlRmluZCgnLycpOworICAg
IGlmIChXVEY6Om5vdEZvdW5kICE9IHBvcykKKyAgICAgICAgcmV0dXJuIHRtcFBhdGguc3Vic3Ry
aW5nKHBvcyArIDEpOwogCiAgICAgcmV0dXJuIHRtcFBhdGg7CiB9CkBAIC04NjIsMTYgKzkwNSwy
MCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbEFkZE1lc3NhZ2VUCiAgICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBzdHJpbmcgbWVzc2FnZVN0cmluZyA9IHRvU1REKG1lc3NhZ2UpOworICAgIFdURjo6
U3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsKICAgICBzaXplX3Qg
ZmlsZVByb3RvY29sU3RhcnQgPSBtZXNzYWdlU3RyaW5nLmZpbmQoImZpbGU6Ly8iKTsKLSAgICBp
ZiAoZmlsZVByb3RvY29sU3RhcnQgIT0gc3RyaW5nOjpucG9zKQorICAgIGlmIChmaWxlUHJvdG9j
b2xTdGFydCAhPSBXVEY6Om5vdEZvdW5kKQogICAgICAgICAvLyBGSVhNRTogVGhlIGNvZGUgYmVs
b3cgZG9lcyBub3QgaGFuZGxlIGFkZGl0aW9uYWwgdGV4dCBhZnRlciB1cmwgbm9yIG11bHRpcGxl
IHVybHMuIFRoaXMgbWF0Y2hlcyBEdW1wUmVuZGVyVHJlZSBpbXBsZW1lbnRhdGlvbi4KLSAgICAg
ICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VTdHJpbmcuc3Vic3RyKDAsIGZpbGVQcm90b2NvbFN0
YXJ0KSArIGxhc3RGaWxlVVJMUGF0aENvbXBvbmVudChtZXNzYWdlU3RyaW5nLnN1YnN0cihmaWxl
UHJvdG9jb2xTdGFydCkpOworICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZVN0cmluZy5z
dWJzdHJpbmcoMCwgZmlsZVByb3RvY29sU3RhcnQpICsgbGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50
KG1lc3NhZ2VTdHJpbmcuc3Vic3RyaW5nKGZpbGVQcm90b2NvbFN0YXJ0KSk7CiAKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiQ09OU09MRSBNRVNTQUdFOiAiOwotICAgIGlm
IChsaW5lTnVtYmVyKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAi
bGluZSAiIDw8IGxpbmVOdW1iZXIgPDwgIjogIjsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3MoKSA8PCBtZXNzYWdlU3RyaW5nIDw8ICJcbiI7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJDT05TT0xFIE1FU1NBR0U6ICIpOworICAg
IGlmIChsaW5lTnVtYmVyKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZCgibGluZSAiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKFdURjo6U3RyaW5nOjpudW1iZXIobGluZU51
bWJlcikpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoIjogIik7CisgICAgfQorICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJp
bmdCdWlsZGVyKCktPmFwcGVuZChtZXNzYWdlU3RyaW5nKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CiAKIH0KIApAQCAtODgzLDcg
KzkzMCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmEKICAgICBp
ZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91
bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6IHNl
dFN0YXR1c1RleHQ6IiA8PCBzdGF0dXNiYXJUZXh0IDw8ICJcbiI7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJVSSBERUxFR0FURSBTVEFUVVMg
Q0FMTEJBQ0s6IHNldFN0YXR1c1RleHQ6Iik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQpKTsKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdEFsZXJ0KFdL
U3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCkBAIC04OTEsNyArOTQwLDkgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaQogICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkFMRVJUOiAiIDw8IG1lc3NhZ2Ug
PDwgIlxuIjsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQoIkFMRVJUOiAiKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobWVzc2FnZSkpOworICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0Q29uZmlybShXS1N0cmluZ1JlZiBtZXNz
YWdlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtODk5LDEyICs5NTAsMTggQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaQogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkNPTkZJUk06ICIgPDwgbWVzc2FnZSA8PCAiXG4iOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiQ09O
RklSTTogIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdFByb21wdChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS1N0
cmluZ1JlZiBkZWZhdWx0VmFsdWUsIFdLQnVuZGxlRnJhbWVSZWYpCiB7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIlBST01QVDogIiA8PCBtZXNzYWdlIDw8ICIsIGRlZmF1
bHQgdGV4dDogIiA8PCBkZWZhdWx0VmFsdWUgPDwgICJcbiI7CisgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJQUk9NUFQ6ICIpOworICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyht
ZXNzYWdlKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+
YXBwZW5kKCIsIGRlZmF1bHQgdGV4dDogIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKGRlZmF1bHRWYWx1ZSkpOworICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsK
IH0KIAogLy8gRWRpdG9yIENsaWVudCBDYWxsYmFja3MKQEAgLTk2OSw4ICsxMDI2LDExIEBAIGJv
b2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXQKICAgICBpZiAoIUluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogc2hvdWxkQmVnaW5FZGl0aW5nSW5E
T01SYW5nZToiIDw8IHRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpIDw8ICJcbiI7
CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTogc2hv
dWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZToiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxk
LmdldCgpLCByYW5nZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQoIlxuIik7CisgICAgfQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7
CiB9CiAKQEAgLTk3OSw4ICsxMDM5LDExIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91
bGRFbmRFZGl0aW4KICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBE
RUxFR0FURTogc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6IiA8PCB0b1N0cihtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlKSA8PCAiXG4iOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIpOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
cmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7CisgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKKyAgICB9
CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtOTk1LDggKzEwNTgsMTUgQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZAogICAgICAgICAiV2ViVmlld0lu
c2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiIgPDwgZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCBub2RlKSA8PCAiIHJlcGxhY2luZ0RPTVJhbmdlOiIgPDwgdG9TdHIobV9wYWdlLCBtX3dv
cmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkgPDwgIiBnaXZlbkFjdGlvbjoiIDw8IGluc2VydGFj
dGlvbnN0cmluZ1thY3Rpb25dIDw8ICJcbiI7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KSB7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsKKyAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGR1bXBQYXRoKG1f
cGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiByZXBsYWNpbmdET01SYW5nZToiKTsKKyAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJh
bmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkpOworICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiBnaXZl
bkFjdGlvbjoiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJcbiIpOworICAgIH0K
ICAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVy
KCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCkBAIC0xMDExLDggKzEwODEsMTUgQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleAogICAgICAgICAiV2ViVmlld0lu
c2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiIgPDwgdGV4dCA8PCAiIHJlcGxhY2luZ0RPTVJhbmdl
OiIgPDwgdG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZVRvUmVwbGFjZSkgPDwgIiBn
aXZlbkFjdGlvbjoiIDw8IGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dIDw8ICJcbiI7CisgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5z
ZXJ0VGV4dDoiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxk
ZXIoKS0+YXBwZW5kKHRvV1RGU3RyaW5nKHRleHQpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgcmVwbGFjaW5nRE9NUmFuZ2U6Iik7
CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVu
ZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2VUb1JlcGxhY2UpKTsKKyAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIg
Z2l2ZW5BY3Rpb246Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZChpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7CisgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKKyAg
ICB9CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJv
bGxlcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTAyMSw4ICsxMDk4LDExIEBA
IGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGREZWxldGVSYW4KICAgICBpZiAoIUluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFu
Z2U6IiA8PCB0b1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSA8PCAiXG4iOworICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZERl
bGV0ZURPTVJhbmdlOiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5n
QnVpbGRlcigpLT5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdl
KSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFw
cGVuZCgiXG4iKTsKKyAgICB9CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIApAQCAtMTA0
MCw4ICsxMTIwLDE3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VTZWwK
ICAgICAgICAgIlRSVUUiCiAgICAgfTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkK
LSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdB
VEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6IiA8PCB0b1N0cihtX3BhZ2UsIG1fd29y
bGQuZ2V0KCksIGZyb21SYW5nZSkgPDwgIiB0b0RPTVJhbmdlOiIgPDwgdG9TdHIobV9wYWdlLCBt
X3dvcmxkLmdldCgpLCB0b1JhbmdlKSA8PCAiIGFmZmluaXR5OiIgPDwgYWZmaW5pdHlzdHJpbmdb
YWZmaW5pdHldIDw8ICIgc3RpbGxTZWxlY3Rpbmc6IiA8PCBib29sc3RyaW5nW3N0aWxsU2VsZWN0
aW5nXSA8PCAiXG4iOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIkVESVRJTkcg
REVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Iik7CisgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5nZVRvU3RyKG1f
cGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiIHRvRE9NUmFuZ2U6Iik7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZChyYW5n
ZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgdG9SYW5nZSkpOworICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiBhZmZpbml0eToiKTsK
KyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5k
KGFmZmluaXR5c3RyaW5nW2FmZmluaXR5XSk7IAorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiBzdGlsbFNlbGVjdGluZzoiKTsKKyAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKGJvb2xz
dHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKKyAgICB9CiAgICAgcmV0dXJuIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRBbGxvd0Vk
aXRpbmcoKTsKIH0KIApAQCAtMTA1MCw4ICsxMTM5LDEzIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpzaG91bGRBcHBseVN0eWwKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5p
c1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAi
RURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZToiIDw8IHN0eWxlIDw8ICIgdG9FbGVt
ZW50c0luRE9NUmFuZ2U6IiA8PCB0b1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSAg
PDwgIlxuIjsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250
cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVH
QVRFOiBzaG91bGRBcHBseVN0eWxlOiIpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoc3R5bGVEZWNUb1N0cihzdHlsZSkpOworICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIiB0b0Vs
ZW1lbnRzSW5ET01SYW5nZToiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0
cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBy
YW5nZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigp
LT5hcHBlbmQoIlxuIik7CisgICAgfQogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKQEAg
LTEwNjAsOCArMTE1NCwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQmVnaW5FZGl0
aW5nCiAgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91
dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQmVnaW5FZGl0aW5nOiIgPDwgbm90aWZpY2F0aW9uTmFtZSA8PCAiXG4iOworICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxk
RHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRC
ZWdpbkVkaXRpbmc6Iik7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsK
KyAgICB9CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKFdLU3Ry
aW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCkBAIC0xMDY5LDggKzExNjYsMTEgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcoVwogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3Mo
KSA8PCAiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6IiA8PCBub3RpZmlj
YXRpb25OYW1lIDw8ICJcbiI7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlv
dXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiRURJ
VElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6Iik7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dURlN0cmluZyhub3Rp
ZmljYXRpb25OYW1lKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdC
dWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKKyAgICB9CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKQEAgLTEwNzgsOCAr
MTE3OCwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3RyCiAgICAg
aWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250
cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hh
bmdlOiIgPDwgbm90aWZpY2F0aW9uTmFtZSA8PCAiXG4iOworICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkgeworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iik7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0b1dU
RlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiXG4iKTsKKyAgICB9CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZpY2F0
aW9uTmFtZSkKQEAgLTEwODcsMjIgKzExOTAsMjUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZENoYW5nZVNlbGVjdAogICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBE
RUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiIDw8IG5vdGlmaWNhdGlvbk5hbWUg
PDwgIlxuIjsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250
cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJFRElUSU5HIERFTEVH
QVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIpOworICAgICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0
aW9uTmFtZSkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRl
cigpLT5hcHBlbmQoIlxuIik7CisgICAgfQogfQogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQogYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnN1cHBvcnRzRnVsbFNjcmVlbihXS0J1bmRsZVBh
Z2VSZWYgcGFnZVJlZiwgV0tGdWxsU2NyZWVuS2V5Ym9hcmRSZXF1ZXN0VHlwZSByZXF1ZXN0VHlw
ZSkKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJzdXBwb3J0c0Z1bGxTY3JlZW4oKSA9PSB0cnVlXG4i
OworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQoInN1cHBvcnRzRnVsbFNjcmVlbigpID09IHRydWVcbiIpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChX
S0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRSZWYp
CiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgpXG4iOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQo
ImVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoKVxuIik7CiAgICAgV0tCdW5kbGVQYWdlV2lsbEVu
dGVyRnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICBXS0J1bmRsZVBhZ2VEaWRFbnRlckZ1bGxTY3Jl
ZW4ocGFnZVJlZik7CiB9CkBAIC0xMTEwLDcgKzEyMTYsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZW50ZXJGdWxsU2NyZWVuCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZU5vZGVIYW5k
bGVSZWYgZWxlbWVudFJlZikKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxh
eW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJleGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQoKVxuIjsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCJleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoKVxuIik7CiAgICAgV0tC
dW5kbGVQYWdlV2lsbEV4aXRGdWxsU2NyZWVuKHBhZ2VSZWYpOwogICAgIFdLQnVuZGxlUGFnZURp
ZEV4aXRGdWxsU2NyZWVuKHBhZ2VSZWYpOwogfQpAQCAtMTExOCwxMyArMTIyNCwxMyBAQCB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5GCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6YmVnYW5FbnRlckZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmLCBXS1JlY3QsIFdLUmVj
dCkKIHsKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9s
bGVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJiZWdhbkVudGVyRnVsbFNjcmVlbigpXG4iOworICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoImJl
Z2FuRW50ZXJGdWxsU2NyZWVuKClcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
YmVnYW5FeGl0RnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYsIFdLUmVjdCwgV0tSZWN0KQogewog
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+
c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm9zKCkgPDwgImJlZ2FuRXhpdEZ1bGxTY3JlZW4oKVxuIjsKKyAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCJiZWdhbkV4aXRG
dWxsU2NyZWVuKClcbiIpOwogfQogI2VuZGlmCiAKQEAgLTExMzcsMzMgKzEyNDMsMzcgQEAgc3Rh
dGljIHZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdEl0ZW0oV0tCdQogewogICAgIHVuc2lnbmVkIGNv
bHVtbiA9IDA7CiAgICAgaWYgKGlzQ3VycmVudEl0ZW0pIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm9zKCkgPDwgImN1cnItPiI7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiY3Vyci0+Iik7CiAgICAgICAgIGNvbHVt
biA9IDY7CiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IGNvbHVtbjsgaSA8IGluZGVudDsg
aSsrKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAnICc7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgnICcp
OwogCi0gICAgc3RyaW5nIHVybCA9IHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGFkb3B0
V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChpdGVtKSkuZ2V0KCkpKSk7Cisg
ICAgV1RGOjpTdHJpbmcgdXJsID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmco
YWRvcHRXSyhXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5VVJMKGl0ZW0pKS5nZXQoKSkp
KTsKICAgICBpZiAoaGFzUHJlZml4KHVybCwgImZpbGU6IikpIHsKLSAgICAgICAgc3RyaW5nIGRp
cmVjdG9yeU5hbWUgPSAiL0xheW91dFRlc3RzLyI7CisgICAgICAgIFdURjo6U3RyaW5nIGRpcmVj
dG9yeU5hbWUgPSAiL0xheW91dFRlc3RzLyI7CiAgICAgICAgIHNpemVfdCBzdGFydCA9IHVybC5m
aW5kKGRpcmVjdG9yeU5hbWUpOwotICAgICAgICBpZiAoc3RhcnQgPT0gc3RyaW5nOjpucG9zKQor
ICAgICAgICBpZiAoc3RhcnQgPT0gV1RGOjpub3RGb3VuZCkKICAgICAgICAgICAgIHN0YXJ0ID0g
MDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhcnQgKz0gZGlyZWN0b3J5TmFtZS5zaXpl
KCk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICIoZmlsZSB0ZXN0
KToiIDw8IHVybC5zdWJzdHIoc3RhcnQpOworICAgICAgICAgICAgc3RhcnQgKz0gZGlyZWN0b3J5
TmFtZS5sZW5ndGgoKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnN0cmluZ0J1
aWxkZXIoKS0+YXBwZW5kKCIoZmlsZSB0ZXN0KToiKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKHVybC5zdWJzdHJpbmcoc3RhcnQpKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgdXJs
OworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBl
bmQodXJsKTsKIAotICAgIHN0cmluZyB0YXJnZXQgPSB0b1NURChhZG9wdFdLKFdLQnVuZGxlQmFj
a0ZvcndhcmRMaXN0SXRlbUNvcHlUYXJnZXQoaXRlbSkpKTsKLSAgICBpZiAodGFyZ2V0Lmxlbmd0
aCgpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiIChpbiBmcmFt
ZSBcIiIgPDwgdGFyZ2V0IDw8ICJcIikiOworICAgIFdURjo6U3RyaW5nIHRhcmdldCA9IHRvV1RG
U3RyaW5nKGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtQ29weVRhcmdldChpdGVt
KSkpOworICAgIGlmICh0YXJnZXQubGVuZ3RoKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnN0cmluZ0J1aWxkZXIoKS0+YXBwZW5kKCIgKGluIGZyYW1lIFwiIik7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCh0YXJn
ZXQpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5h
cHBlbmQoIlwiKSIpOworICAgIH0KIAogICAgIC8vIEZJWE1FOiBOZWVkIFdLQmFja0ZvcndhcmRM
aXN0SXRlbUlzVGFyZ2V0SXRlbS4KICAgICBpZiAoV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
SXNUYXJnZXRJdGVtKGl0ZW0pKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3Mo
KSA8PCAiICAqKm5hdiB0YXJnZXQqKiI7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zdHJpbmdCdWlsZGVyKCktPmFwcGVuZCgiICAqKm5hdiB0YXJnZXQqKiIpOwogCi0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgJ1xuJzsKKyAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoJ1xuJyk7CiAKICAgICBpZiAoV0tSZXRh
aW5QdHI8V0tBcnJheVJlZj4ga2lkcyA9IGFkb3B0V0soV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJ
dGVtQ29weUNoaWxkcmVuKGl0ZW0pKSkgewogICAgICAgICAvLyBTb3J0IHRvIGVsaW1pbmF0ZSBh
cmJpdHJhcnkgcmVzdWx0IG9yZGVyaW5nIHdoaWNoIGRlZmVhdHMgcmVwcm9kdWNpYmxlIHRlc3Rp
bmcuCkBAIC0xMTc5LDcgKzEyODksNyBAQCBzdGF0aWMgdm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0
SXRlbShXS0J1CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wQmFja0ZvcndhcmRMaXN0
KCkKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiXG49PT09PT09PT09
PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9PT09PT09PT09PT09PVxuIjsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQoIlxuPT09PT09PT09PT09PT0g
QmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiIpOwogCiAgICAgV0tCdW5kbGVCYWNr
Rm9yd2FyZExpc3RSZWYgbGlzdCA9IFdLQnVuZGxlUGFnZUdldEJhY2tGb3J3YXJkTGlzdChtX3Bh
Z2UpOwogCkBAIC0xMjEwLDcgKzEzMjAsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVt
cEJhY2tGb3J3YXJkCiAgICAgZm9yIChpbnQgaSA9IGl0ZW1zVG9QcmludC5zaXplKCkgLSAxOyBp
ID49IDA7IGktLSkKICAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbXNUb1ByaW50
W2ldLmdldCgpLCA4LCBpID09IGN1cnJlbnRJdGVtSW5kZXgpOwogCi0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm9zKCkgPDwgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09XG4iOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWls
ZGVyKCktPmFwcGVuZCgiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT1cbiIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMTA4NzkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKQEAgLTE1
OCw3ICsxNTksOCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0VG9EdW1wV2F0CiB7
CiAgICAgaW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCk7CiAgICAgY29uc3QgY2hh
ciogbWVzc2FnZSA9ICJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBmb3Igbm90aWZ5RG9uZSB0byBi
ZSBjYWxsZWRcbiI7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgbWVzc2Fn
ZSA8PCAiXG4iOworICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zdHJpbmdCdWlsZGVyKCkt
PmFwcGVuZChtZXNzYWdlKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc3RyaW5nQnVp
bGRlcigpLT5hcHBlbmQoIlxuIik7CiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmRvbmUo
KTsKIH0KIApAQCAtNTI3LDcgKzUyOSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFNob3VsZFN0YXkKIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZpZ3VyYXRp
b25Gb3JWaWV3cG9ydChpbnQgZGV2aWNlRFBJLCBpbnQgZGV2aWNlV2lkdGgsIGludCBkZXZpY2VI
ZWlnaHQsIGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKIHsKLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCB0b1NURChhZG9wdFdLKFdLQnVuZGxlUGFn
ZVZpZXdwb3J0Q29uZmlndXJhdGlvbkFzVGV4dChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZSgpLT5wYWdlKCksIGRldmljZURQSSwgZGV2aWNlV2lkdGgsIGRldmljZUhlaWdodCwgYXZhaWxh
YmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCkpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc3RyaW5nQnVpbGRlcigpLT5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZVBh
Z2VWaWV3cG9ydENvbmZpZ3VyYXRpb25Bc1RleHQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBh
Z2UoKS0+cGFnZSgpLCBkZXZpY2VEUEksIGRldmljZVdpZHRoLCBkZXZpY2VIZWlnaHQsIGF2YWls
YWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQpKSkpOwogfQogCiB0eXBlZGVmIFdURjo6SGFzaE1h
cDx1bnNpZ25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7CkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTEwODc5KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTYzNSw2ICs2MzUsNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRp
b247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDNzkzNDI3MTE4RjdEQUYwMDVF
QThFMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0gewor
CQkJCURFQlVHX0RFRklORVMgPSAiJChERUJVR19ERUZJTkVTX2RlYnVnKSI7CiAJCQkJR0NDX09Q
VElNSVpBVElPTl9MRVZFTCA9IDA7CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>