<?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>235857</bug_id>
          
          <creation_ts>2022-01-28 23:46:24 -0800</creation_ts>
          <short_desc>Add PushService</short_desc>
          <delta_ts>2022-02-14 11:25:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>234194</dependson>
    
    <dependson>235855</dependson>
    
    <dependson>235856</dependson>
    
    <dependson>236264</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ben Nham">nham</reporter>
          <assigned_to name="Ben Nham">nham</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dvpdiner2</cc>
    
    <cc>hypertree</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>nham</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1835266</commentid>
    <comment_count>0</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-01-28 23:46:24 -0800</bug_when>
    <thetext>Add PushService</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835267</commentid>
    <comment_count>1</comment_count>
      <attachid>450321</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-01-28 23:48:28 -0800</bug_when>
    <thetext>Created attachment 450321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835268</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-28 23:50:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/88219139&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835436</commentid>
    <comment_count>3</comment_count>
      <attachid>450382</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-01-30 22:52:26 -0800</bug_when>
    <thetext>Created attachment 450382
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835692</commentid>
    <comment_count>4</comment_count>
      <attachid>450455</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-01-31 13:49:31 -0800</bug_when>
    <thetext>Created attachment 450455
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836148</commentid>
    <comment_count>5</comment_count>
      <attachid>450567</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-01 14:21:47 -0800</bug_when>
    <thetext>Created attachment 450567
add tests for different payload types</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837799</commentid>
    <comment_count>6</comment_count>
      <attachid>451003</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-05 15:31:13 -0800</bug_when>
    <thetext>Created attachment 451003
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837808</commentid>
    <comment_count>7</comment_count>
      <attachid>451008</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-05 16:00:44 -0800</bug_when>
    <thetext>Created attachment 451008
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838252</commentid>
    <comment_count>8</comment_count>
      <attachid>451008</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2022-02-07 11:05:03 -0800</bug_when>
    <thetext>Comment on attachment 451008
rebase

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

&gt; Source/WebKit/Shared/Cocoa/WebPushMessageCocoa.mm:43
&gt; +    BOOL isNull = pushData == [NSNull null];

You can find example of both in our code base, but it&apos;s much more proper to do:
[pushData isEqual:[NSNull null]];</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838275</commentid>
    <comment_count>9</comment_count>
      <attachid>451131</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-07 11:56:41 -0800</bug_when>
    <thetext>Created attachment 451131
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838278</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-07 11:57:45 -0800</bug_when>
    <thetext>ChangeLog entry in Source/WTF/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838285</commentid>
    <comment_count>11</comment_count>
      <attachid>451134</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-07 12:05:55 -0800</bug_when>
    <thetext>Created attachment 451134
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838317</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-07 13:12:03 -0800</bug_when>
    <thetext>Patch 451134 does not build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838324</commentid>
    <comment_count>13</comment_count>
      <attachid>451144</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-07 13:19:58 -0800</bug_when>
    <thetext>Created attachment 451144
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838351</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-07 14:08:21 -0800</bug_when>
    <thetext>Committed r289239 (246923@main): &lt;https://commits.webkit.org/246923@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 451144.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838387</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2022-02-07 15:10:56 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 236264</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838452</commentid>
    <comment_count>16</comment_count>
      <attachid>451182</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2022-02-07 17:22:20 -0800</bug_when>
    <thetext>Created attachment 451182
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838484</commentid>
    <comment_count>17</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-07 18:59:44 -0800</bug_when>
    <thetext>Committed r289353 (246941@main): &lt;https://commits.webkit.org/246941@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 451182.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841336</commentid>
    <comment_count>18</comment_count>
      <attachid>451182</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2022-02-14 11:25:03 -0800</bug_when>
    <thetext>Comment on attachment 451182
Patch for landing

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

&gt; Source/WebKit/webpushd/WebPushDaemon.mm:621
&gt; +    // FIXME

You may want to include more details in this fixme for future readability.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450321</attachid>
            <date>2022-01-28 23:48:28 -0800</date>
            <delta_ts>2022-01-30 22:52:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235857-20220128234826.patch</filename>
            <type>text/plain</type>
            <size>88289</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU0ZjdlODhlN2NkMTU1ZTFkZmE1ZjQx
YjIwMzJkY2I1MTVjZGY3YWEuLmIyY2MyNWRlNTVhYmYxYThmMDU4OTk5N2Y4M2ZjZWNkOTIzZTI1
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgUHVzaEFQSUVuYWJsZWQgdG8gV2ViS2l0TGVn
YWN5IHNvIHdlIGNhbiBlbmFibGUgaXQgb24gaW4gQVBJIHRlc3RzIHZpYSBfV0tFeHBlcmltZW50
YWxGZWF0dXJlLgorCisgICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sOgorCiAyMDIyLTAxLTI4ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIEltcG9ydCBBUFNDb25uZWN0aW9uLXJlbGF0ZWQgU1BJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDRjZGIwZTlkOTZmNjJmYmY0NGRkMjY2YzY4MDgxMjdiZTY2MDQyN2IuLjNkMmJlNmFmYTc5
YzFmMzlkYWQ4MzhjNTI3NmNmNjIyMTU5ZWM1NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAK
KzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1
c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGFkZHMgUHVzaFNlcnZpY2UgdG8gd2VicHVzaGQuIEl0IGhhbmRsZXMgcmVxdWVzdHMg
dG8gY3JlYXRlLCByZW1vdmUsIGFuZCBnZXQgcHVzaAorICAgICAgICBzdWJzY3JpcHRpb25zLiBJ
dCBhbHNvIGRlY3J5cHRzIGluY29taW5nIHB1c2hlcyBhbmQgcGFzcyB0aGVtIGJhY2sgdG8gdGhl
IFVJIHByb2Nlc3MgdmlhIHRoZQorICAgICAgICBleGlzdGluZyBtYWNoaW5lcnkgaW4gV2ViUHVz
aERhZW1vbi4KKworICAgICAgICBQdXNoU2VydmljZSBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGgg
dHdvIG9iamVjdHM6CisKKyAgICAgICAgMS4gUHVzaFNlcnZpY2VDb25uZWN0aW9uOiB0aGlzIGNy
ZWF0ZXMgYW5kIHJlbW92ZXMgcHVzaCBzdWJzY3JpcHRpb25zIGZyb20gdGhlIHB1c2ggc2VydmVy
LgorICAgICAgICAgICBJdCBhbHNvIHJlY2VpdmVzIGluY29taW5nIHB1c2hlcyBmcm9tIHRoZSBw
dXNoIHNlcnZlci4KKyAgICAgICAgMi4gUHVzaERhdGFiYXNlOiB0aGlzIHBlcnNpc3RzIHB1c2gg
c3Vic2NyaXB0aW9ucyB0byBkaXNrLgorCisgICAgICAgIFNldmVyYWwgdGhpbmdzIGFyZSBub3Qg
eWV0IGltcGxlbWVudGVkOyBmb3IgaW5zdGFuY2UsIHdlIGN1cnJlbnRseSBhbHdheXMgZ3JhbnQg
YSBwYWdlIHRoZQorICAgICAgICBwZXJtaXNzaW9uIHRvIHJlY2VpdmUgcHVzaGVzLiBUaGlzIHdp
bGwgYmUgZml4ZWQgaW4gZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBuZXcg
QVBJIHRlc3RzLiBUaGUgY3VycmVudCB0ZXN0cyB1c2UgYSBGYWtlUHVzaFNlcnZpY2VDb25uZWN0
aW9uIHRoYXQgdmVuZHMKKyAgICAgICAgc3Vic2NyaXB0aW9uIHdpdGggZml4ZWQgZGF0YSwgYnV0
IHRoaXMgY2FuIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBTaGFyZWQv
QVBJL0NvY29hL1dLTWFpbi5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1t
OgorICAgICAgICAoV0tXZWJQdXNoRGFlbW9uTWFpbik6CisgICAgICAgICogU2hhcmVkL1dlYlB1
c2hEYWVtb25Db25zdGFudHMuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHVzaEQ6Om1lc3NhZ2VU
eXBlU2VuZHNSZXBseSk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogd2VicHVzaGQvRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOgorICAg
ICAgICAqIHdlYnB1c2hkL0Zha2VQdXNoU2VydmljZUNvbm5lY3Rpb24ubW06CisgICAgICAgIChX
ZWJQdXNoRDo6RmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKToK
KyAgICAgICAgKFdlYlB1c2hEOjpGYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdWJzY3JpYmUp
OgorICAgICAgICAoV2ViUHVzaEQ6OkZha2VQdXNoU2VydmljZUNvbm5lY3Rpb246OnVuc3Vic2Ny
aWJlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6
UHVzaFNlcnZpY2U6OmRhdGFiYXNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6
ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZS5t
bTogQWRkZWQuCisgICAgICAgIChXZWJQdXNoRDo6dXBkYXRlVG9waWNMaXN0cyk6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVz
aFNlcnZpY2U6OmNyZWF0ZUZha2VTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vy
dmljZTo6UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6Om1ha2VQdXNoU3Vic2NyaXB0
aW9uRnJvbVJlY29yZCk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1c2hUb3BpYyk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0OjpidW5kbGVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OnNjb3BlKToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OlB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1w
bCk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6ZnVsZmlsbCk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6cmVqZWN0KToKKyAg
ICAgICAgKFdlYlB1c2hEOjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpHZXRTdWJzY3JpcHRpb25S
ZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpzdGFy
dEludGVybmFsKToKKyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjpTdWJzY3Jp
YmVSZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjpzdGFydElt
cGwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OmF0dGVtcHRUb1JlY292
ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcik6CisgICAgICAgIChXZWJQdXNoRDo6VW5z
dWJzY3JpYmVSZXF1ZXN0OjpVbnN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6
OlVuc3Vic2NyaWJlUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJQdXNoRDo6
UHVzaFNlcnZpY2U6OmVucXVldWVQdXNoU2VydmljZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVz
aEQ6OlB1c2hTZXJ2aWNlOjpmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAgIChX
ZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmdldFN1YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnN1YnNjcmliZSk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChX
ZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnVuc3Vic2NyaWJlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
UHVzaEQ6Om1ha2VSYXdQdXNoTWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZp
Y2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZSk6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLmg6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVD
bGllbnRLZXlzKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmg6CisgICAgICAg
ICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hEOjpNZXNzYWdl
SW5mbzo6aW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBseSk6
CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdGFydEZha2VQdXNoU2VydmljZSk6CisgICAg
ICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdGFydFB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1
c2hEOjpEYWVtb246OnNldFB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OnJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9u
OjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246Omlu
amVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJQdXNoRDo6
RGFlbW9uOjpoYW5kbGVJbmNvbWluZ1B1c2gpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6
Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcyk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdWJz
Y3JpYmVUb1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnVuc3Vic2Ny
aWJlRnJvbVB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OmdldFB1c2hT
dWJzY3JpcHRpb24pOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0UHVzaFBlcm1pc3Np
b25TdGF0ZSk6CisgICAgICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaDoKKyAgICAg
ICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIHdlYnB1c2hkL3dlYnB1c2hkLmNwcDoKKyAgICAg
ICAgKG1haW4pOgorCiAyMDIyLTAxLTI4ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIEltcG9ydCBBUFNDb25uZWN0aW9uLXJlbGF0ZWQgU1BJCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFt
bCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1l
bnRhbC55YW1sCmluZGV4IDVjZDcyMTY2YWRjODhkMTQyYzk5OWQzNzcwZjNlMjNhMTYyYjNlNmMu
LjNmOWQ4OGMzM2ExN2M3N2U5OTc1OTcyMjI3NGM5YzAxNzczOGI1NjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55
YW1sCisrKyBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4
cGVyaW1lbnRhbC55YW1sCkBAIC0xMTEwLDYgKzExMTAsOCBAQCBQdXNoQVBJRW5hYmxlZDoKICAg
ZGVmYXVsdFZhbHVlOgogICAgIFdlYkNvcmU6CiAgICAgICBkZWZhdWx0OiBmYWxzZQorICAgIFdl
YktpdExlZ2FjeToKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViS2l0OgogICAgICAgZGVm
YXVsdDogZmFsc2UKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29h
L1dLTWFpbi5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5oCmluZGV4
IDMwMzc4Zjg1NTNhZmY1YzNkYTM0ZmI5OGYyMzdiYWUxNTY5ODAzYTIuLjljZjg0ZDI3NDRmYTdk
ZWJmYjA3MWRmMTIzZWQxMjY5YTQ3ZjUyNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0FQSS9Db2NvYS9XS01haW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29j
b2EvV0tNYWluLmgKQEAgLTM0LDcgKzM0LDcgQEAgZXh0ZXJuICJDIiB7CiAKIFdLX0VYUE9SVCBp
bnQgV0tYUENTZXJ2aWNlTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwogV0tfRVhQT1JUIGludCBXS0FkQXR0
cmlidXRpb25EYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKLVdLX0VYUE9SVCBp
bnQgV0tXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitXS19FWFBP
UlQgaW50IFdLV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAjaWZkZWYg
X19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2Nv
YS9XS01haW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tCmlu
ZGV4IGRlMmU5ZjdhNWJkNTVmOTFkZTg3ZTFhOTNhYWY4OTA3M2RmYmZkNDEuLjk3ZDc4NWY2OWYy
NjFhYWZjZTI1ZDhkOTE3NjcxNDRmMjNlOWUwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9Db2NvYS9XS01haW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJ
L0NvY29hL1dLTWFpbi5tbQpAQCAtNDAsNyArNDAsNyBAQCBpbnQgV0tBZEF0dHJpYnV0aW9uRGFl
bW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCiAgICAgcmV0dXJuIFdlYktpdDo6
UENNRGFlbW9uTWFpbihhcmdjLCBhcmd2KTsKIH0KIAotaW50IFdLV2ViUHVzaERhZW1vbk1haW4o
aW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KQoraW50IFdLV2ViUHVzaERhZW1vbk1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQogewogICAgIHJldHVybiBXZWJLaXQ6OldlYlB1c2hEYWVtb25N
YWluKGFyZ2MsIGFyZ3YpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
UHVzaERhZW1vbkNvbnN0YW50cy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1v
bkNvbnN0YW50cy5oCmluZGV4IGZjNDdkYzRmMTI3NDg3MjRiMWI1N2M1NzJjMTQ5YjM4NzhlYzBh
NWIuLmYzZjdiYmU2M2Y0ZWQzNWVkY2YzZTJhYWFkOTNmYjNlNDkyOWZmOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKQEAgLTQzLDYgKzQzLDcg
QEAgZW51bSBjbGFzcyBNZXNzYWdlVHlwZSA6IHVpbnQ4X3QgewogICAgIFNldERlYnVnTW9kZUlz
RW5hYmxlZCwKICAgICBVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbiwKICAgICBJbmplY3RQ
dXNoTWVzc2FnZUZvclRlc3RpbmcsCisgICAgSW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JU
ZXN0aW5nLAogICAgIEdldFBlbmRpbmdQdXNoTWVzc2FnZXMsCiAgICAgU3Vic2NyaWJlVG9QdXNo
U2VydmljZSwKICAgICBVbnN1YnNjcmliZUZyb21QdXNoU2VydmljZSwKQEAgLTU5LDYgKzYwLDcg
QEAgaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VU
eXBlKQogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlcXVlc3RTeXN0ZW1Ob3RpZmljYXRpb25QZXJt
aXNzaW9uOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVzc2FnZXM6CiAg
ICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOgorICAgIGNh
c2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKICAg
ICBjYXNlIE1lc3NhZ2VUeXBlOjpTdWJzY3JpYmVUb1B1c2hTZXJ2aWNlOgogICAgIGNhc2UgTWVz
c2FnZVR5cGU6OlVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlOgogICAgIGNhc2UgTWVzc2FnZVR5
cGU6OkdldFB1c2hTdWJzY3JpcHRpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZGEyNTUzZGFiNTk2MDc3MTI1OGNkMGEyNTU1M2Y2
ZWQwNzg0NDZhLi43M2I5NDEwNzQ0ZWJjNWM3YmFhZWQyNjcxNDZmYTE3YjBiZWExOWExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk0
Myw3ICs5NDMsNyBAQAogCQk1MTI5MzVFNDEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMjkzNUUyMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRs
ZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oICovOyB9OwogCQk1MTI5RUIxMjIzRDBERTdCMDBBRjFD
RDcgLyogQ29udGVudFdvcmxkU2hhcmVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTI5RUIxMTIzRDBERTc4MDBBRjFDRDcgLyogQ29udGVudFdvcmxk
U2hhcmVkLmggKi87IH07CiAJCTUxMkNENjk4MjcyMUVGQzgwMEY3RjhFQyAvKiBXZWJQdXNoRGFl
bW9uQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEyQ0Q2OTcyNzIxRUZDMzAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9u
LmggKi87IH07Ci0JCTUxMkNENjlBMjcyMUYwQTkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29u
c3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTJDRDY5OTI3MjFGMDQ5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oICovOyB9
OworCQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyQ0Q2OTky
NzIxRjA0OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTJFMzRFNTEzMEI0RDA1MDBB
QkQxOUEgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QTMzQjQxMzBCMzA4QzAwRjgwQ0I1IC8qIFdL
QXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MTJFQ0MzNTI3MTk2QURCMDAwODlCNjYgLyogUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0I5MzBGRTI2RTgwMjE2MDAzMkIxQzAgLyogUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRDb25uZWN0aW9uLmggKi87IH07CiAJCTUxMkY1ODk3MTJBODgzODgwMDYyOTUz
MCAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJGNTg4RjEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oICovOyB9OwpAQCAtMTk4OCw2ICsxOTg4LDggQEAK
IAkJRTVCRUY2ODIyMTMwQzQ4MDAwRjMxMTExIC8qIFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9w
ZG93bklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTVCRUY2ODAyMTMwQzQ3RjAwRjMxMTExIC8qIFdlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93
bklPUy5oICovOyB9OwogCQlFNUNCMDdEQzIwRTE2NzhGMDAyMkMxODMgLyogV0tGb3JtQ29sb3JD
b250cm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NUNCMDdEQTIwRTE2NzhGMDAyMkMxODMgLyogV0tGb3JtQ29sb3JDb250cm9sLmggKi87IH07CiAJ
CUU1REVGQTY4MjZGOEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQSS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVERUZBNjcyNkY4RjQyNjAwQUI2OERC
IC8qIFBob3Rvc1VJU1BJLmggKi87IH07CisJCUVCMjc0NDE3MjdBM0MwMjkwMDgwQTgwRiAvKiBQ
dXNoU2VydmljZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEVCMjc0NDE1MjdBM0MwMjgwMDgwQTgwRiAvKiBQdXNoU2VydmljZS5tbSAqLzsgfTsKKwkJ
RUIyNzQ0MTgyN0EzQzAyOTAwODBBODBGIC8qIFB1c2hTZXJ2aWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjI3NDQxNjI3QTNDMDI5MDA4MEE4MEYg
LyogUHVzaFNlcnZpY2UuaCAqLzsgfTsKIAkJRUI5NjQ4QzYyN0EzQkQyNDAwNkFCNjcwIC8qIEFw
cGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRUI5NjQ4QzAyN0EzQkQyMjAwNkFCNjcwIC8qIEFwcGxlUHVzaFNl
cnZpY2VDb25uZWN0aW9uLm1tICovOyB9OwogCQlFQjk2NDhDNzI3QTNCRDI0MDA2QUI2NzAgLyog
RmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRUI5NjQ4QzEyN0EzQkQyMzAwNkFCNjcwIC8qIEZha2VQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaCAqLzsgfTsKIAkJRUI5NjQ4QzgyN0EzQkQyNDAwNkFCNjcwIC8qIEFw
cGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFQjk2NDhDMjI3QTNCRDIzMDA2QUI2NzAgLyogQXBwbGVQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaCAqLzsgfTsKQEAgLTY0MjMsNiArNjQyNSw4IEBACiAJCUU1REVGQTY3
MjZGOEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaG90b3NV
SVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjBEMzEyRDI3NUFFMTMzMDA4
NjNEOEYgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjBEMzEyRTI3NUFFMTMzMDA4NjNEOEYg
LyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5pb3MucGxpc3QgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBs
aXN0LnhtbDsgcGF0aCA9IGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQuaW9zLnBsaXN0OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjI3NDQxNTI3QTNDMDI4MDA4MEE4MEYgLyogUHVz
aFNlcnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQdXNo
U2VydmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUIyNzQ0MTYyN0EzQzAy
OTAwODBBODBGIC8qIFB1c2hTZXJ2aWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFB1c2hTZXJ2aWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCOTY0OEMw
MjdBM0JEMjIwMDZBQjY3MCAvKiBBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjk2NDhDMTI3QTNCRDIzMDA2
QUI2NzAgLyogRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUVCOTY0OEMyMjdBM0JEMjMwMDZBQjY3MCAvKiBBcHBsZVB1c2hTZXJ2
aWNlQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBsZVB1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAw
NDAsNiArMTAwNDQsOCBAQAogCQkJCTUxNjBFOTU4Mjc0QzBEODgwMDU2NzM4OCAvKiBQdXNoQXBw
QnVuZGxlLm1tICovLAogCQkJCTUxRjdCQjc5Mjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50
Q29ubmVjdGlvbi5oICovLAogCQkJCTUxRjdCQjdBMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xp
ZW50Q29ubmVjdGlvbi5tbSAqLywKKwkJCQlFQjI3NDQxNjI3QTNDMDI5MDA4MEE4MEYgLyogUHVz
aFNlcnZpY2UuaCAqLywKKwkJCQlFQjI3NDQxNTI3QTNDMDI4MDA4MEE4MEYgLyogUHVzaFNlcnZp
Y2UubW0gKi8sCiAJCQkJRUI5NjQ4QzQyN0EzQkQyMzAwNkFCNjcwIC8qIFB1c2hTZXJ2aWNlQ29u
bmVjdGlvbi5oICovLAogCQkJCUVCOTY0OEM1MjdBM0JEMjQwMDZBQjY3MCAvKiBQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24ubW0gKi8sCiAJCQkJNTE3QjVGNzcyNzVFOTc5NTAwMkRDMjJEIC8qIHdlYnB1
c2hkLmNwcCAqLywKQEAgLTEzMTg3LDYgKzEzMTkzLDcgQEAKIAkJCQk1MTdCNUY4MTI3NUU5N0I2
MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0Qy
NzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFQjI3NDQxODI3QTNDMDI5MDA4MEE4MEYgLyogUHVzaFNlcnZp
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUVCOTY0OENBMjdBM0JEMjQwMDZBQjY3MCAvKiBQdXNo
U2VydmljZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUExRTY4ODcwMUY2RTJCQUIw
MDcwMDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBDMjI3RTI0
NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTU1MjUsNiArMTU1MzIsNyBAQAogCQkJCTJENTRDMzFCMjEyRjREQTYwMDQ5
QzE3NCAvKiBQcm9jZXNzTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGODIy
NzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
MTdCNUY3QjI3NUU5N0E5MDAyREMyMkQgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gaW4gU291
cmNlcyAqLywKKwkJCQlFQjI3NDQxNzI3QTNDMDI5MDA4MEE4MEYgLyogUHVzaFNlcnZpY2UubW0g
aW4gU291cmNlcyAqLywKIAkJCQlFQjk2NDhDQjI3QTNCRDI0MDA2QUI2NzAgLyogUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyN0YyNDUxMTMwQTAwRUQ2
MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUEwQzIyNUUyNDM1NzVDRDAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5t
bSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9GYWtl
UHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNo
U2VydmljZUNvbm5lY3Rpb24uaAppbmRleCAzOGU4NTViYjQ0MTRkZWIyMjFiZTdhYzBjNDdiYTU4
YjFkYzNkZDE0Li5iNDk5MmFiZmU1YWRiYTFjYjM5NjcwNmU3OGFhYmVhNzUzMTYxMzJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNoU2VydmljZUNvbm5lY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNoU2VydmljZUNvbm5lY3Rpb24u
aApAQCAtMzcsNiArMzcsOCBAQCBwdWJsaWM6CiAgICAgRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlv
bigpOwogICAgIHZpcnR1YWwgfkZha2VQdXNoU2VydmljZUNvbm5lY3Rpb24oKTsKIAorICAgIFdl
YkNvcmU6OlB1c2hDcnlwdG86OkNsaWVudEtleXMgZ2VuZXJhdGVDbGllbnRLZXlzKCkgZmluYWw7
CisKICAgICB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJpbmcmIHRvcGljLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBTdWJzY3JpYmVIYW5kbGVyJiYpIGZpbmFsOwogICAg
IHZvaWQgdW5zdWJzY3JpYmUoY29uc3QgU3RyaW5nJiB0b3BpYywgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiB2YXBpZFB1YmxpY0tleSwgVW5zdWJzY3JpYmVIYW5kbGVyJiYpIGZpbmFsOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNoU2VydmljZUNvbm5lY3Rpb24u
bW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0K
aW5kZXggY2EzMTM3NmVjZGEzYzY1NTI2MjQ5NWQ2NGVlZTA4ODYyOGQyNWNiMi4uYmEzN2FhZWE4
ZTcxNDE3N2JlYjExYjkyZGQ0OGNhMjRmOTRjMGJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9GYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtMjYsNiArMjYsMTAg
QEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlv
bi5oIgogCisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU6OlB1c2hDcnlwdG87CisKIG5hbWVzcGFjZSBXZWJQdXNoRCB7CiAKIEZha2VQdXNoU2Vy
dmljZUNvbm5lY3Rpb246OkZha2VQdXNoU2VydmljZUNvbm5lY3Rpb24oKQpAQCAtMzQsMTQgKzM4
LDMwIEBAIEZha2VQdXNoU2VydmljZUNvbm5lY3Rpb246OkZha2VQdXNoU2VydmljZUNvbm5lY3Rp
b24oKQogCiBGYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp+RmFrZVB1c2hTZXJ2aWNlQ29ubmVj
dGlvbigpID0gZGVmYXVsdDsKIAotdm9pZCBGYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdWJz
Y3JpYmUoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgU3Vic2NyaWJlSGFu
ZGxlciYmIGhhbmRsZXIpCitDbGllbnRLZXlzIEZha2VQdXNoU2VydmljZUNvbm5lY3Rpb246Omdl
bmVyYXRlQ2xpZW50S2V5cygpCiB7Ci0gICAgaGFuZGxlcih7IH0sIFtOU0Vycm9yIGVycm9yV2l0
aERvbWFpbjpOU0NvY29hRXJyb3JEb21haW4gY29kZTpOU0ZlYXR1cmVVbnN1cHBvcnRlZEVycm9y
IHVzZXJJbmZvOm5pbF0pOworICAgIC8vIEV4YW1wbGUgdmFsdWVzIGZyb20gUkZDODI5MSBTZWN0
aW9uIDUuCisgICAgYXV0byBwdWJsaWNLZXkgPSBiYXNlNjRVUkxEZWNvZGUoIkJDVnhzcjdOX2VO
Z1ZScXZIdEQwelRac0VjNi1WVi1KdkxleGhxVXpPUmN4YU96aTYtQVlXWHZUQkhtNGJqeVBqczdW
ZDhwWkdINlNScGtOdG9JQWl3NCJfcykudmFsdWUoKTsKKyAgICBhdXRvIHByaXZhdGVLZXkgPSBi
YXNlNjRVUkxEZWNvZGUoInExZFhwdzNVcFQ1Vk9tdV9jZl92NmloMDdBZW1zM25qeEktSldnTGNN
OTQiX3MpLnZhbHVlKCk7CisgICAgYXV0byBzZWNyZXQgPSBiYXNlNjRVUkxEZWNvZGUoIkJUQlpN
cUhINnI0VHRzN0pfYVNJZ2ciX3MpLnZhbHVlKCk7CisKKyAgICByZXR1cm4gQ2xpZW50S2V5cyB7
IFAyNTZESEtleVBhaXIgeyBXVEZNb3ZlKHB1YmxpY0tleSksIFdURk1vdmUocHJpdmF0ZUtleSkg
fSwgV1RGTW92ZShzZWNyZXQpIH07Cit9CisKK3ZvaWQgRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlv
bjo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQ
dWJsaWNLZXksIFN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIGF1dG8gYWx3YXlz
UmVqZWN0ZWRLZXkgPSBiYXNlNjRVUkxEZWNvZGUoIkJFQXhhVU1vMXM4dGpPUnhKZm5TU3ZXaFli
NHU1MWtnMWhXVDJzXzlncFY3WnhhcjFwRl8yQlE4QW5jdUFkUzJCb0xoTjRxYXh6QnkyQ3dIRThC
QnpXZyJfcykudmFsdWUoKTsKKyAgICBpZiAodmFwaWRQdWJsaWNLZXkgPT0gYWx3YXlzUmVqZWN0
ZWRLZXkpIHsKKyAgICAgICAgaGFuZGxlcih7IH0sIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpA
IldlYlB1c2giIGNvZGU6LTEgdXNlckluZm86bmlsXSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBoYW5kbGVyKEAiaHR0cHM6Ly93ZWJraXQub3JnL3B1c2giLCBuaWwpOwogfQogCiB2
b2lkIEZha2VQdXNoU2VydmljZUNvbm5lY3Rpb246OnVuc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFVuc3Vic2NyaWJlSGFuZGxlciYmIGhhbmRsZXIpCiB7
Ci0gICAgaGFuZGxlcih7IH0sIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpOU0NvY29hRXJyb3JE
b21haW4gY29kZTpOU0ZlYXR1cmVVbnN1cHBvcnRlZEVycm9yIHVzZXJJbmZvOm5pbF0pOworICAg
IGhhbmRsZXIodHJ1ZSwgbmlsKTsKIH0KIAogVmVjdG9yPFN0cmluZz4gRmFrZVB1c2hTZXJ2aWNl
Q29ubmVjdGlvbjo6ZW5hYmxlZFRvcGljcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1B1c2hTZXJ2aWNlLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzU0ODlhZjkwY2JhYjA0MTJkMGNmNzE2YTg5NGM3ZGFjNTg5OTY1NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaApA
QCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQ
dXNoU2VydmljZUNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJQdXNoTWVzc2FnZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaERh
dGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QdXNoU3Vic2NyaXB0aW9uRGF0YS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgor
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJQdXNoRCB7CisKK2NsYXNz
IEdldFN1YnNjcmlwdGlvblJlcXVlc3Q7CitjbGFzcyBQdXNoU2VydmljZVJlcXVlc3Q7CitjbGFz
cyBTdWJzY3JpYmVSZXF1ZXN0OworY2xhc3MgVW5zdWJzY3JpYmVSZXF1ZXN0OworCitjbGFzcyBQ
dXNoU2VydmljZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
dXNpbmcgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0
cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYmKT47CisKKyAg
ICBzdGF0aWMgdm9pZCBjcmVhdGUoY29uc3QgU3RyaW5nJiBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFt
ZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgsIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYm
KT4mJik7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlRmFrZVNlcnZpY2UoSW5jb21pbmdQdXNoTWVz
c2FnZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVz
aFNlcnZpY2U+JiYpPiYmKTsKKyAgICB+UHVzaFNlcnZpY2UoKTsKKworICAgIFB1c2hTZXJ2aWNl
Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbjsgfQorICAgIFdl
YkNvcmU6OlB1c2hEYXRhYmFzZSYgZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlOyB9CisK
KyAgICB2b2lkIGdldFN1YnNjcmlwdGlvbihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0
ZWQ8c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4sIFdlYkNvcmU6
OkV4Y2VwdGlvbkRhdGE+Jik+JiYpOworICAgIHZvaWQgc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYg
YnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3Rl
ZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4m
KT4mJik7CisgICAgdm9pZCB1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlm
aWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6
OkV4Y2VwdGlvbkRhdGE+Jik+JiYpOworCisgICAgdm9pZCBkaWRDb21wbGV0ZUdldFN1YnNjcmlw
dGlvblJlcXVlc3QoR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCYpOworICAgIHZvaWQgZGlkQ29tcGxl
dGVTdWJzY3JpYmVSZXF1ZXN0KFN1YnNjcmliZVJlcXVlc3QmKTsKKyAgICB2b2lkIGRpZENvbXBs
ZXRlVW5zdWJzY3JpYmVSZXF1ZXN0KFVuc3Vic2NyaWJlUmVxdWVzdCYpOworCisgICAgdm9pZCBk
aWRSZWNlaXZlUHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkgKnVzZXJJ
bmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0pOworCitwcml2YXRlOgor
ICAgIFB1c2hTZXJ2aWNlKFVuaXF1ZVJlZjxQdXNoU2VydmljZUNvbm5lY3Rpb24+JiYsIFVuaXF1
ZVJlZjxXZWJDb3JlOjpQdXNoRGF0YWJhc2U+JiYsIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
JiYpOworCisgICAgdXNpbmcgUHVzaFNlcnZpY2VSZXF1ZXN0TWFwID0gSGFzaE1hcDxzdGQ6OnR1
cGxlPFN0cmluZywgU3RyaW5nPiwgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlUmVx
dWVzdD4+PjsKKyAgICB2b2lkIGVucXVldWVQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VS
ZXF1ZXN0TWFwJiwgc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlUmVxdWVzdD4mJik7CisgICAg
dm9pZCBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2VydmljZVJlcXVlc3RNYXAmLCBQ
dXNoU2VydmljZVJlcXVlc3QmKTsKKworICAgIFVuaXF1ZVJlZjxQdXNoU2VydmljZUNvbm5lY3Rp
b24+IG1fY29ubmVjdGlvbjsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6UHVzaERhdGFiYXNlPiBt
X2RhdGFiYXNlOworCisgICAgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIgbV9pbmNvbWluZ1B1
c2hNZXNzYWdlSGFuZGxlcjsKKworICAgIFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCBtX2dldFN1YnNj
cmlwdGlvblJlcXVlc3RzOworICAgIFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCBtX3N1YnNjcmliZVJl
cXVlc3RzOworICAgIFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCBtX3Vuc3Vic2NyaWJlUmVxdWVzdHM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJQdXNoRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNl
cnZpY2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjVkY2E3MDAxNzU0ZDAzYjkzMDRhMDJmNjRmNTk4ZWNkMTEw
NDFmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZp
Y2UubW0KQEAgLTAsMCArMSw1OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlB1c2hTZXJ2aWNlLmgiCisKKyNpbXBvcnQgIkFwcGxlUHVzaFNlcnZpY2VDb25u
ZWN0aW9uLmgiCisjaW1wb3J0ICJGYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgiCisjaW1wb3J0
ICJMb2dnaW5nLmgiCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUHVzaE1lc3NhZ2VDcnlwdG8uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlP
cmlnaW4uaD4KKyNpbXBvcnQgPHd0Zi9PU09iamVjdFB0ci5oPgorI2ltcG9ydCA8d3RmL1dvcmtR
dWV1ZS5oPgorI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9CYXNlNjQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitzdGF0aWMgdm9pZCB1cGRhdGVU
b3BpY0xpc3RzKFB1c2hTZXJ2aWNlQ29ubmVjdGlvbiYgY29ubmVjdGlvbiwgUHVzaERhdGFiYXNl
JiBkYXRhYmFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBkYXRhYmFzZS5nZXRUb3BpY3NCeVdha2VTdGF0ZShbJmNvbm5lY3Rpb24sIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiB0b3BpY01h
cCkgbXV0YWJsZSB7CisgICAgICAgIC8vIEZJWE1FOiBtb3ZlIHRvcGljcyB0byBpZ25vcmVkIGxp
c3QgYmFzZWQgb24gdXNlciBwcmVmZXJlbmNlcy4KKyAgICAgICAgUHVzaFNlcnZpY2VDb25uZWN0
aW9uOjpUb3BpY0xpc3RzIHRvcGljTGlzdHM7CisKKyAgICAgICAgaWYgKGF1dG8gaXQgPSB0b3Bp
Y01hcC5maW5kKFB1c2hXYWtlU3RhdGU6Oldha2luZyk7IGl0ICE9IHRvcGljTWFwLmVuZCgpKQor
ICAgICAgICAgICAgc3RkOjpzd2FwKHRvcGljTGlzdHMuZW5hYmxlZFRvcGljcywgaXQtPnZhbHVl
KTsKKyAgICAgICAgaWYgKGF1dG8gaXQgPSB0b3BpY01hcC5maW5kKFB1c2hXYWtlU3RhdGU6Ok9w
cG9ydHVuaXN0aWMpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKKyAgICAgICAgICAgIHN0ZDo6c3dh
cCh0b3BpY0xpc3RzLm9wcG9ydHVuaXN0aWNUb3BpY3MsIGl0LT52YWx1ZSk7CisgICAgICAgIGlm
IChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpOb25XYWtpbmcpOyBpdCAh
PSB0b3BpY01hcC5lbmQoKSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh0b3BpY0xpc3RzLm5vbldh
a2luZ1RvcGljcywgaXQtPnZhbHVlKTsKKworICAgICAgICBjb25uZWN0aW9uLnNldFRvcGljTGlz
dHMoV1RGTW92ZSh0b3BpY0xpc3RzKSk7CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICB9KTsKK30KKworI2lmIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQ
T1JUKQorCit2b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBpbmNvbWluZ1B1
c2hTZXJ2aWNlTmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgsIEluY29taW5nUHVzaE1l
c3NhZ2VIYW5kbGVyJiYgbWVzc2FnZUhhbmRsZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3Rk
Ojp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKT4mJiBjcmVhdGlvbkhhbmRsZXIpCit7CisgICAg
YXV0byB0cmFuc2FjdGlvbiA9IGFkb3B0T1NPYmplY3Qob3NfdHJhbnNhY3Rpb25fY3JlYXRlKCJj
b20uYXBwbGUud2Via2l0LndlYnB1c2hkLnB1c2gtc2VydmljZS1pbml0IikpOworCisgICAgLy8g
Q3JlYXRlIHRoZSBjb25uZWN0aW9uIEFTQVAgc28gdGhhdCB3ZSBib290c3RyYXBfY2hlY2tfaW4g
dG8gdGhlIHNlcnZpY2UgaW4gYSB0aW1lbHkgbWFubmVyLgorICAgIGF1dG8gY29ubmVjdGlvbiA9
IG1ha2VVbmlxdWVSZWY8QXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24+KGluY29taW5nUHVzaFNl
cnZpY2VOYW1lKTsKKworICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKGRhdGFiYXNlUGF0aCwgW3Ry
YW5zYWN0aW9uID0gV1RGTW92ZSh0cmFuc2FjdGlvbiksIGNvbm5lY3Rpb24gPSBXVEZNb3ZlKGNv
bm5lY3Rpb24pLCBtZXNzYWdlSGFuZGxlciA9IFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBjcmVh
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKGF1dG8mJiBkYXRhYmFzZVJl
c3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghZGF0YWJhc2VSZXN1bHQpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVk
IHdpdGggZGF0YWJhc2UgZXJyb3IiKTsKKyAgICAgICAgICAgIGNyZWF0aW9uSGFuZGxlcihzdGQ6
OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KCkpOworICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSBu
dWxscHRyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBk
YXRhYmFzZSA9IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGRhdGFi
YXNlUmVzdWx0KSk7CisgICAgICAgIFVuaXF1ZVJlZjxQdXNoU2VydmljZT4gc2VydmljZSgqbmV3
IFB1c2hTZXJ2aWNlKFdURk1vdmUoY29ubmVjdGlvbiksIFdURk1vdmUoZGF0YWJhc2UpLCBXVEZN
b3ZlKG1lc3NhZ2VIYW5kbGVyKSkpOworCisgICAgICAgIGF1dG8mIGNvbm5lY3Rpb25SZWYgPSBz
ZXJ2aWNlLT5jb25uZWN0aW9uKCk7CisgICAgICAgIGF1dG8mIGRhdGFiYXNlUmVmID0gc2Vydmlj
ZS0+ZGF0YWJhc2UoKTsKKworICAgICAgICAvLyBPbmx5IHByb3ZpZGUgdGhlIHNlcnZpY2Ugb2Jq
ZWN0IGJhY2sgdG8gdGhlIGNhbGxlciBhZnRlciB3ZSd2ZSBzeW5jZWQgdGhlIHRvcGljIGxpc3Rz
IGluCisgICAgICAgIC8vIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBQdXNoU2VydmljZUNvbm5lY3Rp
b24vQVBTQ29ubmVjdGlvbi4gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd29uJ3QKKyAgICAgICAgLy8g
c2VydmljZSBhbnkgY2FsbHMgdG8gc3Vic2NyaWJlL3Vuc3Vic2NyaWJlL2V0Yy4gdW50aWwgYWZ0
ZXIgdGhlIHRvcGljIGxpc3RzIGFyZSB1cCB0bworICAgICAgICAvLyBkYXRlLCB3aGljaCBBUFND
b25uZWN0aW9uIGNhcmVzIGFib3V0LgorICAgICAgICB1cGRhdGVUb3BpY0xpc3RzKGNvbm5lY3Rp
b25SZWYsIGRhdGFiYXNlUmVmLCBbdHJhbnNhY3Rpb24gPSBXVEZNb3ZlKHRyYW5zYWN0aW9uKSwg
c2VydmljZSA9IFdURk1vdmUoc2VydmljZSksIGNyZWF0aW9uSGFuZGxlciA9IFdURk1vdmUoY3Jl
YXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNyZWF0aW9uSGFuZGxlcihz
ZXJ2aWNlLm1vdmVUb1VuaXF1ZVB0cigpKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uID0gbnVs
bHB0cjsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKyNlbHNlCisKK3ZvaWQgUHVzaFNlcnZp
Y2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBJbmNvbWluZ1B1c2hNZXNz
YWdlSGFuZGxlciYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNo
U2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIGNyZWF0aW9uSGFuZGxlcihz
dGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KCkpOworfQorCisjZW5kaWYgLy8gSEFWRShBUFBM
RV9QVVNIX1NFUlZJQ0VfVVJMX1RPS0VOX1NVUFBPUlQpCisKK3ZvaWQgUHVzaFNlcnZpY2U6OmNy
ZWF0ZUZha2VTZXJ2aWNlKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgbWVzc2FnZUhhbmRs
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYm
KT4mJiBjcmVhdGlvbkhhbmRsZXIpCit7CisgICAgUHVzaERhdGFiYXNlOjpjcmVhdGVJbk1lbW9y
eShbbWVzc2FnZUhhbmRsZXIgPSBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwgY3JlYXRpb25IYW5k
bGVyID0gV1RGTW92ZShjcmVhdGlvbkhhbmRsZXIpXShhdXRvJiYgZGF0YWJhc2VSZXN1bHQpIG11
dGFibGUgeworICAgICAgICBpZiAoIWRhdGFiYXNlUmVzdWx0KSB7CisgICAgICAgICAgICBjcmVh
dGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY29ubmVjdGlvbiA9IG1ha2VVbmlx
dWVSZWY8RmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4oKTsKKyAgICAgICAgYXV0byBkYXRhYmFz
ZSA9IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGRhdGFiYXNlUmVz
dWx0KSk7CisgICAgICAgIGNyZWF0aW9uSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZp
Y2U+KG5ldyBQdXNoU2VydmljZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3ZlKGRhdGFiYXNl
KSwgV1RGTW92ZShtZXNzYWdlSGFuZGxlcikpKSk7CisgICAgfSk7Cit9CisKK1B1c2hTZXJ2aWNl
OjpQdXNoU2VydmljZShVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiYmIHB1c2hTZXJ2
aWNlQ29ubmVjdGlvbiwgVW5pcXVlUmVmPFB1c2hEYXRhYmFzZT4mJiBwdXNoRGF0YWJhc2UsIElu
Y29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgaW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIpCisg
ICAgOiBtX2Nvbm5lY3Rpb24oV1RGTW92ZShwdXNoU2VydmljZUNvbm5lY3Rpb24pKQorICAgICwg
bV9kYXRhYmFzZShXVEZNb3ZlKHB1c2hEYXRhYmFzZSkpCisgICAgLCBtX2luY29taW5nUHVzaE1l
c3NhZ2VIYW5kbGVyKFdURk1vdmUoaW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIpKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIpOworCisgICAgbV9j
b25uZWN0aW9uLT5zdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhbdGhpc10oTlNTdHJpbmcg
KnRvcGljLCBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvKSB7CisgICAgICAgIGRpZFJlY2VpdmVQdXNo
TWVzc2FnZSh0b3BpYywgdXNlckluZm8pOworICAgIH0pOworfQorCitQdXNoU2VydmljZTo6flB1
c2hTZXJ2aWNlKCkgPSBkZWZhdWx0OworCitzdGF0aWMgUHVzaFN1YnNjcmlwdGlvbkRhdGEgbWFr
ZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKFB1c2hSZWNvcmQmJiByZWNvcmQpCit7CisgICAg
cmV0dXJuIFB1c2hTdWJzY3JpcHRpb25EYXRhIHsKKyAgICAgICAgcmVjb3JkLmlkZW50aWZpZXIs
CisgICAgICAgIFdURk1vdmUocmVjb3JkLmVuZHBvaW50KSwKKyAgICAgICAgV1RGTW92ZShyZWNv
cmQuZXhwaXJhdGlvblRpbWUpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5zZXJ2ZXJWQVBJRFB1
YmxpY0tleSksCisgICAgICAgIFdURk1vdmUocmVjb3JkLmNsaWVudFB1YmxpY0tleSksCisgICAg
ICAgIFdURk1vdmUocmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQpCisgICAgfTsKK30KKworc3RhdGlj
IFN0cmluZyBtYWtlUHVzaFRvcGljKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBzY29wZSkKK3sKKyAgICByZXR1cm4gYnVuZGxlSWRlbnRpZmllciArICIgIiAr
IHNjb3BlOworfQorCitjbGFzcyBQdXNoU2VydmljZVJlcXVlc3QgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1YWwgflB1c2hTZXJ2aWNlUmVxdWVzdCgp
ID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29u
c3QgPSAwOworCisgICAgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKCkgeyByZXR1cm4g
bV9idW5kbGVJZGVudGlmaWVyOyB9CisgICAgY29uc3QgU3RyaW5nJiBzY29wZSgpIHsgcmV0dXJu
IG1fc2NvcGU7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7CisKK3Byb3RlY3Rl
ZDoKKyAgICBQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0
cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSkKKyAgICAgICAgOiBt
X3NlcnZpY2Uoc2VydmljZSkKKyAgICAgICAgLCBtX2Nvbm5lY3Rpb24oc2VydmljZS5jb25uZWN0
aW9uKCkpCisgICAgICAgICwgbV9kYXRhYmFzZShzZXJ2aWNlLmRhdGFiYXNlKCkpCisgICAgICAg
ICwgbV9idW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIpCisgICAgICAgICwgbV9zY29w
ZShzY29wZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpID0gMDsK
KworICAgIFB1c2hTZXJ2aWNlJiBtX3NlcnZpY2U7CisgICAgUHVzaFNlcnZpY2VDb25uZWN0aW9u
JiBtX2Nvbm5lY3Rpb247CisgICAgUHVzaERhdGFiYXNlJiBtX2RhdGFiYXNlOworICAgIFN0cmlu
ZyBtX2J1bmRsZUlkZW50aWZpZXI7CisgICAgU3RyaW5nIG1fc2NvcGU7CisgICAgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChQdXNoU2VydmljZVJlcXVlc3QmKT4gbV9jb21wbGV0aW9uSGFuZGxlcjsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGU+CitjbGFzcyBQdXNoU2VydmljZVJl
cXVlc3RJbXBsIDogcHVibGljIFB1c2hTZXJ2aWNlUmVxdWVzdCB7CitwdWJsaWM6CisgICAgdm9p
ZCBzdGFydCgpIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9idW5kbGVJZGVudGlmaWVyLmlz
RW1wdHkoKSB8fCBtX3Njb3BlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmVqZWN0KFdlYkNv
cmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpBYm9ydEVycm9yLCAiSW52YWxpZCBzZW5kZXIi
X3MgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcg
dHJhbnNhY3Rpb25EZXNjcmlwdGlvbiA9IFN0cmluZygiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNo
ZDoiX3MpICsgZGVzY3JpcHRpb24oKSArICI6Il9zICsgbV9idW5kbGVJZGVudGlmaWVyICsgIjoi
X3MgKyBtX3Njb3BlOworICAgICAgICBtX3RyYW5zYWN0aW9uID0gYWRvcHRPU09iamVjdChvc190
cmFuc2FjdGlvbl9jcmVhdGUodHJhbnNhY3Rpb25EZXNjcmlwdGlvbi51dGY4KCkuZGF0YSgpKSk7
CisgICAgICAgIHN0YXJ0SW50ZXJuYWwoKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB1c2lu
ZyBSZXN1bHRIYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxS
ZXN1bHRUeXBlLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPjsKKworICAgIFB1c2hTZXJ2aWNl
UmVxdWVzdEltcGwoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRs
ZXIpCisgICAgICAgIDogUHVzaFNlcnZpY2VSZXF1ZXN0KHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZp
ZXIsIHNjb3BlKQorICAgICAgICAsIG1fcmVzdWx0SGFuZGxlcihXVEZNb3ZlKHJlc3VsdEhhbmRs
ZXIpKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbCgp
ID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydEludGVybmFsKCkgPSAwOworCisg
ICAgdm9pZCBmdWxmaWxsKFJlc3VsdFR5cGUgcmVzdWx0KQorICAgIHsKKyAgICAgICAgbV9yZXN1
bHRIYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgIGZpbmlzaCgpOworICAgIH0KKwor
ICAgIHZvaWQgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmJiBkYXRhKQorICAgIHsKKyAg
ICAgICAgbV9yZXN1bHRIYW5kbGVyKG1ha2VVbmV4cGVjdGVkKFdURk1vdmUoZGF0YSkpKTsKKyAg
ICAgICAgZmluaXNoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdEhhbmRsZXIgbV9y
ZXN1bHRIYW5kbGVyOworICAgIE9TT2JqZWN0UHRyPG9zX3RyYW5zYWN0aW9uX3Q+IG1fdHJhbnNh
Y3Rpb247Cit9OworCitjbGFzcyBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0IDogcHVibGljIFB1c2hT
ZXJ2aWNlUmVxdWVzdEltcGw8c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9u
RGF0YT4+IHsKK3B1YmxpYzoKKyAgICBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KFB1c2hTZXJ2aWNl
JiwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBS
ZXN1bHRIYW5kbGVyJiYpOworICAgIHZpcnR1YWwgfkdldFN1YnNjcmlwdGlvblJlcXVlc3QoKSA9
IGRlZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAgICBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCJfczsgfQorICAgIHZv
aWQgc3RhcnRJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgZmluaXNoKCkgZmluYWwgeyBtX3Nl
cnZpY2UuZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KCp0aGlzKTsgfQorfTsKKwor
R2V0U3Vic2NyaXB0aW9uUmVxdWVzdDo6R2V0U3Vic2NyaXB0aW9uUmVxdWVzdChQdXNoU2Vydmlj
ZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHNjb3BlLCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikKKyAgICA6IFB1c2hTZXJ2aWNl
UmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVz
dWx0SGFuZGxlcikpCit7Cit9CisKKy8vIEltcGxlbWVudHMgdGhlIHdlYnB1c2hkIHNpZGUgb2Yg
UHVzaE1hbmFnZXIuZ2V0U3Vic2NyaXB0aW9uLgordm9pZCBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0
OjpzdGFydEludGVybmFsKCkKK3sKKyAgICBtX2RhdGFiYXNlLmdldFJlY29yZEJ5QnVuZGxlSWRl
bnRpZmllckFuZFNjb3BlKG1fYnVuZGxlSWRlbnRpZmllciwgbV9zY29wZSwgW3RoaXNdKGF1dG8m
JiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ZnVsZmlsbChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiB7IH0p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZnVsZmlsbChtYWtl
UHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92ZSgqcmVzdWx0KSkpOworICAgIH0pOwor
fQorCitjbGFzcyBTdWJzY3JpYmVSZXF1ZXN0IDogcHVibGljIFB1c2hTZXJ2aWNlUmVxdWVzdElt
cGw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+IHsKK3B1YmxpYzoKKyAgICBTdWJzY3Jp
YmVSZXF1ZXN0KFB1c2hTZXJ2aWNlJiwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5
LCBSZXN1bHRIYW5kbGVyJiYpOworICAgIHZpcnR1YWwgflN1YnNjcmliZVJlcXVlc3QoKSA9IGRl
ZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAgICBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24oKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiU3Vic2NyaWJlUmVxdWVzdCJfczsgfQorICAgIHZvaWQgc3RhcnRJ
bnRlcm5hbCgpIGZpbmFsIHsgc3RhcnRJbXBsKElzUmV0cnk6Ok5vKTsgfQorICAgIHZvaWQgZmlu
aXNoKCkgZmluYWwgeyBtX3NlcnZpY2UuZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KCp0aGlz
KTsgfQorCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgSXNSZXRyeSB7IE5vLCBZZXMgfTsKKyAg
ICB2b2lkIHN0YXJ0SW1wbChJc1JldHJ5KTsKKyAgICB2b2lkIGF0dGVtcHRUb1JlY292ZXJGcm9t
VG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcihTdHJpbmcmJik7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fdmFwaWRQdWJsaWNLZXk7Cit9OworCitTdWJzY3JpYmVSZXF1ZXN0OjpTdWJzY3JpYmVSZXF1
ZXN0KFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNL
ZXksIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQorICAgIDogUHVzaFNlcnZpY2VSZXF1
ZXN0SW1wbChzZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RGTW92ZShyZXN1bHRI
YW5kbGVyKSkKKyAgICAsIG1fdmFwaWRQdWJsaWNLZXkodmFwaWRQdWJsaWNLZXkpCit7Cit9CisK
Ky8vIEltcGxlbWVudHMgdGhlIHdlYnB1c2hkIHNpZGUgb2YgUHVzaE1hbmFnZXIuc3Vic2NyaWJl
KCkuCit2b2lkIFN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW1wbChJc1JldHJ5IGlzUmV0cnkpCit7
CisgICAgbV9kYXRhYmFzZS5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShtX2J1
bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUsIFt0aGlzLCBpc1JldHJ5XShhdXRvJiYgcmVzdWx0KSBt
dXRhYmxlIHsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgaWYgKG1fdmFwaWRQ
dWJsaWNLZXkgIT0gcmVzdWx0LT5zZXJ2ZXJWQVBJRFB1YmxpY0tleSkKKyAgICAgICAgICAgICAg
ICByZWplY3QoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVy
cm9yLCAiUHJvdmlkZWQgYXBwbGljYXRpb25TZXJ2ZXJLZXkgZG9lcyBub3QgbWF0Y2ggdGhlIGtl
eSBpbiB0aGUgZXhpc3Rpbmcgc3Vic2NyaXB0aW9uLiJfcyB9KTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBmdWxmaWxsKG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChX
VEZNb3ZlKCpyZXN1bHQpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBhdXRvIHRvcGljID0gbWFrZVB1c2hUb3BpYyhtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2Nv
cGUpOworICAgICAgICBtX2Nvbm5lY3Rpb24uc3Vic2NyaWJlKHRvcGljLCBtX3ZhcGlkUHVibGlj
S2V5LCBbdGhpcywgaXNSZXRyeSwgdG9waWNdKE5TU3RyaW5nICplbmRwb2ludCwgTlNFcnJvciAq
ZXJyb3IpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHVzZSBwb2ludGVyIGNvbXBhcmlzb24gb25jZSBBUFNVUkxUb2tlbkVycm9y
RG9tYWluIGlzIGV4dGVybmVkLgorICAgICAgICAgICAgICAgIGlmIChpc1JldHJ5ID09IElzUmV0
cnk6Ok5vICYmIFtlcnJvci5kb21haW4gaXNFcXVhbFRvU3RyaW5nOkAiQVBTVVJMVG9rZW5FcnJv
ckRvbWFpbiJdICYmIGVycm9yLmNvZGUgPT0gQVBTVVJMVG9rZW5FcnJvckNvZGVUb3BpY0FscmVh
ZHlJbkZpbHRlcikgeworICAgICAgICAgICAgICAgICAgICBhdHRlbXB0VG9SZWNvdmVyRnJvbVRv
cGljQWxyZWFkeUluRmlsdGVyRXJyb3IoV1RGTW92ZSh0b3BpYykpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0coUHVzaCwgIlB1c2hNYW5hZ2VyLnN1YnNjcmliZShidW5kbGVJRDogJXtwdWJsaWN9cywg
c2NvcGU6ICV7c2Vuc2l0aXZlfXMpIGZhaWxlZCB3aXRoIGRvbWFpbjogJXtwdWJsaWN9cyBjb2Rl
OiAlbGxkKSIsIG1fYnVuZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0Zjgo
KS5kYXRhKCksIGVycm9yLmRvbWFpbi5VVEY4U3RyaW5nLCBzdGF0aWNfY2FzdDxpbnQ2NF90Pihl
cnJvci5jb2RlKSk7CisgICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGEgeyBXZWJDb3JlOjpBYm9ydEVycm9yLCAiRmFpbGVkIGR1ZSB0byBpbnRlcm5hbCBzZXJ2aWNl
IGVycm9yIl9zIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYXV0byBjbGllbnRLZXlzID0gbV9zZXJ2aWNlLmNvbm5lY3Rpb24oKS5nZW5l
cmF0ZUNsaWVudEtleXMoKTsKKyAgICAgICAgICAgIFB1c2hSZWNvcmQgcmVjb3JkOworICAgICAg
ICAgICAgcmVjb3JkLmJ1bmRsZUlEID0gbV9idW5kbGVJZGVudGlmaWVyOworICAgICAgICAgICAg
cmVjb3JkLnNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmco
bV9zY29wZSktPmRhdGEoKS50b1N0cmluZygpOworICAgICAgICAgICAgcmVjb3JkLnNjb3BlID0g
bV9zY29wZTsKKyAgICAgICAgICAgIHJlY29yZC5lbmRwb2ludCA9IGVuZHBvaW50OworICAgICAg
ICAgICAgcmVjb3JkLnRvcGljID0gV1RGTW92ZSh0b3BpYyk7CisgICAgICAgICAgICByZWNvcmQu
c2VydmVyVkFQSURQdWJsaWNLZXkgPSBtX3ZhcGlkUHVibGljS2V5OworICAgICAgICAgICAgcmVj
b3JkLmNsaWVudFB1YmxpY0tleSA9IFdURk1vdmUoY2xpZW50S2V5cy5jbGllbnRQMjU2REhLZXlQ
YWlyLnB1YmxpY0tleSk7CisgICAgICAgICAgICByZWNvcmQuY2xpZW50UHJpdmF0ZUtleSA9IFdU
Rk1vdmUoY2xpZW50S2V5cy5jbGllbnRQMjU2REhLZXlQYWlyLnByaXZhdGVLZXkpOworICAgICAg
ICAgICAgcmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQgPSBXVEZNb3ZlKGNsaWVudEtleXMuc2hhcmVk
QXV0aFNlY3JldCk7CisKKyAgICAgICAgICAgIG1fZGF0YWJhc2UuaW5zZXJ0UmVjb3JkKHJlY29y
ZCwgW3RoaXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICgh
cmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoTWFu
YWdlci5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAle3NlbnNpdGl2ZX1z
KSBmYWlsZWQgd2l0aCBkYXRhYmFzZSBlcnJvciIsIG1fYnVuZGxlSWRlbnRpZmllci51dGY4KCku
ZGF0YSgpLCBtX3Njb3BlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZWpl
Y3QoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkFib3J0RXJyb3IsICJGYWlsZWQg
ZHVlIHRvIGludGVybmFsIGRhdGFiYXNlIGVycm9yIl9zIH0pOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IHN1cHBvcnQgcGFydGlhbCB0b3BpYyBsaXN0IHVwZGF0ZXMuCisgICAgICAgICAgICAgICAgdXBk
YXRlVG9waWNMaXN0cyhtX2Nvbm5lY3Rpb24sIG1fZGF0YWJhc2UsIFt0aGlzLCByZWNvcmQgPSBX
VEZNb3ZlKCpyZXN1bHQpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBmdWxmaWxs
KG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChXVEZNb3ZlKHJlY29yZCkpKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
KworLy8gVHJpZXMgdG8gcmVjb3ZlciBmcm9tIGEgdG9waWMgYmVpbmcgbW92ZWQgdG8gdGhlIGds
b2JhbCBwYXVzZWQgZmlsdGVyIChyZGFyOi8vODgxMzkzMzApLgordm9pZCBTdWJzY3JpYmVSZXF1
ZXN0OjphdHRlbXB0VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVyRXJyb3IoU3RyaW5n
JiYgdG9waWMpCit7CisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHRvcGlj
ID0gV1RGTW92ZSh0b3BpYyldKCkgbXV0YWJsZSB7CisgICAgICAgIC8vIFRoaXMgdGFrZXMgb3du
ZXJzaGlwIG9mIHRoZSBwYXVzZWQgdG9waWMgYW5kIHRlbGxzIGFwc2QgdG8gZm9yZ2V0IGFib3V0
IHRoZSB0b3BpYy4KKyAgICAgICAgYXV0byB0b3BpY3MgPSBtX2Nvbm5lY3Rpb24uaWdub3JlZFRv
cGljcygpOworICAgICAgICB0b3BpY3MuYXBwZW5kKHRvcGljKTsKKyAgICAgICAgbV9jb25uZWN0
aW9uLnNldElnbm9yZWRUb3BpY3ModG9waWNzKTsKKyAgICAgICAgdG9waWNzLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3ModG9waWNzKTsKKworICAg
ICAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbdGhpc10oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgIHN0YXJ0SW1wbChJc1JldHJ5OjpZZXMpOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
KworY2xhc3MgVW5zdWJzY3JpYmVSZXF1ZXN0IDogcHVibGljIFB1c2hTZXJ2aWNlUmVxdWVzdElt
cGw8Ym9vbD4geworcHVibGljOgorICAgIFVuc3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYs
IGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUHVz
aFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIFJlc3VsdEhhbmRsZXImJik7CisgICAgdmlydHVhbCB+
VW5zdWJzY3JpYmVSZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlM
aXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlVuc3Vic2NyaWJlUmVx
dWVzdCJfczsgfQorICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgZmlu
aXNoKCkgZmluYWwgeyBtX3NlcnZpY2UuZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QoKnRo
aXMpOyB9CisKK3ByaXZhdGU6CisgICAgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgbV9zdWJz
Y3JpcHRpb25JZGVudGlmaWVyOworfTsKKworVW5zdWJzY3JpYmVSZXF1ZXN0OjpVbnN1YnNjcmli
ZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vi
c2NyaXB0aW9uSWRlbnRpZmllciwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRsZXIpCisgICAg
OiBQdXNoU2VydmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3Bl
LCBXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQorICAgICwgbV9zdWJzY3JpcHRpb25JZGVudGlmaWVy
KHN1YnNjcmlwdGlvbklkZW50aWZpZXIpCit7Cit9CisKKy8vIEltcGxlbWVudHMgdGhlIHdlYnB1
c2hkIHNpZGUgb2YgUHVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZS4KK3ZvaWQgVW5zdWJzY3Jp
YmVSZXF1ZXN0OjpzdGFydEludGVybmFsKCkKK3sKKyAgICBtX2RhdGFiYXNlLmdldFJlY29yZEJ5
QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKG1fYnVuZGxlSWRlbnRpZmllciwgbV9zY29wZSwgW3Ro
aXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIXJlc3VsdCB8fCBtX3N1
YnNjcmlwdGlvbklkZW50aWZpZXIgIT0gcmVzdWx0LT5pZGVudGlmaWVyKSB7CisgICAgICAgICAg
ICBmdWxmaWxsKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gdG9waWMgPSBtYWtlUHVzaFRvcGljKG1fYnVuZGxlSWRlbnRpZmllciwgbV9zY29w
ZSk7CisgICAgICAgIG1fY29ubmVjdGlvbi51bnN1YnNjcmliZSh0b3BpYywgcmVzdWx0LT5zZXJ2
ZXJWQVBJRFB1YmxpY0tleSwgW3RoaXNdKGJvb2wgdW5zdWJzY3JpYmVkLCBOU0Vycm9yICplcnJv
cikgbXV0YWJsZSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgICAgICAvLyBJ
ZiB3ZSBmYWlsIHRvIHVuc3Vic2NyaWJlIGZyb20gYXBzZCwganVzdCBkcm9wIGEgbG9nLiBXZSBz
dGlsbCB3YW50IHRvIGNvbnRpbnVlIGFuZCByZW1vdmUgdGhlIHJlY29yZCBmcm9tIG91ciBkYXRh
YmFzZSBpbiBjYXNlIHRoZXJlJ3MgYSBzdGF0ZSBtaXNtYXRjaCBiZXR3ZWVuIG91ciBkYXRhYmFz
ZSBhbmQgYXBzZCdzIGRhdGFiYXNlLgorICAgICAgICAgICAgaWYgKCF1bnN1YnNjcmliZWQpCisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1c2hTdWJzY3JpcHRpb24udW5zdWJz
Y3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAle3NlbnNpdGl2ZX1zKSBmYWlsZWQg
d2l0aCBkb21haW46ICV7cHVibGljfXMgY29kZTogJWxsZCkiLCBtX2J1bmRsZUlkZW50aWZpZXIu
dXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgpLCBlcnJvci5kb21haW4uVVRGOFN0
cmluZyA/OiAibm9uZSIsIHN0YXRpY19jYXN0PGludDY0X3Q+KGVycm9yLmNvZGUpKTsKKyNlbHNl
CisgICAgICAgICAgICBVTlVTRURfUEFSQU0odW5zdWJzY3JpYmVkKTsKKyAgICAgICAgICAgIFVO
VVNFRF9QQVJBTShlcnJvcik7CisjZW5kaWYKKworICAgICAgICAgICAgbV9kYXRhYmFzZS5yZW1v
dmVSZWNvcmRCeUlkZW50aWZpZXIobV9zdWJzY3JpcHRpb25JZGVudGlmaWVyLCBbdGhpc10oYm9v
bCByZW1vdmVkKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbW92ZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZnVsZmlsbChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogc3Vw
cG9ydCBwYXJ0aWFsIHRvcGljIGxpc3QgdXBkYXRlcy4KKyAgICAgICAgICAgICAgICB1cGRhdGVU
b3BpY0xpc3RzKG1fY29ubmVjdGlvbiwgbV9kYXRhYmFzZSwgW3RoaXNdKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKy8vIE9ubHkgYWxsb3cg
b25lIHJlcXVlc3QgcGVyIChidW5kbGVJZGVudGlmaWVyLCBzY29wZSkgdG8gcHJvY2VlZCBhdCBv
bmNlLiBGb3IgaW5zdGFuY2UsIGlmIGEgZ2l2ZW4KKy8vIHBhZ2UgY2FsbHMgUHVzaE1hbmFnZXIu
c3Vic2NyaWJlKCkgdHdpY2UgaW4gYSByb3csIHRoZSBzZWNvbmQgc3Vic2NyaWJlIGNhbGwgd29u
J3Qgc3RhcnQgdW50aWwKKy8vIHRoZSBmaXJzdCBvbmUgY29tcGxldGVzLgordm9pZCBQdXNoU2Vy
dmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2VydmljZVJlcXVlc3RNYXAmIG1h
cCwgc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlUmVxdWVzdD4mJiByZXF1ZXN0KQoreworICAg
IGF1dG8ga2V5ID0gc3RkOjptYWtlX3R1cGxlKHJlcXVlc3QtPmJ1bmRsZUlkZW50aWZpZXIoKSwg
cmVxdWVzdC0+c2NvcGUoKSk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtYXAuZW5zdXJlKGtleSwg
W10oKSB7CisgICAgICAgIHJldHVybiBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2VS
ZXF1ZXN0Pj4geyB9OworICAgIH0pOworCisgICAgYXV0byBhZGRlZFJlcXVlc3QgPSByZXF1ZXN0
LmdldCgpOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKFdURk1vdmUocmVx
dWVzdCkpOworCisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRlZFJl
cXVlc3QtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmZpbmlzaGVkUHVzaFNlcnZp
Y2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYgbWFwLCBQdXNoU2VydmljZVJlcXVlc3Qm
IHJlcXVlc3QpCit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfdHVwbGUocmVxdWVzdC5idW5k
bGVJZGVudGlmaWVyKCksIHJlcXVlc3Quc2NvcGUoKSk7CisgICAgYXV0byByZXF1ZXN0UXVldWVJ
dCA9IG1hcC5maW5kKGtleSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChyZXF1ZXN0UXVldWVJdCAh
PSBtYXAuZW5kKCkpOworICAgIGF1dG8mIHJlcXVlc3RRdWV1ZSA9IHJlcXVlc3RRdWV1ZUl0LT52
YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXF1ZXN0UXVldWUuc2l6ZSgpID4gMCk7CisgICAg
YXV0byBjdXJyZW50UmVxdWVzdCA9IHJlcXVlc3RRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChjdXJyZW50UmVxdWVzdC5nZXQoKSA9PSAmcmVxdWVzdCk7CisKKyAgICBQdXNo
U2VydmljZVJlcXVlc3QqIG5leHRSZXF1ZXN0ID0gbnVsbHB0cjsKKyAgICBpZiAoIXJlcXVlc3RR
dWV1ZS5zaXplKCkpCisgICAgICAgIG1hcC5yZW1vdmUocmVxdWVzdFF1ZXVlSXQpOworICAgIGVs
c2UKKyAgICAgICAgbmV4dFJlcXVlc3QgPSByZXF1ZXN0UXVldWUuZmlyc3QoKS5nZXQoKTsKKwor
ICAgIC8vIEV2ZW4gaWYgdGhlcmUncyBubyBuZXh0IHJlcXVlc3QgdG8gc3RhcnQsIGhvbGQgb24g
dG8gY3VycmVudFJlcXVlc3QgdW50aWwgdGhlIG5leHQgdHVybiBvZiB0aGUgcnVuIGxvb3Agc2lu
Y2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBleGVjdXRpbmcgdGhlIGZpbmlzaCgpIG1lbWJlciBm
dW5jdGlvbiBvZiBjdXJyZW50UmVxdWVzdC4KKyAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRj
aChbY3VycmVudFJlcXVlc3QgPSBXVEZNb3ZlKGN1cnJlbnRSZXF1ZXN0KSwgbmV4dFJlcXVlc3Rd
IHsKKyAgICAgICAgaWYgKG5leHRSZXF1ZXN0KQorICAgICAgICAgICAgbmV4dFJlcXVlc3QtPnN0
YXJ0KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmdldFN1YnNjcmlwdGlvbihj
b25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQ
dXNoU3Vic2NyaXB0aW9uRGF0YT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChtX2dldFN1YnNj
cmlwdGlvblJlcXVlc3RzLCBtYWtlVW5pcXVlPEdldFN1YnNjcmlwdGlvblJlcXVlc3Q+KCp0aGlz
LCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsK
K30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0
KEdldFN1YnNjcmlwdGlvblJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZmluaXNoZWRQdXNoU2Vy
dmljZVJlcXVlc3QobV9nZXRTdWJzY3JpcHRpb25SZXF1ZXN0cywgcmVxdWVzdCk7Cit9CisKK3Zv
aWQgUHVzaFNlcnZpY2U6OnN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNL
ZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1
YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChtX3N1YnNjcmliZVJlcXVl
c3RzLCBtYWtlVW5pcXVlPFN1YnNjcmliZVJlcXVlc3Q+KCp0aGlzLCBidW5kbGVJZGVudGlmaWVy
LCBzY29wZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Cit9
CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdChTdWJzY3Jp
YmVSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KG1f
c3Vic2NyaWJlUmVxdWVzdHMsIHJlcXVlc3QpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjp1bnN1
YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2Nv
cGUsIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1ZXVlUHVzaFNlcnZp
Y2VSZXF1ZXN0KG1fdW5zdWJzY3JpYmVSZXF1ZXN0cywgbWFrZVVuaXF1ZTxVbnN1YnNjcmliZVJl
cXVlc3Q+KCp0aGlzLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgc3Vic2NyaXB0aW9uSWRlbnRp
ZmllciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKK30KKwordm9pZCBQdXNoU2Vydmlj
ZTo6ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QoVW5zdWJzY3JpYmVSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIGZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KG1fdW5zdWJzY3JpYmVSZXF1
ZXN0cywgcmVxdWVzdCk7Cit9CisKK2VudW0gY2xhc3MgQ29udGVudEVuY29kaW5nIHsKKyAgICBF
bXB0eSwKKyAgICBEcmFmdEFFU0dDTSwKKyAgICBTdGFuZGFyZEFFUzEyOEdDTQorfTsKKworc3Ry
dWN0IFJhd1B1c2hNZXNzYWdlIHsKKyAgICBTdHJpbmcgdG9waWM7CisgICAgQ29udGVudEVuY29k
aW5nIGVuY29kaW5nOworCisgICAgLy8gT25seSBzZXQgaWYgZW5jb2RpbmcgaXMgbm90IENvbnRl
bnRFbmNvZGluZzo6RW1wdHkuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY3J5cHRlZFBheWxvYWQ7
CisKKyAgICAvLyBPbmx5IHNldCBpZiBlbmNvZGluZyBpcyBDb250ZW50RW5jb2Rpbmc6OkRyYWZ0
QUVTR0NNLgorICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJQdWJsaWNLZXk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHNhbHQ7CisKK307CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFJhd1B1c2hNZXNz
YWdlPiBtYWtlUmF3UHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkqIHVz
ZXJJbmZvKQoreworICAgIFJhd1B1c2hNZXNzYWdlIG1lc3NhZ2U7CisKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgbWVzc2FnZS50b3BpYyA9IHRvcGljOworICAgICAgICBOU1N0cmlu
ZyAqY29udGVudEVuY29kaW5nID0gdXNlckluZm9bQCJjb250ZW50X2VuY29kaW5nIl07CisgICAg
ICAgIE5TU3RyaW5nICpwYXlsb2FkQmFzZTY0ID0gdXNlckluZm9bQCJwYXlsb2FkIl07CisKKyAg
ICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcubGVuZ3RoIHx8ICFwYXlsb2FkQmFzZTY0Lmxlbmd0
aCkgeworICAgICAgICAgICAgbWVzc2FnZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6RW1w
dHk7CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChbY29udGVudEVuY29kaW5nIGlzRXF1YWxUb1N0cmluZzpAImFlczEyOGdjbSJdKQorICAgICAg
ICAgICAgbWVzc2FnZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6U3RhbmRhcmRBRVMxMjhH
Q007CisgICAgICAgIGVsc2UgaWYgKFtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAi
YWVzZ2NtIl0pIHsKKyAgICAgICAgICAgIG1lc3NhZ2UuZW5jb2RpbmcgPSBDb250ZW50RW5jb2Rp
bmc6OkRyYWZ0QUVTR0NNOworCisgICAgICAgICAgICBOU1N0cmluZyAqc2VydmVyUHVibGljS2V5
QmFzZTY0VVJMID0gdXNlckluZm9bQCJhc19wdWJsaWNrZXkiXTsKKyAgICAgICAgICAgIE5TU3Ry
aW5nICpzYWx0QmFzZTY0VVJMID0gdXNlckluZm9bQCJhc19zYWx0Il07CisgICAgICAgICAgICBp
ZiAoIXNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCB8fCAhc2FsdEJhc2U2NFVSTCkgeworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBhZXNnY20tZW5jcnlwdGVkIHB1
c2ggd2l0aG91dCByZXF1aXJlZCBzZXJ2ZXIga2V5IGFuZCBzYWx0Iik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0
byBzZXJ2ZXJQdWJsaWNLZXkgPSBiYXNlNjRVUkxEZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0
VVJMKTsKKyAgICAgICAgICAgIGF1dG8gc2FsdCA9IGJhc2U2NFVSTERlY29kZShzYWx0QmFzZTY0
VVJMKTsKKyAgICAgICAgICAgIGlmICghc2VydmVyUHVibGljS2V5IHx8ICFzYWx0KSB7CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIGFlc2djbS1lbmNyeXB0ZWQg
cHVzaCB3aXRoIGltcHJvcGVybHkgZW5jb2RlZCBzZXJ2ZXIga2V5IGFuZCBzYWx0Iik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXkgPSBXVEZNb3ZlKCpzZXJ2ZXJQdWJsaWNLZXkp
OworICAgICAgICAgICAgbWVzc2FnZS5zYWx0ID0gV1RGTW92ZSgqc2FsdCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgcHVzaCB3aXRo
IHVua25vd24gY29udGVudCBlbmNvZGluZzogJXtwdWJsaWN9cyIsIGNvbnRlbnRFbmNvZGluZy5V
VEY4U3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0K
KworICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNlNjREZWNvZGUocGF5bG9hZEJhc2U2NCk7Cisg
ICAgICAgIGlmICghcGF5bG9hZCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRy
b3BwaW5nIHB1c2ggd2l0aCBpbXByb3Blcmx5IGVuY29kZWQgcGF5bG9hZCIpOworICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgICAgICBtZXNzYWdlLmVuY3J5
cHRlZFBheWxvYWQgPSBXVEZNb3ZlKCpwYXlsb2FkKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWVz
c2FnZTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3Ry
aW5nKiB0b3BpYywgTlNEaWN0aW9uYXJ5KiB1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gbWVzc2FnZVJlc3VsdCA9IG1h
a2VSYXdQdXNoTWVzc2FnZSh0b3BpYywgdXNlckluZm8pOworICAgIGlmICghbWVzc2FnZVJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhYmFzZS0+Z2V0UmVjb3JkQnlUb3BpYyh0
b3BpYywgW3RoaXMsIG1lc3NhZ2UgPSBXVEZNb3ZlKCptZXNzYWdlUmVzdWx0KSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIHJlY29yZFJlc3Vs
dCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVjb3JkUmVzdWx0KSB7CisgICAgICAgICAgICBS
RUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgaW5jb21pbmcgcHVzaCBzZW50IHRvIHVua25vd24g
dG9waWM6ICV7c2Vuc2l0aXZlfXMiLCBtZXNzYWdlLnRvcGljLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBhdXRvIHJlY29yZCA9IFdURk1vdmUoKnJlY29yZFJlc3VsdCk7CisKKyAg
ICAgICAgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVudEVuY29kaW5nOjpFbXB0eSkgewor
ICAgICAgICAgICAgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcihyZWNvcmQuYnVuZGxlSUQs
IFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UgeyB7IH0sIFVSTChVUkwoKSwgcmVjb3JkLnNjb3BlKSB9
KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIGNsaWVudEtleXMg
eworICAgICAgICAgICAgeyBXVEZNb3ZlKHJlY29yZC5jbGllbnRQdWJsaWNLZXkpLCBXVEZNb3Zl
KHJlY29yZC5jbGllbnRQcml2YXRlS2V5KSB9LAorICAgICAgICAgICAgV1RGTW92ZShyZWNvcmQu
c2hhcmVkQXV0aFNlY3JldCkKKyAgICAgICAgfTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPFZl
Y3Rvcjx1aW50OF90Pj4gZGVjcnlwdGVkUGF5bG9hZDsKKyAgICAgICAgaWYgKG1lc3NhZ2UuZW5j
b2RpbmcgPT0gQ29udGVudEVuY29kaW5nOjpTdGFuZGFyZEFFUzEyOEdDTSkKKyAgICAgICAgICAg
IGRlY3J5cHRlZFBheWxvYWQgPSBkZWNyeXB0QUVTMTI4R0NNUGF5bG9hZChjbGllbnRLZXlzLCBt
ZXNzYWdlLmVuY3J5cHRlZFBheWxvYWQpOworICAgICAgICBlbHNlIGlmIChtZXNzYWdlLmVuY29k
aW5nID09IENvbnRlbnRFbmNvZGluZzo6RHJhZnRBRVNHQ00pCisgICAgICAgICAgICBkZWNyeXB0
ZWRQYXlsb2FkID0gZGVjcnlwdEFFU0dDTVBheWxvYWQoY2xpZW50S2V5cywgbWVzc2FnZS5zZXJ2
ZXJQdWJsaWNLZXksIG1lc3NhZ2Uuc2FsdCwgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkKTsKKwor
ICAgICAgICBpZiAoIWRlY3J5cHRlZFBheWxvYWQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9H
KFB1c2gsICJEcm9wcGluZyBpbmNvbWluZyBwdXNoIGR1ZSB0byBkZWNyeXB0aW9uIGVycm9yIGZv
ciB0b3BpYyAle3NlbnNpdGl2ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKHJlY29yZC5idW5k
bGVJRCwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSB7IFdURk1vdmUoKmRlY3J5cHRlZFBheWxvYWQp
LCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkgfSk7CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmluZGV4IDNjYzVlODk1N2Qx
MTE2OGJjNzFiMzFmZWFjMWUwNzY2NDc3NTJkMjguLmQyNTgwMTgwOGU3ZTA3MGQ4ZTQ3NDQwOGQ0
NDY0ZDdiMjJkY2ZjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNl
cnZpY2VDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgPFdlYkNvcmUvUHVzaE1lc3NhZ2VDcnlwdG8uaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlv
bkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KQEAgLTQ2LDYgKzQ3LDggQEAgcHVibGljOgogICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlv
bigpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIH5QdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRl
ZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlB1c2hDcnlwdG86OkNsaWVudEtleXMgZ2Vu
ZXJhdGVDbGllbnRLZXlzKCk7CisKICAgICB1c2luZyBTdWJzY3JpYmVIYW5kbGVyID0gQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChOU1N0cmluZyAqLCBOU0Vycm9yICopPjsKICAgICB2aXJ0dWFsIHZv
aWQgc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
dmFwaWRQdWJsaWNLZXksIFN1YnNjcmliZUhhbmRsZXImJikgPSAwOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IDUzNDMzMjVlYjVl
YTIwM2U4ZGY2ZmY4MzAzY2I5YjBmZmM4MTMyMWIuLjkyZjgxNDI3N2E4MzgxNTMxNjg4YjBlNDg1
MTgyZDQzZDg1Y2M4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNl
cnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLm1tCkBAIC0yOCw4ICsyOCwxNSBAQAogCiAjaW1wb3J0IDx3dGYvV29ya1F1
ZXVlLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViUHVzaEQg
ewogCitQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJh
dGVDbGllbnRLZXlzKCkKK3sKKyAgICByZXR1cm4gUHVzaENyeXB0bzo6Q2xpZW50S2V5czo6Z2Vu
ZXJhdGUoKTsKK30KKwogdm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OnN0YXJ0TGlzdGVuaW5n
Rm9yUHVzaE1lc3NhZ2VzKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgaGFuZGxlcikKIHsK
ICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oIGIvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKaW5kZXggYWYzMTg1N2RiODczN2E5YjY0
Mzk1ZmIwMDA0NzUwYTk1OGU1NDhkMC4uZDYwOGU2ZDg3Mjk0MGZlMmRjNzAzOGExNTUyMzNkYTEw
ZWYxNTk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9u
LmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKQEAgLTI3LDYg
KzI3LDcgQEAKIAogI2luY2x1ZGUgIlB1c2hDbGllbnRDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAi
UHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmgiCisjaW5jbHVkZSAiUHVzaFNlcnZpY2UuaCIKICNpbmNs
dWRlICJXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJX
ZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKQEAg
LTYxLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3Rpb25BZGRlZCh4cGNfY29u
bmVjdGlvbl90KTsKICAgICB2b2lkIGNvbm5lY3Rpb25SZW1vdmVkKHhwY19jb25uZWN0aW9uX3Qp
OwogCisgICAgdm9pZCBzdGFydEZha2VQdXNoU2VydmljZSgpOworICAgIHZvaWQgc3RhcnRQdXNo
U2VydmljZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBTdHJp
bmcmIHB1c2hEYXRhYmFzZVBhdGgpOworICAgIHZvaWQgaGFuZGxlSW5jb21pbmdQdXNoKGNvbnN0
IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYmKTsKKwog
ICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKICAgICB2b2lkIGVjaG9Ud2ljZShDbGllbnRDb25uZWN0
aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcm
KT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCByZXF1ZXN0U3lzdGVtTm90aWZpY2F0aW9uUGVy
bWlzc2lvbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiByZXBseVNlbmRlcik7CkBAIC02OSw2ICs3NCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldERlYnVnTW9kZUlzRW5hYmxlZChDbGllbnRDb25uZWN0aW9uKiwgYm9vbCk7
CiAgICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbihDbGllbnRDb25uZWN0aW9u
KiwgY29uc3QgV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uJik7CiAgICAgdm9p
ZCBpbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFB1
c2hNZXNzYWdlRm9yVGVzdGluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwor
ICAgIHZvaWQgaW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKENsaWVudENvbm5l
Y3Rpb24qLCBjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsK
ICAgICB2b2lkIGdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiosIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+Jik+
JiYgcmVwbHlTZW5kZXIpOwogICAgIHZvaWQgc3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRD
b25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVSTCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBh
cHBsaWNhdGlvblNlcnZlcktleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3Rl
ZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4m
KT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCB1bnN1YnNjcmliZUZyb21QdXNoU2VydmljZShD
bGllbnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNj
cmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8
Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcik7CkBAIC04OCw5
ICs5NCwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlz
QXZhaWxhYmxlKGNvbnN0IFN0cmluZyYgY2xpZW50Q29kZVNpZ25pbmdJZGVudGlmaWVyKTsKIAor
ICAgIHZvaWQgc2V0UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKTsK
KyAgICB2b2lkIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShGdW5jdGlvbjx2b2lkKCk+JiYp
OworCiAgICAgQ2xpZW50Q29ubmVjdGlvbiogdG9DbGllbnRDb25uZWN0aW9uKHhwY19jb25uZWN0
aW9uX3QpOwogICAgIEhhc2hNYXA8eHBjX2Nvbm5lY3Rpb25fdCwgUmVmPENsaWVudENvbm5lY3Rp
b24+PiBtX2Nvbm5lY3Rpb25NYXA7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+
IG1fcHVzaFNlcnZpY2U7CisgICAgYm9vbCBtX3B1c2hTZXJ2aWNlU3RhcnRlZCB7IGZhbHNlIH07
CisgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgpPj4gbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlv
bnM7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+
PiBtX3B1c2hNZXNzYWdlczsKICAgICBIYXNoTWFwPFN0cmluZywgRGVxdWU8UHVzaE1lc3NhZ2VG
b3JUZXN0aW5nPj4gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IGE4ZmU0OWY1MmQ3NjMyNjYzMWNhYzdkNzY2YzA5
MTQ5NWU5Y2U1NWUuLjY2OWU0MTAxNDZjNTI3NzcwZjIyMGQyOGEyOGRmZjk2YTk0Yjg4ZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KQEAgLTQwLDYgKzQwLDcgQEAK
ICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1NwYW4uaD4KICNp
bXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDo6V2ViUHVzaEQ7CiAKQEAgLTkxLDYgKzkyLDExIEBAIEFSR1VNRU5UUyhQ
dXNoTWVzc2FnZUZvclRlc3RpbmcpCiBSRVBMWShib29sKQogRU5ECiAKK0ZVTkNUSU9OKGluamVj
dEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZykKK0FSR1VNRU5UUyhTdHJpbmcpCitSRVBM
WShib29sKQorRU5ECisKIEZVTkNUSU9OKHN1YnNjcmliZVRvUHVzaFNlcnZpY2UpCiBBUkdVTUVO
VFMoVVJMLCBWZWN0b3I8dWludDhfdD4pCiBSRVBMWShjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQ
dXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKQpAQCAtMTUxLDYg
KzE1NywxMyBAQCBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgaW5qZWN0UHVzaE1lc3NhZ2VGb3JU
ZXN0aW5nOjplbmNvZGVSZXBseShib29sIHJlcGx5KQogICAgIHJldHVybiBlbmNvZGVyLnRha2VC
dWZmZXIoKTsKIH0KIAorV2ViUHVzaEQ6OkVuY29kZWRNZXNzYWdlIGluamVjdEVuY3J5cHRlZFB1
c2hNZXNzYWdlRm9yVGVzdGluZzo6ZW5jb2RlUmVwbHkoYm9vbCByZXBseSkKK3sKKyAgICBXZWJL
aXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgcmVwbHk7CisgICAg
cmV0dXJuIGVuY29kZXIudGFrZUJ1ZmZlcigpOworfQorCiBXZWJQdXNoRDo6RW5jb2RlZE1lc3Nh
Z2UgZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczo6ZW5jb2RlUmVwbHkoY29uc3QgVmVjdG9yPFdlYktp
dDo6V2ViUHVzaE1lc3NhZ2U+JiByZXBseSkKIHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2Rl
ciBlbmNvZGVyOwpAQCAtMjI0LDYgKzIzNyw1MSBAQCBEYWVtb24mIERhZW1vbjo6c2luZ2xldG9u
KCkKICAgICByZXR1cm4gZGFlbW9uOwogfQogCit2b2lkIERhZW1vbjo6c3RhcnRGYWtlUHVzaFNl
cnZpY2UoKQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkgewor
ICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92ZShtZXNz
YWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6Y3JlYXRlRmFrZVNlcnZpY2UoV1RGTW92
ZShtZXNzYWdlSGFuZGxlciksIFt0aGlzXShhdXRvJiYgcHVzaFNlcnZpY2UpIG11dGFibGUgewor
ICAgICAgICBzZXRQdXNoU2VydmljZShXVEZNb3ZlKHB1c2hTZXJ2aWNlKSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgRGFlbW9uOjpzdGFydFB1c2hTZXJ2aWNlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQ
dXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQoreworICAgIGF1dG8g
bWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBX
ZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVJbmNvbWlu
Z1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgfTsKKyAgICBQ
dXNoU2VydmljZTo6Y3JlYXRlKGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBkYXRhYmFzZVBhdGgs
IFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBbdGhpc10oYXV0byYmIHB1c2hTZXJ2aWNlKSBtdXRh
YmxlIHsKKyAgICAgICAgc2V0UHVzaFNlcnZpY2UoV1RGTW92ZShwdXNoU2VydmljZSkpOworICAg
IH0pOworfQorCit2b2lkIERhZW1vbjo6c2V0UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1
c2hTZXJ2aWNlPiYmIHB1c2hTZXJ2aWNlKQoreworICAgIG1fcHVzaFNlcnZpY2UgPSBXVEZNb3Zl
KHB1c2hTZXJ2aWNlKTsKKyAgICBtX3B1c2hTZXJ2aWNlU3RhcnRlZCA9IHRydWU7CisKKyAgICBp
ZiAoIW1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdKCkgeworICAgICAgICB3
aGlsZSAobV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAg
ICBhdXRvIGZ1bmN0aW9uID0gbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMudGFrZUZpcnN0
KCk7CisgICAgICAgICAgICBmdW5jdGlvbigpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3Zv
aWQgRGFlbW9uOjpydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoRnVuY3Rpb248dm9pZCgpPiYm
IGZ1bmN0aW9uKQoreworICAgIGlmICghbV9wdXNoU2VydmljZVN0YXJ0ZWQpIHsKKyAgICAgICAg
bV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb24pKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdW5jdGlvbigpOworfQorCiB2b2lkIERhZW1v
bjo6YnJvYWRjYXN0RGVidWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVsIG1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0T1NP
YmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKQEAgLTMy
NSw2ICszODMsOSBAQCB2b2lkIERhZW1vbjo6ZGVjb2RlQW5kSGFuZGxlTWVzc2FnZSh4cGNfY29u
bmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lcwogICAgIGNhc2UgTWVzc2FnZVR5
cGU6OkluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKICAgICAgICAgaGFuZGxlV2ViUHVzaERN
ZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjppbmplY3RQdXNoTWVzc2FnZUZvclRlc3Rpbmc+
KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRlZFB1
c2hNZXNzYWdlRm9yVGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJl
cGx5PE1lc3NhZ2VJbmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc+KGNs
aWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7Cisg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVzc2Fn
ZXM6CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6
Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2Us
IFdURk1vdmUocmVwbHlTZW5kZXIpKTsKICAgICAgICAgYnJlYWs7CkBAIC00MzEsNiArNDkyLDQ2
IEBAIHZvaWQgRGFlbW9uOjppbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgY29uc3QgUHVzCiAgICAgcmVwbHlTZW5kZXIodHJ1ZSk7CiB9CiAK
K3ZvaWQgRGFlbW9uOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIHJlcGx5U2VuZGVyKQoreworICAgIGlmICghY29ubmVjdGlv
bi0+aG9zdEFwcEhhc1B1c2hJbmplY3RFbnRpdGxlbWVudCgpKSB7CisgICAgICAgIGNvbm5lY3Rp
b24tPmJyb2FkY2FzdERlYnVnTWVzc2FnZSgiQXR0ZW1wdGluZyB0byBpbmplY3QgYSBwdXNoIG1l
c3NhZ2UgZnJvbSBhbiB1bmVudGl0bGVkIHByb2Nlc3MiKTsKKyAgICAgICAgcmVwbHlTZW5kZXIo
ZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1
c2hTZXJ2aWNlKFt0aGlzLCBtZXNzYWdlID0gbWVzc2FnZSwgcmVwbHlTZW5kZXIgPSBXVEZNb3Zl
KHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7
CisgICAgICAgICAgICByZXBseVNlbmRlcihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIGJ5dGVzID0gbWVzc2FnZS51dGY4KCk7CisgICAgICAg
IFJldGFpblB0cjxOU0RhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0
aEJ5dGVzOmJ5dGVzLmRhdGEoKSBsZW5ndGg6IGJ5dGVzLmxlbmd0aCgpXSk7CisKKyAgICAgICAg
aWQgb2JqID0gW05TSlNPTlNlcmlhbGl6YXRpb24gSlNPTk9iamVjdFdpdGhEYXRhOmRhdGEuZ2V0
KCkgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOworICAgICAgICBpZiAoIW9iaiB8fCAhW29iaiBp
c0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkgeworICAgICAgICAgICAgcmVwbHlT
ZW5kZXIoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE5T
TG9nKEAiZ290IG9iajogJUAiLCBvYmopOworCisgICAgICAgIG1fcHVzaFNlcnZpY2UtPmRpZFJl
Y2VpdmVQdXNoTWVzc2FnZShvYmpbQCJ0b3BpYyJdLCBvYmpbQCJ1c2VySW5mbyJdLCBbcmVwbHlT
ZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHJl
cGx5U2VuZGVyKHRydWUpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBEYWVtb246
OmhhbmRsZUluY29taW5nUHVzaChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYktp
dDo6V2ViUHVzaE1lc3NhZ2UmJiBtZXNzYWdlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9w
dXNoTWVzc2FnZXMuZW5zdXJlKGJ1bmRsZUlkZW50aWZpZXIsIFtdIHsKKyAgICAgICAgcmV0dXJu
IFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiB7IH07CisgICAgfSk7CisgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZShtZXNzYWdlKSk7CisKKyAgICBub3Rp
ZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGJ1bmRsZUlkZW50aWZpZXIpOworfQorCiB2
b2lkIERhZW1vbjo6bm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJc0F2YWlsYWJsZShjb25zdCBTdHJp
bmcmIGNsaWVudENvZGVTaWduaW5nSWRlbnRpZmllcikKIHsKICNpZiBQTEFURk9STShNQUMpCkBA
IC00NjIsNiArNTYzLDkgQEAgdm9pZCBEYWVtb246OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xp
ZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmQKIAogICAgIFZlY3RvcjxX
ZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiByZXN1bHRNZXNzYWdlczsKIAorICAgIGlmIChhdXRvIGl0
ZXJhdG9yID0gbV9wdXNoTWVzc2FnZXMuZmluZChob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVy
KTsgaXRlcmF0b3IgIT0gbV9wdXNoTWVzc2FnZXMuZW5kKCkpCisgICAgICAgIHN0ZDo6c3dhcChy
ZXN1bHRNZXNzYWdlcywgaXRlcmF0b3ItPnZhbHVlKTsKKwogICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3Rlc3RpbmdQdXNoTWVzc2FnZXMuZmluZChob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKTsK
ICAgICBpZiAoaXRlcmF0b3IgIT0gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzLmVuZCgpKSB7CiAgICAg
ICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IGl0ZXJhdG9yLT52YWx1ZSkgewpAQCAtNDc2LDI1ICs1
ODAsNTAgQEAgdm9pZCBEYWVtb246OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmQKICAgICByZXBseVNlbmRlcihXVEZNb3Zl
KHJlc3VsdE1lc3NhZ2VzKSk7CiB9CiAKLXZvaWQgRGFlbW9uOjpzdWJzY3JpYmVUb1B1c2hTZXJ2
aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgYXBwbGljYXRpb25TZXJ2ZXJLZXksIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2b2lkIERhZW1vbjo6c3Vi
c2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBV
UkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRp
b25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAg
IFVOVVNFRF9QQVJBTShhcHBsaWNhdGlvblNlcnZlcktleSk7Ci0gICAgcmVwbHlTZW5kZXIobWFr
ZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6Ok5vdEFsbG93ZWRF
cnJvciwgIkxhY2sgcGVybWlzc2lvbiJfcyB9KSk7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hT
ZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVT
aWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCB2YXBpZFB1Ymxp
Y0tleSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNlbmRlcihtYWtl
VW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6SW52YWxpZFN0YXRl
RXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIl9zIH0pKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcHVzaFNlcnZpY2UtPnN1YnNj
cmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUocmVw
bHlTZW5kZXIpKTsKKyAgICB9KTsKIH0KIAotdm9pZCBEYWVtb246OnVuc3Vic2NyaWJlRnJvbVB1
c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVV
UkwsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHB1c2hTdWJzY3JpcHRpb25J
ZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2b2lkIERhZW1vbjo6dW5z
dWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29u
c3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vi
c2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3Rl
ZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAg
IHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICBydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoW3Ro
aXMsIGJ1bmRsZUlkZW50aWZpZXIgPSBjb25uZWN0aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJZGVu
dGlmaWVyKCksIHNjb3BlID0gc2NvcGVVUkwuc3RyaW5nKCksIHN1YnNjcmlwdGlvbklkZW50aWZp
ZXIsIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNlbmRlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIobWFrZVVu
ZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVy
cm9yLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCJfcyB9KSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3B1c2hTZXJ2aWNlLT51bnN1YnNj
cmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgV1RG
TW92ZShyZXBseVNlbmRlcikpOworICAgIH0pOwogfQogCiB2b2lkIERhZW1vbjo6Z2V0UHVzaFN1
YnNjcmlwdGlvbihDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3Bl
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8
V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYp
PiYmIHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+IHsgfSk7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hT
ZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVT
aWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCByZXBseVNlbmRl
ciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fcHVz
aFNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNv
cmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2Vy
dmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQiX3MgfSkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgbV9wdXNoU2VydmljZS0+Z2V0U3Vic2NyaXB0aW9uKGJ1bmRs
ZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgfSk7CiB9CiAK
IHZvaWQgRGFlbW9uOjpnZXRQdXNoUGVybWlzc2lvblN0YXRlKENsaWVudENvbm5lY3Rpb24qIGNv
bm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgRXhwZWN0ZWQ8dWludDhfdCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNl
bmRlcikKIHsKKyAgICAvLyBGSVhNRQorI2lmIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9U
T0tFTl9TVVBQT1JUKQorICAgIHJlcGx5U2VuZGVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdlYkNv
cmU6OlB1c2hQZXJtaXNzaW9uU3RhdGU6OkdyYW50ZWQpKTsKKyNlbHNlCiAgICAgcmVwbHlTZW5k
ZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oV2ViQ29yZTo6UHVzaFBlcm1pc3Npb25TdGF0ZTo6RGVu
aWVkKSk7CisjZW5kaWYKIH0KIAogQ2xpZW50Q29ubmVjdGlvbiogRGFlbW9uOjp0b0NsaWVudENv
bm5lY3Rpb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oCmluZGV4IGJiZWI5NjhkZTdhNzU5ZGRmMjc2ZmMxYmE2
N2QyOGI2NjZhNDg2NDAuLmQzYzE3ZTY1ZGEzYWVjNTI0NGFiOTE2MTNiYWMzY2Y2ZTllYWEyNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmgKQEAgLTI3LDYg
KzI3LDYgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWludCBXZWJQdXNoRGFlbW9uTWFpbihp
bnQsIGNvbnN0IGNoYXIqKik7CitpbnQgV2ViUHVzaERhZW1vbk1haW4oaW50LCBjaGFyKiopOwog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvV2ViUHVzaERhZW1vbk1haW4ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hE
YWVtb25NYWluLm1tCmluZGV4IDJhNjhlMThmYTIwMTUwNjYyMGQxYzM4MTc0NDExZWIwYWEyYmRj
NTkuLjYyNjE5ZjNhYzI0ZWQ0ZWI1ZTE4YTcyN2VjMDQ4ZjU5ZDMzYzY4YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0KKysrIGIvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbQpAQCAtMzAsMjQgKzMwLDIxIEBA
CiAjaW1wb3J0ICJEYWVtb25EZWNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25FbmNvZGVyLmgiCiAj
aW1wb3J0ICJEYWVtb25VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkxvZ0luaXRpYWxpemF0aW9uLmgi
CiAjaW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4KKyNpbXBvcnQgPGdl
dG9wdC5oPgorI2ltcG9ydCA8d3RmL0xvZ0luaXRpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDx3dGYv
TWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAKLSNpZiBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8c2VydmVycy9ib290c3RyYXAuaD4KLSNl
bHNlCi0jaW1wb3J0IDxtYWNoL3N0ZF90eXBlcy5oPgotZXh0ZXJuICJDIiB7Ci1leHRlcm4ga2Vy
bl9yZXR1cm5fdCBib290c3RyYXBfY2hlY2tfaW4obWFjaF9wb3J0X3QgYm9vdHN0cmFwUG9ydCwg
Y29uc3QgY2hhciAqc2VydmljZU5hbWUsIG1hY2hfcG9ydF90Kik7Ci19Ci0jZW5kaWYKLQogdXNp
bmcgV2ViS2l0OjpEYWVtb246OkVuY29kZWRNZXNzYWdlOwogdXNpbmcgV2ViUHVzaEQ6OkRhZW1v
bjsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmluY29taW5nUHVzaFNlcnZpY2VOYW1lID0gImNvbS5h
cHBsZS5hcHMud2Via2l0LndlYnB1c2hkLmluY29taW5nLXB1c2giOworc3RhdGljIGNvbnN0IEFT
Q0lJTGl0ZXJhbCBlbnRpdGxlbWVudE5hbWUgPSAiY29tLmFwcGxlLnByaXZhdGUud2Via2l0Lndl
YnB1c2giX3M7CitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGRlZmF1bHRNYWNoU2VydmljZU5h
bWUgPSAiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5zZXJ2aWNlIl9zOworc3RhdGljIGNvbnN0
IEFTQ0lJTGl0ZXJhbCBkZWZhdWx0SW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSAiY29tLmFwcGxl
LmFwcy53ZWJraXQud2VicHVzaGQuaW5jb21pbmctcHVzaCJfczsKIAogbmFtZXNwYWNlIFdlYlB1
c2hEIHsKIApAQCAtNzQsMjMgKzcxLDU1IEBAIHVzaW5nIFdlYlB1c2hEOjpjb25uZWN0aW9uUmVt
b3ZlZDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQg
YXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQogewotICAgIGlmIChhcmdjICE9IDMgfHwgc3RyY21wKGFyZ3ZbMV0sICIt
LW1hY2hTZXJ2aWNlTmFtZSIpKSB7Ci0gICAgICAgIE5TTG9nKEAidXNhZ2U6IHdlYnB1c2hkIC0t
bWFjaFNlcnZpY2VOYW1lIDxuYW1lPiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAg
IGNvbnN0IGNoYXIqIG1hY2hTZXJ2aWNlTmFtZSA9IGFyZ3ZbMl07Ci0KICAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKLSAgICAgICAgV2ViS2l0OjpzdGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNlQ29u
bmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCAiY29tLmFwcGxlLnByaXZhdGUud2Via2l0LndlYnB1
c2giLCBjb25uZWN0aW9uQWRkZWQsIGNvbm5lY3Rpb25SZW1vdmVkLCBjb25uZWN0aW9uRXZlbnRI
YW5kbGVyKTsKLQotICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBvbmNlIHdlIGFjdHVhbGx5
IHN0YXJ0IHVzaW5nIEFQU0Nvbm5lY3Rpb24uCi0gICAgICAgIG1hY2hfcG9ydF90IGluY29taW5n
TWVzc2FnZVBvcnQ7Ci0gICAgICAgIGlmIChib290c3RyYXBfY2hlY2tfaW4oYm9vdHN0cmFwX3Bv
cnQsIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCAmaW5jb21pbmdNZXNzYWdlUG9ydCkgIT0gS0VS
Tl9TVUNDRVNTKQotICAgICAgICAgICAgTlNMb2coQCJDb3VsZG4ndCByZWdpc3RlciBmb3IgaW5j
b21pbmcgcHVzaCBsYXVuY2ggcG9ydC4iKTsKLSAgICAgICAgCiAgICAgICAgIFdURjo6aW5pdGlh
bGl6ZU1haW5UaHJlYWQoKTsKKworI2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECisgICAgICAgIFdURjo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJ
Zk5lY2Vzc2FyeSgpOworICAgICAgICBXZWJDb3JlOjpsb2dDaGFubmVscygpLmluaXRpYWxpemVM
b2dDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIFdlYktpdDo6bG9nQ2hhbm5lbHMoKS5p
bml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworI2VuZGlmIC8vICFMT0dfRElTQUJM
RUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisKKyAgICAgICAgc3RhdGljIHN0cnVjdCBvcHRp
b24gb3B0aW9uc1tdID0geworICAgICAgICAgICAgeyAibWFjaFNlcnZpY2VOYW1lIiwgcmVxdWly
ZWRfYXJndW1lbnQsIDAsICdtJyB9LAorICAgICAgICAgICAgeyAiaW5jb21pbmdQdXNoU2Vydmlj
ZU5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3AnIH0sCisgICAgICAgICAgICB7ICJ1c2VG
YWtlUHVzaFNlcnZpY2UiLCBub19hcmd1bWVudCwgMCwgJ2YnIH0KKyAgICAgICAgfTsKKworICAg
ICAgICBjb25zdCBjaGFyKiBtYWNoU2VydmljZU5hbWUgPSBkZWZhdWx0TWFjaFNlcnZpY2VOYW1l
OworICAgICAgICBjb25zdCBjaGFyKiBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSA9IGRlZmF1bHRJ
bmNvbWluZ1B1c2hTZXJ2aWNlTmFtZTsKKyAgICAgICAgYm9vbCB1c2VGYWtlUHVzaFNlcnZpY2Ug
PSBmYWxzZTsKKworICAgICAgICBpbnQgYzsKKyAgICAgICAgaW50IG9wdGlvbkluZGV4OworICAg
ICAgICB3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiIiwgb3B0aW9ucywgJm9w
dGlvbkluZGV4KSkgIT0gLTEpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAg
ICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgbWFjaFNlcnZpY2VOYW1lID0gb3B0YXJnOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAg
ICAgICAgaW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICB1c2VGYWtlUHVz
aFNlcnZpY2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uOiAl
Y1xuIiwgb3B0b3B0KTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgV2ViS2l0OjpzdGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNl
Q29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCBlbnRpdGxlbWVudE5hbWUsIGNvbm5lY3Rpb25B
ZGRlZCwgY29ubmVjdGlvblJlbW92ZWQsIGNvbm5lY3Rpb25FdmVudEhhbmRsZXIpOworCisgICAg
ICAgIGlmICh1c2VGYWtlUHVzaFNlcnZpY2UpCisgICAgICAgICAgICA6OldlYlB1c2hEOjpEYWVt
b246OnNpbmdsZXRvbigpLnN0YXJ0RmFrZVB1c2hTZXJ2aWNlKCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgU3RyaW5nIGxpYnJhcnlQYXRoID0gTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3Jp
ZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1VzZXJEb21haW5NYXNrLCBZRVMpWzBd
OworICAgICAgICAgICAgU3RyaW5nIHB1c2hEYXRhYmFzZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnRzKGxpYnJhcnlQYXRoLCB7ICJXZWJLaXQiLCAiV2ViUHVzaCIs
ICJQdXNoRGF0YWJhc2UuZGIiIH0pOworICAgICAgICAgICAgOjpXZWJQdXNoRDo6RGFlbW9uOjpz
aW5nbGV0b24oKS5zdGFydFB1c2hTZXJ2aWNlKGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBwdXNo
RGF0YWJhc2VQYXRoKTsKKyAgICAgICAgfQogICAgIH0KICAgICBDRlJ1bkxvb3BSdW4oKTsKICAg
ICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQu
Y3BwIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKaW5kZXggZmQwNGU0MDQ1
ODU5OGVjODczOWFjMGYzZTlhOGI4ZjNmYmNhMWViOC4uNTljZWYwZDk4NDMwNTU2NWFlYWQxOGMy
MTIyYWQzZGZmZTE1OTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJw
dXNoZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tNYWluLmg+CiAjaW5jbHVkZSA8b3MvYXZh
aWxhYmlsaXR5Lmg+CiAKLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICBXS1dlYlB1c2hEYWVtb25NYWlu
KGFyZ2MsIGFyZ3YpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDY0ODQwOGFkZDM2ZTc0YmJjYTI4NmY0NmQ5NDdlNGEzZmRmMTRiMmQuLmQ5
MDAyNTZmYzlmYzI2ZDYxMTc3NzFhYzBhNTYxYWQ4MmY5NTU2NDMgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMi0w
MS0yOCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgUHVzaFNlcnZp
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTg1
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICAtIE1v
ZGlmeSB0aGUgZXhpc3RpbmcgaW5qZWN0ZWQgcHVzaCB0ZXN0IHRvIGluamVjdCBhbiBlbmNyeXB0
ZWQgcHVzaC4KKyAgICAgICAgIC0gQWRkIGEgZmV3IGJhc2ljIHRlc3QgY2FzZXMgZm9yIHN1YnNj
cmliaW5nIGFuZCB1bnN1YnNjcmliaW5nIGZyb20gcHVzaC4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKC1bTm90
aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XSk6CisgICAg
ICAgICgtW05vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJv
bGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnRlc3RXZWJQdXNoRGFlbW9uUExpc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRl
TWVzc2FnZURpY3Rpb25hcnkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2VuZE1lc3NhZ2VU
b0RhZW1vbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZW5kTWVzc2FnZVRvRGFlbW9uV2Fp
dGluZ0ZvclJlcGx5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnNlbmRDb25maWd1cmF0aW9u
V2l0aEF1ZGl0VG9rZW4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpmdW5jdGlvbik6IERlbGV0ZWQuCisKIDIwMjItMDEtMjggIEJlbiBO
aGFtICA8bmhhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFB1c2hEYXRhYmFzZQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9u
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9u
Lm1tCmluZGV4IDZkOTJjZTk3ODZhZjgxYzc4NGIxMjQ0NDE5ZTZkZTYyODAzY2U4MjAuLmU2ZjEy
ZWMzMTkxNTZkOTYzZTNmODEwOTJmYzFlMGJlYWZhNmY3ZDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KQEAgLTM1
LDEzICszNSwxOCBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJQdXNoRGFlbW9u
Q29uc3RhbnRzLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLRXhwZXJpbWVudGFsRmVhdHVyZS5oPgog
I2ltcG9ydCA8V2ViS2l0L19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmg+CiAjaW1w
b3J0IDxtYWNoL21hY2hfaW5pdC5oPgogI2ltcG9ydCA8bWFjaC90YXNrLmg+CisjaW1wb3J0IDx3
dGYvQmxvY2tQdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiAKK3VzaW5nIFdlYktpdDo6V2ViUHVzaEQ6Ok1lc3Nh
Z2VUeXBlOworCiBzdGF0aWMgYm9vbCBhbGVydFJlY2VpdmVkID0gZmFsc2U7CiBAaW50ZXJmYWNl
IE5vdGlmaWNhdGlvblBlcm1pc3Npb25EZWxlZ2F0ZSA6IE5TT2JqZWN0PFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+CiBAZW5kCkBAIC02MSw2ICs2NiwyNiBAQCBzdGF0aWMgYm9vbCBhbGVydFJlY2VpdmVk
ID0gZmFsc2U7CiAKIEBlbmQKIAorQGludGVyZmFjZSBOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdl
SGFuZGxlciA6IE5TT2JqZWN0PFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+IHsKKyAgICBCbG9ja1B0
cjx2b2lkKGlkKT4gX21lc3NhZ2VIYW5kbGVyOworfQorQGVuZAorCitAaW1wbGVtZW50YXRpb24g
Tm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIKKworLSAodm9pZClzZXRNZXNzYWdlSGFu
ZGxlcjoodm9pZCAoXikoaWQpKWhhbmRsZXIKK3sKKyAgICBfbWVzc2FnZUhhbmRsZXIgPSBoYW5k
bGVyOworfQorCistICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENv
bnRyb2xsZXIgKil1c2VyQ29udGVudENvbnRyb2xsZXIgZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6
KFdLU2NyaXB0TWVzc2FnZSAqKW1lc3NhZ2UKK3sKKyAgICBpZiAoX21lc3NhZ2VIYW5kbGVyKQor
ICAgICAgICBfbWVzc2FnZUhhbmRsZXIobWVzc2FnZS5ib2R5KTsKK30KKworQGVuZAorCiBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNVUkw+IHRlc3RXZWJQ
dXNoRGFlbW9uTG9jYXRpb24oKQpAQCAtNzksNyArMTA0LDggQEAgc3RhdGljIE5TRGljdGlvbmFy
eTxOU1N0cmluZyAqLCBpZD4gKnRlc3RXZWJQdXNoRGFlbW9uUExpc3QoTlNVUkwgKnN0b3JhZ2VM
b2NhdGkKICAgICAgICAgQCJQcm9ncmFtQXJndW1lbnRzIiA6IEBbCiAgICAgICAgICAgICB0ZXN0
V2ViUHVzaERhZW1vbkxvY2F0aW9uKCkuZ2V0KCkucGF0aCwKICAgICAgICAgICAgIEAiLS1tYWNo
U2VydmljZU5hbWUiLAotICAgICAgICAgICAgQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9u
LnNlcnZpY2UiCisgICAgICAgICAgICBAIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2Vy
dmljZSIsCisgICAgICAgICAgICBAIi0tdXNlRmFrZVB1c2hTZXJ2aWNlIgogICAgICAgICBdCiAg
ICAgfTsKIH0KQEAgLTEzNSwyNCArMTYxLDI0IEBAIHN0YXRpYyB2b2lkIGNsZWFuVXBUZXN0V2Vi
UHVzaEQoTlNVUkwgKnRlbXBEaXIpCiAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogfQogCi1zdGF0
aWMgUmV0YWluUHRyPHhwY19vYmplY3RfdD4gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkodWludDhf
dCBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQorc3RhdGljIFJl
dGFpblB0cjx4cGNfb2JqZWN0X3Q+IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KE1lc3NhZ2VUeXBl
IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCiB7CiAgICAgYXV0
byBkaWN0aW9uYXJ5ID0gYWRvcHROUyh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVs
bHB0ciwgMCkpOwogICAgIHhwY19kaWN0aW9uYXJ5X3NldF91aW50NjQoZGljdGlvbmFyeS5nZXQo
KSwgInByb3RvY29sIHZlcnNpb24iLCAxKTsKLSAgICB4cGNfZGljdGlvbmFyeV9zZXRfdWludDY0
KGRpY3Rpb25hcnkuZ2V0KCksICJtZXNzYWdlIHR5cGUiLCBtZXNzYWdlVHlwZSk7CisgICAgeHBj
X2RpY3Rpb25hcnlfc2V0X3VpbnQ2NChkaWN0aW9uYXJ5LmdldCgpLCAibWVzc2FnZSB0eXBlIiwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1lc3NhZ2VUeXBlKSk7CiAgICAgeHBjX2RpY3Rpb25hcnlf
c2V0X2RhdGEoZGljdGlvbmFyeS5nZXQoKSwgImVuY29kZWQgbWVzc2FnZSIsIG1lc3NhZ2UuZGF0
YSgpLCBtZXNzYWdlLnNpemUoKSk7CiAgICAgcmV0dXJuIFdURk1vdmUoZGljdGlvbmFyeSk7CiB9
CiAKIC8vIFVzZXMgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiB0byB0aGUgZGFlbW9uIGZvciBhIG9u
ZS1vZmYgbWVzc2FnZQotdm9pZCBzZW5kTWVzc2FnZVRvRGFlbW9uKHhwY19jb25uZWN0aW9uX3Qg
Y29ubmVjdGlvbiwgdWludDhfdCBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBt
ZXNzYWdlKQordm9pZCBzZW5kTWVzc2FnZVRvRGFlbW9uKHhwY19jb25uZWN0aW9uX3QgY29ubmVj
dGlvbiwgTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVz
c2FnZSkKIHsKICAgICBhdXRvIGRpY3Rpb25hcnkgPSBjcmVhdGVNZXNzYWdlRGljdGlvbmFyeSht
ZXNzYWdlVHlwZSwgbWVzc2FnZSk7CiAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKGNv
bm5lY3Rpb24sIGRpY3Rpb25hcnkuZ2V0KCkpOwogfQogCiAvLyBVc2VzIGFuIGV4aXN0aW5nIGNv
bm5lY3Rpb24gdG8gdGhlIGRhZW1vbiBmb3IgYSBvbmUtb2ZmIG1lc3NhZ2UsIHdhaXRpbmcgZm9y
IHRoZSByZXBseQotdm9pZCBzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KHhwY19j
b25uZWN0aW9uX3QgY29ubmVjdGlvbiwgdWludDhfdCBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBtZXNzYWdlKQordm9pZCBzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJl
cGx5KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKIHsKICAgICBhdXRvIGRpY3Rpb25hcnkg
PSBjcmVhdGVNZXNzYWdlRGljdGlvbmFyeShtZXNzYWdlVHlwZSwgbWVzc2FnZSk7CiAKQEAgLTE4
MSw3ICsyMDcsNyBAQCBzdGF0aWMgdm9pZCBzZW5kQ29uZmlndXJhdGlvbldpdGhBdWRpdFRva2Vu
KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbikKICAgICAgICAgZW5jb2RlZE1lc3NhZ2VbMV0g
PSAxOwogICAgICAgICBlbmNvZGVkTWVzc2FnZVsyXSA9IDMyOwogICAgICAgICBtZW1jcHkoJmVu
Y29kZWRNZXNzYWdlWzEwXSwgJnRva2VuLCBzaXplb2YodG9rZW4pKTsKLSAgICAgICAgc2VuZE1l
c3NhZ2VUb0RhZW1vbihjb25uZWN0aW9uLCA2LCBlbmNvZGVkTWVzc2FnZSk7CisgICAgICAgIHNl
bmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbiwgTWVzc2FnZVR5cGU6OlVwZGF0ZUNvbm5lY3Rp
b25Db25maWd1cmF0aW9uLCBlbmNvZGVkTWVzc2FnZSk7CiAgICAgfQogfQogCkBAIC0yNTIsNyAr
Mjc4LDcgQEAgVEVTVChXZWJQdXNoRCwgQmFzaWNDb21tdW5pY2F0aW9uKQogICAgICAgICBhdXRv
IGRpY3Rpb25hcnkgPSBhZG9wdE5TKHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShudWxscHRyLCBudWxs
cHRyLCAwKSk7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkTWVzc2FnZSgxKTsKICAg
ICAgICAgZW5jb2RlZE1lc3NhZ2VbMF0gPSAxOwotICAgICAgICBzZW5kTWVzc2FnZVRvRGFlbW9u
KGNvbm5lY3Rpb24uZ2V0KCksIDUsIGVuY29kZWRNZXNzYWdlKTsKKyAgICAgICAgc2VuZE1lc3Nh
Z2VUb0RhZW1vbihjb25uZWN0aW9uLmdldCgpLCBNZXNzYWdlVHlwZTo6U2V0RGVidWdNb2RlSXNF
bmFibGVkLCBlbmNvZGVkTWVzc2FnZSk7CiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZSk7CiAgICAgfQogCkBAIC0zNjEsNTQgKzM4Nyw2IEBAIFRFU1QoV2ViUHVzaEQsIFBl
cm1pc3Npb25NYW5hZ2VtZW50KQogICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9y
eSk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBtYWluU1dCeXRlcyA9IFIiU1dSRVNPVVJDRSgK
LTxzY3JpcHQ+Ci1mdW5jdGlvbiBsb2cobXNnKQotewotICAgIHdpbmRvdy53ZWJraXQubWVzc2Fn
ZUhhbmRsZXJzLnN3LnBvc3RNZXNzYWdlKG1zZyk7Ci19Ci0KLWNvbnN0IGNoYW5uZWwgPSBuZXcg
TWVzc2FnZUNoYW5uZWwoKTsKLWNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gKGV2ZW50KSA9PiBs
b2coZXZlbnQuZGF0YSk7Ci0KLW5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvc3cu
anMnKS50aGVuKChyZWdpc3RyYXRpb24pID0+IHsKLSAgICBpZiAocmVnaXN0cmF0aW9uLmFjdGl2
ZSkgewotICAgICAgICByZWdpc3RyYXRpb24uYWN0aXZlLnBvc3RNZXNzYWdlKHtwb3J0OiBjaGFu
bmVsLnBvcnQyfSwgW2NoYW5uZWwucG9ydDJdKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICB3b3JrZXIgPSByZWdpc3RyYXRpb24uaW5zdGFsbGluZzsKLSAgICB3b3JrZXIuYWRkRXZlbnRM
aXN0ZW5lcignc3RhdGVjaGFuZ2UnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdvcmtlci5z
dGF0ZSA9PSAnYWN0aXZhdGVkJykKLSAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7cG9y
dDogY2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQyXSk7Ci0gICAgfSk7Ci19KS5jYXRjaChm
dW5jdGlvbihlcnJvcikgewotICAgIGxvZygiUmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoOiAiICsg
ZXJyb3IpOwotfSk7Ci08L3NjcmlwdD4KLSlTV1JFU09VUkNFIjsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIHNjcmlwdEJ5dGVzID0gUiJTV1JFU09VUkNFKAotbGV0IHBvcnQ7Ci1zZWxmLmFkZEV2ZW50
TGlzdGVuZXIoIm1lc3NhZ2UiLCAoZXZlbnQpID0+IHsKLSAgICBwb3J0ID0gZXZlbnQuZGF0YS5w
b3J0OwotICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlYWR5Iik7Ci19KTsKLXNlbGYuYWRkRXZlbnRM
aXN0ZW5lcigicHVzaCIsIChldmVudCkgPT4gewotICAgIHRyeSB7Ci0gICAgICAgIGlmICghZXZl
bnQuZGF0YSkgewotICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVjZWl2ZWQ6IG51bGwg
ZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZh
bHVlID0gZXZlbnQuZGF0YS50ZXh0KCk7Ci0gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlY2Vp
dmVkOiAiICsgdmFsdWUpOwotICAgICAgICBpZiAodmFsdWUgIT0gJ1N3ZWV0IFBvdGF0b2VzJykK
LSAgICAgICAgICAgIGV2ZW50LndhaXRVbnRpbChQcm9taXNlLnJlamVjdCgnSSB3YW50IHN3ZWV0
IHBvdGF0b2VzJykpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2Fn
ZSgiR290IGV4Y2VwdGlvbiAiICsgZSk7Ci0gICAgfQotfSk7Ci0pU1dSRVNPVVJDRSI7Ci0KIHN0
YXRpYyB2b2lkIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3Jl
KQogewogICAgIF9fYmxvY2sgYm9vbCBjbGVhcmVkU3RvcmUgPSBmYWxzZTsKQEAgLTQxOCw3NiAr
Mzk2LDI4OSBAQCBzdGF0aWMgdm9pZCBjbGVhcldlYnNpdGVEYXRhU3RvcmUoV0tXZWJzaXRlRGF0
YVN0b3JlICpzdG9yZSkKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNsZWFyZWRTdG9y
ZSk7CiB9CiAKLVRFU1QoV2ViUHVzaEQsIEhhbmRsZUluamVjdGVkUHVzaCkKLXsKLSAgICBbV0tX
ZWJzaXRlRGF0YVN0b3JlIF9hbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnNdOwor
Y2xhc3MgV2ViUHVzaERUZXN0IDogcHVibGljIDo6dGVzdGluZzo6VGVzdCB7Citwcm90ZWN0ZWQ6
CisgICAgV2ViUHVzaERUZXN0KCkKKyAgICB7CisgICAgICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUg
X2FsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2luc107CiAKLSAgICBOU1VSTCAqdGVt
cERpcmVjdG9yeSA9IHNldFVwVGVzdFdlYlB1c2hEKCk7CisgICAgICAgIG1fdGVtcERpcmVjdG9y
eSA9IHJldGFpblB0cihzZXRVcFRlc3RXZWJQdXNoRCgpKTsKIAotICAgIGF1dG8gZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
IG5ld10pOwotICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaE1hY2hTZXJ2
aWNlTmFtZSA9IEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIjsKLSAgICBk
YXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hEYWVtb25Vc2VzTW9ja0J1bmRsZXNG
b3JUZXN0aW5nID0gWUVTOwotICAgIGF1dG8gZGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0
ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1
cmF0aW9uLmdldCgpXSk7CisgICAgICAgIGF1dG8gZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10pOworICAgICAgICBk
YXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hNYWNoU2VydmljZU5hbWUgPSBAIm9y
Zy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSI7CisgICAgICAgIGRhdGFTdG9yZUNv
bmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaERhZW1vblVzZXNNb2NrQnVuZGxlc0ZvclRlc3Rpbmcg
PSBZRVM7CisgICAgICAgIG1fZGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpXSk7CiAKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0
ZURhdGFTdG9yZSA9IGRhdGFTdG9yZS5nZXQoKTsKLSAgICBjbGVhcldlYnNpdGVEYXRhU3RvcmUo
W2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0pOworICAgICAgICBtX2NvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAg
ICAgICBtX2NvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IG1fZGF0YVN0b3Jl
LmdldCgpOworICAgICAgICBjbGVhcldlYnNpdGVEYXRhU3RvcmUoW21fY29uZmlndXJhdGlvbiB3
ZWJzaXRlRGF0YVN0b3JlXSk7CiAKLSAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcmVmZXJlbmNl
cyBfc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQ6WUVTXTsKLSAgICBmb3IgKF9XS0V4cGVyaW1lbnRh
bEZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1lbnRhbEZlYXR1cmVz
XSkgewotICAgICAgICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1aWx0SW5O
b3RpZmljYXRpb25zRW5hYmxlZCJdKQotICAgICAgICAgICAgW1tjb25maWd1cmF0aW9uIHByZWZl
cmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgW21f
Y29uZmlndXJhdGlvbi5nZXQoKS5wcmVmZXJlbmNlcyBfc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQ6
WUVTXTsKKyAgICAgICAgZm9yIChfV0tFeHBlcmltZW50YWxGZWF0dXJlICpmZWF0dXJlIGluIFtX
S1ByZWZlcmVuY2VzIF9leHBlcmltZW50YWxGZWF0dXJlc10pIHsKKyAgICAgICAgICAgIGlmIChb
ZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiQnVpbHRJbk5vdGlmaWNhdGlvbnNFbmFibGVk
Il0pCisgICAgICAgICAgICAgICAgW1ttX2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRF
bmFibGVkOllFUyBmb3JGZWF0dXJlOmZlYXR1cmVdOworICAgICAgICAgICAgZWxzZSBpZiAoW2Zl
YXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIlB1c2hBUElFbmFibGVkIl0pCisgICAgICAgICAg
ICAgICAgW1ttX2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JG
ZWF0dXJlOmZlYXR1cmVdOworICAgICAgICB9CisKKyAgICAgICAgbV90ZXN0TWVzc2FnZUhhbmRs
ZXIgPSBhZG9wdE5TKFtbVGVzdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgICAg
IFtbbV9jb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2Fn
ZUhhbmRsZXI6bV90ZXN0TWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3QiXTsKKworICAg
ICAgICBtX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW05vdGlmaWNhdGlv
blNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFtbbV9jb25maWd1
cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bV9u
b3RpZmljYXRpb25NZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAibm90ZSJdOwogICAgIH0KIAot
ICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdE1lc3NhZ2VIYW5kbGVyIGFs
bG9jXSBpbml0XSk7Ci0gICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0g
YWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6bWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAInN3Il07
Ci0gICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKLSAgICBbbWVzc2FnZUhhbmRsZXIgYWRk
TWVzc2FnZTpAIlJlYWR5IiB3aXRoSGFuZGxlcjpeewotICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICB2b2lkIGxvYWRSZXF1ZXN0KGNvbnN0IGNoYXIqIGh0bWxTb3VyY2UsIGNvbnN0IGNoYXIqIHNl
cnZpY2VXb3JrZXJTY3JpcHRTb3VyY2UpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3RhbnRzID0gUiJTUkMoCisgICAgICAgICAgICBjb25zdCBWQUxJRF9TRVJWRVJfS0VZ
ID0gIkJBMUh4enlpMVJVTTFiNXdqeHNuN25HeEFzencydTYxbTE2NGkzTXJBSXhIRjZZSzVoNFNE
WWljLWRSdVVfUkNQQ2ZBNWFxOW9qU3drNVkyRW1DbEJQcyI7CisgICAgICAgICAgICBjb25zdCBW
QUxJRF9TRVJWRVJfS0VZX1RIQVRfQ0FVU0VTX0lOSkVDVEVEX0ZBSUxVUkUgPSAiQkVBeGFVTW8x
czh0ak9SeEpmblNTdldoWWI0dTUxa2cxaFdUMnNfOWdwVjdaeGFyMXBGXzJCUThBbmN1QWRTMkJv
TGhONHFheHpCeTJDd0hFOEJCeldnIjsKKyAgICAgICAgKVNSQyI7CisgICAgICAgIG1fc2VydmVy
LnJlc2V0KG5ldyBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyKHsKKyAgICAgICAgICAgIHsgIi8i
LCB7IGh0bWxTb3VyY2UgfSB9LAorICAgICAgICAgICAgeyAiL2NvbnN0YW50cy5qcyIsIHsgeyB7
ICJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIgfSB9LCBjb25zdGFudHMg
fSB9LAorICAgICAgICAgICAgeyAiL3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQtVHlwZSIsICJhcHBs
aWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIHNlcnZpY2VXb3JrZXJTY3JpcHRTb3VyY2UgfSB9Cisg
ICAgICAgIH0sIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwKSk7CisK
KyAgICAgICAgbV93ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOm1fY29uZmlndXJh
dGlvbi5nZXQoKV0pOworICAgICAgICBbbV93ZWJWaWV3IGxvYWRSZXF1ZXN0Om1fc2VydmVyLT5y
ZXF1ZXN0KCldOworICAgIH0KKworICAgIH5XZWJQdXNoRFRlc3QoKQorICAgIHsKKyAgICAgICAg
Y2xlYW5VcFRlc3RXZWJQdXNoRChtX3RlbXBEaXJlY3RvcnkuZ2V0KCkpOworICAgIH0KKworICAg
IFJldGFpblB0cjxOU1VSTD4gbV90ZW1wRGlyZWN0b3J5OworICAgIFJldGFpblB0cjxXS1dlYnNp
dGVEYXRhU3RvcmU+IG1fZGF0YVN0b3JlOworICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1
cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247CisgICAgUmV0YWluUHRyPFRlc3RNZXNzYWdlSGFuZGxl
cj4gbV90ZXN0TWVzc2FnZUhhbmRsZXI7CisgICAgUmV0YWluUHRyPE5vdGlmaWNhdGlvblNjcmlw
dE1lc3NhZ2VIYW5kbGVyPiBtX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyPiBtX3NlcnZlcjsKKyAgICBSZXRh
aW5QdHI8V0tXZWJWaWV3PiBtX3dlYlZpZXc7Cit9OworCitURVNUX0YoV2ViUHVzaERUZXN0LCBI
YW5kbGVJbmplY3RlZFB1c2gpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGh0bWxTb3VyY2Ug
PSBSIlNXUkVTT1VSQ0UoCisgICAgPHNjcmlwdCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQ+CisgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICB7CisgICAgICAgIHdp
bmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3QucG9zdE1lc3NhZ2UobXNnKTsKKyAgICB9
CisKKyAgICBjb25zdCBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CisgICAgY2hhbm5l
bC5wb3J0MS5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IGxvZyhldmVudC5kYXRhKTsKKworICAgIG5h
dmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvc3cuanMnKS50aGVuKGFzeW5jICgpID0+
IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VX
b3JrZXIucmVhZHk7CisgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSBhd2FpdCByZWdpc3RyYXRp
b24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKKyAgICAgICAgICAgIHVzZXJWaXNpYmxlT25seTog
dHJ1ZSwKKyAgICAgICAgICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZ
CisgICAgICAgIH0pOworICAgICAgICByZWdpc3RyYXRpb24uYWN0aXZlLnBvc3RNZXNzYWdlKHtw
b3J0OiBjaGFubmVsLnBvcnQyfSwgW2NoYW5uZWwucG9ydDJdKTsKKyAgICB9KS5jYXRjaChmdW5j
dGlvbihlcnJvcikgeworICAgICAgICBsb2coIlJlZ2lzdHJhdGlvbiBmYWlsZWQgd2l0aDogIiAr
IGVycm9yKTsKKyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICApU1dSRVNPVVJDRSI7CisKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogc2VydmljZVdvcmtlclNvdXJjZSA9IFIiU1dSRVNPVVJDRSgK
KyAgICBsZXQgcG9ydDsKKyAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAoZXZl
bnQpID0+IHsKKyAgICAgICAgcG9ydCA9IGV2ZW50LmRhdGEucG9ydDsKKyAgICAgICAgcG9ydC5w
b3N0TWVzc2FnZSgiUmVhZHkiKTsKKyAgICB9KTsKKyAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIo
InB1c2giLCAoZXZlbnQpID0+IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmICghZXZl
bnQuZGF0YSkgeworICAgICAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiBu
dWxsIGRhdGEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LmRhdGEudGV4dCgpOworICAgICAgICAgICAgcG9y
dC5wb3N0TWVzc2FnZSgiUmVjZWl2ZWQ6ICIgKyB2YWx1ZSk7CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIkVycm9yOiAiICsgZSk7CisgICAgICAg
IH0KKyAgICB9KTsKKyAgICApU1dSRVNPVVJDRSI7CisKKyAgICBfX2Jsb2NrIGJvb2wgcmVhZHkg
PSBmYWxzZTsKKyAgICBfX2Jsb2NrIGJvb2wgZ290RXhwZWN0ZWRNZXNzYWdlID0gZmFsc2U7Cisg
ICAgW21fdGVzdE1lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRsZXI6
XnsKKyAgICAgICAgcmVhZHkgPSB0cnVlOwogICAgIH1dOwotICAgIFttZXNzYWdlSGFuZGxlciBh
ZGRNZXNzYWdlOkAiUmVjZWl2ZWQ6IEhlbGxvIFdvcmxkIiB3aXRoSGFuZGxlcjpeewotICAgICAg
ICBkb25lID0gdHJ1ZTsKKyAgICBbbV90ZXN0TWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpAIlJl
Y2VpdmVkOiBXaGVuIEkgZ3JvdyB1cCwgSSB3YW50IHRvIGJlIGEgd2F0ZXJtZWxvbiIgd2l0aEhh
bmRsZXI6XnsKKyAgICAgICAgZ290RXhwZWN0ZWRNZXNzYWdlID0gdHJ1ZTsKICAgICB9XTsKIAot
ICAgIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXIgc2VydmVyKHsKLSAgICAgICAgeyAiLyIsIHsg
bWFpblNXQnl0ZXMgfSB9LAotICAgICAgICB7ICIvc3cuanMiLCB7IHsgeyAiQ29udGVudC1UeXBl
IiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgc2NyaXB0Qnl0ZXMgfSB9Ci0gICAgfSwg
VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHApOworICAgIGxvYWRSZXF1
ZXN0KGh0bWxTb3VyY2UsIHNlcnZpY2VXb3JrZXJTb3VyY2UpOwogCi0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKLSAgICBb
d2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnJlYWR5KTsKIAotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7Ci0gICAgZG9uZSA9IGZhbHNlOworICAgIFN0cmluZyBidW5kbGVJZGVudGlmaWVyID0gImNv
bS5hcHBsZS5XZWJLaXQuVGVzdFdlYktpdEFQSSJfczsKKyAgICBTdHJpbmcgc2NvcGUgPSBtX3Nl
cnZlci0+cmVxdWVzdCgpLlVSTC5hYnNvbHV0ZVN0cmluZzsKKyAgICBTdHJpbmcgdG9waWMgPSBi
dW5kbGVJZGVudGlmaWVyICsgIiAiX3MgKyBzY29wZTsKIAotICAgIC8vIEluamVjdCBwdXNoIG1l
c3NhZ2UKLSAgICBhdXRvIGVuY29kZWRNZXNzYWdlID0gZW5jb2RlU3RyaW5nKCJjb20uYXBwbGUu
V2ViS2l0LlRlc3RXZWJLaXRBUEkiKTsKLSAgICBlbmNvZGVkTWVzc2FnZS5hcHBlbmRWZWN0b3Io
ZW5jb2RlU3RyaW5nKHNlcnZlci5yZXF1ZXN0KCkuVVJMLmFic29sdXRlU3RyaW5nKSk7Ci0gICAg
ZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVjdG9yKGVuY29kZVN0cmluZygiSGVsbG8gV29ybGQiKSk7
CisgICAgLy8gRnJvbSBleGFtcGxlIGluIFJGQzgyOTEgU2VjdGlvbiA1LgorICAgIFN0cmluZyBw
YXlsb2FkQmFzZTY0VVJMID0gIkRHdjZyYTFubFlnRENTMUZSbmJ6bHdBQUVBQkJCUDR6OUtzTjZu
R1JUYlZZSV9jN1ZKU1BRVEJ0a2djeTI3bWxtbE1vWklJZ0RsbDZlM3ZDWUxvY0lubVlXQW1TNlRs
ekFDOHdFcUtLNlBCcnUzamw3QV95bDk1YlFwdTZjVlBUcEs0TXFna2YxQ1h6dExWQlN0MktzM29a
d2J1d1hQWExXeW91QldMVldHTldRZXhTZ1N4c2pfUXVsY3k0YS1mTiJfczsKKyAgICBTdHJpbmcg
cGF5bG9hZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJhc2U2NFVSTERlY29kZShwYXls
b2FkQmFzZTY0VVJMKS52YWx1ZSgpKTsKKworICAgIC8vIFRoaXMgaXMgdGhlIGZvcm1hdCB0aGF0
IEFQUyB1c2VzIGZvciBkZWxpdmVyaW5nIHB1c2hlcy4KKyAgICBOU0RhdGEgKmRhdGEgPSBbTlNK
U09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6QHsKKyAgICAgICAgQCJ0b3BpYyI6
IChOU1N0cmluZyAqKXRvcGljLAorICAgICAgICBAInVzZXJJbmZvIjogQHsKKyAgICAgICAgICAg
IEAiY29udGVudF9lbmNvZGluZyI6IEAiYWVzMTI4Z2NtIiwKKyAgICAgICAgICAgIEAicGF5bG9h
ZCI6IChOU1N0cmluZyAqKXBheWxvYWRCYXNlNjQKKyAgICAgICAgfQorICAgIH0gb3B0aW9uczow
IGVycm9yOm51bGxwdHJdOworCisgICAgU3RyaW5nIG1lc3NhZ2UgeyBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyICo+KGRhdGEuYnl0ZXMpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGF0YS5sZW5ndGgp
IH07CisgICAgYXV0byBlbmNvZGVkTWVzc2FnZSA9IGVuY29kZVN0cmluZyhXVEZNb3ZlKG1lc3Nh
Z2UpKTsKIAogICAgIGF1dG8gdXRpbGl0eUNvbm5lY3Rpb24gPSBjcmVhdGVBbmRDb25maWd1cmVD
b25uZWN0aW9uVG9TZXJ2aWNlKCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2Ui
KTsKLSAgICBzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KHV0aWxpdHlDb25uZWN0
aW9uLmdldCgpLCA3LCBlbmNvZGVkTWVzc2FnZSk7CisgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbldh
aXRpbmdGb3JSZXBseSh1dGlsaXR5Q29ubmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OkluamVj
dEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZywgZW5jb2RlZE1lc3NhZ2UpOwogCiAgICAg
Ly8gRmV0Y2ggcHVzaCBtZXNzYWdlcworICAgIF9fYmxvY2sgYm9vbCBnb3RNZXNzYWdlcyA9IGZh
bHNlOwogICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+PiBtZXNz
YWdlczsKLSAgICBbZGF0YVN0b3JlIF9nZXRQZW5kaW5nUHVzaE1lc3NhZ2VzOl4oTlNBcnJheTxO
U0RpY3Rpb25hcnkgKj4gKnJhd01lc3NhZ2VzKSB7CisgICAgW21fZGF0YVN0b3JlIF9nZXRQZW5k
aW5nUHVzaE1lc3NhZ2VzOl4oTlNBcnJheTxOU0RpY3Rpb25hcnkgKj4gKnJhd01lc3NhZ2VzKSB7
CiAgICAgICAgIG1lc3NhZ2VzID0gcmF3TWVzc2FnZXM7Ci0gICAgICAgIGRvbmUgPSB0cnVlOwor
ICAgICAgICBnb3RNZXNzYWdlcyA9IHRydWU7CiAgICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKLSAgICBkb25lID0gZmFsc2U7CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZnb3RNZXNzYWdlcyk7CiAKICAgICBFWFBFQ1RfRVEoW21lc3NhZ2VzIGNvdW50
XSwgMXUpOwogCiAgICAgLy8gSGFuZGxlIHB1c2ggbWVzc2FnZQogICAgIF9fYmxvY2sgYm9vbCBw
dXNoTWVzc2FnZVByb2Nlc3NlZCA9IGZhbHNlOwotICAgIFtkYXRhU3RvcmUgX3Byb2Nlc3NQdXNo
TWVzc2FnZTpbbWVzc2FnZXMgZmlyc3RPYmplY3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oYm9vbCBy
ZXN1bHQpIHsKKyAgICBbbV9kYXRhU3RvcmUgX3Byb2Nlc3NQdXNoTWVzc2FnZTpbbWVzc2FnZXMg
Zmlyc3RPYmplY3RdIGNvbXBsZXRpb25IYW5kbGVyOl4oYm9vbCByZXN1bHQpIHsKICAgICAgICAg
cHVzaE1lc3NhZ2VQcm9jZXNzZWQgPSB0cnVlOwogICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZnb3RFeHBl
Y3RlZE1lc3NhZ2UpOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmcHVzaE1lc3NhZ2VQ
cm9jZXNzZWQpOworfQogCi0gICAgY2xlYW5VcFRlc3RXZWJQdXNoRCh0ZW1wRGlyZWN0b3J5KTsK
K1RFU1RfRihXZWJQdXNoRFRlc3QsIFN1YnNjcmliZVRlc3QpCit7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHNvdXJjZSA9IFIiSFRNTCgKKyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdp
c3RlcignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJh
dGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQg
cmVzdWx0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBzdWJzY3JpcHRp
b24gPSBhd2FpdCByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKKyAgICAgICAg
ICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICAgICAgYXBwbGljYXRp
b25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgcmVzdWx0ID0gc3Vic2NyaXB0aW9uLnRvSlNPTigpOworICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOworICAgICAgICB9CisgICAgICAg
IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2UocmVzdWx0KTsK
KyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisKKyAgICBfX2Jsb2NrIFJldGFp
blB0cjxpZD4gb2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAg
W21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XihpZCBtZXNz
YWdlKSB7CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAg
IH1dOworCisgICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEFTU0VSVF9UUlVFKFtvYmogaXNLaW5kT2ZDbGFzczpb
TlNEaWN0aW9uYXJ5IGNsYXNzXV0pOworCisgICAgTlNEaWN0aW9uYXJ5ICpzdWJzY3JpcHRpb24g
PSBvYmouZ2V0KCk7CisgICAgQVNTRVJUX1RSVUUoW3N1YnNjcmlwdGlvbltAImVuZHBvaW50Il0g
aGFzUHJlZml4OkAiaHR0cHM6Ly8iXSk7CisgICAgQVNTRVJUX1RSVUUoW3N1YnNjcmlwdGlvbltA
ImtleXMiXSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CisKKyAgICAvLyBT
aGFyZWQgYXV0aCBzZWNyZXQgc2hvdWxkIGJlIDE2IGJ5dGVzICgyMiBieXRlcyBpbiB1bnBhZGRl
ZCBiYXNlNjR1cmwpLgorICAgIEFTU0VSVF9FUShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdW0AiYXV0
aCJdIGxlbmd0aF0sIDIydSk7CisKKyAgICAvLyBDbGllbnQgcHVibGljIGtleSBzaG91bGQgYmUg
NjUgYnl0ZXMgKDg3IGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2NHVybCkuCisgICAgQVNTRVJUX0VR
KFtzdWJzY3JpcHRpb25bQCJrZXlzIl1bQCJwMjU2ZGgiXSBsZW5ndGhdLCA4N3UpOworfQorCitU
RVNUX0YoV2ViUHVzaERUZXN0LCBTdWJzY3JpYmVGYWlsdXJlVGVzdCkKK3sKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRz
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2Vy
LnJlZ2lzdGVyKCcvc3cuanMnKS50aGVuKGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVn
aXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7CisgICAgICAg
IGxldCByZXN1bHQgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHN1YnNj
cmlwdGlvbiA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoeworICAg
ICAgICAgICAgICAgIHVzZXJWaXNpYmxlT25seTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBhcHBs
aWNhdGlvblNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWV9USEFUX0NBVVNFU19JTkpFQ1RFRF9G
QUlMVVJFCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1YnNjcmlwdGlv
bi50b0pTT04oKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmVzdWx0ID0g
IkVycm9yOiAiICsgZTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VI
YW5kbGVycy5ub3RlLnBvc3RNZXNzYWdlKHJlc3VsdCk7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+
CisgICAgKUhUTUwiOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG9iaiA9IG5pbDsKKyAg
ICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFttX25vdGlmaWNhdGlvbk1lc3NhZ2VI
YW5kbGVyIHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQgbWVzc2FnZSkgeworICAgICAgICBvYmogPSBt
ZXNzYWdlOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0
KHNvdXJjZSwgIiIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAg
ICAvLyBTcGVjIHNheXMgdGhhdCBhbiBlcnJvciBpbiB0aGUgcHVzaCBzZXJ2aWNlIHNob3VsZCBi
ZSBhbiBBYm9ydEVycm9yLgorICAgIEFTU0VSVF9UUlVFKFtvYmogaXNLaW5kT2ZDbGFzczpbTlNT
dHJpbmcgY2xhc3NdXSk7CisgICAgQVNTRVJUX1RSVUUoW29iaiBoYXNQcmVmaXg6QCJFcnJvcjog
QWJvcnRFcnJvciJdKTsKK30KKworVEVTVF9GKFdlYlB1c2hEVGVzdCwgVW5zdWJzY3JpYmVUZXN0
KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzb3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlw
dCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgbmF2aWdh
dG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4gewor
ICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtl
ci5yZWFkeTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2Vy
LnN1YnNjcmliZSh7CisgICAgICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAg
ICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGxldCByZXN1bHQxID0gYXdhaXQgc3Vic2NyaXB0aW9u
LnVuc3Vic2NyaWJlKCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0MiA9IGF3YWl0IHN1YnNjcmlw
dGlvbi51bnN1YnNjcmliZSgpOworICAgICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdDEsIHJlc3Vs
dDJdOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6
ICIgKyBlOworICAgICAgICB9CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJz
Lm5vdGUucG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICAp
SFRNTCI7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2JqID0gbmlsOworICAgIF9fYmxv
Y2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIg
c2V0TWVzc2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3Qoc291cmNl
LCAiIik7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIC8vIEZp
cnN0IHVuc3Vic2NyaWJlIHNob3VsZCBzdWNjZWVkLiBTZWNvbmQgb25lIHNob3VsZCBmYWlsIHNp
bmNlIHRoZSBmaXJzdCBvbmUgcmVtb3ZlZCB0aGUgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlLgor
ICAgIGlkIGV4cGVjdGVkID0gQFtAKDEpLCBAKDApXTsKKyAgICBBU1NFUlRfVFJVRShbb2JqIGlz
RXF1YWw6ZXhwZWN0ZWRdKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450382</attachid>
            <date>2022-01-30 22:52:26 -0800</date>
            <delta_ts>2022-01-31 13:49:29 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>bug-235857-20220130225225.patch</filename>
            <type>text/plain</type>
            <size>88293</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGU5ZTNmZGIxMzQ1Zjc0Mzg4ZWJmYTkw
MTYwOGFmNmQ0MDUyYTFmNDYuLmI0ZTZjODEyYTQ2NjdkNDA1YjBjNWI5YzdiNDNkMDc3ZWI2NWEy
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgUHVzaEFQSUVuYWJsZWQgdG8gV2ViS2l0TGVn
YWN5IHNvIHdlIGNhbiBlbmFibGUgaXQgb24gaW4gQVBJIHRlc3RzIHZpYSBfV0tFeHBlcmltZW50
YWxGZWF0dXJlLgorCisgICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sOgorCiAyMDIyLTAxLTMwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIEltcG9ydCBBUFNDb25uZWN0aW9uLXJlbGF0ZWQgU1BJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDZiMmRkZDk4YjgzMjcwZGRhMTIzYzViMDI2NmExMWU1NGVhZDBiYWMuLmY1ZGQ1NDI5ZjU0
N2IyZTVmMjRiNjkyZWYzZmM1Nzk5YjMxY2NlNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAK
KzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1
c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGFkZHMgUHVzaFNlcnZpY2UgdG8gd2VicHVzaGQuIEl0IGhhbmRsZXMgcmVxdWVzdHMg
dG8gY3JlYXRlLCByZW1vdmUsIGFuZCBnZXQgcHVzaAorICAgICAgICBzdWJzY3JpcHRpb25zLiBJ
dCBhbHNvIGRlY3J5cHRzIGluY29taW5nIHB1c2hlcyBhbmQgcGFzcyB0aGVtIGJhY2sgdG8gdGhl
IFVJIHByb2Nlc3MgdmlhIHRoZQorICAgICAgICBleGlzdGluZyBtYWNoaW5lcnkgaW4gV2ViUHVz
aERhZW1vbi4KKworICAgICAgICBQdXNoU2VydmljZSBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGgg
dHdvIG9iamVjdHM6CisKKyAgICAgICAgMS4gUHVzaFNlcnZpY2VDb25uZWN0aW9uOiB0aGlzIGNy
ZWF0ZXMgYW5kIHJlbW92ZXMgcHVzaCBzdWJzY3JpcHRpb25zIGZyb20gdGhlIHB1c2ggc2VydmVy
LgorICAgICAgICAgICBJdCBhbHNvIHJlY2VpdmVzIGluY29taW5nIHB1c2hlcyBmcm9tIHRoZSBw
dXNoIHNlcnZlci4KKyAgICAgICAgMi4gUHVzaERhdGFiYXNlOiB0aGlzIHBlcnNpc3RzIHB1c2gg
c3Vic2NyaXB0aW9ucyB0byBkaXNrLgorCisgICAgICAgIFNldmVyYWwgdGhpbmdzIGFyZSBub3Qg
eWV0IGltcGxlbWVudGVkOyBmb3IgaW5zdGFuY2UsIHdlIGN1cnJlbnRseSBhbHdheXMgZ3JhbnQg
YSBwYWdlIHRoZQorICAgICAgICBwZXJtaXNzaW9uIHRvIHJlY2VpdmUgcHVzaGVzLiBUaGlzIHdp
bGwgYmUgZml4ZWQgaW4gZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBuZXcg
QVBJIHRlc3RzLiBUaGUgY3VycmVudCB0ZXN0cyB1c2UgYSBGYWtlUHVzaFNlcnZpY2VDb25uZWN0
aW9uIHRoYXQgdmVuZHMKKyAgICAgICAgc3Vic2NyaXB0aW9uIHdpdGggZml4ZWQgZGF0YSwgYnV0
IHRoaXMgY2FuIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBTaGFyZWQv
QVBJL0NvY29hL1dLTWFpbi5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1t
OgorICAgICAgICAoV0tXZWJQdXNoRGFlbW9uTWFpbik6CisgICAgICAgICogU2hhcmVkL1dlYlB1
c2hEYWVtb25Db25zdGFudHMuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHVzaEQ6Om1lc3NhZ2VU
eXBlU2VuZHNSZXBseSk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogd2VicHVzaGQvRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOgorICAg
ICAgICAqIHdlYnB1c2hkL0Zha2VQdXNoU2VydmljZUNvbm5lY3Rpb24ubW06CisgICAgICAgIChX
ZWJQdXNoRDo6RmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKToK
KyAgICAgICAgKFdlYlB1c2hEOjpGYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdWJzY3JpYmUp
OgorICAgICAgICAoV2ViUHVzaEQ6OkZha2VQdXNoU2VydmljZUNvbm5lY3Rpb246OnVuc3Vic2Ny
aWJlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6
UHVzaFNlcnZpY2U6OmRhdGFiYXNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6
ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZS5t
bTogQWRkZWQuCisgICAgICAgIChXZWJQdXNoRDo6dXBkYXRlVG9waWNMaXN0cyk6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVz
aFNlcnZpY2U6OmNyZWF0ZUZha2VTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vy
dmljZTo6UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6Om1ha2VQdXNoU3Vic2NyaXB0
aW9uRnJvbVJlY29yZCk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1c2hUb3BpYyk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0OjpidW5kbGVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OnNjb3BlKToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OlB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1w
bCk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6ZnVsZmlsbCk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6cmVqZWN0KToKKyAg
ICAgICAgKFdlYlB1c2hEOjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpHZXRTdWJzY3JpcHRpb25S
ZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpzdGFy
dEludGVybmFsKToKKyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjpTdWJzY3Jp
YmVSZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjpzdGFydElt
cGwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OmF0dGVtcHRUb1JlY292
ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcik6CisgICAgICAgIChXZWJQdXNoRDo6VW5z
dWJzY3JpYmVSZXF1ZXN0OjpVbnN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6
OlVuc3Vic2NyaWJlUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJQdXNoRDo6
UHVzaFNlcnZpY2U6OmVucXVldWVQdXNoU2VydmljZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVz
aEQ6OlB1c2hTZXJ2aWNlOjpmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAgIChX
ZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmdldFN1YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnN1YnNjcmliZSk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChX
ZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnVuc3Vic2NyaWJlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
UHVzaEQ6Om1ha2VSYXdQdXNoTWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZp
Y2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZSk6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLmg6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVD
bGllbnRLZXlzKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmg6CisgICAgICAg
ICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hEOjpNZXNzYWdl
SW5mbzo6aW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBseSk6
CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdGFydEZha2VQdXNoU2VydmljZSk6CisgICAg
ICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdGFydFB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1
c2hEOjpEYWVtb246OnNldFB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OnJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9u
OjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246Omlu
amVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJQdXNoRDo6
RGFlbW9uOjpoYW5kbGVJbmNvbWluZ1B1c2gpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6
Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcyk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdWJz
Y3JpYmVUb1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnVuc3Vic2Ny
aWJlRnJvbVB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OmdldFB1c2hT
dWJzY3JpcHRpb24pOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0UHVzaFBlcm1pc3Np
b25TdGF0ZSk6CisgICAgICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaDoKKyAgICAg
ICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIHdlYnB1c2hkL3dlYnB1c2hkLmNwcDoKKyAgICAg
ICAgKG1haW4pOgorCiAyMDIyLTAxLTMwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZvcndhcmQgbWVzc2FnZXMgZnJvbSBOZXR3b3JrUHJvY2VzcyB0byB3ZWJwdXNoZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJl
ZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCA3YTRkMzY0NjNlYzU1MGMwZjNlYWQ0YTdh
MjVkNTMxOWZlZjNhZjVlLi4wZTZlYzlkZWYxY2U1YTg4YzgwYmI3ZTRiMWEzMTJmZmUwYmE1NDQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5j
ZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMv
V2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAtMTEyMiw2ICsxMTIyLDggQEAgUHVz
aEFQSUVuYWJsZWQ6CiAgIGRlZmF1bHRWYWx1ZToKICAgICBXZWJDb3JlOgogICAgICAgZGVmYXVs
dDogZmFsc2UKKyAgICBXZWJLaXRMZWdhY3k6CisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdl
YktpdDoKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2Nv
YS9XS01haW4uaAppbmRleCAzMDM3OGY4NTUzYWZmNWMzZGEzNGZiOThmMjM3YmFlMTU2OTgwM2Ey
Li45Y2Y4NGQyNzQ0ZmE3ZGViZmIwNzFkZjEyM2VkMTI2OWE0N2Y1Mjc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiBXS19FWFBPUlQgaW50IFdLWFBDU2VydmljZU1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIq
KiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIFdLX0VY
UE9SVCBpbnQgV0tBZEF0dHJpYnV0aW9uRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioq
IGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7Ci1XS19FWFBPUlQgaW50IFdLV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNo
YXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOworV0tfRVhQT1JUIGludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0Nv
Y29hL1dLTWFpbi5tbQppbmRleCBkZTJlOWY3YTViZDU1ZjkxZGU4N2UxYTkzYWFmODkwNzNkZmJm
ZDQxLi45N2Q3ODVmNjlmMjYxYWFmY2UyNWQ4ZDkxNzY3MTQ0ZjIzZTllMDUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4ubW0KQEAgLTQwLDcgKzQwLDcgQEAgaW50IFdL
QWRBdHRyaWJ1dGlvbkRhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KQogICAg
IHJldHVybiBXZWJLaXQ6OlBDTURhZW1vbk1haW4oYXJnYywgYXJndik7CiB9CiAKLWludCBXS1dl
YlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKK2ludCBXS1dlYlB1
c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICByZXR1cm4gV2ViS2l0
OjpXZWJQdXNoRGFlbW9uTWFpbihhcmdjLCBhcmd2KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAppbmRleCBmYzQ3ZGM0ZjEyNzQ4NzI0YjFiNTdj
NTcyYzE0OWIzODc4ZWMwYTViLi5mM2Y3YmJlNjNmNGVkMzVlZGNmM2UyYWFhZDkzZmIzZTQ5Mjlm
Zjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3Rh
bnRzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5o
CkBAIC00Myw2ICs0Myw3IEBAIGVudW0gY2xhc3MgTWVzc2FnZVR5cGUgOiB1aW50OF90IHsKICAg
ICBTZXREZWJ1Z01vZGVJc0VuYWJsZWQsCiAgICAgVXBkYXRlQ29ubmVjdGlvbkNvbmZpZ3VyYXRp
b24sCiAgICAgSW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nLAorICAgIEluamVjdEVuY3J5cHRl
ZFB1c2hNZXNzYWdlRm9yVGVzdGluZywKICAgICBHZXRQZW5kaW5nUHVzaE1lc3NhZ2VzLAogICAg
IFN1YnNjcmliZVRvUHVzaFNlcnZpY2UsCiAgICAgVW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2Us
CkBAIC01OSw2ICs2MCw3IEBAIGlubGluZSBib29sIG1lc3NhZ2VUeXBlU2VuZHNSZXBseShNZXNz
YWdlVHlwZSBtZXNzYWdlVHlwZSkKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpSZXF1ZXN0U3lzdGVt
Tm90aWZpY2F0aW9uUGVybWlzc2lvbjoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpHZXRQZW5kaW5n
UHVzaE1lc3NhZ2VzOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdFB1c2hNZXNzYWdlRm9y
VGVzdGluZzoKKyAgICBjYXNlIE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2Fn
ZUZvclRlc3Rpbmc6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6U3Vic2NyaWJlVG9QdXNoU2Vydmlj
ZToKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpVbnN1YnNjcmliZUZyb21QdXNoU2VydmljZToKICAg
ICBjYXNlIE1lc3NhZ2VUeXBlOjpHZXRQdXNoU3Vic2NyaXB0aW9uOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGVlNjU0OTQ3YzQwOTc0
MDIxNDEwMmRjMzMzM2RiNWRhNjZiMWMwZi4uMmViOTE3NDA3OWQ3MzA4Y2UwZTFhZjFiNDFhMWI4
Mzk0OGUyMjQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC05NDMsNyArOTQzLDcgQEAKIAkJNTEyOTM1RTQxMjg4RDk3ODAwQTRCNjk1
IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUg
LyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJNTEyOUVC
MTIyM0QwREU3QjAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyOUVCMTEyM0QwREU3ODAwQUYxQ0Q3
IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oICovOyB9OwogCQk1MTJDRDY5ODI3MjFFRkM4MDBGN0Y4
RUMgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk3MjcyMUVGQzMwMEY3RjhFQyAvKiBXZWJQdXNo
RGFlbW9uQ29ubmVjdGlvbi5oICovOyB9OwotCQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyog
V2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEyQ0Q2OTkyNzIxRjA0OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25D
b25zdGFudHMuaCAqLzsgfTsKKwkJNTEyQ0Q2OUEyNzIxRjBBOTAwRjdGOEVDIC8qIFdlYlB1c2hE
YWVtb25Db25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMkNENjk5MjcyMUYwNDkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEy
RTM0RTUxMzBCNEQwNTAwQUJEMTlBIC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0EzM0I0MTMwQjMw
OEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyRUNDMzUyNzE5NkFEQjAwMDg5
QjY2IC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCOTMwRkUyNkU4MDIxNjAwMzJCMUMw
IC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVjdGlvbi5oICovOyB9OwogCQk1MTJGNTg5
NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4OEYxMkE4ODM4
ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCAqLzsgfTsKQEAgLTE5
OTUsNiArMTk5NSw4IEBACiAJCUU1Q0JBNzY3MjdBMzE4RTEwMERGNzg1OCAvKiBVbmlmaWVkU291
cmNlMTE5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU1Q0JBNzYwMjdBMzE4NzkwMERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCAqLzsgfTsK
IAkJRTVDQkE3NjgyN0EzMThFMTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVDQkE3NjIyN0EzMTg3
OTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwICovOyB9OwogCQlFNURFRkE2ODI2RjhG
NDI2MDBBQjY4REIgLyogUGhvdG9zVUlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU1REVGQTY3MjZGOEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQ
SS5oICovOyB9OworCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMzZCMTY2MjdB
N0I0NTAwMDUwRTAwRCAvKiBQdXNoU2VydmljZS5oICovOyB9OworCQlFQjM2QjE2OTI3QTdCNDUw
MDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2Uu
bW0gKi87IH07CiAJCUVCQThEM0FCMjdBNUUzMTMwMENCNzkwMCAvKiBBcHBsZVB1c2hTZXJ2aWNl
U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4
RDNBQTI3QTVFMzEzMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZVNQSS5oICovOyB9OwogCQlF
QkE4RDNCMjI3QTVFMzNGMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQzI3
QTVFMzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi87IH07CiAJ
CUVCQThEM0IzMjdBNUUzM0YwMENCNzkwMCAvKiBGYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBRDI3
QTVFMzNFMDBDQjc5MDAgLyogRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovOyB9OwpAQCAt
NjQ0Niw2ICs2NDQ4LDggQEAKIAkJRTVERUZBNjcyNkY4RjQyNjAwQUI2OERCIC8qIFBob3Rvc1VJ
U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rvc1VJU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUVCMEQzMTJEMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0Lndl
YnB1c2hkLm1hYy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFw
cGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUVCMEQzMTJFMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hk
Lmlvcy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndl
YmtpdC53ZWJwdXNoZC5pb3MucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVC
MzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQdXNoU2VydmljZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQdXNoU2VydmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQdXNoU2VydmljZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUEyN0E1RTMxMzAwQ0I3OTAwIC8qIEFwcGxlUHVz
aFNlcnZpY2VTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGVQdXNo
U2VydmljZVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkE4RDNBQzI3QTVF
MzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUQyN0E1RTMzRTAwQ0I3OTAw
IC8qIEZha2VQdXNoU2VydmljZUNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTAwNzMsNiArMTAwNzcsOCBAQAogCQkJCTUxNjBFOTU4Mjc0QzBEODgwMDU2
NzM4OCAvKiBQdXNoQXBwQnVuZGxlLm1tICovLAogCQkJCTUxRjdCQjc5Mjc0NEM1MDcwMEM0NUE3
MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oICovLAogCQkJCTUxRjdCQjdBMjc0NEM1MDcwMEM0
NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5tbSAqLywKKwkJCQlFQjM2QjE2NjI3QTdCNDUw
MDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCAqLywKKwkJCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUw
MEQgLyogUHVzaFNlcnZpY2UubW0gKi8sCiAJCQkJRUJBOEQzQUYyN0E1RTMzRjAwQ0I3OTAwIC8q
IFB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovLAogCQkJCUVCQThEM0IxMjdBNUUzM0YwMENCNzkw
MCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8sCiAJCQkJNTE3QjVGNzcyNzVFOTc5NTAw
MkRDMjJEIC8qIHdlYnB1c2hkLmNwcCAqLywKQEAgLTEzMjI2LDYgKzEzMjMyLDcgQEAKIAkJCQk1
MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3Nh
Z2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUw
MEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUVCQThEM0I1MjdBNUUzM0Yw
MENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
RTY4ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTBDMjI3RTI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29m
dExpbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMTU0ODAsNiArMTU0ODcsNyBAQAogCQkJCTJENTRD
MzFCMjEyRjREQTYwMDQ5QzE3NCAvKiBQcm9jZXNzTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTE3QjVGODIyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MTdCNUY3QjI3NUU5N0E5MDAyREMyMkQgLyogUHVzaENsaWVudENvbm5l
Y3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyog
UHVzaFNlcnZpY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlFQkE4RDNCNzI3QTVFMzNGMDBDQjc5
MDAgLyogUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIy
N0YyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyNUUyNDM1NzVDRDAwRUQ2MTREIC8qIFF1aWNrTG9va1Ro
dW1ibmFpbExvYWRlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9GYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL0Zha2VQdXNoU2VydmljZUNvbm5lY3Rpb24uaAppbmRleCAzOGU4NTViYjQ0MTRkZWIy
MjFiZTdhYzBjNDdiYTU4YjFkYzNkZDE0Li5iNDk5MmFiZmU1YWRiYTFjYjM5NjcwNmU3OGFhYmVh
NzUzMTYxMzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaApAQCAtMzcsNiArMzcsOCBAQCBwdWJsaWM6CiAgICAgRmFrZVB1c2hT
ZXJ2aWNlQ29ubmVjdGlvbigpOwogICAgIHZpcnR1YWwgfkZha2VQdXNoU2VydmljZUNvbm5lY3Rp
b24oKTsKIAorICAgIFdlYkNvcmU6OlB1c2hDcnlwdG86OkNsaWVudEtleXMgZ2VuZXJhdGVDbGll
bnRLZXlzKCkgZmluYWw7CisKICAgICB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJpbmcmIHRvcGlj
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBTdWJzY3JpYmVIYW5kbGVy
JiYpIGZpbmFsOwogICAgIHZvaWQgdW5zdWJzY3JpYmUoY29uc3QgU3RyaW5nJiB0b3BpYywgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgVW5zdWJzY3JpYmVIYW5kbGVyJiYp
IGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNoU2Vy
dmljZUNvbm5lY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0Zha2VQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24ubW0KaW5kZXggY2EzMTM3NmVjZGEzYzY1NTI2MjQ5NWQ2NGVlZTA4ODYyOGQy
NWNiMi4uYmEzN2FhZWE4ZTcxNDE3N2JlYjExYjkyZGQ0OGNhMjRmOTRjMGJkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9GYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvRmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpA
QCAtMjYsNiArMjYsMTAgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRmFrZVB1c2hT
ZXJ2aWNlQ29ubmVjdGlvbi5oIgogCisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU6OlB1c2hDcnlwdG87CisKIG5hbWVzcGFjZSBXZWJQdXNoRCB7
CiAKIEZha2VQdXNoU2VydmljZUNvbm5lY3Rpb246OkZha2VQdXNoU2VydmljZUNvbm5lY3Rpb24o
KQpAQCAtMzQsMTQgKzM4LDMwIEBAIEZha2VQdXNoU2VydmljZUNvbm5lY3Rpb246OkZha2VQdXNo
U2VydmljZUNvbm5lY3Rpb24oKQogCiBGYWtlUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp+RmFrZVB1
c2hTZXJ2aWNlQ29ubmVjdGlvbigpID0gZGVmYXVsdDsKIAotdm9pZCBGYWtlUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiwgU3Vic2NyaWJlSGFuZGxlciYmIGhhbmRsZXIpCitDbGllbnRLZXlzIEZha2VQdXNoU2Vydmlj
ZUNvbm5lY3Rpb246OmdlbmVyYXRlQ2xpZW50S2V5cygpCiB7Ci0gICAgaGFuZGxlcih7IH0sIFtO
U0Vycm9yIGVycm9yV2l0aERvbWFpbjpOU0NvY29hRXJyb3JEb21haW4gY29kZTpOU0ZlYXR1cmVV
bnN1cHBvcnRlZEVycm9yIHVzZXJJbmZvOm5pbF0pOworICAgIC8vIEV4YW1wbGUgdmFsdWVzIGZy
b20gUkZDODI5MSBTZWN0aW9uIDUuCisgICAgYXV0byBwdWJsaWNLZXkgPSBiYXNlNjRVUkxEZWNv
ZGUoIkJDVnhzcjdOX2VOZ1ZScXZIdEQwelRac0VjNi1WVi1KdkxleGhxVXpPUmN4YU96aTYtQVlX
WHZUQkhtNGJqeVBqczdWZDhwWkdINlNScGtOdG9JQWl3NCJfcykudmFsdWUoKTsKKyAgICBhdXRv
IHByaXZhdGVLZXkgPSBiYXNlNjRVUkxEZWNvZGUoInExZFhwdzNVcFQ1Vk9tdV9jZl92NmloMDdB
ZW1zM25qeEktSldnTGNNOTQiX3MpLnZhbHVlKCk7CisgICAgYXV0byBzZWNyZXQgPSBiYXNlNjRV
UkxEZWNvZGUoIkJUQlpNcUhINnI0VHRzN0pfYVNJZ2ciX3MpLnZhbHVlKCk7CisKKyAgICByZXR1
cm4gQ2xpZW50S2V5cyB7IFAyNTZESEtleVBhaXIgeyBXVEZNb3ZlKHB1YmxpY0tleSksIFdURk1v
dmUocHJpdmF0ZUtleSkgfSwgV1RGTW92ZShzZWNyZXQpIH07Cit9CisKK3ZvaWQgRmFrZVB1c2hT
ZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQorewor
ICAgIGF1dG8gYWx3YXlzUmVqZWN0ZWRLZXkgPSBiYXNlNjRVUkxEZWNvZGUoIkJFQXhhVU1vMXM4
dGpPUnhKZm5TU3ZXaFliNHU1MWtnMWhXVDJzXzlncFY3WnhhcjFwRl8yQlE4QW5jdUFkUzJCb0xo
TjRxYXh6QnkyQ3dIRThCQnpXZyJfcykudmFsdWUoKTsKKyAgICBpZiAodmFwaWRQdWJsaWNLZXkg
PT0gYWx3YXlzUmVqZWN0ZWRLZXkpIHsKKyAgICAgICAgaGFuZGxlcih7IH0sIFtOU0Vycm9yIGVy
cm9yV2l0aERvbWFpbjpAIldlYlB1c2giIGNvZGU6LTEgdXNlckluZm86bmlsXSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBoYW5kbGVyKEAiaHR0cHM6Ly93ZWJraXQub3JnL3B1c2gi
LCBuaWwpOwogfQogCiB2b2lkIEZha2VQdXNoU2VydmljZUNvbm5lY3Rpb246OnVuc3Vic2NyaWJl
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFVuc3Vic2NyaWJlSGFuZGxl
ciYmIGhhbmRsZXIpCiB7Ci0gICAgaGFuZGxlcih7IH0sIFtOU0Vycm9yIGVycm9yV2l0aERvbWFp
bjpOU0NvY29hRXJyb3JEb21haW4gY29kZTpOU0ZlYXR1cmVVbnN1cHBvcnRlZEVycm9yIHVzZXJJ
bmZvOm5pbF0pOworICAgIGhhbmRsZXIodHJ1ZSwgbmlsKTsKIH0KIAogVmVjdG9yPFN0cmluZz4g
RmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6ZW5hYmxlZFRvcGljcygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1B1c2hTZXJ2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzU0ODlhZjkwY2JhYjA0MTJkMGNmNzE2YTg5
NGM3ZGFjNTg5OTY1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
UHVzaFNlcnZpY2UuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJQdXNo
TWVzc2FnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRXhjZXB0aW9uRGF0YS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUHVzaERhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QdXNoU3Vic2NyaXB0
aW9uRGF0YS5oPgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJQ
dXNoRCB7CisKK2NsYXNzIEdldFN1YnNjcmlwdGlvblJlcXVlc3Q7CitjbGFzcyBQdXNoU2Vydmlj
ZVJlcXVlc3Q7CitjbGFzcyBTdWJzY3JpYmVSZXF1ZXN0OworY2xhc3MgVW5zdWJzY3JpYmVSZXF1
ZXN0OworCitjbGFzcyBQdXNoU2VydmljZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgdXNpbmcgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIgPSBGdW5jdGlv
bjx2b2lkKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVz
c2FnZSYmKT47CisKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGUoY29uc3QgU3RyaW5nJiBpbmNvbWlu
Z1B1c2hTZXJ2aWNlTmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgsIEluY29taW5nUHVz
aE1lc3NhZ2VIYW5kbGVyJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRy
PFB1c2hTZXJ2aWNlPiYmKT4mJik7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlRmFrZVNlcnZpY2Uo
SW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6
OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmKTsKKyAgICB+UHVzaFNlcnZpY2UoKTsKKwor
ICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVj
dGlvbjsgfQorICAgIFdlYkNvcmU6OlB1c2hEYXRhYmFzZSYgZGF0YWJhc2UoKSB7IHJldHVybiBt
X2RhdGFiYXNlOyB9CisKKyAgICB2b2lkIGdldFN1YnNjcmlwdGlvbihjb25zdCBTdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgRXhwZWN0ZWQ8c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9u
RGF0YT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYpOworICAgIHZvaWQgc3Vic2NyaWJl
KGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YT4mKT4mJik7CisgICAgdm9pZCB1bnN1YnNjcmliZShjb25zdCBTdHJpbmcm
IGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFdlYkNvcmU6OlB1c2hTdWJz
Y3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVk
PGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYpOworCisgICAgdm9pZCBkaWRDb21w
bGV0ZUdldFN1YnNjcmlwdGlvblJlcXVlc3QoR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCYpOworICAg
IHZvaWQgZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KFN1YnNjcmliZVJlcXVlc3QmKTsKKyAg
ICB2b2lkIGRpZENvbXBsZXRlVW5zdWJzY3JpYmVSZXF1ZXN0KFVuc3Vic2NyaWJlUmVxdWVzdCYp
OworCisgICAgdm9pZCBkaWRSZWNlaXZlUHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBOU0Rp
Y3Rpb25hcnkgKnVzZXJJbmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0p
OworCitwcml2YXRlOgorICAgIFB1c2hTZXJ2aWNlKFVuaXF1ZVJlZjxQdXNoU2VydmljZUNvbm5l
Y3Rpb24+JiYsIFVuaXF1ZVJlZjxXZWJDb3JlOjpQdXNoRGF0YWJhc2U+JiYsIEluY29taW5nUHVz
aE1lc3NhZ2VIYW5kbGVyJiYpOworCisgICAgdXNpbmcgUHVzaFNlcnZpY2VSZXF1ZXN0TWFwID0g
SGFzaE1hcDxzdGQ6OnR1cGxlPFN0cmluZywgU3RyaW5nPiwgRGVxdWU8c3RkOjp1bmlxdWVfcHRy
PFB1c2hTZXJ2aWNlUmVxdWVzdD4+PjsKKyAgICB2b2lkIGVucXVldWVQdXNoU2VydmljZVJlcXVl
c3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiwgc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlUmVx
dWVzdD4mJik7CisgICAgdm9pZCBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2Vydmlj
ZVJlcXVlc3RNYXAmLCBQdXNoU2VydmljZVJlcXVlc3QmKTsKKworICAgIFVuaXF1ZVJlZjxQdXNo
U2VydmljZUNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6
UHVzaERhdGFiYXNlPiBtX2RhdGFiYXNlOworCisgICAgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRs
ZXIgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcjsKKworICAgIFB1c2hTZXJ2aWNlUmVxdWVz
dE1hcCBtX2dldFN1YnNjcmlwdGlvblJlcXVlc3RzOworICAgIFB1c2hTZXJ2aWNlUmVxdWVzdE1h
cCBtX3N1YnNjcmliZVJlcXVlc3RzOworICAgIFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCBtX3Vuc3Vi
c2NyaWJlUmVxdWVzdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJQdXNoRApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbSBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvUHVzaFNlcnZpY2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjVkY2E3MDAxNzU0ZDAzYjkzMDRh
MDJmNjRmNTk4ZWNkMTEwNDFmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2UubW0KQEAgLTAsMCArMSw1OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlB1c2hTZXJ2aWNlLmgiCisKKyNpbXBvcnQgIkFwcGxl
UHVzaFNlcnZpY2VDb25uZWN0aW9uLmgiCisjaW1wb3J0ICJGYWtlUHVzaFNlcnZpY2VDb25uZWN0
aW9uLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvUHVzaE1lc3NhZ2VDcnlwdG8uaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQgPHd0Zi9PU09iamVjdFB0ci5oPgorI2lt
cG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgorI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+
CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitzdGF0
aWMgdm9pZCB1cGRhdGVUb3BpY0xpc3RzKFB1c2hTZXJ2aWNlQ29ubmVjdGlvbiYgY29ubmVjdGlv
biwgUHVzaERhdGFiYXNlJiBkYXRhYmFzZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBkYXRhYmFzZS5nZXRUb3BpY3NCeVdha2VTdGF0ZShbJmNv
bm5lY3Rpb24sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KGF1dG8mJiB0b3BpY01hcCkgbXV0YWJsZSB7CisgICAgICAgIC8vIEZJWE1FOiBtb3ZlIHRvcGlj
cyB0byBpZ25vcmVkIGxpc3QgYmFzZWQgb24gdXNlciBwcmVmZXJlbmNlcy4KKyAgICAgICAgUHVz
aFNlcnZpY2VDb25uZWN0aW9uOjpUb3BpY0xpc3RzIHRvcGljTGlzdHM7CisKKyAgICAgICAgaWYg
KGF1dG8gaXQgPSB0b3BpY01hcC5maW5kKFB1c2hXYWtlU3RhdGU6Oldha2luZyk7IGl0ICE9IHRv
cGljTWFwLmVuZCgpKQorICAgICAgICAgICAgc3RkOjpzd2FwKHRvcGljTGlzdHMuZW5hYmxlZFRv
cGljcywgaXQtPnZhbHVlKTsKKyAgICAgICAgaWYgKGF1dG8gaXQgPSB0b3BpY01hcC5maW5kKFB1
c2hXYWtlU3RhdGU6Ok9wcG9ydHVuaXN0aWMpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKKyAgICAg
ICAgICAgIHN0ZDo6c3dhcCh0b3BpY0xpc3RzLm9wcG9ydHVuaXN0aWNUb3BpY3MsIGl0LT52YWx1
ZSk7CisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpO
b25XYWtpbmcpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh0
b3BpY0xpc3RzLm5vbldha2luZ1RvcGljcywgaXQtPnZhbHVlKTsKKworICAgICAgICBjb25uZWN0
aW9uLnNldFRvcGljTGlzdHMoV1RGTW92ZSh0b3BpY0xpc3RzKSk7CisKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKworI2lmIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNF
X1VSTF9UT0tFTl9TVVBQT1JUKQorCit2b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGUoY29uc3QgU3Ry
aW5nJiBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgs
IEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgbWVzc2FnZUhhbmRsZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKT4mJiBjcmVhdGlvbkhh
bmRsZXIpCit7CisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGFkb3B0T1NPYmplY3Qob3NfdHJhbnNh
Y3Rpb25fY3JlYXRlKCJjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnB1c2gtc2VydmljZS1pbml0
IikpOworCisgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uIEFTQVAgc28gdGhhdCB3ZSBib290
c3RyYXBfY2hlY2tfaW4gdG8gdGhlIHNlcnZpY2UgaW4gYSB0aW1lbHkgbWFubmVyLgorICAgIGF1
dG8gY29ubmVjdGlvbiA9IG1ha2VVbmlxdWVSZWY8QXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24+
KGluY29taW5nUHVzaFNlcnZpY2VOYW1lKTsKKworICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKGRh
dGFiYXNlUGF0aCwgW3RyYW5zYWN0aW9uID0gV1RGTW92ZSh0cmFuc2FjdGlvbiksIGNvbm5lY3Rp
b24gPSBXVEZNb3ZlKGNvbm5lY3Rpb24pLCBtZXNzYWdlSGFuZGxlciA9IFdURk1vdmUobWVzc2Fn
ZUhhbmRsZXIpLCBjcmVhdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKGF1
dG8mJiBkYXRhYmFzZVJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghZGF0YWJhc2VSZXN1
bHQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoIHNlcnZpY2UgaW5pdGlh
bGl6YXRpb24gZmFpbGVkIHdpdGggZGF0YWJhc2UgZXJyb3IiKTsKKyAgICAgICAgICAgIGNyZWF0
aW9uSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KCkpOworICAgICAgICAgICAg
dHJhbnNhY3Rpb24gPSBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgYXV0byBkYXRhYmFzZSA9IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0
cihXVEZNb3ZlKGRhdGFiYXNlUmVzdWx0KSk7CisgICAgICAgIFVuaXF1ZVJlZjxQdXNoU2Vydmlj
ZT4gc2VydmljZSgqbmV3IFB1c2hTZXJ2aWNlKFdURk1vdmUoY29ubmVjdGlvbiksIFdURk1vdmUo
ZGF0YWJhc2UpLCBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSkpOworCisgICAgICAgIGF1dG8mIGNv
bm5lY3Rpb25SZWYgPSBzZXJ2aWNlLT5jb25uZWN0aW9uKCk7CisgICAgICAgIGF1dG8mIGRhdGFi
YXNlUmVmID0gc2VydmljZS0+ZGF0YWJhc2UoKTsKKworICAgICAgICAvLyBPbmx5IHByb3ZpZGUg
dGhlIHNlcnZpY2Ugb2JqZWN0IGJhY2sgdG8gdGhlIGNhbGxlciBhZnRlciB3ZSd2ZSBzeW5jZWQg
dGhlIHRvcGljIGxpc3RzIGluCisgICAgICAgIC8vIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBQdXNo
U2VydmljZUNvbm5lY3Rpb24vQVBTQ29ubmVjdGlvbi4gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd29u
J3QKKyAgICAgICAgLy8gc2VydmljZSBhbnkgY2FsbHMgdG8gc3Vic2NyaWJlL3Vuc3Vic2NyaWJl
L2V0Yy4gdW50aWwgYWZ0ZXIgdGhlIHRvcGljIGxpc3RzIGFyZSB1cCB0bworICAgICAgICAvLyBk
YXRlLCB3aGljaCBBUFNDb25uZWN0aW9uIGNhcmVzIGFib3V0LgorICAgICAgICB1cGRhdGVUb3Bp
Y0xpc3RzKGNvbm5lY3Rpb25SZWYsIGRhdGFiYXNlUmVmLCBbdHJhbnNhY3Rpb24gPSBXVEZNb3Zl
KHRyYW5zYWN0aW9uKSwgc2VydmljZSA9IFdURk1vdmUoc2VydmljZSksIGNyZWF0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY3JlYXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGNy
ZWF0aW9uSGFuZGxlcihzZXJ2aWNlLm1vdmVUb1VuaXF1ZVB0cigpKTsKKyAgICAgICAgICAgIHRy
YW5zYWN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKyNlbHNlCisK
K3ZvaWQgUHVzaFNlcnZpY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBJ
bmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6
dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIGNy
ZWF0aW9uSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KCkpOworfQorCisjZW5k
aWYgLy8gSEFWRShBUFBMRV9QVVNIX1NFUlZJQ0VfVVJMX1RPS0VOX1NVUFBPUlQpCisKK3ZvaWQg
UHVzaFNlcnZpY2U6OmNyZWF0ZUZha2VTZXJ2aWNlKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
JiYgbWVzc2FnZUhhbmRsZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRy
PFB1c2hTZXJ2aWNlPiYmKT4mJiBjcmVhdGlvbkhhbmRsZXIpCit7CisgICAgUHVzaERhdGFiYXNl
OjpjcmVhdGVJbk1lbW9yeShbbWVzc2FnZUhhbmRsZXIgPSBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVy
KSwgY3JlYXRpb25IYW5kbGVyID0gV1RGTW92ZShjcmVhdGlvbkhhbmRsZXIpXShhdXRvJiYgZGF0
YWJhc2VSZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIWRhdGFiYXNlUmVzdWx0KSB7Cisg
ICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY29ubmVj
dGlvbiA9IG1ha2VVbmlxdWVSZWY8RmFrZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4oKTsKKyAgICAg
ICAgYXV0byBkYXRhYmFzZSA9IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZN
b3ZlKGRhdGFiYXNlUmVzdWx0KSk7CisgICAgICAgIGNyZWF0aW9uSGFuZGxlcihzdGQ6OnVuaXF1
ZV9wdHI8UHVzaFNlcnZpY2U+KG5ldyBQdXNoU2VydmljZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBX
VEZNb3ZlKGRhdGFiYXNlKSwgV1RGTW92ZShtZXNzYWdlSGFuZGxlcikpKSk7CisgICAgfSk7Cit9
CisKK1B1c2hTZXJ2aWNlOjpQdXNoU2VydmljZShVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0
aW9uPiYmIHB1c2hTZXJ2aWNlQ29ubmVjdGlvbiwgVW5pcXVlUmVmPFB1c2hEYXRhYmFzZT4mJiBw
dXNoRGF0YWJhc2UsIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgaW5jb21pbmdQdXNoTWVz
c2FnZUhhbmRsZXIpCisgICAgOiBtX2Nvbm5lY3Rpb24oV1RGTW92ZShwdXNoU2VydmljZUNvbm5l
Y3Rpb24pKQorICAgICwgbV9kYXRhYmFzZShXVEZNb3ZlKHB1c2hEYXRhYmFzZSkpCisgICAgLCBt
X2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKFdURk1vdmUoaW5jb21pbmdQdXNoTWVzc2FnZUhh
bmRsZXIpKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRs
ZXIpOworCisgICAgbV9jb25uZWN0aW9uLT5zdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhb
dGhpc10oTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkgKnVzZXJJbmZvKSB7CisgICAgICAg
IGRpZFJlY2VpdmVQdXNoTWVzc2FnZSh0b3BpYywgdXNlckluZm8pOworICAgIH0pOworfQorCitQ
dXNoU2VydmljZTo6flB1c2hTZXJ2aWNlKCkgPSBkZWZhdWx0OworCitzdGF0aWMgUHVzaFN1YnNj
cmlwdGlvbkRhdGEgbWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKFB1c2hSZWNvcmQmJiBy
ZWNvcmQpCit7CisgICAgcmV0dXJuIFB1c2hTdWJzY3JpcHRpb25EYXRhIHsKKyAgICAgICAgcmVj
b3JkLmlkZW50aWZpZXIsCisgICAgICAgIFdURk1vdmUocmVjb3JkLmVuZHBvaW50KSwKKyAgICAg
ICAgV1RGTW92ZShyZWNvcmQuZXhwaXJhdGlvblRpbWUpLAorICAgICAgICBXVEZNb3ZlKHJlY29y
ZC5zZXJ2ZXJWQVBJRFB1YmxpY0tleSksCisgICAgICAgIFdURk1vdmUocmVjb3JkLmNsaWVudFB1
YmxpY0tleSksCisgICAgICAgIFdURk1vdmUocmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQpCisgICAg
fTsKK30KKworc3RhdGljIFN0cmluZyBtYWtlUHVzaFRvcGljKGNvbnN0IFN0cmluZyYgYnVuZGxl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSkKK3sKKyAgICByZXR1cm4gYnVuZGxlSWRl
bnRpZmllciArICIgIiArIHNjb3BlOworfQorCitjbGFzcyBQdXNoU2VydmljZVJlcXVlc3Qgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1YWwgflB1c2hT
ZXJ2aWNlUmVxdWVzdCgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgQVNDSUlMaXRlcmFsIGRl
c2NyaXB0aW9uKCkgY29uc3QgPSAwOworCisgICAgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlm
aWVyKCkgeyByZXR1cm4gbV9idW5kbGVJZGVudGlmaWVyOyB9CisgICAgY29uc3QgU3RyaW5nJiBz
Y29wZSgpIHsgcmV0dXJuIG1fc2NvcGU7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9
IDA7CisKK3Byb3RlY3RlZDoKKyAgICBQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNl
cnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29w
ZSkKKyAgICAgICAgOiBtX3NlcnZpY2Uoc2VydmljZSkKKyAgICAgICAgLCBtX2Nvbm5lY3Rpb24o
c2VydmljZS5jb25uZWN0aW9uKCkpCisgICAgICAgICwgbV9kYXRhYmFzZShzZXJ2aWNlLmRhdGFi
YXNlKCkpCisgICAgICAgICwgbV9idW5kbGVJZGVudGlmaWVyKGJ1bmRsZUlkZW50aWZpZXIpCisg
ICAgICAgICwgbV9zY29wZShzY29wZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGZpbmlzaCgpID0gMDsKKworICAgIFB1c2hTZXJ2aWNlJiBtX3NlcnZpY2U7CisgICAgUHVzaFNl
cnZpY2VDb25uZWN0aW9uJiBtX2Nvbm5lY3Rpb247CisgICAgUHVzaERhdGFiYXNlJiBtX2RhdGFi
YXNlOworICAgIFN0cmluZyBtX2J1bmRsZUlkZW50aWZpZXI7CisgICAgU3RyaW5nIG1fc2NvcGU7
CisgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQdXNoU2VydmljZVJlcXVlc3QmKT4gbV9jb21w
bGV0aW9uSGFuZGxlcjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGU+CitjbGFz
cyBQdXNoU2VydmljZVJlcXVlc3RJbXBsIDogcHVibGljIFB1c2hTZXJ2aWNlUmVxdWVzdCB7Citw
dWJsaWM6CisgICAgdm9pZCBzdGFydCgpIGZpbmFsCisgICAgeworICAgICAgICBpZiAobV9idW5k
bGVJZGVudGlmaWVyLmlzRW1wdHkoKSB8fCBtX3Njb3BlLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpBYm9ydEVycm9yLCAi
SW52YWxpZCBzZW5kZXIiX3MgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBTdHJpbmcgdHJhbnNhY3Rpb25EZXNjcmlwdGlvbiA9IFN0cmluZygiY29tLmFwcGxl
LndlYmtpdC53ZWJwdXNoZDoiX3MpICsgZGVzY3JpcHRpb24oKSArICI6Il9zICsgbV9idW5kbGVJ
ZGVudGlmaWVyICsgIjoiX3MgKyBtX3Njb3BlOworICAgICAgICBtX3RyYW5zYWN0aW9uID0gYWRv
cHRPU09iamVjdChvc190cmFuc2FjdGlvbl9jcmVhdGUodHJhbnNhY3Rpb25EZXNjcmlwdGlvbi51
dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHN0YXJ0SW50ZXJuYWwoKTsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB1c2luZyBSZXN1bHRIYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBFeHBlY3RlZDxSZXN1bHRUeXBlLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPjsKKwor
ICAgIFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0
cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxl
ciYmIHJlc3VsdEhhbmRsZXIpCisgICAgICAgIDogUHVzaFNlcnZpY2VSZXF1ZXN0KHNlcnZpY2Us
IGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlKQorICAgICAgICAsIG1fcmVzdWx0SGFuZGxlcihXVEZN
b3ZlKHJlc3VsdEhhbmRsZXIpKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+UHVzaFNlcnZp
Y2VSZXF1ZXN0SW1wbCgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydEludGVy
bmFsKCkgPSAwOworCisgICAgdm9pZCBmdWxmaWxsKFJlc3VsdFR5cGUgcmVzdWx0KQorICAgIHsK
KyAgICAgICAgbV9yZXN1bHRIYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgIGZpbmlz
aCgpOworICAgIH0KKworICAgIHZvaWQgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEmJiBk
YXRhKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHRIYW5kbGVyKG1ha2VVbmV4cGVjdGVkKFdURk1v
dmUoZGF0YSkpKTsKKyAgICAgICAgZmluaXNoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJl
c3VsdEhhbmRsZXIgbV9yZXN1bHRIYW5kbGVyOworICAgIE9TT2JqZWN0UHRyPG9zX3RyYW5zYWN0
aW9uX3Q+IG1fdHJhbnNhY3Rpb247Cit9OworCitjbGFzcyBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0
IDogcHVibGljIFB1c2hTZXJ2aWNlUmVxdWVzdEltcGw8c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQ
dXNoU3Vic2NyaXB0aW9uRGF0YT4+IHsKK3B1YmxpYzoKKyAgICBHZXRTdWJzY3JpcHRpb25SZXF1
ZXN0KFB1c2hTZXJ2aWNlJiwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIHNjb3BlLCBSZXN1bHRIYW5kbGVyJiYpOworICAgIHZpcnR1YWwgfkdldFN1YnNjcmlw
dGlvblJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAgICBBU0NJSUxpdGVyYWwg
ZGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiR2V0U3Vic2NyaXB0aW9uUmVxdWVz
dCJfczsgfQorICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgpIGZpbmFsOworICAgIHZvaWQgZmluaXNo
KCkgZmluYWwgeyBtX3NlcnZpY2UuZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KCp0
aGlzKTsgfQorfTsKKworR2V0U3Vic2NyaXB0aW9uUmVxdWVzdDo6R2V0U3Vic2NyaXB0aW9uUmVx
dWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNjb3BlLCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikKKyAg
ICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwgc2Nv
cGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikpCit7Cit9CisKKy8vIEltcGxlbWVudHMgdGhlIHdl
YnB1c2hkIHNpZGUgb2YgUHVzaE1hbmFnZXIuZ2V0U3Vic2NyaXB0aW9uLgordm9pZCBHZXRTdWJz
Y3JpcHRpb25SZXF1ZXN0OjpzdGFydEludGVybmFsKCkKK3sKKyAgICBtX2RhdGFiYXNlLmdldFJl
Y29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKG1fYnVuZGxlSWRlbnRpZmllciwgbV9zY29w
ZSwgW3RoaXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIXJlc3VsdCkg
eworICAgICAgICAgICAgZnVsZmlsbChzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3Jp
cHRpb25EYXRhPiB7IH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZnVsZmlsbChtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92ZSgqcmVzdWx0
KSkpOworICAgIH0pOworfQorCitjbGFzcyBTdWJzY3JpYmVSZXF1ZXN0IDogcHVibGljIFB1c2hT
ZXJ2aWNlUmVxdWVzdEltcGw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+IHsKK3B1Ymxp
YzoKKyAgICBTdWJzY3JpYmVSZXF1ZXN0KFB1c2hTZXJ2aWNlJiwgY29uc3QgU3RyaW5nJiBidW5k
bGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHZhcGlkUHVibGljS2V5LCBSZXN1bHRIYW5kbGVyJiYpOworICAgIHZpcnR1YWwgflN1YnNjcmli
ZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAgICBBU0NJSUxpdGVyYWwgZGVz
Y3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiU3Vic2NyaWJlUmVxdWVzdCJfczsgfQor
ICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgpIGZpbmFsIHsgc3RhcnRJbXBsKElzUmV0cnk6Ok5vKTsg
fQorICAgIHZvaWQgZmluaXNoKCkgZmluYWwgeyBtX3NlcnZpY2UuZGlkQ29tcGxldGVTdWJzY3Jp
YmVSZXF1ZXN0KCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgSXNSZXRyeSB7
IE5vLCBZZXMgfTsKKyAgICB2b2lkIHN0YXJ0SW1wbChJc1JldHJ5KTsKKyAgICB2b2lkIGF0dGVt
cHRUb1JlY292ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcihTdHJpbmcmJik7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IG1fdmFwaWRQdWJsaWNLZXk7Cit9OworCitTdWJzY3JpYmVSZXF1ZXN0
OjpTdWJzY3JpYmVSZXF1ZXN0KFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgdmFwaWRQdWJsaWNLZXksIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQorICAgIDog
UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbChzZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwg
V1RGTW92ZShyZXN1bHRIYW5kbGVyKSkKKyAgICAsIG1fdmFwaWRQdWJsaWNLZXkodmFwaWRQdWJs
aWNLZXkpCit7Cit9CisKKy8vIEltcGxlbWVudHMgdGhlIHdlYnB1c2hkIHNpZGUgb2YgUHVzaE1h
bmFnZXIuc3Vic2NyaWJlKCkuCit2b2lkIFN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW1wbChJc1Jl
dHJ5IGlzUmV0cnkpCit7CisgICAgbV9kYXRhYmFzZS5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZp
ZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUsIFt0aGlzLCBpc1JldHJ5XShh
dXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAg
ICAgaWYgKG1fdmFwaWRQdWJsaWNLZXkgIT0gcmVzdWx0LT5zZXJ2ZXJWQVBJRFB1YmxpY0tleSkK
KyAgICAgICAgICAgICAgICByZWplY3QoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6
OkludmFsaWRTdGF0ZUVycm9yLCAiUHJvdmlkZWQgYXBwbGljYXRpb25TZXJ2ZXJLZXkgZG9lcyBu
b3QgbWF0Y2ggdGhlIGtleSBpbiB0aGUgZXhpc3Rpbmcgc3Vic2NyaXB0aW9uLiJfcyB9KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmdWxmaWxsKG1ha2VQdXNoU3Vic2NyaXB0
aW9uRnJvbVJlY29yZChXVEZNb3ZlKCpyZXN1bHQpKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHRvcGljID0gbWFrZVB1c2hUb3BpYyhtX2J1bmRsZUlk
ZW50aWZpZXIsIG1fc2NvcGUpOworICAgICAgICBtX2Nvbm5lY3Rpb24uc3Vic2NyaWJlKHRvcGlj
LCBtX3ZhcGlkUHVibGljS2V5LCBbdGhpcywgaXNSZXRyeSwgdG9waWNdKE5TU3RyaW5nICplbmRw
b2ludCwgTlNFcnJvciAqZXJyb3IpIG11dGFibGUgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHVzZSBwb2ludGVyIGNvbXBhcmlzb24gb25jZSBB
UFNVUkxUb2tlbkVycm9yRG9tYWluIGlzIGV4dGVybmVkLgorICAgICAgICAgICAgICAgIGlmIChp
c1JldHJ5ID09IElzUmV0cnk6Ok5vICYmIFtlcnJvci5kb21haW4gaXNFcXVhbFRvU3RyaW5nOkAi
QVBTVVJMVG9rZW5FcnJvckRvbWFpbiJdICYmIGVycm9yLmNvZGUgPT0gQVBTVVJMVG9rZW5FcnJv
ckNvZGVUb3BpY0FscmVhZHlJbkZpbHRlcikgeworICAgICAgICAgICAgICAgICAgICBhdHRlbXB0
VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVyRXJyb3IoV1RGTW92ZSh0b3BpYykpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1c2hNYW5hZ2VyLnN1YnNjcmliZShidW5kbGVJ
RDogJXtwdWJsaWN9cywgc2NvcGU6ICV7c2Vuc2l0aXZlfXMpIGZhaWxlZCB3aXRoIGRvbWFpbjog
JXtwdWJsaWN9cyBjb2RlOiAlbGxkKSIsIG1fYnVuZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgp
LCBtX3Njb3BlLnV0ZjgoKS5kYXRhKCksIGVycm9yLmRvbWFpbi5VVEY4U3RyaW5nLCBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihlcnJvci5jb2RlKSk7CisgICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNv
cmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpBYm9ydEVycm9yLCAiRmFpbGVkIGR1ZSB0byBp
bnRlcm5hbCBzZXJ2aWNlIGVycm9yIl9zIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBjbGllbnRLZXlzID0gbV9zZXJ2aWNlLmNv
bm5lY3Rpb24oKS5nZW5lcmF0ZUNsaWVudEtleXMoKTsKKyAgICAgICAgICAgIFB1c2hSZWNvcmQg
cmVjb3JkOworICAgICAgICAgICAgcmVjb3JkLmJ1bmRsZUlEID0gbV9idW5kbGVJZGVudGlmaWVy
OworICAgICAgICAgICAgcmVjb3JkLnNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZUZyb21TdHJpbmcobV9zY29wZSktPmRhdGEoKS50b1N0cmluZygpOworICAgICAgICAgICAg
cmVjb3JkLnNjb3BlID0gbV9zY29wZTsKKyAgICAgICAgICAgIHJlY29yZC5lbmRwb2ludCA9IGVu
ZHBvaW50OworICAgICAgICAgICAgcmVjb3JkLnRvcGljID0gV1RGTW92ZSh0b3BpYyk7CisgICAg
ICAgICAgICByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkgPSBtX3ZhcGlkUHVibGljS2V5Owor
ICAgICAgICAgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tleSA9IFdURk1vdmUoY2xpZW50S2V5cy5j
bGllbnRQMjU2REhLZXlQYWlyLnB1YmxpY0tleSk7CisgICAgICAgICAgICByZWNvcmQuY2xpZW50
UHJpdmF0ZUtleSA9IFdURk1vdmUoY2xpZW50S2V5cy5jbGllbnRQMjU2REhLZXlQYWlyLnByaXZh
dGVLZXkpOworICAgICAgICAgICAgcmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQgPSBXVEZNb3ZlKGNs
aWVudEtleXMuc2hhcmVkQXV0aFNlY3JldCk7CisKKyAgICAgICAgICAgIG1fZGF0YWJhc2UuaW5z
ZXJ0UmVjb3JkKHJlY29yZCwgW3RoaXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
KFB1c2gsICJQdXNoTWFuYWdlci5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3Bl
OiAle3NlbnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkYXRhYmFzZSBlcnJvciIsIG1fYnVuZGxlSWRl
bnRpZmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICByZWplY3QoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkFib3J0
RXJyb3IsICJGYWlsZWQgZHVlIHRvIGludGVybmFsIGRhdGFiYXNlIGVycm9yIl9zIH0pOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IHN1cHBvcnQgcGFydGlhbCB0b3BpYyBsaXN0IHVwZGF0ZXMuCisgICAg
ICAgICAgICAgICAgdXBkYXRlVG9waWNMaXN0cyhtX2Nvbm5lY3Rpb24sIG1fZGF0YWJhc2UsIFt0
aGlzLCByZWNvcmQgPSBXVEZNb3ZlKCpyZXN1bHQpXSgpIG11dGFibGUgeworICAgICAgICAgICAg
ICAgICAgICBmdWxmaWxsKG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChXVEZNb3ZlKHJl
Y29yZCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworLy8gVHJpZXMgdG8gcmVjb3ZlciBmcm9tIGEgdG9waWMgYmVpbmcg
bW92ZWQgdG8gdGhlIGdsb2JhbCBwYXVzZWQgZmlsdGVyIChyZGFyOi8vODgxMzkzMzApLgordm9p
ZCBTdWJzY3JpYmVSZXF1ZXN0OjphdHRlbXB0VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmls
dGVyRXJyb3IoU3RyaW5nJiYgdG9waWMpCit7CisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0
Y2goW3RoaXMsIHRvcGljID0gV1RGTW92ZSh0b3BpYyldKCkgbXV0YWJsZSB7CisgICAgICAgIC8v
IFRoaXMgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBwYXVzZWQgdG9waWMgYW5kIHRlbGxzIGFwc2Qg
dG8gZm9yZ2V0IGFib3V0IHRoZSB0b3BpYy4KKyAgICAgICAgYXV0byB0b3BpY3MgPSBtX2Nvbm5l
Y3Rpb24uaWdub3JlZFRvcGljcygpOworICAgICAgICB0b3BpY3MuYXBwZW5kKHRvcGljKTsKKyAg
ICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3ModG9waWNzKTsKKyAgICAgICAgdG9w
aWNzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3Mo
dG9waWNzKTsKKworICAgICAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbdGhpc10oKSBt
dXRhYmxlIHsKKyAgICAgICAgICAgIHN0YXJ0SW1wbChJc1JldHJ5OjpZZXMpOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworY2xhc3MgVW5zdWJzY3JpYmVSZXF1ZXN0IDogcHVibGljIFB1c2hT
ZXJ2aWNlUmVxdWVzdEltcGw8Ym9vbD4geworcHVibGljOgorICAgIFVuc3Vic2NyaWJlUmVxdWVz
dChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIFJlc3VsdEhhbmRsZXImJik7
CisgICAgdmlydHVhbCB+VW5zdWJzY3JpYmVSZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0
ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
IlVuc3Vic2NyaWJlUmVxdWVzdCJfczsgfQorICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgpIGZpbmFs
OworICAgIHZvaWQgZmluaXNoKCkgZmluYWwgeyBtX3NlcnZpY2UuZGlkQ29tcGxldGVVbnN1YnNj
cmliZVJlcXVlc3QoKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgUHVzaFN1YnNjcmlwdGlvbklk
ZW50aWZpZXIgbV9zdWJzY3JpcHRpb25JZGVudGlmaWVyOworfTsKKworVW5zdWJzY3JpYmVSZXF1
ZXN0OjpVbnN1YnNjcmliZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmlu
ZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlv
bklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgUmVzdWx0SGFuZGxlciYmIHJlc3Vs
dEhhbmRsZXIpCisgICAgOiBQdXNoU2VydmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlk
ZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQorICAgICwgbV9zdWJzY3Jp
cHRpb25JZGVudGlmaWVyKHN1YnNjcmlwdGlvbklkZW50aWZpZXIpCit7Cit9CisKKy8vIEltcGxl
bWVudHMgdGhlIHdlYnB1c2hkIHNpZGUgb2YgUHVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZS4K
K3ZvaWQgVW5zdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEludGVybmFsKCkKK3sKKyAgICBtX2RhdGFi
YXNlLmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKG1fYnVuZGxlSWRlbnRpZmll
ciwgbV9zY29wZSwgW3RoaXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAo
IXJlc3VsdCB8fCBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXIgIT0gcmVzdWx0LT5pZGVudGlmaWVy
KSB7CisgICAgICAgICAgICBmdWxmaWxsKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gdG9waWMgPSBtYWtlUHVzaFRvcGljKG1fYnVuZGxlSWRl
bnRpZmllciwgbV9zY29wZSk7CisgICAgICAgIG1fY29ubmVjdGlvbi51bnN1YnNjcmliZSh0b3Bp
YywgcmVzdWx0LT5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgW3RoaXNdKGJvb2wgdW5zdWJzY3JpYmVk
LCBOU0Vycm9yICplcnJvcikgbXV0YWJsZSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisg
ICAgICAgICAgICAvLyBJZiB3ZSBmYWlsIHRvIHVuc3Vic2NyaWJlIGZyb20gYXBzZCwganVzdCBk
cm9wIGEgbG9nLiBXZSBzdGlsbCB3YW50IHRvIGNvbnRpbnVlIGFuZCByZW1vdmUgdGhlIHJlY29y
ZCBmcm9tIG91ciBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYSBzdGF0ZSBtaXNtYXRjaCBiZXR3
ZWVuIG91ciBkYXRhYmFzZSBhbmQgYXBzZCdzIGRhdGFiYXNlLgorICAgICAgICAgICAgaWYgKCF1
bnN1YnNjcmliZWQpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1c2hTdWJz
Y3JpcHRpb24udW5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAle3NlbnNp
dGl2ZX1zKSBmYWlsZWQgd2l0aCBkb21haW46ICV7cHVibGljfXMgY29kZTogJWxsZCkiLCBtX2J1
bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgpLCBlcnJv
ci5kb21haW4uVVRGOFN0cmluZyA/OiAibm9uZSIsIHN0YXRpY19jYXN0PGludDY0X3Q+KGVycm9y
LmNvZGUpKTsKKyNlbHNlCisgICAgICAgICAgICBVTlVTRURfUEFSQU0odW5zdWJzY3JpYmVkKTsK
KyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisjZW5kaWYKKworICAgICAgICAgICAg
bV9kYXRhYmFzZS5yZW1vdmVSZWNvcmRCeUlkZW50aWZpZXIobV9zdWJzY3JpcHRpb25JZGVudGlm
aWVyLCBbdGhpc10oYm9vbCByZW1vdmVkKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXJlbW92ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmlsbChmYWxzZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogc3VwcG9ydCBwYXJ0aWFsIHRvcGljIGxpc3QgdXBkYXRlcy4KKyAgICAgICAg
ICAgICAgICB1cGRhdGVUb3BpY0xpc3RzKG1fY29ubmVjdGlvbiwgbV9kYXRhYmFzZSwgW3RoaXNd
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisK
Ky8vIE9ubHkgYWxsb3cgb25lIHJlcXVlc3QgcGVyIChidW5kbGVJZGVudGlmaWVyLCBzY29wZSkg
dG8gcHJvY2VlZCBhdCBvbmNlLiBGb3IgaW5zdGFuY2UsIGlmIGEgZ2l2ZW4KKy8vIHBhZ2UgY2Fs
bHMgUHVzaE1hbmFnZXIuc3Vic2NyaWJlKCkgdHdpY2UgaW4gYSByb3csIHRoZSBzZWNvbmQgc3Vi
c2NyaWJlIGNhbGwgd29uJ3Qgc3RhcnQgdW50aWwKKy8vIHRoZSBmaXJzdCBvbmUgY29tcGxldGVz
Lgordm9pZCBQdXNoU2VydmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2Vydmlj
ZVJlcXVlc3RNYXAmIG1hcCwgc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlUmVxdWVzdD4mJiBy
ZXF1ZXN0KQoreworICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3R1cGxlKHJlcXVlc3QtPmJ1bmRs
ZUlkZW50aWZpZXIoKSwgcmVxdWVzdC0+c2NvcGUoKSk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBt
YXAuZW5zdXJlKGtleSwgW10oKSB7CisgICAgICAgIHJldHVybiBEZXF1ZTxzdGQ6OnVuaXF1ZV9w
dHI8UHVzaFNlcnZpY2VSZXF1ZXN0Pj4geyB9OworICAgIH0pOworCisgICAgYXV0byBhZGRlZFJl
cXVlc3QgPSByZXF1ZXN0LmdldCgpOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKFdURk1vdmUocmVxdWVzdCkpOworCisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICBhZGRlZFJlcXVlc3QtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmZp
bmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYgbWFwLCBQdXNo
U2VydmljZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfdHVw
bGUocmVxdWVzdC5idW5kbGVJZGVudGlmaWVyKCksIHJlcXVlc3Quc2NvcGUoKSk7CisgICAgYXV0
byByZXF1ZXN0UXVldWVJdCA9IG1hcC5maW5kKGtleSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVChy
ZXF1ZXN0UXVldWVJdCAhPSBtYXAuZW5kKCkpOworICAgIGF1dG8mIHJlcXVlc3RRdWV1ZSA9IHJl
cXVlc3RRdWV1ZUl0LT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXF1ZXN0UXVldWUuc2l6
ZSgpID4gMCk7CisgICAgYXV0byBjdXJyZW50UmVxdWVzdCA9IHJlcXVlc3RRdWV1ZS50YWtlRmly
c3QoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50UmVxdWVzdC5nZXQoKSA9PSAmcmVxdWVz
dCk7CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3QqIG5leHRSZXF1ZXN0ID0gbnVsbHB0cjsKKyAg
ICBpZiAoIXJlcXVlc3RRdWV1ZS5zaXplKCkpCisgICAgICAgIG1hcC5yZW1vdmUocmVxdWVzdFF1
ZXVlSXQpOworICAgIGVsc2UKKyAgICAgICAgbmV4dFJlcXVlc3QgPSByZXF1ZXN0UXVldWUuZmly
c3QoKS5nZXQoKTsKKworICAgIC8vIEV2ZW4gaWYgdGhlcmUncyBubyBuZXh0IHJlcXVlc3QgdG8g
c3RhcnQsIGhvbGQgb24gdG8gY3VycmVudFJlcXVlc3QgdW50aWwgdGhlIG5leHQgdHVybiBvZiB0
aGUgcnVuIGxvb3Agc2luY2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBleGVjdXRpbmcgdGhlIGZp
bmlzaCgpIG1lbWJlciBmdW5jdGlvbiBvZiBjdXJyZW50UmVxdWVzdC4KKyAgICBXb3JrUXVldWU6
Om1haW4oKS5kaXNwYXRjaChbY3VycmVudFJlcXVlc3QgPSBXVEZNb3ZlKGN1cnJlbnRSZXF1ZXN0
KSwgbmV4dFJlcXVlc3RdIHsKKyAgICAgICAgaWYgKG5leHRSZXF1ZXN0KQorICAgICAgICAgICAg
bmV4dFJlcXVlc3QtPnN0YXJ0KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6Omdl
dFN1YnNjcmlwdGlvbihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8c3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4sIFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2aWNlUmVx
dWVzdChtX2dldFN1YnNjcmlwdGlvblJlcXVlc3RzLCBtYWtlVW5pcXVlPEdldFN1YnNjcmlwdGlv
blJlcXVlc3Q+KCp0aGlzLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVHZXRTdWJz
Y3JpcHRpb25SZXF1ZXN0KEdldFN1YnNjcmlwdGlvblJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAg
ZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV9nZXRTdWJzY3JpcHRpb25SZXF1ZXN0cywgcmVx
dWVzdCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OnN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgdmFwaWRQdWJsaWNLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8
V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdCht
X3N1YnNjcmliZVJlcXVlc3RzLCBtYWtlVW5pcXVlPFN1YnNjcmliZVJlcXVlc3Q+KCp0aGlzLCBi
dW5kbGVJZGVudGlmaWVyLCBzY29wZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlU3Vic2NyaWJl
UmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZpbmlzaGVkUHVzaFNl
cnZpY2VSZXF1ZXN0KG1fc3Vic2NyaWJlUmVxdWVzdHMsIHJlcXVlc3QpOworfQorCit2b2lkIFB1
c2hTZXJ2aWNlOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgc2NvcGUsIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHN1YnNjcmlwdGlv
bklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwg
V2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBl
bnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1fdW5zdWJzY3JpYmVSZXF1ZXN0cywgbWFrZVVuaXF1
ZTxVbnN1YnNjcmliZVJlcXVlc3Q+KCp0aGlzLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgc3Vi
c2NyaXB0aW9uSWRlbnRpZmllciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKK30KKwor
dm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QoVW5zdWJzY3Jp
YmVSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KG1f
dW5zdWJzY3JpYmVSZXF1ZXN0cywgcmVxdWVzdCk7Cit9CisKK2VudW0gY2xhc3MgQ29udGVudEVu
Y29kaW5nIHsKKyAgICBFbXB0eSwKKyAgICBEcmFmdEFFU0dDTSwKKyAgICBTdGFuZGFyZEFFUzEy
OEdDTQorfTsKKworc3RydWN0IFJhd1B1c2hNZXNzYWdlIHsKKyAgICBTdHJpbmcgdG9waWM7Cisg
ICAgQ29udGVudEVuY29kaW5nIGVuY29kaW5nOworCisgICAgLy8gT25seSBzZXQgaWYgZW5jb2Rp
bmcgaXMgbm90IENvbnRlbnRFbmNvZGluZzo6RW1wdHkuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVu
Y3J5cHRlZFBheWxvYWQ7CisKKyAgICAvLyBPbmx5IHNldCBpZiBlbmNvZGluZyBpcyBDb250ZW50
RW5jb2Rpbmc6OkRyYWZ0QUVTR0NNLgorICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJQdWJsaWNL
ZXk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNhbHQ7CisKK307CisKK3N0YXRpYyBzdGQ6Om9wdGlv
bmFsPFJhd1B1c2hNZXNzYWdlPiBtYWtlUmF3UHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBO
U0RpY3Rpb25hcnkqIHVzZXJJbmZvKQoreworICAgIFJhd1B1c2hNZXNzYWdlIG1lc3NhZ2U7CisK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgbWVzc2FnZS50b3BpYyA9IHRvcGljOwor
ICAgICAgICBOU1N0cmluZyAqY29udGVudEVuY29kaW5nID0gdXNlckluZm9bQCJjb250ZW50X2Vu
Y29kaW5nIl07CisgICAgICAgIE5TU3RyaW5nICpwYXlsb2FkQmFzZTY0ID0gdXNlckluZm9bQCJw
YXlsb2FkIl07CisKKyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcubGVuZ3RoIHx8ICFwYXls
b2FkQmFzZTY0Lmxlbmd0aCkgeworICAgICAgICAgICAgbWVzc2FnZS5lbmNvZGluZyA9IENvbnRl
bnRFbmNvZGluZzo6RW1wdHk7CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChbY29udGVudEVuY29kaW5nIGlzRXF1YWxUb1N0cmluZzpAImFlczEy
OGdjbSJdKQorICAgICAgICAgICAgbWVzc2FnZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6
U3RhbmRhcmRBRVMxMjhHQ007CisgICAgICAgIGVsc2UgaWYgKFtjb250ZW50RW5jb2RpbmcgaXNF
cXVhbFRvU3RyaW5nOkAiYWVzZ2NtIl0pIHsKKyAgICAgICAgICAgIG1lc3NhZ2UuZW5jb2Rpbmcg
PSBDb250ZW50RW5jb2Rpbmc6OkRyYWZ0QUVTR0NNOworCisgICAgICAgICAgICBOU1N0cmluZyAq
c2VydmVyUHVibGljS2V5QmFzZTY0VVJMID0gdXNlckluZm9bQCJhc19wdWJsaWNrZXkiXTsKKyAg
ICAgICAgICAgIE5TU3RyaW5nICpzYWx0QmFzZTY0VVJMID0gdXNlckluZm9bQCJhc19zYWx0Il07
CisgICAgICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCB8fCAhc2FsdEJhc2U2
NFVSTCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBhZXNn
Y20tZW5jcnlwdGVkIHB1c2ggd2l0aG91dCByZXF1aXJlZCBzZXJ2ZXIga2V5IGFuZCBzYWx0Iik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBiYXNlNjRVUkxEZWNvZGUoc2VydmVy
UHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgICAgIGF1dG8gc2FsdCA9IGJhc2U2NFVSTERl
Y29kZShzYWx0QmFzZTY0VVJMKTsKKyAgICAgICAgICAgIGlmICghc2VydmVyUHVibGljS2V5IHx8
ICFzYWx0KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIGFl
c2djbS1lbmNyeXB0ZWQgcHVzaCB3aXRoIGltcHJvcGVybHkgZW5jb2RlZCBzZXJ2ZXIga2V5IGFu
ZCBzYWx0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXkgPSBXVEZNb3ZlKCpz
ZXJ2ZXJQdWJsaWNLZXkpOworICAgICAgICAgICAgbWVzc2FnZS5zYWx0ID0gV1RGTW92ZSgqc2Fs
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJv
cHBpbmcgcHVzaCB3aXRoIHVua25vd24gY29udGVudCBlbmNvZGluZzogJXtwdWJsaWN9cyIsIGNv
bnRlbnRFbmNvZGluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNlNjREZWNvZGUocGF5
bG9hZEJhc2U2NCk7CisgICAgICAgIGlmICghcGF5bG9hZCkgeworICAgICAgICAgICAgUkVMRUFT
RV9MT0coUHVzaCwgIkRyb3BwaW5nIHB1c2ggd2l0aCBpbXByb3Blcmx5IGVuY29kZWQgcGF5bG9h
ZCIpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgICAg
ICBtZXNzYWdlLmVuY3J5cHRlZFBheWxvYWQgPSBXVEZNb3ZlKCpwYXlsb2FkKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbWVzc2FnZTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkUmVjZWl2ZVB1
c2hNZXNzYWdlKE5TU3RyaW5nKiB0b3BpYywgTlNEaWN0aW9uYXJ5KiB1c2VySW5mbywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gbWVz
c2FnZVJlc3VsdCA9IG1ha2VSYXdQdXNoTWVzc2FnZSh0b3BpYywgdXNlckluZm8pOworICAgIGlm
ICghbWVzc2FnZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhYmFzZS0+Z2V0
UmVjb3JkQnlUb3BpYyh0b3BpYywgW3RoaXMsIG1lc3NhZ2UgPSBXVEZNb3ZlKCptZXNzYWdlUmVz
dWx0KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0
byYmIHJlY29yZFJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVjb3JkUmVzdWx0KSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgaW5jb21pbmcgcHVzaCBz
ZW50IHRvIHVua25vd24gdG9waWM6ICV7c2Vuc2l0aXZlfXMiLCBtZXNzYWdlLnRvcGljLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHJlY29yZCA9IFdURk1vdmUoKnJlY29y
ZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVudEVuY29k
aW5nOjpFbXB0eSkgeworICAgICAgICAgICAgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcihy
ZWNvcmQuYnVuZGxlSUQsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UgeyB7IH0sIFVSTChVUkwoKSwg
cmVjb3JkLnNjb3BlKSB9KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBQdXNoQ3J5cHRvOjpDbGllbnRL
ZXlzIGNsaWVudEtleXMgeworICAgICAgICAgICAgeyBXVEZNb3ZlKHJlY29yZC5jbGllbnRQdWJs
aWNLZXkpLCBXVEZNb3ZlKHJlY29yZC5jbGllbnRQcml2YXRlS2V5KSB9LAorICAgICAgICAgICAg
V1RGTW92ZShyZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkKKyAgICAgICAgfTsKKworICAgICAgICBz
dGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVjcnlwdGVkUGF5bG9hZDsKKyAgICAgICAg
aWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVudEVuY29kaW5nOjpTdGFuZGFyZEFFUzEyOEdD
TSkKKyAgICAgICAgICAgIGRlY3J5cHRlZFBheWxvYWQgPSBkZWNyeXB0QUVTMTI4R0NNUGF5bG9h
ZChjbGllbnRLZXlzLCBtZXNzYWdlLmVuY3J5cHRlZFBheWxvYWQpOworICAgICAgICBlbHNlIGlm
IChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRFbmNvZGluZzo6RHJhZnRBRVNHQ00pCisgICAg
ICAgICAgICBkZWNyeXB0ZWRQYXlsb2FkID0gZGVjcnlwdEFFU0dDTVBheWxvYWQoY2xpZW50S2V5
cywgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXksIG1lc3NhZ2Uuc2FsdCwgbWVzc2FnZS5lbmNyeXB0
ZWRQYXlsb2FkKTsKKworICAgICAgICBpZiAoIWRlY3J5cHRlZFBheWxvYWQpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBpbmNvbWluZyBwdXNoIGR1ZSB0byBkZWNy
eXB0aW9uIGVycm9yIGZvciB0b3BpYyAle3NlbnNpdGl2ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5k
bGVyKHJlY29yZC5idW5kbGVJRCwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSB7IFdURk1vdmUoKmRl
Y3J5cHRlZFBheWxvYWQpLCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkgfSk7CisKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViUHVz
aEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0
aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmlu
ZGV4IDNjYzVlODk1N2QxMTE2OGJjNzFiMzFmZWFjMWUwNzY2NDc3NTJkMjguLmQyNTgwMTgwOGU3
ZTA3MGQ4ZTQ3NDQwOGQ0NDY0ZDdiMjJkY2ZjN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaE1lc3NhZ2VDcnlwdG8uaD4KICNpbmNsdWRl
IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTQ2LDYgKzQ3LDggQEAgcHVibGljOgogICAgIFB1c2hT
ZXJ2aWNlQ29ubmVjdGlvbigpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIH5QdXNoU2VydmljZUNv
bm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlB1c2hDcnlwdG86
OkNsaWVudEtleXMgZ2VuZXJhdGVDbGllbnRLZXlzKCk7CisKICAgICB1c2luZyBTdWJzY3JpYmVI
YW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChOU1N0cmluZyAqLCBOU0Vycm9yICopPjsK
ICAgICB2aXJ0dWFsIHZvaWQgc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFN1YnNjcmliZUhhbmRsZXImJikgPSAwOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlv
bi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmlu
ZGV4IDUzNDMzMjVlYjVlYTIwM2U4ZGY2ZmY4MzAzY2I5YjBmZmM4MTMyMWIuLjkyZjgxNDI3N2E4
MzgxNTMxNjg4YjBlNDg1MTgyZDQzZDg1Y2M4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC0yOCw4ICsyOCwxNSBAQAogCiAjaW1w
b3J0IDx3dGYvV29ya1F1ZXVlLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1l
c3BhY2UgV2ViUHVzaEQgewogCitQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIFB1c2hTZXJ2aWNlQ29u
bmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKCkKK3sKKyAgICByZXR1cm4gUHVzaENyeXB0bzo6
Q2xpZW50S2V5czo6Z2VuZXJhdGUoKTsKK30KKwogdm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246
OnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
JiYgaGFuZGxlcikKIHsKICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gV1RGTW92
ZShoYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERh
ZW1vbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKaW5kZXggYWYz
MTg1N2RiODczN2E5YjY0Mzk1ZmIwMDA0NzUwYTk1OGU1NDhkMC4uZDYwOGU2ZDg3Mjk0MGZlMmRj
NzAzOGExNTUyMzNkYTEwZWYxNTk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9XZWJQdXNoRGFlbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFl
bW9uLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlB1c2hDbGllbnRDb25uZWN0aW9u
LmgiCiAjaW5jbHVkZSAiUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmgiCisjaW5jbHVkZSAiUHVzaFNl
cnZpY2UuaCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24u
aCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiV2ViUHVz
aE1lc3NhZ2UuaCIKQEAgLTYxLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3Rp
b25BZGRlZCh4cGNfY29ubmVjdGlvbl90KTsKICAgICB2b2lkIGNvbm5lY3Rpb25SZW1vdmVkKHhw
Y19jb25uZWN0aW9uX3QpOwogCisgICAgdm9pZCBzdGFydEZha2VQdXNoU2VydmljZSgpOworICAg
IHZvaWQgc3RhcnRQdXNoU2VydmljZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VO
YW1lLCBjb25zdCBTdHJpbmcmIHB1c2hEYXRhYmFzZVBhdGgpOworICAgIHZvaWQgaGFuZGxlSW5j
b21pbmdQdXNoKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0OjpXZWJQdXNo
TWVzc2FnZSYmKTsKKwogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKICAgICB2b2lkIGVjaG9Ud2lj
ZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBTdHJpbmcmKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCByZXF1ZXN0U3lzdGVt
Tm90aWZpY2F0aW9uUGVybWlzc2lvbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiByZXBseVNlbmRlcik7CkBAIC02OSw2ICs3
NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlYnVnTW9kZUlzRW5hYmxlZChDbGllbnRDb25u
ZWN0aW9uKiwgYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbihD
bGllbnRDb25uZWN0aW9uKiwgY29uc3QgV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0
aW9uJik7CiAgICAgdm9pZCBpbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVj
dGlvbiosIGNvbnN0IFB1c2hNZXNzYWdlRm9yVGVzdGluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYpOworICAgIHZvaWQgaW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0
aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29u
bmVjdGlvbiosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYktpdDo6V2Vi
UHVzaE1lc3NhZ2U+Jik+JiYgcmVwbHlTZW5kZXIpOwogICAgIHZvaWQgc3Vic2NyaWJlVG9QdXNo
U2VydmljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVSTCwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBhcHBsaWNhdGlvblNlcnZlcktleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCB1bnN1YnNjcmliZUZy
b21QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVSTCwgV2Vi
Q29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNl
bmRlcik7CkBAIC04OCw5ICs5NCwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBub3RpZnlDbGll
bnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGNvbnN0IFN0cmluZyYgY2xpZW50Q29kZVNpZ25pbmdJ
ZGVudGlmaWVyKTsKIAorICAgIHZvaWQgc2V0UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1
c2hTZXJ2aWNlPiYmKTsKKyAgICB2b2lkIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShGdW5j
dGlvbjx2b2lkKCk+JiYpOworCiAgICAgQ2xpZW50Q29ubmVjdGlvbiogdG9DbGllbnRDb25uZWN0
aW9uKHhwY19jb25uZWN0aW9uX3QpOwogICAgIEhhc2hNYXA8eHBjX2Nvbm5lY3Rpb25fdCwgUmVm
PENsaWVudENvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25NYXA7CiAKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UHVzaFNlcnZpY2U+IG1fcHVzaFNlcnZpY2U7CisgICAgYm9vbCBtX3B1c2hTZXJ2aWNlU3Rh
cnRlZCB7IGZhbHNlIH07CisgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgpPj4gbV9wZW5kaW5nUHVz
aFNlcnZpY2VGdW5jdGlvbnM7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFdlYktpdDo6
V2ViUHVzaE1lc3NhZ2U+PiBtX3B1c2hNZXNzYWdlczsKICAgICBIYXNoTWFwPFN0cmluZywgRGVx
dWU8UHVzaE1lc3NhZ2VGb3JUZXN0aW5nPj4gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IGE4ZmU0OWY1MmQ3NjMy
NjYzMWNhYzdkNzY2YzA5MTQ5NWU5Y2U1NWUuLjY2OWU0MTAxNDZjNTI3NzcwZjIyMGQyOGEyOGRm
Zjk2YTk0Yjg4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERh
ZW1vbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KQEAg
LTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8
d3RmL1NwYW4uaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6V2ViUHVzaEQ7CiAKQEAgLTkxLDYgKzkyLDEx
IEBAIEFSR1VNRU5UUyhQdXNoTWVzc2FnZUZvclRlc3RpbmcpCiBSRVBMWShib29sKQogRU5ECiAK
K0ZVTkNUSU9OKGluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZykKK0FSR1VNRU5U
UyhTdHJpbmcpCitSRVBMWShib29sKQorRU5ECisKIEZVTkNUSU9OKHN1YnNjcmliZVRvUHVzaFNl
cnZpY2UpCiBBUkdVTUVOVFMoVVJMLCBWZWN0b3I8dWludDhfdD4pCiBSRVBMWShjb25zdCBFeHBl
Y3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YT4mKQpAQCAtMTUxLDYgKzE1NywxMyBAQCBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgaW5qZWN0
UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBseShib29sIHJlcGx5KQogICAgIHJldHVy
biBlbmNvZGVyLnRha2VCdWZmZXIoKTsKIH0KIAorV2ViUHVzaEQ6OkVuY29kZWRNZXNzYWdlIGlu
amVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzo6ZW5jb2RlUmVwbHkoYm9vbCByZXBs
eSkKK3sKKyAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIg
PDwgcmVwbHk7CisgICAgcmV0dXJuIGVuY29kZXIudGFrZUJ1ZmZlcigpOworfQorCiBXZWJQdXNo
RDo6RW5jb2RlZE1lc3NhZ2UgZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczo6ZW5jb2RlUmVwbHkoY29u
c3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+JiByZXBseSkKIHsKICAgICBXZWJLaXQ6
OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOwpAQCAtMjI0LDYgKzIzNyw1MSBAQCBEYWVtb24mIERh
ZW1vbjo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gZGFlbW9uOwogfQogCit2b2lkIERhZW1vbjo6
c3RhcnRGYWtlUHVzaFNlcnZpY2UoKQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhp
c10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdl
JiYgbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxlSWRlbnRpZmll
ciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6Y3JlYXRlRmFr
ZVNlcnZpY2UoV1RGTW92ZShtZXNzYWdlSGFuZGxlciksIFt0aGlzXShhdXRvJiYgcHVzaFNlcnZp
Y2UpIG11dGFibGUgeworICAgICAgICBzZXRQdXNoU2VydmljZShXVEZNb3ZlKHB1c2hTZXJ2aWNl
KSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpzdGFydFB1c2hTZXJ2aWNlKGNvbnN0IFN0
cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRo
KQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3QgU3RyaW5nJiBidW5k
bGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkgeworICAgICAg
ICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92ZShtZXNzYWdlKSk7
CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6Y3JlYXRlKGluY29taW5nUHVzaFNlcnZpY2VOYW1l
LCBkYXRhYmFzZVBhdGgsIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBbdGhpc10oYXV0byYmIHB1
c2hTZXJ2aWNlKSBtdXRhYmxlIHsKKyAgICAgICAgc2V0UHVzaFNlcnZpY2UoV1RGTW92ZShwdXNo
U2VydmljZSkpOworICAgIH0pOworfQorCit2b2lkIERhZW1vbjo6c2V0UHVzaFNlcnZpY2Uoc3Rk
Ojp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmIHB1c2hTZXJ2aWNlKQoreworICAgIG1fcHVzaFNl
cnZpY2UgPSBXVEZNb3ZlKHB1c2hTZXJ2aWNlKTsKKyAgICBtX3B1c2hTZXJ2aWNlU3RhcnRlZCA9
IHRydWU7CisKKyAgICBpZiAoIW1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVuY3Rpb25zLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW3RoaXNd
KCkgeworICAgICAgICB3aGlsZSAobV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuc2l6ZSgp
KSB7CisgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0gbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5j
dGlvbnMudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBmdW5jdGlvbigpOworICAgICAgICB9Cisg
ICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoRnVu
Y3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQoreworICAgIGlmICghbV9wdXNoU2VydmljZVN0YXJ0
ZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuYXBwZW5kKFdURk1v
dmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdW5jdGlvbigpOwor
fQorCiB2b2lkIERhZW1vbjo6YnJvYWRjYXN0RGVidWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVs
IG1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlv
bmFyeSA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxw
dHIsIDApKTsKQEAgLTMyNSw2ICszODMsOSBAQCB2b2lkIERhZW1vbjo6ZGVjb2RlQW5kSGFuZGxl
TWVzc2FnZSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lcwogICAg
IGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKICAgICAgICAg
aGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjppbmplY3RQdXNoTWVz
c2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3Zl
KHJlcGx5U2VuZGVyKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6Oklu
amVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVz
aERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2Fn
ZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJl
cGx5U2VuZGVyKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFBl
bmRpbmdQdXNoTWVzc2FnZXM6CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBs
eTxNZXNzYWdlSW5mbzo6Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcz4oY2xpZW50Q29ubmVjdGlvbiwg
ZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKICAgICAgICAgYnJlYWs7CkBA
IC00MzEsNiArNDkyLDQ2IEBAIHZvaWQgRGFlbW9uOjppbmplY3RQdXNoTWVzc2FnZUZvclRlc3Rp
bmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgUHVzCiAgICAgcmVwbHlTZW5k
ZXIodHJ1ZSk7CiB9CiAKK3ZvaWQgRGFlbW9uOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZv
clRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIHJlcGx5U2VuZGVyKQoreworICAg
IGlmICghY29ubmVjdGlvbi0+aG9zdEFwcEhhc1B1c2hJbmplY3RFbnRpdGxlbWVudCgpKSB7Cisg
ICAgICAgIGNvbm5lY3Rpb24tPmJyb2FkY2FzdERlYnVnTWVzc2FnZSgiQXR0ZW1wdGluZyB0byBp
bmplY3QgYSBwdXNoIG1lc3NhZ2UgZnJvbSBhbiB1bmVudGl0bGVkIHByb2Nlc3MiKTsKKyAgICAg
ICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcnVu
QWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBtZXNzYWdlID0gbWVzc2FnZSwgcmVwbHlT
ZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFt
X3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNlbmRlcihmYWxzZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGJ5dGVzID0gbWVzc2FnZS51
dGY4KCk7CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRh
IGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzLmRhdGEoKSBsZW5ndGg6IGJ5dGVzLmxlbmd0aCgp
XSk7CisKKyAgICAgICAgaWQgb2JqID0gW05TSlNPTlNlcmlhbGl6YXRpb24gSlNPTk9iamVjdFdp
dGhEYXRhOmRhdGEuZ2V0KCkgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOworICAgICAgICBpZiAo
IW9iaiB8fCAhW29iaiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkgeworICAg
ICAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIE5TTG9nKEAiZ290IG9iajogJUAiLCBvYmopOworCisgICAgICAgIG1fcHVz
aFNlcnZpY2UtPmRpZFJlY2VpdmVQdXNoTWVzc2FnZShvYmpbQCJ0b3BpYyJdLCBvYmpbQCJ1c2Vy
SW5mbyJdLCBbcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIHJlcGx5U2VuZGVyKHRydWUpOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
Kwordm9pZCBEYWVtb246OmhhbmRsZUluY29taW5nUHVzaChjb25zdCBTdHJpbmcmIGJ1bmRsZUlk
ZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJiBtZXNzYWdlKQoreworICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9wdXNoTWVzc2FnZXMuZW5zdXJlKGJ1bmRsZUlkZW50aWZpZXIsIFtdIHsK
KyAgICAgICAgcmV0dXJuIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiB7IH07CisgICAg
fSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZShtZXNzYWdl
KSk7CisKKyAgICBub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGJ1bmRsZUlkZW50
aWZpZXIpOworfQorCiB2b2lkIERhZW1vbjo6bm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJc0F2YWls
YWJsZShjb25zdCBTdHJpbmcmIGNsaWVudENvZGVTaWduaW5nSWRlbnRpZmllcikKIHsKICNpZiBQ
TEFURk9STShNQUMpCkBAIC00NjIsNiArNTYzLDkgQEAgdm9pZCBEYWVtb246OmdldFBlbmRpbmdQ
dXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmQK
IAogICAgIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiByZXN1bHRNZXNzYWdlczsKIAor
ICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9wdXNoTWVzc2FnZXMuZmluZChob3N0QXBwQ29kZVNp
Z25pbmdJZGVudGlmaWVyKTsgaXRlcmF0b3IgIT0gbV9wdXNoTWVzc2FnZXMuZW5kKCkpCisgICAg
ICAgIHN0ZDo6c3dhcChyZXN1bHRNZXNzYWdlcywgaXRlcmF0b3ItPnZhbHVlKTsKKwogICAgIGF1
dG8gaXRlcmF0b3IgPSBtX3Rlc3RpbmdQdXNoTWVzc2FnZXMuZmluZChob3N0QXBwQ29kZVNpZ25p
bmdJZGVudGlmaWVyKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV90ZXN0aW5nUHVzaE1lc3NhZ2Vz
LmVuZCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IGl0ZXJhdG9yLT52YWx1ZSkg
ewpAQCAtNDc2LDI1ICs1ODAsNTAgQEAgdm9pZCBEYWVtb246OmdldFBlbmRpbmdQdXNoTWVzc2Fn
ZXMoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmQKICAgICByZXBs
eVNlbmRlcihXVEZNb3ZlKHJlc3VsdE1lc3NhZ2VzKSk7CiB9CiAKLXZvaWQgRGFlbW9uOjpzdWJz
Y3JpYmVUb1B1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVS
TCYgc2NvcGVVUkwsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXBwbGljYXRpb25TZXJ2ZXJLZXks
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNj
cmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2
b2lkIERhZW1vbjo6c3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlk
UHVibGljS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6
OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5
U2VuZGVyKQogewotICAgIFVOVVNFRF9QQVJBTShhcHBsaWNhdGlvblNlcnZlcktleSk7Ci0gICAg
cmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNv
cmU6Ok5vdEFsbG93ZWRFcnJvciwgIkxhY2sgcGVybWlzc2lvbiJfcyB9KSk7CisgICAgcnVuQWZ0
ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlv
bi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmlu
ZygpLCB2YXBpZFB1YmxpY0tleSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICBy
ZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29y
ZTo6SW52YWxpZFN0YXRlRXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVk
Il9zIH0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcHVz
aFNlcnZpY2UtPnN1YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgdmFwaWRQdWJsaWNL
ZXksIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyAgICB9KTsKIH0KIAotdm9pZCBEYWVtb246OnVu
c3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNv
bnN0IFVSTCYgc2NvcGVVUkwsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHB1
c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4
cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2
b2lkIERhZW1vbjo6dW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiog
Y29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlv
bklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5
U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICBydW5BZnRlclN0YXJ0aW5n
UHVzaFNlcnZpY2UoW3RoaXMsIGJ1bmRsZUlkZW50aWZpZXIgPSBjb25uZWN0aW9uLT5ob3N0QXBw
Q29kZVNpZ25pbmdJZGVudGlmaWVyKCksIHNjb3BlID0gc2NvcGVVUkwuc3RyaW5nKCksIHN1YnNj
cmlwdGlvbklkZW50aWZpZXIsIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNlbmRlcildKCkg
bXV0YWJsZSB7CisgICAgICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAgICAgICAgICAgcmVw
bHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6
OkludmFsaWRTdGF0ZUVycm9yLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCJf
cyB9KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3B1c2hT
ZXJ2aWNlLT51bnN1YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgc3Vic2NyaXB0aW9u
SWRlbnRpZmllciwgV1RGTW92ZShyZXBseVNlbmRlcikpOworICAgIH0pOwogfQogCiB2b2lkIERh
ZW1vbjo6Z2V0UHVzaFN1YnNjcmlwdGlvbihDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBj
b25zdCBVUkwmIHNjb3BlVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVk
PHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVyKHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+IHsgfSk7CisgICAgcnVuQWZ0
ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlv
bi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmlu
ZygpLCByZXBseVNlbmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBpZiAoIW1fcHVzaFNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKG1ha2VV
bmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVF
cnJvciwgIlB1c2ggc2VydmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQiX3MgfSkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9wdXNoU2VydmljZS0+Z2V0U3Vi
c2NyaXB0aW9uKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7
CisgICAgfSk7CiB9CiAKIHZvaWQgRGFlbW9uOjpnZXRQdXNoUGVybWlzc2lvblN0YXRlKENsaWVu
dENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8dWludDhfdCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YT4mKT4mJiByZXBseVNlbmRlcikKIHsKKyAgICAvLyBGSVhNRQorI2lmIEhBVkUoQVBQTEVfUFVT
SF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JUKQorICAgIHJlcGx5U2VuZGVyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KFdlYkNvcmU6OlB1c2hQZXJtaXNzaW9uU3RhdGU6OkdyYW50ZWQpKTsKKyNlbHNl
CiAgICAgcmVwbHlTZW5kZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oV2ViQ29yZTo6UHVzaFBlcm1p
c3Npb25TdGF0ZTo6RGVuaWVkKSk7CisjZW5kaWYKIH0KIAogQ2xpZW50Q29ubmVjdGlvbiogRGFl
bW9uOjp0b0NsaWVudENvbm5lY3Rpb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oCmluZGV4IGJiZWI5NjhkZTdh
NzU5ZGRmMjc2ZmMxYmE2N2QyOGI2NjZhNDg2NDAuLmQzYzE3ZTY1ZGEzYWVjNTI0NGFiOTE2MTNi
YWMzY2Y2ZTllYWEyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbk1haW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25N
YWluLmgKQEAgLTI3LDYgKzI3LDYgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWludCBXZWJQ
dXNoRGFlbW9uTWFpbihpbnQsIGNvbnN0IGNoYXIqKik7CitpbnQgV2ViUHVzaERhZW1vbk1haW4o
aW50LCBjaGFyKiopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0gYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tCmluZGV4IDJhNjhlMThmYTIwMTUwNjYyMGQxYzM4
MTc0NDExZWIwYWEyYmRjNTkuLjYyNjE5ZjNhYzI0ZWQ0ZWI1ZTE4YTcyN2VjMDQ4ZjU5ZDMzYzY4
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4u
bW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbQpAQCAt
MzAsMjQgKzMwLDIxIEBACiAjaW1wb3J0ICJEYWVtb25EZWNvZGVyLmgiCiAjaW1wb3J0ICJEYWVt
b25FbmNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkxvZ0lu
aXRpYWxpemF0aW9uLmgiCiAjaW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCiAjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24u
aD4KKyNpbXBvcnQgPGdldG9wdC5oPgorI2ltcG9ydCA8d3RmL0xvZ0luaXRpYWxpemF0aW9uLmg+
CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vWFBD
U1BJLmg+CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8c2VydmVycy9i
b290c3RyYXAuaD4KLSNlbHNlCi0jaW1wb3J0IDxtYWNoL3N0ZF90eXBlcy5oPgotZXh0ZXJuICJD
IiB7Ci1leHRlcm4ga2Vybl9yZXR1cm5fdCBib290c3RyYXBfY2hlY2tfaW4obWFjaF9wb3J0X3Qg
Ym9vdHN0cmFwUG9ydCwgY29uc3QgY2hhciAqc2VydmljZU5hbWUsIG1hY2hfcG9ydF90Kik7Ci19
Ci0jZW5kaWYKLQogdXNpbmcgV2ViS2l0OjpEYWVtb246OkVuY29kZWRNZXNzYWdlOwogdXNpbmcg
V2ViUHVzaEQ6OkRhZW1vbjsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmluY29taW5nUHVzaFNlcnZp
Y2VOYW1lID0gImNvbS5hcHBsZS5hcHMud2Via2l0LndlYnB1c2hkLmluY29taW5nLXB1c2giOwor
c3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBlbnRpdGxlbWVudE5hbWUgPSAiY29tLmFwcGxlLnBy
aXZhdGUud2Via2l0LndlYnB1c2giX3M7CitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGRlZmF1
bHRNYWNoU2VydmljZU5hbWUgPSAiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5zZXJ2aWNlIl9z
Oworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBkZWZhdWx0SW5jb21pbmdQdXNoU2VydmljZU5h
bWUgPSAiY29tLmFwcGxlLmFwcy53ZWJraXQud2VicHVzaGQuaW5jb21pbmctcHVzaCJfczsKIAog
bmFtZXNwYWNlIFdlYlB1c2hEIHsKIApAQCAtNzQsMjMgKzcxLDU1IEBAIHVzaW5nIFdlYlB1c2hE
Ojpjb25uZWN0aW9uUmVtb3ZlZDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWludCBXZWJQdXNo
RGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgV2ViUHVzaERhZW1v
bk1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIGlmIChhcmdjICE9IDMgfHwgc3Ry
Y21wKGFyZ3ZbMV0sICItLW1hY2hTZXJ2aWNlTmFtZSIpKSB7Ci0gICAgICAgIE5TTG9nKEAidXNh
Z2U6IHdlYnB1c2hkIC0tbWFjaFNlcnZpY2VOYW1lIDxuYW1lPiIpOwotICAgICAgICByZXR1cm4g
LTE7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIG1hY2hTZXJ2aWNlTmFtZSA9IGFyZ3ZbMl07Ci0K
ICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgV2ViS2l0OjpzdGFydExpc3RlbmluZ0Zv
ck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCAiY29tLmFwcGxlLnByaXZh
dGUud2Via2l0LndlYnB1c2giLCBjb25uZWN0aW9uQWRkZWQsIGNvbm5lY3Rpb25SZW1vdmVkLCBj
b25uZWN0aW9uRXZlbnRIYW5kbGVyKTsKLQotICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBv
bmNlIHdlIGFjdHVhbGx5IHN0YXJ0IHVzaW5nIEFQU0Nvbm5lY3Rpb24uCi0gICAgICAgIG1hY2hf
cG9ydF90IGluY29taW5nTWVzc2FnZVBvcnQ7Ci0gICAgICAgIGlmIChib290c3RyYXBfY2hlY2tf
aW4oYm9vdHN0cmFwX3BvcnQsIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCAmaW5jb21pbmdNZXNz
YWdlUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBy
ZWdpc3RlciBmb3IgaW5jb21pbmcgcHVzaCBsYXVuY2ggcG9ydC4iKTsKLSAgICAgICAgCiAgICAg
ICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKworI2lmICFMT0dfRElTQUJMRUQgfHwg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIFdURjo6bG9nQ2hhbm5lbHMoKS5pbml0aWFs
aXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBXZWJDb3JlOjpsb2dDaGFubmVs
cygpLmluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIFdlYktpdDo6
bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworI2VuZGlm
IC8vICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisKKyAgICAgICAgc3Rh
dGljIHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworICAgICAgICAgICAgeyAibWFjaFNlcnZp
Y2VOYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdtJyB9LAorICAgICAgICAgICAgeyAiaW5j
b21pbmdQdXNoU2VydmljZU5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3AnIH0sCisgICAg
ICAgICAgICB7ICJ1c2VGYWtlUHVzaFNlcnZpY2UiLCBub19hcmd1bWVudCwgMCwgJ2YnIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBjb25zdCBjaGFyKiBtYWNoU2VydmljZU5hbWUgPSBkZWZhdWx0
TWFjaFNlcnZpY2VOYW1lOworICAgICAgICBjb25zdCBjaGFyKiBpbmNvbWluZ1B1c2hTZXJ2aWNl
TmFtZSA9IGRlZmF1bHRJbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZTsKKyAgICAgICAgYm9vbCB1c2VG
YWtlUHVzaFNlcnZpY2UgPSBmYWxzZTsKKworICAgICAgICBpbnQgYzsKKyAgICAgICAgaW50IG9w
dGlvbkluZGV4OworICAgICAgICB3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAi
Iiwgb3B0aW9ucywgJm9wdGlvbkluZGV4KSkgIT0gLTEpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
YykgeworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgbWFjaFNlcnZpY2VO
YW1lID0gb3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAn
cCc6CisgICAgICAgICAgICAgICAgaW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSBvcHRhcmc7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAg
ICAgICB1c2VGYWtlUHVzaFNlcnZpY2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVu
a25vd24gb3B0aW9uOiAlY1xuIiwgb3B0b3B0KTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgV2ViS2l0OjpzdGFydExpc3Rlbmlu
Z0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCBlbnRpdGxlbWVudE5h
bWUsIGNvbm5lY3Rpb25BZGRlZCwgY29ubmVjdGlvblJlbW92ZWQsIGNvbm5lY3Rpb25FdmVudEhh
bmRsZXIpOworCisgICAgICAgIGlmICh1c2VGYWtlUHVzaFNlcnZpY2UpCisgICAgICAgICAgICA6
OldlYlB1c2hEOjpEYWVtb246OnNpbmdsZXRvbigpLnN0YXJ0RmFrZVB1c2hTZXJ2aWNlKCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGxpYnJhcnlQYXRoID0gTlNTZWFyY2hQ
YXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1VzZXJEb21h
aW5NYXNrLCBZRVMpWzBdOworICAgICAgICAgICAgU3RyaW5nIHB1c2hEYXRhYmFzZVBhdGggPSBG
aWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKGxpYnJhcnlQYXRoLCB7ICJXZWJL
aXQiLCAiV2ViUHVzaCIsICJQdXNoRGF0YWJhc2UuZGIiIH0pOworICAgICAgICAgICAgOjpXZWJQ
dXNoRDo6RGFlbW9uOjpzaW5nbGV0b24oKS5zdGFydFB1c2hTZXJ2aWNlKGluY29taW5nUHVzaFNl
cnZpY2VOYW1lLCBwdXNoRGF0YWJhc2VQYXRoKTsKKyAgICAgICAgfQogICAgIH0KICAgICBDRlJ1
bkxvb3BSdW4oKTsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvd2VicHVzaGQuY3BwIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAK
aW5kZXggZmQwNGU0MDQ1ODU5OGVjODczOWFjMGYzZTlhOGI4ZjNmYmNhMWViOC4uNTljZWYwZDk4
NDMwNTU2NWFlYWQxOGMyMTIyYWQzZGZmZTE1OTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJw
dXNoZC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tNYWluLmg+CiAj
aW5jbHVkZSA8b3MvYXZhaWxhYmlsaXR5Lmg+CiAKLWludCBtYWluKGludCBhcmdjLCBjb25zdCBj
aGFyKiogYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICBXS1dl
YlB1c2hEYWVtb25NYWluKGFyZ2MsIGFyZ3YpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVlYTIzZGZmZDVlYTM4NDg1MzE2YmZkYTY0MTRm
ZDZiNzAwYjYxM2IuLjI3ZGMzOTg4OGYwMDhmY2JhZWQyYjI3ZWNmMzUzNzBmOWEyOTg1NWQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAyMi0wMS0yOCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgUHVzaFNlcnZpY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNTg1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICAtIE1vZGlmeSB0aGUgZXhpc3RpbmcgaW5qZWN0ZWQgcHVzaCB0ZXN0IHRvIGlu
amVjdCBhbiBlbmNyeXB0ZWQgcHVzaC4KKyAgICAgICAgIC0gQWRkIGEgZmV3IGJhc2ljIHRlc3Qg
Y2FzZXMgZm9yIHN1YnNjcmliaW5nIGFuZCB1bnN1YnNjcmliaW5nIGZyb20gcHVzaC4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToK
KyAgICAgICAgKC1bTm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhh
bmRsZXI6XSk6CisgICAgICAgICgtW05vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVz
ZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OnRlc3RXZWJQdXNoRGFlbW9uUExpc3QpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Y3JlYXRlTWVzc2FnZURpY3Rpb25hcnkpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6c2VuZE1lc3NhZ2VUb0RhZW1vbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZW5kTWVz
c2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnNl
bmRDb25maWd1cmF0aW9uV2l0aEF1ZGl0VG9rZW4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpmdW5jdGlvbik6IERlbGV0ZWQuCisKIDIw
MjItMDEtMzAgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFB1c2hE
YXRhYmFzZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XZWJQdXNoRGFlbW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IDZkOTJjZTk3ODZhZjgxYzc4NGIxMjQ0NDE5ZTZkZTYy
ODAzY2U4MjAuLmU2ZjEyZWMzMTkxNTZkOTYzZTNmODEwOTJmYzFlMGJlYWZhNmY3ZDAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1v
bi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hE
YWVtb24ubW0KQEAgLTM1LDEzICszNSwxOCBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5j
ZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLRXhwZXJpbWVu
dGFsRmVhdHVyZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uLmg+CiAjaW1wb3J0IDxtYWNoL21hY2hfaW5pdC5oPgogI2ltcG9ydCA8bWFjaC90YXNr
Lmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCiAKK3VzaW5nIFdlYktpdDo6
V2ViUHVzaEQ6Ok1lc3NhZ2VUeXBlOworCiBzdGF0aWMgYm9vbCBhbGVydFJlY2VpdmVkID0gZmFs
c2U7CiBAaW50ZXJmYWNlIE5vdGlmaWNhdGlvblBlcm1pc3Npb25EZWxlZ2F0ZSA6IE5TT2JqZWN0
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+CiBAZW5kCkBAIC02MSw2ICs2NiwyNiBAQCAtICh2b2lkKXdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVz
c2FnZTooTlNTdHJpbgogCiBAZW5kCiAKK0BpbnRlcmZhY2UgTm90aWZpY2F0aW9uU2NyaXB0TWVz
c2FnZUhhbmRsZXIgOiBOU09iamVjdDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPiB7CisgICAgQmxv
Y2tQdHI8dm9pZChpZCk+IF9tZXNzYWdlSGFuZGxlcjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIE5vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyCisKKy0gKHZvaWQpc2V0TWVzc2Fn
ZUhhbmRsZXI6KHZvaWQgKF4pKGlkKSloYW5kbGVyCit7CisgICAgX21lc3NhZ2VIYW5kbGVyID0g
aGFuZGxlcjsKK30KKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRl
bnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNz
YWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgaWYgKF9tZXNzYWdlSGFuZGxl
cikKKyAgICAgICAgX21lc3NhZ2VIYW5kbGVyKG1lc3NhZ2UuYm9keSk7Cit9CisKK0BlbmQKKwog
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgUmV0YWluUHRyPE5TVVJMPiB0ZXN0
V2ViUHVzaERhZW1vbkxvY2F0aW9uKCkKQEAgLTc5LDcgKzEwNCw4IEBAIHN0YXRpYyBOU0RpY3Rp
b25hcnk8TlNTdHJpbmcgKiwgaWQ+ICp0ZXN0V2ViUHVzaERhZW1vblBMaXN0KE5TVVJMICpzdG9y
YWdlTG9jYXRpCiAgICAgICAgIEAiUHJvZ3JhbUFyZ3VtZW50cyIgOiBAWwogICAgICAgICAgICAg
dGVzdFdlYlB1c2hEYWVtb25Mb2NhdGlvbigpLmdldCgpLnBhdGgsCiAgICAgICAgICAgICBAIi0t
bWFjaFNlcnZpY2VOYW1lIiwKLSAgICAgICAgICAgIEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRh
ZW1vbi5zZXJ2aWNlIgorICAgICAgICAgICAgQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9u
LnNlcnZpY2UiLAorICAgICAgICAgICAgQCItLXVzZUZha2VQdXNoU2VydmljZSIKICAgICAgICAg
XQogICAgIH07CiB9CkBAIC0xMzUsMjQgKzE2MSwyNCBAQCBzdGF0aWMgdm9pZCBjbGVhblVwVGVz
dFdlYlB1c2hEKE5TVVJMICp0ZW1wRGlyKQogICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKIH0KIAot
c3RhdGljIFJldGFpblB0cjx4cGNfb2JqZWN0X3Q+IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KHVp
bnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3N0YXRp
YyBSZXRhaW5QdHI8eHBjX29iamVjdF90PiBjcmVhdGVNZXNzYWdlRGljdGlvbmFyeShNZXNzYWdl
VHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAg
IGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIs
IG51bGxwdHIsIDApKTsKICAgICB4cGNfZGljdGlvbmFyeV9zZXRfdWludDY0KGRpY3Rpb25hcnku
Z2V0KCksICJwcm90b2NvbCB2ZXJzaW9uIiwgMSk7Ci0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X3Vp
bnQ2NChkaWN0aW9uYXJ5LmdldCgpLCAibWVzc2FnZSB0eXBlIiwgbWVzc2FnZVR5cGUpOworICAg
IHhwY19kaWN0aW9uYXJ5X3NldF91aW50NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlw
ZSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtZXNzYWdlVHlwZSkpOwogICAgIHhwY19kaWN0aW9u
YXJ5X3NldF9kYXRhKGRpY3Rpb25hcnkuZ2V0KCksICJlbmNvZGVkIG1lc3NhZ2UiLCBtZXNzYWdl
LmRhdGEoKSwgbWVzc2FnZS5zaXplKCkpOwogICAgIHJldHVybiBXVEZNb3ZlKGRpY3Rpb25hcnkp
OwogfQogCiAvLyBVc2VzIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gdG8gdGhlIGRhZW1vbiBmb3Ig
YSBvbmUtb2ZmIG1lc3NhZ2UKLXZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbih4cGNfY29ubmVjdGlv
bl90IGNvbm5lY3Rpb24sIHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgbWVzc2FnZSkKK3ZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbih4cGNfY29ubmVjdGlvbl90IGNv
bm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlTWVzc2FnZURpY3Rpb25h
cnkobWVzc2FnZVR5cGUsIG1lc3NhZ2UpOwogICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2Fn
ZShjb25uZWN0aW9uLCBkaWN0aW9uYXJ5LmdldCgpKTsKIH0KIAogLy8gVXNlcyBhbiBleGlzdGlu
ZyBjb25uZWN0aW9uIHRvIHRoZSBkYWVtb24gZm9yIGEgb25lLW9mZiBtZXNzYWdlLCB3YWl0aW5n
IGZvciB0aGUgcmVwbHkKLXZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh4
cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3ZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdG
b3JSZXBseSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VU
eXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9u
YXJ5ID0gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkobWVzc2FnZVR5cGUsIG1lc3NhZ2UpOwogCkBA
IC0xODEsNyArMjA3LDcgQEAgc3RhdGljIHZvaWQgc2VuZENvbmZpZ3VyYXRpb25XaXRoQXVkaXRU
b2tlbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCiAgICAgICAgIGVuY29kZWRNZXNzYWdl
WzFdID0gMTsKICAgICAgICAgZW5jb2RlZE1lc3NhZ2VbMl0gPSAzMjsKICAgICAgICAgbWVtY3B5
KCZlbmNvZGVkTWVzc2FnZVsxMF0sICZ0b2tlbiwgc2l6ZW9mKHRva2VuKSk7Ci0gICAgICAgIHNl
bmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbiwgNiwgZW5jb2RlZE1lc3NhZ2UpOworICAgICAg
ICBzZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlOjpVcGRhdGVDb25u
ZWN0aW9uQ29uZmlndXJhdGlvbiwgZW5jb2RlZE1lc3NhZ2UpOwogICAgIH0KIH0KIApAQCAtMjUy
LDcgKzI3OCw3IEBAIFRFU1QoV2ViUHVzaEQsIEJhc2ljQ29tbXVuaWNhdGlvbikKICAgICAgICAg
YXV0byBkaWN0aW9uYXJ5ID0gYWRvcHROUyh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwg
bnVsbHB0ciwgMCkpOwogICAgICAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZE1lc3NhZ2UoMSk7
CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzBdID0gMTsKLSAgICAgICAgc2VuZE1lc3NhZ2VUb0Rh
ZW1vbihjb25uZWN0aW9uLmdldCgpLCA1LCBlbmNvZGVkTWVzc2FnZSk7CisgICAgICAgIHNlbmRN
ZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OlNldERlYnVnTW9k
ZUlzRW5hYmxlZCwgZW5jb2RlZE1lc3NhZ2UpOwogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwogICAgIH0KIApAQCAtMzYxLDU0ICszODcsNiBAQCBURVNUKFdlYlB1c2hE
LCBQZXJtaXNzaW9uTWFuYWdlbWVudCkKICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJl
Y3RvcnkpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogbWFpblNXQnl0ZXMgPSBSIlNXUkVTT1VS
Q0UoCi08c2NyaXB0PgotZnVuY3Rpb24gbG9nKG1zZykKLXsKLSAgICB3aW5kb3cud2Via2l0Lm1l
c3NhZ2VIYW5kbGVycy5zdy5wb3N0TWVzc2FnZShtc2cpOwotfQotCi1jb25zdCBjaGFubmVsID0g
bmV3IE1lc3NhZ2VDaGFubmVsKCk7Ci1jaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IChldmVudCkg
PT4gbG9nKGV2ZW50LmRhdGEpOwotCi1uYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rlcign
L3N3LmpzJykudGhlbigocmVnaXN0cmF0aW9uKSA9PiB7Ci0gICAgaWYgKHJlZ2lzdHJhdGlvbi5h
Y3RpdmUpIHsKLSAgICAgICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7cG9ydDog
Y2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQyXSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgd29ya2VyID0gcmVnaXN0cmF0aW9uLmluc3RhbGxpbmc7Ci0gICAgd29ya2VyLmFkZEV2
ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3b3Jr
ZXIuc3RhdGUgPT0gJ2FjdGl2YXRlZCcpCi0gICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uo
e3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5wb3J0Ml0pOwotICAgIH0pOwotfSkuY2F0
Y2goZnVuY3Rpb24oZXJyb3IpIHsKLSAgICBsb2coIlJlZ2lzdHJhdGlvbiBmYWlsZWQgd2l0aDog
IiArIGVycm9yKTsKLX0pOwotPC9zY3JpcHQ+Ci0pU1dSRVNPVVJDRSI7Ci0KLXN0YXRpYyBjb25z
dCBjaGFyKiBzY3JpcHRCeXRlcyA9IFIiU1dSRVNPVVJDRSgKLWxldCBwb3J0Owotc2VsZi5hZGRF
dmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7Ci0gICAgcG9ydCA9IGV2ZW50LmRh
dGEucG9ydDsKLSAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWFkeSIpOwotfSk7Ci1zZWxmLmFkZEV2
ZW50TGlzdGVuZXIoInB1c2giLCAoZXZlbnQpID0+IHsKLSAgICB0cnkgewotICAgICAgICBpZiAo
IWV2ZW50LmRhdGEpIHsKLSAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiBu
dWxsIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb25z
dCB2YWx1ZSA9IGV2ZW50LmRhdGEudGV4dCgpOwotICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJS
ZWNlaXZlZDogIiArIHZhbHVlKTsKLSAgICAgICAgaWYgKHZhbHVlICE9ICdTd2VldCBQb3RhdG9l
cycpCi0gICAgICAgICAgICBldmVudC53YWl0VW50aWwoUHJvbWlzZS5yZWplY3QoJ0kgd2FudCBz
d2VldCBwb3RhdG9lcycpKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIHBvcnQucG9zdE1l
c3NhZ2UoIkdvdCBleGNlcHRpb24gIiArIGUpOwotICAgIH0KLX0pOwotKVNXUkVTT1VSQ0UiOwot
CiBzdGF0aWMgdm9pZCBjbGVhcldlYnNpdGVEYXRhU3RvcmUoV0tXZWJzaXRlRGF0YVN0b3JlICpz
dG9yZSkKIHsKICAgICBfX2Jsb2NrIGJvb2wgY2xlYXJlZFN0b3JlID0gZmFsc2U7CkBAIC00MTgs
NzYgKzM5NiwyODkgQEAgc3RhdGljIHZvaWQgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFdLV2Vic2l0
ZURhdGFTdG9yZSAqc3RvcmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjbGVhcmVk
U3RvcmUpOwogfQogCi1URVNUKFdlYlB1c2hELCBIYW5kbGVJbmplY3RlZFB1c2gpCi17Ci0gICAg
W1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5z
XTsKK2NsYXNzIFdlYlB1c2hEVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVj
dGVkOgorICAgIFdlYlB1c2hEVGVzdCgpCisgICAgeworICAgICAgICBbV0tXZWJzaXRlRGF0YVN0
b3JlIF9hbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnNdOwogCi0gICAgTlNVUkwg
KnRlbXBEaXJlY3RvcnkgPSBzZXRVcFRlc3RXZWJQdXNoRCgpOworICAgICAgICBtX3RlbXBEaXJl
Y3RvcnkgPSByZXRhaW5QdHIoc2V0VXBUZXN0V2ViUHVzaEQoKSk7CiAKLSAgICBhdXRvIGRhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbiBuZXddKTsKLSAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hNYWNo
U2VydmljZU5hbWUgPSBAIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSI7Ci0g
ICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoRGFlbW9uVXNlc01vY2tCdW5k
bGVzRm9yVGVzdGluZyA9IFlFUzsKLSAgICBhdXRvIGRhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dl
YnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29u
ZmlndXJhdGlvbi5nZXQoKV0pOworICAgICAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKKyAgICAg
ICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFjaFNlcnZpY2VOYW1lID0g
QCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOworICAgICAgICBkYXRhU3Rv
cmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hEYWVtb25Vc2VzTW9ja0J1bmRsZXNGb3JUZXN0
aW5nID0gWUVTOworICAgICAgICBtX2RhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRh
U3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlv
bi5nZXQoKV0pOwogCi0gICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgPSBkYXRhU3RvcmUuZ2V0KCk7Ci0gICAgY2xlYXJXZWJzaXRlRGF0YVN0
b3JlKFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdKTsKKyAgICAgICAgbV9jb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
KyAgICAgICAgbV9jb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBtX2RhdGFT
dG9yZS5nZXQoKTsKKyAgICAgICAgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFttX2NvbmZpZ3VyYXRp
b24gd2Vic2l0ZURhdGFTdG9yZV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVy
ZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllFU107Ci0gICAgZm9yIChfV0tFeHBlcmlt
ZW50YWxGZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZlcmVuY2VzIF9leHBlcmltZW50YWxGZWF0
dXJlc10pIHsKLSAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWls
dEluTm90aWZpY2F0aW9uc0VuYWJsZWQiXSkKLSAgICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBw
cmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAg
IFttX2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFi
bGVkOllFU107CisgICAgICAgIGZvciAoX1dLRXhwZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVyZSBp
biBbV0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFsRmVhdHVyZXNdKSB7CisgICAgICAgICAgICBp
ZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1aWx0SW5Ob3RpZmljYXRpb25zRW5h
YmxlZCJdKQorICAgICAgICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBf
c2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJQdXNoQVBJRW5hYmxlZCJdKQorICAgICAg
ICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMg
Zm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgfQorCisgICAgICAgIG1fdGVzdE1lc3NhZ2VI
YW5kbGVyID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAg
ICAgICBbW21fY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1l
c3NhZ2VIYW5kbGVyOm1fdGVzdE1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0Il07CisK
KyAgICAgICAgbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tOb3RpZmlj
YXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICBbW21fY29u
ZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVy
Om1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAIm5vdGUiXTsKICAgICB9
CiAKLSAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFuZGxl
ciBhbGxvY10gaW5pdF0pOwotICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xs
ZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJz
dyJdOwotICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW21lc3NhZ2VIYW5kbGVy
IGFkZE1lc3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRsZXI6XnsKLSAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBjaGFyKiBodG1sU291cmNlLCBjb25zdCBjaGFy
KiBzZXJ2aWNlV29ya2VyU2NyaXB0U291cmNlKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0YW50cyA9IFIiU1JDKAorICAgICAgICAgICAgY29uc3QgVkFMSURfU0VSVkVS
X0tFWSA9ICJCQTFIeHp5aTFSVU0xYjV3anhzbjduR3hBc3p3MnU2MW0xNjRpM01yQUl4SEY2WUs1
aDRTRFlpYy1kUnVVX1JDUENmQTVhcTlvalN3azVZMkVtQ2xCUHMiOworICAgICAgICAgICAgY29u
c3QgVkFMSURfU0VSVkVSX0tFWV9USEFUX0NBVVNFU19JTkpFQ1RFRF9GQUlMVVJFID0gIkJFQXhh
VU1vMXM4dGpPUnhKZm5TU3ZXaFliNHU1MWtnMWhXVDJzXzlncFY3WnhhcjFwRl8yQlE4QW5jdUFk
UzJCb0xoTjRxYXh6QnkyQ3dIRThCQnpXZyI7CisgICAgICAgIClTUkMiOworICAgICAgICBtX3Nl
cnZlci5yZXNldChuZXcgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcih7CisgICAgICAgICAgICB7
ICIvIiwgeyBodG1sU291cmNlIH0gfSwKKyAgICAgICAgICAgIHsgIi9jb25zdGFudHMuanMiLCB7
IHsgeyAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgY29uc3Rh
bnRzIH0gfSwKKyAgICAgICAgICAgIHsgIi9zdy5qcyIsIHsgeyB7ICJDb250ZW50LVR5cGUiLCAi
YXBwbGljYXRpb24vamF2YXNjcmlwdCIgfSB9LCBzZXJ2aWNlV29ya2VyU2NyaXB0U291cmNlIH0g
fQorICAgICAgICB9LCBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cCkp
OworCisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjptX2NvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKKyAgICAgICAgW21fd2ViVmlldyBsb2FkUmVxdWVzdDptX3NlcnZl
ci0+cmVxdWVzdCgpXTsKKyAgICB9CisKKyAgICB+V2ViUHVzaERUZXN0KCkKKyAgICB7CisgICAg
ICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQobV90ZW1wRGlyZWN0b3J5LmdldCgpKTsKKyAgICB9CisK
KyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fdGVtcERpcmVjdG9yeTsKKyAgICBSZXRhaW5QdHI8V0tX
ZWJzaXRlRGF0YVN0b3JlPiBtX2RhdGFTdG9yZTsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29u
ZmlndXJhdGlvbj4gbV9jb25maWd1cmF0aW9uOworICAgIFJldGFpblB0cjxUZXN0TWVzc2FnZUhh
bmRsZXI+IG1fdGVzdE1lc3NhZ2VIYW5kbGVyOworICAgIFJldGFpblB0cjxOb3RpZmljYXRpb25T
Y3JpcHRNZXNzYWdlSGFuZGxlcj4gbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcj4gbV9zZXJ2ZXI7CisgICAg
UmV0YWluUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OworfTsKKworVEVTVF9GKFdlYlB1c2hEVGVz
dCwgSGFuZGxlSW5qZWN0ZWRQdXNoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sU291
cmNlID0gUiJTV1JFU09VUkNFKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgeworICAgICAg
ICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0LnBvc3RNZXNzYWdlKG1zZyk7Cisg
ICAgfQorCisgICAgY29uc3QgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworICAgIGNo
YW5uZWwucG9ydDEub25tZXNzYWdlID0gKGV2ZW50KSA9PiBsb2coZXZlbnQuZGF0YSk7CisKKyAg
ICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAo
KSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2
aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0
cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7CisgICAgICAgICAgICB1c2VyVmlzaWJsZU9u
bHk6IHRydWUsCisgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZlcktleTogVkFMSURfU0VSVkVS
X0tFWQorICAgICAgICB9KTsKKyAgICAgICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2Fn
ZSh7cG9ydDogY2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQyXSk7CisgICAgfSkuY2F0Y2go
ZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgbG9nKCJSZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6
ICIgKyBlcnJvcik7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgKVNXUkVTT1VSQ0UiOwor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlcnZpY2VXb3JrZXJTb3VyY2UgPSBSIlNXUkVTT1VS
Q0UoCisgICAgbGV0IHBvcnQ7CisgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwg
KGV2ZW50KSA9PiB7CisgICAgICAgIHBvcnQgPSBldmVudC5kYXRhLnBvcnQ7CisgICAgICAgIHBv
cnQucG9zdE1lc3NhZ2UoIlJlYWR5Iik7CisgICAgfSk7CisgICAgc2VsZi5hZGRFdmVudExpc3Rl
bmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAo
IWV2ZW50LmRhdGEpIHsKKyAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZl
ZDogbnVsbCBkYXRhIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5kYXRhLnRleHQoKTsKKyAgICAgICAgICAg
IHBvcnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiAiICsgdmFsdWUpOworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJFcnJvcjogIiArIGUpOworICAg
ICAgICB9CisgICAgfSk7CisgICAgKVNXUkVTT1VSQ0UiOworCisgICAgX19ibG9jayBib29sIHJl
YWR5ID0gZmFsc2U7CisgICAgX19ibG9jayBib29sIGdvdEV4cGVjdGVkTWVzc2FnZSA9IGZhbHNl
OworICAgIFttX3Rlc3RNZXNzYWdlSGFuZGxlciBhZGRNZXNzYWdlOkAiUmVhZHkiIHdpdGhIYW5k
bGVyOl57CisgICAgICAgIHJlYWR5ID0gdHJ1ZTsKICAgICB9XTsKLSAgICBbbWVzc2FnZUhhbmRs
ZXIgYWRkTWVzc2FnZTpAIlJlY2VpdmVkOiBIZWxsbyBXb3JsZCIgd2l0aEhhbmRsZXI6XnsKLSAg
ICAgICAgZG9uZSA9IHRydWU7CisgICAgW21fdGVzdE1lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6
QCJSZWNlaXZlZDogV2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24iIHdp
dGhIYW5kbGVyOl57CisgICAgICAgIGdvdEV4cGVjdGVkTWVzc2FnZSA9IHRydWU7CiAgICAgfV07
CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyIHNlcnZlcih7Ci0gICAgICAgIHsgIi8i
LCB7IG1haW5TV0J5dGVzIH0gfSwKLSAgICAgICAgeyAiL3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQt
VHlwZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIHNjcmlwdEJ5dGVzIH0gfQotICAg
IH0sIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwKTsKKyAgICBsb2Fk
UmVxdWVzdChodG1sU291cmNlLCBzZXJ2aWNlV29ya2VyU291cmNlKTsKIAotICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7Ci0g
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZyZWFkeSk7CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwotICAgIGRvbmUgPSBmYWxzZTsKKyAgICBTdHJpbmcgYnVuZGxlSWRlbnRpZmllciA9
ICJjb20uYXBwbGUuV2ViS2l0LlRlc3RXZWJLaXRBUEkiX3M7CisgICAgU3RyaW5nIHNjb3BlID0g
bV9zZXJ2ZXItPnJlcXVlc3QoKS5VUkwuYWJzb2x1dGVTdHJpbmc7CisgICAgU3RyaW5nIHRvcGlj
ID0gYnVuZGxlSWRlbnRpZmllciArICIgIl9zICsgc2NvcGU7CiAKLSAgICAvLyBJbmplY3QgcHVz
aCBtZXNzYWdlCi0gICAgYXV0byBlbmNvZGVkTWVzc2FnZSA9IGVuY29kZVN0cmluZygiY29tLmFw
cGxlLldlYktpdC5UZXN0V2ViS2l0QVBJIik7Ci0gICAgZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVj
dG9yKGVuY29kZVN0cmluZyhzZXJ2ZXIucmVxdWVzdCgpLlVSTC5hYnNvbHV0ZVN0cmluZykpOwot
ICAgIGVuY29kZWRNZXNzYWdlLmFwcGVuZFZlY3RvcihlbmNvZGVTdHJpbmcoIkhlbGxvIFdvcmxk
IikpOworICAgIC8vIEZyb20gZXhhbXBsZSBpbiBSRkM4MjkxIFNlY3Rpb24gNS4KKyAgICBTdHJp
bmcgcGF5bG9hZEJhc2U2NFVSTCA9ICJER3Y2cmExbmxZZ0RDUzFGUm5iemx3QUFFQUJCQlA0ejlL
c042bkdSVGJWWUlfYzdWSlNQUVRCdGtnY3kyN21sbWxNb1pJSWdEbGw2ZTN2Q1lMb2NJbm1ZV0Ft
UzZUbHpBQzh3RXFLSzZQQnJ1M2psN0FfeWw5NWJRcHU2Y1ZQVHBLNE1xZ2tmMUNYenRMVkJTdDJL
czNvWndidXdYUFhMV3lvdUJXTFZXR05XUWV4U2dTeHNqX1F1bGN5NGEtZk4iX3M7CisgICAgU3Ry
aW5nIHBheWxvYWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhiYXNlNjRVUkxEZWNvZGUo
cGF5bG9hZEJhc2U2NFVSTCkudmFsdWUoKSk7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBmb3JtYXQg
dGhhdCBBUFMgdXNlcyBmb3IgZGVsaXZlcmluZyBwdXNoZXMuCisgICAgTlNEYXRhICpkYXRhID0g
W05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0OkB7CisgICAgICAgIEAidG9w
aWMiOiAoTlNTdHJpbmcgKil0b3BpYywKKyAgICAgICAgQCJ1c2VySW5mbyI6IEB7CisgICAgICAg
ICAgICBAImNvbnRlbnRfZW5jb2RpbmciOiBAImFlczEyOGdjbSIsCisgICAgICAgICAgICBAInBh
eWxvYWQiOiAoTlNTdHJpbmcgKilwYXlsb2FkQmFzZTY0CisgICAgICAgIH0KKyAgICB9IG9wdGlv
bnM6MCBlcnJvcjpudWxscHRyXTsKKworICAgIFN0cmluZyBtZXNzYWdlIHsgc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhciAqPihkYXRhLmJ5dGVzKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGEubGVu
Z3RoKSB9OworICAgIGF1dG8gZW5jb2RlZE1lc3NhZ2UgPSBlbmNvZGVTdHJpbmcoV1RGTW92ZSht
ZXNzYWdlKSk7CiAKICAgICBhdXRvIHV0aWxpdHlDb25uZWN0aW9uID0gY3JlYXRlQW5kQ29uZmln
dXJlQ29ubmVjdGlvblRvU2VydmljZSgib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2
aWNlIik7Ci0gICAgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh1dGlsaXR5Q29u
bmVjdGlvbi5nZXQoKSwgNywgZW5jb2RlZE1lc3NhZ2UpOworICAgIHNlbmRNZXNzYWdlVG9EYWVt
b25XYWl0aW5nRm9yUmVwbHkodXRpbGl0eUNvbm5lY3Rpb24uZ2V0KCksIE1lc3NhZ2VUeXBlOjpJ
bmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcsIGVuY29kZWRNZXNzYWdlKTsKIAog
ICAgIC8vIEZldGNoIHB1c2ggbWVzc2FnZXMKKyAgICBfX2Jsb2NrIGJvb2wgZ290TWVzc2FnZXMg
PSBmYWxzZTsKICAgICBfX2Jsb2NrIFJldGFpblB0cjxOU0FycmF5PE5TRGljdGlvbmFyeSAqPj4g
bWVzc2FnZXM7Ci0gICAgW2RhdGFTdG9yZSBfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczpeKE5TQXJy
YXk8TlNEaWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykgeworICAgIFttX2RhdGFTdG9yZSBfZ2V0
UGVuZGluZ1B1c2hNZXNzYWdlczpeKE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdl
cykgewogICAgICAgICBtZXNzYWdlcyA9IHJhd01lc3NhZ2VzOwotICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICAgICAgZ290TWVzc2FnZXMgPSB0cnVlOwogICAgIH1dOwotICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAgZG9uZSA9IGZhbHNlOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZXMpOwogCiAgICAgRVhQRUNUX0VRKFttZXNzYWdlcyBj
b3VudF0sIDF1KTsKIAogICAgIC8vIEhhbmRsZSBwdXNoIG1lc3NhZ2UKICAgICBfX2Jsb2NrIGJv
b2wgcHVzaE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9wcm9jZXNz
UHVzaE1lc3NhZ2U6W21lc3NhZ2VzIGZpcnN0T2JqZWN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKGJv
b2wgcmVzdWx0KSB7CisgICAgW21fZGF0YVN0b3JlIF9wcm9jZXNzUHVzaE1lc3NhZ2U6W21lc3Nh
Z2VzIGZpcnN0T2JqZWN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKGJvb2wgcmVzdWx0KSB7CiAgICAg
ICAgIHB1c2hNZXNzYWdlUHJvY2Vzc2VkID0gdHJ1ZTsKICAgICB9XTsKLSAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290
RXhwZWN0ZWRNZXNzYWdlKTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnB1c2hNZXNz
YWdlUHJvY2Vzc2VkKTsKK30KIAotICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9y
eSk7CitURVNUX0YoV2ViUHVzaERUZXN0LCBTdWJzY3JpYmVUZXN0KQoreworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzb3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9Ii9jb25zdGFudHMu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIu
cmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCByZWdp
c3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKKyAgICAgICAg
bGV0IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgc3Vic2Ny
aXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7CisgICAg
ICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAgICAgIGFwcGxp
Y2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZCisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHN1YnNjcmlwdGlvbi50b0pTT04oKTsKKyAgICAgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gIkVycm9yOiAiICsgZTsKKyAgICAgICAgfQorICAg
ICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5ub3RlLnBvc3RNZXNzYWdlKHJlc3Vs
dCk7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgKUhUTUwiOworCisgICAgX19ibG9jayBS
ZXRhaW5QdHI8aWQ+IG9iaiA9IG5pbDsKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwor
ICAgIFttX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQg
bWVzc2FnZSkgeworICAgICAgICBvYmogPSBtZXNzYWdlOworICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KHNvdXJjZSwgIiIpOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBBU1NFUlRfVFJVRShbb2JqIGlzS2luZE9mQ2xh
c3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKworICAgIE5TRGljdGlvbmFyeSAqc3Vic2NyaXB0
aW9uID0gb2JqLmdldCgpOworICAgIEFTU0VSVF9UUlVFKFtzdWJzY3JpcHRpb25bQCJlbmRwb2lu
dCJdIGhhc1ByZWZpeDpAImh0dHBzOi8vIl0pOworICAgIEFTU0VSVF9UUlVFKFtzdWJzY3JpcHRp
b25bQCJrZXlzIl0gaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pOworCisgICAg
Ly8gU2hhcmVkIGF1dGggc2VjcmV0IHNob3VsZCBiZSAxNiBieXRlcyAoMjIgYnl0ZXMgaW4gdW5w
YWRkZWQgYmFzZTY0dXJsKS4KKyAgICBBU1NFUlRfRVEoW3N1YnNjcmlwdGlvbltAImtleXMiXVtA
ImF1dGgiXSBsZW5ndGhdLCAyMnUpOworCisgICAgLy8gQ2xpZW50IHB1YmxpYyBrZXkgc2hvdWxk
IGJlIDY1IGJ5dGVzICg4NyBieXRlcyBpbiB1bnBhZGRlZCBiYXNlNjR1cmwpLgorICAgIEFTU0VS
VF9FUShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdW0AicDI1NmRoIl0gbGVuZ3RoXSwgODd1KTsKK30K
KworVEVTVF9GKFdlYlB1c2hEVGVzdCwgU3Vic2NyaWJlRmFpbHVyZVRlc3QpCit7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHNvdXJjZSA9IFIiSFRNTCgKKyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0
YW50cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdv
cmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0
IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAg
ICAgICBsZXQgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBz
dWJzY3JpcHRpb24gPSBhd2FpdCByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsK
KyAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICAgICAg
YXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVlfVEhBVF9DQVVTRVNfSU5KRUNU
RURfRkFJTFVSRQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXN1bHQgPSBzdWJzY3Jp
cHRpb24udG9KU09OKCk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9ICJFcnJvcjogIiArIGU7CisgICAgICAgIH0KKyAgICAgICAgd2luZG93LndlYmtpdC5tZXNz
YWdlSGFuZGxlcnMubm90ZS5wb3N0TWVzc2FnZShyZXN1bHQpOworICAgIH0pOworICAgIDwvc2Ny
aXB0PgorICAgIClIVE1MIjsKKworICAgIF9fYmxvY2sgUmV0YWluUHRyPGlkPiBvYmogPSBuaWw7
CisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbbV9ub3RpZmljYXRpb25NZXNz
YWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlkIG1lc3NhZ2UpIHsKKyAgICAgICAgb2Jq
ID0gbWVzc2FnZTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBsb2FkUmVx
dWVzdChzb3VyY2UsICIiKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwor
CisgICAgLy8gU3BlYyBzYXlzIHRoYXQgYW4gZXJyb3IgaW4gdGhlIHB1c2ggc2VydmljZSBzaG91
bGQgYmUgYW4gQWJvcnRFcnJvci4KKyAgICBBU1NFUlRfVFJVRShbb2JqIGlzS2luZE9mQ2xhc3M6
W05TU3RyaW5nIGNsYXNzXV0pOworICAgIEFTU0VSVF9UUlVFKFtvYmogaGFzUHJlZml4OkAiRXJy
b3I6IEFib3J0RXJyb3IiXSk7Cit9CisKK1RFU1RfRihXZWJQdXNoRFRlc3QsIFVuc3Vic2NyaWJl
VGVzdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc291cmNlID0gUiJIVE1MKAorICAgIDxz
Y3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIG5h
dmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvc3cuanMnKS50aGVuKGFzeW5jICgpID0+
IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VX
b3JrZXIucmVhZHk7CisgICAgICAgIGxldCByZXN1bHQgPSBudWxsOworICAgICAgICB0cnkgewor
ICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFu
YWdlci5zdWJzY3JpYmUoeworICAgICAgICAgICAgICAgIHVzZXJWaXNpYmxlT25seTogdHJ1ZSwK
KyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWQor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBsZXQgcmVzdWx0MSA9IGF3YWl0IHN1YnNjcmlw
dGlvbi51bnN1YnNjcmliZSgpOworICAgICAgICAgICAgbGV0IHJlc3VsdDIgPSBhd2FpdCBzdWJz
Y3JpcHRpb24udW5zdWJzY3JpYmUoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFtyZXN1bHQxLCBy
ZXN1bHQyXTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gIkVy
cm9yOiAiICsgZTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5k
bGVycy5ub3RlLnBvc3RNZXNzYWdlKHJlc3VsdCk7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+Cisg
ICAgKUhUTUwiOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG9iaiA9IG5pbDsKKyAgICBf
X2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFttX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5k
bGVyIHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQgbWVzc2FnZSkgeworICAgICAgICBvYmogPSBtZXNz
YWdlOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KHNv
dXJjZSwgIiIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAv
LyBGaXJzdCB1bnN1YnNjcmliZSBzaG91bGQgc3VjY2VlZC4gU2Vjb25kIG9uZSBzaG91bGQgZmFp
bCBzaW5jZSB0aGUgZmlyc3Qgb25lIHJlbW92ZWQgdGhlIHJlY29yZCBmcm9tIHRoZSBkYXRhYmFz
ZS4KKyAgICBpZCBleHBlY3RlZCA9IEBbQCgxKSwgQCgwKV07CisgICAgQVNTRVJUX1RSVUUoW29i
aiBpc0VxdWFsOmV4cGVjdGVkXSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450455</attachid>
            <date>2022-01-31 13:49:31 -0800</date>
            <delta_ts>2022-02-01 14:21:45 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>bug-235857-20220131134930.patch</filename>
            <type>text/plain</type>
            <size>88317</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY0YjkwNDYwYjM3NWZlZjAyODg3ZTQx
NzgxZmUwZWNiMDgzNjZhZDYuLmRjZTFkZjBkZGZmNzkxNjVlNWExMGI1MDYzMzYwZWVkODg5MDMy
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgUHVzaEFQSUVuYWJsZWQgdG8gV2ViS2l0TGVn
YWN5IHNvIHdlIGNhbiBlbmFibGUgaXQgb24gaW4gQVBJIHRlc3RzIHZpYSBfV0tFeHBlcmltZW50
YWxGZWF0dXJlLgorCisgICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sOgorCiAyMDIyLTAxLTMwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIEltcG9ydCBBUFNDb25uZWN0aW9uLXJlbGF0ZWQgU1BJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGY4M2VjYzA2ZWFmODc1NjMzM2NlYTI1M2VlMjlkNmUwMTQ4ZmNhOGYuLmMxYzg5MGY3ZWI5
MzYxMWRmN2IzOTg0YmU2NzUzZTFlMThmNGFmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAK
KzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1
c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGFkZHMgUHVzaFNlcnZpY2UgdG8gd2VicHVzaGQuIEl0IGhhbmRsZXMgcmVxdWVzdHMg
dG8gY3JlYXRlLCByZW1vdmUsIGFuZCBnZXQgcHVzaAorICAgICAgICBzdWJzY3JpcHRpb25zLiBJ
dCBhbHNvIGRlY3J5cHRzIGluY29taW5nIHB1c2hlcyBhbmQgcGFzcyB0aGVtIGJhY2sgdG8gdGhl
IFVJIHByb2Nlc3MgdmlhIHRoZQorICAgICAgICBleGlzdGluZyBtYWNoaW5lcnkgaW4gV2ViUHVz
aERhZW1vbi4KKworICAgICAgICBQdXNoU2VydmljZSBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGgg
dHdvIG9iamVjdHM6CisKKyAgICAgICAgMS4gUHVzaFNlcnZpY2VDb25uZWN0aW9uOiB0aGlzIGNy
ZWF0ZXMgYW5kIHJlbW92ZXMgcHVzaCBzdWJzY3JpcHRpb25zIGZyb20gdGhlIHB1c2ggc2VydmVy
LgorICAgICAgICAgICBJdCBhbHNvIHJlY2VpdmVzIGluY29taW5nIHB1c2hlcyBmcm9tIHRoZSBw
dXNoIHNlcnZlci4KKyAgICAgICAgMi4gUHVzaERhdGFiYXNlOiB0aGlzIHBlcnNpc3RzIHB1c2gg
c3Vic2NyaXB0aW9ucyB0byBkaXNrLgorCisgICAgICAgIFNldmVyYWwgdGhpbmdzIGFyZSBub3Qg
eWV0IGltcGxlbWVudGVkOyBmb3IgaW5zdGFuY2UsIHdlIGN1cnJlbnRseSBhbHdheXMgZ3JhbnQg
YSBwYWdlIHRoZQorICAgICAgICBwZXJtaXNzaW9uIHRvIHJlY2VpdmUgcHVzaGVzLiBUaGlzIHdp
bGwgYmUgZml4ZWQgaW4gZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBuZXcg
QVBJIHRlc3RzLiBUaGUgY3VycmVudCB0ZXN0cyB1c2UgYSBNb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uIHRoYXQgdmVuZHMKKyAgICAgICAgc3Vic2NyaXB0aW9uIHdpdGggZml4ZWQgZGF0YSwgYnV0
IHRoaXMgY2FuIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBTaGFyZWQv
QVBJL0NvY29hL1dLTWFpbi5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1t
OgorICAgICAgICAoV0tXZWJQdXNoRGFlbW9uTWFpbik6CisgICAgICAgICogU2hhcmVkL1dlYlB1
c2hEYWVtb25Db25zdGFudHMuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHVzaEQ6Om1lc3NhZ2VU
eXBlU2VuZHNSZXBseSk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOgorICAg
ICAgICAqIHdlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW06CisgICAgICAgIChX
ZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKToK
KyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdWJzY3JpYmUp
OgorICAgICAgICAoV2ViUHVzaEQ6Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnVuc3Vic2Ny
aWJlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6
UHVzaFNlcnZpY2U6OmRhdGFiYXNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6
ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZS5t
bTogQWRkZWQuCisgICAgICAgIChXZWJQdXNoRDo6dXBkYXRlVG9waWNMaXN0cyk6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVz
aFNlcnZpY2U6OmNyZWF0ZU1vY2tTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vy
dmljZTo6UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6Om1ha2VQdXNoU3Vic2NyaXB0
aW9uRnJvbVJlY29yZCk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1c2hUb3BpYyk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0OjpidW5kbGVJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OnNjb3BlKToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OlB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1w
bCk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6ZnVsZmlsbCk6
CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6cmVqZWN0KToKKyAg
ICAgICAgKFdlYlB1c2hEOjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpHZXRTdWJzY3JpcHRpb25S
ZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpzdGFy
dEludGVybmFsKToKKyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjpTdWJzY3Jp
YmVSZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjpzdGFydElt
cGwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OmF0dGVtcHRUb1JlY292
ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcik6CisgICAgICAgIChXZWJQdXNoRDo6VW5z
dWJzY3JpYmVSZXF1ZXN0OjpVbnN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6
OlVuc3Vic2NyaWJlUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJQdXNoRDo6
UHVzaFNlcnZpY2U6OmVucXVldWVQdXNoU2VydmljZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVz
aEQ6OlB1c2hTZXJ2aWNlOjpmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAgIChX
ZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmdldFN1YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnN1YnNjcmliZSk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChX
ZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnVuc3Vic2NyaWJlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
UHVzaEQ6Om1ha2VSYXdQdXNoTWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZp
Y2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZSk6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLmg6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVD
bGllbnRLZXlzKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmg6CisgICAgICAg
ICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hEOjpNZXNzYWdl
SW5mbzo6aW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBseSk6
CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdGFydE1vY2tQdXNoU2VydmljZSk6CisgICAg
ICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdGFydFB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1
c2hEOjpEYWVtb246OnNldFB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OnJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9u
OjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246Omlu
amVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJQdXNoRDo6
RGFlbW9uOjpoYW5kbGVJbmNvbWluZ1B1c2gpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6
Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcyk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdWJz
Y3JpYmVUb1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnVuc3Vic2Ny
aWJlRnJvbVB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OmdldFB1c2hT
dWJzY3JpcHRpb24pOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0UHVzaFBlcm1pc3Np
b25TdGF0ZSk6CisgICAgICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaDoKKyAgICAg
ICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIHdlYnB1c2hkL3dlYnB1c2hkLmNwcDoKKyAgICAg
ICAgKG1haW4pOgorCiAyMDIyLTAxLTMwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZvcndhcmQgbWVzc2FnZXMgZnJvbSBOZXR3b3JrUHJvY2VzcyB0byB3ZWJwdXNoZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJl
ZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCA3YTRkMzY0NjNlYzU1MGMwZjNlYWQ0YTdh
MjVkNTMxOWZlZjNhZjVlLi4wZTZlYzlkZWYxY2U1YTg4YzgwYmI3ZTRiMWEzMTJmZmUwYmE1NDQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5j
ZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMv
V2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAtMTEyMiw2ICsxMTIyLDggQEAgUHVz
aEFQSUVuYWJsZWQ6CiAgIGRlZmF1bHRWYWx1ZToKICAgICBXZWJDb3JlOgogICAgICAgZGVmYXVs
dDogZmFsc2UKKyAgICBXZWJLaXRMZWdhY3k6CisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdl
YktpdDoKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2Nv
YS9XS01haW4uaAppbmRleCAzMDM3OGY4NTUzYWZmNWMzZGEzNGZiOThmMjM3YmFlMTU2OTgwM2Ey
Li45Y2Y4NGQyNzQ0ZmE3ZGViZmIwNzFkZjEyM2VkMTI2OWE0N2Y1Mjc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIg
ewogCiBXS19FWFBPUlQgaW50IFdLWFBDU2VydmljZU1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIq
KiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIFdLX0VY
UE9SVCBpbnQgV0tBZEF0dHJpYnV0aW9uRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioq
IGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7Ci1XS19FWFBPUlQgaW50IFdLV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNo
YXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOworV0tfRVhQT1JUIGludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0Nv
Y29hL1dLTWFpbi5tbQppbmRleCBkZTJlOWY3YTViZDU1ZjkxZGU4N2UxYTkzYWFmODkwNzNkZmJm
ZDQxLi45N2Q3ODVmNjlmMjYxYWFmY2UyNWQ4ZDkxNzY3MTQ0ZjIzZTllMDUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4ubW0KQEAgLTQwLDcgKzQwLDcgQEAgaW50IFdL
QWRBdHRyaWJ1dGlvbkRhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KQogICAg
IHJldHVybiBXZWJLaXQ6OlBDTURhZW1vbk1haW4oYXJnYywgYXJndik7CiB9CiAKLWludCBXS1dl
YlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKK2ludCBXS1dlYlB1
c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICByZXR1cm4gV2ViS2l0
OjpXZWJQdXNoRGFlbW9uTWFpbihhcmdjLCBhcmd2KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAppbmRleCBmYzQ3ZGM0ZjEyNzQ4NzI0YjFiNTdj
NTcyYzE0OWIzODc4ZWMwYTViLi5mM2Y3YmJlNjNmNGVkMzVlZGNmM2UyYWFhZDkzZmIzZTQ5Mjlm
Zjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3Rh
bnRzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5o
CkBAIC00Myw2ICs0Myw3IEBAIGVudW0gY2xhc3MgTWVzc2FnZVR5cGUgOiB1aW50OF90IHsKICAg
ICBTZXREZWJ1Z01vZGVJc0VuYWJsZWQsCiAgICAgVXBkYXRlQ29ubmVjdGlvbkNvbmZpZ3VyYXRp
b24sCiAgICAgSW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nLAorICAgIEluamVjdEVuY3J5cHRl
ZFB1c2hNZXNzYWdlRm9yVGVzdGluZywKICAgICBHZXRQZW5kaW5nUHVzaE1lc3NhZ2VzLAogICAg
IFN1YnNjcmliZVRvUHVzaFNlcnZpY2UsCiAgICAgVW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2Us
CkBAIC01OSw2ICs2MCw3IEBAIGlubGluZSBib29sIG1lc3NhZ2VUeXBlU2VuZHNSZXBseShNZXNz
YWdlVHlwZSBtZXNzYWdlVHlwZSkKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpSZXF1ZXN0U3lzdGVt
Tm90aWZpY2F0aW9uUGVybWlzc2lvbjoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpHZXRQZW5kaW5n
UHVzaE1lc3NhZ2VzOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdFB1c2hNZXNzYWdlRm9y
VGVzdGluZzoKKyAgICBjYXNlIE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2Fn
ZUZvclRlc3Rpbmc6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6U3Vic2NyaWJlVG9QdXNoU2Vydmlj
ZToKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpVbnN1YnNjcmliZUZyb21QdXNoU2VydmljZToKICAg
ICBjYXNlIE1lc3NhZ2VUeXBlOjpHZXRQdXNoU3Vic2NyaXB0aW9uOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmI5YmUyYzBmZjE1ODcz
NDY5MWJhYzEyYTk2ZGY0OGI4NjdjNWIxMi4uMjkyOTQxNGNkMGQxZjAxNzIxOTkwODBmMTA5YWFj
Y2RmNGQ0NTQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC05NDMsNyArOTQzLDcgQEAKIAkJNTEyOTM1RTQxMjg4RDk3ODAwQTRCNjk1
IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUg
LyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJNTEyOUVC
MTIyM0QwREU3QjAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyOUVCMTEyM0QwREU3ODAwQUYxQ0Q3
IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oICovOyB9OwogCQk1MTJDRDY5ODI3MjFFRkM4MDBGN0Y4
RUMgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk3MjcyMUVGQzMwMEY3RjhFQyAvKiBXZWJQdXNo
RGFlbW9uQ29ubmVjdGlvbi5oICovOyB9OwotCQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyog
V2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEyQ0Q2OTkyNzIxRjA0OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25D
b25zdGFudHMuaCAqLzsgfTsKKwkJNTEyQ0Q2OUEyNzIxRjBBOTAwRjdGOEVDIC8qIFdlYlB1c2hE
YWVtb25Db25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMkNENjk5MjcyMUYwNDkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEy
RTM0RTUxMzBCNEQwNTAwQUJEMTlBIC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0EzM0I0MTMwQjMw
OEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyRUNDMzUyNzE5NkFEQjAwMDg5
QjY2IC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCOTMwRkUyNkU4MDIxNjAwMzJCMUMw
IC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVjdGlvbi5oICovOyB9OwogCQk1MTJGNTg5
NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4OEYxMkE4ODM4
ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCAqLzsgfTsKQEAgLTE5
OTUsNiArMTk5NSw4IEBACiAJCUU1Q0JBNzY3MjdBMzE4RTEwMERGNzg1OCAvKiBVbmlmaWVkU291
cmNlMTE5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU1Q0JBNzYwMjdBMzE4NzkwMERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCAqLzsgfTsK
IAkJRTVDQkE3NjgyN0EzMThFMTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVDQkE3NjIyN0EzMTg3
OTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwICovOyB9OwogCQlFNURFRkE2ODI2RjhG
NDI2MDBBQjY4REIgLyogUGhvdG9zVUlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU1REVGQTY3MjZGOEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQ
SS5oICovOyB9OworCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMzZCMTY2MjdB
N0I0NTAwMDUwRTAwRCAvKiBQdXNoU2VydmljZS5oICovOyB9OworCQlFQjM2QjE2OTI3QTdCNDUw
MDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2Uu
bW0gKi87IH07CiAJCUVCQThEM0FCMjdBNUUzMTMwMENCNzkwMCAvKiBBcHBsZVB1c2hTZXJ2aWNl
U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4
RDNBQTI3QTVFMzEzMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZVNQSS5oICovOyB9OwogCQlF
QkE4RDNCMjI3QTVFMzNGMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQzI3
QTVFMzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi87IH07CiAJ
CUVCQThEM0IzMjdBNUUzM0YwMENCNzkwMCAvKiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBRDI3
QTVFMzNFMDBDQjc5MDAgLyogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovOyB9OwpAQCAt
NjQ0Niw2ICs2NDQ4LDggQEAKIAkJRTVERUZBNjcyNkY4RjQyNjAwQUI2OERCIC8qIFBob3Rvc1VJ
U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rvc1VJU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUVCMEQzMTJEMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0Lndl
YnB1c2hkLm1hYy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFw
cGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUVCMEQzMTJFMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hk
Lmlvcy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndl
YmtpdC53ZWJwdXNoZC5pb3MucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVC
MzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQdXNoU2VydmljZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQdXNoU2VydmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQdXNoU2VydmljZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUEyN0E1RTMxMzAwQ0I3OTAwIC8qIEFwcGxlUHVz
aFNlcnZpY2VTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGVQdXNo
U2VydmljZVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkE4RDNBQzI3QTVF
MzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUQyN0E1RTMzRTAwQ0I3OTAw
IC8qIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTAwNzMsNiArMTAwNzcsOCBAQAogCQkJCTUxNjBFOTU4Mjc0QzBEODgwMDU2
NzM4OCAvKiBQdXNoQXBwQnVuZGxlLm1tICovLAogCQkJCTUxRjdCQjc5Mjc0NEM1MDcwMEM0NUE3
MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oICovLAogCQkJCTUxRjdCQjdBMjc0NEM1MDcwMEM0
NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5tbSAqLywKKwkJCQlFQjM2QjE2NjI3QTdCNDUw
MDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCAqLywKKwkJCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUw
MEQgLyogUHVzaFNlcnZpY2UubW0gKi8sCiAJCQkJRUJBOEQzQUYyN0E1RTMzRjAwQ0I3OTAwIC8q
IFB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovLAogCQkJCUVCQThEM0IxMjdBNUUzM0YwMENCNzkw
MCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8sCiAJCQkJNTE3QjVGNzcyNzVFOTc5NTAw
MkRDMjJEIC8qIHdlYnB1c2hkLmNwcCAqLywKQEAgLTEzMjI2LDYgKzEzMjMyLDcgQEAKIAkJCQk1
MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3Nh
Z2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUw
MEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUVCQThEM0I1MjdBNUUzM0Yw
MENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
RTY4ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTBDMjI3RTI0NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29m
dExpbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMTU0ODAsNiArMTU0ODcsNyBAQAogCQkJCTJENTRD
MzFCMjEyRjREQTYwMDQ5QzE3NCAvKiBQcm9jZXNzTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTE3QjVGODIyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1MTdCNUY3QjI3NUU5N0E5MDAyREMyMkQgLyogUHVzaENsaWVudENvbm5l
Y3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyog
UHVzaFNlcnZpY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlFQkE4RDNCNzI3QTVFMzNGMDBDQjc5
MDAgLyogUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIy
N0YyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyNUUyNDM1NzVDRDAwRUQ2MTREIC8qIFF1aWNrTG9va1Ro
dW1ibmFpbExvYWRlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAppbmRleCA3NzY5YmI2YmRkNTgyOGU3
YjE2NGMxNjdjODQ2MGNmZGJkN2MwNDAwLi5iOTUzYmI5YzEyZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3
ZGY0NmQ5NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaApAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgTW9ja1B1c2hT
ZXJ2aWNlQ29ubmVjdGlvbigpOwogICAgIH5Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCk7CiAK
KyAgICBXZWJDb3JlOjpQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIGdlbmVyYXRlQ2xpZW50S2V5cygp
IGZpbmFsOworCiAgICAgdm9pZCBzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiB0b3BpYywgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgU3Vic2NyaWJlSGFuZGxlciYmKSBvdmVy
cmlkZTsKICAgICB2b2lkIHVuc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFVuc3Vic2NyaWJlSGFuZGxlciYmKSBvdmVy
cmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLm1tCmluZGV4IGRiZWZhNzRhZWNkOWE5ZWEwZTQxOTgzMzg2OGUzMDhkM2Q3NmY2
MDMuLmM0Y2YyZTY3OWI5MmJmOTIzNTYxYzE1OGMyM2QzNjgwMWQ4NzgzNjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAg
LTI2LDYgKzI2LDEwIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIk1vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaCIKIAorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOjpQdXNoQ3J5cHRvOworCiBuYW1lc3BhY2UgV2ViUHVzaEQgewog
CiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkK
QEAgLTM0LDE0ICszOCwzMCBAQCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uKCkKIAogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6fk1vY2tQdXNo
U2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKLXZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29u
bmVjdGlvbjo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYs
IFN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQorQ2xpZW50S2V5cyBNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpnZW5lcmF0ZUNsaWVudEtleXMoKQogewotICAgIGhhbmRsZXIoeyB9LCBbTlNF
cnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6TlNGZWF0dXJlVW5z
dXBwb3J0ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKKyAgICAvLyBFeGFtcGxlIHZhbHVlcyBmcm9t
IFJGQzgyOTEgU2VjdGlvbiA1LgorICAgIGF1dG8gcHVibGljS2V5ID0gYmFzZTY0VVJMRGVjb2Rl
KCJCQ1Z4c3I3Tl9lTmdWUnF2SHREMHpUWnNFYzYtVlYtSnZMZXhocVV6T1JjeGFPemk2LUFZV1h2
VEJIbTRianlQanM3VmQ4cFpHSDZTUnBrTnRvSUFpdzQiX3MpLnZhbHVlKCk7CisgICAgYXV0byBw
cml2YXRlS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJxMWRYcHczVXBUNVZPbXVfY2ZfdjZpaDA3QWVt
czNuanhJLUpXZ0xjTTk0Il9zKS52YWx1ZSgpOworICAgIGF1dG8gc2VjcmV0ID0gYmFzZTY0VVJM
RGVjb2RlKCJCVEJaTXFISDZyNFR0czdKX2FTSWdnIl9zKS52YWx1ZSgpOworCisgICAgcmV0dXJu
IENsaWVudEtleXMgeyBQMjU2REhLZXlQYWlyIHsgV1RGTW92ZShwdWJsaWNLZXkpLCBXVEZNb3Zl
KHByaXZhdGVLZXkpIH0sIFdURk1vdmUoc2VjcmV0KSB9OworfQorCit2b2lkIE1vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb246OnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHZhcGlkUHVibGljS2V5LCBTdWJzY3JpYmVIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAg
ICBhdXRvIGFsd2F5c1JlamVjdGVkS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCRUF4YVVNbzFzOHRq
T1J4SmZuU1N2V2hZYjR1NTFrZzFoV1Qyc185Z3BWN1p4YXIxcEZfMkJROEFuY3VBZFMyQm9MaE40
cWF4ekJ5MkN3SEU4QkJ6V2ciX3MpLnZhbHVlKCk7CisgICAgaWYgKHZhcGlkUHVibGljS2V5ID09
IGFsd2F5c1JlamVjdGVkS2V5KSB7CisgICAgICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJv
cldpdGhEb21haW46QCJXZWJQdXNoIiBjb2RlOi0xIHVzZXJJbmZvOm5pbF0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlcihAImh0dHBzOi8vd2Via2l0Lm9yZy9wdXNoIiwg
bmlsKTsKIH0KIAogdm9pZCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp1bnN1YnNjcmliZShj
b25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBVbnN1YnNjcmliZUhhbmRsZXIm
JiBoYW5kbGVyKQogewotICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46
TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1c2VySW5m
bzpuaWxdKTsKKyAgICBoYW5kbGVyKHRydWUsIG5pbCk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IE1v
Y2tQdXNoU2VydmljZUNvbm5lY3Rpb246OmVuYWJsZWRUb3BpY3MoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9QdXNoU2VydmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNDE1ZTAwOGRkNjMwNTEwNTgyNGY4Y2ZiMDI2
OTVhZmMzMjNmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hTZXJ2aWNlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViUHVzaE1l
c3NhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkRhdGEuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1B1c2hEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaFN1YnNjcmlwdGlv
bkRhdGEuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViUHVz
aEQgeworCitjbGFzcyBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OworY2xhc3MgUHVzaFNlcnZpY2VS
ZXF1ZXN0OworY2xhc3MgU3Vic2NyaWJlUmVxdWVzdDsKK2NsYXNzIFVuc3Vic2NyaWJlUmVxdWVz
dDsKKworY2xhc3MgUHVzaFNlcnZpY2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHVzaW5nIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gRnVuY3Rpb248
dm9pZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3Nh
Z2UmJik+OworCisgICAgc3RhdGljIHZvaWQgY3JlYXRlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQ
dXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBJbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlciYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoU2VydmljZT4mJik+JiYpOworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU1vY2tTZXJ2aWNlKElu
Y29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1
bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKT4mJik7CisgICAgflB1c2hTZXJ2aWNlKCk7CisKKyAg
ICBQdXNoU2VydmljZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rp
b247IH0KKyAgICBXZWJDb3JlOjpQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9k
YXRhYmFzZTsgfQorCisgICAgdm9pZCBnZXRTdWJzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBidW5k
bGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRh
dGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmKTsKKyAgICB2b2lkIHN1YnNjcmliZShj
b25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4
Y2VwdGlvbkRhdGE+Jik+JiYpOworICAgIHZvaWQgdW5zdWJzY3JpYmUoY29uc3QgU3RyaW5nJiBi
dW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBXZWJDb3JlOjpQdXNoU3Vic2Ny
aXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxi
b29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmKTsKKworICAgIHZvaWQgZGlkQ29tcGxl
dGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KEdldFN1YnNjcmlwdGlvblJlcXVlc3QmKTsKKyAgICB2
b2lkIGRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0Jik7CisgICAg
dm9pZCBkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3QmKTsK
KworICAgIHZvaWQgZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0
aW9uYXJ5ICp1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9KTsK
KworcHJpdmF0ZToKKyAgICBQdXNoU2VydmljZShVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0
aW9uPiYmLCBVbmlxdWVSZWY8V2ViQ29yZTo6UHVzaERhdGFiYXNlPiYmLCBJbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlciYmKTsKKworICAgIHVzaW5nIFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCA9IEhh
c2hNYXA8c3RkOjp0dXBsZTxTdHJpbmcsIFN0cmluZz4sIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoU2VydmljZVJlcXVlc3Q+Pj47CisgICAgdm9pZCBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0
KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYsIHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVl
c3Q+JiYpOworICAgIHZvaWQgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VS
ZXF1ZXN0TWFwJiwgUHVzaFNlcnZpY2VSZXF1ZXN0Jik7CisKKyAgICBVbmlxdWVSZWY8UHVzaFNl
cnZpY2VDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlB1
c2hEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKworICAgIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
IG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXI7CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3RN
YXAgbV9nZXRTdWJzY3JpcHRpb25SZXF1ZXN0czsKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAg
bV9zdWJzY3JpYmVSZXF1ZXN0czsKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV91bnN1YnNj
cmliZVJlcXVlc3RzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UubW0gYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1B1c2hTZXJ2aWNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5N2Q5MTFmODA0MzgwYjhmMGM3NDAw
MzU3OGZiNTg0MTdiYmNkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1B1c2hTZXJ2aWNlLm1tCkBAIC0wLDAgKzEsNTkwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJQdXNoU2VydmljZS5oIgorCisjaW1wb3J0ICJBcHBsZVB1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlv
bi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1c2hNZXNzYWdlQ3J5cHRvLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KKyNpbXBv
cnQgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgor
I2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYlB1c2hEIHsKKworc3RhdGlj
IHZvaWQgdXBkYXRlVG9waWNMaXN0cyhQdXNoU2VydmljZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgZGF0YWJhc2UuZ2V0VG9waWNzQnlXYWtlU3RhdGUoWyZjb25u
ZWN0aW9uLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShh
dXRvJiYgdG9waWNNYXApIG11dGFibGUgeworICAgICAgICAvLyBGSVhNRTogbW92ZSB0b3BpY3Mg
dG8gaWdub3JlZCBsaXN0IGJhc2VkIG9uIHVzZXIgcHJlZmVyZW5jZXMuCisgICAgICAgIFB1c2hT
ZXJ2aWNlQ29ubmVjdGlvbjo6VG9waWNMaXN0cyB0b3BpY0xpc3RzOworCisgICAgICAgIGlmIChh
dXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpXYWtpbmcpOyBpdCAhPSB0b3Bp
Y01hcC5lbmQoKSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh0b3BpY0xpc3RzLmVuYWJsZWRUb3Bp
Y3MsIGl0LT52YWx1ZSk7CisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNo
V2FrZVN0YXRlOjpPcHBvcnR1bmlzdGljKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAgICAg
ICAgICBzdGQ6OnN3YXAodG9waWNMaXN0cy5vcHBvcnR1bmlzdGljVG9waWNzLCBpdC0+dmFsdWUp
OworICAgICAgICBpZiAoYXV0byBpdCA9IHRvcGljTWFwLmZpbmQoUHVzaFdha2VTdGF0ZTo6Tm9u
V2FraW5nKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAodG9w
aWNMaXN0cy5ub25XYWtpbmdUb3BpY3MsIGl0LT52YWx1ZSk7CisKKyAgICAgICAgY29ubmVjdGlv
bi5zZXRUb3BpY0xpc3RzKFdURk1vdmUodG9waWNMaXN0cykpOworCisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKyNpZiBIQVZFKEFQUExFX1BVU0hfU0VSVklDRV9V
UkxfVE9LRU5fU1VQUE9SVCkKKwordm9pZCBQdXNoU2VydmljZTo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBJ
bmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5k
bGVyKQoreworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBhZG9wdE9TT2JqZWN0KG9zX3RyYW5zYWN0
aW9uX2NyZWF0ZSgiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wdXNoLXNlcnZpY2UtaW5pdCIp
KTsKKworICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbiBBU0FQIHNvIHRoYXQgd2UgYm9vdHN0
cmFwX2NoZWNrX2luIHRvIHRoZSBzZXJ2aWNlIGluIGEgdGltZWx5IG1hbm5lci4KKyAgICBhdXRv
IGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlUmVmPEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uPihp
bmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSk7CisKKyAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShkYXRh
YmFzZVBhdGgsIFt0cmFuc2FjdGlvbiA9IFdURk1vdmUodHJhbnNhY3Rpb24pLCBjb25uZWN0aW9u
ID0gV1RGTW92ZShjb25uZWN0aW9uKSwgbWVzc2FnZUhhbmRsZXIgPSBXVEZNb3ZlKG1lc3NhZ2VI
YW5kbGVyKSwgY3JlYXRpb25IYW5kbGVyID0gV1RGTW92ZShjcmVhdGlvbkhhbmRsZXIpXShhdXRv
JiYgZGF0YWJhc2VSZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIWRhdGFiYXNlUmVzdWx0
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxp
emF0aW9uIGZhaWxlZCB3aXRoIGRhdGFiYXNlIGVycm9yIik7CisgICAgICAgICAgICBjcmVhdGlv
bkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKKyAgICAgICAgICAgIHRy
YW5zYWN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gZGF0YWJhc2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIo
V1RGTW92ZShkYXRhYmFzZVJlc3VsdCkpOworICAgICAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2U+
IHNlcnZpY2UoKm5ldyBQdXNoU2VydmljZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3ZlKGRh
dGFiYXNlKSwgV1RGTW92ZShtZXNzYWdlSGFuZGxlcikpKTsKKworICAgICAgICBhdXRvJiBjb25u
ZWN0aW9uUmVmID0gc2VydmljZS0+Y29ubmVjdGlvbigpOworICAgICAgICBhdXRvJiBkYXRhYmFz
ZVJlZiA9IHNlcnZpY2UtPmRhdGFiYXNlKCk7CisKKyAgICAgICAgLy8gT25seSBwcm92aWRlIHRo
ZSBzZXJ2aWNlIG9iamVjdCBiYWNrIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgd2UndmUgc3luY2VkIHRo
ZSB0b3BpYyBsaXN0cyBpbgorICAgICAgICAvLyB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgUHVzaFNl
cnZpY2VDb25uZWN0aW9uL0FQU0Nvbm5lY3Rpb24uIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdvbid0
CisgICAgICAgIC8vIHNlcnZpY2UgYW55IGNhbGxzIHRvIHN1YnNjcmliZS91bnN1YnNjcmliZS9l
dGMuIHVudGlsIGFmdGVyIHRoZSB0b3BpYyBsaXN0cyBhcmUgdXAgdG8KKyAgICAgICAgLy8gZGF0
ZSwgd2hpY2ggQVBTQ29ubmVjdGlvbiBjYXJlcyBhYm91dC4KKyAgICAgICAgdXBkYXRlVG9waWNM
aXN0cyhjb25uZWN0aW9uUmVmLCBkYXRhYmFzZVJlZiwgW3RyYW5zYWN0aW9uID0gV1RGTW92ZSh0
cmFuc2FjdGlvbiksIHNlcnZpY2UgPSBXVEZNb3ZlKHNlcnZpY2UpLCBjcmVhdGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjcmVh
dGlvbkhhbmRsZXIoc2VydmljZS5tb3ZlVG9VbmlxdWVQdHIoKSk7CisgICAgICAgICAgICB0cmFu
c2FjdGlvbiA9IG51bGxwdHI7CisgICAgICAgIH0pOworICAgIH0pOworfQorCisjZWxzZQorCit2
b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgSW5j
b21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVu
aXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxlcikKK3sKKyAgICBjcmVh
dGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKK30KKworI2VuZGlm
IC8vIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JUKQorCit2b2lkIFB1
c2hTZXJ2aWNlOjpjcmVhdGVNb2NrU2VydmljZShJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYm
IG1lc3NhZ2VIYW5kbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIFB1c2hEYXRhYmFzZTo6
Y3JlYXRlSW5NZW1vcnkoW21lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShtZXNzYWdlSGFuZGxlciks
IGNyZWF0aW9uSGFuZGxlciA9IFdURk1vdmUoY3JlYXRpb25IYW5kbGVyKV0oYXV0byYmIGRhdGFi
YXNlUmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVJlc3VsdCkgeworICAg
ICAgICAgICAgY3JlYXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4oKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNvbm5lY3Rp
b24gPSBtYWtlVW5pcXVlUmVmPE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24+KCk7CisgICAgICAg
IGF1dG8gZGF0YWJhc2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92
ZShkYXRhYmFzZVJlc3VsdCkpOworICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVf
cHRyPFB1c2hTZXJ2aWNlPihuZXcgUHVzaFNlcnZpY2UoV1RGTW92ZShjb25uZWN0aW9uKSwgV1RG
TW92ZShkYXRhYmFzZSksIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpKSkpOworICAgIH0pOworfQor
CitQdXNoU2VydmljZTo6UHVzaFNlcnZpY2UoVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlv
bj4mJiBwdXNoU2VydmljZUNvbm5lY3Rpb24sIFVuaXF1ZVJlZjxQdXNoRGF0YWJhc2U+JiYgcHVz
aERhdGFiYXNlLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIGluY29taW5nUHVzaE1lc3Nh
Z2VIYW5kbGVyKQorICAgIDogbV9jb25uZWN0aW9uKFdURk1vdmUocHVzaFNlcnZpY2VDb25uZWN0
aW9uKSkKKyAgICAsIG1fZGF0YWJhc2UoV1RGTW92ZShwdXNoRGF0YWJhc2UpKQorICAgICwgbV9p
bmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcihXVEZNb3ZlKGluY29taW5nUHVzaE1lc3NhZ2VIYW5k
bGVyKSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVy
KTsKKworICAgIG1fY29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5pbmdGb3JQdXNoTWVzc2FnZXMoW3Ro
aXNdKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykgeworICAgICAgICBk
aWRSZWNlaXZlUHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKKyAgICB9KTsKK30KKworUHVz
aFNlcnZpY2U6On5QdXNoU2VydmljZSgpID0gZGVmYXVsdDsKKworc3RhdGljIFB1c2hTdWJzY3Jp
cHRpb25EYXRhIG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChQdXNoUmVjb3JkJiYgcmVj
b3JkKQoreworICAgIHJldHVybiBQdXNoU3Vic2NyaXB0aW9uRGF0YSB7CisgICAgICAgIHJlY29y
ZC5pZGVudGlmaWVyLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5lbmRwb2ludCksCisgICAgICAg
IFdURk1vdmUocmVjb3JkLmV4cGlyYXRpb25UaW1lKSwKKyAgICAgICAgV1RGTW92ZShyZWNvcmQu
c2VydmVyVkFQSURQdWJsaWNLZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5jbGllbnRQdWJs
aWNLZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0KQorICAgIH07
Cit9CisKK3N0YXRpYyBTdHJpbmcgbWFrZVB1c2hUb3BpYyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUpCit7CisgICAgcmV0dXJuIGJ1bmRsZUlkZW50
aWZpZXIgKyAiICIgKyBzY29wZTsKK30KKworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QdXNoU2Vy
dmljZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEFTQ0lJTGl0ZXJhbCBkZXNj
cmlwdGlvbigpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmll
cigpIHsgcmV0dXJuIG1fYnVuZGxlSWRlbnRpZmllcjsgfQorICAgIGNvbnN0IFN0cmluZyYgc2Nv
cGUoKSB7IHJldHVybiBtX3Njb3BlOyB9OworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAw
OworCitwcm90ZWN0ZWQ6CisgICAgUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlJiBzZXJ2
aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUp
CisgICAgICAgIDogbV9zZXJ2aWNlKHNlcnZpY2UpCisgICAgICAgICwgbV9jb25uZWN0aW9uKHNl
cnZpY2UuY29ubmVjdGlvbigpKQorICAgICAgICAsIG1fZGF0YWJhc2Uoc2VydmljZS5kYXRhYmFz
ZSgpKQorICAgICAgICAsIG1fYnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyKQorICAg
ICAgICAsIG1fc2NvcGUoc2NvcGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2goKSA9IDA7CisKKyAgICBQdXNoU2VydmljZSYgbV9zZXJ2aWNlOworICAgIFB1c2hTZXJ2
aWNlQ29ubmVjdGlvbiYgbV9jb25uZWN0aW9uOworICAgIFB1c2hEYXRhYmFzZSYgbV9kYXRhYmFz
ZTsKKyAgICBTdHJpbmcgbV9idW5kbGVJZGVudGlmaWVyOworICAgIFN0cmluZyBtX3Njb3BlOwor
ICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUHVzaFNlcnZpY2VSZXF1ZXN0Jik+IG1fY29tcGxl
dGlvbkhhbmRsZXI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlPgorY2xhc3Mg
UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3QgeworcHVi
bGljOgorICAgIHZvaWQgc3RhcnQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVuZGxl
SWRlbnRpZmllci5pc0VtcHR5KCkgfHwgbV9zY29wZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJvciwgIklu
dmFsaWQgc2VuZGVyIl9zIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgU3RyaW5nIHRyYW5zYWN0aW9uRGVzY3JpcHRpb24gPSBTdHJpbmcoImNvbS5hcHBsZS53
ZWJraXQud2VicHVzaGQ6Il9zKSArIGRlc2NyaXB0aW9uKCkgKyAiOiJfcyArIG1fYnVuZGxlSWRl
bnRpZmllciArICI6Il9zICsgbV9zY29wZTsKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9IGFkb3B0
T1NPYmplY3Qob3NfdHJhbnNhY3Rpb25fY3JlYXRlKHRyYW5zYWN0aW9uRGVzY3JpcHRpb24udXRm
OCgpLmRhdGEoKSkpOworICAgICAgICBzdGFydEludGVybmFsKCk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgdXNpbmcgUmVzdWx0SGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgRXhwZWN0ZWQ8UmVzdWx0VHlwZSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT47CisKKyAg
ICBQdXNoU2VydmljZVJlcXVlc3RJbXBsKFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJp
bmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFJlc3VsdEhhbmRsZXIm
JiByZXN1bHRIYW5kbGVyKQorICAgICAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdChzZXJ2aWNlLCBi
dW5kbGVJZGVudGlmaWVyLCBzY29wZSkKKyAgICAgICAgLCBtX3Jlc3VsdEhhbmRsZXIoV1RGTW92
ZShyZXN1bHRIYW5kbGVyKSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflB1c2hTZXJ2aWNl
UmVxdWVzdEltcGwoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRJbnRlcm5h
bCgpID0gMDsKKworICAgIHZvaWQgZnVsZmlsbChSZXN1bHRUeXBlIHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIG1fcmVzdWx0SGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICBmaW5pc2go
KTsKKyAgICB9CisKKyAgICB2b2lkIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiYgZGF0
YSkKKyAgICB7CisgICAgICAgIG1fcmVzdWx0SGFuZGxlcihtYWtlVW5leHBlY3RlZChXVEZNb3Zl
KGRhdGEpKSk7CisgICAgICAgIGZpbmlzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1
bHRIYW5kbGVyIG1fcmVzdWx0SGFuZGxlcjsKKyAgICBPU09iamVjdFB0cjxvc190cmFuc2FjdGlv
bl90PiBtX3RyYW5zYWN0aW9uOworfTsKKworY2xhc3MgR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCA6
IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJbXBsPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVz
aFN1YnNjcmlwdGlvbkRhdGE+PiB7CitwdWJsaWM6CisgICAgR2V0U3Vic2NyaXB0aW9uUmVxdWVz
dChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5HZXRTdWJzY3JpcHRp
b25SZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRl
c2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdldFN1YnNjcmlwdGlvblJlcXVlc3Qi
X3M7IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIGZpbmlzaCgp
IGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCgqdGhp
cyk7IH0KK307CisKK0dldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlwdGlvblJlcXVl
c3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRsZXIpCisgICAg
OiBQdXNoU2VydmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3Bl
LCBXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQoreworfQorCisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJw
dXNoZCBzaWRlIG9mIFB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlvbi4KK3ZvaWQgR2V0U3Vic2Ny
aXB0aW9uUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCgpCit7CisgICAgbV9kYXRhYmFzZS5nZXRSZWNv
cmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUs
IFt0aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsK
KyAgICAgICAgICAgIGZ1bGZpbGwoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0
aW9uRGF0YT4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bGZpbGwobWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKFdURk1vdmUoKnJlc3VsdCkp
KTsKKyAgICB9KTsKK30KKworY2xhc3MgU3Vic2NyaWJlUmVxdWVzdCA6IHB1YmxpYyBQdXNoU2Vy
dmljZVJlcXVlc3RJbXBsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiB7CitwdWJsaWM6
CisgICAgU3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
YXBpZFB1YmxpY0tleSwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5TdWJzY3JpYmVS
ZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRlc2Ny
aXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlN1YnNjcmliZVJlcXVlc3QiX3M7IH0KKyAg
ICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbCB7IHN0YXJ0SW1wbChJc1JldHJ5OjpObyk7IH0K
KyAgICB2b2lkIGZpbmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlU3Vic2NyaWJl
UmVxdWVzdCgqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIElzUmV0cnkgeyBO
bywgWWVzIH07CisgICAgdm9pZCBzdGFydEltcGwoSXNSZXRyeSk7CisgICAgdm9pZCBhdHRlbXB0
VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVyRXJyb3IoU3RyaW5nJiYpOworICAgIFZl
Y3Rvcjx1aW50OF90PiBtX3ZhcGlkUHVibGljS2V5OworfTsKKworU3Vic2NyaWJlUmVxdWVzdDo6
U3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBidW5k
bGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHZhcGlkUHVibGljS2V5LCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikKKyAgICA6IFB1
c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdU
Rk1vdmUocmVzdWx0SGFuZGxlcikpCisgICAgLCBtX3ZhcGlkUHVibGljS2V5KHZhcGlkUHVibGlj
S2V5KQoreworfQorCisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBzaWRlIG9mIFB1c2hNYW5h
Z2VyLnN1YnNjcmliZSgpLgordm9pZCBTdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEltcGwoSXNSZXRy
eSBpc1JldHJ5KQoreworICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVy
QW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpcywgaXNSZXRyeV0oYXV0
byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAg
IGlmIChtX3ZhcGlkUHVibGljS2V5ICE9IHJlc3VsdC0+c2VydmVyVkFQSURQdWJsaWNLZXkpCisg
ICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJ
bnZhbGlkU3RhdGVFcnJvciwgIlByb3ZpZGVkIGFwcGxpY2F0aW9uU2VydmVyS2V5IGRvZXMgbm90
IG1hdGNoIHRoZSBrZXkgaW4gdGhlIGV4aXN0aW5nIHN1YnNjcmlwdGlvbi4iX3MgfSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnVsZmlsbChtYWtlUHVzaFN1YnNjcmlwdGlv
bkZyb21SZWNvcmQoV1RGTW92ZSgqcmVzdWx0KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byB0b3BpYyA9IG1ha2VQdXNoVG9waWMobV9idW5kbGVJZGVu
dGlmaWVyLCBtX3Njb3BlKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnN1YnNjcmliZSh0b3BpYywg
bV92YXBpZFB1YmxpY0tleSwgW3RoaXMsIGlzUmV0cnksIHRvcGljXShOU1N0cmluZyAqZW5kcG9p
bnQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikgewor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB1c2UgcG9pbnRlciBjb21wYXJpc29uIG9uY2UgQVBT
VVJMVG9rZW5FcnJvckRvbWFpbiBpcyBleHRlcm5lZC4KKyAgICAgICAgICAgICAgICBpZiAoaXNS
ZXRyeSA9PSBJc1JldHJ5OjpObyAmJiBbZXJyb3IuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpAIkFQ
U1VSTFRva2VuRXJyb3JEb21haW4iXSAmJiBlcnJvci5jb2RlID09IEFQU1VSTFRva2VuRXJyb3JD
b2RlVG9waWNBbHJlYWR5SW5GaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFRv
UmVjb3ZlckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFdURk1vdmUodG9waWMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoTWFuYWdlci5zdWJzY3JpYmUoYnVuZGxlSUQ6
ICV7cHVibGljfXMsIHNjb3BlOiAle3NlbnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkb21haW46ICV7
cHVibGljfXMgY29kZTogJWxsZCkiLCBtX2J1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwg
bV9zY29wZS51dGY4KCkuZGF0YSgpLCBlcnJvci5kb21haW4uVVRGOFN0cmluZywgc3RhdGljX2Nh
c3Q8aW50NjRfdD4oZXJyb3IuY29kZSkpOworICAgICAgICAgICAgICAgIHJlamVjdChXZWJDb3Jl
OjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJvciwgIkZhaWxlZCBkdWUgdG8gaW50
ZXJuYWwgc2VydmljZSBlcnJvciJfcyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gY2xpZW50S2V5cyA9IG1fc2VydmljZS5jb25u
ZWN0aW9uKCkuZ2VuZXJhdGVDbGllbnRLZXlzKCk7CisgICAgICAgICAgICBQdXNoUmVjb3JkIHJl
Y29yZDsKKyAgICAgICAgICAgIHJlY29yZC5idW5kbGVJRCA9IG1fYnVuZGxlSWRlbnRpZmllcjsK
KyAgICAgICAgICAgIHJlY29yZC5zZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGVGcm9tU3RyaW5nKG1fc2NvcGUpLT5kYXRhKCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJl
Y29yZC5zY29wZSA9IG1fc2NvcGU7CisgICAgICAgICAgICByZWNvcmQuZW5kcG9pbnQgPSBlbmRw
b2ludDsKKyAgICAgICAgICAgIHJlY29yZC50b3BpYyA9IFdURk1vdmUodG9waWMpOworICAgICAg
ICAgICAgcmVjb3JkLnNlcnZlclZBUElEUHVibGljS2V5ID0gbV92YXBpZFB1YmxpY0tleTsKKyAg
ICAgICAgICAgIHJlY29yZC5jbGllbnRQdWJsaWNLZXkgPSBXVEZNb3ZlKGNsaWVudEtleXMuY2xp
ZW50UDI1NkRIS2V5UGFpci5wdWJsaWNLZXkpOworICAgICAgICAgICAgcmVjb3JkLmNsaWVudFBy
aXZhdGVLZXkgPSBXVEZNb3ZlKGNsaWVudEtleXMuY2xpZW50UDI1NkRIS2V5UGFpci5wcml2YXRl
S2V5KTsKKyAgICAgICAgICAgIHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0ID0gV1RGTW92ZShjbGll
bnRLZXlzLnNoYXJlZEF1dGhTZWNyZXQpOworCisgICAgICAgICAgICBtX2RhdGFiYXNlLmluc2Vy
dFJlY29yZChyZWNvcmQsIFt0aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhQ
dXNoLCAiUHVzaE1hbmFnZXIuc3Vic2NyaWJlKGJ1bmRsZUlEOiAle3B1YmxpY31zLCBzY29wZTog
JXtzZW5zaXRpdmV9cykgZmFpbGVkIHdpdGggZGF0YWJhc2UgZXJyb3IiLCBtX2J1bmRsZUlkZW50
aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpBYm9ydEVy
cm9yLCAiRmFpbGVkIGR1ZSB0byBpbnRlcm5hbCBkYXRhYmFzZSBlcnJvciJfcyB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBzdXBwb3J0IHBhcnRpYWwgdG9waWMgbGlzdCB1cGRhdGVzLgorICAgICAg
ICAgICAgICAgIHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFiYXNlLCBbdGhp
cywgcmVjb3JkID0gV1RGTW92ZSgqcmVzdWx0KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAg
ICAgICAgZnVsZmlsbChtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92ZShyZWNv
cmQpKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfSk7Cit9CisKKy8vIFRyaWVzIHRvIHJlY292ZXIgZnJvbSBhIHRvcGljIGJlaW5nIG1v
dmVkIHRvIHRoZSBnbG9iYWwgcGF1c2VkIGZpbHRlciAocmRhcjovLzg4MTM5MzMwKS4KK3ZvaWQg
U3Vic2NyaWJlUmVxdWVzdDo6YXR0ZW1wdFRvUmVjb3ZlckZyb21Ub3BpY0FscmVhZHlJbkZpbHRl
ckVycm9yKFN0cmluZyYmIHRvcGljKQoreworICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNo
KFt0aGlzLCB0b3BpYyA9IFdURk1vdmUodG9waWMpXSgpIG11dGFibGUgeworICAgICAgICAvLyBU
aGlzIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcGF1c2VkIHRvcGljIGFuZCB0ZWxscyBhcHNkIHRv
IGZvcmdldCBhYm91dCB0aGUgdG9waWMuCisgICAgICAgIGF1dG8gb3JpZ2luYWxUb3BpY3MgPSBt
X2Nvbm5lY3Rpb24uaWdub3JlZFRvcGljcygpOworICAgICAgICBhdXRvIGF1Z21lbnRlZFRvcGlj
cyA9IG9yaWdpbmFsVG9waWNzOworICAgICAgICBhdWdtZW50ZWRUb3BpY3MuYXBwZW5kKHRvcGlj
KTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3MoV1RGTW92ZShhdWdtZW50
ZWRUb3BpY3MpKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3MoV1RGTW92
ZShvcmlnaW5hbFRvcGljcykpOworCisgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNo
KFt0aGlzXSgpIG11dGFibGUgeworICAgICAgICAgICAgc3RhcnRJbXBsKElzUmV0cnk6Olllcyk7
CisgICAgICAgIH0pOworICAgIH0pOworfQorCitjbGFzcyBVbnN1YnNjcmliZVJlcXVlc3QgOiBw
dWJsaWMgUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDxib29sPiB7CitwdWJsaWM6CisgICAgVW5zdWJz
Y3JpYmVSZXF1ZXN0KFB1c2hTZXJ2aWNlJiwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNjb3BlLCBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgUmVzdWx0
SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5VbnN1YnNjcmliZVJlcXVlc3QoKSA9IGRlZmF1bHQ7
CisKK3Byb3RlY3RlZDoKKyAgICBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiAiVW5zdWJzY3JpYmVSZXF1ZXN0Il9zOyB9CisgICAgdm9pZCBzdGFydEludGVy
bmFsKCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbCB7IG1fc2VydmljZS5kaWRDb21w
bGV0ZVVuc3Vic2NyaWJlUmVxdWVzdCgqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBQdXNoU3Vi
c2NyaXB0aW9uSWRlbnRpZmllciBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXI7Cit9OworCitVbnN1
YnNjcmliZVJlcXVlc3Q6OlVuc3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwg
Y29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBQdXNo
U3Vic2NyaXB0aW9uSWRlbnRpZmllciBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBSZXN1bHRIYW5k
bGVyJiYgcmVzdWx0SGFuZGxlcikKKyAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2Vydmlj
ZSwgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikpCisgICAg
LCBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXIoc3Vic2NyaXB0aW9uSWRlbnRpZmllcikKK3sKK30K
KworLy8gSW1wbGVtZW50cyB0aGUgd2VicHVzaGQgc2lkZSBvZiBQdXNoU3Vic2NyaXB0aW9uLnVu
c3Vic2NyaWJlLgordm9pZCBVbnN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW50ZXJuYWwoKQorewor
ICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUobV9idW5k
bGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpc10oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghcmVzdWx0IHx8IG1fc3Vic2NyaXB0aW9uSWRlbnRpZmllciAhPSByZXN1bHQt
PmlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGZ1bGZpbGwoZmFsc2UpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0b3BpYyA9IG1ha2VQdXNoVG9waWMo
bV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnVuc3Vi
c2NyaWJlKHRvcGljLCByZXN1bHQtPnNlcnZlclZBUElEUHVibGljS2V5LCBbdGhpc10oYm9vbCB1
bnN1YnNjcmliZWQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICAgICAgICAgIC8vIElmIHdlIGZhaWwgdG8gdW5zdWJzY3JpYmUgZnJvbSBh
cHNkLCBqdXN0IGRyb3AgYSBsb2cuIFdlIHN0aWxsIHdhbnQgdG8gY29udGludWUgYW5kIHJlbW92
ZSB0aGUgcmVjb3JkIGZyb20gb3VyIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhIHN0YXRlIG1p
c21hdGNoIGJldHdlZW4gb3VyIGRhdGFiYXNlIGFuZCBhcHNkJ3MgZGF0YWJhc2UuCisgICAgICAg
ICAgICBpZiAoIXVuc3Vic2NyaWJlZCkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNo
LCAiUHVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZShidW5kbGVJRDogJXtwdWJsaWN9cywgc2Nv
cGU6ICV7c2Vuc2l0aXZlfXMpIGZhaWxlZCB3aXRoIGRvbWFpbjogJXtwdWJsaWN9cyBjb2RlOiAl
bGxkKSIsIG1fYnVuZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0ZjgoKS5k
YXRhKCksIGVycm9yLmRvbWFpbi5VVEY4U3RyaW5nID86ICJub25lIiwgc3RhdGljX2Nhc3Q8aW50
NjRfdD4oZXJyb3IuY29kZSkpOworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTSh1bnN1
YnNjcmliZWQpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyNlbmRpZgorCisg
ICAgICAgICAgICBtX2RhdGFiYXNlLnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihtX3N1YnNjcmlw
dGlvbklkZW50aWZpZXIsIFt0aGlzXShib29sIHJlbW92ZWQpIG11dGFibGUgeworICAgICAgICAg
ICAgICAgIGlmICghcmVtb3ZlZCkgeworICAgICAgICAgICAgICAgICAgICBmdWxmaWxsKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IHBhcnRpYWwgdG9waWMgbGlzdCB1cGRhdGVz
LgorICAgICAgICAgICAgICAgIHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFi
YXNlLCBbdGhpc10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmlsbCh0cnVl
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAg
ICB9KTsKK30KKworLy8gT25seSBhbGxvdyBvbmUgcmVxdWVzdCBwZXIgKGJ1bmRsZUlkZW50aWZp
ZXIsIHNjb3BlKSB0byBwcm9jZWVkIGF0IG9uY2UuIEZvciBpbnN0YW5jZSwgaWYgYSBnaXZlbgor
Ly8gcGFnZSBjYWxscyBQdXNoTWFuYWdlci5zdWJzY3JpYmUoKSB0d2ljZSBpbiBhIHJvdywgdGhl
IHNlY29uZCBzdWJzY3JpYmUgY2FsbCB3b24ndCBzdGFydCB1bnRpbAorLy8gdGhlIGZpcnN0IG9u
ZSBjb21wbGV0ZXMuCit2b2lkIFB1c2hTZXJ2aWNlOjplbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0
KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYgbWFwLCBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2VS
ZXF1ZXN0PiYmIHJlcXVlc3QpCit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfdHVwbGUocmVx
dWVzdC0+YnVuZGxlSWRlbnRpZmllcigpLCByZXF1ZXN0LT5zY29wZSgpKTsKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1hcC5lbnN1cmUoa2V5LCBbXSgpIHsKKyAgICAgICAgcmV0dXJuIERlcXVlPHN0
ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+PiB7IH07CisgICAgfSk7CisKKyAgICBh
dXRvIGFkZGVkUmVxdWVzdCA9IHJlcXVlc3QuZ2V0KCk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQoV1RGTW92ZShyZXF1ZXN0KSk7CisKKyAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIGFkZGVkUmVxdWVzdC0+c3RhcnQoKTsKK30KKwordm9pZCBQdXNo
U2VydmljZTo6ZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFw
JiBtYXAsIFB1c2hTZXJ2aWNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBhdXRvIGtleSA9IHN0
ZDo6bWFrZV90dXBsZShyZXF1ZXN0LmJ1bmRsZUlkZW50aWZpZXIoKSwgcmVxdWVzdC5zY29wZSgp
KTsKKyAgICBhdXRvIHJlcXVlc3RRdWV1ZUl0ID0gbWFwLmZpbmQoa2V5KTsKKworICAgIFJFTEVB
U0VfQVNTRVJUKHJlcXVlc3RRdWV1ZUl0ICE9IG1hcC5lbmQoKSk7CisgICAgYXV0byYgcmVxdWVz
dFF1ZXVlID0gcmVxdWVzdFF1ZXVlSXQtPnZhbHVlOworICAgIFJFTEVBU0VfQVNTRVJUKHJlcXVl
c3RRdWV1ZS5zaXplKCkgPiAwKTsKKyAgICBhdXRvIGN1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdFF1
ZXVlLnRha2VGaXJzdCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRSZXF1ZXN0LmdldCgp
ID09ICZyZXF1ZXN0KTsKKworICAgIFB1c2hTZXJ2aWNlUmVxdWVzdCogbmV4dFJlcXVlc3QgPSBu
dWxscHRyOworICAgIGlmICghcmVxdWVzdFF1ZXVlLnNpemUoKSkKKyAgICAgICAgbWFwLnJlbW92
ZShyZXF1ZXN0UXVldWVJdCk7CisgICAgZWxzZQorICAgICAgICBuZXh0UmVxdWVzdCA9IHJlcXVl
c3RRdWV1ZS5maXJzdCgpLmdldCgpOworCisgICAgLy8gRXZlbiBpZiB0aGVyZSdzIG5vIG5leHQg
cmVxdWVzdCB0byBzdGFydCwgaG9sZCBvbiB0byBjdXJyZW50UmVxdWVzdCB1bnRpbCB0aGUgbmV4
dCB0dXJuIG9mIHRoZSBydW4gbG9vcCBzaW5jZSB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGV4ZWN1
dGluZyB0aGUgZmluaXNoKCkgbWVtYmVyIGZ1bmN0aW9uIG9mIGN1cnJlbnRSZXF1ZXN0LgorICAg
IFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFtjdXJyZW50UmVxdWVzdCA9IFdURk1vdmUoY3Vy
cmVudFJlcXVlc3QpLCBuZXh0UmVxdWVzdF0geworICAgICAgICBpZiAobmV4dFJlcXVlc3QpCisg
ICAgICAgICAgICBuZXh0UmVxdWVzdC0+c3RhcnQoKTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNo
U2VydmljZTo6Z2V0U3Vic2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3Rl
ZDxzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiwgV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1ZXVlUHVz
aFNlcnZpY2VSZXF1ZXN0KG1fZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdHMsIG1ha2VVbmlxdWU8R2V0
U3Vic2NyaXB0aW9uUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21w
bGV0ZUdldFN1YnNjcmlwdGlvblJlcXVlc3QoR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCYgcmVxdWVz
dCkKK3sKKyAgICBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdChtX2dldFN1YnNjcmlwdGlvblJl
cXVlc3RzLCByZXF1ZXN0KTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6c3Vic2NyaWJlKGNvbnN0
IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1ZXVlUHVzaFNlcnZp
Y2VSZXF1ZXN0KG1fc3Vic2NyaWJlUmVxdWVzdHMsIG1ha2VVbmlxdWU8U3Vic2NyaWJlUmVxdWVz
dD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCB2YXBpZFB1YmxpY0tleSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxl
dGVTdWJzY3JpYmVSZXF1ZXN0KFN1YnNjcmliZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZmlu
aXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV9zdWJzY3JpYmVSZXF1ZXN0cywgcmVxdWVzdCk7Cit9
CisKK3ZvaWQgUHVzaFNlcnZpY2U6OnVuc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIg
c3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBl
Y3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIGVucXVldWVQdXNoU2VydmljZVJlcXVlc3QobV91bnN1YnNjcmliZVJlcXVlc3Rz
LCBtYWtlVW5pcXVlPFVuc3Vic2NyaWJlUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIs
IHNjb3BlLCBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSkpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVz
dChVbnN1YnNjcmliZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZmluaXNoZWRQdXNoU2Vydmlj
ZVJlcXVlc3QobV91bnN1YnNjcmliZVJlcXVlc3RzLCByZXF1ZXN0KTsKK30KKworZW51bSBjbGFz
cyBDb250ZW50RW5jb2RpbmcgeworICAgIEVtcHR5LAorICAgIEFFU0dDTSwKKyAgICBBRVMxMjhH
Q00KK307CisKK3N0cnVjdCBSYXdQdXNoTWVzc2FnZSB7CisgICAgU3RyaW5nIHRvcGljOworICAg
IENvbnRlbnRFbmNvZGluZyBlbmNvZGluZzsKKworICAgIC8vIE9ubHkgc2V0IGlmIGVuY29kaW5n
IGlzIG5vdCBDb250ZW50RW5jb2Rpbmc6OkVtcHR5LgorICAgIFZlY3Rvcjx1aW50OF90PiBlbmNy
eXB0ZWRQYXlsb2FkOworCisgICAgLy8gT25seSBzZXQgaWYgZW5jb2RpbmcgaXMgQ29udGVudEVu
Y29kaW5nOjpBRVNHQ00uCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclB1YmxpY0tleTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gc2FsdDsKKworfTsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmF3
UHVzaE1lc3NhZ2U+IG1ha2VSYXdQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGlv
bmFyeSogdXNlckluZm8pCit7CisgICAgUmF3UHVzaE1lc3NhZ2UgbWVzc2FnZTsKKworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBtZXNzYWdlLnRvcGljID0gdG9waWM7CisgICAgICAg
IE5TU3RyaW5nICpjb250ZW50RW5jb2RpbmcgPSB1c2VySW5mb1tAImNvbnRlbnRfZW5jb2Rpbmci
XTsKKyAgICAgICAgTlNTdHJpbmcgKnBheWxvYWRCYXNlNjQgPSB1c2VySW5mb1tAInBheWxvYWQi
XTsKKworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5sZW5ndGggfHwgIXBheWxvYWRCYXNl
NjQubGVuZ3RoKSB7CisgICAgICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVudEVuY29k
aW5nOjpFbXB0eTsKKyAgICAgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKFtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAiYWVzMTI4Z2NtIl0p
CisgICAgICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVudEVuY29kaW5nOjpBRVMxMjhH
Q007CisgICAgICAgIGVsc2UgaWYgKFtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAi
YWVzZ2NtIl0pIHsKKyAgICAgICAgICAgIG1lc3NhZ2UuZW5jb2RpbmcgPSBDb250ZW50RW5jb2Rp
bmc6OkFFU0dDTTsKKworICAgICAgICAgICAgTlNTdHJpbmcgKnNlcnZlclB1YmxpY0tleUJhc2U2
NFVSTCA9IHVzZXJJbmZvW0AiYXNfcHVibGlja2V5Il07CisgICAgICAgICAgICBOU1N0cmluZyAq
c2FsdEJhc2U2NFVSTCA9IHVzZXJJbmZvW0AiYXNfc2FsdCJdOworICAgICAgICAgICAgaWYgKCFz
ZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwgfHwgIXNhbHRCYXNlNjRVUkwpIHsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgYWVzZ2NtLWVuY3J5cHRlZCBwdXNoIHdp
dGhvdXQgcmVxdWlyZWQgc2VydmVyIGtleSBhbmQgc2FsdCIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gc2Vy
dmVyUHVibGljS2V5ID0gYmFzZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7
CisgICAgICAgICAgICBhdXRvIHNhbHQgPSBiYXNlNjRVUkxEZWNvZGUoc2FsdEJhc2U2NFVSTCk7
CisgICAgICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleSB8fCAhc2FsdCkgeworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBhZXNnY20tZW5jcnlwdGVkIHB1c2gg
d2l0aCBpbXByb3Blcmx5IGVuY29kZWQgc2VydmVyIGtleSBhbmQgc2FsdCIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1lc3NhZ2Uuc2VydmVyUHVibGljS2V5ID0gV1RGTW92ZSgqc2VydmVyUHVibGljS2V5KTsKKyAg
ICAgICAgICAgIG1lc3NhZ2Uuc2FsdCA9IFdURk1vdmUoKnNhbHQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIHB1c2ggd2l0aCB1bmtu
b3duIGNvbnRlbnQgZW5jb2Rpbmc6ICV7cHVibGljfXMiLCBjb250ZW50RW5jb2RpbmcuVVRGOFN0
cmluZyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBwYXlsb2FkID0gYmFzZTY0RGVjb2RlKHBheWxvYWRCYXNlNjQpOworICAgICAg
ICBpZiAoIXBheWxvYWQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGlu
ZyBwdXNoIHdpdGggaW1wcm9wZXJseSBlbmNvZGVkIHBheWxvYWQiKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICAgICAgbWVzc2FnZS5lbmNyeXB0ZWRQ
YXlsb2FkID0gV1RGTW92ZSgqcGF5bG9hZCk7CisgICAgfQorCisgICAgcmV0dXJuIG1lc3NhZ2U7
Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0cmluZyog
dG9waWMsIE5TRGljdGlvbmFyeSogdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIG1lc3NhZ2VSZXN1bHQgPSBtYWtlUmF3
UHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKKyAgICBpZiAoIW1lc3NhZ2VSZXN1bHQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YWJhc2UtPmdldFJlY29yZEJ5VG9waWModG9waWMs
IFt0aGlzLCBtZXNzYWdlID0gV1RGTW92ZSgqbWVzc2FnZVJlc3VsdCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiByZWNvcmRSZXN1bHQpIG11
dGFibGUgeworICAgICAgICBpZiAoIXJlY29yZFJlc3VsdCkgeworICAgICAgICAgICAgUkVMRUFT
RV9MT0coUHVzaCwgIkRyb3BwaW5nIGluY29taW5nIHB1c2ggc2VudCB0byB1bmtub3duIHRvcGlj
OiAle3NlbnNpdGl2ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgYXV0byByZWNvcmQgPSBXVEZNb3ZlKCpyZWNvcmRSZXN1bHQpOworCisgICAgICAg
IGlmIChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRFbmNvZGluZzo6RW1wdHkpIHsKKyAgICAg
ICAgICAgIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIocmVjb3JkLmJ1bmRsZUlELCBXZWJL
aXQ6OldlYlB1c2hNZXNzYWdlIHsgeyB9LCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkgfSk7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgUHVzaENyeXB0bzo6Q2xpZW50S2V5cyBjbGllbnRLZXlzIHsKKyAg
ICAgICAgICAgIHsgV1RGTW92ZShyZWNvcmQuY2xpZW50UHVibGljS2V5KSwgV1RGTW92ZShyZWNv
cmQuY2xpZW50UHJpdmF0ZUtleSkgfSwKKyAgICAgICAgICAgIFdURk1vdmUocmVjb3JkLnNoYXJl
ZEF1dGhTZWNyZXQpCisgICAgICAgIH07CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IGRlY3J5cHRlZFBheWxvYWQ7CisgICAgICAgIGlmIChtZXNzYWdlLmVuY29kaW5n
ID09IENvbnRlbnRFbmNvZGluZzo6QUVTMTI4R0NNKQorICAgICAgICAgICAgZGVjcnlwdGVkUGF5
bG9hZCA9IGRlY3J5cHRBRVMxMjhHQ01QYXlsb2FkKGNsaWVudEtleXMsIG1lc3NhZ2UuZW5jcnlw
dGVkUGF5bG9hZCk7CisgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVu
dEVuY29kaW5nOjpBRVNHQ00pCisgICAgICAgICAgICBkZWNyeXB0ZWRQYXlsb2FkID0gZGVjcnlw
dEFFU0dDTVBheWxvYWQoY2xpZW50S2V5cywgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXksIG1lc3Nh
Z2Uuc2FsdCwgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkKTsKKworICAgICAgICBpZiAoIWRlY3J5
cHRlZFBheWxvYWQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBp
bmNvbWluZyBwdXNoIGR1ZSB0byBkZWNyeXB0aW9uIGVycm9yIGZvciB0b3BpYyAle3NlbnNpdGl2
ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBt
X2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKHJlY29yZC5idW5kbGVJRCwgV2ViS2l0OjpXZWJQ
dXNoTWVzc2FnZSB7IFdURk1vdmUoKmRlY3J5cHRlZFBheWxvYWQpLCBVUkwoVVJMKCksIHJlY29y
ZC5zY29wZSkgfSk7CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmluZGV4IDJjMTQxNDRjNjFiYjNlZmFlNGVkMzI4ZTE1MjBk
M2VjZjA4MzE3ZWYuLjE5ODE0M2Y1Njk3Y2QyOGM2OTI4ZDQ1NjhjMjFjMzI1NDkyMGQyMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaE1l
c3NhZ2VDcnlwdG8uaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTQ3LDYgKzQ4
LDggQEAgcHVibGljOgogICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbigpID0gZGVmYXVsdDsKICAg
ICB2aXJ0dWFsIH5QdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OlB1c2hDcnlwdG86OkNsaWVudEtleXMgZ2VuZXJhdGVDbGllbnRLZXlzKCk7
CisKICAgICB1c2luZyBTdWJzY3JpYmVIYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChO
U1N0cmluZyAqLCBOU0Vycm9yICopPjsKICAgICB2aXJ0dWFsIHZvaWQgc3Vic2NyaWJlKGNvbnN0
IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFN1
YnNjcmliZUhhbmRsZXImJikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IDUzNDMzMjVlYjVlYTIwM2U4ZGY2ZmY4MzAzY2I5
YjBmZmM4MTMyMWIuLjkyZjgxNDI3N2E4MzgxNTMxNjg4YjBlNDg1MTgyZDQzZDg1Y2M4NjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBA
IC0yOCw4ICsyOCwxNSBAQAogCiAjaW1wb3J0IDx3dGYvV29ya1F1ZXVlLmg+CiAKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViUHVzaEQgewogCitQdXNoQ3J5cHRvOjpD
bGllbnRLZXlzIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKCkKK3sK
KyAgICByZXR1cm4gUHVzaENyeXB0bzo6Q2xpZW50S2V5czo6Z2VuZXJhdGUoKTsKK30KKwogdm9p
ZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKElu
Y29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgaGFuZGxlcikKIHsKICAgICBtX2luY29taW5nUHVz
aE1lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9X
ZWJQdXNoRGFlbW9uLmgKaW5kZXggYWYzMTg1N2RiODczN2E5YjY0Mzk1ZmIwMDA0NzUwYTk1OGU1
NDhkMC4uMDI4MDg0ZTUyYjRhMGRiYjNjMTQ5YmU2Yzk3MzZmNzU3NWU3ODdiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKKysrIGIvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1
ZGUgIlB1c2hDbGllbnRDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUHVzaE1lc3NhZ2VGb3JUZXN0
aW5nLmgiCisjaW5jbHVkZSAiUHVzaFNlcnZpY2UuaCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9u
Q29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9uQ29uc3Rh
bnRzLmgiCiAjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKQEAgLTYxLDYgKzYyLDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbm5lY3Rpb25BZGRlZCh4cGNfY29ubmVjdGlvbl90KTsKICAgICB2
b2lkIGNvbm5lY3Rpb25SZW1vdmVkKHhwY19jb25uZWN0aW9uX3QpOwogCisgICAgdm9pZCBzdGFy
dE1vY2tQdXNoU2VydmljZSgpOworICAgIHZvaWQgc3RhcnRQdXNoU2VydmljZShjb25zdCBTdHJp
bmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBTdHJpbmcmIHB1c2hEYXRhYmFzZVBh
dGgpOworICAgIHZvaWQgaGFuZGxlSW5jb21pbmdQdXNoKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYmKTsKKwogICAgIC8vIE1lc3NhZ2UgaGFu
ZGxlcnMKICAgICB2b2lkIGVjaG9Ud2ljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5n
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiByZXBseVNlbmRlcik7
CiAgICAgdm9pZCByZXF1ZXN0U3lzdGVtTm90aWZpY2F0aW9uUGVybWlzc2lvbihDbGllbnRDb25u
ZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBy
ZXBseVNlbmRlcik7CkBAIC02OSw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlYnVn
TW9kZUlzRW5hYmxlZChDbGllbnRDb25uZWN0aW9uKiwgYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVD
b25uZWN0aW9uQ29uZmlndXJhdGlvbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgV2ViUHVzaERh
ZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uJik7CiAgICAgdm9pZCBpbmplY3RQdXNoTWVzc2Fn
ZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFB1c2hNZXNzYWdlRm9yVGVzdGlu
ZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaW5qZWN0RW5j
cnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJp
bmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGdldFBlbmRp
bmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+Jik+JiYgcmVwbHlTZW5kZXIpOwog
ICAgIHZvaWQgc3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3Qg
VVJMJiBzY29wZVVSTCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhcHBsaWNhdGlvblNlcnZlcktl
eSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vi
c2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcik7
CiAgICAgdm9pZCB1bnN1YnNjcmliZUZyb21QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiwg
Y29uc3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhj
ZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcik7CkBAIC04OCw5ICs5NCwxNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGNvbnN0IFN0
cmluZyYgY2xpZW50Q29kZVNpZ25pbmdJZGVudGlmaWVyKTsKIAorICAgIHZvaWQgc2V0UHVzaFNl
cnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKTsKKyAgICB2b2lkIHJ1bkFmdGVy
U3RhcnRpbmdQdXNoU2VydmljZShGdW5jdGlvbjx2b2lkKCk+JiYpOworCiAgICAgQ2xpZW50Q29u
bmVjdGlvbiogdG9DbGllbnRDb25uZWN0aW9uKHhwY19jb25uZWN0aW9uX3QpOwogICAgIEhhc2hN
YXA8eHBjX2Nvbm5lY3Rpb25fdCwgUmVmPENsaWVudENvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25N
YXA7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+IG1fcHVzaFNlcnZpY2U7Cisg
ICAgYm9vbCBtX3B1c2hTZXJ2aWNlU3RhcnRlZCB7IGZhbHNlIH07CisgICAgRGVxdWU8RnVuY3Rp
b248dm9pZCgpPj4gbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnM7CisKKyAgICBIYXNoTWFw
PFN0cmluZywgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+PiBtX3B1c2hNZXNzYWdlczsK
ICAgICBIYXNoTWFwPFN0cmluZywgRGVxdWU8UHVzaE1lc3NhZ2VGb3JUZXN0aW5nPj4gbV90ZXN0
aW5nUHVzaE1lc3NhZ2VzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9XZWJQdXNoRGFlbW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9u
Lm1tCmluZGV4IGE4ZmU0OWY1MmQ3NjMyNjYzMWNhYzdkNzY2YzA5MTQ5NWU5Y2U1NWUuLmFkZDZl
M2Q4YWRmZWE4OTk4ODhmNGJhZjYxYWNjMDUzMTM2M2RjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1dlYlB1c2hEYWVtb24ubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1NwYW4uaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4K
KyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6V2Vi
UHVzaEQ7CiAKQEAgLTkxLDYgKzkyLDExIEBAIEFSR1VNRU5UUyhQdXNoTWVzc2FnZUZvclRlc3Rp
bmcpCiBSRVBMWShib29sKQogRU5ECiAKK0ZVTkNUSU9OKGluamVjdEVuY3J5cHRlZFB1c2hNZXNz
YWdlRm9yVGVzdGluZykKK0FSR1VNRU5UUyhTdHJpbmcpCitSRVBMWShib29sKQorRU5ECisKIEZV
TkNUSU9OKHN1YnNjcmliZVRvUHVzaFNlcnZpY2UpCiBBUkdVTUVOVFMoVVJMLCBWZWN0b3I8dWlu
dDhfdD4pCiBSRVBMWShjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0
YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKQpAQCAtMTUxLDYgKzE1NywxMyBAQCBXZWJQdXNo
RDo6RW5jb2RlZE1lc3NhZ2UgaW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBs
eShib29sIHJlcGx5KQogICAgIHJldHVybiBlbmNvZGVyLnRha2VCdWZmZXIoKTsKIH0KIAorV2Vi
UHVzaEQ6OkVuY29kZWRNZXNzYWdlIGluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGlu
Zzo6ZW5jb2RlUmVwbHkoYm9vbCByZXBseSkKK3sKKyAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2Rl
ciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgcmVwbHk7CisgICAgcmV0dXJuIGVuY29kZXIudGFr
ZUJ1ZmZlcigpOworfQorCiBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgZ2V0UGVuZGluZ1B1c2hN
ZXNzYWdlczo6ZW5jb2RlUmVwbHkoY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+
JiByZXBseSkKIHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOwpAQCAtMjI0
LDYgKzIzNyw1MSBAQCBEYWVtb24mIERhZW1vbjo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gZGFl
bW9uOwogfQogCit2b2lkIERhZW1vbjo6c3RhcnRNb2NrUHVzaFNlcnZpY2UoKQoreworICAgIGF1
dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVJbmNv
bWluZ1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgfTsKKyAg
ICBQdXNoU2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UoV1RGTW92ZShtZXNzYWdlSGFuZGxlciks
IFt0aGlzXShhdXRvJiYgcHVzaFNlcnZpY2UpIG11dGFibGUgeworICAgICAgICBzZXRQdXNoU2Vy
dmljZShXVEZNb3ZlKHB1c2hTZXJ2aWNlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpz
dGFydFB1c2hTZXJ2aWNlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBb
dGhpc10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNz
YWdlJiYgbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxlSWRlbnRp
ZmllciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6Y3JlYXRl
KGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBkYXRhYmFzZVBhdGgsIFdURk1vdmUobWVzc2FnZUhh
bmRsZXIpLCBbdGhpc10oYXV0byYmIHB1c2hTZXJ2aWNlKSBtdXRhYmxlIHsKKyAgICAgICAgc2V0
UHVzaFNlcnZpY2UoV1RGTW92ZShwdXNoU2VydmljZSkpOworICAgIH0pOworfQorCit2b2lkIERh
ZW1vbjo6c2V0UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmIHB1c2hT
ZXJ2aWNlKQoreworICAgIG1fcHVzaFNlcnZpY2UgPSBXVEZNb3ZlKHB1c2hTZXJ2aWNlKTsKKyAg
ICBtX3B1c2hTZXJ2aWNlU3RhcnRlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGVuZGluZ1B1c2hT
ZXJ2aWNlRnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV29ya1F1ZXVl
OjptYWluKCkuZGlzcGF0Y2goW3RoaXNdKCkgeworICAgICAgICB3aGlsZSAobV9wZW5kaW5nUHVz
aFNlcnZpY2VGdW5jdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0g
bV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBm
dW5jdGlvbigpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpydW5BZnRl
clN0YXJ0aW5nUHVzaFNlcnZpY2UoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQoreworICAg
IGlmICghbV9wdXNoU2VydmljZVN0YXJ0ZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nUHVzaFNlcnZp
Y2VGdW5jdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBmdW5jdGlvbigpOworfQorCiB2b2lkIERhZW1vbjo6YnJvYWRjYXN0RGVidWdN
ZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVsIG1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rpb25h
cnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKQEAgLTMyNSw2ICszODMsOSBAQCB2b2lk
IERhZW1vbjo6ZGVjb2RlQW5kSGFuZGxlTWVzc2FnZSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rp
b24sIE1lc3NhZ2VUeXBlIG1lcwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdFB1c2hNZXNz
YWdlRm9yVGVzdGluZzoKICAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1l
c3NhZ2VJbmZvOjppbmplY3RQdXNoTWVzc2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24s
IGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGlu
ZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjpp
bmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVu
Y29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgTWVzc2FnZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVzc2FnZXM6CiAgICAgICAgIGhhbmRs
ZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6Z2V0UGVuZGluZ1B1c2hNZXNz
YWdlcz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVwbHlTZW5k
ZXIpKTsKICAgICAgICAgYnJlYWs7CkBAIC00MzEsNiArNDkyLDQ2IEBAIHZvaWQgRGFlbW9uOjpp
bmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwg
Y29uc3QgUHVzCiAgICAgcmVwbHlTZW5kZXIodHJ1ZSk7CiB9CiAKK3ZvaWQgRGFlbW9uOjppbmpl
Y3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIHJlcGx5U2VuZGVyKQoreworICAgIGlmICghY29ubmVjdGlvbi0+aG9zdEFwcEhhc1B1c2hJ
bmplY3RFbnRpdGxlbWVudCgpKSB7CisgICAgICAgIGNvbm5lY3Rpb24tPmJyb2FkY2FzdERlYnVn
TWVzc2FnZSgiQXR0ZW1wdGluZyB0byBpbmplY3QgYSBwdXNoIG1lc3NhZ2UgZnJvbSBhbiB1bmVu
dGl0bGVkIHByb2Nlc3MiKTsKKyAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBt
ZXNzYWdlID0gbWVzc2FnZSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBs
eVNlbmRlcihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIGJ5dGVzID0gbWVzc2FnZS51dGY4KCk7CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+
IGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzLmRhdGEo
KSBsZW5ndGg6IGJ5dGVzLmxlbmd0aCgpXSk7CisKKyAgICAgICAgaWQgb2JqID0gW05TSlNPTlNl
cmlhbGl6YXRpb24gSlNPTk9iamVjdFdpdGhEYXRhOmRhdGEuZ2V0KCkgb3B0aW9uczowIGVycm9y
Om51bGxwdHJdOworICAgICAgICBpZiAoIW9iaiB8fCAhW29iaiBpc0tpbmRPZkNsYXNzOltOU0Rp
Y3Rpb25hcnkgY2xhc3NdXSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE5TTG9nKEAiZ290IG9iajogJUAi
LCBvYmopOworCisgICAgICAgIG1fcHVzaFNlcnZpY2UtPmRpZFJlY2VpdmVQdXNoTWVzc2FnZShv
YmpbQCJ0b3BpYyJdLCBvYmpbQCJ1c2VySW5mbyJdLCBbcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJl
cGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKHRydWUpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBEYWVtb246OmhhbmRsZUluY29taW5nUHVz
aChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2Um
JiBtZXNzYWdlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9wdXNoTWVzc2FnZXMuZW5zdXJl
KGJ1bmRsZUlkZW50aWZpZXIsIFtdIHsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxXZWJLaXQ6Oldl
YlB1c2hNZXNzYWdlPiB7IH07CisgICAgfSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQoV1RGTW92ZShtZXNzYWdlKSk7CisKKyAgICBub3RpZnlDbGllbnRQdXNoTWVzc2Fn
ZUlzQXZhaWxhYmxlKGJ1bmRsZUlkZW50aWZpZXIpOworfQorCiB2b2lkIERhZW1vbjo6bm90aWZ5
Q2xpZW50UHVzaE1lc3NhZ2VJc0F2YWlsYWJsZShjb25zdCBTdHJpbmcmIGNsaWVudENvZGVTaWdu
aW5nSWRlbnRpZmllcikKIHsKICNpZiBQTEFURk9STShNQUMpCkBAIC00NjIsNiArNTYzLDkgQEAg
dm9pZCBEYWVtb246OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiogY29u
bmVjdGlvbiwgQ29tcGxldGlvbkhhbmQKIAogICAgIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNz
YWdlPiByZXN1bHRNZXNzYWdlczsKIAorICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9wdXNoTWVz
c2FnZXMuZmluZChob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKTsgaXRlcmF0b3IgIT0gbV9w
dXNoTWVzc2FnZXMuZW5kKCkpCisgICAgICAgIHN0ZDo6c3dhcChyZXN1bHRNZXNzYWdlcywgaXRl
cmF0b3ItPnZhbHVlKTsKKwogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Rlc3RpbmdQdXNoTWVzc2Fn
ZXMuZmluZChob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKTsKICAgICBpZiAoaXRlcmF0b3Ig
IT0gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzLmVuZCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgbWVz
c2FnZSA6IGl0ZXJhdG9yLT52YWx1ZSkgewpAQCAtNDc2LDI1ICs1ODAsNTAgQEAgdm9pZCBEYWVt
b246OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwg
Q29tcGxldGlvbkhhbmQKICAgICByZXBseVNlbmRlcihXVEZNb3ZlKHJlc3VsdE1lc3NhZ2VzKSk7
CiB9CiAKLXZvaWQgRGFlbW9uOjpzdWJzY3JpYmVUb1B1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgYXBwbGljYXRpb25TZXJ2ZXJLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhw
ZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2b2lkIERhZW1vbjo6c3Vic2NyaWJlVG9QdXNoU2Vydmlj
ZShDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIFVOVVNFRF9QQVJBTShhcHBs
aWNhdGlvblNlcnZlcktleSk7Ci0gICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29y
ZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6Ok5vdEFsbG93ZWRFcnJvciwgIkxhY2sgcGVybWlz
c2lvbiJfcyB9KSk7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5k
bGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigp
LCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCB2YXBpZFB1YmxpY0tleSwgcmVwbHlTZW5kZXIg
PSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hT
ZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3Jl
OjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6SW52YWxpZFN0YXRlRXJyb3IsICJQdXNoIHNlcnZp
Y2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIl9zIH0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fcHVzaFNlcnZpY2UtPnN1YnNjcmliZShidW5kbGVJZGVudGlm
aWVyLCBzY29wZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyAgICB9
KTsKIH0KIAotdm9pZCBEYWVtb246OnVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlKENsaWVudENv
bm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIFdlYkNvcmU6OlB1c2hT
dWJzY3JpcHRpb25JZGVudGlmaWVyIHB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2b2lkIERhZW1vbjo6dW5zdWJzY3JpYmVGcm9tUHVzaFNl
cnZpY2UoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwg
V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVyKGZhbHNl
KTsKKyAgICBydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIGJ1bmRsZUlkZW50aWZp
ZXIgPSBjb25uZWN0aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCksIHNjb3BlID0g
c2NvcGVVUkwuc3RyaW5nKCksIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIHJlcGx5U2VuZGVyID0g
V1RGTW92ZShyZXBseVNlbmRlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9wdXNoU2Vy
dmljZSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVycm9yLCAiUHVzaCBzZXJ2aWNl
IGluaXRpYWxpemF0aW9uIGZhaWxlZCJfcyB9KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBtX3B1c2hTZXJ2aWNlLT51bnN1YnNjcmliZShidW5kbGVJZGVudGlm
aWVyLCBzY29wZSwgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgV1RGTW92ZShyZXBseVNlbmRlcikp
OworICAgIH0pOwogfQogCiB2b2lkIERhZW1vbjo6Z2V0UHVzaFN1YnNjcmlwdGlvbihDbGllbnRD
b25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNj
cmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQog
ewotICAgIHJlcGx5U2VuZGVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlv
bkRhdGE+IHsgfSk7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5k
bGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigp
LCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCByZXBseVNlbmRlciA9IFdURk1vdmUocmVwbHlT
ZW5kZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fcHVzaFNlcnZpY2UpIHsKKyAgICAg
ICAgICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEg
eyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2VydmljZSBpbml0aWFsaXphdGlv
biBmYWlsZWQiX3MgfSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgbV9wdXNoU2VydmljZS0+Z2V0U3Vic2NyaXB0aW9uKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3Bl
LCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgRGFlbW9uOjpnZXRQ
dXNoUGVybWlzc2lvblN0YXRlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVS
TCYgc2NvcGVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8dWludDhf
dCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKKyAgICAvLyBG
SVhNRQorI2lmIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JUKQorICAg
IHJlcGx5U2VuZGVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdlYkNvcmU6OlB1c2hQZXJtaXNzaW9u
U3RhdGU6OkdyYW50ZWQpKTsKKyNlbHNlCiAgICAgcmVwbHlTZW5kZXIoc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oV2ViQ29yZTo6UHVzaFBlcm1pc3Npb25TdGF0ZTo6RGVuaWVkKSk7CisjZW5kaWYKIH0K
IAogQ2xpZW50Q29ubmVjdGlvbiogRGFlbW9uOjp0b0NsaWVudENvbm5lY3Rpb24oeHBjX2Nvbm5l
Y3Rpb25fdCBjb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9X
ZWJQdXNoRGFlbW9uTWFpbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9u
TWFpbi5oCmluZGV4IGJiZWI5NjhkZTdhNzU5ZGRmMjc2ZmMxYmE2N2QyOGI2NjZhNDg2NDAuLmQz
YzE3ZTY1ZGEzYWVjNTI0NGFiOTE2MTNiYWMzY2Y2ZTllYWEyNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmgKQEAgLTI3LDYgKzI3LDYgQEAKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQsIGNvbnN0IGNoYXIqKik7
CitpbnQgV2ViUHVzaERhZW1vbk1haW4oaW50LCBjaGFyKiopOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1h
aW4ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tCmluZGV4
IDJhNjhlMThmYTIwMTUwNjYyMGQxYzM4MTc0NDExZWIwYWEyYmRjNTkuLjg5MjhkOGZjOTQwZmFl
ZjgxYTgzNGUzMDk0NWMzNTYwNzMyN2FhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9X
ZWJQdXNoRGFlbW9uTWFpbi5tbQpAQCAtMzAsMjQgKzMwLDIxIEBACiAjaW1wb3J0ICJEYWVtb25E
ZWNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25FbmNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25VdGls
aXRpZXMuaCIKKyNpbXBvcnQgIkxvZ0luaXRpYWxpemF0aW9uLmgiCiAjaW1wb3J0ICJXZWJQdXNo
RGFlbW9uLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdl
YkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4KKyNpbXBvcnQgPGdldG9wdC5oPgorI2ltcG9ydCA8
d3RmL0xvZ0luaXRpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2lt
cG9ydCA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQotI2ltcG9ydCA8c2VydmVycy9ib290c3RyYXAuaD4KLSNlbHNlCi0jaW1wb3J0IDxtYWNo
L3N0ZF90eXBlcy5oPgotZXh0ZXJuICJDIiB7Ci1leHRlcm4ga2Vybl9yZXR1cm5fdCBib290c3Ry
YXBfY2hlY2tfaW4obWFjaF9wb3J0X3QgYm9vdHN0cmFwUG9ydCwgY29uc3QgY2hhciAqc2Vydmlj
ZU5hbWUsIG1hY2hfcG9ydF90Kik7Ci19Ci0jZW5kaWYKLQogdXNpbmcgV2ViS2l0OjpEYWVtb246
OkVuY29kZWRNZXNzYWdlOwogdXNpbmcgV2ViUHVzaEQ6OkRhZW1vbjsKIAotc3RhdGljIGNvbnN0
IGNoYXIgKmluY29taW5nUHVzaFNlcnZpY2VOYW1lID0gImNvbS5hcHBsZS5hcHMud2Via2l0Lndl
YnB1c2hkLmluY29taW5nLXB1c2giOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBlbnRpdGxl
bWVudE5hbWUgPSAiY29tLmFwcGxlLnByaXZhdGUud2Via2l0LndlYnB1c2giX3M7CitzdGF0aWMg
Y29uc3QgQVNDSUlMaXRlcmFsIGRlZmF1bHRNYWNoU2VydmljZU5hbWUgPSAiY29tLmFwcGxlLndl
YmtpdC53ZWJwdXNoZC5zZXJ2aWNlIl9zOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBkZWZh
dWx0SW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSAiY29tLmFwcGxlLmFwcy53ZWJraXQud2VicHVz
aGQuaW5jb21pbmctcHVzaCJfczsKIAogbmFtZXNwYWNlIFdlYlB1c2hEIHsKIApAQCAtNzQsMjMg
KzcxLDU1IEBAIHVzaW5nIFdlYlB1c2hEOjpjb25uZWN0aW9uUmVtb3ZlZDsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLWludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioq
IGFyZ3YpCitpbnQgV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewot
ICAgIGlmIChhcmdjICE9IDMgfHwgc3RyY21wKGFyZ3ZbMV0sICItLW1hY2hTZXJ2aWNlTmFtZSIp
KSB7Ci0gICAgICAgIE5TTG9nKEAidXNhZ2U6IHdlYnB1c2hkIC0tbWFjaFNlcnZpY2VOYW1lIDxu
YW1lPiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIG1hY2hT
ZXJ2aWNlTmFtZSA9IGFyZ3ZbMl07Ci0KICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAg
V2ViS2l0OjpzdGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFjaFNlcnZp
Y2VOYW1lLCAiY29tLmFwcGxlLnByaXZhdGUud2Via2l0LndlYnB1c2giLCBjb25uZWN0aW9uQWRk
ZWQsIGNvbm5lY3Rpb25SZW1vdmVkLCBjb25uZWN0aW9uRXZlbnRIYW5kbGVyKTsKLQotICAgICAg
ICAvLyBUT0RPOiByZW1vdmUgdGhpcyBvbmNlIHdlIGFjdHVhbGx5IHN0YXJ0IHVzaW5nIEFQU0Nv
bm5lY3Rpb24uCi0gICAgICAgIG1hY2hfcG9ydF90IGluY29taW5nTWVzc2FnZVBvcnQ7Ci0gICAg
ICAgIGlmIChib290c3RyYXBfY2hlY2tfaW4oYm9vdHN0cmFwX3BvcnQsIGluY29taW5nUHVzaFNl
cnZpY2VOYW1lLCAmaW5jb21pbmdNZXNzYWdlUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAg
ICAgICAgTlNMb2coQCJDb3VsZG4ndCByZWdpc3RlciBmb3IgaW5jb21pbmcgcHVzaCBsYXVuY2gg
cG9ydC4iKTsKLSAgICAgICAgCiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsK
KworI2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIFdU
Rjo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworICAg
ICAgICBXZWJDb3JlOjpsb2dDaGFubmVscygpLmluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNz
YXJ5KCk7CisgICAgICAgIFdlYktpdDo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5l
bHNJZk5lY2Vzc2FyeSgpOworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisKKyAgICAgICAgc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewor
ICAgICAgICAgICAgeyAibWFjaFNlcnZpY2VOYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdt
JyB9LAorICAgICAgICAgICAgeyAiaW5jb21pbmdQdXNoU2VydmljZU5hbWUiLCByZXF1aXJlZF9h
cmd1bWVudCwgMCwgJ3AnIH0sCisgICAgICAgICAgICB7ICJ1c2VNb2NrUHVzaFNlcnZpY2UiLCBu
b19hcmd1bWVudCwgMCwgJ2YnIH0KKyAgICAgICAgfTsKKworICAgICAgICBjb25zdCBjaGFyKiBt
YWNoU2VydmljZU5hbWUgPSBkZWZhdWx0TWFjaFNlcnZpY2VOYW1lOworICAgICAgICBjb25zdCBj
aGFyKiBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSA9IGRlZmF1bHRJbmNvbWluZ1B1c2hTZXJ2aWNl
TmFtZTsKKyAgICAgICAgYm9vbCB1c2VNb2NrUHVzaFNlcnZpY2UgPSBmYWxzZTsKKworICAgICAg
ICBpbnQgYzsKKyAgICAgICAgaW50IG9wdGlvbkluZGV4OworICAgICAgICB3aGlsZSAoKGMgPSBn
ZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiIiwgb3B0aW9ucywgJm9wdGlvbkluZGV4KSkgIT0gLTEp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAg
ICAgICAgICAgICAgbWFjaFNlcnZpY2VOYW1lID0gb3B0YXJnOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgaW5jb21pbmdQdXNo
U2VydmljZU5hbWUgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICB1c2VNb2NrUHVzaFNlcnZpY2UgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uOiAlY1xuIiwgb3B0b3B0KTsKKyAg
ICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgV2ViS2l0OjpzdGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFjaFNl
cnZpY2VOYW1lLCBlbnRpdGxlbWVudE5hbWUsIGNvbm5lY3Rpb25BZGRlZCwgY29ubmVjdGlvblJl
bW92ZWQsIGNvbm5lY3Rpb25FdmVudEhhbmRsZXIpOworCisgICAgICAgIGlmICh1c2VNb2NrUHVz
aFNlcnZpY2UpCisgICAgICAgICAgICA6OldlYlB1c2hEOjpEYWVtb246OnNpbmdsZXRvbigpLnN0
YXJ0TW9ja1B1c2hTZXJ2aWNlKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3RyaW5n
IGxpYnJhcnlQYXRoID0gTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJy
YXJ5RGlyZWN0b3J5LCBOU1VzZXJEb21haW5NYXNrLCBZRVMpWzBdOworICAgICAgICAgICAgU3Ry
aW5nIHB1c2hEYXRhYmFzZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnRzKGxpYnJhcnlQYXRoLCB7ICJXZWJLaXQiLCAiV2ViUHVzaCIsICJQdXNoRGF0YWJhc2UuZGIi
IH0pOworICAgICAgICAgICAgOjpXZWJQdXNoRDo6RGFlbW9uOjpzaW5nbGV0b24oKS5zdGFydFB1
c2hTZXJ2aWNlKGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBwdXNoRGF0YWJhc2VQYXRoKTsKKyAg
ICAgICAgfQogICAgIH0KICAgICBDRlJ1bkxvb3BSdW4oKTsKICAgICByZXR1cm4gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwIGIvU291cmNlL1dlYktp
dC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKaW5kZXggZmQwNGU0MDQ1ODU5OGVjODczOWFjMGYzZTlh
OGI4ZjNmYmNhMWViOC4uNTljZWYwZDk4NDMwNTU2NWFlYWQxOGMyMTIyYWQzZGZmZTE1OTYyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNs
dWRlIDxXZWJLaXQvV0tNYWluLmg+CiAjaW5jbHVkZSA8b3MvYXZhaWxhYmlsaXR5Lmg+CiAKLWlu
dCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKK2ludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKICAgICBXS1dlYlB1c2hEYWVtb25NYWluKGFyZ2MsIGFyZ3YpOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVlYTIz
ZGZmZDVlYTM4NDg1MzE2YmZkYTY0MTRmZDZiNzAwYjYxM2IuLjI3ZGMzOTg4OGYwMDhmY2JhZWQy
YjI3ZWNmMzUzNzBmOWEyOTg1NWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMi0wMS0yOCAgQmVuIE5oYW0gIDxu
aGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgUHVzaFNlcnZpY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTg1NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICAtIE1vZGlmeSB0aGUgZXhpc3Rpbmcg
aW5qZWN0ZWQgcHVzaCB0ZXN0IHRvIGluamVjdCBhbiBlbmNyeXB0ZWQgcHVzaC4KKyAgICAgICAg
IC0gQWRkIGEgZmV3IGJhc2ljIHRlc3QgY2FzZXMgZm9yIHN1YnNjcmliaW5nIGFuZCB1bnN1YnNj
cmliaW5nIGZyb20gcHVzaC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKC1bTm90aWZpY2F0aW9uU2NyaXB0TWVz
c2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XSk6CisgICAgICAgICgtW05vdGlmaWNhdGlv
blNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2Ny
aXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RXZWJQdXNoRGFlbW9u
UExpc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlTWVzc2FnZURpY3Rpb25hcnkp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2VuZE1lc3NhZ2VUb0RhZW1vbik6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OnNlbmRDb25maWd1cmF0aW9uV2l0aEF1ZGl0VG9rZW4pOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpm
dW5jdGlvbik6IERlbGV0ZWQuCisKIDIwMjItMDEtMzAgIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIFB1c2hEYXRhYmFzZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IDZkOTJjZTk3
ODZhZjgxYzc4NGIxMjQ0NDE5ZTZkZTYyODAzY2U4MjAuLmM4NjQzNDdmY2M5ODRhYTI5YzQxMGI0
NDAxNzI1MjRkOWUzMTQzYjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KQEAgLTM1LDEzICszNSwxOCBAQAogI2lt
cG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tV
SURlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg+CiAjaW1w
b3J0IDxXZWJLaXQvX1dLRXhwZXJpbWVudGFsRmVhdHVyZS5oPgogI2ltcG9ydCA8V2ViS2l0L19X
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDxtYWNoL21hY2hfaW5p
dC5oPgogI2ltcG9ydCA8bWFjaC90YXNrLmg+CisjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShJT1MpCiAKK3VzaW5nIFdlYktpdDo6V2ViUHVzaEQ6Ok1lc3NhZ2VUeXBlOworCiBzdGF0aWMg
Ym9vbCBhbGVydFJlY2VpdmVkID0gZmFsc2U7CiBAaW50ZXJmYWNlIE5vdGlmaWNhdGlvblBlcm1p
c3Npb25EZWxlZ2F0ZSA6IE5TT2JqZWN0PFdLVUlEZWxlZ2F0ZVByaXZhdGU+CiBAZW5kCkBAIC02
MSw2ICs2NiwyNiBAQCAtICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuSmF2
YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTooTlNTdHJpbgogCiBAZW5kCiAKK0BpbnRlcmZh
Y2UgTm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgOiBOU09iamVjdDxXS1NjcmlwdE1l
c3NhZ2VIYW5kbGVyPiB7CisgICAgQmxvY2tQdHI8dm9pZChpZCk+IF9tZXNzYWdlSGFuZGxlcjsK
K30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5k
bGVyCisKKy0gKHZvaWQpc2V0TWVzc2FnZUhhbmRsZXI6KHZvaWQgKF4pKGlkKSloYW5kbGVyCit7
CisgICAgX21lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjsKK30KKworLSAodm9pZCl1c2VyQ29udGVu
dENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9s
bGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7
CisgICAgaWYgKF9tZXNzYWdlSGFuZGxlcikKKyAgICAgICAgX21lc3NhZ2VIYW5kbGVyKG1lc3Nh
Z2UuYm9keSk7Cit9CisKK0BlbmQKKwogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0
aWMgUmV0YWluUHRyPE5TVVJMPiB0ZXN0V2ViUHVzaERhZW1vbkxvY2F0aW9uKCkKQEAgLTc5LDcg
KzEwNCw4IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICp0ZXN0V2ViUHVz
aERhZW1vblBMaXN0KE5TVVJMICpzdG9yYWdlTG9jYXRpCiAgICAgICAgIEAiUHJvZ3JhbUFyZ3Vt
ZW50cyIgOiBAWwogICAgICAgICAgICAgdGVzdFdlYlB1c2hEYWVtb25Mb2NhdGlvbigpLmdldCgp
LnBhdGgsCiAgICAgICAgICAgICBAIi0tbWFjaFNlcnZpY2VOYW1lIiwKLSAgICAgICAgICAgIEAi
b3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIgorICAgICAgICAgICAgQCJvcmcu
d2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiLAorICAgICAgICAgICAgQCItLXVzZU1v
Y2tQdXNoU2VydmljZSIKICAgICAgICAgXQogICAgIH07CiB9CkBAIC0xMzUsMjQgKzE2MSwyNCBA
QCBzdGF0aWMgdm9pZCBjbGVhblVwVGVzdFdlYlB1c2hEKE5TVVJMICp0ZW1wRGlyKQogICAgIEVY
UEVDVF9OVUxMKGVycm9yKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjx4cGNfb2JqZWN0X3Q+IGNy
ZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgbWVzc2FnZSkKK3N0YXRpYyBSZXRhaW5QdHI8eHBjX29iamVjdF90PiBjcmVhdGVN
ZXNzYWdlRGljdGlvbmFyeShNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBjX2Rp
Y3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKICAgICB4cGNfZGljdGlvbmFy
eV9zZXRfdWludDY0KGRpY3Rpb25hcnkuZ2V0KCksICJwcm90b2NvbCB2ZXJzaW9uIiwgMSk7Ci0g
ICAgeHBjX2RpY3Rpb25hcnlfc2V0X3VpbnQ2NChkaWN0aW9uYXJ5LmdldCgpLCAibWVzc2FnZSB0
eXBlIiwgbWVzc2FnZVR5cGUpOworICAgIHhwY19kaWN0aW9uYXJ5X3NldF91aW50NjQoZGljdGlv
bmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlwZSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtZXNzYWdl
VHlwZSkpOwogICAgIHhwY19kaWN0aW9uYXJ5X3NldF9kYXRhKGRpY3Rpb25hcnkuZ2V0KCksICJl
bmNvZGVkIG1lc3NhZ2UiLCBtZXNzYWdlLmRhdGEoKSwgbWVzc2FnZS5zaXplKCkpOwogICAgIHJl
dHVybiBXVEZNb3ZlKGRpY3Rpb25hcnkpOwogfQogCiAvLyBVc2VzIGFuIGV4aXN0aW5nIGNvbm5l
Y3Rpb24gdG8gdGhlIGRhZW1vbiBmb3IgYSBvbmUtb2ZmIG1lc3NhZ2UKLXZvaWQgc2VuZE1lc3Nh
Z2VUb0RhZW1vbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHVpbnQ4X3QgbWVzc2FnZVR5
cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3ZvaWQgc2VuZE1lc3NhZ2VUb0Rh
ZW1vbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBl
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9uYXJ5
ID0gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkobWVzc2FnZVR5cGUsIG1lc3NhZ2UpOwogICAgIHhw
Y19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBkaWN0aW9uYXJ5LmdldCgpKTsK
IH0KIAogLy8gVXNlcyBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRvIHRoZSBkYWVtb24gZm9yIGEg
b25lLW9mZiBtZXNzYWdlLCB3YWl0aW5nIGZvciB0aGUgcmVwbHkKLXZvaWQgc2VuZE1lc3NhZ2VU
b0RhZW1vbldhaXRpbmdGb3JSZXBseSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHVpbnQ4
X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3ZvaWQgc2Vu
ZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rp
b24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3Nh
Z2UpCiB7CiAgICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkobWVz
c2FnZVR5cGUsIG1lc3NhZ2UpOwogCkBAIC0xODEsNyArMjA3LDcgQEAgc3RhdGljIHZvaWQgc2Vu
ZENvbmZpZ3VyYXRpb25XaXRoQXVkaXRUb2tlbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24p
CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzFdID0gMTsKICAgICAgICAgZW5jb2RlZE1lc3NhZ2Vb
Ml0gPSAzMjsKICAgICAgICAgbWVtY3B5KCZlbmNvZGVkTWVzc2FnZVsxMF0sICZ0b2tlbiwgc2l6
ZW9mKHRva2VuKSk7Ci0gICAgICAgIHNlbmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbiwgNiwg
ZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBzZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24s
IE1lc3NhZ2VUeXBlOjpVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbiwgZW5jb2RlZE1lc3Nh
Z2UpOwogICAgIH0KIH0KIApAQCAtMjUyLDcgKzI3OCw3IEBAIFRFU1QoV2ViUHVzaEQsIEJhc2lj
Q29tbXVuaWNhdGlvbikKICAgICAgICAgYXV0byBkaWN0aW9uYXJ5ID0gYWRvcHROUyh4cGNfZGlj
dGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0ciwgMCkpOwogICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gZW5jb2RlZE1lc3NhZ2UoMSk7CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzBdID0gMTsK
LSAgICAgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbihjb25uZWN0aW9uLmdldCgpLCA1LCBlbmNvZGVk
TWVzc2FnZSk7CisgICAgICAgIHNlbmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbi5nZXQoKSwg
TWVzc2FnZVR5cGU6OlNldERlYnVnTW9kZUlzRW5hYmxlZCwgZW5jb2RlZE1lc3NhZ2UpOwogICAg
ICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIH0KIApAQCAtMzYxLDU0
ICszODcsNiBAQCBURVNUKFdlYlB1c2hELCBQZXJtaXNzaW9uTWFuYWdlbWVudCkKICAgICBjbGVh
blVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciog
bWFpblNXQnl0ZXMgPSBSIlNXUkVTT1VSQ0UoCi08c2NyaXB0PgotZnVuY3Rpb24gbG9nKG1zZykK
LXsKLSAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5zdy5wb3N0TWVzc2FnZShtc2cp
OwotfQotCi1jb25zdCBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7Ci1jaGFubmVsLnBv
cnQxLm9ubWVzc2FnZSA9IChldmVudCkgPT4gbG9nKGV2ZW50LmRhdGEpOwotCi1uYXZpZ2F0b3Iu
c2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbigocmVnaXN0cmF0aW9uKSA9PiB7
Ci0gICAgaWYgKHJlZ2lzdHJhdGlvbi5hY3RpdmUpIHsKLSAgICAgICAgcmVnaXN0cmF0aW9uLmFj
dGl2ZS5wb3N0TWVzc2FnZSh7cG9ydDogY2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQyXSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgd29ya2VyID0gcmVnaXN0cmF0aW9uLmluc3Rh
bGxpbmc7Ci0gICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgZnVuY3Rp
b24oKSB7Ci0gICAgICAgIGlmICh3b3JrZXIuc3RhdGUgPT0gJ2FjdGl2YXRlZCcpCi0gICAgICAg
ICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5w
b3J0Ml0pOwotICAgIH0pOwotfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKLSAgICBsb2coIlJl
Z2lzdHJhdGlvbiBmYWlsZWQgd2l0aDogIiArIGVycm9yKTsKLX0pOwotPC9zY3JpcHQ+Ci0pU1dS
RVNPVVJDRSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBzY3JpcHRCeXRlcyA9IFIiU1dSRVNPVVJD
RSgKLWxldCBwb3J0Owotc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9
PiB7Ci0gICAgcG9ydCA9IGV2ZW50LmRhdGEucG9ydDsKLSAgICBwb3J0LnBvc3RNZXNzYWdlKCJS
ZWFkeSIpOwotfSk7Ci1zZWxmLmFkZEV2ZW50TGlzdGVuZXIoInB1c2giLCAoZXZlbnQpID0+IHsK
LSAgICB0cnkgewotICAgICAgICBpZiAoIWV2ZW50LmRhdGEpIHsKLSAgICAgICAgICAgIHBvcnQu
cG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiBudWxsIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LmRhdGEudGV4dCgpOwotICAg
ICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogIiArIHZhbHVlKTsKLSAgICAgICAgaWYg
KHZhbHVlICE9ICdTd2VldCBQb3RhdG9lcycpCi0gICAgICAgICAgICBldmVudC53YWl0VW50aWwo
UHJvbWlzZS5yZWplY3QoJ0kgd2FudCBzd2VldCBwb3RhdG9lcycpKTsKLSAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIkdvdCBleGNlcHRpb24gIiArIGUpOwotICAg
IH0KLX0pOwotKVNXUkVTT1VSQ0UiOwotCiBzdGF0aWMgdm9pZCBjbGVhcldlYnNpdGVEYXRhU3Rv
cmUoV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSkKIHsKICAgICBfX2Jsb2NrIGJvb2wgY2xlYXJl
ZFN0b3JlID0gZmFsc2U7CkBAIC00MTgsNzYgKzM5NiwyODkgQEAgc3RhdGljIHZvaWQgY2xlYXJX
ZWJzaXRlRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFTdG9yZSAqc3RvcmUpCiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZjbGVhcmVkU3RvcmUpOwogfQogCi1URVNUKFdlYlB1c2hELCBIYW5k
bGVJbmplY3RlZFB1c2gpCi17Ci0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsb3dXZWJzaXRl
RGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zXTsKK2NsYXNzIFdlYlB1c2hEVGVzdCA6IHB1YmxpYyA6
OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgorICAgIFdlYlB1c2hEVGVzdCgpCisgICAgewor
ICAgICAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9hbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFs
bE9yaWdpbnNdOwogCi0gICAgTlNVUkwgKnRlbXBEaXJlY3RvcnkgPSBzZXRVcFRlc3RXZWJQdXNo
RCgpOworICAgICAgICBtX3RlbXBEaXJlY3RvcnkgPSByZXRhaW5QdHIoc2V0VXBUZXN0V2ViUHVz
aEQoKSk7CiAKLSAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKLSAgICBkYXRhU3RvcmVDb25maWd1
cmF0aW9uLmdldCgpLndlYlB1c2hNYWNoU2VydmljZU5hbWUgPSBAIm9yZy53ZWJraXQud2VicHVz
aHRlc3RkYWVtb24uc2VydmljZSI7Ci0gICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53
ZWJQdXNoRGFlbW9uVXNlc01vY2tCdW5kbGVzRm9yVGVzdGluZyA9IFlFUzsKLSAgICBhdXRvIGRh
dGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENv
bmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgICAgICBhdXRv
IGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiBuZXddKTsKKyAgICAgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53
ZWJQdXNoTWFjaFNlcnZpY2VOYW1lID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNl
cnZpY2UiOworICAgICAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hEYWVt
b25Vc2VzTW9ja0J1bmRsZXNGb3JUZXN0aW5nID0gWUVTOworICAgICAgICBtX2RhdGFTdG9yZSA9
IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRp
b246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCi0gICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLSAg
ICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBkYXRhU3RvcmUuZ2V0KCk7
Ci0gICAgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3Rv
cmVdKTsKKyAgICAgICAgbV9jb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgbV9jb25maWd1cmF0aW9uLmdldCgpLndl
YnNpdGVEYXRhU3RvcmUgPSBtX2RhdGFTdG9yZS5nZXQoKTsKKyAgICAgICAgY2xlYXJXZWJzaXRl
RGF0YVN0b3JlKFttX2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0pOwogCi0gICAgW2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllF
U107Ci0gICAgZm9yIChfV0tFeHBlcmltZW50YWxGZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZl
cmVuY2VzIF9leHBlcmltZW50YWxGZWF0dXJlc10pIHsKLSAgICAgICAgaWYgKFtmZWF0dXJlLmtl
eSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9uc0VuYWJsZWQiXSkKLSAgICAg
ICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckZl
YXR1cmU6ZmVhdHVyZV07CisgICAgICAgIFttX2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5j
ZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllFU107CisgICAgICAgIGZvciAoX1dLRXhwZXJp
bWVudGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFsRmVh
dHVyZXNdKSB7CisgICAgICAgICAgICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpA
IkJ1aWx0SW5Ob3RpZmljYXRpb25zRW5hYmxlZCJdKQorICAgICAgICAgICAgICAgIFtbbV9jb25m
aWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJl
XTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJQ
dXNoQVBJRW5hYmxlZCJdKQorICAgICAgICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZl
cmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgfQor
CisgICAgICAgIG1fdGVzdE1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFu
ZGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICBbW21fY29uZmlndXJhdGlvbiB1c2VyQ29udGVu
dENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1fdGVzdE1lc3NhZ2VIYW5kbGVy
LmdldCgpIG5hbWU6QCJ0ZXN0Il07CisKKyAgICAgICAgbV9ub3RpZmljYXRpb25NZXNzYWdlSGFu
ZGxlciA9IGFkb3B0TlMoW1tOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10g
aW5pdF0pOworICAgICAgICBbW21fY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJd
IGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIuZ2V0
KCkgbmFtZTpAIm5vdGUiXTsKICAgICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRv
cHROUyhbW1Rlc3RNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwotICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3Nh
Z2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwotICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFs
c2U7Ci0gICAgW21lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRsZXI6
XnsKLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBjaGFy
KiBodG1sU291cmNlLCBjb25zdCBjaGFyKiBzZXJ2aWNlV29ya2VyU2NyaXB0U291cmNlKQorICAg
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0YW50cyA9IFIiU1JDKAorICAgICAg
ICAgICAgY29uc3QgVkFMSURfU0VSVkVSX0tFWSA9ICJCQTFIeHp5aTFSVU0xYjV3anhzbjduR3hB
c3p3MnU2MW0xNjRpM01yQUl4SEY2WUs1aDRTRFlpYy1kUnVVX1JDUENmQTVhcTlvalN3azVZMkVt
Q2xCUHMiOworICAgICAgICAgICAgY29uc3QgVkFMSURfU0VSVkVSX0tFWV9USEFUX0NBVVNFU19J
TkpFQ1RFRF9GQUlMVVJFID0gIkJFQXhhVU1vMXM4dGpPUnhKZm5TU3ZXaFliNHU1MWtnMWhXVDJz
XzlncFY3WnhhcjFwRl8yQlE4QW5jdUFkUzJCb0xoTjRxYXh6QnkyQ3dIRThCQnpXZyI7CisgICAg
ICAgIClTUkMiOworICAgICAgICBtX3NlcnZlci5yZXNldChuZXcgVGVzdFdlYktpdEFQSTo6SFRU
UFNlcnZlcih7CisgICAgICAgICAgICB7ICIvIiwgeyBodG1sU291cmNlIH0gfSwKKyAgICAgICAg
ICAgIHsgIi9jb25zdGFudHMuanMiLCB7IHsgeyAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9u
L2phdmFzY3JpcHQiIH0gfSwgY29uc3RhbnRzIH0gfSwKKyAgICAgICAgICAgIHsgIi9zdy5qcyIs
IHsgeyB7ICJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIgfSB9LCBzZXJ2
aWNlV29ya2VyU2NyaXB0U291cmNlIH0gfQorICAgICAgICB9LCBUZXN0V2ViS2l0QVBJOjpIVFRQ
U2VydmVyOjpQcm90b2NvbDo6SHR0cCkpOworCisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCkgY29uZmlndXJhdGlvbjptX2NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAgICAgW21fd2Vi
VmlldyBsb2FkUmVxdWVzdDptX3NlcnZlci0+cmVxdWVzdCgpXTsKKyAgICB9CisKKyAgICB+V2Vi
UHVzaERUZXN0KCkKKyAgICB7CisgICAgICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQobV90ZW1wRGly
ZWN0b3J5LmdldCgpKTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fdGVtcERpcmVj
dG9yeTsKKyAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBtX2RhdGFTdG9yZTsKKyAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gbV9jb25maWd1cmF0aW9uOworICAg
IFJldGFpblB0cjxUZXN0TWVzc2FnZUhhbmRsZXI+IG1fdGVzdE1lc3NhZ2VIYW5kbGVyOworICAg
IFJldGFpblB0cjxOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlcj4gbV9ub3RpZmljYXRp
b25NZXNzYWdlSGFuZGxlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdFdlYktpdEFQSTo6SFRU
UFNlcnZlcj4gbV9zZXJ2ZXI7CisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3Owor
fTsKKworVEVTVF9GKFdlYlB1c2hEVGVzdCwgSGFuZGxlSW5qZWN0ZWRQdXNoKQoreworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBodG1sU291cmNlID0gUiJTV1JFU09VUkNFKAorICAgIDxzY3JpcHQg
c3JjPSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9u
IGxvZyhtc2cpCisgICAgeworICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50
ZXN0LnBvc3RNZXNzYWdlKG1zZyk7CisgICAgfQorCisgICAgY29uc3QgY2hhbm5lbCA9IG5ldyBN
ZXNzYWdlQ2hhbm5lbCgpOworICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gKGV2ZW50KSA9
PiBsb2coZXZlbnQuZGF0YSk7CisKKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rl
cignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlv
biA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgc3Vi
c2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7Cisg
ICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICBhcHBsaWNhdGlv
blNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWQorICAgICAgICB9KTsKKyAgICAgICAgcmVnaXN0
cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7cG9ydDogY2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVs
LnBvcnQyXSk7CisgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgbG9nKCJS
ZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6ICIgKyBlcnJvcik7CisgICAgfSk7CisgICAgPC9zY3Jp
cHQ+CisgICAgKVNXUkVTT1VSQ0UiOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlcnZpY2VX
b3JrZXJTb3VyY2UgPSBSIlNXUkVTT1VSQ0UoCisgICAgbGV0IHBvcnQ7CisgICAgc2VsZi5hZGRF
dmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7CisgICAgICAgIHBvcnQgPSBldmVu
dC5kYXRhLnBvcnQ7CisgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlYWR5Iik7CisgICAgfSk7
CisgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICBpZiAoIWV2ZW50LmRhdGEpIHsKKyAgICAgICAgICAgICAgICBw
b3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogbnVsbCBkYXRhIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5k
YXRhLnRleHQoKTsKKyAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiAiICsg
dmFsdWUpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBwb3J0LnBvc3RNZXNz
YWdlKCJFcnJvcjogIiArIGUpOworICAgICAgICB9CisgICAgfSk7CisgICAgKVNXUkVTT1VSQ0Ui
OworCisgICAgX19ibG9jayBib29sIHJlYWR5ID0gZmFsc2U7CisgICAgX19ibG9jayBib29sIGdv
dEV4cGVjdGVkTWVzc2FnZSA9IGZhbHNlOworICAgIFttX3Rlc3RNZXNzYWdlSGFuZGxlciBhZGRN
ZXNzYWdlOkAiUmVhZHkiIHdpdGhIYW5kbGVyOl57CisgICAgICAgIHJlYWR5ID0gdHJ1ZTsKICAg
ICB9XTsKLSAgICBbbWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpAIlJlY2VpdmVkOiBIZWxsbyBX
b3JsZCIgd2l0aEhhbmRsZXI6XnsKLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAgW21fdGVzdE1l
c3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6QCJSZWNlaXZlZDogV2hlbiBJIGdyb3cgdXAsIEkgd2Fu
dCB0byBiZSBhIHdhdGVybWVsb24iIHdpdGhIYW5kbGVyOl57CisgICAgICAgIGdvdEV4cGVjdGVk
TWVzc2FnZSA9IHRydWU7CiAgICAgfV07CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVy
IHNlcnZlcih7Ci0gICAgICAgIHsgIi8iLCB7IG1haW5TV0J5dGVzIH0gfSwKLSAgICAgICAgeyAi
L3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9
IH0sIHNjcmlwdEJ5dGVzIH0gfQotICAgIH0sIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlBy
b3RvY29sOjpIdHRwKTsKKyAgICBsb2FkUmVxdWVzdChodG1sU291cmNlLCBzZXJ2aWNlV29ya2Vy
U291cmNlKTsKIAotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJl
cXVlc3QoKV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeSk7CiAKLSAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwotICAgIGRvbmUgPSBmYWxzZTsKKyAgICBT
dHJpbmcgYnVuZGxlSWRlbnRpZmllciA9ICJjb20uYXBwbGUuV2ViS2l0LlRlc3RXZWJLaXRBUEki
X3M7CisgICAgU3RyaW5nIHNjb3BlID0gbV9zZXJ2ZXItPnJlcXVlc3QoKS5VUkwuYWJzb2x1dGVT
dHJpbmc7CisgICAgU3RyaW5nIHRvcGljID0gYnVuZGxlSWRlbnRpZmllciArICIgIl9zICsgc2Nv
cGU7CiAKLSAgICAvLyBJbmplY3QgcHVzaCBtZXNzYWdlCi0gICAgYXV0byBlbmNvZGVkTWVzc2Fn
ZSA9IGVuY29kZVN0cmluZygiY29tLmFwcGxlLldlYktpdC5UZXN0V2ViS2l0QVBJIik7Ci0gICAg
ZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVjdG9yKGVuY29kZVN0cmluZyhzZXJ2ZXIucmVxdWVzdCgp
LlVSTC5hYnNvbHV0ZVN0cmluZykpOwotICAgIGVuY29kZWRNZXNzYWdlLmFwcGVuZFZlY3Rvcihl
bmNvZGVTdHJpbmcoIkhlbGxvIFdvcmxkIikpOworICAgIC8vIEZyb20gZXhhbXBsZSBpbiBSRkM4
MjkxIFNlY3Rpb24gNS4KKyAgICBTdHJpbmcgcGF5bG9hZEJhc2U2NFVSTCA9ICJER3Y2cmExbmxZ
Z0RDUzFGUm5iemx3QUFFQUJCQlA0ejlLc042bkdSVGJWWUlfYzdWSlNQUVRCdGtnY3kyN21sbWxN
b1pJSWdEbGw2ZTN2Q1lMb2NJbm1ZV0FtUzZUbHpBQzh3RXFLSzZQQnJ1M2psN0FfeWw5NWJRcHU2
Y1ZQVHBLNE1xZ2tmMUNYenRMVkJTdDJLczNvWndidXdYUFhMV3lvdUJXTFZXR05XUWV4U2dTeHNq
X1F1bGN5NGEtZk4iX3M7CisgICAgU3RyaW5nIHBheWxvYWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVU
b1N0cmluZyhiYXNlNjRVUkxEZWNvZGUocGF5bG9hZEJhc2U2NFVSTCkudmFsdWUoKSk7CisKKyAg
ICAvLyBUaGlzIGlzIHRoZSBmb3JtYXQgdGhhdCBBUFMgdXNlcyBmb3IgZGVsaXZlcmluZyBwdXNo
ZXMuCisgICAgTlNEYXRhICpkYXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09O
T2JqZWN0OkB7CisgICAgICAgIEAidG9waWMiOiAoTlNTdHJpbmcgKil0b3BpYywKKyAgICAgICAg
QCJ1c2VySW5mbyI6IEB7CisgICAgICAgICAgICBAImNvbnRlbnRfZW5jb2RpbmciOiBAImFlczEy
OGdjbSIsCisgICAgICAgICAgICBAInBheWxvYWQiOiAoTlNTdHJpbmcgKilwYXlsb2FkQmFzZTY0
CisgICAgICAgIH0KKyAgICB9IG9wdGlvbnM6MCBlcnJvcjpudWxscHRyXTsKKworICAgIFN0cmlu
ZyBtZXNzYWdlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhciAqPihkYXRhLmJ5dGVzKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGRhdGEubGVuZ3RoKSB9OworICAgIGF1dG8gZW5jb2RlZE1lc3NhZ2Ug
PSBlbmNvZGVTdHJpbmcoV1RGTW92ZShtZXNzYWdlKSk7CiAKICAgICBhdXRvIHV0aWxpdHlDb25u
ZWN0aW9uID0gY3JlYXRlQW5kQ29uZmlndXJlQ29ubmVjdGlvblRvU2VydmljZSgib3JnLndlYmtp
dC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIik7Ci0gICAgc2VuZE1lc3NhZ2VUb0RhZW1vbldh
aXRpbmdGb3JSZXBseSh1dGlsaXR5Q29ubmVjdGlvbi5nZXQoKSwgNywgZW5jb2RlZE1lc3NhZ2Up
OworICAgIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkodXRpbGl0eUNvbm5lY3Rp
b24uZ2V0KCksIE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rp
bmcsIGVuY29kZWRNZXNzYWdlKTsKIAogICAgIC8vIEZldGNoIHB1c2ggbWVzc2FnZXMKKyAgICBf
X2Jsb2NrIGJvb2wgZ290TWVzc2FnZXMgPSBmYWxzZTsKICAgICBfX2Jsb2NrIFJldGFpblB0cjxO
U0FycmF5PE5TRGljdGlvbmFyeSAqPj4gbWVzc2FnZXM7Ci0gICAgW2RhdGFTdG9yZSBfZ2V0UGVu
ZGluZ1B1c2hNZXNzYWdlczpeKE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykg
eworICAgIFttX2RhdGFTdG9yZSBfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczpeKE5TQXJyYXk8TlNE
aWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykgewogICAgICAgICBtZXNzYWdlcyA9IHJhd01lc3Nh
Z2VzOwotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgZ290TWVzc2FnZXMgPSB0cnVlOwog
ICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAgZG9uZSA9
IGZhbHNlOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZXMpOwogCiAg
ICAgRVhQRUNUX0VRKFttZXNzYWdlcyBjb3VudF0sIDF1KTsKIAogICAgIC8vIEhhbmRsZSBwdXNo
IG1lc3NhZ2UKICAgICBfX2Jsb2NrIGJvb2wgcHVzaE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTsK
LSAgICBbZGF0YVN0b3JlIF9wcm9jZXNzUHVzaE1lc3NhZ2U6W21lc3NhZ2VzIGZpcnN0T2JqZWN0
XSBjb21wbGV0aW9uSGFuZGxlcjpeKGJvb2wgcmVzdWx0KSB7CisgICAgW21fZGF0YVN0b3JlIF9w
cm9jZXNzUHVzaE1lc3NhZ2U6W21lc3NhZ2VzIGZpcnN0T2JqZWN0XSBjb21wbGV0aW9uSGFuZGxl
cjpeKGJvb2wgcmVzdWx0KSB7CiAgICAgICAgIHB1c2hNZXNzYWdlUHJvY2Vzc2VkID0gdHJ1ZTsK
ICAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290RXhwZWN0ZWRNZXNzYWdlKTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJnB1c2hNZXNzYWdlUHJvY2Vzc2VkKTsKK30KIAotICAgIGNsZWFuVXBU
ZXN0V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7CitURVNUX0YoV2ViUHVzaERUZXN0LCBTdWJzY3Jp
YmVUZXN0KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzb3VyY2UgPSBSIkhUTUwoCisgICAg
PHNjcmlwdCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAg
bmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkg
PT4geworICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2Vydmlj
ZVdvcmtlci5yZWFkeTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hN
YW5hZ2VyLnN1YnNjcmliZSh7CisgICAgICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVl
LAorICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZ
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1YnNjcmlwdGlvbi50b0pT
T04oKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gIkVycm9y
OiAiICsgZTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVy
cy5ub3RlLnBvc3RNZXNzYWdlKHJlc3VsdCk7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAg
KUhUTUwiOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG9iaiA9IG5pbDsKKyAgICBfX2Js
b2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFttX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVy
IHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQgbWVzc2FnZSkgeworICAgICAgICBvYmogPSBtZXNzYWdl
OworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KHNvdXJj
ZSwgIiIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBBU1NF
UlRfVFJVRShbb2JqIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKworICAg
IE5TRGljdGlvbmFyeSAqc3Vic2NyaXB0aW9uID0gb2JqLmdldCgpOworICAgIEFTU0VSVF9UUlVF
KFtzdWJzY3JpcHRpb25bQCJlbmRwb2ludCJdIGhhc1ByZWZpeDpAImh0dHBzOi8vIl0pOworICAg
IEFTU0VSVF9UUlVFKFtzdWJzY3JpcHRpb25bQCJrZXlzIl0gaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IGNsYXNzXV0pOworCisgICAgLy8gU2hhcmVkIGF1dGggc2VjcmV0IHNob3VsZCBiZSAx
NiBieXRlcyAoMjIgYnl0ZXMgaW4gdW5wYWRkZWQgYmFzZTY0dXJsKS4KKyAgICBBU1NFUlRfRVEo
W3N1YnNjcmlwdGlvbltAImtleXMiXVtAImF1dGgiXSBsZW5ndGhdLCAyMnUpOworCisgICAgLy8g
Q2xpZW50IHB1YmxpYyBrZXkgc2hvdWxkIGJlIDY1IGJ5dGVzICg4NyBieXRlcyBpbiB1bnBhZGRl
ZCBiYXNlNjR1cmwpLgorICAgIEFTU0VSVF9FUShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdW0AicDI1
NmRoIl0gbGVuZ3RoXSwgODd1KTsKK30KKworVEVTVF9GKFdlYlB1c2hEVGVzdCwgU3Vic2NyaWJl
RmFpbHVyZVRlc3QpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNvdXJjZSA9IFIiSFRNTCgK
KyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4K
KyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3lu
YyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5z
ZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSBhd2FpdCByZWdpc3RyYXRpb24u
cHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKKyAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6
IHRydWUsCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZF
Ul9LRVlfVEhBVF9DQVVTRVNfSU5KRUNURURfRkFJTFVSRQorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICByZXN1bHQgPSBzdWJzY3JpcHRpb24udG9KU09OKCk7CisgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICJFcnJvcjogIiArIGU7CisgICAgICAgIH0KKyAg
ICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMubm90ZS5wb3N0TWVzc2FnZShyZXN1
bHQpOworICAgIH0pOworICAgIDwvc2NyaXB0PgorICAgIClIVE1MIjsKKworICAgIF9fYmxvY2sg
UmV0YWluUHRyPGlkPiBvYmogPSBuaWw7CisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsK
KyAgICBbbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlk
IG1lc3NhZ2UpIHsKKyAgICAgICAgb2JqID0gbWVzc2FnZTsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfV07CisKKyAgICBsb2FkUmVxdWVzdChzb3VyY2UsICIiKTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgLy8gU3BlYyBzYXlzIHRoYXQgYW4gZXJyb3Ig
aW4gdGhlIHB1c2ggc2VydmljZSBzaG91bGQgYmUgYW4gQWJvcnRFcnJvci4KKyAgICBBU1NFUlRf
VFJVRShbb2JqIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pOworICAgIEFTU0VSVF9U
UlVFKFtvYmogaGFzUHJlZml4OkAiRXJyb3I6IEFib3J0RXJyb3IiXSk7Cit9CisKK1RFU1RfRihX
ZWJQdXNoRFRlc3QsIFVuc3Vic2NyaWJlVGVzdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
c291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0PgorICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcv
c3cuanMnKS50aGVuKGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0g
YXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7CisgICAgICAgIGxldCByZXN1bHQg
PSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3
YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoeworICAgICAgICAgICAgICAg
IHVzZXJWaXNpYmxlT25seTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZl
cktleTogVkFMSURfU0VSVkVSX0tFWQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBsZXQg
cmVzdWx0MSA9IGF3YWl0IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOworICAgICAgICAgICAg
bGV0IHJlc3VsdDIgPSBhd2FpdCBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IFtyZXN1bHQxLCByZXN1bHQyXTsKKyAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgcmVzdWx0ID0gIkVycm9yOiAiICsgZTsKKyAgICAgICAgfQorICAgICAgICB3
aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5ub3RlLnBvc3RNZXNzYWdlKHJlc3VsdCk7Cisg
ICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgKUhUTUwiOworCisgICAgX19ibG9jayBSZXRhaW5Q
dHI8aWQ+IG9iaiA9IG5pbDsKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFtt
X25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQgbWVzc2Fn
ZSkgeworICAgICAgICBvYmogPSBtZXNzYWdlOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9
XTsKKworICAgIGxvYWRSZXF1ZXN0KHNvdXJjZSwgIiIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZSk7CisKKyAgICAvLyBGaXJzdCB1bnN1YnNjcmliZSBzaG91bGQgc3VjY2Vl
ZC4gU2Vjb25kIG9uZSBzaG91bGQgZmFpbCBzaW5jZSB0aGUgZmlyc3Qgb25lIHJlbW92ZWQgdGhl
IHJlY29yZCBmcm9tIHRoZSBkYXRhYmFzZS4KKyAgICBpZCBleHBlY3RlZCA9IEBbQCgxKSwgQCgw
KV07CisgICAgQVNTRVJUX1RSVUUoW29iaiBpc0VxdWFsOmV4cGVjdGVkXSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450567</attachid>
            <date>2022-02-01 14:21:47 -0800</date>
            <delta_ts>2022-02-05 15:31:11 -0800</delta_ts>
            <desc>add tests for different payload types</desc>
            <filename>bug-235857-20220201142146.patch</filename>
            <type>text/plain</type>
            <size>93011</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGY0YjkwNDYwYjM3NWZlZjAyODg3ZTQx
NzgxZmUwZWNiMDgzNjZhZDYuLmRjZTFkZjBkZGZmNzkxNjVlNWExMGI1MDYzMzYwZWVkODg5MDMy
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgUHVzaEFQSUVuYWJsZWQgdG8gV2ViS2l0TGVn
YWN5IHNvIHdlIGNhbiBlbmFibGUgaXQgb24gaW4gQVBJIHRlc3RzIHZpYSBfV0tFeHBlcmltZW50
YWxGZWF0dXJlLgorCisgICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sOgorCiAyMDIyLTAxLTMwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIEltcG9ydCBBUFNDb25uZWN0aW9uLXJlbGF0ZWQgU1BJCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IGY4M2VjYzA2ZWFmODc1NjMzM2NlYTI1M2VlMjlkNmUwMTQ4ZmNhOGYuLjkyNmEzZTkxZjQ4
MDJmNGZkMmYzZmQyNjMzNmU1OWFlN2QyNzUwYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBA
CisyMDIyLTAxLTI4ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQ
dXNoU2VydmljZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM1ODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBhZGRzIFB1c2hTZXJ2aWNlIHRvIHdlYnB1c2hkLiBJdCBoYW5kbGVzIHJlcXVlc3Rz
IHRvIGNyZWF0ZSwgcmVtb3ZlLCBhbmQgZ2V0IHB1c2gKKyAgICAgICAgc3Vic2NyaXB0aW9ucy4g
SXQgYWxzbyBkZWNyeXB0cyBpbmNvbWluZyBwdXNoZXMgYW5kIHBhc3MgdGhlbSBiYWNrIHRvIHRo
ZSBVSSBwcm9jZXNzIHZpYSB0aGUKKyAgICAgICAgZXhpc3RpbmcgbWFjaGluZXJ5IGluIFdlYlB1
c2hEYWVtb24uCisKKyAgICAgICAgUHVzaFNlcnZpY2UgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRo
IHR3byBvYmplY3RzOgorCisgICAgICAgIDEuIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjogdGhpcyBj
cmVhdGVzIGFuZCByZW1vdmVzIHB1c2ggc3Vic2NyaXB0aW9ucyBmcm9tIHRoZSBwdXNoIHNlcnZl
ci4KKyAgICAgICAgICAgSXQgYWxzbyByZWNlaXZlcyBpbmNvbWluZyBwdXNoZXMgZnJvbSB0aGUg
cHVzaCBzZXJ2ZXIuCisgICAgICAgIDIuIFB1c2hEYXRhYmFzZTogdGhpcyBwZXJzaXN0cyBwdXNo
IHN1YnNjcmlwdGlvbnMgdG8gZGlzay4KKworICAgICAgICBTZXZlcmFsIHRoaW5ncyBhcmUgbm90
IHlldCBpbXBsZW1lbnRlZDsgZm9yIGluc3RhbmNlLCB3ZSBjdXJyZW50bHkgYWx3YXlzIGdyYW50
IGEgcGFnZSB0aGUKKyAgICAgICAgcGVybWlzc2lvbiB0byByZWNlaXZlIHB1c2hlcy4gVGhpcyB3
aWxsIGJlIGZpeGVkIGluIGZ1dHVyZSBwYXRjaGVzLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3
IEFQSSB0ZXN0cy4gVGhlIGN1cnJlbnQgdGVzdHMgdXNlIGEgTW9ja1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbiB0aGF0IHZlbmRzCisgICAgICAgIHN1YnNjcmlwdGlvbiB3aXRoIGZpeGVkIGRhdGEsIGJ1
dCB0aGlzIGNhbiBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU2hhcmVk
L0FQSS9Db2NvYS9XS01haW4uaDoKKyAgICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5t
bToKKyAgICAgICAgKFdLV2ViUHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIFNoYXJlZC9Db2Nv
YS9XZWJQdXNoTWVzc2FnZUNvY29hLm1tOiBhZGQgYWJpbGl0eSB0byBkaXN0aW5ndWlzaCBiZXR3
ZWVuIGFuIGVtcHR5IHZzLiBudWxsIHBheWxvYWQuCisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hN
ZXNzYWdlOjpmcm9tRGljdGlvbmFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdl
Ojp0b0RpY3Rpb25hcnkgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29u
c3RhbnRzLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVw
bHkpOgorICAgICAgICAqIFNoYXJlZC9XZWJQdXNoTWVzc2FnZS5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJQdXNoTWVzc2FnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0
aW9uLmg6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToK
KyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNs
aWVudEtleXMpOgorICAgICAgICAoV2ViUHVzaEQ6Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246
OnN1YnNjcmliZSk6CisgICAgICAgIChXZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlv
bjo6dW5zdWJzY3JpYmUpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpjb25uZWN0aW9uKToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6ZGF0YWJhc2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1
c2hTZXJ2aWNlOjpkaWRSZWNlaXZlUHVzaE1lc3NhZ2UpOgorICAgICAgICAqIHdlYnB1c2hkL1B1
c2hTZXJ2aWNlLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYlB1c2hEOjp1cGRhdGVUb3BpY0xpc3Rz
KToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UpOgorICAgICAgICAoV2ViUHVz
aEQ6OlB1c2hTZXJ2aWNlOjpQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1
c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKToKKyAgICAgICAgKFdlYlB1c2hEOjptYWtlUHVzaFRv
cGljKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OmJ1bmRsZUlkZW50
aWZpZXIpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6c2NvcGUpOgor
ICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6UHVzaFNlcnZpY2VSZXF1ZXN0
KToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpQdXNoU2Vydmlj
ZVJlcXVlc3RJbXBsKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBs
OjpmdWxmaWxsKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpy
ZWplY3QpOgorICAgICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1
YnNjcmlwdGlvblJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJl
cXVlc3Q6OnN0YXJ0SW50ZXJuYWwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVl
c3Q6OlN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVl
c3Q6OnN0YXJ0SW1wbCk6CisgICAgICAgIChXZWJQdXNoRDo6U3Vic2NyaWJlUmVxdWVzdDo6YXR0
ZW1wdFRvUmVjb3ZlckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKToKKyAgICAgICAgKFdl
YlB1c2hEOjpVbnN1YnNjcmliZVJlcXVlc3Q6OlVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAg
IChXZWJQdXNoRDo6VW5zdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEludGVybmFsKToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KToK
KyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Z2V0U3Vic2NyaXB0aW9uKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1
ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6c3Vic2NyaWJlKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KToK
KyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6dW5zdWJzY3JpYmUpOgorICAgICAgICAo
V2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJQdXNoRDo6bWFrZVJhd1B1c2hNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNo
ZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2Vydmlj
ZUNvbm5lY3Rpb24ubW06CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9u
OjpnZW5lcmF0ZUNsaWVudEtleXMpOgorICAgICAgICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb24u
aDoKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVz
aEQ6Ok1lc3NhZ2VJbmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6OmVu
Y29kZVJlcGx5KToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0TW9ja1B1c2hTZXJ2
aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0UHVzaFNlcnZpY2UpOgorICAg
ICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6c2V0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVz
aEQ6OkRhZW1vbjo6cnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1
c2hEOjpEYWVtb246OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6
OkRhZW1vbjo6aW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAg
KFdlYlB1c2hEOjpEYWVtb246OmhhbmRsZUluY29taW5nUHVzaCk6CisgICAgICAgIChXZWJQdXNo
RDo6RGFlbW9uOjpnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKToKKyAgICAgICAgKFdlYlB1c2hEOjpE
YWVtb246OnN1YnNjcmliZVRvUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1v
bjo6dW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1v
bjo6Z2V0UHVzaFN1YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpnZXRQ
dXNoUGVybWlzc2lvblN0YXRlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFp
bi5oOgorICAgICAgICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQdXNoRGFlbW9uTWFpbik6CisgICAgICAgICogd2VicHVzaGQvY29tLmFwcGxl
LndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3Q6CisgICAgICAgICogd2VicHVzaGQvd2VicHVzaGQu
Y3BwOgorICAgICAgICAobWFpbik6CisKIDIwMjItMDEtMzAgIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CiAKICAgICAgICAgRm9yd2FyZCBtZXNzYWdlcyBmcm9tIE5ldHdvcmtQcm9jZXNzIHRv
IHdlYnB1c2hkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJl
bmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCmluZGV4IDdhNGQzNjQ2M2VjNTUw
YzBmM2VhZDRhN2EyNWQ1MzE5ZmVmM2FmNWUuLjBlNmVjOWRlZjFjZTVhODhjODBiYjdlNGIxYTMx
MmZmZTBiYTU0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9X
ZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCisrKyBiL1NvdXJjZS9XVEYvU2NyaXB0cy9Q
cmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCkBAIC0xMTIyLDYgKzEx
MjIsOCBAQCBQdXNoQVBJRW5hYmxlZDoKICAgZGVmYXVsdFZhbHVlOgogICAgIFdlYkNvcmU6CiAg
ICAgICBkZWZhdWx0OiBmYWxzZQorICAgIFdlYktpdExlZ2FjeToKKyAgICAgIGRlZmF1bHQ6IGZh
bHNlCiAgICAgV2ViS2l0OgogICAgICAgZGVmYXVsdDogZmFsc2UKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQVBJL0NvY29hL1dLTWFpbi5oCmluZGV4IDMwMzc4Zjg1NTNhZmY1YzNkYTM0ZmI5OGYyMzdi
YWUxNTY5ODAzYTIuLjljZjg0ZDI3NDRmYTdkZWJmYjA3MWRmMTIzZWQxMjY5YTQ3ZjUyNzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLmgKQEAgLTM0LDcgKzM0LDcgQEAg
ZXh0ZXJuICJDIiB7CiAKIFdLX0VYUE9SVCBpbnQgV0tYUENTZXJ2aWNlTWFpbihpbnQgYXJnYywg
Y29uc3QgY2hhcioqIGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMu
MCkpOwogV0tfRVhQT1JUIGludCBXS0FkQXR0cmlidXRpb25EYWVtb25NYWluKGludCBhcmdjLCBj
b25zdCBjaGFyKiogYXJndikgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKLVdLX0VYUE9SVCBpbnQgV0tXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJn
YywgY29uc3QgY2hhcioqIGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CitXS19FWFBPUlQgaW50IFdLV2ViUHVzaERhZW1vbk1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tCmluZGV4IGRlMmU5ZjdhNWJkNTVmOTFkZTg3ZTFhOTNh
YWY4OTA3M2RmYmZkNDEuLjk3ZDc4NWY2OWYyNjFhYWZjZTI1ZDhkOTE3NjcxNDRmMjNlOWUwNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4ubW0KKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbQpAQCAtNDAsNyArNDAs
NyBAQCBpbnQgV0tBZEF0dHJpYnV0aW9uRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioq
IGFyZ3YpCiAgICAgcmV0dXJuIFdlYktpdDo6UENNRGFlbW9uTWFpbihhcmdjLCBhcmd2KTsKIH0K
IAotaW50IFdLV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KQor
aW50IFdLV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewogICAgIHJl
dHVybiBXZWJLaXQ6OldlYlB1c2hEYWVtb25NYWluKGFyZ2MsIGFyZ3YpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hNZXNzYWdlQ29jb2EubW0KaW5kZXggZjEy
OTM4YmM0ZGRmMWRlNDkxZDkwOWU4YjdhZmRhNjUyZDBjOTA3Yi4uNWM1NTQzODY2Yzc4YTYzM2Jk
MWU4MjI4MGRiMDg1MjMwOTRmY2I3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
Q29jb2EvV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9D
b2NvYS9XZWJQdXNoTWVzc2FnZUNvY29hLm1tCkBAIC0zOSwyMSArMzksMzAgQEAgc3RkOjpvcHRp
b25hbDxXZWJQdXNoTWVzc2FnZT4gV2ViUHVzaE1lc3NhZ2U6OmZyb21EaWN0aW9uYXJ5KE5TRGlj
dGlvbmFyeSAqZGljdGkKICAgICBpZiAoIXVybCB8fCAhW3VybCBpc0tpbmRPZkNsYXNzOltOU1VS
TCBjbGFzc11dKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgTlNEYXRhICpw
dXNoRGF0YSA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJLaXRQdXNoRGF0YUtleV07Ci0g
ICAgaWYgKCFwdXNoRGF0YSB8fCAhW3B1c2hEYXRhIGlzS2luZE9mQ2xhc3M6W05TRGF0YSBjbGFz
c11dKQorICAgIGlkIHB1c2hEYXRhID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYktpdFB1
c2hEYXRhS2V5XTsKKyAgICBCT09MIGlzTnVsbCA9IHB1c2hEYXRhID09IFtOU051bGwgbnVsbF07
CisgICAgQk9PTCBpc0RhdGEgPSBbcHVzaERhdGEgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNz
XV07CisKKyAgICBpZiAoIWlzTnVsbCAmJiAhaXNEYXRhKQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIHsgewotICAgICAgICBWZWN0b3I8dWludDhfdD4geyBzdGF0
aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocHVzaERhdGEuYnl0ZXMpLCBwdXNoRGF0YS5sZW5ndGgg
fSwKLSAgICAgICAgVVJMIHsgdXJsIH0KLSAgICB9IH07CisgICAgV2ViUHVzaE1lc3NhZ2UgbWVz
c2FnZSB7IHsgfSwgVVJMIHsgdXJsIH0gfTsKKyAgICBpZiAoaXNEYXRhKSB7CisgICAgICAgIE5T
RGF0YSAqZGF0YSA9IChOU0RhdGEgKilwdXNoRGF0YTsKKyAgICAgICAgbWVzc2FnZS5wdXNoRGF0
YSA9IFZlY3Rvcjx1aW50OF90PiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5
dGVzKSwgZGF0YS5sZW5ndGggfTsKKyAgICB9CisKKyAgICByZXR1cm4gbWVzc2FnZTsKIH0KIAog
TlNEaWN0aW9uYXJ5ICpXZWJQdXNoTWVzc2FnZTo6dG9EaWN0aW9uYXJ5KCkgY29uc3QKIHsKLSAg
ICBhdXRvIG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cHVz
aERhdGEuZGF0YSgpIGxlbmd0aDpwdXNoRGF0YS5zaXplKCldKTsKKyAgICBSZXRhaW5QdHI8TlNE
YXRhPiBuc0RhdGE7CisgICAgaWYgKHB1c2hEYXRhKQorICAgICAgICBuc0RhdGEgPSBuc0RhdGEg
PSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOnB1c2hEYXRhLT5kYXRhKCkg
bGVuZ3RoOnB1c2hEYXRhLT5zaXplKCldKTsKKwogICAgIHJldHVybiBAewotICAgICAgICBXZWJL
aXRQdXNoRGF0YUtleSA6IG5zRGF0YS5nZXQoKSwKKyAgICAgICAgV2ViS2l0UHVzaERhdGFLZXkg
OiBuc0RhdGEgPyBuc0RhdGEuZ2V0KCkgOiBbTlNOdWxsIG51bGxdLAogICAgICAgICBXZWJLaXRQ
dXNoUmVnaXN0cmF0aW9uVVJMS2V5IDogKE5TVVJMICopcmVnaXN0cmF0aW9uVVJMCiAgICAgfTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFu
dHMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAppbmRl
eCBmYzQ3ZGM0ZjEyNzQ4NzI0YjFiNTdjNTcyYzE0OWIzODc4ZWMwYTViLi5mM2Y3YmJlNjNmNGVk
MzVlZGNmM2UyYWFhZDkzZmIzZTQ5MjlmZjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCkBAIC00Myw2ICs0Myw3IEBAIGVudW0gY2xhc3MgTWVz
c2FnZVR5cGUgOiB1aW50OF90IHsKICAgICBTZXREZWJ1Z01vZGVJc0VuYWJsZWQsCiAgICAgVXBk
YXRlQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24sCiAgICAgSW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0
aW5nLAorICAgIEluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZywKICAgICBHZXRQ
ZW5kaW5nUHVzaE1lc3NhZ2VzLAogICAgIFN1YnNjcmliZVRvUHVzaFNlcnZpY2UsCiAgICAgVW5z
dWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UsCkBAIC01OSw2ICs2MCw3IEBAIGlubGluZSBib29sIG1l
c3NhZ2VUeXBlU2VuZHNSZXBseShNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSkKICAgICBjYXNlIE1l
c3NhZ2VUeXBlOjpSZXF1ZXN0U3lzdGVtTm90aWZpY2F0aW9uUGVybWlzc2lvbjoKICAgICBjYXNl
IE1lc3NhZ2VUeXBlOjpHZXRQZW5kaW5nUHVzaE1lc3NhZ2VzOgogICAgIGNhc2UgTWVzc2FnZVR5
cGU6OkluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKKyAgICBjYXNlIE1lc3NhZ2VUeXBlOjpJ
bmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6CiAgICAgY2FzZSBNZXNzYWdlVHlw
ZTo6U3Vic2NyaWJlVG9QdXNoU2VydmljZToKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpVbnN1YnNj
cmliZUZyb21QdXNoU2VydmljZToKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpHZXRQdXNoU3Vic2Ny
aXB0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaE1lc3NhZ2Uu
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hNZXNzYWdlLmgKaW5kZXggZjllNDNmMzMz
ZDU2ODQ4OGMyZmJlMWU2ZWJjMTFkNjIzMzRjZjhlNy4uMWY0ZWZhYzk4NGI1MjIyZGJkMTBiZThh
YTMwYzdlNWE3OGJlOTk2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVz
aE1lc3NhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oCkBA
IC0zNyw3ICszNyw3IEBAIHN0cnVjdCBXZWJQdXNoTWVzc2FnZSB7CiAgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYlB1c2hNZXNzYWdlPiBkZWNvZGUo
RGVjb2RlciYpOwogCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHB1c2hEYXRhOworICAgIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBwdXNoRGF0YTsKICAgICBVUkwgcmVnaXN0cmF0aW9uVVJM
OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgV2ViUHVzaE1l
c3NhZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KIHN0ZDo6b3B0aW9uYWw8V2ViUHVzaE1lc3NhZ2U+IFdlYlB1c2hNZXNzYWdlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90
Pj4gcHVzaERhdGE7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50
OF90Pj4+IHB1c2hEYXRhOwogICAgIGRlY29kZXIgPj4gcHVzaERhdGE7CiAgICAgaWYgKCFwdXNo
RGF0YSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJiOWJlMmMwZmYxNTg3MzQ2OTFi
YWMxMmE5NmRmNDhiODY3YzViMTIuLjI5Mjk0MTRjZDBkMWYwMTcyMTk5MDgwZjEwOWFhY2NkZjRk
NDU0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtOTQzLDcgKzk0Myw3IEBACiAJCTUxMjkzNUU0MTI4OEQ5NzgwMEE0QjY5NSAvKiBJ
bmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyOTM1RTIxMjg4RDk3ODAwQTRCNjk1IC8qIElu
amVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmggKi87IH07CiAJCTUxMjlFQjEyMjNE
MERFN0IwMEFGMUNENyAvKiBDb250ZW50V29ybGRTaGFyZWQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjlFQjExMjNEMERFNzgwMEFGMUNENyAvKiBD
b250ZW50V29ybGRTaGFyZWQuaCAqLzsgfTsKIAkJNTEyQ0Q2OTgyNzIxRUZDODAwRjdGOEVDIC8q
IFdlYlB1c2hEYWVtb25Db25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTJDRDY5NzI3MjFFRkMzMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1v
bkNvbm5lY3Rpb24uaCAqLzsgfTsKLQkJNTEyQ0Q2OUEyNzIxRjBBOTAwRjdGOEVDIC8qIFdlYlB1
c2hEYWVtb25Db25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMkNENjk5MjcyMUYwNDkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3Rh
bnRzLmggKi87IH07CisJCTUxMkNENjlBMjcyMUYwQTkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9u
Q29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTJDRDY5OTI3MjFGMDQ5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMkUzNEU1
MTMwQjREMDUwMEFCRDE5QSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdBMzNCNDEzMEIzMDhDMDBG
ODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMkVDQzM1MjcxOTZBREIwMDA4OUI2NiAv
KiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQjkzMEZFMjZFODAyMTYwMDMyQjFDMCAvKiBQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudENvbm5lY3Rpb24uaCAqLzsgfTsKIAkJNTEyRjU4OTcxMkE4
ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkY1ODhGMTJBODgzODgwMDYy
OTUzMCAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggKi87IH07CkBAIC0xOTk1LDYg
KzE5OTUsOCBAQAogCQlFNUNCQTc2NzI3QTMxOEUxMDBERjc4NTggLyogVW5pZmllZFNvdXJjZTEx
OS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNUNC
QTc2MDI3QTMxODc5MDBERjc4NTggLyogVW5pZmllZFNvdXJjZTExOS5jcHAgKi87IH07CiAJCUU1
Q0JBNzY4MjdBMzE4RTEwMERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE3LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1Q0JBNzYyMjdBMzE4NzkwMERG
Nzg1OCAvKiBVbmlmaWVkU291cmNlMTE3LmNwcCAqLzsgfTsKIAkJRTVERUZBNjgyNkY4RjQyNjAw
QUI2OERCIC8qIFBob3Rvc1VJU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNURFRkE2NzI2RjhGNDI2MDBBQjY4REIgLyogUGhvdG9zVUlTUEkuaCAq
LzsgfTsKKwkJRUIzNkIxNjgyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjM2QjE2NjI3QTdCNDUw
MDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCAqLzsgfTsKKwkJRUIzNkIxNjkyN0E3QjQ1MDAwNTBF
MDBEIC8qIFB1c2hTZXJ2aWNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRUIzNkIxNjcyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLm1tICov
OyB9OwogCQlFQkE4RDNBQjI3QTVFMzEzMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZVNQSS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJBOEQzQUEy
N0E1RTMxMzAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VTUEkuaCAqLzsgfTsKIAkJRUJBOEQz
QjIyN0E1RTMzRjAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJBOEQzQUMyN0E1RTMz
RTAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tICovOyB9OwogCQlFQkE4
RDNCMzI3QTVFMzNGMDBDQjc5MDAgLyogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUJBOEQzQUQyN0E1RTMz
RTAwQ0I3OTAwIC8qIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCAqLzsgfTsKQEAgLTY0NDYs
NiArNjQ0OCw4IEBACiAJCUU1REVGQTY3MjZGOEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQaG90b3NVSVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFQjBEMzEyRDI3NUFFMTMzMDA4NjNEOEYgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNo
ZC5tYWMucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IGNvbS5hcHBsZS53
ZWJraXQud2VicHVzaGQubWFjLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
QjBEMzEyRTI3NUFFMTMzMDA4NjNEOEYgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5pb3Mu
cGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IGNvbS5hcHBsZS53ZWJraXQu
d2VicHVzaGQuaW9zLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjM2QjE2
NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHVzaFNlcnZpY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RUIzNkIxNjcyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUHVzaFNlcnZpY2UubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUVCQThEM0FBMjdBNUUzMTMwMENCNzkwMCAvKiBBcHBsZVB1c2hTZXJ2
aWNlU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGxlUHVzaFNlcnZp
Y2VTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUMyN0E1RTMzRTAw
Q0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCQThEM0FEMjdBNUUzM0UwMENCNzkwMCAvKiBN
b2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwMDczLDYgKzEwMDc3LDggQEAKIAkJCQk1MTYwRTk1ODI3NEMwRDg4MDA1NjczODgg
LyogUHVzaEFwcEJ1bmRsZS5tbSAqLywKIAkJCQk1MUY3QkI3OTI3NDRDNTA3MDBDNDVBNzIgLyog
UHVzaENsaWVudENvbm5lY3Rpb24uaCAqLywKIAkJCQk1MUY3QkI3QTI3NDRDNTA3MDBDNDVBNzIg
LyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gKi8sCisJCQkJRUIzNkIxNjYyN0E3QjQ1MDAwNTBF
MDBEIC8qIFB1c2hTZXJ2aWNlLmggKi8sCisJCQkJRUIzNkIxNjcyN0E3QjQ1MDAwNTBFMDBEIC8q
IFB1c2hTZXJ2aWNlLm1tICovLAogCQkJCUVCQThEM0FGMjdBNUUzM0YwMENCNzkwMCAvKiBQdXNo
U2VydmljZUNvbm5lY3Rpb24uaCAqLywKIAkJCQlFQkE4RDNCMTI3QTVFMzNGMDBDQjc5MDAgLyog
UHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tICovLAogCQkJCTUxN0I1Rjc3Mjc1RTk3OTUwMDJEQzIy
RCAvKiB3ZWJwdXNoZC5jcHAgKi8sCkBAIC0xMzIyNiw2ICsxMzIzMiw3IEBACiAJCQkJNTE3QjVG
ODEyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxN0I1RjdEMjc1RTk3QjYwMDJEQzIyRCAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE3QjVGOTUyNzVFQkE2MzAwMkRDMjJEIC8qIFB1c2hNZXNzYWdlRm9y
VGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRUIzNkIxNjgyN0E3QjQ1MDAwNTBFMDBEIC8q
IFB1c2hTZXJ2aWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFQkE4RDNCNTI3QTVFMzNGMDBDQjc5
MDAgLyogUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUU2ODg3
MDFGNkUyQkFCMDA3MDA2QTYgLyogUXVhcmFudGluZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEwQzIyN0UyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5r
LmggaW4gSGVhZGVycyAqLywKQEAgLTE1NDgwLDYgKzE1NDg3LDcgQEAKIAkJCQkyRDU0QzMxQjIx
MkY0REE2MDA0OUMxNzQgLyogUHJvY2Vzc0xhdW5jaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxN0I1RjgyMjc1RTk3QjYwMDJEQzIyRCAvKiBQdXNoQXBwQnVuZGxlLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE3QjVGN0IyNzVFOTdBOTAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9u
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRUIzNkIxNjkyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hT
ZXJ2aWNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRUJBOEQzQjcyN0E1RTMzRjAwQ0I3OTAwIC8q
IFB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMEMyMjdGMjQ1
MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxpbmdTb2Z0TGluay5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBMEMyMjVFMjQzNTc1Q0QwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5h
aWxMb2FkZXIubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKaW5kZXggNzc2OWJiNmJkZDU4MjhlN2IxNjRj
MTY3Yzg0NjBjZmRiZDdjMDQwMC4uYjk1M2JiOWMxMmRkN2UyMmJkNjkxMzA1NDQ4NzljN2RmNDZk
OTRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmgKQEAgLTM0LDYgKzM0LDggQEAgcHVibGljOgogICAgIE1vY2tQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24oKTsKICAgICB+TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpOwogCisgICAg
V2ViQ29yZTo6UHVzaENyeXB0bzo6Q2xpZW50S2V5cyBnZW5lcmF0ZUNsaWVudEtleXMoKSBmaW5h
bDsKKwogICAgIHZvaWQgc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFN1YnNjcmliZUhhbmRsZXImJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCB1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmIHRvcGljLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBVbnN1YnNjcmliZUhhbmRsZXImJikgb3ZlcnJpZGU7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29u
bmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5tbQppbmRleCBkYmVmYTc0YWVjZDlhOWVhMGU0MTk4MzM4NjhlMzA4ZDNkNzZmNjAzLi5j
NGNmMmU2NzliOTJiZjkyMzU2MWMxNThjMjNkMzY4MDFkODc4MzY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC0yNiw2
ICsyNiwxMCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmgiCiAKKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTo6UHVzaENyeXB0bzsKKwogbmFtZXNwYWNlIFdlYlB1c2hEIHsKIAogTW9j
a1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpCkBAIC0z
NCwxNCArMzgsMzAgQEAgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6TW9ja1B1c2hTZXJ2aWNl
Q29ubmVjdGlvbigpCiAKIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246On5Nb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwogCi12b2lkIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rp
b246OnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBTdWJz
Y3JpYmVIYW5kbGVyJiYgaGFuZGxlcikKK0NsaWVudEtleXMgTW9ja1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKCkKIHsKLSAgICBoYW5kbGVyKHsgfSwgW05TRXJyb3Ig
ZXJyb3JXaXRoRG9tYWluOk5TQ29jb2FFcnJvckRvbWFpbiBjb2RlOk5TRmVhdHVyZVVuc3VwcG9y
dGVkRXJyb3IgdXNlckluZm86bmlsXSk7CisgICAgLy8gRXhhbXBsZSB2YWx1ZXMgZnJvbSBSRkM4
MjkxIFNlY3Rpb24gNS4KKyAgICBhdXRvIHB1YmxpY0tleSA9IGJhc2U2NFVSTERlY29kZSgiQkNW
eHNyN05fZU5nVlJxdkh0RDB6VFpzRWM2LVZWLUp2TGV4aHFVek9SY3hhT3ppNi1BWVdYdlRCSG00
Ymp5UGpzN1ZkOHBaR0g2U1Jwa050b0lBaXc0Il9zKS52YWx1ZSgpOworICAgIGF1dG8gcHJpdmF0
ZUtleSA9IGJhc2U2NFVSTERlY29kZSgicTFkWHB3M1VwVDVWT211X2NmX3Y2aWgwN0FlbXMzbmp4
SS1KV2dMY005NCJfcykudmFsdWUoKTsKKyAgICBhdXRvIHNlY3JldCA9IGJhc2U2NFVSTERlY29k
ZSgiQlRCWk1xSEg2cjRUdHM3Sl9hU0lnZyJfcykudmFsdWUoKTsKKworICAgIHJldHVybiBDbGll
bnRLZXlzIHsgUDI1NkRIS2V5UGFpciB7IFdURk1vdmUocHVibGljS2V5KSwgV1RGTW92ZShwcml2
YXRlS2V5KSB9LCBXVEZNb3ZlKHNlY3JldCkgfTsKK30KKwordm9pZCBNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiB2YXBpZFB1YmxpY0tleSwgU3Vic2NyaWJlSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgYXV0
byBhbHdheXNSZWplY3RlZEtleSA9IGJhc2U2NFVSTERlY29kZSgiQkVBeGFVTW8xczh0ak9SeEpm
blNTdldoWWI0dTUxa2cxaFdUMnNfOWdwVjdaeGFyMXBGXzJCUThBbmN1QWRTMkJvTGhONHFheHpC
eTJDd0hFOEJCeldnIl9zKS52YWx1ZSgpOworICAgIGlmICh2YXBpZFB1YmxpY0tleSA9PSBhbHdh
eXNSZWplY3RlZEtleSkgeworICAgICAgICBoYW5kbGVyKHsgfSwgW05TRXJyb3IgZXJyb3JXaXRo
RG9tYWluOkAiV2ViUHVzaCIgY29kZTotMSB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGhhbmRsZXIoQCJodHRwczovL3dlYmtpdC5vcmcvcHVzaCIsIG5pbCk7
CiB9CiAKIHZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6dW5zdWJzY3JpYmUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiwgVW5zdWJzY3JpYmVIYW5kbGVyJiYgaGFu
ZGxlcikKIHsKLSAgICBoYW5kbGVyKHsgfSwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29j
b2FFcnJvckRvbWFpbiBjb2RlOk5TRmVhdHVyZVVuc3VwcG9ydGVkRXJyb3IgdXNlckluZm86bmls
XSk7CisgICAgaGFuZGxlcih0cnVlLCBuaWwpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBNb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uOjplbmFibGVkVG9waWNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVz
aFNlcnZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZTQxNWUwMDhkZDYzMDUxMDU4MjRmOGNmYjAyNjk1YWZj
MzIzZmViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2Vy
dmljZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIlB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYlB1c2hNZXNzYWdl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FeGNlcHRpb25EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QdXNoRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hTdWJzY3JpcHRpb25EYXRh
Lmg+CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
Lmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYlB1c2hEIHsK
KworY2xhc3MgR2V0U3Vic2NyaXB0aW9uUmVxdWVzdDsKK2NsYXNzIFB1c2hTZXJ2aWNlUmVxdWVz
dDsKK2NsYXNzIFN1YnNjcmliZVJlcXVlc3Q7CitjbGFzcyBVbnN1YnNjcmliZVJlcXVlc3Q7CisK
K2NsYXNzIFB1c2hTZXJ2aWNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICB1c2luZyBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYp
PjsKKworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNl
cnZpY2VOYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCwgSW5jb21pbmdQdXNoTWVzc2Fn
ZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNl
cnZpY2U+JiYpPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVNb2NrU2VydmljZShJbmNvbWlu
Z1B1c2hNZXNzYWdlSGFuZGxlciYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVl
X3B0cjxQdXNoU2VydmljZT4mJik+JiYpOworICAgIH5QdXNoU2VydmljZSgpOworCisgICAgUHVz
aFNlcnZpY2VDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uOyB9
CisgICAgV2ViQ29yZTo6UHVzaERhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJh
c2U7IH0KKworICAgIHZvaWQgZ2V0U3Vic2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiwg
V2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJik7CisgICAgdm9pZCBzdWJzY3JpYmUoY29uc3Qg
U3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRp
b25EYXRhPiYpPiYmKTsKKyAgICB2b2lkIHVuc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVuZGxl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlv
bklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwg
V2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJik7CisKKyAgICB2b2lkIGRpZENvbXBsZXRlR2V0
U3Vic2NyaXB0aW9uUmVxdWVzdChHZXRTdWJzY3JpcHRpb25SZXF1ZXN0Jik7CisgICAgdm9pZCBk
aWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3QoU3Vic2NyaWJlUmVxdWVzdCYpOworICAgIHZvaWQg
ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QoVW5zdWJzY3JpYmVSZXF1ZXN0Jik7CisKKyAg
ICB2b2lkIGRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFy
eSAqdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IFtdIHsgfSk7CisKK3By
aXZhdGU6CisgICAgUHVzaFNlcnZpY2UoVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4m
JiwgVW5pcXVlUmVmPFdlYkNvcmU6OlB1c2hEYXRhYmFzZT4mJiwgSW5jb21pbmdQdXNoTWVzc2Fn
ZUhhbmRsZXImJik7CisKKyAgICB1c2luZyBQdXNoU2VydmljZVJlcXVlc3RNYXAgPSBIYXNoTWFw
PHN0ZDo6dHVwbGU8U3RyaW5nLCBTdHJpbmc+LCBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNl
cnZpY2VSZXF1ZXN0Pj4+OworICAgIHZvaWQgZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChQdXNo
U2VydmljZVJlcXVlc3RNYXAmLCBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0PiYm
KTsKKyAgICB2b2lkIGZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVz
dE1hcCYsIFB1c2hTZXJ2aWNlUmVxdWVzdCYpOworCisgICAgVW5pcXVlUmVmPFB1c2hTZXJ2aWNl
Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpQdXNoRGF0
YWJhc2U+IG1fZGF0YWJhc2U7CisKKyAgICBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciBtX2lu
Y29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyOworCisgICAgUHVzaFNlcnZpY2VSZXF1ZXN0TWFwIG1f
Z2V0U3Vic2NyaXB0aW9uUmVxdWVzdHM7CisgICAgUHVzaFNlcnZpY2VSZXF1ZXN0TWFwIG1fc3Vi
c2NyaWJlUmVxdWVzdHM7CisgICAgUHVzaFNlcnZpY2VSZXF1ZXN0TWFwIG1fdW5zdWJzY3JpYmVS
ZXF1ZXN0czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYlB1c2hECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9QdXNoU2VydmljZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTdkOTExZjgwNDM4MGI4ZjBjNzQwMDM1Nzhm
YjU4NDE3YmJjZDJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Q
dXNoU2VydmljZS5tbQpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiUHVzaFNlcnZpY2UuaCIKKworI2ltcG9ydCAiQXBwbGVQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaCIKKyNpbXBvcnQgIk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIK
KyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgor
I2ltcG9ydCA8V2ViQ29yZS9QdXNoTWVzc2FnZUNyeXB0by5oPgorI2ltcG9ydCA8V2ViQ29yZS9T
ZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8d3RmL09TT2JqZWN0UHRyLmg+CisjaW1wb3J0IDx3
dGYvV29ya1F1ZXVlLmg+CisjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KKyNpbXBv
cnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJQdXNoRCB7CisKK3N0YXRpYyB2b2lk
IHVwZGF0ZVRvcGljTGlzdHMoUHVzaFNlcnZpY2VDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBQdXNo
RGF0YWJhc2UmIGRhdGFiYXNlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+IGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGRhdGFiYXNlLmdldFRvcGljc0J5V2FrZVN0YXRlKFsmY29ubmVjdGlv
biwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYm
IHRvcGljTWFwKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gRklYTUU6IG1vdmUgdG9waWNzIHRvIGln
bm9yZWQgbGlzdCBiYXNlZCBvbiB1c2VyIHByZWZlcmVuY2VzLgorICAgICAgICBQdXNoU2Vydmlj
ZUNvbm5lY3Rpb246OlRvcGljTGlzdHMgdG9waWNMaXN0czsKKworICAgICAgICBpZiAoYXV0byBp
dCA9IHRvcGljTWFwLmZpbmQoUHVzaFdha2VTdGF0ZTo6V2FraW5nKTsgaXQgIT0gdG9waWNNYXAu
ZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAodG9waWNMaXN0cy5lbmFibGVkVG9waWNzLCBp
dC0+dmFsdWUpOworICAgICAgICBpZiAoYXV0byBpdCA9IHRvcGljTWFwLmZpbmQoUHVzaFdha2VT
dGF0ZTo6T3Bwb3J0dW5pc3RpYyk7IGl0ICE9IHRvcGljTWFwLmVuZCgpKQorICAgICAgICAgICAg
c3RkOjpzd2FwKHRvcGljTGlzdHMub3Bwb3J0dW5pc3RpY1RvcGljcywgaXQtPnZhbHVlKTsKKyAg
ICAgICAgaWYgKGF1dG8gaXQgPSB0b3BpY01hcC5maW5kKFB1c2hXYWtlU3RhdGU6Ok5vbldha2lu
Zyk7IGl0ICE9IHRvcGljTWFwLmVuZCgpKQorICAgICAgICAgICAgc3RkOjpzd2FwKHRvcGljTGlz
dHMubm9uV2FraW5nVG9waWNzLCBpdC0+dmFsdWUpOworCisgICAgICAgIGNvbm5lY3Rpb24uc2V0
VG9waWNMaXN0cyhXVEZNb3ZlKHRvcGljTGlzdHMpKTsKKworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgIH0pOworfQorCisjaWYgSEFWRShBUFBMRV9QVVNIX1NFUlZJQ0VfVVJMX1RP
S0VOX1NVUFBPUlQpCisKK3ZvaWQgUHVzaFNlcnZpY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGlu
Y29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCwgSW5jb21p
bmdQdXNoTWVzc2FnZUhhbmRsZXImJiBtZXNzYWdlSGFuZGxlciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxlcikK
K3sKKyAgICBhdXRvIHRyYW5zYWN0aW9uID0gYWRvcHRPU09iamVjdChvc190cmFuc2FjdGlvbl9j
cmVhdGUoImNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucHVzaC1zZXJ2aWNlLWluaXQiKSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24gQVNBUCBzbyB0aGF0IHdlIGJvb3RzdHJhcF9j
aGVja19pbiB0byB0aGUgc2VydmljZSBpbiBhIHRpbWVseSBtYW5uZXIuCisgICAgYXV0byBjb25u
ZWN0aW9uID0gbWFrZVVuaXF1ZVJlZjxBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4oaW5jb21p
bmdQdXNoU2VydmljZU5hbWUpOworCisgICAgUHVzaERhdGFiYXNlOjpjcmVhdGUoZGF0YWJhc2VQ
YXRoLCBbdHJhbnNhY3Rpb24gPSBXVEZNb3ZlKHRyYW5zYWN0aW9uKSwgY29ubmVjdGlvbiA9IFdU
Rk1vdmUoY29ubmVjdGlvbiksIG1lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShtZXNzYWdlSGFuZGxl
ciksIGNyZWF0aW9uSGFuZGxlciA9IFdURk1vdmUoY3JlYXRpb25IYW5kbGVyKV0oYXV0byYmIGRh
dGFiYXNlUmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVJlc3VsdCkgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1c2ggc2VydmljZSBpbml0aWFsaXphdGlv
biBmYWlsZWQgd2l0aCBkYXRhYmFzZSBlcnJvciIpOworICAgICAgICAgICAgY3JlYXRpb25IYW5k
bGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4oKSk7CisgICAgICAgICAgICB0cmFuc2Fj
dGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIGRhdGFiYXNlID0gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1v
dmUoZGF0YWJhc2VSZXN1bHQpKTsKKyAgICAgICAgVW5pcXVlUmVmPFB1c2hTZXJ2aWNlPiBzZXJ2
aWNlKCpuZXcgUHVzaFNlcnZpY2UoV1RGTW92ZShjb25uZWN0aW9uKSwgV1RGTW92ZShkYXRhYmFz
ZSksIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpKSk7CisKKyAgICAgICAgYXV0byYgY29ubmVjdGlv
blJlZiA9IHNlcnZpY2UtPmNvbm5lY3Rpb24oKTsKKyAgICAgICAgYXV0byYgZGF0YWJhc2VSZWYg
PSBzZXJ2aWNlLT5kYXRhYmFzZSgpOworCisgICAgICAgIC8vIE9ubHkgcHJvdmlkZSB0aGUgc2Vy
dmljZSBvYmplY3QgYmFjayB0byB0aGUgY2FsbGVyIGFmdGVyIHdlJ3ZlIHN5bmNlZCB0aGUgdG9w
aWMgbGlzdHMgaW4KKyAgICAgICAgLy8gdGhlIGRhdGFiYXNlIHdpdGggdGhlIFB1c2hTZXJ2aWNl
Q29ubmVjdGlvbi9BUFNDb25uZWN0aW9uLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3b24ndAorICAg
ICAgICAvLyBzZXJ2aWNlIGFueSBjYWxscyB0byBzdWJzY3JpYmUvdW5zdWJzY3JpYmUvZXRjLiB1
bnRpbCBhZnRlciB0aGUgdG9waWMgbGlzdHMgYXJlIHVwIHRvCisgICAgICAgIC8vIGRhdGUsIHdo
aWNoIEFQU0Nvbm5lY3Rpb24gY2FyZXMgYWJvdXQuCisgICAgICAgIHVwZGF0ZVRvcGljTGlzdHMo
Y29ubmVjdGlvblJlZiwgZGF0YWJhc2VSZWYsIFt0cmFuc2FjdGlvbiA9IFdURk1vdmUodHJhbnNh
Y3Rpb24pLCBzZXJ2aWNlID0gV1RGTW92ZShzZXJ2aWNlKSwgY3JlYXRpb25IYW5kbGVyID0gV1RG
TW92ZShjcmVhdGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgY3JlYXRpb25I
YW5kbGVyKHNlcnZpY2UubW92ZVRvVW5pcXVlUHRyKCkpOworICAgICAgICAgICAgdHJhbnNhY3Rp
b24gPSBudWxscHRyOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworI2Vsc2UKKwordm9pZCBQ
dXNoU2VydmljZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIEluY29taW5n
UHVzaE1lc3NhZ2VIYW5kbGVyJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVf
cHRyPFB1c2hTZXJ2aWNlPiYmKT4mJiBjcmVhdGlvbkhhbmRsZXIpCit7CisgICAgY3JlYXRpb25I
YW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4oKSk7Cit9CisKKyNlbmRpZiAvLyBI
QVZFKEFQUExFX1BVU0hfU0VSVklDRV9VUkxfVE9LRU5fU1VQUE9SVCkKKwordm9pZCBQdXNoU2Vy
dmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UoSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiBtZXNz
YWdlSGFuZGxlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNl
cnZpY2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxlcikKK3sKKyAgICBQdXNoRGF0YWJhc2U6OmNyZWF0
ZUluTWVtb3J5KFttZXNzYWdlSGFuZGxlciA9IFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBjcmVh
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKGF1dG8mJiBkYXRhYmFzZVJl
c3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghZGF0YWJhc2VSZXN1bHQpIHsKKyAgICAgICAg
ICAgIGNyZWF0aW9uSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBjb25uZWN0aW9uID0g
bWFrZVVuaXF1ZVJlZjxNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uPigpOworICAgICAgICBhdXRv
IGRhdGFiYXNlID0gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1vdmUoZGF0
YWJhc2VSZXN1bHQpKTsKKyAgICAgICAgY3JlYXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQ
dXNoU2VydmljZT4obmV3IFB1c2hTZXJ2aWNlKFdURk1vdmUoY29ubmVjdGlvbiksIFdURk1vdmUo
ZGF0YWJhc2UpLCBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSkpKTsKKyAgICB9KTsKK30KKworUHVz
aFNlcnZpY2U6OlB1c2hTZXJ2aWNlKFVuaXF1ZVJlZjxQdXNoU2VydmljZUNvbm5lY3Rpb24+JiYg
cHVzaFNlcnZpY2VDb25uZWN0aW9uLCBVbmlxdWVSZWY8UHVzaERhdGFiYXNlPiYmIHB1c2hEYXRh
YmFzZSwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiBpbmNvbWluZ1B1c2hNZXNzYWdlSGFu
ZGxlcikKKyAgICA6IG1fY29ubmVjdGlvbihXVEZNb3ZlKHB1c2hTZXJ2aWNlQ29ubmVjdGlvbikp
CisgICAgLCBtX2RhdGFiYXNlKFdURk1vdmUocHVzaERhdGFiYXNlKSkKKyAgICAsIG1faW5jb21p
bmdQdXNoTWVzc2FnZUhhbmRsZXIoV1RGTW92ZShpbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcikp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcik7CisK
KyAgICBtX2Nvbm5lY3Rpb24tPnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKFt0aGlzXShO
U1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSAqdXNlckluZm8pIHsKKyAgICAgICAgZGlkUmVj
ZWl2ZVB1c2hNZXNzYWdlKHRvcGljLCB1c2VySW5mbyk7CisgICAgfSk7Cit9CisKK1B1c2hTZXJ2
aWNlOjp+UHVzaFNlcnZpY2UoKSA9IGRlZmF1bHQ7CisKK3N0YXRpYyBQdXNoU3Vic2NyaXB0aW9u
RGF0YSBtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoUHVzaFJlY29yZCYmIHJlY29yZCkK
K3sKKyAgICByZXR1cm4gUHVzaFN1YnNjcmlwdGlvbkRhdGEgeworICAgICAgICByZWNvcmQuaWRl
bnRpZmllciwKKyAgICAgICAgV1RGTW92ZShyZWNvcmQuZW5kcG9pbnQpLAorICAgICAgICBXVEZN
b3ZlKHJlY29yZC5leHBpcmF0aW9uVGltZSksCisgICAgICAgIFdURk1vdmUocmVjb3JkLnNlcnZl
clZBUElEUHVibGljS2V5KSwKKyAgICAgICAgV1RGTW92ZShyZWNvcmQuY2xpZW50UHVibGljS2V5
KSwKKyAgICAgICAgV1RGTW92ZShyZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkKKyAgICB9OworfQor
CitzdGF0aWMgU3RyaW5nIG1ha2VQdXNoVG9waWMoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlKQoreworICAgIHJldHVybiBidW5kbGVJZGVudGlmaWVy
ICsgIiAiICsgc2NvcGU7Cit9CisKK2NsYXNzIFB1c2hTZXJ2aWNlUmVxdWVzdCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UHVzaFNlcnZpY2VS
ZXF1ZXN0KCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBBU0NJSUxpdGVyYWwgZGVzY3JpcHRp
b24oKSBjb25zdCA9IDA7CisKKyAgICBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIoKSB7
IHJldHVybiBtX2J1bmRsZUlkZW50aWZpZXI7IH0KKyAgICBjb25zdCBTdHJpbmcmIHNjb3BlKCkg
eyByZXR1cm4gbV9zY29wZTsgfTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKKwor
cHJvdGVjdGVkOgorICAgIFB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwg
Y29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlKQorICAg
ICAgICA6IG1fc2VydmljZShzZXJ2aWNlKQorICAgICAgICAsIG1fY29ubmVjdGlvbihzZXJ2aWNl
LmNvbm5lY3Rpb24oKSkKKyAgICAgICAgLCBtX2RhdGFiYXNlKHNlcnZpY2UuZGF0YWJhc2UoKSkK
KyAgICAgICAgLCBtX2J1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllcikKKyAgICAgICAg
LCBtX3Njb3BlKHNjb3BlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
KCkgPSAwOworCisgICAgUHVzaFNlcnZpY2UmIG1fc2VydmljZTsKKyAgICBQdXNoU2VydmljZUNv
bm5lY3Rpb24mIG1fY29ubmVjdGlvbjsKKyAgICBQdXNoRGF0YWJhc2UmIG1fZGF0YWJhc2U7Cisg
ICAgU3RyaW5nIG1fYnVuZGxlSWRlbnRpZmllcjsKKyAgICBTdHJpbmcgbV9zY29wZTsKKyAgICBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFB1c2hTZXJ2aWNlUmVxdWVzdCYpPiBtX2NvbXBsZXRpb25I
YW5kbGVyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZT4KK2NsYXNzIFB1c2hT
ZXJ2aWNlUmVxdWVzdEltcGwgOiBwdWJsaWMgUHVzaFNlcnZpY2VSZXF1ZXN0IHsKK3B1YmxpYzoK
KyAgICB2b2lkIHN0YXJ0KCkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX2J1bmRsZUlkZW50
aWZpZXIuaXNFbXB0eSgpIHx8IG1fc2NvcGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZWpl
Y3QoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkFib3J0RXJyb3IsICJJbnZhbGlk
IHNlbmRlciJfcyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IFN0cmluZyB0cmFuc2FjdGlvbkRlc2NyaXB0aW9uID0gU3RyaW5nKCJjb20uYXBwbGUud2Via2l0
LndlYnB1c2hkOiJfcykgKyBkZXNjcmlwdGlvbigpICsgIjoiX3MgKyBtX2J1bmRsZUlkZW50aWZp
ZXIgKyAiOiJfcyArIG1fc2NvcGU7CisgICAgICAgIG1fdHJhbnNhY3Rpb24gPSBhZG9wdE9TT2Jq
ZWN0KG9zX3RyYW5zYWN0aW9uX2NyZWF0ZSh0cmFuc2FjdGlvbkRlc2NyaXB0aW9uLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICAgICAgc3RhcnRJbnRlcm5hbCgpOworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIHVzaW5nIFJlc3VsdEhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4
cGVjdGVkPFJlc3VsdFR5cGUsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+OworCisgICAgUHVz
aFNlcnZpY2VSZXF1ZXN0SW1wbChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBi
dW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBSZXN1bHRIYW5kbGVyJiYgcmVz
dWx0SGFuZGxlcikKKyAgICAgICAgOiBQdXNoU2VydmljZVJlcXVlc3Qoc2VydmljZSwgYnVuZGxl
SWRlbnRpZmllciwgc2NvcGUpCisgICAgICAgICwgbV9yZXN1bHRIYW5kbGVyKFdURk1vdmUocmVz
dWx0SGFuZGxlcikpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5QdXNoU2VydmljZVJlcXVl
c3RJbXBsKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0SW50ZXJuYWwoKSA9
IDA7CisKKyAgICB2b2lkIGZ1bGZpbGwoUmVzdWx0VHlwZSByZXN1bHQpCisgICAgeworICAgICAg
ICBtX3Jlc3VsdEhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgZmluaXNoKCk7Cisg
ICAgfQorCisgICAgdm9pZCByZWplY3QoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYmIGRhdGEpCisg
ICAgeworICAgICAgICBtX3Jlc3VsdEhhbmRsZXIobWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShkYXRh
KSkpOworICAgICAgICBmaW5pc2goKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdWx0SGFu
ZGxlciBtX3Jlc3VsdEhhbmRsZXI7CisgICAgT1NPYmplY3RQdHI8b3NfdHJhbnNhY3Rpb25fdD4g
bV90cmFuc2FjdGlvbjsKK307CisKK2NsYXNzIEdldFN1YnNjcmlwdGlvblJlcXVlc3QgOiBwdWJs
aWMgUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDxzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJz
Y3JpcHRpb25EYXRhPj4geworcHVibGljOgorICAgIEdldFN1YnNjcmlwdGlvblJlcXVlc3QoUHVz
aFNlcnZpY2UmLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
c2NvcGUsIFJlc3VsdEhhbmRsZXImJik7CisgICAgdmlydHVhbCB+R2V0U3Vic2NyaXB0aW9uUmVx
dWVzdCgpID0gZGVmYXVsdDsKKworcHJvdGVjdGVkOgorICAgIEFTQ0lJTGl0ZXJhbCBkZXNjcmlw
dGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJHZXRTdWJzY3JpcHRpb25SZXF1ZXN0Il9zOyB9
CisgICAgdm9pZCBzdGFydEludGVybmFsKCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5h
bCB7IG1fc2VydmljZS5kaWRDb21wbGV0ZUdldFN1YnNjcmlwdGlvblJlcXVlc3QoKnRoaXMpOyB9
Cit9OworCitHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KFB1
c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc2NvcGUsIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQorICAgIDogUHVz
aFNlcnZpY2VSZXF1ZXN0SW1wbChzZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RG
TW92ZShyZXN1bHRIYW5kbGVyKSkKK3sKK30KKworLy8gSW1wbGVtZW50cyB0aGUgd2VicHVzaGQg
c2lkZSBvZiBQdXNoTWFuYWdlci5nZXRTdWJzY3JpcHRpb24uCit2b2lkIEdldFN1YnNjcmlwdGlv
blJlcXVlc3Q6OnN0YXJ0SW50ZXJuYWwoKQoreworICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlC
dW5kbGVJZGVudGlmaWVyQW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhp
c10oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAg
ICAgICAgICBmdWxmaWxsKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRh
dGE+IHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmdWxm
aWxsKG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChXVEZNb3ZlKCpyZXN1bHQpKSk7Cisg
ICAgfSk7Cit9CisKK2NsYXNzIFN1YnNjcmliZVJlcXVlc3QgOiBwdWJsaWMgUHVzaFNlcnZpY2VS
ZXF1ZXN0SW1wbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4geworcHVibGljOgorICAg
IFN1YnNjcmliZVJlcXVlc3QoUHVzaFNlcnZpY2UmLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQ
dWJsaWNLZXksIFJlc3VsdEhhbmRsZXImJik7CisgICAgdmlydHVhbCB+U3Vic2NyaWJlUmVxdWVz
dCgpID0gZGVmYXVsdDsKKworcHJvdGVjdGVkOgorICAgIEFTQ0lJTGl0ZXJhbCBkZXNjcmlwdGlv
bigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTdWJzY3JpYmVSZXF1ZXN0Il9zOyB9CisgICAgdm9p
ZCBzdGFydEludGVybmFsKCkgZmluYWwgeyBzdGFydEltcGwoSXNSZXRyeTo6Tm8pOyB9CisgICAg
dm9pZCBmaW5pc2goKSBmaW5hbCB7IG1fc2VydmljZS5kaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVl
c3QoKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBJc1JldHJ5IHsgTm8sIFll
cyB9OworICAgIHZvaWQgc3RhcnRJbXBsKElzUmV0cnkpOworICAgIHZvaWQgYXR0ZW1wdFRvUmVj
b3ZlckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFN0cmluZyYmKTsKKyAgICBWZWN0b3I8
dWludDhfdD4gbV92YXBpZFB1YmxpY0tleTsKK307CisKK1N1YnNjcmliZVJlcXVlc3Q6OlN1YnNj
cmliZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBp
ZFB1YmxpY0tleSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRsZXIpCisgICAgOiBQdXNoU2Vy
dmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3Zl
KHJlc3VsdEhhbmRsZXIpKQorICAgICwgbV92YXBpZFB1YmxpY0tleSh2YXBpZFB1YmxpY0tleSkK
K3sKK30KKworLy8gSW1wbGVtZW50cyB0aGUgd2VicHVzaGQgc2lkZSBvZiBQdXNoTWFuYWdlci5z
dWJzY3JpYmUoKS4KK3ZvaWQgU3Vic2NyaWJlUmVxdWVzdDo6c3RhcnRJbXBsKElzUmV0cnkgaXNS
ZXRyeSkKK3sKKyAgICBtX2RhdGFiYXNlLmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNj
b3BlKG1fYnVuZGxlSWRlbnRpZmllciwgbV9zY29wZSwgW3RoaXMsIGlzUmV0cnldKGF1dG8mJiBy
ZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBpZiAo
bV92YXBpZFB1YmxpY0tleSAhPSByZXN1bHQtPnNlcnZlclZBUElEUHVibGljS2V5KQorICAgICAg
ICAgICAgICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6SW52YWxp
ZFN0YXRlRXJyb3IsICJQcm92aWRlZCBhcHBsaWNhdGlvblNlcnZlcktleSBkb2VzIG5vdCBtYXRj
aCB0aGUga2V5IGluIHRoZSBleGlzdGluZyBzdWJzY3JpcHRpb24uIl9zIH0pOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGZ1bGZpbGwobWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9t
UmVjb3JkKFdURk1vdmUoKnJlc3VsdCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gdG9waWMgPSBtYWtlUHVzaFRvcGljKG1fYnVuZGxlSWRlbnRpZmll
ciwgbV9zY29wZSk7CisgICAgICAgIG1fY29ubmVjdGlvbi5zdWJzY3JpYmUodG9waWMsIG1fdmFw
aWRQdWJsaWNLZXksIFt0aGlzLCBpc1JldHJ5LCB0b3BpY10oTlNTdHJpbmcgKmVuZHBvaW50LCBO
U0Vycm9yICplcnJvcikgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogdXNlIHBvaW50ZXIgY29tcGFyaXNvbiBvbmNlIEFQU1VSTFRv
a2VuRXJyb3JEb21haW4gaXMgZXh0ZXJuZWQuCisgICAgICAgICAgICAgICAgaWYgKGlzUmV0cnkg
PT0gSXNSZXRyeTo6Tm8gJiYgW2Vycm9yLmRvbWFpbiBpc0VxdWFsVG9TdHJpbmc6QCJBUFNVUkxU
b2tlbkVycm9yRG9tYWluIl0gJiYgZXJyb3IuY29kZSA9PSBBUFNVUkxUb2tlbkVycm9yQ29kZVRv
cGljQWxyZWFkeUluRmlsdGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRUb1JlY292
ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcihXVEZNb3ZlKHRvcGljKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaE1hbmFnZXIuc3Vic2NyaWJlKGJ1bmRsZUlEOiAle3B1
YmxpY31zLCBzY29wZTogJXtzZW5zaXRpdmV9cykgZmFpbGVkIHdpdGggZG9tYWluOiAle3B1Ymxp
Y31zIGNvZGU6ICVsbGQpIiwgbV9idW5kbGVJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG1fc2Nv
cGUudXRmOCgpLmRhdGEoKSwgZXJyb3IuZG9tYWluLlVURjhTdHJpbmcsIHN0YXRpY19jYXN0PGlu
dDY0X3Q+KGVycm9yLmNvZGUpKTsKKyAgICAgICAgICAgICAgICByZWplY3QoV2ViQ29yZTo6RXhj
ZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkFib3J0RXJyb3IsICJGYWlsZWQgZHVlIHRvIGludGVybmFs
IHNlcnZpY2UgZXJyb3IiX3MgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBhdXRvIGNsaWVudEtleXMgPSBtX3NlcnZpY2UuY29ubmVjdGlv
bigpLmdlbmVyYXRlQ2xpZW50S2V5cygpOworICAgICAgICAgICAgUHVzaFJlY29yZCByZWNvcmQ7
CisgICAgICAgICAgICByZWNvcmQuYnVuZGxlSUQgPSBtX2J1bmRsZUlkZW50aWZpZXI7CisgICAg
ICAgICAgICByZWNvcmQuc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJv
bVN0cmluZyhtX3Njb3BlKS0+ZGF0YSgpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZWNvcmQu
c2NvcGUgPSBtX3Njb3BlOworICAgICAgICAgICAgcmVjb3JkLmVuZHBvaW50ID0gZW5kcG9pbnQ7
CisgICAgICAgICAgICByZWNvcmQudG9waWMgPSBXVEZNb3ZlKHRvcGljKTsKKyAgICAgICAgICAg
IHJlY29yZC5zZXJ2ZXJWQVBJRFB1YmxpY0tleSA9IG1fdmFwaWRQdWJsaWNLZXk7CisgICAgICAg
ICAgICByZWNvcmQuY2xpZW50UHVibGljS2V5ID0gV1RGTW92ZShjbGllbnRLZXlzLmNsaWVudFAy
NTZESEtleVBhaXIucHVibGljS2V5KTsKKyAgICAgICAgICAgIHJlY29yZC5jbGllbnRQcml2YXRl
S2V5ID0gV1RGTW92ZShjbGllbnRLZXlzLmNsaWVudFAyNTZESEtleVBhaXIucHJpdmF0ZUtleSk7
CisgICAgICAgICAgICByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCA9IFdURk1vdmUoY2xpZW50S2V5
cy5zaGFyZWRBdXRoU2VjcmV0KTsKKworICAgICAgICAgICAgbV9kYXRhYmFzZS5pbnNlcnRSZWNv
cmQocmVjb3JkLCBbdGhpc10oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwg
IlB1c2hNYW5hZ2VyLnN1YnNjcmliZShidW5kbGVJRDogJXtwdWJsaWN9cywgc2NvcGU6ICV7c2Vu
c2l0aXZlfXMpIGZhaWxlZCB3aXRoIGRhdGFiYXNlIGVycm9yIiwgbV9idW5kbGVJZGVudGlmaWVy
LnV0ZjgoKS5kYXRhKCksIG1fc2NvcGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJvciwg
IkZhaWxlZCBkdWUgdG8gaW50ZXJuYWwgZGF0YWJhc2UgZXJyb3IiX3MgfSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogc3VwcG9ydCBwYXJ0aWFsIHRvcGljIGxpc3QgdXBkYXRlcy4KKyAgICAgICAgICAg
ICAgICB1cGRhdGVUb3BpY0xpc3RzKG1fY29ubmVjdGlvbiwgbV9kYXRhYmFzZSwgW3RoaXMsIHJl
Y29yZCA9IFdURk1vdmUoKnJlc3VsdCldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAg
IGZ1bGZpbGwobWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKFdURk1vdmUocmVjb3JkKSkp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCisvLyBUcmllcyB0byByZWNvdmVyIGZyb20gYSB0b3BpYyBiZWluZyBtb3ZlZCB0
byB0aGUgZ2xvYmFsIHBhdXNlZCBmaWx0ZXIgKHJkYXI6Ly84ODEzOTMzMCkuCit2b2lkIFN1YnNj
cmliZVJlcXVlc3Q6OmF0dGVtcHRUb1JlY292ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJv
cihTdHJpbmcmJiB0b3BpYykKK3sKKyAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbdGhp
cywgdG9waWMgPSBXVEZNb3ZlKHRvcGljKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gVGhpcyB0
YWtlcyBvd25lcnNoaXAgb2YgdGhlIHBhdXNlZCB0b3BpYyBhbmQgdGVsbHMgYXBzZCB0byBmb3Jn
ZXQgYWJvdXQgdGhlIHRvcGljLgorICAgICAgICBhdXRvIG9yaWdpbmFsVG9waWNzID0gbV9jb25u
ZWN0aW9uLmlnbm9yZWRUb3BpY3MoKTsKKyAgICAgICAgYXV0byBhdWdtZW50ZWRUb3BpY3MgPSBv
cmlnaW5hbFRvcGljczsKKyAgICAgICAgYXVnbWVudGVkVG9waWNzLmFwcGVuZCh0b3BpYyk7Cisg
ICAgICAgIG1fY29ubmVjdGlvbi5zZXRJZ25vcmVkVG9waWNzKFdURk1vdmUoYXVnbWVudGVkVG9w
aWNzKSk7CisgICAgICAgIG1fY29ubmVjdGlvbi5zZXRJZ25vcmVkVG9waWNzKFdURk1vdmUob3Jp
Z2luYWxUb3BpY3MpKTsKKworICAgICAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbdGhp
c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0YXJ0SW1wbChJc1JldHJ5OjpZZXMpOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKworY2xhc3MgVW5zdWJzY3JpYmVSZXF1ZXN0IDogcHVibGlj
IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGw8Ym9vbD4geworcHVibGljOgorICAgIFVuc3Vic2NyaWJl
UmVxdWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIFJlc3VsdEhhbmRs
ZXImJik7CisgICAgdmlydHVhbCB+VW5zdWJzY3JpYmVSZXF1ZXN0KCkgPSBkZWZhdWx0OworCitw
cm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIlVuc3Vic2NyaWJlUmVxdWVzdCJfczsgfQorICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgp
IGZpbmFsOworICAgIHZvaWQgZmluaXNoKCkgZmluYWwgeyBtX3NlcnZpY2UuZGlkQ29tcGxldGVV
bnN1YnNjcmliZVJlcXVlc3QoKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgUHVzaFN1YnNjcmlw
dGlvbklkZW50aWZpZXIgbV9zdWJzY3JpcHRpb25JZGVudGlmaWVyOworfTsKKworVW5zdWJzY3Jp
YmVSZXF1ZXN0OjpVbnN1YnNjcmliZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0
IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1YnNj
cmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgUmVzdWx0SGFuZGxlciYm
IHJlc3VsdEhhbmRsZXIpCisgICAgOiBQdXNoU2VydmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1
bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQorICAgICwgbV9z
dWJzY3JpcHRpb25JZGVudGlmaWVyKHN1YnNjcmlwdGlvbklkZW50aWZpZXIpCit7Cit9CisKKy8v
IEltcGxlbWVudHMgdGhlIHdlYnB1c2hkIHNpZGUgb2YgUHVzaFN1YnNjcmlwdGlvbi51bnN1YnNj
cmliZS4KK3ZvaWQgVW5zdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEludGVybmFsKCkKK3sKKyAgICBt
X2RhdGFiYXNlLmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKG1fYnVuZGxlSWRl
bnRpZmllciwgbV9zY29wZSwgW3RoaXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAg
ICBpZiAoIXJlc3VsdCB8fCBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXIgIT0gcmVzdWx0LT5pZGVu
dGlmaWVyKSB7CisgICAgICAgICAgICBmdWxmaWxsKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdG9waWMgPSBtYWtlUHVzaFRvcGljKG1fYnVu
ZGxlSWRlbnRpZmllciwgbV9zY29wZSk7CisgICAgICAgIG1fY29ubmVjdGlvbi51bnN1YnNjcmli
ZSh0b3BpYywgcmVzdWx0LT5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgW3RoaXNdKGJvb2wgdW5zdWJz
Y3JpYmVkLCBOU0Vycm9yICplcnJvcikgbXV0YWJsZSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgICAgICAgICAvLyBJZiB3ZSBmYWlsIHRvIHVuc3Vic2NyaWJlIGZyb20gYXBzZCwg
anVzdCBkcm9wIGEgbG9nLiBXZSBzdGlsbCB3YW50IHRvIGNvbnRpbnVlIGFuZCByZW1vdmUgdGhl
IHJlY29yZCBmcm9tIG91ciBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYSBzdGF0ZSBtaXNtYXRj
aCBiZXR3ZWVuIG91ciBkYXRhYmFzZSBhbmQgYXBzZCdzIGRhdGFiYXNlLgorICAgICAgICAgICAg
aWYgKCF1bnN1YnNjcmliZWQpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1
c2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAl
e3NlbnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkb21haW46ICV7cHVibGljfXMgY29kZTogJWxsZCki
LCBtX2J1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgp
LCBlcnJvci5kb21haW4uVVRGOFN0cmluZyA/OiAibm9uZSIsIHN0YXRpY19jYXN0PGludDY0X3Q+
KGVycm9yLmNvZGUpKTsKKyNlbHNlCisgICAgICAgICAgICBVTlVTRURfUEFSQU0odW5zdWJzY3Jp
YmVkKTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisjZW5kaWYKKworICAgICAg
ICAgICAgbV9kYXRhYmFzZS5yZW1vdmVSZWNvcmRCeUlkZW50aWZpZXIobV9zdWJzY3JpcHRpb25J
ZGVudGlmaWVyLCBbdGhpc10oYm9vbCByZW1vdmVkKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXJlbW92ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmlsbChmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogc3VwcG9ydCBwYXJ0aWFsIHRvcGljIGxpc3QgdXBkYXRlcy4KKyAg
ICAgICAgICAgICAgICB1cGRhdGVUb3BpY0xpc3RzKG1fY29ubmVjdGlvbiwgbV9kYXRhYmFzZSwg
W3RoaXNdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKKy8vIE9ubHkgYWxsb3cgb25lIHJlcXVlc3QgcGVyIChidW5kbGVJZGVudGlmaWVyLCBz
Y29wZSkgdG8gcHJvY2VlZCBhdCBvbmNlLiBGb3IgaW5zdGFuY2UsIGlmIGEgZ2l2ZW4KKy8vIHBh
Z2UgY2FsbHMgUHVzaE1hbmFnZXIuc3Vic2NyaWJlKCkgdHdpY2UgaW4gYSByb3csIHRoZSBzZWNv
bmQgc3Vic2NyaWJlIGNhbGwgd29uJ3Qgc3RhcnQgdW50aWwKKy8vIHRoZSBmaXJzdCBvbmUgY29t
cGxldGVzLgordm9pZCBQdXNoU2VydmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChQdXNo
U2VydmljZVJlcXVlc3RNYXAmIG1hcCwgc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlUmVxdWVz
dD4mJiByZXF1ZXN0KQoreworICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3R1cGxlKHJlcXVlc3Qt
PmJ1bmRsZUlkZW50aWZpZXIoKSwgcmVxdWVzdC0+c2NvcGUoKSk7CisgICAgYXV0byBhZGRSZXN1
bHQgPSBtYXAuZW5zdXJlKGtleSwgW10oKSB7CisgICAgICAgIHJldHVybiBEZXF1ZTxzdGQ6OnVu
aXF1ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0Pj4geyB9OworICAgIH0pOworCisgICAgYXV0byBh
ZGRlZFJlcXVlc3QgPSByZXF1ZXN0LmdldCgpOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKFdURk1vdmUocmVxdWVzdCkpOworCisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KQorICAgICAgICBhZGRlZFJlcXVlc3QtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZp
Y2U6OmZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYgbWFw
LCBQdXNoU2VydmljZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1h
a2VfdHVwbGUocmVxdWVzdC5idW5kbGVJZGVudGlmaWVyKCksIHJlcXVlc3Quc2NvcGUoKSk7Cisg
ICAgYXV0byByZXF1ZXN0UXVldWVJdCA9IG1hcC5maW5kKGtleSk7CisKKyAgICBSRUxFQVNFX0FT
U0VSVChyZXF1ZXN0UXVldWVJdCAhPSBtYXAuZW5kKCkpOworICAgIGF1dG8mIHJlcXVlc3RRdWV1
ZSA9IHJlcXVlc3RRdWV1ZUl0LT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXF1ZXN0UXVl
dWUuc2l6ZSgpID4gMCk7CisgICAgYXV0byBjdXJyZW50UmVxdWVzdCA9IHJlcXVlc3RRdWV1ZS50
YWtlRmlyc3QoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50UmVxdWVzdC5nZXQoKSA9PSAm
cmVxdWVzdCk7CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3QqIG5leHRSZXF1ZXN0ID0gbnVsbHB0
cjsKKyAgICBpZiAoIXJlcXVlc3RRdWV1ZS5zaXplKCkpCisgICAgICAgIG1hcC5yZW1vdmUocmVx
dWVzdFF1ZXVlSXQpOworICAgIGVsc2UKKyAgICAgICAgbmV4dFJlcXVlc3QgPSByZXF1ZXN0UXVl
dWUuZmlyc3QoKS5nZXQoKTsKKworICAgIC8vIEV2ZW4gaWYgdGhlcmUncyBubyBuZXh0IHJlcXVl
c3QgdG8gc3RhcnQsIGhvbGQgb24gdG8gY3VycmVudFJlcXVlc3QgdW50aWwgdGhlIG5leHQgdHVy
biBvZiB0aGUgcnVuIGxvb3Agc2luY2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBleGVjdXRpbmcg
dGhlIGZpbmlzaCgpIG1lbWJlciBmdW5jdGlvbiBvZiBjdXJyZW50UmVxdWVzdC4KKyAgICBXb3Jr
UXVldWU6Om1haW4oKS5kaXNwYXRjaChbY3VycmVudFJlcXVlc3QgPSBXVEZNb3ZlKGN1cnJlbnRS
ZXF1ZXN0KSwgbmV4dFJlcXVlc3RdIHsKKyAgICAgICAgaWYgKG5leHRSZXF1ZXN0KQorICAgICAg
ICAgICAgbmV4dFJlcXVlc3QtPnN0YXJ0KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZp
Y2U6OmdldFN1YnNjcmlwdGlvbihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8c3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4sIFdlYkNvcmU6OkV4Y2Vw
dGlvbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2
aWNlUmVxdWVzdChtX2dldFN1YnNjcmlwdGlvblJlcXVlc3RzLCBtYWtlVW5pcXVlPEdldFN1YnNj
cmlwdGlvblJlcXVlc3Q+KCp0aGlzLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVH
ZXRTdWJzY3JpcHRpb25SZXF1ZXN0KEdldFN1YnNjcmlwdGlvblJlcXVlc3QmIHJlcXVlc3QpCit7
CisgICAgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV9nZXRTdWJzY3JpcHRpb25SZXF1ZXN0
cywgcmVxdWVzdCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OnN1YnNjcmliZShjb25zdCBTdHJp
bmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhw
ZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2aWNlUmVx
dWVzdChtX3N1YnNjcmliZVJlcXVlc3RzLCBtYWtlVW5pcXVlPFN1YnNjcmliZVJlcXVlc3Q+KCp0
aGlzLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlU3Vi
c2NyaWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZpbmlzaGVk
UHVzaFNlcnZpY2VSZXF1ZXN0KG1fc3Vic2NyaWJlUmVxdWVzdHMsIHJlcXVlc3QpOworfQorCit2
b2lkIFB1c2hTZXJ2aWNlOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHN1YnNj
cmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8
Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1fdW5zdWJzY3JpYmVSZXF1ZXN0cywgbWFr
ZVVuaXF1ZTxVbnN1YnNjcmliZVJlcXVlc3Q+KCp0aGlzLCBidW5kbGVJZGVudGlmaWVyLCBzY29w
ZSwgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsK
K30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QoVW5z
dWJzY3JpYmVSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1
ZXN0KG1fdW5zdWJzY3JpYmVSZXF1ZXN0cywgcmVxdWVzdCk7Cit9CisKK2VudW0gY2xhc3MgQ29u
dGVudEVuY29kaW5nIHsKKyAgICBFbXB0eSwKKyAgICBBRVNHQ00sCisgICAgQUVTMTI4R0NNCit9
OworCitzdHJ1Y3QgUmF3UHVzaE1lc3NhZ2UgeworICAgIFN0cmluZyB0b3BpYzsKKyAgICBDb250
ZW50RW5jb2RpbmcgZW5jb2Rpbmc7CisKKyAgICAvLyBPbmx5IHNldCBpZiBlbmNvZGluZyBpcyBu
b3QgQ29udGVudEVuY29kaW5nOjpFbXB0eS4KKyAgICBWZWN0b3I8dWludDhfdD4gZW5jcnlwdGVk
UGF5bG9hZDsKKworICAgIC8vIE9ubHkgc2V0IGlmIGVuY29kaW5nIGlzIENvbnRlbnRFbmNvZGlu
Zzo6QUVTR0NNLgorICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJQdWJsaWNLZXk7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHNhbHQ7CisKK307CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFJhd1B1c2hN
ZXNzYWdlPiBtYWtlUmF3UHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkq
IHVzZXJJbmZvKQoreworICAgIFJhd1B1c2hNZXNzYWdlIG1lc3NhZ2U7CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgbWVzc2FnZS50b3BpYyA9IHRvcGljOworICAgICAgICBOU1N0
cmluZyAqY29udGVudEVuY29kaW5nID0gdXNlckluZm9bQCJjb250ZW50X2VuY29kaW5nIl07Cisg
ICAgICAgIE5TU3RyaW5nICpwYXlsb2FkQmFzZTY0ID0gdXNlckluZm9bQCJwYXlsb2FkIl07CisK
KyAgICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcubGVuZ3RoIHx8ICFwYXlsb2FkQmFzZTY0Lmxl
bmd0aCkgeworICAgICAgICAgICAgbWVzc2FnZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6
RW1wdHk7CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChbY29udGVudEVuY29kaW5nIGlzRXF1YWxUb1N0cmluZzpAImFlczEyOGdjbSJdKQorICAg
ICAgICAgICAgbWVzc2FnZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6QUVTMTI4R0NNOwor
ICAgICAgICBlbHNlIGlmIChbY29udGVudEVuY29kaW5nIGlzRXF1YWxUb1N0cmluZzpAImFlc2dj
bSJdKSB7CisgICAgICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVudEVuY29kaW5nOjpB
RVNHQ007CisKKyAgICAgICAgICAgIE5TU3RyaW5nICpzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwg
PSB1c2VySW5mb1tAImFzX3B1YmxpY2tleSJdOworICAgICAgICAgICAgTlNTdHJpbmcgKnNhbHRC
YXNlNjRVUkwgPSB1c2VySW5mb1tAImFzX3NhbHQiXTsKKyAgICAgICAgICAgIGlmICghc2VydmVy
UHVibGljS2V5QmFzZTY0VVJMIHx8ICFzYWx0QmFzZTY0VVJMKSB7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIGFlc2djbS1lbmNyeXB0ZWQgcHVzaCB3aXRob3V0
IHJlcXVpcmVkIHNlcnZlciBrZXkgYW5kIHNhbHQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHNlcnZlclB1
YmxpY0tleSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwpOworICAg
ICAgICAgICAgYXV0byBzYWx0ID0gYmFzZTY0VVJMRGVjb2RlKHNhbHRCYXNlNjRVUkwpOworICAg
ICAgICAgICAgaWYgKCFzZXJ2ZXJQdWJsaWNLZXkgfHwgIXNhbHQpIHsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgYWVzZ2NtLWVuY3J5cHRlZCBwdXNoIHdpdGgg
aW1wcm9wZXJseSBlbmNvZGVkIHNlcnZlciBrZXkgYW5kIHNhbHQiKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZXNz
YWdlLnNlcnZlclB1YmxpY0tleSA9IFdURk1vdmUoKnNlcnZlclB1YmxpY0tleSk7CisgICAgICAg
ICAgICBtZXNzYWdlLnNhbHQgPSBXVEZNb3ZlKCpzYWx0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBwdXNoIHdpdGggdW5rbm93biBj
b250ZW50IGVuY29kaW5nOiAle3B1YmxpY31zIiwgY29udGVudEVuY29kaW5nLlVURjhTdHJpbmcp
OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gcGF5bG9hZCA9IGJhc2U2NERlY29kZShwYXlsb2FkQmFzZTY0KTsKKyAgICAgICAgaWYg
KCFwYXlsb2FkKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgcHVz
aCB3aXRoIGltcHJvcGVybHkgZW5jb2RlZCBwYXlsb2FkIik7CisgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgICAgICB9CisgICAgICAgIG1lc3NhZ2UuZW5jcnlwdGVkUGF5bG9h
ZCA9IFdURk1vdmUoKnBheWxvYWQpOworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlOworfQor
Cit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRSZWNlaXZlUHVzaE1lc3NhZ2UoTlNTdHJpbmcqIHRvcGlj
LCBOU0RpY3Rpb25hcnkqIHVzZXJJbmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBtZXNzYWdlUmVzdWx0ID0gbWFrZVJhd1B1c2hN
ZXNzYWdlKHRvcGljLCB1c2VySW5mbyk7CisgICAgaWYgKCFtZXNzYWdlUmVzdWx0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2RhdGFiYXNlLT5nZXRSZWNvcmRCeVRvcGljKHRvcGljLCBbdGhp
cywgbWVzc2FnZSA9IFdURk1vdmUoKm1lc3NhZ2VSZXN1bHQpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgcmVjb3JkUmVzdWx0KSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKCFyZWNvcmRSZXN1bHQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9H
KFB1c2gsICJEcm9wcGluZyBpbmNvbWluZyBwdXNoIHNlbnQgdG8gdW5rbm93biB0b3BpYzogJXtz
ZW5zaXRpdmV9cyIsIG1lc3NhZ2UudG9waWMudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGF1dG8gcmVjb3JkID0gV1RGTW92ZSgqcmVjb3JkUmVzdWx0KTsKKworICAgICAgICBpZiAo
bWVzc2FnZS5lbmNvZGluZyA9PSBDb250ZW50RW5jb2Rpbmc6OkVtcHR5KSB7CisgICAgICAgICAg
ICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKHJlY29yZC5idW5kbGVJRCwgV2ViS2l0OjpX
ZWJQdXNoTWVzc2FnZSB7IHsgfSwgVVJMKFVSTCgpLCByZWNvcmQuc2NvcGUpIH0pOworICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIFB1c2hDcnlwdG86OkNsaWVudEtleXMgY2xpZW50S2V5cyB7CisgICAgICAg
ICAgICB7IFdURk1vdmUocmVjb3JkLmNsaWVudFB1YmxpY0tleSksIFdURk1vdmUocmVjb3JkLmNs
aWVudFByaXZhdGVLZXkpIH0sCisgICAgICAgICAgICBXVEZNb3ZlKHJlY29yZC5zaGFyZWRBdXRo
U2VjcmV0KQorICAgICAgICB9OworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4
X3Q+PiBkZWNyeXB0ZWRQYXlsb2FkOworICAgICAgICBpZiAobWVzc2FnZS5lbmNvZGluZyA9PSBD
b250ZW50RW5jb2Rpbmc6OkFFUzEyOEdDTSkKKyAgICAgICAgICAgIGRlY3J5cHRlZFBheWxvYWQg
PSBkZWNyeXB0QUVTMTI4R0NNUGF5bG9hZChjbGllbnRLZXlzLCBtZXNzYWdlLmVuY3J5cHRlZFBh
eWxvYWQpOworICAgICAgICBlbHNlIGlmIChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRFbmNv
ZGluZzo6QUVTR0NNKQorICAgICAgICAgICAgZGVjcnlwdGVkUGF5bG9hZCA9IGRlY3J5cHRBRVNH
Q01QYXlsb2FkKGNsaWVudEtleXMsIG1lc3NhZ2Uuc2VydmVyUHVibGljS2V5LCBtZXNzYWdlLnNh
bHQsIG1lc3NhZ2UuZW5jcnlwdGVkUGF5bG9hZCk7CisKKyAgICAgICAgaWYgKCFkZWNyeXB0ZWRQ
YXlsb2FkKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgaW5jb21p
bmcgcHVzaCBkdWUgdG8gZGVjcnlwdGlvbiBlcnJvciBmb3IgdG9waWMgJXtzZW5zaXRpdmV9cyIs
IG1lc3NhZ2UudG9waWMudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9pbmNv
bWluZ1B1c2hNZXNzYWdlSGFuZGxlcihyZWNvcmQuYnVuZGxlSUQsIFdlYktpdDo6V2ViUHVzaE1l
c3NhZ2UgeyBXVEZNb3ZlKCpkZWNyeXB0ZWRQYXlsb2FkKSwgVVJMKFVSTCgpLCByZWNvcmQuc2Nv
cGUpIH0pOworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYlB1c2hECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaAppbmRleCAyYzE0MTQ0YzYxYmIzZWZhZTRlZDMyOGUxNTIwZDNlY2Yw
ODMxN2VmLi4xOTgxNDNmNTY5N2NkMjhjNjkyOGQ0NTY4YzIxYzMyNTQ5MjBkMjBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hNZXNzYWdl
Q3J5cHRvLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC00Nyw2ICs0OCw4IEBA
IHB1YmxpYzoKICAgICBQdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAgICAgdmly
dHVhbCB+UHVzaFNlcnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwogCisgICAgdmlydHVhbCBX
ZWJDb3JlOjpQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIGdlbmVyYXRlQ2xpZW50S2V5cygpOworCiAg
ICAgdXNpbmcgU3Vic2NyaWJlSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoTlNTdHJp
bmcgKiwgTlNFcnJvciAqKT47CiAgICAgdmlydHVhbCB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJp
bmcmIHRvcGljLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBTdWJzY3Jp
YmVIYW5kbGVyJiYpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Q
dXNoU2VydmljZUNvbm5lY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbi5tbQppbmRleCA1MzQzMzI1ZWI1ZWEyMDNlOGRmNmZmODMwM2NiOWIwZmZj
ODEzMjFiLi45MmY4MTQyNzdhODM4MTUzMTY4OGIwZTQ4NTE4MmQ0M2Q4NWNjODY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtMjgs
OCArMjgsMTUgQEAKIAogI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgogCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKwogbmFtZXNwYWNlIFdlYlB1c2hEIHsKIAorUHVzaENyeXB0bzo6Q2xpZW50
S2V5cyBQdXNoU2VydmljZUNvbm5lY3Rpb246OmdlbmVyYXRlQ2xpZW50S2V5cygpCit7CisgICAg
cmV0dXJuIFB1c2hDcnlwdG86OkNsaWVudEtleXM6OmdlbmVyYXRlKCk7Cit9CisKIHZvaWQgUHVz
aFNlcnZpY2VDb25uZWN0aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNvbWlu
Z1B1c2hNZXNzYWdlSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgbV9pbmNvbWluZ1B1c2hNZXNz
YWdlSGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbi5oCmluZGV4IGFmMzE4NTdkYjg3MzdhOWI2NDM5NWZiMDAwNDc1MGE5NThlNTQ4ZDAu
LjAyODA4NGU1MmI0YTBkYmIzYzE0OWJlNmM5NzM2Zjc1NzVlNzg3YjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJQ
dXNoQ2xpZW50Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlB1c2hNZXNzYWdlRm9yVGVzdGluZy5o
IgorI2luY2x1ZGUgIlB1c2hTZXJ2aWNlLmgiCiAjaW5jbHVkZSAiV2ViUHVzaERhZW1vbkNvbm5l
Y3Rpb25Db25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiV2ViUHVzaERhZW1vbkNvbnN0YW50cy5o
IgogI2luY2x1ZGUgIldlYlB1c2hNZXNzYWdlLmgiCkBAIC02MSw2ICs2MiwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb25uZWN0aW9uQWRkZWQoeHBjX2Nvbm5lY3Rpb25fdCk7CiAgICAgdm9pZCBj
b25uZWN0aW9uUmVtb3ZlZCh4cGNfY29ubmVjdGlvbl90KTsKIAorICAgIHZvaWQgc3RhcnRNb2Nr
UHVzaFNlcnZpY2UoKTsKKyAgICB2b2lkIHN0YXJ0UHVzaFNlcnZpY2UoY29uc3QgU3RyaW5nJiBp
bmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgY29uc3QgU3RyaW5nJiBwdXNoRGF0YWJhc2VQYXRoKTsK
KyAgICB2b2lkIGhhbmRsZUluY29taW5nUHVzaChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZp
ZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJik7CisKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJz
CiAgICAgdm9pZCBlY2hvVHdpY2UoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFN0cmluZyYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgcmVwbHlTZW5kZXIpOwogICAg
IHZvaWQgcmVxdWVzdFN5c3RlbU5vdGlmaWNhdGlvblBlcm1pc3Npb24oQ2xpZW50Q29ubmVjdGlv
biosIGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgcmVwbHlT
ZW5kZXIpOwpAQCAtNjksNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWJ1Z01vZGVJ
c0VuYWJsZWQoQ2xpZW50Q29ubmVjdGlvbiosIGJvb2wpOwogICAgIHZvaWQgdXBkYXRlQ29ubmVj
dGlvbkNvbmZpZ3VyYXRpb24oQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFdlYlB1c2hEYWVtb25D
b25uZWN0aW9uQ29uZmlndXJhdGlvbiYpOwogICAgIHZvaWQgaW5qZWN0UHVzaE1lc3NhZ2VGb3JU
ZXN0aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBQdXNoTWVzc2FnZUZvclRlc3RpbmcmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGluamVjdEVuY3J5cHRl
ZFB1c2hNZXNzYWdlRm9yVGVzdGluZyhDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBnZXRQZW5kaW5nUHVz
aE1lc3NhZ2VzKENsaWVudENvbm5lY3Rpb24qLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiYpPiYmIHJlcGx5U2VuZGVyKTsKICAgICB2
b2lkIHN1YnNjcmliZVRvUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFVSTCYg
c2NvcGVVUkwsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXBwbGljYXRpb25TZXJ2ZXJLZXksIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlw
dGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpOwogICAg
IHZvaWQgdW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0
IFVSTCYgc2NvcGVVUkwsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlv
bkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpOwpAQCAtODgsOSArOTQsMTcgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgbm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJc0F2YWlsYWJsZShjb25zdCBTdHJpbmcm
IGNsaWVudENvZGVTaWduaW5nSWRlbnRpZmllcik7CiAKKyAgICB2b2lkIHNldFB1c2hTZXJ2aWNl
KHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik7CisgICAgdm9pZCBydW5BZnRlclN0YXJ0
aW5nUHVzaFNlcnZpY2UoRnVuY3Rpb248dm9pZCgpPiYmKTsKKwogICAgIENsaWVudENvbm5lY3Rp
b24qIHRvQ2xpZW50Q29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90KTsKICAgICBIYXNoTWFwPHhw
Y19jb25uZWN0aW9uX3QsIFJlZjxDbGllbnRDb25uZWN0aW9uPj4gbV9jb25uZWN0aW9uTWFwOwog
CisgICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiBtX3B1c2hTZXJ2aWNlOworICAgIGJv
b2wgbV9wdXNoU2VydmljZVN0YXJ0ZWQgeyBmYWxzZSB9OworICAgIERlcXVlPEZ1bmN0aW9uPHZv
aWQoKT4+IG1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVuY3Rpb25zOworCisgICAgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPj4gbV9wdXNoTWVzc2FnZXM7CiAgICAg
SGFzaE1hcDxTdHJpbmcsIERlcXVlPFB1c2hNZXNzYWdlRm9yVGVzdGluZz4+IG1fdGVzdGluZ1B1
c2hNZXNzYWdlczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpp
bmRleCBhOGZlNDlmNTJkNzYzMjY2MzFjYWM3ZDc2NmMwOTE0OTVlOWNlNTVlLi5hZGQ2ZTNkOGFk
ZmVhODk5ODg4ZjRiYWY2MWFjYzA1MzEzNjNkY2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9X
ZWJQdXNoRGFlbW9uLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbXBvcnQgPHd0Zi9TcGFuLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1w
b3J0IDx3dGYvV29ya1F1ZXVlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6OldlYlB1c2hE
OwogCkBAIC05MSw2ICs5MiwxMSBAQCBBUkdVTUVOVFMoUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKQog
UkVQTFkoYm9vbCkKIEVORAogCitGVU5DVElPTihpbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZv
clRlc3RpbmcpCitBUkdVTUVOVFMoU3RyaW5nKQorUkVQTFkoYm9vbCkKK0VORAorCiBGVU5DVElP
TihzdWJzY3JpYmVUb1B1c2hTZXJ2aWNlKQogQVJHVU1FTlRTKFVSTCwgVmVjdG9yPHVpbnQ4X3Q+
KQogUkVQTFkoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGE+JikKQEAgLTE1MSw2ICsxNTcsMTMgQEAgV2ViUHVzaEQ6OkVu
Y29kZWRNZXNzYWdlIGluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZzo6ZW5jb2RlUmVwbHkoYm9v
bCByZXBseSkKICAgICByZXR1cm4gZW5jb2Rlci50YWtlQnVmZmVyKCk7CiB9CiAKK1dlYlB1c2hE
OjpFbmNvZGVkTWVzc2FnZSBpbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6OmVu
Y29kZVJlcGx5KGJvb2wgcmVwbHkpCit7CisgICAgV2ViS2l0OjpEYWVtb246OkVuY29kZXIgZW5j
b2RlcjsKKyAgICBlbmNvZGVyIDw8IHJlcGx5OworICAgIHJldHVybiBlbmNvZGVyLnRha2VCdWZm
ZXIoKTsKK30KKwogV2ViUHVzaEQ6OkVuY29kZWRNZXNzYWdlIGdldFBlbmRpbmdQdXNoTWVzc2Fn
ZXM6OmVuY29kZVJlcGx5KGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiYgcmVw
bHkpCiB7CiAgICAgV2ViS2l0OjpEYWVtb246OkVuY29kZXIgZW5jb2RlcjsKQEAgLTIyNCw2ICsy
MzcsNTEgQEAgRGFlbW9uJiBEYWVtb246OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGRhZW1vbjsK
IH0KIAordm9pZCBEYWVtb246OnN0YXJ0TW9ja1B1c2hTZXJ2aWNlKCkKK3sKKyAgICBhdXRvIG1l
c3NhZ2VIYW5kbGVyID0gW3RoaXNdKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2Vi
S2l0OjpXZWJQdXNoTWVzc2FnZSYmIG1lc3NhZ2UpIHsKKyAgICAgICAgaGFuZGxlSW5jb21pbmdQ
dXNoKGJ1bmRsZUlkZW50aWZpZXIsIFdURk1vdmUobWVzc2FnZSkpOworICAgIH07CisgICAgUHVz
aFNlcnZpY2U6OmNyZWF0ZU1vY2tTZXJ2aWNlKFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBbdGhp
c10oYXV0byYmIHB1c2hTZXJ2aWNlKSBtdXRhYmxlIHsKKyAgICAgICAgc2V0UHVzaFNlcnZpY2Uo
V1RGTW92ZShwdXNoU2VydmljZSkpOworICAgIH0pOworfQorCit2b2lkIERhZW1vbjo6c3RhcnRQ
dXNoU2VydmljZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlUGF0aCkKK3sKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gW3RoaXNd
KGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYm
IG1lc3NhZ2UpIHsKKyAgICAgICAgaGFuZGxlSW5jb21pbmdQdXNoKGJ1bmRsZUlkZW50aWZpZXIs
IFdURk1vdmUobWVzc2FnZSkpOworICAgIH07CisgICAgUHVzaFNlcnZpY2U6OmNyZWF0ZShpbmNv
bWluZ1B1c2hTZXJ2aWNlTmFtZSwgZGF0YWJhc2VQYXRoLCBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVy
KSwgW3RoaXNdKGF1dG8mJiBwdXNoU2VydmljZSkgbXV0YWJsZSB7CisgICAgICAgIHNldFB1c2hT
ZXJ2aWNlKFdURk1vdmUocHVzaFNlcnZpY2UpKTsKKyAgICB9KTsKK30KKwordm9pZCBEYWVtb246
OnNldFB1c2hTZXJ2aWNlKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJiBwdXNoU2Vydmlj
ZSkKK3sKKyAgICBtX3B1c2hTZXJ2aWNlID0gV1RGTW92ZShwdXNoU2VydmljZSk7CisgICAgbV9w
dXNoU2VydmljZVN0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3BlbmRpbmdQdXNoU2Vydmlj
ZUZ1bmN0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdvcmtRdWV1ZTo6bWFp
bigpLmRpc3BhdGNoKFt0aGlzXSgpIHsKKyAgICAgICAgd2hpbGUgKG1fcGVuZGluZ1B1c2hTZXJ2
aWNlRnVuY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgYXV0byBmdW5jdGlvbiA9IG1fcGVu
ZGluZ1B1c2hTZXJ2aWNlRnVuY3Rpb25zLnRha2VGaXJzdCgpOworICAgICAgICAgICAgZnVuY3Rp
b24oKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIERhZW1vbjo6cnVuQWZ0ZXJTdGFy
dGluZ1B1c2hTZXJ2aWNlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBpZiAo
IW1fcHVzaFNlcnZpY2VTdGFydGVkKSB7CisgICAgICAgIG1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVu
Y3Rpb25zLmFwcGVuZChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgZnVuY3Rpb24oKTsKK30KKwogdm9pZCBEYWVtb246OmJyb2FkY2FzdERlYnVnTWVzc2Fn
ZShKU0M6Ok1lc3NhZ2VMZXZlbCBtZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdE9TT2JqZWN0KHhwY19kaWN0aW9uYXJ5X2Ny
ZWF0ZShudWxscHRyLCBudWxscHRyLCAwKSk7CkBAIC0zMjUsNiArMzgzLDkgQEAgdm9pZCBEYWVt
b246OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBN
ZXNzYWdlVHlwZSBtZXMKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpJbmplY3RQdXNoTWVzc2FnZUZv
clRlc3Rpbmc6CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdl
SW5mbzo6aW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nPihjbGllbnRDb25uZWN0aW9uLCBlbmNv
ZGVkTWVzc2FnZSwgV1RGTW92ZShyZXBseVNlbmRlcikpOwogICAgICAgICBicmVhazsKKyAgICBj
YXNlIE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6Cisg
ICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6aW5qZWN0
RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nPihjbGllbnRDb25uZWN0aW9uLCBlbmNvZGVk
TWVzc2FnZSwgV1RGTW92ZShyZXBseVNlbmRlcikpOworICAgICAgICBicmVhazsKICAgICBjYXNl
IE1lc3NhZ2VUeXBlOjpHZXRQZW5kaW5nUHVzaE1lc3NhZ2VzOgogICAgICAgICBoYW5kbGVXZWJQ
dXNoRE1lc3NhZ2VXaXRoUmVwbHk8TWVzc2FnZUluZm86OmdldFBlbmRpbmdQdXNoTWVzc2FnZXM+
KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7
CiAgICAgICAgIGJyZWFrOwpAQCAtNDMxLDYgKzQ5Miw0NiBAQCB2b2lkIERhZW1vbjo6aW5qZWN0
UHVzaE1lc3NhZ2VGb3JUZXN0aW5nKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0
IFB1cwogICAgIHJlcGx5U2VuZGVyKHRydWUpOwogfQogCit2b2lkIERhZW1vbjo6aW5qZWN0RW5j
cnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24s
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBy
ZXBseVNlbmRlcikKK3sKKyAgICBpZiAoIWNvbm5lY3Rpb24tPmhvc3RBcHBIYXNQdXNoSW5qZWN0
RW50aXRsZW1lbnQoKSkgeworICAgICAgICBjb25uZWN0aW9uLT5icm9hZGNhc3REZWJ1Z01lc3Nh
Z2UoIkF0dGVtcHRpbmcgdG8gaW5qZWN0IGEgcHVzaCBtZXNzYWdlIGZyb20gYW4gdW5lbnRpdGxl
ZCBwcm9jZXNzIik7CisgICAgICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShbdGhpcywgbWVzc2Fn
ZSA9IG1lc3NhZ2UsIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNlbmRlcildKCkgbXV0YWJs
ZSB7CisgICAgICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAgICAgICAgICAgcmVwbHlTZW5k
ZXIoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBieXRlcyA9IG1lc3NhZ2UudXRmOCgpOworICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRh
ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpieXRlcy5kYXRhKCkgbGVu
Z3RoOiBieXRlcy5sZW5ndGgoKV0pOworCisgICAgICAgIGlkIG9iaiA9IFtOU0pTT05TZXJpYWxp
emF0aW9uIEpTT05PYmplY3RXaXRoRGF0YTpkYXRhLmdldCgpIG9wdGlvbnM6MCBlcnJvcjpudWxs
cHRyXTsKKyAgICAgICAgaWYgKCFvYmogfHwgIVtvYmogaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9u
YXJ5IGNsYXNzXV0pIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBOU0xvZyhAImdvdCBvYmo6ICVAIiwgb2Jq
KTsKKworICAgICAgICBtX3B1c2hTZXJ2aWNlLT5kaWRSZWNlaXZlUHVzaE1lc3NhZ2Uob2JqW0Ai
dG9waWMiXSwgb2JqW0AidXNlckluZm8iXSwgW3JlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNl
bmRlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICByZXBseVNlbmRlcih0cnVlKTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpoYW5kbGVJbmNvbWluZ1B1c2goY29u
c3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVz
c2FnZSkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcHVzaE1lc3NhZ2VzLmVuc3VyZShidW5k
bGVJZGVudGlmaWVyLCBbXSB7CisgICAgICAgIHJldHVybiBWZWN0b3I8V2ViS2l0OjpXZWJQdXNo
TWVzc2FnZT4geyB9OworICAgIH0pOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKFdURk1vdmUobWVzc2FnZSkpOworCisgICAgbm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJc0F2
YWlsYWJsZShidW5kbGVJZGVudGlmaWVyKTsKK30KKwogdm9pZCBEYWVtb246Om5vdGlmeUNsaWVu
dFB1c2hNZXNzYWdlSXNBdmFpbGFibGUoY29uc3QgU3RyaW5nJiBjbGllbnRDb2RlU2lnbmluZ0lk
ZW50aWZpZXIpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDYyLDYgKzU2Myw5IEBAIHZvaWQg
RGFlbW9uOjpnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rp
b24sIENvbXBsZXRpb25IYW5kCiAKICAgICBWZWN0b3I8V2ViS2l0OjpXZWJQdXNoTWVzc2FnZT4g
cmVzdWx0TWVzc2FnZXM7CiAKKyAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fcHVzaE1lc3NhZ2Vz
LmZpbmQoaG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcik7IGl0ZXJhdG9yICE9IG1fcHVzaE1l
c3NhZ2VzLmVuZCgpKQorICAgICAgICBzdGQ6OnN3YXAocmVzdWx0TWVzc2FnZXMsIGl0ZXJhdG9y
LT52YWx1ZSk7CisKICAgICBhdXRvIGl0ZXJhdG9yID0gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzLmZp
bmQoaG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1f
dGVzdGluZ1B1c2hNZXNzYWdlcy5lbmQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIG1lc3NhZ2Ug
OiBpdGVyYXRvci0+dmFsdWUpIHsKQEAgLTQ3NiwyNSArNTgwLDUwIEBAIHZvaWQgRGFlbW9uOjpn
ZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvbXBs
ZXRpb25IYW5kCiAgICAgcmVwbHlTZW5kZXIoV1RGTW92ZShyZXN1bHRNZXNzYWdlcykpOwogfQog
Ci12b2lkIERhZW1vbjo6c3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiBj
b25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGFw
cGxpY2F0aW9uU2VydmVyS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVk
PFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYp
PiYmIHJlcGx5U2VuZGVyKQordm9pZCBEYWVtb246OnN1YnNjcmliZVRvUHVzaFNlcnZpY2UoQ2xp
ZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKLSAgICBVTlVTRURfUEFSQU0oYXBwbGljYXRp
b25TZXJ2ZXJLZXkpOwotICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4
Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpOb3RBbGxvd2VkRXJyb3IsICJMYWNrIHBlcm1pc3Npb24i
X3MgfSkpOworICAgIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShbdGhpcywgYnVuZGxlSWRl
bnRpZmllciA9IGNvbm5lY3Rpb24tPmhvc3RBcHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgc2Nv
cGUgPSBzY29wZVVSTC5zdHJpbmcoKSwgdmFwaWRQdWJsaWNLZXksIHJlcGx5U2VuZGVyID0gV1RG
TW92ZShyZXBseVNlbmRlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9wdXNoU2Vydmlj
ZSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhj
ZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVycm9yLCAiUHVzaCBzZXJ2aWNlIGlu
aXRpYWxpemF0aW9uIGZhaWxlZCJfcyB9KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBtX3B1c2hTZXJ2aWNlLT5zdWJzY3JpYmUoYnVuZGxlSWRlbnRpZmllciwg
c2NvcGUsIHZhcGlkUHVibGljS2V5LCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgfSk7CiB9
CiAKLXZvaWQgRGFlbW9uOjp1bnN1YnNjcmliZUZyb21QdXNoU2VydmljZShDbGllbnRDb25uZWN0
aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBXZWJDb3JlOjpQdXNoU3Vic2Ny
aXB0aW9uSWRlbnRpZmllciBwdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYp
PiYmIHJlcGx5U2VuZGVyKQordm9pZCBEYWVtb246OnVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNl
KENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIFdlYkNv
cmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKLSAgICByZXBseVNlbmRlcihmYWxzZSk7Cisg
ICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0g
Y29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3Bl
VVJMLnN0cmluZygpLCBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCByZXBseVNlbmRlciA9IFdURk1v
dmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fcHVzaFNlcnZpY2Up
IHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2Vw
dGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2VydmljZSBpbml0
aWFsaXphdGlvbiBmYWlsZWQiX3MgfSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbV9wdXNoU2VydmljZS0+dW5zdWJzY3JpYmUoYnVuZGxlSWRlbnRpZmllciwg
c2NvcGUsIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBEYWVtb246OmdldFB1c2hTdWJzY3JpcHRpb24oQ2xpZW50Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRp
b25EYXRhPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKLSAg
ICByZXBseVNlbmRlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRh
PiB7IH0pOworICAgIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShbdGhpcywgYnVuZGxlSWRl
bnRpZmllciA9IGNvbm5lY3Rpb24tPmhvc3RBcHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgc2Nv
cGUgPSBzY29wZVVSTC5zdHJpbmcoKSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAg
ICByZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2Vi
Q29yZTo6SW52YWxpZFN0YXRlRXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFp
bGVkIl9zIH0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1f
cHVzaFNlcnZpY2UtPmdldFN1YnNjcmlwdGlvbihidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RG
TW92ZShyZXBseVNlbmRlcikpOworICAgIH0pOwogfQogCiB2b2lkIERhZW1vbjo6Z2V0UHVzaFBl
cm1pc3Npb25TdGF0ZShDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNj
b3BlVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHVpbnQ4X3QsIFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCiB7CisgICAgLy8gRklYTUUK
KyNpZiBIQVZFKEFQUExFX1BVU0hfU0VSVklDRV9VUkxfVE9LRU5fU1VQUE9SVCkKKyAgICByZXBs
eVNlbmRlcihzdGF0aWNfY2FzdDx1aW50OF90PihXZWJDb3JlOjpQdXNoUGVybWlzc2lvblN0YXRl
OjpHcmFudGVkKSk7CisjZWxzZQogICAgIHJlcGx5U2VuZGVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KFdlYkNvcmU6OlB1c2hQZXJtaXNzaW9uU3RhdGU6OkRlbmllZCkpOworI2VuZGlmCiB9CiAKIENs
aWVudENvbm5lY3Rpb24qIERhZW1vbjo6dG9DbGllbnRDb25uZWN0aW9uKHhwY19jb25uZWN0aW9u
X3QgY29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbk1haW4uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4u
aAppbmRleCBiYmViOTY4ZGU3YTc1OWRkZjI3NmZjMWJhNjdkMjhiNjY2YTQ4NjQwLi5kM2MxN2U2
NWRhM2FlYzUyNDRhYjkxNjEzYmFjM2NmNmU5ZWFhMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oCkBAIC0yNyw2ICsyNyw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1pbnQgV2ViUHVzaERhZW1vbk1haW4oaW50LCBjb25zdCBjaGFyKiopOworaW50
IFdlYlB1c2hEYWVtb25NYWluKGludCwgY2hhcioqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1t
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbQppbmRleCAyYTY4
ZTE4ZmEyMDE1MDY2MjBkMWMzODE3NDQxMWViMGFhMmJkYzU5Li44OTI4ZDhmYzk0MGZhZWY4MWE4
MzRlMzA5NDVjMzU2MDczMjdhYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L1dlYlB1c2hEYWVtb25NYWluLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbk1haW4ubW0KQEAgLTMwLDI0ICszMCwyMSBAQAogI2ltcG9ydCAiRGFlbW9uRGVjb2Rl
ci5oIgogI2ltcG9ydCAiRGFlbW9uRW5jb2Rlci5oIgogI2ltcG9ydCAiRGFlbW9uVXRpbGl0aWVz
LmgiCisjaW1wb3J0ICJMb2dJbml0aWFsaXphdGlvbi5oIgogI2ltcG9ydCAiV2ViUHVzaERhZW1v
bi5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0xvZ0luaXRpYWxpemF0aW9uLmg+CisjaW1wb3J0IDxnZXRvcHQuaD4KKyNpbXBvcnQgPHd0Zi9M
b2dJbml0aWFsaXphdGlvbi5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KICNpbXBvcnQg
PHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
LSNpbXBvcnQgPHNlcnZlcnMvYm9vdHN0cmFwLmg+Ci0jZWxzZQotI2ltcG9ydCA8bWFjaC9zdGRf
dHlwZXMuaD4KLWV4dGVybiAiQyIgewotZXh0ZXJuIGtlcm5fcmV0dXJuX3QgYm9vdHN0cmFwX2No
ZWNrX2luKG1hY2hfcG9ydF90IGJvb3RzdHJhcFBvcnQsIGNvbnN0IGNoYXIgKnNlcnZpY2VOYW1l
LCBtYWNoX3BvcnRfdCopOwotfQotI2VuZGlmCi0KIHVzaW5nIFdlYktpdDo6RGFlbW9uOjpFbmNv
ZGVkTWVzc2FnZTsKIHVzaW5nIFdlYlB1c2hEOjpEYWVtb247CiAKLXN0YXRpYyBjb25zdCBjaGFy
ICppbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSA9ICJjb20uYXBwbGUuYXBzLndlYmtpdC53ZWJwdXNo
ZC5pbmNvbWluZy1wdXNoIjsKK3N0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgZW50aXRsZW1lbnRO
YW1lID0gImNvbS5hcHBsZS5wcml2YXRlLndlYmtpdC53ZWJwdXNoIl9zOworc3RhdGljIGNvbnN0
IEFTQ0lJTGl0ZXJhbCBkZWZhdWx0TWFjaFNlcnZpY2VOYW1lID0gImNvbS5hcHBsZS53ZWJraXQu
d2VicHVzaGQuc2VydmljZSJfczsKK3N0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgZGVmYXVsdElu
Y29taW5nUHVzaFNlcnZpY2VOYW1lID0gImNvbS5hcHBsZS5hcHMud2Via2l0LndlYnB1c2hkLmlu
Y29taW5nLXB1c2giX3M7CiAKIG5hbWVzcGFjZSBXZWJQdXNoRCB7CiAKQEAgLTc0LDIzICs3MSw1
NSBAQCB1c2luZyBXZWJQdXNoRDo6Y29ubmVjdGlvblJlbW92ZWQ7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCi1pbnQgV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2
KQoraW50IFdlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBp
ZiAoYXJnYyAhPSAzIHx8IHN0cmNtcChhcmd2WzFdLCAiLS1tYWNoU2VydmljZU5hbWUiKSkgewot
ICAgICAgICBOU0xvZyhAInVzYWdlOiB3ZWJwdXNoZCAtLW1hY2hTZXJ2aWNlTmFtZSA8bmFtZT4i
KTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiBtYWNoU2Vydmlj
ZU5hbWUgPSBhcmd2WzJdOwotCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIFdlYktp
dDo6c3RhcnRMaXN0ZW5pbmdGb3JNYWNoU2VydmljZUNvbm5lY3Rpb25zKG1hY2hTZXJ2aWNlTmFt
ZSwgImNvbS5hcHBsZS5wcml2YXRlLndlYmtpdC53ZWJwdXNoIiwgY29ubmVjdGlvbkFkZGVkLCBj
b25uZWN0aW9uUmVtb3ZlZCwgY29ubmVjdGlvbkV2ZW50SGFuZGxlcik7Ci0KLSAgICAgICAgLy8g
VE9ETzogcmVtb3ZlIHRoaXMgb25jZSB3ZSBhY3R1YWxseSBzdGFydCB1c2luZyBBUFNDb25uZWN0
aW9uLgotICAgICAgICBtYWNoX3BvcnRfdCBpbmNvbWluZ01lc3NhZ2VQb3J0OwotICAgICAgICBp
ZiAoYm9vdHN0cmFwX2NoZWNrX2luKGJvb3RzdHJhcF9wb3J0LCBpbmNvbWluZ1B1c2hTZXJ2aWNl
TmFtZSwgJmluY29taW5nTWVzc2FnZVBvcnQpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgICAg
IE5TTG9nKEAiQ291bGRuJ3QgcmVnaXN0ZXIgZm9yIGluY29taW5nIHB1c2ggbGF1bmNoIHBvcnQu
Iik7Ci0gICAgICAgIAogICAgICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CisKKyNp
ZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICBXVEY6Omxv
Z0NoYW5uZWxzKCkuaW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAg
V2ViQ29yZTo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgp
OworICAgICAgICBXZWJLaXQ6OmxvZ0NoYW5uZWxzKCkuaW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZO
ZWNlc3NhcnkoKTsKKyNlbmRpZiAvLyAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorCisgICAgICAgIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKyAgICAg
ICAgICAgIHsgIm1hY2hTZXJ2aWNlTmFtZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbScgfSwK
KyAgICAgICAgICAgIHsgImluY29taW5nUHVzaFNlcnZpY2VOYW1lIiwgcmVxdWlyZWRfYXJndW1l
bnQsIDAsICdwJyB9LAorICAgICAgICAgICAgeyAidXNlTW9ja1B1c2hTZXJ2aWNlIiwgbm9fYXJn
dW1lbnQsIDAsICdmJyB9CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgY2hhciogbWFjaFNl
cnZpY2VOYW1lID0gZGVmYXVsdE1hY2hTZXJ2aWNlTmFtZTsKKyAgICAgICAgY29uc3QgY2hhciog
aW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSBkZWZhdWx0SW5jb21pbmdQdXNoU2VydmljZU5hbWU7
CisgICAgICAgIGJvb2wgdXNlTW9ja1B1c2hTZXJ2aWNlID0gZmFsc2U7CisKKyAgICAgICAgaW50
IGM7CisgICAgICAgIGludCBvcHRpb25JbmRleDsKKyAgICAgICAgd2hpbGUgKChjID0gZ2V0b3B0
X2xvbmcoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMsICZvcHRpb25JbmRleCkpICE9IC0xKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAg
ICAgICAgIG1hY2hTZXJ2aWNlTmFtZSA9IG9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgJ3AnOgorICAgICAgICAgICAgICAgIGluY29taW5nUHVzaFNlcnZp
Y2VOYW1lID0gb3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSAnZic6CisgICAgICAgICAgICAgICAgdXNlTW9ja1B1c2hTZXJ2aWNlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJWNcbiIsIG9wdG9wdCk7CisgICAgICAg
ICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFdl
YktpdDo6c3RhcnRMaXN0ZW5pbmdGb3JNYWNoU2VydmljZUNvbm5lY3Rpb25zKG1hY2hTZXJ2aWNl
TmFtZSwgZW50aXRsZW1lbnROYW1lLCBjb25uZWN0aW9uQWRkZWQsIGNvbm5lY3Rpb25SZW1vdmVk
LCBjb25uZWN0aW9uRXZlbnRIYW5kbGVyKTsKKworICAgICAgICBpZiAodXNlTW9ja1B1c2hTZXJ2
aWNlKQorICAgICAgICAgICAgOjpXZWJQdXNoRDo6RGFlbW9uOjpzaW5nbGV0b24oKS5zdGFydE1v
Y2tQdXNoU2VydmljZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBsaWJy
YXJ5UGF0aCA9IE5TU2VhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKE5TTGlicmFyeURp
cmVjdG9yeSwgTlNVc2VyRG9tYWluTWFzaywgWUVTKVswXTsKKyAgICAgICAgICAgIFN0cmluZyBw
dXNoRGF0YWJhc2VQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhs
aWJyYXJ5UGF0aCwgeyAiV2ViS2l0IiwgIldlYlB1c2giLCAiUHVzaERhdGFiYXNlLmRiIiB9KTsK
KyAgICAgICAgICAgIDo6V2ViUHVzaEQ6OkRhZW1vbjo6c2luZ2xldG9uKCkuc3RhcnRQdXNoU2Vy
dmljZShpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgcHVzaERhdGFiYXNlUGF0aCk7CisgICAgICAg
IH0KICAgICB9CiAgICAgQ0ZSdW5Mb29wUnVuKCk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBs
aXN0IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9jb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1h
Yy5wbGlzdAppbmRleCBmNzFlNTlhNDA3ZjNlM2E4OTA4MDBhZTNmNDFlMDg1NWU1MGE3YjJhLi5i
MjVhYmZmNWE4ZTRiZGI4ZjE5MmI5ZjA1ZTU4NDczOTVkMzQxNTRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMu
cGxpc3QKQEAgLTE5LDcgKzE5LDcgQEAKIAk8c3RyaW5nPkFkYXB0aXZlPC9zdHJpbmc+CiAJPGtl
eT5Qcm9ncmFtQXJndW1lbnRzPC9rZXk+CiAJPGFycmF5PgotCQk8c3RyaW5nPi9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvRGFlbW9ucy93ZWJwdXNoZDwvc3RyaW5n
PgorCQk8c3RyaW5nPi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9EYWVtb25zL3dlYnB1c2hkPC9zdHJpbmc+CiAJCTxzdHJpbmc+LS1tYWNoU2Vy
dmljZU5hbWU8L3N0cmluZz4KIAkJPHN0cmluZz5jb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnNl
cnZpY2U8L3N0cmluZz4KIAk8L2FycmF5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJw
dXNoZC93ZWJwdXNoZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL3dlYnB1c2hkLmNwcApp
bmRleCBmZDA0ZTQwNDU4NTk4ZWM4NzM5YWMwZjNlOWE4YjhmM2ZiY2ExZWI4Li41OWNlZjBkOTg0
MzA1NTY1YWVhZDE4YzIxMjJhZDNkZmZlMTU5NjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL3dlYnB1c2hkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL3dlYnB1
c2hkLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS01haW4uaD4KICNp
bmNsdWRlIDxvcy9hdmFpbGFiaWxpdHkuaD4KIAotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNo
YXIqKiBhcmd2KQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewogICAgIFdLV2Vi
UHVzaERhZW1vbk1haW4oYXJnYywgYXJndik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWVhMjNkZmZkNWVhMzg0ODUzMTZiZmRhNjQxNGZk
NmI3MDBiNjEzYi4uOTVlNDA1MWRmMDBiMzFhZmY0ZWRlY2IyYjUxYTdkNzNjY2NmODQ3NiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI1IEBACisyMDIyLTAxLTI4ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBQdXNoU2VydmljZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM1ODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgIC0gTW9kaWZlZCB0aGUgZXhpc3RpbmcgaW5qZWN0ZWQgcHVzaCB0ZXN0IHRvIGlu
amVjdCBkaWZmZXJlbnQgdHlwZXMgb2YgcmVhbCBwdXNoIG9iamVjdHMKKyAgICAgICAgICAgZnJv
bSBBUFMgKGFuIGVtcHR5IHB1c2gsIGFuIGFlc2djbS1lbmNyeXB0ZWQgcHVzaCwgYW5kIGFuIGFl
czEyOGdjbS1lbmNyeXB0ZWQgcHVzaCkuCisgICAgICAgICAtIEFkZCBhIGZldyBiYXNpYyB0ZXN0
IGNhc2VzIGZvciBzdWJzY3JpYmluZyBhbmQgdW5zdWJzY3JpYmluZyBmcm9tIHB1c2guCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW06
CisgICAgICAgICgtW05vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VI
YW5kbGVyOl0pOgorICAgICAgICAoLVtOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciB1
c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjp0ZXN0V2ViUHVzaERhZW1vblBMaXN0KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OmNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OnNlbmRNZXNzYWdlVG9EYWVtb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2VuZE1l
c3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpz
ZW5kQ29uZmlndXJhdGlvbldpdGhBdWRpdFRva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZnVuY3Rpb24pOiBEZWxldGVkLgorCiAy
MDIyLTAxLTMwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBQdXNo
RGF0YWJhc2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV2ViUHVzaERhZW1vbi5tbQppbmRleCA2ZDkyY2U5Nzg2YWY4MWM3ODRiMTI0NDQxOWU2ZGU2
MjgwM2NlODIwLi5iN2IzNGI2Y2FhNTQ3YmUzMmEzNzYyOGNjZjFhY2RlZWM2ZjVkNjU5IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVt
b24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNo
RGFlbW9uLm1tCkBAIC0zNSwxMyArMzUsMTggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVyaW1l
bnRhbEZlYXR1cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5oPgogI2ltcG9ydCA8bWFjaC9tYWNoX2luaXQuaD4KICNpbXBvcnQgPG1hY2gvdGFz
ay5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQu
aD4KIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogCit1c2luZyBXZWJLaXQ6
OldlYlB1c2hEOjpNZXNzYWdlVHlwZTsKKwogc3RhdGljIGJvb2wgYWxlcnRSZWNlaXZlZCA9IGZh
bHNlOwogQGludGVyZmFjZSBOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdhdGUgOiBOU09iamVj
dDxXS1VJRGVsZWdhdGVQcml2YXRlPgogQGVuZApAQCAtNjEsNiArNjYsMjYgQEAgLSAodm9pZCl3
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1l
c3NhZ2U6KE5TU3RyaW4KIAogQGVuZAogCitAaW50ZXJmYWNlIE5vdGlmaWNhdGlvblNjcmlwdE1l
c3NhZ2VIYW5kbGVyIDogTlNPYmplY3Q8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4geworICAgIEJs
b2NrUHRyPHZvaWQoaWQpPiBfbWVzc2FnZUhhbmRsZXI7Cit9CitAZW5kCisKK0BpbXBsZW1lbnRh
dGlvbiBOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlcgorCistICh2b2lkKXNldE1lc3Nh
Z2VIYW5kbGVyOih2b2lkICheKShpZCkpaGFuZGxlcgoreworICAgIF9tZXNzYWdlSGFuZGxlciA9
IGhhbmRsZXI7Cit9CisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250
ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVz
c2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIGlmIChfbWVzc2FnZUhhbmRs
ZXIpCisgICAgICAgIF9tZXNzYWdlSGFuZGxlcihtZXNzYWdlLmJvZHkpOworfQorCitAZW5kCisK
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIFJldGFpblB0cjxOU1VSTD4gdGVz
dFdlYlB1c2hEYWVtb25Mb2NhdGlvbigpCkBAIC03OSw3ICsxMDQsOCBAQCBzdGF0aWMgTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqdGVzdFdlYlB1c2hEYWVtb25QTGlzdChOU1VSTCAqc3Rv
cmFnZUxvY2F0aQogICAgICAgICBAIlByb2dyYW1Bcmd1bWVudHMiIDogQFsKICAgICAgICAgICAg
IHRlc3RXZWJQdXNoRGFlbW9uTG9jYXRpb24oKS5nZXQoKS5wYXRoLAogICAgICAgICAgICAgQCIt
LW1hY2hTZXJ2aWNlTmFtZSIsCi0gICAgICAgICAgICBAIm9yZy53ZWJraXQud2VicHVzaHRlc3Rk
YWVtb24uc2VydmljZSIKKyAgICAgICAgICAgIEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1v
bi5zZXJ2aWNlIiwKKyAgICAgICAgICAgIEAiLS11c2VNb2NrUHVzaFNlcnZpY2UiCiAgICAgICAg
IF0KICAgICB9OwogfQpAQCAtMTM1LDI0ICsxNjEsMjQgQEAgc3RhdGljIHZvaWQgY2xlYW5VcFRl
c3RXZWJQdXNoRChOU1VSTCAqdGVtcERpcikKICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiB9CiAK
LXN0YXRpYyBSZXRhaW5QdHI8eHBjX29iamVjdF90PiBjcmVhdGVNZXNzYWdlRGljdGlvbmFyeSh1
aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCitzdGF0
aWMgUmV0YWluUHRyPHhwY19vYmplY3RfdD4gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkoTWVzc2Fn
ZVR5cGUgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKIHsKICAg
ICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdE5TKHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShudWxscHRy
LCBudWxscHRyLCAwKSk7CiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3VpbnQ2NChkaWN0aW9uYXJ5
LmdldCgpLCAicHJvdG9jb2wgdmVyc2lvbiIsIDEpOwotICAgIHhwY19kaWN0aW9uYXJ5X3NldF91
aW50NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlwZSIsIG1lc3NhZ2VUeXBlKTsKKyAg
ICB4cGNfZGljdGlvbmFyeV9zZXRfdWludDY0KGRpY3Rpb25hcnkuZ2V0KCksICJtZXNzYWdlIHR5
cGUiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obWVzc2FnZVR5cGUpKTsKICAgICB4cGNfZGljdGlv
bmFyeV9zZXRfZGF0YShkaWN0aW9uYXJ5LmdldCgpLCAiZW5jb2RlZCBtZXNzYWdlIiwgbWVzc2Fn
ZS5kYXRhKCksIG1lc3NhZ2Uuc2l6ZSgpKTsKICAgICByZXR1cm4gV1RGTW92ZShkaWN0aW9uYXJ5
KTsKIH0KIAogLy8gVXNlcyBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRvIHRoZSBkYWVtb24gZm9y
IGEgb25lLW9mZiBtZXNzYWdlCi12b2lkIHNlbmRNZXNzYWdlVG9EYWVtb24oeHBjX2Nvbm5lY3Rp
b25fdCBjb25uZWN0aW9uLCB1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIG1lc3NhZ2UpCit2b2lkIHNlbmRNZXNzYWdlVG9EYWVtb24oeHBjX2Nvbm5lY3Rpb25fdCBj
b25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZU1lc3NhZ2VEaWN0aW9u
YXJ5KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsKICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3Nh
Z2UoY29ubmVjdGlvbiwgZGljdGlvbmFyeS5nZXQoKSk7CiB9CiAKIC8vIFVzZXMgYW4gZXhpc3Rp
bmcgY29ubmVjdGlvbiB0byB0aGUgZGFlbW9uIGZvciBhIG9uZS1vZmYgbWVzc2FnZSwgd2FpdGlu
ZyBmb3IgdGhlIHJlcGx5Ci12b2lkIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHko
eHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCB1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCit2b2lkIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5n
Rm9yUmVwbHkoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNzYWdl
VHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlv
bmFyeSA9IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsKIApA
QCAtMTgxLDcgKzIwNyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRDb25maWd1cmF0aW9uV2l0aEF1ZGl0
VG9rZW4oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQogICAgICAgICBlbmNvZGVkTWVzc2Fn
ZVsxXSA9IDE7CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzJdID0gMzI7CiAgICAgICAgIG1lbWNw
eSgmZW5jb2RlZE1lc3NhZ2VbMTBdLCAmdG9rZW4sIHNpemVvZih0b2tlbikpOwotICAgICAgICBz
ZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24sIDYsIGVuY29kZWRNZXNzYWdlKTsKKyAgICAg
ICAgc2VuZE1lc3NhZ2VUb0RhZW1vbihjb25uZWN0aW9uLCBNZXNzYWdlVHlwZTo6VXBkYXRlQ29u
bmVjdGlvbkNvbmZpZ3VyYXRpb24sIGVuY29kZWRNZXNzYWdlKTsKICAgICB9CiB9CiAKQEAgLTI1
Miw3ICsyNzgsNyBAQCBURVNUKFdlYlB1c2hELCBCYXNpY0NvbW11bmljYXRpb24pCiAgICAgICAg
IGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIs
IG51bGxwdHIsIDApKTsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRNZXNzYWdlKDEp
OwogICAgICAgICBlbmNvZGVkTWVzc2FnZVswXSA9IDE7Ci0gICAgICAgIHNlbmRNZXNzYWdlVG9E
YWVtb24oY29ubmVjdGlvbi5nZXQoKSwgNSwgZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBzZW5k
TWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24uZ2V0KCksIE1lc3NhZ2VUeXBlOjpTZXREZWJ1Z01v
ZGVJc0VuYWJsZWQsIGVuY29kZWRNZXNzYWdlKTsKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKICAgICB9CiAKQEAgLTM2MSw1NCArMzg3LDYgQEAgVEVTVChXZWJQdXNo
RCwgUGVybWlzc2lvbk1hbmFnZW1lbnQpCiAgICAgY2xlYW5VcFRlc3RXZWJQdXNoRCh0ZW1wRGly
ZWN0b3J5KTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIG1haW5TV0J5dGVzID0gUiJTV1JFU09V
UkNFKAotPHNjcmlwdD4KLWZ1bmN0aW9uIGxvZyhtc2cpCi17Ci0gICAgd2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMuc3cucG9zdE1lc3NhZ2UobXNnKTsKLX0KLQotY29uc3QgY2hhbm5lbCA9
IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwotY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSAoZXZlbnQp
ID0+IGxvZyhldmVudC5kYXRhKTsKLQotbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIo
Jy9zdy5qcycpLnRoZW4oKHJlZ2lzdHJhdGlvbikgPT4gewotICAgIGlmIChyZWdpc3RyYXRpb24u
YWN0aXZlKSB7Ci0gICAgICAgIHJlZ2lzdHJhdGlvbi5hY3RpdmUucG9zdE1lc3NhZ2Uoe3BvcnQ6
IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5wb3J0Ml0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIHdvcmtlciA9IHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nOwotICAgIHdvcmtlci5hZGRF
dmVudExpc3RlbmVyKCdzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod29y
a2VyLnN0YXRlID09ICdhY3RpdmF0ZWQnKQotICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdl
KHtwb3J0OiBjaGFubmVsLnBvcnQyfSwgW2NoYW5uZWwucG9ydDJdKTsKLSAgICB9KTsKLX0pLmNh
dGNoKGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgbG9nKCJSZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6
ICIgKyBlcnJvcik7Ci19KTsKLTwvc2NyaXB0PgotKVNXUkVTT1VSQ0UiOwotCi1zdGF0aWMgY29u
c3QgY2hhciogc2NyaXB0Qnl0ZXMgPSBSIlNXUkVTT1VSQ0UoCi1sZXQgcG9ydDsKLXNlbGYuYWRk
RXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChldmVudCkgPT4gewotICAgIHBvcnQgPSBldmVudC5k
YXRhLnBvcnQ7Ci0gICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVhZHkiKTsKLX0pOwotc2VsZi5hZGRF
dmVudExpc3RlbmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7Ci0gICAgdHJ5IHsKLSAgICAgICAgaWYg
KCFldmVudC5kYXRhKSB7Ci0gICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDog
bnVsbCBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29u
c3QgdmFsdWUgPSBldmVudC5kYXRhLnRleHQoKTsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgi
UmVjZWl2ZWQ6ICIgKyB2YWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSAnU3dlZXQgUG90YXRv
ZXMnKQotICAgICAgICAgICAgZXZlbnQud2FpdFVudGlsKFByb21pc2UucmVqZWN0KCdJIHdhbnQg
c3dlZXQgcG90YXRvZXMnKSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBwb3J0LnBvc3RN
ZXNzYWdlKCJHb3QgZXhjZXB0aW9uICIgKyBlKTsKLSAgICB9Ci19KTsKLSlTV1JFU09VUkNFIjsK
LQogc3RhdGljIHZvaWQgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFTdG9yZSAq
c3RvcmUpCiB7CiAgICAgX19ibG9jayBib29sIGNsZWFyZWRTdG9yZSA9IGZhbHNlOwpAQCAtNDE4
LDc2ICszOTYsMzE1IEBAIHN0YXRpYyB2b2lkIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShXS1dlYnNp
dGVEYXRhU3RvcmUgKnN0b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2xlYXJl
ZFN0b3JlKTsKIH0KIAotVEVTVChXZWJQdXNoRCwgSGFuZGxlSW5qZWN0ZWRQdXNoKQotewotICAg
IFtXS1dlYnNpdGVEYXRhU3RvcmUgX2FsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2lu
c107CitjbGFzcyBXZWJQdXNoRFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3Rl
Y3RlZDoKKyAgICBXZWJQdXNoRFRlc3QoKQorICAgIHsKKyAgICAgICAgW1dLV2Vic2l0ZURhdGFT
dG9yZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zXTsKIAotICAgIE5TVVJM
ICp0ZW1wRGlyZWN0b3J5ID0gc2V0VXBUZXN0V2ViUHVzaEQoKTsKKyAgICAgICAgbV90ZW1wRGly
ZWN0b3J5ID0gcmV0YWluUHRyKHNldFVwVGVzdFdlYlB1c2hEKCkpOwogCi0gICAgYXV0byBkYXRh
U3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24gbmV3XSk7Ci0gICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFj
aFNlcnZpY2VOYW1lID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOwot
ICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaERhZW1vblVzZXNNb2NrQnVu
ZGxlc0ZvclRlc3RpbmcgPSBZRVM7Ci0gICAgYXV0byBkYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tX
ZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAgICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAg
ICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaE1hY2hTZXJ2aWNlTmFtZSA9
IEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIjsKKyAgICAgICAgZGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoRGFlbW9uVXNlc01vY2tCdW5kbGVzRm9yVGVz
dGluZyA9IFlFUzsKKyAgICAgICAgbV9kYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0
YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKIAotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJhdGlvbi5nZXQoKS53
ZWJzaXRlRGF0YVN0b3JlID0gZGF0YVN0b3JlLmdldCgpOwotICAgIGNsZWFyV2Vic2l0ZURhdGFT
dG9yZShbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSk7CisgICAgICAgIG1fY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CisgICAgICAgIG1fY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gbV9kYXRh
U3RvcmUuZ2V0KCk7CisgICAgICAgIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShbbV9jb25maWd1cmF0
aW9uIHdlYnNpdGVEYXRhU3RvcmVdKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByZWZl
cmVuY2VzIF9zZXROb3RpZmljYXRpb25zRW5hYmxlZDpZRVNdOwotICAgIGZvciAoX1dLRXhwZXJp
bWVudGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFsRmVh
dHVyZXNdKSB7Ci0gICAgICAgIGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiQnVp
bHRJbk5vdGlmaWNhdGlvbnNFbmFibGVkIl0pCi0gICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24g
cHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JGZWF0dXJlOmZlYXR1cmVdOworICAgICAg
ICBbbV9jb25maWd1cmF0aW9uLmdldCgpLnByZWZlcmVuY2VzIF9zZXROb3RpZmljYXRpb25zRW5h
YmxlZDpZRVNdOworICAgICAgICBmb3IgKF9XS0V4cGVyaW1lbnRhbEZlYXR1cmUgKmZlYXR1cmUg
aW4gW1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1lbnRhbEZlYXR1cmVzXSkgeworICAgICAgICAgICAg
aWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9uc0Vu
YWJsZWQiXSkKKyAgICAgICAgICAgICAgICBbW21fY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10g
X3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgICAgICBlbHNlIGlm
IChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiUHVzaEFQSUVuYWJsZWQiXSkKKyAgICAg
ICAgICAgICAgICBbW21fY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVT
IGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgIH0KKworICAgICAgICBtX3Rlc3RNZXNzYWdl
SGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAg
ICAgICAgW1ttX2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjptX3Rlc3RNZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdCJdOwor
CisgICAgICAgIG1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbTm90aWZp
Y2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW1ttX2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjptX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJub3RlIl07CiAgICAg
fQogCi0gICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0TWVzc2FnZUhhbmRs
ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9s
bGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAi
c3ciXTsKLSAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFttZXNzYWdlSGFuZGxl
ciBhZGRNZXNzYWdlOkAiUmVhZHkiIHdpdGhIYW5kbGVyOl57Ci0gICAgICAgIGRvbmUgPSB0cnVl
OworICAgIHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgY2hhciogaHRtbFNvdXJjZSwgY29uc3QgY2hh
ciogc2VydmljZVdvcmtlclNjcmlwdFNvdXJjZSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdGFudHMgPSBSIlNSQygKKyAgICAgICAgICAgIGNvbnN0IFZBTElEX1NFUlZF
Ul9LRVkgPSAiQkExSHh6eWkxUlVNMWI1d2p4c243bkd4QXN6dzJ1NjFtMTY0aTNNckFJeEhGNllL
NWg0U0RZaWMtZFJ1VV9SQ1BDZkE1YXE5b2pTd2s1WTJFbUNsQlBzIjsKKyAgICAgICAgICAgIGNv
bnN0IFZBTElEX1NFUlZFUl9LRVlfVEhBVF9DQVVTRVNfSU5KRUNURURfRkFJTFVSRSA9ICJCRUF4
YVVNbzFzOHRqT1J4SmZuU1N2V2hZYjR1NTFrZzFoV1Qyc185Z3BWN1p4YXIxcEZfMkJROEFuY3VB
ZFMyQm9MaE40cWF4ekJ5MkN3SEU4QkJ6V2ciOworICAgICAgICApU1JDIjsKKyAgICAgICAgbV9z
ZXJ2ZXIucmVzZXQobmV3IFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXIoeworICAgICAgICAgICAg
eyAiLyIsIHsgaHRtbFNvdXJjZSB9IH0sCisgICAgICAgICAgICB7ICIvY29uc3RhbnRzLmpzIiwg
eyB7IHsgIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIGNvbnN0
YW50cyB9IH0sCisgICAgICAgICAgICB7ICIvc3cuanMiLCB7IHsgeyAiQ29udGVudC1UeXBlIiwg
ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgc2VydmljZVdvcmtlclNjcmlwdFNvdXJjZSB9
IH0KKyAgICAgICAgfSwgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHAp
KTsKKworICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bV9jb25m
aWd1cmF0aW9uLmdldCgpXSk7CisgICAgICAgIFttX3dlYlZpZXcgbG9hZFJlcXVlc3Q6bV9zZXJ2
ZXItPnJlcXVlc3QoKV07CisgICAgfQorCisgICAgfldlYlB1c2hEVGVzdCgpCisgICAgeworICAg
ICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAgfQor
CisgICAgUmV0YWluUHRyPE5TVVJMPiBtX3RlbXBEaXJlY3Rvcnk7CisgICAgUmV0YWluUHRyPFdL
V2Vic2l0ZURhdGFTdG9yZT4gbV9kYXRhU3RvcmU7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0Nv
bmZpZ3VyYXRpb24+IG1fY29uZmlndXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8VGVzdE1lc3NhZ2VI
YW5kbGVyPiBtX3Rlc3RNZXNzYWdlSGFuZGxlcjsKKyAgICBSZXRhaW5QdHI8Tm90aWZpY2F0aW9u
U2NyaXB0TWVzc2FnZUhhbmRsZXI+IG1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXI7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI+IG1fc2VydmVyOworICAg
IFJldGFpblB0cjxXS1dlYlZpZXc+IG1fd2ViVmlldzsKK307CisKK2NsYXNzIFdlYlB1c2hESW5q
ZWN0ZWRQdXNoVGVzdCA6IHB1YmxpYyBXZWJQdXNoRFRlc3QgeworcHJvdGVjdGVkOgorICAgIHZv
aWQgcnVuVGVzdChOU1N0cmluZyAqZXhwZWN0ZWRNZXNzYWdlLCBOU0RpY3Rpb25hcnkgKnB1c2hV
c2VySW5mbyk7Cit9OworCit2b2lkIFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdDo6cnVuVGVzdChO
U1N0cmluZyAqZXhwZWN0ZWRNZXNzYWdlLCBOU0RpY3Rpb25hcnkgKnB1c2hVc2VySW5mbykKK3sK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbFNvdXJjZSA9IFIiU1dSRVNPVVJDRSgKKyAgICA8
c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBm
dW5jdGlvbiBsb2cobXNnKQorICAgIHsKKyAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFu
ZGxlcnMudGVzdC5wb3N0TWVzc2FnZShtc2cpOworICAgIH0KKworICAgIGNvbnN0IGNoYW5uZWwg
PSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKKyAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IChl
dmVudCkgPT4gbG9nKGV2ZW50LmRhdGEpOworCisgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIu
cmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCByZWdp
c3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKKyAgICAgICAg
bGV0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3Jp
YmUoeworICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAgYXBw
bGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgfSk7CisgICAgICAg
IHJlZ2lzdHJhdGlvbi5hY3RpdmUucG9zdE1lc3NhZ2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBb
Y2hhbm5lbC5wb3J0Ml0pOworICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAg
IGxvZygiUmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoOiAiICsgZXJyb3IpOworICAgIH0pOworICAg
IDwvc2NyaXB0PgorICAgIClTV1JFU09VUkNFIjsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBz
ZXJ2aWNlV29ya2VyU291cmNlID0gUiJTV1JFU09VUkNFKAorICAgIGxldCBwb3J0OworICAgIHNl
bGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChldmVudCkgPT4geworICAgICAgICBwb3J0
ID0gZXZlbnQuZGF0YS5wb3J0OworICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWFkeSIpOwor
ICAgIH0pOworICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicHVzaCIsIChldmVudCkgPT4gewor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKCFldmVudC5kYXRhKSB7CisgICAgICAgICAg
ICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVjZWl2ZWQ6IG51bGwgZGF0YSIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IHZhbHVlID0g
ZXZlbnQuZGF0YS50ZXh0KCk7CisgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZl
ZDogIiArIHZhbHVlKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcG9ydC5w
b3N0TWVzc2FnZSgiRXJyb3I6ICIgKyBlKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIClTV1JF
U09VUkNFIjsKKworICAgIF9fYmxvY2sgYm9vbCByZWFkeSA9IGZhbHNlOworICAgIFttX3Rlc3RN
ZXNzYWdlSGFuZGxlciBhZGRNZXNzYWdlOkAiUmVhZHkiIHdpdGhIYW5kbGVyOl57CisgICAgICAg
IHJlYWR5ID0gdHJ1ZTsKICAgICB9XTsKLSAgICBbbWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpA
IlJlY2VpdmVkOiBIZWxsbyBXb3JsZCIgd2l0aEhhbmRsZXI6XnsKLSAgICAgICAgZG9uZSA9IHRy
dWU7CisKKyAgICBfX2Jsb2NrIGJvb2wgZ290RXhwZWN0ZWRNZXNzYWdlID0gZmFsc2U7CisgICAg
W21fdGVzdE1lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6ZXhwZWN0ZWRNZXNzYWdlIHdpdGhIYW5k
bGVyOl57CisgICAgICAgIGdvdEV4cGVjdGVkTWVzc2FnZSA9IHRydWU7CiAgICAgfV07CiAKLSAg
ICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyIHNlcnZlcih7Ci0gICAgICAgIHsgIi8iLCB7IG1h
aW5TV0J5dGVzIH0gfSwKLSAgICAgICAgeyAiL3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQtVHlwZSIs
ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIHNjcmlwdEJ5dGVzIH0gfQotICAgIH0sIFRl
c3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwKTsKKyAgICBsb2FkUmVxdWVz
dChodG1sU291cmNlLCBzZXJ2aWNlV29ya2VyU291cmNlKTsKIAotICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZyZWFkeSk7CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OwotICAgIGRvbmUgPSBmYWxzZTsKKyAgICBTdHJpbmcgYnVuZGxlSWRlbnRpZmllciA9ICJjb20u
YXBwbGUuV2ViS2l0LlRlc3RXZWJLaXRBUEkiX3M7CisgICAgU3RyaW5nIHNjb3BlID0gbV9zZXJ2
ZXItPnJlcXVlc3QoKS5VUkwuYWJzb2x1dGVTdHJpbmc7CisgICAgU3RyaW5nIHRvcGljID0gYnVu
ZGxlSWRlbnRpZmllciArICIgIl9zICsgc2NvcGU7CiAKLSAgICAvLyBJbmplY3QgcHVzaCBtZXNz
YWdlCi0gICAgYXV0byBlbmNvZGVkTWVzc2FnZSA9IGVuY29kZVN0cmluZygiY29tLmFwcGxlLldl
YktpdC5UZXN0V2ViS2l0QVBJIik7Ci0gICAgZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVjdG9yKGVu
Y29kZVN0cmluZyhzZXJ2ZXIucmVxdWVzdCgpLlVSTC5hYnNvbHV0ZVN0cmluZykpOwotICAgIGVu
Y29kZWRNZXNzYWdlLmFwcGVuZFZlY3RvcihlbmNvZGVTdHJpbmcoIkhlbGxvIFdvcmxkIikpOwor
ICAgIGlkIG9iaiA9IEB7CisgICAgICAgIEAidG9waWMiOiAoTlNTdHJpbmcgKil0b3BpYywKKyAg
ICAgICAgQCJ1c2VySW5mbyI6IHB1c2hVc2VySW5mbworICAgIH07CisgICAgTlNEYXRhICpkYXRh
ID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0Om9iaiBvcHRpb25zOjAg
ZXJyb3I6bnVsbHB0cl07CisKKyAgICBTdHJpbmcgbWVzc2FnZSB7IHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIgKj4oZGF0YS5ieXRlcyksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhLmxlbmd0aCkg
fTsKKyAgICBhdXRvIGVuY29kZWRNZXNzYWdlID0gZW5jb2RlU3RyaW5nKFdURk1vdmUobWVzc2Fn
ZSkpOwogCiAgICAgYXV0byB1dGlsaXR5Q29ubmVjdGlvbiA9IGNyZWF0ZUFuZENvbmZpZ3VyZUNv
bm5lY3Rpb25Ub1NlcnZpY2UoIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSIp
OwotICAgIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkodXRpbGl0eUNvbm5lY3Rp
b24uZ2V0KCksIDcsIGVuY29kZWRNZXNzYWdlKTsKKyAgICBzZW5kTWVzc2FnZVRvRGFlbW9uV2Fp
dGluZ0ZvclJlcGx5KHV0aWxpdHlDb25uZWN0aW9uLmdldCgpLCBNZXNzYWdlVHlwZTo6SW5qZWN0
RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLCBlbmNvZGVkTWVzc2FnZSk7CiAKICAgICAv
LyBGZXRjaCBwdXNoIG1lc3NhZ2VzCisgICAgX19ibG9jayBib29sIGdvdE1lc3NhZ2VzID0gZmFs
c2U7CiAgICAgX19ibG9jayBSZXRhaW5QdHI8TlNBcnJheTxOU0RpY3Rpb25hcnkgKj4+IG1lc3Nh
Z2VzOwotICAgIFtkYXRhU3RvcmUgX2dldFBlbmRpbmdQdXNoTWVzc2FnZXM6XihOU0FycmF5PE5T
RGljdGlvbmFyeSAqPiAqcmF3TWVzc2FnZXMpIHsKKyAgICBbbV9kYXRhU3RvcmUgX2dldFBlbmRp
bmdQdXNoTWVzc2FnZXM6XihOU0FycmF5PE5TRGljdGlvbmFyeSAqPiAqcmF3TWVzc2FnZXMpIHsK
ICAgICAgICAgbWVzc2FnZXMgPSByYXdNZXNzYWdlczsKLSAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgICAgIGdvdE1lc3NhZ2VzID0gdHJ1ZTsKICAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOwotICAgIGRvbmUgPSBmYWxzZTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmdvdE1lc3NhZ2VzKTsKIAogICAgIEVYUEVDVF9FUShbbWVzc2FnZXMgY291bnRd
LCAxdSk7CiAKICAgICAvLyBIYW5kbGUgcHVzaCBtZXNzYWdlCiAgICAgX19ibG9jayBib29sIHB1
c2hNZXNzYWdlUHJvY2Vzc2VkID0gZmFsc2U7Ci0gICAgW2RhdGFTdG9yZSBfcHJvY2Vzc1B1c2hN
ZXNzYWdlOlttZXNzYWdlcyBmaXJzdE9iamVjdF0gY29tcGxldGlvbkhhbmRsZXI6Xihib29sIHJl
c3VsdCkgeworICAgIFttX2RhdGFTdG9yZSBfcHJvY2Vzc1B1c2hNZXNzYWdlOlttZXNzYWdlcyBm
aXJzdE9iamVjdF0gY29tcGxldGlvbkhhbmRsZXI6Xihib29sIHJlc3VsdCkgewogICAgICAgICBw
dXNoTWVzc2FnZVByb2Nlc3NlZCA9IHRydWU7CiAgICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdEV4cGVj
dGVkTWVzc2FnZSk7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZwdXNoTWVzc2FnZVBy
b2Nlc3NlZCk7Cit9CiAKLSAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOwor
VEVTVF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRFbXB0eVB1c2gp
Cit7CisgICAgcnVuVGVzdChAIlJlY2VpdmVkOiBudWxsIGRhdGEiLCBAeyB9KTsKK30KKworVEVT
VF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRBRVNHQ01QdXNoKQor
eworICAgIHJ1blRlc3QoQCJSZWNlaXZlZDogdGVzdCBhZXNnY20gcGF5bG9hZCIsIEB7CisgICAg
ICAgIEAiY29udGVudF9lbmNvZGluZyI6IEAiYWVzZ2NtIiwKKyAgICAgICAgQCJhc19wdWJsaWNr
ZXkiOiBAIkJDLUFnWU1ocW16YW1IN19BdW0wWXZJZDhGVjEtdW1nSHdlSk5lNlhRMUlNQW0zRTI5
bG9XWHFUUm5kaWJ4SDI3a0pLV2NJYnl5bXVuZE9ETWZWeF9VTSIsCisgICAgICAgIEAiYXNfc2Fs
dCI6IEAidGtQVDV4RGVOMGxBa1NjNmxaVWtOZyIsCisgICAgICAgIEAicGF5bG9hZCI6IEAiby91
NHl2Y1hJMW5hcCt6eUlPQmJXWGRMcWoxcUhHMmNYK0tWaEFkQlFqMUdWQXQ3bFE9PSIKKyAgICB9
KTsKK30KKworVEVTVF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRB
RVMxMjhHQ01QdXNoKQoreworICAgIC8vIEZyb20gZXhhbXBsZSBpbiBSRkM4MjkxIFNlY3Rpb24g
NS4KKyAgICBTdHJpbmcgcGF5bG9hZEJhc2U2NFVSTCA9ICJER3Y2cmExbmxZZ0RDUzFGUm5iemx3
QUFFQUJCQlA0ejlLc042bkdSVGJWWUlfYzdWSlNQUVRCdGtnY3kyN21sbWxNb1pJSWdEbGw2ZTN2
Q1lMb2NJbm1ZV0FtUzZUbHpBQzh3RXFLSzZQQnJ1M2psN0FfeWw5NWJRcHU2Y1ZQVHBLNE1xZ2tm
MUNYenRMVkJTdDJLczNvWndidXdYUFhMV3lvdUJXTFZXR05XUWV4U2dTeHNqX1F1bGN5NGEtZk4i
X3M7CisgICAgU3RyaW5nIHBheWxvYWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhiYXNl
NjRVUkxEZWNvZGUocGF5bG9hZEJhc2U2NFVSTCkudmFsdWUoKSk7CisKKyAgICBydW5UZXN0KEAi
UmVjZWl2ZWQ6IFdoZW4gSSBncm93IHVwLCBJIHdhbnQgdG8gYmUgYSB3YXRlcm1lbG9uIiwgQHsK
KyAgICAgICAgQCJjb250ZW50X2VuY29kaW5nIjogQCJhZXMxMjhnY20iLAorICAgICAgICBAInBh
eWxvYWQiOiAoTlNTdHJpbmcgKilwYXlsb2FkQmFzZTY0CisgICAgfSk7Cit9CisKK1RFU1RfRihX
ZWJQdXNoRFRlc3QsIFN1YnNjcmliZVRlc3QpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNv
dXJjZSA9IFIiSFRNTCgKKyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdD4KKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3
LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3
YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgcmVzdWx0ID0g
bnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSBhd2Fp
dCByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKKyAgICAgICAgICAgICAgICB1
c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TZXJ2ZXJL
ZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmVzdWx0
ID0gc3Vic2NyaXB0aW9uLnRvSlNPTigpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOworICAgICAgICB9CisgICAgICAgIHdpbmRvdy53
ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsK
KyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4g
b2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW21fbm90aWZp
Y2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7Cisg
ICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisg
ICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKKworICAgIEFTU0VSVF9UUlVFKFtvYmogaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9u
YXJ5IGNsYXNzXV0pOworCisgICAgTlNEaWN0aW9uYXJ5ICpzdWJzY3JpcHRpb24gPSBvYmouZ2V0
KCk7CisgICAgQVNTRVJUX1RSVUUoW3N1YnNjcmlwdGlvbltAImVuZHBvaW50Il0gaGFzUHJlZml4
OkAiaHR0cHM6Ly8iXSk7CisgICAgQVNTRVJUX1RSVUUoW3N1YnNjcmlwdGlvbltAImtleXMiXSBp
c0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CisKKyAgICAvLyBTaGFyZWQgYXV0
aCBzZWNyZXQgc2hvdWxkIGJlIDE2IGJ5dGVzICgyMiBieXRlcyBpbiB1bnBhZGRlZCBiYXNlNjR1
cmwpLgorICAgIEFTU0VSVF9FUShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdW0AiYXV0aCJdIGxlbmd0
aF0sIDIydSk7CisKKyAgICAvLyBDbGllbnQgcHVibGljIGtleSBzaG91bGQgYmUgNjUgYnl0ZXMg
KDg3IGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2NHVybCkuCisgICAgQVNTRVJUX0VRKFtzdWJzY3Jp
cHRpb25bQCJrZXlzIl1bQCJwMjU2ZGgiXSBsZW5ndGhdLCA4N3UpOworfQorCitURVNUX0YoV2Vi
UHVzaERUZXN0LCBTdWJzY3JpYmVGYWlsdXJlVGVzdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogc291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0PgorICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVy
KCcvc3cuanMnKS50aGVuKGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9u
ID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7CisgICAgICAgIGxldCByZXN1
bHQgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9
IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoeworICAgICAgICAgICAg
ICAgIHVzZXJWaXNpYmxlT25seTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvblNl
cnZlcktleTogVkFMSURfU0VSVkVSX0tFWV9USEFUX0NBVVNFU19JTkpFQ1RFRF9GQUlMVVJFCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1YnNjcmlwdGlvbi50b0pTT04o
KTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gIkVycm9yOiAi
ICsgZTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5u
b3RlLnBvc3RNZXNzYWdlKHJlc3VsdCk7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgKUhU
TUwiOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG9iaiA9IG5pbDsKKyAgICBfX2Jsb2Nr
IGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFttX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyIHNl
dE1lc3NhZ2VIYW5kbGVyOl4oaWQgbWVzc2FnZSkgeworICAgICAgICBvYmogPSBtZXNzYWdlOwor
ICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KHNvdXJjZSwg
IiIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAvLyBTcGVj
IHNheXMgdGhhdCBhbiBlcnJvciBpbiB0aGUgcHVzaCBzZXJ2aWNlIHNob3VsZCBiZSBhbiBBYm9y
dEVycm9yLgorICAgIEFTU0VSVF9UUlVFKFtvYmogaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xh
c3NdXSk7CisgICAgQVNTRVJUX1RSVUUoW29iaiBoYXNQcmVmaXg6QCJFcnJvcjogQWJvcnRFcnJv
ciJdKTsKK30KKworVEVTVF9GKFdlYlB1c2hEVGVzdCwgVW5zdWJzY3JpYmVUZXN0KQoreworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBzb3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9Ii9j
b25zdGFudHMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgbmF2aWdhdG9yLnNlcnZp
Y2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBj
b25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsK
KyAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBs
ZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmli
ZSh7CisgICAgICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAg
ICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGxldCByZXN1bHQxID0gYXdhaXQgc3Vic2NyaXB0aW9uLnVuc3Vic2Ny
aWJlKCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0MiA9IGF3YWl0IHN1YnNjcmlwdGlvbi51bnN1
YnNjcmliZSgpOworICAgICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdDEsIHJlc3VsdDJdOworICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOwor
ICAgICAgICB9CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9z
dE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisK
KyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBk
b25lID0gZmFsc2U7CisgICAgW21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2Fn
ZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIC8vIEZpcnN0IHVuc3Vi
c2NyaWJlIHNob3VsZCBzdWNjZWVkLiBTZWNvbmQgb25lIHNob3VsZCBmYWlsIHNpbmNlIHRoZSBm
aXJzdCBvbmUgcmVtb3ZlZCB0aGUgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlLgorICAgIGlkIGV4
cGVjdGVkID0gQFtAKDEpLCBAKDApXTsKKyAgICBBU1NFUlRfVFJVRShbb2JqIGlzRXF1YWw6ZXhw
ZWN0ZWRdKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451003</attachid>
            <date>2022-02-05 15:31:13 -0800</date>
            <delta_ts>2022-02-05 16:01:40 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>bug-235857-20220205153113.patch</filename>
            <type>text/plain</type>
            <size>93151</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBkY2I3ZDQxM2Q4M2YxZTU4ZTBiZTZk
NjFiMjAzMDk5OTA0NDI4YTIuLmQ3ZDIzYWY1MDU3MmM1ZTcwYjg2ZjJlMWE2YTU2MzQ3MDE3M2E2
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgUHVzaEFQSUVuYWJsZWQgdG8gV2ViS2l0TGVn
YWN5IHNvIHdlIGNhbiBlbmFibGUgaXQgb24gaW4gQVBJIHRlc3RzIHZpYSBfV0tFeHBlcmltZW50
YWxGZWF0dXJlLgorCisgICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sOgorCiAyMDIyLTAyLTA1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgVGhyZWFkIHN1c3BlbmQgYW5kIHJlc3VtZSBzaG91bGQg
dGFrZSBhIGdsb2JhbCBsb2NrIHRvIGF2b2lkIGRlYWRsb2NrCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkyN2I1NjIy
MjQ3ZDlkNTg3NTI0MTc3NzFkMWMwNzc2YzE0MjhkMzAuLmFkMWFlM2IwMjdlNGJiZTQzMDRkY2Ew
Njg1M2I1MzE2YTgxMjYwYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDIyLTAxLTI4
ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoU2VydmljZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1ODU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRz
IFB1c2hTZXJ2aWNlIHRvIHdlYnB1c2hkLiBJdCBoYW5kbGVzIHJlcXVlc3RzIHRvIGNyZWF0ZSwg
cmVtb3ZlLCBhbmQgZ2V0IHB1c2gKKyAgICAgICAgc3Vic2NyaXB0aW9ucy4gSXQgYWxzbyBkZWNy
eXB0cyBpbmNvbWluZyBwdXNoZXMgYW5kIHBhc3MgdGhlbSBiYWNrIHRvIHRoZSBVSSBwcm9jZXNz
IHZpYSB0aGUKKyAgICAgICAgZXhpc3RpbmcgbWFjaGluZXJ5IGluIFdlYlB1c2hEYWVtb24uCisK
KyAgICAgICAgUHVzaFNlcnZpY2UgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRoIHR3byBvYmplY3Rz
OgorCisgICAgICAgIDEuIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjogdGhpcyBjcmVhdGVzIGFuZCBy
ZW1vdmVzIHB1c2ggc3Vic2NyaXB0aW9ucyBmcm9tIHRoZSBwdXNoIHNlcnZlci4KKyAgICAgICAg
ICAgSXQgYWxzbyByZWNlaXZlcyBpbmNvbWluZyBwdXNoZXMgZnJvbSB0aGUgcHVzaCBzZXJ2ZXIu
CisgICAgICAgIDIuIFB1c2hEYXRhYmFzZTogdGhpcyBwZXJzaXN0cyBwdXNoIHN1YnNjcmlwdGlv
bnMgdG8gZGlzay4KKworICAgICAgICBTZXZlcmFsIHRoaW5ncyBhcmUgbm90IHlldCBpbXBsZW1l
bnRlZDsgZm9yIGluc3RhbmNlLCB3ZSBjdXJyZW50bHkgYWx3YXlzIGdyYW50IGEgcGFnZSB0aGUK
KyAgICAgICAgcGVybWlzc2lvbiB0byByZWNlaXZlIHB1c2hlcy4gVGhpcyB3aWxsIGJlIGZpeGVk
IGluIGZ1dHVyZSBwYXRjaGVzLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4g
VGhlIGN1cnJlbnQgdGVzdHMgdXNlIGEgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbiB0aGF0IHZl
bmRzCisgICAgICAgIHN1YnNjcmlwdGlvbiB3aXRoIGZpeGVkIGRhdGEsIGJ1dCB0aGlzIGNhbiBi
ZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9X
S01haW4uaDoKKyAgICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbToKKyAgICAgICAg
KFdLV2ViUHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XZWJQdXNoTWVz
c2FnZUNvY29hLm1tOiBhZGQgYWJpbGl0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIGVtcHR5
IHZzLiBudWxsIHBheWxvYWQuCisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdlOjpmcm9t
RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdlOjp0b0RpY3Rpb25h
cnkgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlB1c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAg
ICAqIFNoYXJlZC9XZWJQdXNoTWVzc2FnZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQdXNoTWVz
c2FnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiB3ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmg6CisgICAg
ICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFdl
YlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNsaWVudEtleXMpOgor
ICAgICAgICAoV2ViUHVzaEQ6Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1YnNjcmliZSk6
CisgICAgICAgIChXZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6dW5zdWJzY3Jp
YmUpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpjb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZGF0YWJhc2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpk
aWRSZWNlaXZlUHVzaE1lc3NhZ2UpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLm1t
OiBBZGRlZC4KKyAgICAgICAgKFdlYlB1c2hEOjp1cGRhdGVUb3BpY0xpc3RzKToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNo
U2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2
aWNlOjpQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1c2hTdWJzY3JpcHRp
b25Gcm9tUmVjb3JkKToKKyAgICAgICAgKFdlYlB1c2hEOjptYWtlUHVzaFRvcGljKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OmJ1bmRsZUlkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6c2NvcGUpOgorICAgICAgICAoV2Vi
UHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6UHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpQdXNoU2VydmljZVJlcXVlc3RJbXBs
KToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpmdWxmaWxsKToK
KyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpyZWplY3QpOgorICAg
ICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlwdGlvblJl
cXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OnN0YXJ0
SW50ZXJuYWwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OlN1YnNjcmli
ZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW1w
bCk6CisgICAgICAgIChXZWJQdXNoRDo6U3Vic2NyaWJlUmVxdWVzdDo6YXR0ZW1wdFRvUmVjb3Zl
ckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKToKKyAgICAgICAgKFdlYlB1c2hEOjpVbnN1
YnNjcmliZVJlcXVlc3Q6OlVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChXZWJQdXNoRDo6
VW5zdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEludGVybmFsKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6Z2V0U3Vic2NyaXB0aW9uKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6c3Vic2NyaWJlKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6dW5zdWJzY3JpYmUpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1
c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChXZWJQ
dXNoRDo6bWFrZVJhd1B1c2hNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vydmlj
ZTo6ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24u
bW06CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNs
aWVudEtleXMpOgorICAgICAgICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb24uaDoKKyAgICAgICAg
KiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6Ok1lc3NhZ2VJ
bmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6OmVuY29kZVJlcGx5KToK
KyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0TW9ja1B1c2hTZXJ2aWNlKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVz
aEQ6OkRhZW1vbjo6c2V0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6
cnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6aW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYlB1c2hEOjpE
YWVtb246OmhhbmRsZUluY29taW5nUHVzaCk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpn
ZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN1YnNj
cmliZVRvUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6dW5zdWJzY3Jp
YmVGcm9tUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0UHVzaFN1
YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpnZXRQdXNoUGVybWlzc2lv
blN0YXRlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oOgorICAgICAg
ICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
dXNoRGFlbW9uTWFpbik6CisgICAgICAgICogd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJw
dXNoZC5tYWMucGxpc3Q6CisgICAgICAgICogd2VicHVzaGQvd2VicHVzaGQuY3BwOgorICAgICAg
ICAobWFpbik6CisKIDIwMjItMDItMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0
aW9uIHRvIGhhdmUgYSBzaW5nbGUgYmFja2luZyBzdG9yZSB0cmF2ZXJzYWwgZnVuY3Rpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4
cGVyaW1lbnRhbC55YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZl
cmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKaW5kZXggNWI0ZDNiNjI1NzE3NTMyNTU0ZjNhZDcyYTRk
YjQ1YTY5ZWNhODVlNi4uMDVmNzdmMzI1OTYwN2FiZDBmNzczY2Q1MjY3NThkZWM3ZjY5ZDhlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsLnlhbWwKKysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKQEAgLTExMjIsNiArMTEyMiw4IEBAIFB1c2hB
UElFbmFibGVkOgogICBkZWZhdWx0VmFsdWU6CiAgICAgV2ViQ29yZToKICAgICAgIGRlZmF1bHQ6
IGZhbHNlCisgICAgV2ViS2l0TGVnYWN5OgorICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJL
aXQ6CiAgICAgICBkZWZhdWx0OiBmYWxzZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvQ29jb2EvV0tNYWluLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2Ev
V0tNYWluLmgKaW5kZXggMzAzNzhmODU1M2FmZjVjM2RhMzRmYjk4ZjIzN2JhZTE1Njk4MDNhMi4u
OWNmODRkMjc0NGZhN2RlYmZiMDcxZGYxMjNlZDEyNjlhNDdmNTI3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaApAQCAtMzQsNyArMzQsNyBAQCBleHRlcm4gIkMiIHsK
IAogV0tfRVhQT1JUIGludCBXS1hQQ1NlcnZpY2VNYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiog
YXJndikgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiBXS19FWFBP
UlQgaW50IFdLQWRBdHRyaWJ1dGlvbkRhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBh
cmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwotV0tfRVhQT1JUIGludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFy
KiogYXJndikgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKK1dLX0VYUE9SVCBpbnQgV0tXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2Nv
YS9XS01haW4ubW0KaW5kZXggZGUyZTlmN2E1YmQ1NWY5MWRlODdlMWE5M2FhZjg5MDczZGZiZmQ0
MS4uOTdkNzg1ZjY5ZjI2MWFhZmNlMjVkOGQ5MTc2NzE0NGYyM2U5ZTA1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tCkBAIC00MCw3ICs0MCw3IEBAIGludCBXS0Fk
QXR0cmlidXRpb25EYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKICAgICBy
ZXR1cm4gV2ViS2l0OjpQQ01EYWVtb25NYWluKGFyZ2MsIGFyZ3YpOwogfQogCi1pbnQgV0tXZWJQ
dXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgV0tXZWJQdXNo
RGFlbW9uTWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6
V2ViUHVzaERhZW1vbk1haW4oYXJnYywgYXJndik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db2NvYS9XZWJQdXNoTWVzc2FnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbQppbmRleCBmMTI5MzhiYzRkZGYxZGU0
OTFkOTA5ZThiN2FmZGE2NTJkMGM5MDdiLi41YzU1NDM4NjZjNzhhNjMzYmQxZTgyMjgwZGIwODUy
MzA5NGZjYjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJQdXNo
TWVzc2FnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hN
ZXNzYWdlQ29jb2EubW0KQEAgLTM5LDIxICszOSwzMCBAQCBzdGQ6Om9wdGlvbmFsPFdlYlB1c2hN
ZXNzYWdlPiBXZWJQdXNoTWVzc2FnZTo6ZnJvbURpY3Rpb25hcnkoTlNEaWN0aW9uYXJ5ICpkaWN0
aQogICAgIGlmICghdXJsIHx8ICFbdXJsIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBOU0RhdGEgKnB1c2hEYXRhID0gW2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYktpdFB1c2hEYXRhS2V5XTsKLSAgICBpZiAoIXB1c2hE
YXRhIHx8ICFbcHVzaERhdGEgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0pCisgICAgaWQg
cHVzaERhdGEgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6V2ViS2l0UHVzaERhdGFLZXldOwor
ICAgIEJPT0wgaXNOdWxsID0gcHVzaERhdGEgPT0gW05TTnVsbCBudWxsXTsKKyAgICBCT09MIGlz
RGF0YSA9IFtwdXNoRGF0YSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXTsKKworICAgIGlm
ICghaXNOdWxsICYmICFpc0RhdGEpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4geyB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB7IHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihwdXNoRGF0YS5ieXRlcyksIHB1c2hEYXRhLmxlbmd0aCB9LAotICAgICAgICBV
UkwgeyB1cmwgfQotICAgIH0gfTsKKyAgICBXZWJQdXNoTWVzc2FnZSBtZXNzYWdlIHsgeyB9LCBV
UkwgeyB1cmwgfSB9OworICAgIGlmIChpc0RhdGEpIHsKKyAgICAgICAgTlNEYXRhICpkYXRhID0g
KE5TRGF0YSAqKXB1c2hEYXRhOworICAgICAgICBtZXNzYWdlLnB1c2hEYXRhID0gVmVjdG9yPHVp
bnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxl
bmd0aCB9OworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlOwogfQogCiBOU0RpY3Rpb25hcnkg
KldlYlB1c2hNZXNzYWdlOjp0b0RpY3Rpb25hcnkoKSBjb25zdAogewotICAgIGF1dG8gbnNEYXRh
ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpwdXNoRGF0YS5kYXRhKCkg
bGVuZ3RoOnB1c2hEYXRhLnNpemUoKV0pOworICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YTsK
KyAgICBpZiAocHVzaERhdGEpCisgICAgICAgIG5zRGF0YSA9IG5zRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cHVzaERhdGEtPmRhdGEoKSBsZW5ndGg6cHVzaERh
dGEtPnNpemUoKV0pOworCiAgICAgcmV0dXJuIEB7Ci0gICAgICAgIFdlYktpdFB1c2hEYXRhS2V5
IDogbnNEYXRhLmdldCgpLAorICAgICAgICBXZWJLaXRQdXNoRGF0YUtleSA6IG5zRGF0YSA/IG5z
RGF0YS5nZXQoKSA6IFtOU051bGwgbnVsbF0sCiAgICAgICAgIFdlYktpdFB1c2hSZWdpc3RyYXRp
b25VUkxLZXkgOiAoTlNVUkwgKilyZWdpc3RyYXRpb25VUkwKICAgICB9OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCmluZGV4IGZjNDdkYzRmMTI3
NDg3MjRiMWI1N2M1NzJjMTQ5YjM4NzhlYzBhNWIuLmYzZjdiYmU2M2Y0ZWQzNWVkY2YzZTJhYWFk
OTNmYjNlNDkyOWZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hE
YWVtb25Db25zdGFudHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9u
Q29uc3RhbnRzLmgKQEAgLTQzLDYgKzQzLDcgQEAgZW51bSBjbGFzcyBNZXNzYWdlVHlwZSA6IHVp
bnQ4X3QgewogICAgIFNldERlYnVnTW9kZUlzRW5hYmxlZCwKICAgICBVcGRhdGVDb25uZWN0aW9u
Q29uZmlndXJhdGlvbiwKICAgICBJbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcsCisgICAgSW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLAogICAgIEdldFBlbmRpbmdQdXNoTWVz
c2FnZXMsCiAgICAgU3Vic2NyaWJlVG9QdXNoU2VydmljZSwKICAgICBVbnN1YnNjcmliZUZyb21Q
dXNoU2VydmljZSwKQEAgLTU5LDYgKzYwLDcgQEAgaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5k
c1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJl
cXVlc3RTeXN0ZW1Ob3RpZmljYXRpb25QZXJtaXNzaW9uOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6
OkdldFBlbmRpbmdQdXNoTWVzc2FnZXM6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0UHVz
aE1lc3NhZ2VGb3JUZXN0aW5nOgorICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRl
ZFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpTdWJzY3JpYmVU
b1B1c2hTZXJ2aWNlOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlVuc3Vic2NyaWJlRnJvbVB1c2hT
ZXJ2aWNlOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFB1c2hTdWJzY3JpcHRpb246CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViUHVzaE1lc3NhZ2UuaAppbmRleCBmOWU0M2YzMzNkNTY4NDg4YzJmYmUx
ZTZlYmMxMWQ2MjMzNGNmOGU3Li4xZjRlZmFjOTg0YjUyMjJkYmQxMGJlOGFhMzBjN2U1YTc4YmU5
OTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hNZXNzYWdlLmgKQEAgLTM3LDcgKzM3LDcg
QEAgc3RydWN0IFdlYlB1c2hNZXNzYWdlIHsKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViUHVzaE1lc3NhZ2U+IGRlY29kZShEZWNvZGVyJik7CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gcHVzaERhdGE7CisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IHB1c2hEYXRhOwogICAgIFVSTCByZWdpc3RyYXRpb25VUkw7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBXZWJQdXNoTWVzc2FnZTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpv
cHRpb25hbDxXZWJQdXNoTWVzc2FnZT4gV2ViUHVzaE1lc3NhZ2U6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBwdXNoRGF0YTsK
KyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+Pj4gcHVzaERh
dGE7CiAgICAgZGVjb2RlciA+PiBwdXNoRGF0YTsKICAgICBpZiAoIXB1c2hEYXRhKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGM3YzMxYmM1NTdiNTVkNTE3MDVmYzM5ZDdlNjc5Yzk0
YzZhMGFmMy4uODI3OGU1MDI3NGU1MDBlZTFlOWRmYTY4ZmNmZTY1NjYzYmM2NjQxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NDYs
NyArOTQ2LDcgQEAKIAkJNTEyOTM1RTQxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxl
UGFnZUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQ
YWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJNTEyOUVCMTIyM0QwREU3QjAwQUYxQ0Q3
IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEyOUVCMTEyM0QwREU3ODAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNo
YXJlZC5oICovOyB9OwogCQk1MTJDRDY5ODI3MjFFRkM4MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1v
bkNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMkNENjk3MjcyMUVGQzMwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbi5o
ICovOyB9OwotCQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0
YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEy
Q0Q2OTkyNzIxRjA0OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCAqLzsgfTsK
KwkJNTEyQ0Q2OUEyNzIxRjBBOTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk5Mjcy
MUYwNDkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyRTM0RTUxMzBCNEQwNTAwQUJE
MTlBIC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0EzM0I0MTMwQjMwOEMwMEY4MENCNSAvKiBXS0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTEyRUNDMzUyNzE5NkFEQjAwMDg5QjY2IC8qIFByaXZhdGVDbGlj
a01lYXN1cmVtZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUNCOTMwRkUyNkU4MDIxNjAwMzJCMUMwIC8qIFByaXZhdGVDbGlja01l
YXN1cmVtZW50Q29ubmVjdGlvbi5oICovOyB9OwogCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAg
LyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4OEYxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCAqLzsgfTsKQEAgLTE5OTgsNiArMTk5OCw4IEBACiAJ
CUU1Q0JBNzY3MjdBMzE4RTEwMERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1Q0JBNzYwMjdBMzE4Nzkw
MERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCAqLzsgfTsKIAkJRTVDQkE3NjgyN0EzMThF
MTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVDQkE3NjIyN0EzMTg3OTAwREY3ODU4IC8qIFVuaWZp
ZWRTb3VyY2UxMTcuY3BwICovOyB9OwogCQlFNURFRkE2ODI2RjhGNDI2MDBBQjY4REIgLyogUGhv
dG9zVUlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU1REVGQTY3MjZGOEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQSS5oICovOyB9OworCQlFQjM2
QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQ
dXNoU2VydmljZS5oICovOyB9OworCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNl
cnZpY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
QjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi87IH07CiAJCUVCQThE
M0FCMjdBNUUzMTMwMENCNzkwMCAvKiBBcHBsZVB1c2hTZXJ2aWNlU1BJLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQTI3QTVFMzEzMDBDQjc5
MDAgLyogQXBwbGVQdXNoU2VydmljZVNQSS5oICovOyB9OwogCQlFQkE4RDNCMjI3QTVFMzNGMDBD
Qjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyog
QXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi87IH07CiAJCUVCQThEM0IzMjdBNUUzM0Yw
MENCNzkwMCAvKiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBRDI3QTVFMzNFMDBDQjc5MDAgLyog
TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovOyB9OwpAQCAtNjQ1OSw2ICs2NDYxLDggQEAK
IAkJRTVERUZBNjcyNkY4RjQyNjAwQUI2OERCIC8qIFBob3Rvc1VJU1BJLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBob3Rvc1VJU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJE
Mjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNo
ZC5tYWMucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJFMjc1QUUx
MzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLmlvcy5wbGlzdCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5pb3Mu
cGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVCMzZCMTY2MjdBN0I0NTAwMDUw
RTAwRCAvKiBQdXNoU2VydmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
dXNoU2VydmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjM2QjE2NzI3QTdC
NDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBQdXNoU2VydmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRUJBOEQzQUEyN0E1RTMxMzAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VTUEkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGVQdXNoU2VydmljZVNQSS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyogQXBw
bGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUQyN0E1RTMzRTAwQ0I3OTAwIC8qIE1vY2tQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1B1c2hT
ZXJ2aWNlQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwOTgs
NiArMTAxMDIsOCBAQAogCQkJCTUxNjBFOTU4Mjc0QzBEODgwMDU2NzM4OCAvKiBQdXNoQXBwQnVu
ZGxlLm1tICovLAogCQkJCTUxRjdCQjc5Mjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29u
bmVjdGlvbi5oICovLAogCQkJCTUxRjdCQjdBMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50
Q29ubmVjdGlvbi5tbSAqLywKKwkJCQlFQjM2QjE2NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNl
cnZpY2UuaCAqLywKKwkJCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2Uu
bW0gKi8sCiAJCQkJRUJBOEQzQUYyN0E1RTMzRjAwQ0I3OTAwIC8qIFB1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5oICovLAogCQkJCUVCQThEM0IxMjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNv
bm5lY3Rpb24ubW0gKi8sCiAJCQkJNTE3QjVGNzcyNzVFOTc5NTAwMkRDMjJEIC8qIHdlYnB1c2hk
LmNwcCAqLywKQEAgLTEzMjUwLDYgKzEzMjU2LDcgQEAKIAkJCQk1MTdCNUY4MTI3NUU5N0I2MDAy
REMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0QyNzVF
OTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4g
SGVhZGVycyAqLywKKwkJCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUVCQThEM0I1MjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUExRTY4ODcwMUY2RTJCQUIwMDcw
MDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBDMjI3RTI0NTEx
MzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTU1MDksNiArMTU1MTYsNyBAQAogCQkJCTJENTRDMzFCMjEyRjREQTYwMDQ5QzE3
NCAvKiBQcm9jZXNzTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGODIyNzVF
OTdCNjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTdC
NUY3QjI3NUU5N0E5MDAyREMyMkQgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gaW4gU291cmNl
cyAqLywKKwkJCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4g
U291cmNlcyAqLywKIAkJCQlFQkE4RDNCNzI3QTVFMzNGMDBDQjc5MDAgLyogUHVzaFNlcnZpY2VD
b25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyN0YyNDUxMTMwQTAwRUQ2MTRE
IC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUEwQzIyNUUyNDM1NzVDRDAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbSBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaAppbmRleCA3NzY5YmI2YmRkNTgyOGU3YjE2NGMxNjdjODQ2MGNmZGJk
N2MwNDAwLi5iOTUzYmI5YzEyZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3ZGY0NmQ5NGEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApA
QCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigp
OwogICAgIH5Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCk7CiAKKyAgICBXZWJDb3JlOjpQdXNo
Q3J5cHRvOjpDbGllbnRLZXlzIGdlbmVyYXRlQ2xpZW50S2V5cygpIGZpbmFsOworCiAgICAgdm9p
ZCBzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiB0b3BpYywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
YXBpZFB1YmxpY0tleSwgU3Vic2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKICAgICB2b2lkIHVu
c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFw
aWRQdWJsaWNLZXksIFVuc3Vic2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4
IGRiZWZhNzRhZWNkOWE5ZWEwZTQxOTgzMzg2OGUzMDhkM2Q3NmY2MDMuLmM0Y2YyZTY3OWI5MmJm
OTIzNTYxYzE1OGMyM2QzNjgwMWQ4NzgzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAgLTI2LDYgKzI2LDEwIEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIK
IAorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OjpQdXNoQ3J5cHRvOworCiBuYW1lc3BhY2UgV2ViUHVzaEQgewogCiBNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkKQEAgLTM0LDE0ICszOCwzMCBA
QCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkK
IAogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6fk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24o
KSA9IGRlZmF1bHQ7CiAKLXZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2NyaWJl
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFN1YnNjcmliZUhhbmRsZXIm
JiBoYW5kbGVyKQorQ2xpZW50S2V5cyBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0
ZUNsaWVudEtleXMoKQogewotICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21h
aW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1c2Vy
SW5mbzpuaWxdKTsKKyAgICAvLyBFeGFtcGxlIHZhbHVlcyBmcm9tIFJGQzgyOTEgU2VjdGlvbiA1
LgorICAgIGF1dG8gcHVibGljS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCQ1Z4c3I3Tl9lTmdWUnF2
SHREMHpUWnNFYzYtVlYtSnZMZXhocVV6T1JjeGFPemk2LUFZV1h2VEJIbTRianlQanM3VmQ4cFpH
SDZTUnBrTnRvSUFpdzQiX3MpLnZhbHVlKCk7CisgICAgYXV0byBwcml2YXRlS2V5ID0gYmFzZTY0
VVJMRGVjb2RlKCJxMWRYcHczVXBUNVZPbXVfY2ZfdjZpaDA3QWVtczNuanhJLUpXZ0xjTTk0Il9z
KS52YWx1ZSgpOworICAgIGF1dG8gc2VjcmV0ID0gYmFzZTY0VVJMRGVjb2RlKCJCVEJaTXFISDZy
NFR0czdKX2FTSWdnIl9zKS52YWx1ZSgpOworCisgICAgcmV0dXJuIENsaWVudEtleXMgeyBQMjU2
REhLZXlQYWlyIHsgV1RGTW92ZShwdWJsaWNLZXkpLCBXVEZNb3ZlKHByaXZhdGVLZXkpIH0sIFdU
Rk1vdmUoc2VjcmV0KSB9OworfQorCit2b2lkIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1
YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGlj
S2V5LCBTdWJzY3JpYmVIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBhdXRvIGFsd2F5c1JlamVj
dGVkS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCRUF4YVVNbzFzOHRqT1J4SmZuU1N2V2hZYjR1NTFr
ZzFoV1Qyc185Z3BWN1p4YXIxcEZfMkJROEFuY3VBZFMyQm9MaE40cWF4ekJ5MkN3SEU4QkJ6V2ci
X3MpLnZhbHVlKCk7CisgICAgaWYgKHZhcGlkUHVibGljS2V5ID09IGFsd2F5c1JlamVjdGVkS2V5
KSB7CisgICAgICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJXZWJQ
dXNoIiBjb2RlOi0xIHVzZXJJbmZvOm5pbF0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaGFuZGxlcihAImh0dHBzOi8vd2Via2l0Lm9yZy9wdXNoIiwgbmlsKTsKIH0KIAogdm9pZCBN
b2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBVbnN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQogewotICAg
IGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWlu
IGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKKyAgICBoYW5k
bGVyKHRydWUsIG5pbCk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IE1vY2tQdXNoU2VydmljZUNvbm5l
Y3Rpb246OmVuYWJsZWRUb3BpY3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9QdXNoU2VydmljZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZlNDE1ZTAwOGRkNjMwNTEwNTgyNGY4Y2ZiMDI2OTVhZmMzMjNmZWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUHVzaFNl
cnZpY2VDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRhYmFz
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaFN1YnNjcmlwdGlvbkRhdGEuaD4KKyNpbmNsdWRl
IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitjbGFzcyBHZXRT
dWJzY3JpcHRpb25SZXF1ZXN0OworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0OworY2xhc3MgU3Vi
c2NyaWJlUmVxdWVzdDsKK2NsYXNzIFVuc3Vic2NyaWJlUmVxdWVzdDsKKworY2xhc3MgUHVzaFNl
cnZpY2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVzaW5n
IEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcm
IGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJik+OworCisgICAgc3Rh
dGljIHZvaWQgY3JlYXRlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYp
OworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU1vY2tTZXJ2aWNlKEluY29taW5nUHVzaE1lc3NhZ2VI
YW5kbGVyJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2
aWNlPiYmKT4mJik7CisgICAgflB1c2hTZXJ2aWNlKCk7CisKKyAgICBQdXNoU2VydmljZUNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KKyAgICBXZWJDb3Jl
OjpQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQorCisgICAg
dm9pZCBnZXRTdWJzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0
ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNl
cHRpb25EYXRhPiYpPiYmKTsKKyAgICB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRs
ZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
dmFwaWRQdWJsaWNLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2Vi
Q29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYp
OworICAgIHZvaWQgdW5zdWJzY3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNjb3BlLCBXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNl
cHRpb25EYXRhPiYpPiYmKTsKKworICAgIHZvaWQgZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25S
ZXF1ZXN0KEdldFN1YnNjcmlwdGlvblJlcXVlc3QmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlU3Vi
c2NyaWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0Jik7CisgICAgdm9pZCBkaWRDb21wbGV0ZVVu
c3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3QmKTsKKworICAgIHZvaWQgZGlkUmVj
ZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9KTsKKworcHJpdmF0ZToKKyAgICBQ
dXNoU2VydmljZShVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiYmLCBVbmlxdWVSZWY8
V2ViQ29yZTo6UHVzaERhdGFiYXNlPiYmLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmKTsK
KworICAgIHVzaW5nIFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCA9IEhhc2hNYXA8c3RkOjp0dXBsZTxT
dHJpbmcsIFN0cmluZz4sIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+
Pj47CisgICAgdm9pZCBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVz
dE1hcCYsIHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+JiYpOworICAgIHZvaWQg
ZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiwgUHVzaFNl
cnZpY2VSZXF1ZXN0Jik7CisKKyAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlB1c2hEYXRhYmFzZT4gbV9kYXRh
YmFzZTsKKworICAgIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyIG1faW5jb21pbmdQdXNoTWVz
c2FnZUhhbmRsZXI7CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV9nZXRTdWJzY3JpcHRp
b25SZXF1ZXN0czsKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV9zdWJzY3JpYmVSZXF1ZXN0
czsKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV91bnN1YnNjcmliZVJlcXVlc3RzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2UubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNl
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmVmMmVlYjg3Y2NhZmE3ODExMjFhMzc5Y2Q3OGJlOTRlNjY5MmEyZjIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1t
CkBAIC0wLDAgKzEsNTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJQdXNoU2VydmljZS5oIgorCisjaW1wb3J0ICJBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlv
bi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTW9ja1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1B1c2hNZXNzYWdlQ3J5cHRvLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2lu
Lmg+CisjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUu
aD4KKyNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgorI2ltcG9ydCA8d3RmL3RleHQv
QmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYlB1c2hEIHsKKworc3RhdGljIHZvaWQgdXBkYXRlVG9waWNM
aXN0cyhQdXNoU2VydmljZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFB1c2hEYXRhYmFzZSYgZGF0
YWJhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgZGF0YWJhc2UuZ2V0VG9waWNzQnlXYWtlU3RhdGUoWyZjb25uZWN0aW9uLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgdG9waWNNYXApIG11
dGFibGUgeworICAgICAgICAvLyBGSVhNRTogbW92ZSB0b3BpY3MgdG8gaWdub3JlZCBsaXN0IGJh
c2VkIG9uIHVzZXIgcHJlZmVyZW5jZXMuCisgICAgICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6
VG9waWNMaXN0cyB0b3BpY0xpc3RzOworCisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAu
ZmluZChQdXNoV2FrZVN0YXRlOjpXYWtpbmcpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKKyAgICAg
ICAgICAgIHN0ZDo6c3dhcCh0b3BpY0xpc3RzLmVuYWJsZWRUb3BpY3MsIGl0LT52YWx1ZSk7Cisg
ICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpPcHBvcnR1
bmlzdGljKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAodG9w
aWNMaXN0cy5vcHBvcnR1bmlzdGljVG9waWNzLCBpdC0+dmFsdWUpOworICAgICAgICBpZiAoYXV0
byBpdCA9IHRvcGljTWFwLmZpbmQoUHVzaFdha2VTdGF0ZTo6Tm9uV2FraW5nKTsgaXQgIT0gdG9w
aWNNYXAuZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAodG9waWNMaXN0cy5ub25XYWtpbmdU
b3BpY3MsIGl0LT52YWx1ZSk7CisKKyAgICAgICAgY29ubmVjdGlvbi5zZXRUb3BpY0xpc3RzKFdU
Rk1vdmUodG9waWNMaXN0cykpOworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAg
fSk7Cit9CisKKyNpZiBIQVZFKEFQUExFX1BVU0hfU0VSVklDRV9VUkxfVE9LRU5fU1VQUE9SVCkK
Kwordm9pZCBQdXNoU2VydmljZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2Vy
dmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNzYWdl
SGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5p
cXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIGF1dG8g
dHJhbnNhY3Rpb24gPSBhZG9wdE9TT2JqZWN0KG9zX3RyYW5zYWN0aW9uX2NyZWF0ZSgiY29tLmFw
cGxlLndlYmtpdC53ZWJwdXNoZC5wdXNoLXNlcnZpY2UtaW5pdCIpKTsKKworICAgIC8vIENyZWF0
ZSB0aGUgY29ubmVjdGlvbiBBU0FQIHNvIHRoYXQgd2UgYm9vdHN0cmFwX2NoZWNrX2luIHRvIHRo
ZSBzZXJ2aWNlIGluIGEgdGltZWx5IG1hbm5lci4KKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtl
VW5pcXVlUmVmPEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uPihpbmNvbWluZ1B1c2hTZXJ2aWNl
TmFtZSk7CisKKyAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShkYXRhYmFzZVBhdGgsIFt0cmFuc2Fj
dGlvbiA9IFdURk1vdmUodHJhbnNhY3Rpb24pLCBjb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0
aW9uKSwgbWVzc2FnZUhhbmRsZXIgPSBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwgY3JlYXRpb25I
YW5kbGVyID0gV1RGTW92ZShjcmVhdGlvbkhhbmRsZXIpXShhdXRvJiYgZGF0YWJhc2VSZXN1bHQp
IG11dGFibGUgeworICAgICAgICBpZiAoIWRhdGFiYXNlUmVzdWx0KSB7CisgICAgICAgICAgICBS
RUxFQVNFX0xPRyhQdXNoLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRo
IGRhdGFiYXNlIGVycm9yIik7CisgICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlx
dWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZGF0YWJh
c2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92ZShkYXRhYmFzZVJl
c3VsdCkpOworICAgICAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2U+IHNlcnZpY2UoKm5ldyBQdXNo
U2VydmljZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3ZlKGRhdGFiYXNlKSwgV1RGTW92ZSht
ZXNzYWdlSGFuZGxlcikpKTsKKworICAgICAgICBhdXRvJiBjb25uZWN0aW9uUmVmID0gc2Vydmlj
ZS0+Y29ubmVjdGlvbigpOworICAgICAgICBhdXRvJiBkYXRhYmFzZVJlZiA9IHNlcnZpY2UtPmRh
dGFiYXNlKCk7CisKKyAgICAgICAgLy8gT25seSBwcm92aWRlIHRoZSBzZXJ2aWNlIG9iamVjdCBi
YWNrIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgd2UndmUgc3luY2VkIHRoZSB0b3BpYyBsaXN0cyBpbgor
ICAgICAgICAvLyB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgUHVzaFNlcnZpY2VDb25uZWN0aW9uL0FQ
U0Nvbm5lY3Rpb24uIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdvbid0CisgICAgICAgIC8vIHNlcnZp
Y2UgYW55IGNhbGxzIHRvIHN1YnNjcmliZS91bnN1YnNjcmliZS9ldGMuIHVudGlsIGFmdGVyIHRo
ZSB0b3BpYyBsaXN0cyBhcmUgdXAgdG8KKyAgICAgICAgLy8gZGF0ZSwgd2hpY2ggQVBTQ29ubmVj
dGlvbiBjYXJlcyBhYm91dC4KKyAgICAgICAgdXBkYXRlVG9waWNMaXN0cyhjb25uZWN0aW9uUmVm
LCBkYXRhYmFzZVJlZiwgW3RyYW5zYWN0aW9uID0gV1RGTW92ZSh0cmFuc2FjdGlvbiksIHNlcnZp
Y2UgPSBXVEZNb3ZlKHNlcnZpY2UpLCBjcmVhdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc2Vydmlj
ZS5tb3ZlVG9VbmlxdWVQdHIoKSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGxwdHI7
CisgICAgICAgIH0pOworICAgIH0pOworfQorCisjZWxzZQorCit2b2lkIFB1c2hTZXJ2aWNlOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgSW5jb21pbmdQdXNoTWVzc2FnZUhh
bmRsZXImJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZp
Y2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxlcikKK3sKKyAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1
bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKK30KKworI2VuZGlmIC8vIEhBVkUoQVBQTEVfUFVT
SF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JUKQorCit2b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGVN
b2NrU2VydmljZShJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYg
Y3JlYXRpb25IYW5kbGVyKQoreworICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKFNRTGl0ZURhdGFi
YXNlOjppbk1lbW9yeVBhdGgoKSwgW21lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShtZXNzYWdlSGFu
ZGxlciksIGNyZWF0aW9uSGFuZGxlciA9IFdURk1vdmUoY3JlYXRpb25IYW5kbGVyKV0oYXV0byYm
IGRhdGFiYXNlUmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVJlc3VsdCkg
eworICAgICAgICAgICAgY3JlYXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2Vydmlj
ZT4oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNv
bm5lY3Rpb24gPSBtYWtlVW5pcXVlUmVmPE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24+KCk7Cisg
ICAgICAgIGF1dG8gZGF0YWJhc2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIo
V1RGTW92ZShkYXRhYmFzZVJlc3VsdCkpOworICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1
bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPihuZXcgUHVzaFNlcnZpY2UoV1RGTW92ZShjb25uZWN0aW9u
KSwgV1RGTW92ZShkYXRhYmFzZSksIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpKSkpOworICAgIH0p
OworfQorCitQdXNoU2VydmljZTo6UHVzaFNlcnZpY2UoVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29u
bmVjdGlvbj4mJiBwdXNoU2VydmljZUNvbm5lY3Rpb24sIFVuaXF1ZVJlZjxQdXNoRGF0YWJhc2U+
JiYgcHVzaERhdGFiYXNlLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIGluY29taW5nUHVz
aE1lc3NhZ2VIYW5kbGVyKQorICAgIDogbV9jb25uZWN0aW9uKFdURk1vdmUocHVzaFNlcnZpY2VD
b25uZWN0aW9uKSkKKyAgICAsIG1fZGF0YWJhc2UoV1RGTW92ZShwdXNoRGF0YWJhc2UpKQorICAg
ICwgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcihXVEZNb3ZlKGluY29taW5nUHVzaE1lc3Nh
Z2VIYW5kbGVyKSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2luY29taW5nUHVzaE1lc3NhZ2VI
YW5kbGVyKTsKKworICAgIG1fY29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5pbmdGb3JQdXNoTWVzc2Fn
ZXMoW3RoaXNdKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykgeworICAg
ICAgICBkaWRSZWNlaXZlUHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKKyAgICB9KTsKK30K
KworUHVzaFNlcnZpY2U6On5QdXNoU2VydmljZSgpID0gZGVmYXVsdDsKKworc3RhdGljIFB1c2hT
dWJzY3JpcHRpb25EYXRhIG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChQdXNoUmVjb3Jk
JiYgcmVjb3JkKQoreworICAgIHJldHVybiBQdXNoU3Vic2NyaXB0aW9uRGF0YSB7CisgICAgICAg
IHJlY29yZC5pZGVudGlmaWVyLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5lbmRwb2ludCksCisg
ICAgICAgIFdURk1vdmUocmVjb3JkLmV4cGlyYXRpb25UaW1lKSwKKyAgICAgICAgV1RGTW92ZShy
ZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5jbGll
bnRQdWJsaWNLZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0KQor
ICAgIH07Cit9CisKK3N0YXRpYyBTdHJpbmcgbWFrZVB1c2hUb3BpYyhjb25zdCBTdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUpCit7CisgICAgcmV0dXJuIGJ1bmRs
ZUlkZW50aWZpZXIgKyAiICIgKyBzY29wZTsKK30KKworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Q
dXNoU2VydmljZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEFTQ0lJTGl0ZXJh
bCBkZXNjcmlwdGlvbigpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllcigpIHsgcmV0dXJuIG1fYnVuZGxlSWRlbnRpZmllcjsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgc2NvcGUoKSB7IHJldHVybiBtX3Njb3BlOyB9OworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0
KCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNl
JiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
c2NvcGUpCisgICAgICAgIDogbV9zZXJ2aWNlKHNlcnZpY2UpCisgICAgICAgICwgbV9jb25uZWN0
aW9uKHNlcnZpY2UuY29ubmVjdGlvbigpKQorICAgICAgICAsIG1fZGF0YWJhc2Uoc2VydmljZS5k
YXRhYmFzZSgpKQorICAgICAgICAsIG1fYnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVy
KQorICAgICAgICAsIG1fc2NvcGUoc2NvcGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2goKSA9IDA7CisKKyAgICBQdXNoU2VydmljZSYgbV9zZXJ2aWNlOworICAgIFB1
c2hTZXJ2aWNlQ29ubmVjdGlvbiYgbV9jb25uZWN0aW9uOworICAgIFB1c2hEYXRhYmFzZSYgbV9k
YXRhYmFzZTsKKyAgICBTdHJpbmcgbV9idW5kbGVJZGVudGlmaWVyOworICAgIFN0cmluZyBtX3Nj
b3BlOworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUHVzaFNlcnZpY2VSZXF1ZXN0Jik+IG1f
Y29tcGxldGlvbkhhbmRsZXI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlPgor
Y2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3Qg
eworcHVibGljOgorICAgIHZvaWQgc3RhcnQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1f
YnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkgfHwgbV9zY29wZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJv
ciwgIkludmFsaWQgc2VuZGVyIl9zIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgU3RyaW5nIHRyYW5zYWN0aW9uRGVzY3JpcHRpb24gPSBTdHJpbmcoImNvbS5h
cHBsZS53ZWJraXQud2VicHVzaGQ6Il9zKSArIGRlc2NyaXB0aW9uKCkgKyAiOiJfcyArIG1fYnVu
ZGxlSWRlbnRpZmllciArICI6Il9zICsgbV9zY29wZTsKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9
IGFkb3B0T1NPYmplY3Qob3NfdHJhbnNhY3Rpb25fY3JlYXRlKHRyYW5zYWN0aW9uRGVzY3JpcHRp
b24udXRmOCgpLmRhdGEoKSkpOworICAgICAgICBzdGFydEludGVybmFsKCk7CisgICAgfQorCitw
cm90ZWN0ZWQ6CisgICAgdXNpbmcgUmVzdWx0SGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgRXhwZWN0ZWQ8UmVzdWx0VHlwZSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT47
CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3RJbXBsKFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25z
dCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFJlc3VsdEhh
bmRsZXImJiByZXN1bHRIYW5kbGVyKQorICAgICAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdChzZXJ2
aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSkKKyAgICAgICAgLCBtX3Jlc3VsdEhhbmRsZXIo
V1RGTW92ZShyZXN1bHRIYW5kbGVyKSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflB1c2hT
ZXJ2aWNlUmVxdWVzdEltcGwoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRJ
bnRlcm5hbCgpID0gMDsKKworICAgIHZvaWQgZnVsZmlsbChSZXN1bHRUeXBlIHJlc3VsdCkKKyAg
ICB7CisgICAgICAgIG1fcmVzdWx0SGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICBm
aW5pc2goKTsKKyAgICB9CisKKyAgICB2b2lkIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRh
JiYgZGF0YSkKKyAgICB7CisgICAgICAgIG1fcmVzdWx0SGFuZGxlcihtYWtlVW5leHBlY3RlZChX
VEZNb3ZlKGRhdGEpKSk7CisgICAgICAgIGZpbmlzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBSZXN1bHRIYW5kbGVyIG1fcmVzdWx0SGFuZGxlcjsKKyAgICBPU09iamVjdFB0cjxvc190cmFu
c2FjdGlvbl90PiBtX3RyYW5zYWN0aW9uOworfTsKKworY2xhc3MgR2V0U3Vic2NyaXB0aW9uUmVx
dWVzdCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJbXBsPHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+PiB7CitwdWJsaWM6CisgICAgR2V0U3Vic2NyaXB0aW9u
UmVxdWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5HZXRTdWJz
Y3JpcHRpb25SZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRl
cmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdldFN1YnNjcmlwdGlvblJl
cXVlc3QiX3M7IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIGZp
bmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVz
dCgqdGhpcyk7IH0KK307CisKK0dldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlwdGlv
blJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRsZXIp
CisgICAgOiBQdXNoU2VydmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZpZXIs
IHNjb3BlLCBXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQoreworfQorCisvLyBJbXBsZW1lbnRzIHRo
ZSB3ZWJwdXNoZCBzaWRlIG9mIFB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlvbi4KK3ZvaWQgR2V0
U3Vic2NyaXB0aW9uUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCgpCit7CisgICAgbV9kYXRhYmFzZS5n
ZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIsIG1f
c2NvcGUsIFt0aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgICAgIGZ1bGZpbGwoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vi
c2NyaXB0aW9uRGF0YT4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bGZpbGwobWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKFdURk1vdmUoKnJl
c3VsdCkpKTsKKyAgICB9KTsKK30KKworY2xhc3MgU3Vic2NyaWJlUmVxdWVzdCA6IHB1YmxpYyBQ
dXNoU2VydmljZVJlcXVlc3RJbXBsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiB7Citw
dWJsaWM6CisgICAgU3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYg
YnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiB2YXBpZFB1YmxpY0tleSwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5TdWJz
Y3JpYmVSZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFs
IGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlN1YnNjcmliZVJlcXVlc3QiX3M7
IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbCB7IHN0YXJ0SW1wbChJc1JldHJ5OjpO
byk7IH0KKyAgICB2b2lkIGZpbmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlU3Vi
c2NyaWJlUmVxdWVzdCgqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIElzUmV0
cnkgeyBObywgWWVzIH07CisgICAgdm9pZCBzdGFydEltcGwoSXNSZXRyeSk7CisgICAgdm9pZCBh
dHRlbXB0VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVyRXJyb3IoU3RyaW5nJiYpOwor
ICAgIFZlY3Rvcjx1aW50OF90PiBtX3ZhcGlkUHVibGljS2V5OworfTsKKworU3Vic2NyaWJlUmVx
dWVzdDo6U3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHZhcGlkUHVibGljS2V5LCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikKKyAg
ICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwgc2Nv
cGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikpCisgICAgLCBtX3ZhcGlkUHVibGljS2V5KHZhcGlk
UHVibGljS2V5KQoreworfQorCisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBzaWRlIG9mIFB1
c2hNYW5hZ2VyLnN1YnNjcmliZSgpLgordm9pZCBTdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEltcGwo
SXNSZXRyeSBpc1JldHJ5KQoreworICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVu
dGlmaWVyQW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpcywgaXNSZXRy
eV0oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAg
ICAgICAgIGlmIChtX3ZhcGlkUHVibGljS2V5ICE9IHJlc3VsdC0+c2VydmVyVkFQSURQdWJsaWNL
ZXkpCisgICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJD
b3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlByb3ZpZGVkIGFwcGxpY2F0aW9uU2VydmVyS2V5IGRv
ZXMgbm90IG1hdGNoIHRoZSBrZXkgaW4gdGhlIGV4aXN0aW5nIHN1YnNjcmlwdGlvbi4iX3MgfSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnVsZmlsbChtYWtlUHVzaFN1YnNj
cmlwdGlvbkZyb21SZWNvcmQoV1RGTW92ZSgqcmVzdWx0KSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0b3BpYyA9IG1ha2VQdXNoVG9waWMobV9idW5k
bGVJZGVudGlmaWVyLCBtX3Njb3BlKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnN1YnNjcmliZSh0
b3BpYywgbV92YXBpZFB1YmxpY0tleSwgW3RoaXMsIGlzUmV0cnksIHRvcGljXShOU1N0cmluZyAq
ZW5kcG9pbnQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChlcnJv
cikgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB1c2UgcG9pbnRlciBjb21wYXJpc29uIG9u
Y2UgQVBTVVJMVG9rZW5FcnJvckRvbWFpbiBpcyBleHRlcm5lZC4KKyAgICAgICAgICAgICAgICBp
ZiAoaXNSZXRyeSA9PSBJc1JldHJ5OjpObyAmJiBbZXJyb3IuZG9tYWluIGlzRXF1YWxUb1N0cmlu
ZzpAIkFQU1VSTFRva2VuRXJyb3JEb21haW4iXSAmJiBlcnJvci5jb2RlID09IEFQU1VSTFRva2Vu
RXJyb3JDb2RlVG9waWNBbHJlYWR5SW5GaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0
ZW1wdFRvUmVjb3ZlckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFdURk1vdmUodG9waWMp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoTWFuYWdlci5zdWJzY3JpYmUoYnVu
ZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAle3NlbnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkb21h
aW46ICV7cHVibGljfXMgY29kZTogJWxsZCkiLCBtX2J1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRh
dGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgpLCBlcnJvci5kb21haW4uVVRGOFN0cmluZywgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oZXJyb3IuY29kZSkpOworICAgICAgICAgICAgICAgIHJlamVjdChX
ZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJvciwgIkZhaWxlZCBkdWUg
dG8gaW50ZXJuYWwgc2VydmljZSBlcnJvciJfcyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gY2xpZW50S2V5cyA9IG1fc2Vydmlj
ZS5jb25uZWN0aW9uKCkuZ2VuZXJhdGVDbGllbnRLZXlzKCk7CisgICAgICAgICAgICBQdXNoUmVj
b3JkIHJlY29yZDsKKyAgICAgICAgICAgIHJlY29yZC5idW5kbGVJRCA9IG1fYnVuZGxlSWRlbnRp
ZmllcjsKKyAgICAgICAgICAgIHJlY29yZC5zZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGVGcm9tU3RyaW5nKG1fc2NvcGUpLT5kYXRhKCkudG9TdHJpbmcoKTsKKyAgICAgICAg
ICAgIHJlY29yZC5zY29wZSA9IG1fc2NvcGU7CisgICAgICAgICAgICByZWNvcmQuZW5kcG9pbnQg
PSBlbmRwb2ludDsKKyAgICAgICAgICAgIHJlY29yZC50b3BpYyA9IFdURk1vdmUodG9waWMpOwor
ICAgICAgICAgICAgcmVjb3JkLnNlcnZlclZBUElEUHVibGljS2V5ID0gbV92YXBpZFB1YmxpY0tl
eTsKKyAgICAgICAgICAgIHJlY29yZC5jbGllbnRQdWJsaWNLZXkgPSBXVEZNb3ZlKGNsaWVudEtl
eXMuY2xpZW50UDI1NkRIS2V5UGFpci5wdWJsaWNLZXkpOworICAgICAgICAgICAgcmVjb3JkLmNs
aWVudFByaXZhdGVLZXkgPSBXVEZNb3ZlKGNsaWVudEtleXMuY2xpZW50UDI1NkRIS2V5UGFpci5w
cml2YXRlS2V5KTsKKyAgICAgICAgICAgIHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0ID0gV1RGTW92
ZShjbGllbnRLZXlzLnNoYXJlZEF1dGhTZWNyZXQpOworCisgICAgICAgICAgICBtX2RhdGFiYXNl
Lmluc2VydFJlY29yZChyZWNvcmQsIFt0aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPRyhQdXNoLCAiUHVzaE1hbmFnZXIuc3Vic2NyaWJlKGJ1bmRsZUlEOiAle3B1YmxpY31zLCBz
Y29wZTogJXtzZW5zaXRpdmV9cykgZmFpbGVkIHdpdGggZGF0YWJhc2UgZXJyb3IiLCBtX2J1bmRs
ZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpB
Ym9ydEVycm9yLCAiRmFpbGVkIGR1ZSB0byBpbnRlcm5hbCBkYXRhYmFzZSBlcnJvciJfcyB9KTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IHBhcnRpYWwgdG9waWMgbGlzdCB1cGRhdGVzLgor
ICAgICAgICAgICAgICAgIHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFiYXNl
LCBbdGhpcywgcmVjb3JkID0gV1RGTW92ZSgqcmVzdWx0KV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZnVsZmlsbChtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92
ZShyZWNvcmQpKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKKy8vIFRyaWVzIHRvIHJlY292ZXIgZnJvbSBhIHRvcGljIGJl
aW5nIG1vdmVkIHRvIHRoZSBnbG9iYWwgcGF1c2VkIGZpbHRlciAocmRhcjovLzg4MTM5MzMwKS4K
K3ZvaWQgU3Vic2NyaWJlUmVxdWVzdDo6YXR0ZW1wdFRvUmVjb3ZlckZyb21Ub3BpY0FscmVhZHlJ
bkZpbHRlckVycm9yKFN0cmluZyYmIHRvcGljKQoreworICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRp
c3BhdGNoKFt0aGlzLCB0b3BpYyA9IFdURk1vdmUodG9waWMpXSgpIG11dGFibGUgeworICAgICAg
ICAvLyBUaGlzIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcGF1c2VkIHRvcGljIGFuZCB0ZWxscyBh
cHNkIHRvIGZvcmdldCBhYm91dCB0aGUgdG9waWMuCisgICAgICAgIGF1dG8gb3JpZ2luYWxUb3Bp
Y3MgPSBtX2Nvbm5lY3Rpb24uaWdub3JlZFRvcGljcygpOworICAgICAgICBhdXRvIGF1Z21lbnRl
ZFRvcGljcyA9IG9yaWdpbmFsVG9waWNzOworICAgICAgICBhdWdtZW50ZWRUb3BpY3MuYXBwZW5k
KHRvcGljKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3MoV1RGTW92ZShh
dWdtZW50ZWRUb3BpY3MpKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3Mo
V1RGTW92ZShvcmlnaW5hbFRvcGljcykpOworCisgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRp
c3BhdGNoKFt0aGlzXSgpIG11dGFibGUgeworICAgICAgICAgICAgc3RhcnRJbXBsKElzUmV0cnk6
Olllcyk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCitjbGFzcyBVbnN1YnNjcmliZVJlcXVl
c3QgOiBwdWJsaWMgUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDxib29sPiB7CitwdWJsaWM6CisgICAg
VW5zdWJzY3JpYmVSZXF1ZXN0KFB1c2hTZXJ2aWNlJiwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwg
UmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5VbnN1YnNjcmliZVJlcXVlc3QoKSA9IGRl
ZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAgICBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24oKSBjb25z
dCBmaW5hbCB7IHJldHVybiAiVW5zdWJzY3JpYmVSZXF1ZXN0Il9zOyB9CisgICAgdm9pZCBzdGFy
dEludGVybmFsKCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbCB7IG1fc2VydmljZS5k
aWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdCgqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBQ
dXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXI7Cit9Owor
CitVbnN1YnNjcmliZVJlcXVlc3Q6OlVuc3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYgc2Vy
dmljZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3Bl
LCBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBSZXN1
bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikKKyAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwo
c2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikp
CisgICAgLCBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXIoc3Vic2NyaXB0aW9uSWRlbnRpZmllcikK
K3sKK30KKworLy8gSW1wbGVtZW50cyB0aGUgd2VicHVzaGQgc2lkZSBvZiBQdXNoU3Vic2NyaXB0
aW9uLnVuc3Vic2NyaWJlLgordm9pZCBVbnN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW50ZXJuYWwo
KQoreworICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUo
bV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpc10oYXV0byYmIHJlc3VsdCkgbXV0YWJs
ZSB7CisgICAgICAgIGlmICghcmVzdWx0IHx8IG1fc3Vic2NyaXB0aW9uSWRlbnRpZmllciAhPSBy
ZXN1bHQtPmlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGZ1bGZpbGwoZmFsc2UpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0b3BpYyA9IG1ha2VQdXNo
VG9waWMobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlKTsKKyAgICAgICAgbV9jb25uZWN0aW9u
LnVuc3Vic2NyaWJlKHRvcGljLCByZXN1bHQtPnNlcnZlclZBUElEUHVibGljS2V5LCBbdGhpc10o
Ym9vbCB1bnN1YnNjcmliZWQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICAgICAgICAgIC8vIElmIHdlIGZhaWwgdG8gdW5zdWJzY3JpYmUg
ZnJvbSBhcHNkLCBqdXN0IGRyb3AgYSBsb2cuIFdlIHN0aWxsIHdhbnQgdG8gY29udGludWUgYW5k
IHJlbW92ZSB0aGUgcmVjb3JkIGZyb20gb3VyIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhIHN0
YXRlIG1pc21hdGNoIGJldHdlZW4gb3VyIGRhdGFiYXNlIGFuZCBhcHNkJ3MgZGF0YWJhc2UuCisg
ICAgICAgICAgICBpZiAoIXVuc3Vic2NyaWJlZCkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xP
RyhQdXNoLCAiUHVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZShidW5kbGVJRDogJXtwdWJsaWN9
cywgc2NvcGU6ICV7c2Vuc2l0aXZlfXMpIGZhaWxlZCB3aXRoIGRvbWFpbjogJXtwdWJsaWN9cyBj
b2RlOiAlbGxkKSIsIG1fYnVuZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0
ZjgoKS5kYXRhKCksIGVycm9yLmRvbWFpbi5VVEY4U3RyaW5nID86ICJub25lIiwgc3RhdGljX2Nh
c3Q8aW50NjRfdD4oZXJyb3IuY29kZSkpOworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNFRF9QQVJB
TSh1bnN1YnNjcmliZWQpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyNlbmRp
ZgorCisgICAgICAgICAgICBtX2RhdGFiYXNlLnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihtX3N1
YnNjcmlwdGlvbklkZW50aWZpZXIsIFt0aGlzXShib29sIHJlbW92ZWQpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgIGlmICghcmVtb3ZlZCkgeworICAgICAgICAgICAgICAgICAgICBmdWxmaWxs
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IHBhcnRpYWwgdG9waWMgbGlzdCB1
cGRhdGVzLgorICAgICAgICAgICAgICAgIHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBt
X2RhdGFiYXNlLCBbdGhpc10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmls
bCh0cnVlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworLy8gT25seSBhbGxvdyBvbmUgcmVxdWVzdCBwZXIgKGJ1bmRsZUlk
ZW50aWZpZXIsIHNjb3BlKSB0byBwcm9jZWVkIGF0IG9uY2UuIEZvciBpbnN0YW5jZSwgaWYgYSBn
aXZlbgorLy8gcGFnZSBjYWxscyBQdXNoTWFuYWdlci5zdWJzY3JpYmUoKSB0d2ljZSBpbiBhIHJv
dywgdGhlIHNlY29uZCBzdWJzY3JpYmUgY2FsbCB3b24ndCBzdGFydCB1bnRpbAorLy8gdGhlIGZp
cnN0IG9uZSBjb21wbGV0ZXMuCit2b2lkIFB1c2hTZXJ2aWNlOjplbnF1ZXVlUHVzaFNlcnZpY2VS
ZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYgbWFwLCBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNl
cnZpY2VSZXF1ZXN0PiYmIHJlcXVlc3QpCit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfdHVw
bGUocmVxdWVzdC0+YnVuZGxlSWRlbnRpZmllcigpLCByZXF1ZXN0LT5zY29wZSgpKTsKKyAgICBh
dXRvIGFkZFJlc3VsdCA9IG1hcC5lbnN1cmUoa2V5LCBbXSgpIHsKKyAgICAgICAgcmV0dXJuIERl
cXVlPHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+PiB7IH07CisgICAgfSk7CisK
KyAgICBhdXRvIGFkZGVkUmVxdWVzdCA9IHJlcXVlc3QuZ2V0KCk7CisgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZShyZXF1ZXN0KSk7CisKKyAgICBpZiAoYWRkUmVz
dWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZGVkUmVxdWVzdC0+c3RhcnQoKTsKK30KKwordm9p
ZCBQdXNoU2VydmljZTo6ZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1
ZXN0TWFwJiBtYXAsIFB1c2hTZXJ2aWNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBhdXRvIGtl
eSA9IHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0LmJ1bmRsZUlkZW50aWZpZXIoKSwgcmVxdWVzdC5z
Y29wZSgpKTsKKyAgICBhdXRvIHJlcXVlc3RRdWV1ZUl0ID0gbWFwLmZpbmQoa2V5KTsKKworICAg
IFJFTEVBU0VfQVNTRVJUKHJlcXVlc3RRdWV1ZUl0ICE9IG1hcC5lbmQoKSk7CisgICAgYXV0byYg
cmVxdWVzdFF1ZXVlID0gcmVxdWVzdFF1ZXVlSXQtPnZhbHVlOworICAgIFJFTEVBU0VfQVNTRVJU
KHJlcXVlc3RRdWV1ZS5zaXplKCkgPiAwKTsKKyAgICBhdXRvIGN1cnJlbnRSZXF1ZXN0ID0gcmVx
dWVzdFF1ZXVlLnRha2VGaXJzdCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRSZXF1ZXN0
LmdldCgpID09ICZyZXF1ZXN0KTsKKworICAgIFB1c2hTZXJ2aWNlUmVxdWVzdCogbmV4dFJlcXVl
c3QgPSBudWxscHRyOworICAgIGlmICghcmVxdWVzdFF1ZXVlLnNpemUoKSkKKyAgICAgICAgbWFw
LnJlbW92ZShyZXF1ZXN0UXVldWVJdCk7CisgICAgZWxzZQorICAgICAgICBuZXh0UmVxdWVzdCA9
IHJlcXVlc3RRdWV1ZS5maXJzdCgpLmdldCgpOworCisgICAgLy8gRXZlbiBpZiB0aGVyZSdzIG5v
IG5leHQgcmVxdWVzdCB0byBzdGFydCwgaG9sZCBvbiB0byBjdXJyZW50UmVxdWVzdCB1bnRpbCB0
aGUgbmV4dCB0dXJuIG9mIHRoZSBydW4gbG9vcCBzaW5jZSB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9m
IGV4ZWN1dGluZyB0aGUgZmluaXNoKCkgbWVtYmVyIGZ1bmN0aW9uIG9mIGN1cnJlbnRSZXF1ZXN0
LgorICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFtjdXJyZW50UmVxdWVzdCA9IFdURk1v
dmUoY3VycmVudFJlcXVlc3QpLCBuZXh0UmVxdWVzdF0geworICAgICAgICBpZiAobmV4dFJlcXVl
c3QpCisgICAgICAgICAgICBuZXh0UmVxdWVzdC0+c3RhcnQoKTsKKyAgICB9KTsKK30KKwordm9p
ZCBQdXNoU2VydmljZTo6Z2V0U3Vic2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBF
eHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiwgV2Vi
Q29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1
ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1fZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdHMsIG1ha2VVbmlx
dWU8R2V0U3Vic2NyaXB0aW9uUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3Bl
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpk
aWRDb21wbGV0ZUdldFN1YnNjcmlwdGlvblJlcXVlc3QoR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCYg
cmVxdWVzdCkKK3sKKyAgICBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdChtX2dldFN1YnNjcmlw
dGlvblJlcXVlc3RzLCByZXF1ZXN0KTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6c3Vic2NyaWJl
KGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1ZXVlUHVz
aFNlcnZpY2VSZXF1ZXN0KG1fc3Vic2NyaWJlUmVxdWVzdHMsIG1ha2VVbmlxdWU8U3Vic2NyaWJl
UmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCB2YXBpZFB1YmxpY0tleSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlk
Q29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KFN1YnNjcmliZVJlcXVlc3QmIHJlcXVlc3QpCit7Cisg
ICAgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV9zdWJzY3JpYmVSZXF1ZXN0cywgcmVxdWVz
dCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OnVuc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVu
ZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlvbklkZW50
aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGVucXVldWVQdXNoU2VydmljZVJlcXVlc3QobV91bnN1YnNjcmliZVJl
cXVlc3RzLCBtYWtlVW5pcXVlPFVuc3Vic2NyaWJlUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50
aWZpZXIsIHNjb3BlLCBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSkpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJl
UmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZmluaXNoZWRQdXNo
U2VydmljZVJlcXVlc3QobV91bnN1YnNjcmliZVJlcXVlc3RzLCByZXF1ZXN0KTsKK30KKworZW51
bSBjbGFzcyBDb250ZW50RW5jb2RpbmcgeworICAgIEVtcHR5LAorICAgIEFFU0dDTSwKKyAgICBB
RVMxMjhHQ00KK307CisKK3N0cnVjdCBSYXdQdXNoTWVzc2FnZSB7CisgICAgU3RyaW5nIHRvcGlj
OworICAgIENvbnRlbnRFbmNvZGluZyBlbmNvZGluZzsKKworICAgIC8vIE9ubHkgc2V0IGlmIGVu
Y29kaW5nIGlzIG5vdCBDb250ZW50RW5jb2Rpbmc6OkVtcHR5LgorICAgIFZlY3Rvcjx1aW50OF90
PiBlbmNyeXB0ZWRQYXlsb2FkOworCisgICAgLy8gT25seSBzZXQgaWYgZW5jb2RpbmcgaXMgQ29u
dGVudEVuY29kaW5nOjpBRVNHQ00uCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclB1YmxpY0tl
eTsKKyAgICBWZWN0b3I8dWludDhfdD4gc2FsdDsKKworfTsKKworc3RhdGljIHN0ZDo6b3B0aW9u
YWw8UmF3UHVzaE1lc3NhZ2U+IG1ha2VSYXdQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5T
RGljdGlvbmFyeSogdXNlckluZm8pCit7CisgICAgUmF3UHVzaE1lc3NhZ2UgbWVzc2FnZTsKKwor
ICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBtZXNzYWdlLnRvcGljID0gdG9waWM7Cisg
ICAgICAgIE5TU3RyaW5nICpjb250ZW50RW5jb2RpbmcgPSB1c2VySW5mb1tAImNvbnRlbnRfZW5j
b2RpbmciXTsKKyAgICAgICAgTlNTdHJpbmcgKnBheWxvYWRCYXNlNjQgPSB1c2VySW5mb1tAInBh
eWxvYWQiXTsKKworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5sZW5ndGggfHwgIXBheWxv
YWRCYXNlNjQubGVuZ3RoKSB7CisgICAgICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVu
dEVuY29kaW5nOjpFbXB0eTsKKyAgICAgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKFtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAiYWVzMTI4
Z2NtIl0pCisgICAgICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVudEVuY29kaW5nOjpB
RVMxMjhHQ007CisgICAgICAgIGVsc2UgaWYgKFtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3Ry
aW5nOkAiYWVzZ2NtIl0pIHsKKyAgICAgICAgICAgIG1lc3NhZ2UuZW5jb2RpbmcgPSBDb250ZW50
RW5jb2Rpbmc6OkFFU0dDTTsKKworICAgICAgICAgICAgTlNTdHJpbmcgKnNlcnZlclB1YmxpY0tl
eUJhc2U2NFVSTCA9IHVzZXJJbmZvW0AiYXNfcHVibGlja2V5Il07CisgICAgICAgICAgICBOU1N0
cmluZyAqc2FsdEJhc2U2NFVSTCA9IHVzZXJJbmZvW0AiYXNfc2FsdCJdOworICAgICAgICAgICAg
aWYgKCFzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwgfHwgIXNhbHRCYXNlNjRVUkwpIHsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgYWVzZ2NtLWVuY3J5cHRlZCBw
dXNoIHdpdGhvdXQgcmVxdWlyZWQgc2VydmVyIGtleSBhbmQgc2FsdCIpOworICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1
dG8gc2VydmVyUHVibGljS2V5ID0gYmFzZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2
NFVSTCk7CisgICAgICAgICAgICBhdXRvIHNhbHQgPSBiYXNlNjRVUkxEZWNvZGUoc2FsdEJhc2U2
NFVSTCk7CisgICAgICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleSB8fCAhc2FsdCkgeworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBhZXNnY20tZW5jcnlwdGVk
IHB1c2ggd2l0aCBpbXByb3Blcmx5IGVuY29kZWQgc2VydmVyIGtleSBhbmQgc2FsdCIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG1lc3NhZ2Uuc2VydmVyUHVibGljS2V5ID0gV1RGTW92ZSgqc2VydmVyUHVibGljS2V5
KTsKKyAgICAgICAgICAgIG1lc3NhZ2Uuc2FsdCA9IFdURk1vdmUoKnNhbHQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIHB1c2ggd2l0
aCB1bmtub3duIGNvbnRlbnQgZW5jb2Rpbmc6ICV7cHVibGljfXMiLCBjb250ZW50RW5jb2Rpbmcu
VVRGOFN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9
CisKKyAgICAgICAgYXV0byBwYXlsb2FkID0gYmFzZTY0RGVjb2RlKHBheWxvYWRCYXNlNjQpOwor
ICAgICAgICBpZiAoIXBheWxvYWQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJE
cm9wcGluZyBwdXNoIHdpdGggaW1wcm9wZXJseSBlbmNvZGVkIHBheWxvYWQiKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICAgICAgbWVzc2FnZS5lbmNy
eXB0ZWRQYXlsb2FkID0gV1RGTW92ZSgqcGF5bG9hZCk7CisgICAgfQorCisgICAgcmV0dXJuIG1l
c3NhZ2U7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0
cmluZyogdG9waWMsIE5TRGljdGlvbmFyeSogdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIG1lc3NhZ2VSZXN1bHQgPSBt
YWtlUmF3UHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKKyAgICBpZiAoIW1lc3NhZ2VSZXN1
bHQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YWJhc2UtPmdldFJlY29yZEJ5VG9waWMo
dG9waWMsIFt0aGlzLCBtZXNzYWdlID0gV1RGTW92ZSgqbWVzc2FnZVJlc3VsdCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiByZWNvcmRSZXN1
bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIXJlY29yZFJlc3VsdCkgeworICAgICAgICAgICAg
UkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIGluY29taW5nIHB1c2ggc2VudCB0byB1bmtub3du
IHRvcGljOiAle3NlbnNpdGl2ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgYXV0byByZWNvcmQgPSBXVEZNb3ZlKCpyZWNvcmRSZXN1bHQpOworCisg
ICAgICAgIGlmIChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRFbmNvZGluZzo6RW1wdHkpIHsK
KyAgICAgICAgICAgIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIocmVjb3JkLmJ1bmRsZUlE
LCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlIHsgeyB9LCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkg
fSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgUHVzaENyeXB0bzo6Q2xpZW50S2V5cyBjbGllbnRLZXlz
IHsKKyAgICAgICAgICAgIHsgV1RGTW92ZShyZWNvcmQuY2xpZW50UHVibGljS2V5KSwgV1RGTW92
ZShyZWNvcmQuY2xpZW50UHJpdmF0ZUtleSkgfSwKKyAgICAgICAgICAgIFdURk1vdmUocmVjb3Jk
LnNoYXJlZEF1dGhTZWNyZXQpCisgICAgICAgIH07CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8dWludDhfdD4+IGRlY3J5cHRlZFBheWxvYWQ7CisgICAgICAgIGlmIChtZXNzYWdlLmVu
Y29kaW5nID09IENvbnRlbnRFbmNvZGluZzo6QUVTMTI4R0NNKQorICAgICAgICAgICAgZGVjcnlw
dGVkUGF5bG9hZCA9IGRlY3J5cHRBRVMxMjhHQ01QYXlsb2FkKGNsaWVudEtleXMsIG1lc3NhZ2Uu
ZW5jcnlwdGVkUGF5bG9hZCk7CisgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0g
Q29udGVudEVuY29kaW5nOjpBRVNHQ00pCisgICAgICAgICAgICBkZWNyeXB0ZWRQYXlsb2FkID0g
ZGVjcnlwdEFFU0dDTVBheWxvYWQoY2xpZW50S2V5cywgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXks
IG1lc3NhZ2Uuc2FsdCwgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkKTsKKworICAgICAgICBpZiAo
IWRlY3J5cHRlZFBheWxvYWQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9w
cGluZyBpbmNvbWluZyBwdXNoIGR1ZSB0byBkZWNyeXB0aW9uIGVycm9yIGZvciB0b3BpYyAle3Nl
bnNpdGl2ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKHJlY29yZC5idW5kbGVJRCwgV2ViS2l0
OjpXZWJQdXNoTWVzc2FnZSB7IFdURk1vdmUoKmRlY3J5cHRlZFBheWxvYWQpLCBVUkwoVVJMKCks
IHJlY29yZC5zY29wZSkgfSk7CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmluZGV4IDJjMTQxNDRjNjFiYjNlZmFlNGVkMzI4
ZTE1MjBkM2VjZjA4MzE3ZWYuLjE5ODE0M2Y1Njk3Y2QyOGM2OTI4ZDQ1NjhjMjFjMzI1NDkyMGQy
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24u
aApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPFdlYkNvcmUv
UHVzaE1lc3NhZ2VDcnlwdG8uaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
ICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTQ3
LDYgKzQ4LDggQEAgcHVibGljOgogICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbigpID0gZGVmYXVs
dDsKICAgICB2aXJ0dWFsIH5QdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlB1c2hDcnlwdG86OkNsaWVudEtleXMgZ2VuZXJhdGVDbGllbnRL
ZXlzKCk7CisKICAgICB1c2luZyBTdWJzY3JpYmVIYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChOU1N0cmluZyAqLCBOU0Vycm9yICopPjsKICAgICB2aXJ0dWFsIHZvaWQgc3Vic2NyaWJl
KGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNL
ZXksIFN1YnNjcmliZUhhbmRsZXImJikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IDUzNDMzMjVlYjVlYTIwM2U4ZGY2ZmY4
MzAzY2I5YjBmZmM4MTMyMWIuLjkyZjgxNDI3N2E4MzgxNTMxNjg4YjBlNDg1MTgyZDQzZDg1Y2M4
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tCkBAIC0yOCw4ICsyOCwxNSBAQAogCiAjaW1wb3J0IDx3dGYvV29ya1F1ZXVlLmg+CiAKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViUHVzaEQgewogCitQdXNoQ3J5
cHRvOjpDbGllbnRLZXlzIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlz
KCkKK3sKKyAgICByZXR1cm4gUHVzaENyeXB0bzo6Q2xpZW50S2V5czo6Z2VuZXJhdGUoKTsKK30K
Kwogdm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3Nh
Z2VzKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgaGFuZGxlcikKIHsKICAgICBtX2luY29t
aW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uLmgKaW5kZXggYWYzMTg1N2RiODczN2E5YjY0Mzk1ZmIwMDA0NzUw
YTk1OGU1NDhkMC4uMDI4MDg0ZTUyYjRhMGRiYjNjMTQ5YmU2Yzk3MzZmNzU3NWU3ODdiMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKKysrIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgIlB1c2hDbGllbnRDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUHVzaE1lc3NhZ2VG
b3JUZXN0aW5nLmgiCisjaW5jbHVkZSAiUHVzaFNlcnZpY2UuaCIKICNpbmNsdWRlICJXZWJQdXNo
RGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9u
Q29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKQEAgLTYxLDYgKzYyLDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3Rpb25BZGRlZCh4cGNfY29ubmVjdGlvbl90KTsK
ICAgICB2b2lkIGNvbm5lY3Rpb25SZW1vdmVkKHhwY19jb25uZWN0aW9uX3QpOwogCisgICAgdm9p
ZCBzdGFydE1vY2tQdXNoU2VydmljZSgpOworICAgIHZvaWQgc3RhcnRQdXNoU2VydmljZShjb25z
dCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBTdHJpbmcmIHB1c2hEYXRh
YmFzZVBhdGgpOworICAgIHZvaWQgaGFuZGxlSW5jb21pbmdQdXNoKGNvbnN0IFN0cmluZyYgYnVu
ZGxlSWRlbnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYmKTsKKwogICAgIC8vIE1lc3Nh
Z2UgaGFuZGxlcnMKICAgICB2b2lkIGVjaG9Ud2ljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3Qg
U3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiByZXBseVNl
bmRlcik7CiAgICAgdm9pZCByZXF1ZXN0U3lzdGVtTm90aWZpY2F0aW9uUGVybWlzc2lvbihDbGll
bnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiByZXBseVNlbmRlcik7CkBAIC02OSw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dERlYnVnTW9kZUlzRW5hYmxlZChDbGllbnRDb25uZWN0aW9uKiwgYm9vbCk7CiAgICAgdm9pZCB1
cGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgV2Vi
UHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uJik7CiAgICAgdm9pZCBpbmplY3RQdXNo
TWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFB1c2hNZXNzYWdlRm9y
VGVzdGluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25z
dCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGdl
dFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiosIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+Jik+JiYgcmVwbHlTZW5k
ZXIpOwogICAgIHZvaWQgc3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiwg
Y29uc3QgVVJMJiBzY29wZVVSTCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhcHBsaWNhdGlvblNl
cnZlcktleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQ
dXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNl
bmRlcik7CiAgICAgdm9pZCB1bnN1YnNjcmliZUZyb21QdXNoU2VydmljZShDbGllbnRDb25uZWN0
aW9uKiwgY29uc3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29y
ZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcik7CkBAIC04OCw5ICs5NCwxNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGNv
bnN0IFN0cmluZyYgY2xpZW50Q29kZVNpZ25pbmdJZGVudGlmaWVyKTsKIAorICAgIHZvaWQgc2V0
UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKTsKKyAgICB2b2lkIHJ1
bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShGdW5jdGlvbjx2b2lkKCk+JiYpOworCiAgICAgQ2xp
ZW50Q29ubmVjdGlvbiogdG9DbGllbnRDb25uZWN0aW9uKHhwY19jb25uZWN0aW9uX3QpOwogICAg
IEhhc2hNYXA8eHBjX2Nvbm5lY3Rpb25fdCwgUmVmPENsaWVudENvbm5lY3Rpb24+PiBtX2Nvbm5l
Y3Rpb25NYXA7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+IG1fcHVzaFNlcnZp
Y2U7CisgICAgYm9vbCBtX3B1c2hTZXJ2aWNlU3RhcnRlZCB7IGZhbHNlIH07CisgICAgRGVxdWU8
RnVuY3Rpb248dm9pZCgpPj4gbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnM7CisKKyAgICBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+PiBtX3B1c2hNZXNz
YWdlczsKICAgICBIYXNoTWFwPFN0cmluZywgRGVxdWU8UHVzaE1lc3NhZ2VGb3JUZXN0aW5nPj4g
bV90ZXN0aW5nUHVzaE1lc3NhZ2VzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNo
RGFlbW9uLm1tCmluZGV4IGE4ZmU0OWY1MmQ3NjMyNjYzMWNhYzdkNzY2YzA5MTQ5NWU5Y2U1NWUu
LmFkZDZlM2Q4YWRmZWE4OTk4ODhmNGJhZjYxYWNjMDUzMTM2M2RjYzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1NwYW4uaD4KICNpbXBvcnQgPHd0Zi9V
UkwuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDo6V2ViUHVzaEQ7CiAKQEAgLTkxLDYgKzkyLDExIEBAIEFSR1VNRU5UUyhQdXNoTWVzc2FnZUZv
clRlc3RpbmcpCiBSRVBMWShib29sKQogRU5ECiAKK0ZVTkNUSU9OKGluamVjdEVuY3J5cHRlZFB1
c2hNZXNzYWdlRm9yVGVzdGluZykKK0FSR1VNRU5UUyhTdHJpbmcpCitSRVBMWShib29sKQorRU5E
CisKIEZVTkNUSU9OKHN1YnNjcmliZVRvUHVzaFNlcnZpY2UpCiBBUkdVTUVOVFMoVVJMLCBWZWN0
b3I8dWludDhfdD4pCiBSRVBMWShjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0
aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKQpAQCAtMTUxLDYgKzE1NywxMyBAQCBX
ZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgaW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNv
ZGVSZXBseShib29sIHJlcGx5KQogICAgIHJldHVybiBlbmNvZGVyLnRha2VCdWZmZXIoKTsKIH0K
IAorV2ViUHVzaEQ6OkVuY29kZWRNZXNzYWdlIGluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9y
VGVzdGluZzo6ZW5jb2RlUmVwbHkoYm9vbCByZXBseSkKK3sKKyAgICBXZWJLaXQ6OkRhZW1vbjo6
RW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgcmVwbHk7CisgICAgcmV0dXJuIGVuY29k
ZXIudGFrZUJ1ZmZlcigpOworfQorCiBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgZ2V0UGVuZGlu
Z1B1c2hNZXNzYWdlczo6ZW5jb2RlUmVwbHkoY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1l
c3NhZ2U+JiByZXBseSkKIHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOwpA
QCAtMjI0LDYgKzIzNyw1MSBAQCBEYWVtb24mIERhZW1vbjo6c2luZ2xldG9uKCkKICAgICByZXR1
cm4gZGFlbW9uOwogfQogCit2b2lkIERhZW1vbjo6c3RhcnRNb2NrUHVzaFNlcnZpY2UoKQorewor
ICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVu
dGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkgeworICAgICAgICBoYW5k
bGVJbmNvbWluZ1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAg
fTsKKyAgICBQdXNoU2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UoV1RGTW92ZShtZXNzYWdlSGFu
ZGxlciksIFt0aGlzXShhdXRvJiYgcHVzaFNlcnZpY2UpIG11dGFibGUgeworICAgICAgICBzZXRQ
dXNoU2VydmljZShXVEZNb3ZlKHB1c2hTZXJ2aWNlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGFl
bW9uOjpzdGFydFB1c2hTZXJ2aWNlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5h
bWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRs
ZXIgPSBbdGhpc10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1
c2hNZXNzYWdlJiYgbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxl
SWRlbnRpZmllciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6
Y3JlYXRlKGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBkYXRhYmFzZVBhdGgsIFdURk1vdmUobWVz
c2FnZUhhbmRsZXIpLCBbdGhpc10oYXV0byYmIHB1c2hTZXJ2aWNlKSBtdXRhYmxlIHsKKyAgICAg
ICAgc2V0UHVzaFNlcnZpY2UoV1RGTW92ZShwdXNoU2VydmljZSkpOworICAgIH0pOworfQorCit2
b2lkIERhZW1vbjo6c2V0UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYm
IHB1c2hTZXJ2aWNlKQoreworICAgIG1fcHVzaFNlcnZpY2UgPSBXVEZNb3ZlKHB1c2hTZXJ2aWNl
KTsKKyAgICBtX3B1c2hTZXJ2aWNlU3RhcnRlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGVuZGlu
Z1B1c2hTZXJ2aWNlRnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV29y
a1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdKCkgeworICAgICAgICB3aGlsZSAobV9wZW5k
aW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmN0
aW9uID0gbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMudGFrZUZpcnN0KCk7CisgICAgICAg
ICAgICBmdW5jdGlvbigpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpy
dW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQor
eworICAgIGlmICghbV9wdXNoU2VydmljZVN0YXJ0ZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nUHVz
aFNlcnZpY2VGdW5jdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBmdW5jdGlvbigpOworfQorCiB2b2lkIERhZW1vbjo6YnJvYWRjYXN0
RGVidWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVsIG1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0T1NPYmplY3QoeHBjX2Rp
Y3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKQEAgLTMyNSw2ICszODMsOSBA
QCB2b2lkIERhZW1vbjo6ZGVjb2RlQW5kSGFuZGxlTWVzc2FnZSh4cGNfY29ubmVjdGlvbl90IGNv
bm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lcwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdFB1
c2hNZXNzYWdlRm9yVGVzdGluZzoKICAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJl
cGx5PE1lc3NhZ2VJbmZvOjppbmplY3RQdXNoTWVzc2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5l
Y3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9y
VGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJ
bmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rp
b24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVzc2FnZXM6CiAgICAgICAg
IGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6Z2V0UGVuZGluZ1B1
c2hNZXNzYWdlcz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVw
bHlTZW5kZXIpKTsKICAgICAgICAgYnJlYWs7CkBAIC00MzEsNiArNDkyLDQ2IEBAIHZvaWQgRGFl
bW9uOjppbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVj
dGlvbiwgY29uc3QgUHVzCiAgICAgcmVwbHlTZW5kZXIodHJ1ZSk7CiB9CiAKK3ZvaWQgRGFlbW9u
OjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiog
Y29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIHJlcGx5U2VuZGVyKQoreworICAgIGlmICghY29ubmVjdGlvbi0+aG9zdEFwcEhh
c1B1c2hJbmplY3RFbnRpdGxlbWVudCgpKSB7CisgICAgICAgIGNvbm5lY3Rpb24tPmJyb2FkY2Fz
dERlYnVnTWVzc2FnZSgiQXR0ZW1wdGluZyB0byBpbmplY3QgYSBwdXNoIG1lc3NhZ2UgZnJvbSBh
biB1bmVudGl0bGVkIHByb2Nlc3MiKTsKKyAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0
aGlzLCBtZXNzYWdlID0gbWVzc2FnZSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAg
ICByZXBseVNlbmRlcihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBhdXRvIGJ5dGVzID0gbWVzc2FnZS51dGY4KCk7CisgICAgICAgIFJldGFpblB0cjxO
U0RhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVz
LmRhdGEoKSBsZW5ndGg6IGJ5dGVzLmxlbmd0aCgpXSk7CisKKyAgICAgICAgaWQgb2JqID0gW05T
SlNPTlNlcmlhbGl6YXRpb24gSlNPTk9iamVjdFdpdGhEYXRhOmRhdGEuZ2V0KCkgb3B0aW9uczow
IGVycm9yOm51bGxwdHJdOworICAgICAgICBpZiAoIW9iaiB8fCAhW29iaiBpc0tpbmRPZkNsYXNz
OltOU0RpY3Rpb25hcnkgY2xhc3NdXSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2Up
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE5TTG9nKEAiZ290IG9i
ajogJUAiLCBvYmopOworCisgICAgICAgIG1fcHVzaFNlcnZpY2UtPmRpZFJlY2VpdmVQdXNoTWVz
c2FnZShvYmpbQCJ0b3BpYyJdLCBvYmpbQCJ1c2VySW5mbyJdLCBbcmVwbHlTZW5kZXIgPSBXVEZN
b3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKHRy
dWUpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBEYWVtb246OmhhbmRsZUluY29t
aW5nUHVzaChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1l
c3NhZ2UmJiBtZXNzYWdlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9wdXNoTWVzc2FnZXMu
ZW5zdXJlKGJ1bmRsZUlkZW50aWZpZXIsIFtdIHsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxXZWJL
aXQ6OldlYlB1c2hNZXNzYWdlPiB7IH07CisgICAgfSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5hcHBlbmQoV1RGTW92ZShtZXNzYWdlKSk7CisKKyAgICBub3RpZnlDbGllbnRQdXNo
TWVzc2FnZUlzQXZhaWxhYmxlKGJ1bmRsZUlkZW50aWZpZXIpOworfQorCiB2b2lkIERhZW1vbjo6
bm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJc0F2YWlsYWJsZShjb25zdCBTdHJpbmcmIGNsaWVudENv
ZGVTaWduaW5nSWRlbnRpZmllcikKIHsKICNpZiBQTEFURk9STShNQUMpCkBAIC00NjIsNiArNTYz
LDkgQEAgdm9pZCBEYWVtb246OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlv
biogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmQKIAogICAgIFZlY3RvcjxXZWJLaXQ6OldlYlB1
c2hNZXNzYWdlPiByZXN1bHRNZXNzYWdlczsKIAorICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9w
dXNoTWVzc2FnZXMuZmluZChob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKTsgaXRlcmF0b3Ig
IT0gbV9wdXNoTWVzc2FnZXMuZW5kKCkpCisgICAgICAgIHN0ZDo6c3dhcChyZXN1bHRNZXNzYWdl
cywgaXRlcmF0b3ItPnZhbHVlKTsKKwogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Rlc3RpbmdQdXNo
TWVzc2FnZXMuZmluZChob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKTsKICAgICBpZiAoaXRl
cmF0b3IgIT0gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzLmVuZCgpKSB7CiAgICAgICAgIGZvciAoYXV0
byYgbWVzc2FnZSA6IGl0ZXJhdG9yLT52YWx1ZSkgewpAQCAtNDc2LDI1ICs1ODAsNTAgQEAgdm9p
ZCBEYWVtb246OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVj
dGlvbiwgQ29tcGxldGlvbkhhbmQKICAgICByZXBseVNlbmRlcihXVEZNb3ZlKHJlc3VsdE1lc3Nh
Z2VzKSk7CiB9CiAKLXZvaWQgRGFlbW9uOjpzdWJzY3JpYmVUb1B1c2hTZXJ2aWNlKENsaWVudENv
bm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgYXBwbGljYXRpb25TZXJ2ZXJLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2Vw
dGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2b2lkIERhZW1vbjo6c3Vic2NyaWJlVG9QdXNo
U2VydmljZShDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJM
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJD
b3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIFVOVVNFRF9QQVJB
TShhcHBsaWNhdGlvblNlcnZlcktleSk7Ci0gICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQo
V2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6Ok5vdEFsbG93ZWRFcnJvciwgIkxhY2sg
cGVybWlzc2lvbiJfcyB9KSk7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlz
LCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRp
ZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCB2YXBpZFB1YmxpY0tleSwgcmVwbHlT
ZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFt
X3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChX
ZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6SW52YWxpZFN0YXRlRXJyb3IsICJQdXNo
IHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIl9zIH0pKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcHVzaFNlcnZpY2UtPnN1YnNjcmliZShidW5kbGVJ
ZGVudGlmaWVyLCBzY29wZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUocmVwbHlTZW5kZXIpKTsK
KyAgICB9KTsKIH0KIAotdm9pZCBEYWVtb246OnVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlKENs
aWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIFdlYkNvcmU6
OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2Vw
dGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2b2lkIERhZW1vbjo6dW5zdWJzY3JpYmVGcm9t
UHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29w
ZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJD
b3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVy
KGZhbHNlKTsKKyAgICBydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIGJ1bmRsZUlk
ZW50aWZpZXIgPSBjb25uZWN0aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCksIHNj
b3BlID0gc2NvcGVVUkwuc3RyaW5nKCksIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIHJlcGx5U2Vu
ZGVyID0gV1RGTW92ZShyZXBseVNlbmRlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9w
dXNoU2VydmljZSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2Vi
Q29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVycm9yLCAiUHVzaCBz
ZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCJfcyB9KSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBtX3B1c2hTZXJ2aWNlLT51bnN1YnNjcmliZShidW5kbGVJ
ZGVudGlmaWVyLCBzY29wZSwgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgV1RGTW92ZShyZXBseVNl
bmRlcikpOworICAgIH0pOwogfQogCiB2b2lkIERhZW1vbjo6Z2V0UHVzaFN1YnNjcmlwdGlvbihD
bGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVz
aFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2Vu
ZGVyKQogewotICAgIHJlcGx5U2VuZGVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNj
cmlwdGlvbkRhdGE+IHsgfSk7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlz
LCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRp
ZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCByZXBseVNlbmRlciA9IFdURk1vdmUo
cmVwbHlTZW5kZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fcHVzaFNlcnZpY2UpIHsK
KyAgICAgICAgICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2VwdGlv
bkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2VydmljZSBpbml0aWFs
aXphdGlvbiBmYWlsZWQiX3MgfSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgbV9wdXNoU2VydmljZS0+Z2V0U3Vic2NyaXB0aW9uKGJ1bmRsZUlkZW50aWZpZXIs
IHNjb3BlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgRGFlbW9u
OjpnZXRQdXNoUGVybWlzc2lvblN0YXRlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNv
bnN0IFVSTCYgc2NvcGVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8
dWludDhfdCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKKyAg
ICAvLyBGSVhNRQorI2lmIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JU
KQorICAgIHJlcGx5U2VuZGVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdlYkNvcmU6OlB1c2hQZXJt
aXNzaW9uU3RhdGU6OkdyYW50ZWQpKTsKKyNlbHNlCiAgICAgcmVwbHlTZW5kZXIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oV2ViQ29yZTo6UHVzaFBlcm1pc3Npb25TdGF0ZTo6RGVuaWVkKSk7CisjZW5k
aWYKIH0KIAogQ2xpZW50Q29ubmVjdGlvbiogRGFlbW9uOjp0b0NsaWVudENvbm5lY3Rpb24oeHBj
X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNo
RGFlbW9uTWFpbi5oCmluZGV4IGJiZWI5NjhkZTdhNzU5ZGRmMjc2ZmMxYmE2N2QyOGI2NjZhNDg2
NDAuLmQzYzE3ZTY1ZGEzYWVjNTI0NGFiOTE2MTNiYWMzY2Y2ZTllYWEyNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmgKQEAgLTI3LDYgKzI3LDYgQEAKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQsIGNvbnN0IGNo
YXIqKik7CitpbnQgV2ViUHVzaERhZW1vbk1haW4oaW50LCBjaGFyKiopOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERh
ZW1vbk1haW4ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1t
CmluZGV4IDJhNjhlMThmYTIwMTUwNjYyMGQxYzM4MTc0NDExZWIwYWEyYmRjNTkuLjg5MjhkOGZj
OTQwZmFlZjgxYTgzNGUzMDk0NWMzNTYwNzMyN2FhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbQpAQCAtMzAsMjQgKzMwLDIxIEBACiAjaW1wb3J0ICJE
YWVtb25EZWNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25FbmNvZGVyLmgiCiAjaW1wb3J0ICJEYWVt
b25VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkxvZ0luaXRpYWxpemF0aW9uLmgiCiAjaW1wb3J0ICJX
ZWJQdXNoRGFlbW9uLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBv
cnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4KKyNpbXBvcnQgPGdldG9wdC5oPgorI2lt
cG9ydCA8d3RmL0xvZ0luaXRpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5o
PgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAKLSNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQotI2ltcG9ydCA8c2VydmVycy9ib290c3RyYXAuaD4KLSNlbHNlCi0jaW1wb3J0
IDxtYWNoL3N0ZF90eXBlcy5oPgotZXh0ZXJuICJDIiB7Ci1leHRlcm4ga2Vybl9yZXR1cm5fdCBi
b290c3RyYXBfY2hlY2tfaW4obWFjaF9wb3J0X3QgYm9vdHN0cmFwUG9ydCwgY29uc3QgY2hhciAq
c2VydmljZU5hbWUsIG1hY2hfcG9ydF90Kik7Ci19Ci0jZW5kaWYKLQogdXNpbmcgV2ViS2l0OjpE
YWVtb246OkVuY29kZWRNZXNzYWdlOwogdXNpbmcgV2ViUHVzaEQ6OkRhZW1vbjsKIAotc3RhdGlj
IGNvbnN0IGNoYXIgKmluY29taW5nUHVzaFNlcnZpY2VOYW1lID0gImNvbS5hcHBsZS5hcHMud2Vi
a2l0LndlYnB1c2hkLmluY29taW5nLXB1c2giOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBl
bnRpdGxlbWVudE5hbWUgPSAiY29tLmFwcGxlLnByaXZhdGUud2Via2l0LndlYnB1c2giX3M7Citz
dGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGRlZmF1bHRNYWNoU2VydmljZU5hbWUgPSAiY29tLmFw
cGxlLndlYmtpdC53ZWJwdXNoZC5zZXJ2aWNlIl9zOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJh
bCBkZWZhdWx0SW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSAiY29tLmFwcGxlLmFwcy53ZWJraXQu
d2VicHVzaGQuaW5jb21pbmctcHVzaCJfczsKIAogbmFtZXNwYWNlIFdlYlB1c2hEIHsKIApAQCAt
NzQsMjMgKzcxLDU1IEBAIHVzaW5nIFdlYlB1c2hEOjpjb25uZWN0aW9uUmVtb3ZlZDsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLWludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3Qg
Y2hhcioqIGFyZ3YpCitpbnQgV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQogewotICAgIGlmIChhcmdjICE9IDMgfHwgc3RyY21wKGFyZ3ZbMV0sICItLW1hY2hTZXJ2aWNl
TmFtZSIpKSB7Ci0gICAgICAgIE5TTG9nKEAidXNhZ2U6IHdlYnB1c2hkIC0tbWFjaFNlcnZpY2VO
YW1lIDxuYW1lPiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIq
IG1hY2hTZXJ2aWNlTmFtZSA9IGFyZ3ZbMl07Ci0KICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAg
ICAgICAgV2ViS2l0OjpzdGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFj
aFNlcnZpY2VOYW1lLCAiY29tLmFwcGxlLnByaXZhdGUud2Via2l0LndlYnB1c2giLCBjb25uZWN0
aW9uQWRkZWQsIGNvbm5lY3Rpb25SZW1vdmVkLCBjb25uZWN0aW9uRXZlbnRIYW5kbGVyKTsKLQot
ICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBvbmNlIHdlIGFjdHVhbGx5IHN0YXJ0IHVzaW5n
IEFQU0Nvbm5lY3Rpb24uCi0gICAgICAgIG1hY2hfcG9ydF90IGluY29taW5nTWVzc2FnZVBvcnQ7
Ci0gICAgICAgIGlmIChib290c3RyYXBfY2hlY2tfaW4oYm9vdHN0cmFwX3BvcnQsIGluY29taW5n
UHVzaFNlcnZpY2VOYW1lLCAmaW5jb21pbmdNZXNzYWdlUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQot
ICAgICAgICAgICAgTlNMb2coQCJDb3VsZG4ndCByZWdpc3RlciBmb3IgaW5jb21pbmcgcHVzaCBs
YXVuY2ggcG9ydC4iKTsKLSAgICAgICAgCiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJl
YWQoKTsKKworI2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
ICAgIFdURjo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgp
OworICAgICAgICBXZWJDb3JlOjpsb2dDaGFubmVscygpLmluaXRpYWxpemVMb2dDaGFubmVsc0lm
TmVjZXNzYXJ5KCk7CisgICAgICAgIFdlYktpdDo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9n
Q2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQgfHwgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisKKyAgICAgICAgc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0aW9uc1td
ID0geworICAgICAgICAgICAgeyAibWFjaFNlcnZpY2VOYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQs
IDAsICdtJyB9LAorICAgICAgICAgICAgeyAiaW5jb21pbmdQdXNoU2VydmljZU5hbWUiLCByZXF1
aXJlZF9hcmd1bWVudCwgMCwgJ3AnIH0sCisgICAgICAgICAgICB7ICJ1c2VNb2NrUHVzaFNlcnZp
Y2UiLCBub19hcmd1bWVudCwgMCwgJ2YnIH0KKyAgICAgICAgfTsKKworICAgICAgICBjb25zdCBj
aGFyKiBtYWNoU2VydmljZU5hbWUgPSBkZWZhdWx0TWFjaFNlcnZpY2VOYW1lOworICAgICAgICBj
b25zdCBjaGFyKiBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSA9IGRlZmF1bHRJbmNvbWluZ1B1c2hT
ZXJ2aWNlTmFtZTsKKyAgICAgICAgYm9vbCB1c2VNb2NrUHVzaFNlcnZpY2UgPSBmYWxzZTsKKwor
ICAgICAgICBpbnQgYzsKKyAgICAgICAgaW50IG9wdGlvbkluZGV4OworICAgICAgICB3aGlsZSAo
KGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiIiwgb3B0aW9ucywgJm9wdGlvbkluZGV4KSkg
IT0gLTEpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAnbSc6
CisgICAgICAgICAgICAgICAgbWFjaFNlcnZpY2VOYW1lID0gb3B0YXJnOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgaW5jb21p
bmdQdXNoU2VydmljZU5hbWUgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICB1c2VNb2NrUHVzaFNlcnZpY2UgPSB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uOiAlY1xuIiwgb3B0b3B0
KTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgV2ViS2l0OjpzdGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMo
bWFjaFNlcnZpY2VOYW1lLCBlbnRpdGxlbWVudE5hbWUsIGNvbm5lY3Rpb25BZGRlZCwgY29ubmVj
dGlvblJlbW92ZWQsIGNvbm5lY3Rpb25FdmVudEhhbmRsZXIpOworCisgICAgICAgIGlmICh1c2VN
b2NrUHVzaFNlcnZpY2UpCisgICAgICAgICAgICA6OldlYlB1c2hEOjpEYWVtb246OnNpbmdsZXRv
bigpLnN0YXJ0TW9ja1B1c2hTZXJ2aWNlKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
U3RyaW5nIGxpYnJhcnlQYXRoID0gTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMo
TlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1VzZXJEb21haW5NYXNrLCBZRVMpWzBdOworICAgICAgICAg
ICAgU3RyaW5nIHB1c2hEYXRhYmFzZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnRzKGxpYnJhcnlQYXRoLCB7ICJXZWJLaXQiLCAiV2ViUHVzaCIsICJQdXNoRGF0YWJh
c2UuZGIiIH0pOworICAgICAgICAgICAgOjpXZWJQdXNoRDo6RGFlbW9uOjpzaW5nbGV0b24oKS5z
dGFydFB1c2hTZXJ2aWNlKGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBwdXNoRGF0YWJhc2VQYXRo
KTsKKyAgICAgICAgfQogICAgIH0KICAgICBDRlJ1bkxvb3BSdW4oKTsKICAgICByZXR1cm4gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJw
dXNoZC5tYWMucGxpc3QgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQu
d2VicHVzaGQubWFjLnBsaXN0CmluZGV4IGY3MWU1OWE0MDdmM2UzYTg5MDgwMGFlM2Y0MWUwODU1
ZTUwYTdiMmEuLmIyNWFiZmY1YThlNGJkYjhmMTkyYjlmMDVlNTg0NzM5NWQzNDE1NGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5t
YWMucGxpc3QKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9jb20uYXBwbGUud2Via2l0Lndl
YnB1c2hkLm1hYy5wbGlzdApAQCAtMTksNyArMTksNyBAQAogCTxzdHJpbmc+QWRhcHRpdmU8L3N0
cmluZz4KIAk8a2V5PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KIAk8YXJyYXk+Ci0JCTxzdHJpbmc+
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvV2ViS2l0LmZyYW1ld29yay9EYWVtb25zL3dlYnB1
c2hkPC9zdHJpbmc+CisJCTxzdHJpbmc+L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvV2ViS2l0
LmZyYW1ld29yay9WZXJzaW9ucy9BL0RhZW1vbnMvd2VicHVzaGQ8L3N0cmluZz4KIAkJPHN0cmlu
Zz4tLW1hY2hTZXJ2aWNlTmFtZTwvc3RyaW5nPgogCQk8c3RyaW5nPmNvbS5hcHBsZS53ZWJraXQu
d2VicHVzaGQuc2VydmljZTwvc3RyaW5nPgogCTwvYXJyYXk+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL3dlYnB1c2hkLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2Vi
cHVzaGQuY3BwCmluZGV4IGZkMDRlNDA0NTg1OThlYzg3MzlhYzBmM2U5YThiOGYzZmJjYTFlYjgu
LjU5Y2VmMGQ5ODQzMDU1NjVhZWFkMThjMjEyMmFkM2RmZmUxNTk2MjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvd2VicHVzaGQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dL
TWFpbi5oPgogI2luY2x1ZGUgPG9zL2F2YWlsYWJpbGl0eS5oPgogCi1pbnQgbWFpbihpbnQgYXJn
YywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7
CiAgICAgV0tXZWJQdXNoRGFlbW9uTWFpbihhcmdjLCBhcmd2KTsKIH0KZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5NTlhYzY1MTk5OWM5MjQyMDlm
OWY3YTFjOTY3Y2U2NDZmYjdkZjJhLi5lMmJkMTY2ODA5ZjE1MTM5YjU4ZGFlYzczN2Y4MzRiNzgz
ZmE1ZWIyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjUgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAgLSBNb2RpZmVkIHRoZSBleGlzdGluZyBpbmplY3RlZCBwdXNo
IHRlc3QgdG8gaW5qZWN0IGRpZmZlcmVudCB0eXBlcyBvZiByZWFsIHB1c2ggb2JqZWN0cworICAg
ICAgICAgICBmcm9tIEFQUyAoYW4gZW1wdHkgcHVzaCwgYW4gYWVzZ2NtLWVuY3J5cHRlZCBwdXNo
LCBhbmQgYW4gYWVzMTI4Z2NtLWVuY3J5cHRlZCBwdXNoKS4KKyAgICAgICAgIC0gQWRkIGEgZmV3
IGJhc2ljIHRlc3QgY2FzZXMgZm9yIHN1YnNjcmliaW5nIGFuZCB1bnN1YnNjcmliaW5nIGZyb20g
cHVzaC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVz
aERhZW1vbi5tbToKKyAgICAgICAgKC1bTm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIg
c2V0TWVzc2FnZUhhbmRsZXI6XSk6CisgICAgICAgICgtW05vdGlmaWNhdGlvblNjcmlwdE1lc3Nh
Z2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpd
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RXZWJQdXNoRGFlbW9uUExpc3QpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlTWVzc2FnZURpY3Rpb25hcnkpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6c2VuZE1lc3NhZ2VUb0RhZW1vbik6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OnNlbmRDb25maWd1cmF0aW9uV2l0aEF1ZGl0VG9rZW4pOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpmdW5jdGlvbik6IERl
bGV0ZWQuCisKIDIwMjItMDItMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBUaHJlYWQgc3VzcGVuZCBhbmQgcmVzdW1lIHNob3VsZCB0YWtlIGEgZ2xvYmFs
IGxvY2sgdG8gYXZvaWQgZGVhZGxvY2sKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQppbmRleCA2ZDkyY2U5Nzg2YWY4MWM3
ODRiMTI0NDQxOWU2ZGU2MjgwM2NlODIwLi5iN2IzNGI2Y2FhNTQ3YmUzMmEzNzYyOGNjZjFhY2Rl
ZWM2ZjVkNjU5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCkBAIC0zNSwxMyArMzUsMTggQEAKICNpbXBvcnQgPFdl
YktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+
CisjaW1wb3J0IDxXZWJLaXQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oPgogI2ltcG9ydCA8V2Vi
S2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8bWFjaC9tYWNoX2luaXQuaD4KICNp
bXBvcnQgPG1hY2gvdGFzay5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9CYXNlNjQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQog
Cit1c2luZyBXZWJLaXQ6OldlYlB1c2hEOjpNZXNzYWdlVHlwZTsKKwogc3RhdGljIGJvb2wgYWxl
cnRSZWNlaXZlZCA9IGZhbHNlOwogQGludGVyZmFjZSBOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVs
ZWdhdGUgOiBOU09iamVjdDxXS1VJRGVsZWdhdGVQcml2YXRlPgogQGVuZApAQCAtNjEsNiArNjYs
MjYgQEAgc3RhdGljIGJvb2wgYWxlcnRSZWNlaXZlZCA9IGZhbHNlOwogCiBAZW5kCiAKK0BpbnRl
cmZhY2UgTm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgOiBOU09iamVjdDxXS1Njcmlw
dE1lc3NhZ2VIYW5kbGVyPiB7CisgICAgQmxvY2tQdHI8dm9pZChpZCk+IF9tZXNzYWdlSGFuZGxl
cjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VI
YW5kbGVyCisKKy0gKHZvaWQpc2V0TWVzc2FnZUhhbmRsZXI6KHZvaWQgKF4pKGlkKSloYW5kbGVy
Cit7CisgICAgX21lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjsKK30KKworLSAodm9pZCl1c2VyQ29u
dGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250
cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdl
Cit7CisgICAgaWYgKF9tZXNzYWdlSGFuZGxlcikKKyAgICAgICAgX21lc3NhZ2VIYW5kbGVyKG1l
c3NhZ2UuYm9keSk7Cit9CisKK0BlbmQKKwogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBz
dGF0aWMgUmV0YWluUHRyPE5TVVJMPiB0ZXN0V2ViUHVzaERhZW1vbkxvY2F0aW9uKCkKQEAgLTc5
LDcgKzEwNCw4IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICp0ZXN0V2Vi
UHVzaERhZW1vblBMaXN0KE5TVVJMICpzdG9yYWdlTG9jYXRpCiAgICAgICAgIEAiUHJvZ3JhbUFy
Z3VtZW50cyIgOiBAWwogICAgICAgICAgICAgdGVzdFdlYlB1c2hEYWVtb25Mb2NhdGlvbigpLmdl
dCgpLnBhdGgsCiAgICAgICAgICAgICBAIi0tbWFjaFNlcnZpY2VOYW1lIiwKLSAgICAgICAgICAg
IEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIgorICAgICAgICAgICAgQCJv
cmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiLAorICAgICAgICAgICAgQCItLXVz
ZU1vY2tQdXNoU2VydmljZSIKICAgICAgICAgXQogICAgIH07CiB9CkBAIC0xMzUsMjQgKzE2MSwy
NCBAQCBzdGF0aWMgdm9pZCBjbGVhblVwVGVzdFdlYlB1c2hEKE5TVVJMICp0ZW1wRGlyKQogICAg
IEVYUEVDVF9OVUxMKGVycm9yKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjx4cGNfb2JqZWN0X3Q+
IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgbWVzc2FnZSkKK3N0YXRpYyBSZXRhaW5QdHI8eHBjX29iamVjdF90PiBjcmVh
dGVNZXNzYWdlRGljdGlvbmFyeShNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBj
X2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKICAgICB4cGNfZGljdGlv
bmFyeV9zZXRfdWludDY0KGRpY3Rpb25hcnkuZ2V0KCksICJwcm90b2NvbCB2ZXJzaW9uIiwgMSk7
Ci0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X3VpbnQ2NChkaWN0aW9uYXJ5LmdldCgpLCAibWVzc2Fn
ZSB0eXBlIiwgbWVzc2FnZVR5cGUpOworICAgIHhwY19kaWN0aW9uYXJ5X3NldF91aW50NjQoZGlj
dGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlwZSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtZXNz
YWdlVHlwZSkpOwogICAgIHhwY19kaWN0aW9uYXJ5X3NldF9kYXRhKGRpY3Rpb25hcnkuZ2V0KCks
ICJlbmNvZGVkIG1lc3NhZ2UiLCBtZXNzYWdlLmRhdGEoKSwgbWVzc2FnZS5zaXplKCkpOwogICAg
IHJldHVybiBXVEZNb3ZlKGRpY3Rpb25hcnkpOwogfQogCiAvLyBVc2VzIGFuIGV4aXN0aW5nIGNv
bm5lY3Rpb24gdG8gdGhlIGRhZW1vbiBmb3IgYSBvbmUtb2ZmIG1lc3NhZ2UKLXZvaWQgc2VuZE1l
c3NhZ2VUb0RhZW1vbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHVpbnQ4X3QgbWVzc2Fn
ZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3ZvaWQgc2VuZE1lc3NhZ2VU
b0RhZW1vbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VU
eXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9u
YXJ5ID0gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkobWVzc2FnZVR5cGUsIG1lc3NhZ2UpOwogICAg
IHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25uZWN0aW9uLCBkaWN0aW9uYXJ5LmdldCgp
KTsKIH0KIAogLy8gVXNlcyBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRvIHRoZSBkYWVtb24gZm9y
IGEgb25lLW9mZiBtZXNzYWdlLCB3YWl0aW5nIGZvciB0aGUgcmVwbHkKLXZvaWQgc2VuZE1lc3Nh
Z2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHVp
bnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3ZvaWQg
c2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh4cGNfY29ubmVjdGlvbl90IGNvbm5l
Y3Rpb24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1l
c3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnko
bWVzc2FnZVR5cGUsIG1lc3NhZ2UpOwogCkBAIC0xODEsNyArMjA3LDcgQEAgc3RhdGljIHZvaWQg
c2VuZENvbmZpZ3VyYXRpb25XaXRoQXVkaXRUb2tlbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rp
b24pCiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzFdID0gMTsKICAgICAgICAgZW5jb2RlZE1lc3Nh
Z2VbMl0gPSAzMjsKICAgICAgICAgbWVtY3B5KCZlbmNvZGVkTWVzc2FnZVsxMF0sICZ0b2tlbiwg
c2l6ZW9mKHRva2VuKSk7Ci0gICAgICAgIHNlbmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbiwg
NiwgZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBzZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rp
b24sIE1lc3NhZ2VUeXBlOjpVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbiwgZW5jb2RlZE1l
c3NhZ2UpOwogICAgIH0KIH0KIApAQCAtMjUyLDcgKzI3OCw3IEBAIFRFU1QoV2ViUHVzaEQsIEJh
c2ljQ29tbXVuaWNhdGlvbikKICAgICAgICAgYXV0byBkaWN0aW9uYXJ5ID0gYWRvcHROUyh4cGNf
ZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0ciwgMCkpOwogICAgICAgICBWZWN0b3I8
dWludDhfdD4gZW5jb2RlZE1lc3NhZ2UoMSk7CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzBdID0g
MTsKLSAgICAgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbihjb25uZWN0aW9uLmdldCgpLCA1LCBlbmNv
ZGVkTWVzc2FnZSk7CisgICAgICAgIHNlbmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbi5nZXQo
KSwgTWVzc2FnZVR5cGU6OlNldERlYnVnTW9kZUlzRW5hYmxlZCwgZW5jb2RlZE1lc3NhZ2UpOwog
ICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwogICAgIH0KIApAQCAtMzYx
LDU0ICszODcsNiBAQCBURVNUKFdlYlB1c2hELCBQZXJtaXNzaW9uTWFuYWdlbWVudCkKICAgICBj
bGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOwogfQogCi1zdGF0aWMgY29uc3QgY2hh
ciogbWFpblNXQnl0ZXMgPSBSIlNXUkVTT1VSQ0UoCi08c2NyaXB0PgotZnVuY3Rpb24gbG9nKG1z
ZykKLXsKLSAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5zdy5wb3N0TWVzc2FnZSht
c2cpOwotfQotCi1jb25zdCBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7Ci1jaGFubmVs
LnBvcnQxLm9ubWVzc2FnZSA9IChldmVudCkgPT4gbG9nKGV2ZW50LmRhdGEpOwotCi1uYXZpZ2F0
b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbigocmVnaXN0cmF0aW9uKSA9
PiB7Ci0gICAgaWYgKHJlZ2lzdHJhdGlvbi5hY3RpdmUpIHsKLSAgICAgICAgcmVnaXN0cmF0aW9u
LmFjdGl2ZS5wb3N0TWVzc2FnZSh7cG9ydDogY2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQy
XSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgd29ya2VyID0gcmVnaXN0cmF0aW9uLmlu
c3RhbGxpbmc7Ci0gICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIGlmICh3b3JrZXIuc3RhdGUgPT0gJ2FjdGl2YXRlZCcpCi0gICAg
ICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5l
bC5wb3J0Ml0pOwotICAgIH0pOwotfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKLSAgICBsb2co
IlJlZ2lzdHJhdGlvbiBmYWlsZWQgd2l0aDogIiArIGVycm9yKTsKLX0pOwotPC9zY3JpcHQ+Ci0p
U1dSRVNPVVJDRSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBzY3JpcHRCeXRlcyA9IFIiU1dSRVNP
VVJDRSgKLWxldCBwb3J0Owotc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50
KSA9PiB7Ci0gICAgcG9ydCA9IGV2ZW50LmRhdGEucG9ydDsKLSAgICBwb3J0LnBvc3RNZXNzYWdl
KCJSZWFkeSIpOwotfSk7Ci1zZWxmLmFkZEV2ZW50TGlzdGVuZXIoInB1c2giLCAoZXZlbnQpID0+
IHsKLSAgICB0cnkgewotICAgICAgICBpZiAoIWV2ZW50LmRhdGEpIHsKLSAgICAgICAgICAgIHBv
cnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiBudWxsIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LmRhdGEudGV4dCgpOwot
ICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogIiArIHZhbHVlKTsKLSAgICAgICAg
aWYgKHZhbHVlICE9ICdTd2VldCBQb3RhdG9lcycpCi0gICAgICAgICAgICBldmVudC53YWl0VW50
aWwoUHJvbWlzZS5yZWplY3QoJ0kgd2FudCBzd2VldCBwb3RhdG9lcycpKTsKLSAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIkdvdCBleGNlcHRpb24gIiArIGUpOwot
ICAgIH0KLX0pOwotKVNXUkVTT1VSQ0UiOwotCiBzdGF0aWMgdm9pZCBjbGVhcldlYnNpdGVEYXRh
U3RvcmUoV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSkKIHsKICAgICBfX2Jsb2NrIGJvb2wgY2xl
YXJlZFN0b3JlID0gZmFsc2U7CkBAIC00MTgsNzYgKzM5NiwzMTUgQEAgc3RhdGljIHZvaWQgY2xl
YXJXZWJzaXRlRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFTdG9yZSAqc3RvcmUpCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZjbGVhcmVkU3RvcmUpOwogfQogCi1URVNUKFdlYlB1c2hELCBI
YW5kbGVJbmplY3RlZFB1c2gpCi17Ci0gICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsb3dXZWJz
aXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zXTsKK2NsYXNzIFdlYlB1c2hEVGVzdCA6IHB1Ymxp
YyA6OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgorICAgIFdlYlB1c2hEVGVzdCgpCisgICAg
eworICAgICAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9hbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0Zv
ckFsbE9yaWdpbnNdOwogCi0gICAgTlNVUkwgKnRlbXBEaXJlY3RvcnkgPSBzZXRVcFRlc3RXZWJQ
dXNoRCgpOworICAgICAgICBtX3RlbXBEaXJlY3RvcnkgPSByZXRhaW5QdHIoc2V0VXBUZXN0V2Vi
UHVzaEQoKSk7CiAKLSAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtf
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKLSAgICBkYXRhU3RvcmVDb25m
aWd1cmF0aW9uLmdldCgpLndlYlB1c2hNYWNoU2VydmljZU5hbWUgPSBAIm9yZy53ZWJraXQud2Vi
cHVzaHRlc3RkYWVtb24uc2VydmljZSI7Ci0gICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQo
KS53ZWJQdXNoRGFlbW9uVXNlc01vY2tCdW5kbGVzRm9yVGVzdGluZyA9IFlFUzsKLSAgICBhdXRv
IGRhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0
aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgICAgICBh
dXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbiBuZXddKTsKKyAgICAgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQo
KS53ZWJQdXNoTWFjaFNlcnZpY2VOYW1lID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9u
LnNlcnZpY2UiOworICAgICAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hE
YWVtb25Vc2VzTW9ja0J1bmRsZXNGb3JUZXN0aW5nID0gWUVTOworICAgICAgICBtX2RhdGFTdG9y
ZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3Vy
YXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOwogCi0gICAgYXV0byBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
LSAgICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBkYXRhU3RvcmUuZ2V0
KCk7Ci0gICAgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRh
U3RvcmVdKTsKKyAgICAgICAgbV9jb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICAgICAgbV9jb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgPSBtX2RhdGFTdG9yZS5nZXQoKTsKKyAgICAgICAgY2xlYXJXZWJz
aXRlRGF0YVN0b3JlKFttX2NvbmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZV0pOwogCi0gICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFibGVk
OllFU107Ci0gICAgZm9yIChfV0tFeHBlcmltZW50YWxGZWF0dXJlICpmZWF0dXJlIGluIFtXS1By
ZWZlcmVuY2VzIF9leHBlcmltZW50YWxGZWF0dXJlc10pIHsKLSAgICAgICAgaWYgKFtmZWF0dXJl
LmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9uc0VuYWJsZWQiXSkKLSAg
ICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZv
ckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgIFttX2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVy
ZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllFU107CisgICAgICAgIGZvciAoX1dLRXhw
ZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFs
RmVhdHVyZXNdKSB7CisgICAgICAgICAgICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmlu
ZzpAIkJ1aWx0SW5Ob3RpZmljYXRpb25zRW5hYmxlZCJdKQorICAgICAgICAgICAgICAgIFtbbV9j
b25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0
dXJlXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6
QCJQdXNoQVBJRW5hYmxlZCJdKQorICAgICAgICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHBy
ZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAg
fQorCisgICAgICAgIG1fdGVzdE1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdl
SGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICBbW21fY29uZmlndXJhdGlvbiB1c2VyQ29u
dGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1fdGVzdE1lc3NhZ2VIYW5k
bGVyLmdldCgpIG5hbWU6QCJ0ZXN0Il07CisKKyAgICAgICAgbV9ub3RpZmljYXRpb25NZXNzYWdl
SGFuZGxlciA9IGFkb3B0TlMoW1tOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxv
Y10gaW5pdF0pOworICAgICAgICBbW21fY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xs
ZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIu
Z2V0KCkgbmFtZTpAIm5vdGUiXTsKICAgICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0g
YWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwotICAgIFtbY29uZmln
dXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1l
c3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwotICAgIF9fYmxvY2sgYm9vbCBkb25lID0g
ZmFsc2U7Ci0gICAgW21lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRs
ZXI6XnsKLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBj
aGFyKiBodG1sU291cmNlLCBjb25zdCBjaGFyKiBzZXJ2aWNlV29ya2VyU2NyaXB0U291cmNlKQor
ICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0YW50cyA9IFIiU1JDKAorICAg
ICAgICAgICAgY29uc3QgVkFMSURfU0VSVkVSX0tFWSA9ICJCQTFIeHp5aTFSVU0xYjV3anhzbjdu
R3hBc3p3MnU2MW0xNjRpM01yQUl4SEY2WUs1aDRTRFlpYy1kUnVVX1JDUENmQTVhcTlvalN3azVZ
MkVtQ2xCUHMiOworICAgICAgICAgICAgY29uc3QgVkFMSURfU0VSVkVSX0tFWV9USEFUX0NBVVNF
U19JTkpFQ1RFRF9GQUlMVVJFID0gIkJFQXhhVU1vMXM4dGpPUnhKZm5TU3ZXaFliNHU1MWtnMWhX
VDJzXzlncFY3WnhhcjFwRl8yQlE4QW5jdUFkUzJCb0xoTjRxYXh6QnkyQ3dIRThCQnpXZyI7Cisg
ICAgICAgIClTUkMiOworICAgICAgICBtX3NlcnZlci5yZXNldChuZXcgVGVzdFdlYktpdEFQSTo6
SFRUUFNlcnZlcih7CisgICAgICAgICAgICB7ICIvIiwgeyBodG1sU291cmNlIH0gfSwKKyAgICAg
ICAgICAgIHsgIi9jb25zdGFudHMuanMiLCB7IHsgeyAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0
aW9uL2phdmFzY3JpcHQiIH0gfSwgY29uc3RhbnRzIH0gfSwKKyAgICAgICAgICAgIHsgIi9zdy5q
cyIsIHsgeyB7ICJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIgfSB9LCBz
ZXJ2aWNlV29ya2VyU2NyaXB0U291cmNlIH0gfQorICAgICAgICB9LCBUZXN0V2ViS2l0QVBJOjpI
VFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cCkpOworCisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0
TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAs
IDYwMCkgY29uZmlndXJhdGlvbjptX2NvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAgICAgW21f
d2ViVmlldyBsb2FkUmVxdWVzdDptX3NlcnZlci0+cmVxdWVzdCgpXTsKKyAgICB9CisKKyAgICB+
V2ViUHVzaERUZXN0KCkKKyAgICB7CisgICAgICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQobV90ZW1w
RGlyZWN0b3J5LmdldCgpKTsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fdGVtcERp
cmVjdG9yeTsKKyAgICBSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlPiBtX2RhdGFTdG9yZTsK
KyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gbV9jb25maWd1cmF0aW9uOwor
ICAgIFJldGFpblB0cjxUZXN0TWVzc2FnZUhhbmRsZXI+IG1fdGVzdE1lc3NhZ2VIYW5kbGVyOwor
ICAgIFJldGFpblB0cjxOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlcj4gbV9ub3RpZmlj
YXRpb25NZXNzYWdlSGFuZGxlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdFdlYktpdEFQSTo6
SFRUUFNlcnZlcj4gbV9zZXJ2ZXI7CisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3
OworfTsKKworY2xhc3MgV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0IDogcHVibGljIFdlYlB1c2hE
VGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5UZXN0KE5TU3RyaW5nICpleHBlY3RlZE1l
c3NhZ2UsIE5TRGljdGlvbmFyeSAqcHVzaFVzZXJJbmZvKTsKK307CisKK3ZvaWQgV2ViUHVzaERJ
bmplY3RlZFB1c2hUZXN0OjpydW5UZXN0KE5TU3RyaW5nICpleHBlY3RlZE1lc3NhZ2UsIE5TRGlj
dGlvbmFyeSAqcHVzaFVzZXJJbmZvKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sU291
cmNlID0gUiJTV1JFU09VUkNFKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgeworICAgICAg
ICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0LnBvc3RNZXNzYWdlKG1zZyk7Cisg
ICAgfQorCisgICAgY29uc3QgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworICAgIGNo
YW5uZWwucG9ydDEub25tZXNzYWdlID0gKGV2ZW50KSA9PiBsb2coZXZlbnQuZGF0YSk7CisKKyAg
ICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAo
KSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2
aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0
cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7CisgICAgICAgICAgICB1c2VyVmlzaWJsZU9u
bHk6IHRydWUsCisgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZlcktleTogVkFMSURfU0VSVkVS
X0tFWQorICAgICAgICB9KTsKKyAgICAgICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2Fn
ZSh7cG9ydDogY2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQyXSk7CisgICAgfSkuY2F0Y2go
ZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgbG9nKCJSZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6
ICIgKyBlcnJvcik7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgKVNXUkVTT1VSQ0UiOwor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlcnZpY2VXb3JrZXJTb3VyY2UgPSBSIlNXUkVTT1VS
Q0UoCisgICAgbGV0IHBvcnQ7CisgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwg
KGV2ZW50KSA9PiB7CisgICAgICAgIHBvcnQgPSBldmVudC5kYXRhLnBvcnQ7CisgICAgICAgIHBv
cnQucG9zdE1lc3NhZ2UoIlJlYWR5Iik7CisgICAgfSk7CisgICAgc2VsZi5hZGRFdmVudExpc3Rl
bmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAo
IWV2ZW50LmRhdGEpIHsKKyAgICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZl
ZDogbnVsbCBkYXRhIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5kYXRhLnRleHQoKTsKKyAgICAgICAgICAg
IHBvcnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiAiICsgdmFsdWUpOworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJFcnJvcjogIiArIGUpOworICAg
ICAgICB9CisgICAgfSk7CisgICAgKVNXUkVTT1VSQ0UiOworCisgICAgX19ibG9jayBib29sIHJl
YWR5ID0gZmFsc2U7CisgICAgW21fdGVzdE1lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6QCJSZWFk
eSIgd2l0aEhhbmRsZXI6XnsKKyAgICAgICAgcmVhZHkgPSB0cnVlOwogICAgIH1dOwotICAgIFtt
ZXNzYWdlSGFuZGxlciBhZGRNZXNzYWdlOkAiUmVjZWl2ZWQ6IEhlbGxvIFdvcmxkIiB3aXRoSGFu
ZGxlcjpeewotICAgICAgICBkb25lID0gdHJ1ZTsKKworICAgIF9fYmxvY2sgYm9vbCBnb3RFeHBl
Y3RlZE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV90ZXN0TWVzc2FnZUhhbmRsZXIgYWRkTWVzc2Fn
ZTpleHBlY3RlZE1lc3NhZ2Ugd2l0aEhhbmRsZXI6XnsKKyAgICAgICAgZ290RXhwZWN0ZWRNZXNz
YWdlID0gdHJ1ZTsKICAgICB9XTsKIAotICAgIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXIgc2Vy
dmVyKHsKLSAgICAgICAgeyAiLyIsIHsgbWFpblNXQnl0ZXMgfSB9LAotICAgICAgICB7ICIvc3cu
anMiLCB7IHsgeyAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwg
c2NyaXB0Qnl0ZXMgfSB9Ci0gICAgfSwgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UHJvdG9j
b2w6Okh0dHApOworICAgIGxvYWRSZXF1ZXN0KGh0bWxTb3VyY2UsIHNlcnZpY2VXb3JrZXJTb3Vy
Y2UpOwogCi0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5p
dFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKLSAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVz
dCgpXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlYWR5KTsKIAotICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAgZG9uZSA9IGZhbHNlOworICAgIFN0cmlu
ZyBidW5kbGVJZGVudGlmaWVyID0gImNvbS5hcHBsZS5XZWJLaXQuVGVzdFdlYktpdEFQSSJfczsK
KyAgICBTdHJpbmcgc2NvcGUgPSBtX3NlcnZlci0+cmVxdWVzdCgpLlVSTC5hYnNvbHV0ZVN0cmlu
ZzsKKyAgICBTdHJpbmcgdG9waWMgPSBidW5kbGVJZGVudGlmaWVyICsgIiAiX3MgKyBzY29wZTsK
IAotICAgIC8vIEluamVjdCBwdXNoIG1lc3NhZ2UKLSAgICBhdXRvIGVuY29kZWRNZXNzYWdlID0g
ZW5jb2RlU3RyaW5nKCJjb20uYXBwbGUuV2ViS2l0LlRlc3RXZWJLaXRBUEkiKTsKLSAgICBlbmNv
ZGVkTWVzc2FnZS5hcHBlbmRWZWN0b3IoZW5jb2RlU3RyaW5nKHNlcnZlci5yZXF1ZXN0KCkuVVJM
LmFic29sdXRlU3RyaW5nKSk7Ci0gICAgZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVjdG9yKGVuY29k
ZVN0cmluZygiSGVsbG8gV29ybGQiKSk7CisgICAgaWQgb2JqID0gQHsKKyAgICAgICAgQCJ0b3Bp
YyI6IChOU1N0cmluZyAqKXRvcGljLAorICAgICAgICBAInVzZXJJbmZvIjogcHVzaFVzZXJJbmZv
CisgICAgfTsKKyAgICBOU0RhdGEgKmRhdGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0
aEpTT05PYmplY3Q6b2JqIG9wdGlvbnM6MCBlcnJvcjpudWxscHRyXTsKKworICAgIFN0cmluZyBt
ZXNzYWdlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhciAqPihkYXRhLmJ5dGVzKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGRhdGEubGVuZ3RoKSB9OworICAgIGF1dG8gZW5jb2RlZE1lc3NhZ2UgPSBl
bmNvZGVTdHJpbmcoV1RGTW92ZShtZXNzYWdlKSk7CiAKICAgICBhdXRvIHV0aWxpdHlDb25uZWN0
aW9uID0gY3JlYXRlQW5kQ29uZmlndXJlQ29ubmVjdGlvblRvU2VydmljZSgib3JnLndlYmtpdC53
ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIik7Ci0gICAgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRp
bmdGb3JSZXBseSh1dGlsaXR5Q29ubmVjdGlvbi5nZXQoKSwgNywgZW5jb2RlZE1lc3NhZ2UpOwor
ICAgIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkodXRpbGl0eUNvbm5lY3Rpb24u
Z2V0KCksIE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmcs
IGVuY29kZWRNZXNzYWdlKTsKIAogICAgIC8vIEZldGNoIHB1c2ggbWVzc2FnZXMKKyAgICBfX2Js
b2NrIGJvb2wgZ290TWVzc2FnZXMgPSBmYWxzZTsKICAgICBfX2Jsb2NrIFJldGFpblB0cjxOU0Fy
cmF5PE5TRGljdGlvbmFyeSAqPj4gbWVzc2FnZXM7Ci0gICAgW2RhdGFTdG9yZSBfZ2V0UGVuZGlu
Z1B1c2hNZXNzYWdlczpeKE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykgewor
ICAgIFttX2RhdGFTdG9yZSBfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczpeKE5TQXJyYXk8TlNEaWN0
aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykgewogICAgICAgICBtZXNzYWdlcyA9IHJhd01lc3NhZ2Vz
OwotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgZ290TWVzc2FnZXMgPSB0cnVlOwogICAg
IH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAgZG9uZSA9IGZh
bHNlOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290TWVzc2FnZXMpOwogCiAgICAg
RVhQRUNUX0VRKFttZXNzYWdlcyBjb3VudF0sIDF1KTsKIAogICAgIC8vIEhhbmRsZSBwdXNoIG1l
c3NhZ2UKICAgICBfX2Jsb2NrIGJvb2wgcHVzaE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTsKLSAg
ICBbZGF0YVN0b3JlIF9wcm9jZXNzUHVzaE1lc3NhZ2U6W21lc3NhZ2VzIGZpcnN0T2JqZWN0XSBj
b21wbGV0aW9uSGFuZGxlcjpeKGJvb2wgcmVzdWx0KSB7CisgICAgW21fZGF0YVN0b3JlIF9wcm9j
ZXNzUHVzaE1lc3NhZ2U6W21lc3NhZ2VzIGZpcnN0T2JqZWN0XSBjb21wbGV0aW9uSGFuZGxlcjpe
KGJvb2wgcmVzdWx0KSB7CiAgICAgICAgIHB1c2hNZXNzYWdlUHJvY2Vzc2VkID0gdHJ1ZTsKICAg
ICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZ290RXhwZWN0ZWRNZXNzYWdlKTsKICAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnB1c2hNZXNzYWdlUHJvY2Vzc2VkKTsKK30KIAotICAgIGNsZWFuVXBUZXN0
V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7CitURVNUX0YoV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0
LCBIYW5kbGVJbmplY3RlZEVtcHR5UHVzaCkKK3sKKyAgICBydW5UZXN0KEAiUmVjZWl2ZWQ6IG51
bGwgZGF0YSIsIEB7IH0pOworfQorCitURVNUX0YoV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0LCBI
YW5kbGVJbmplY3RlZEFFU0dDTVB1c2gpCit7CisgICAgcnVuVGVzdChAIlJlY2VpdmVkOiB0ZXN0
IGFlc2djbSBwYXlsb2FkIiwgQHsKKyAgICAgICAgQCJjb250ZW50X2VuY29kaW5nIjogQCJhZXNn
Y20iLAorICAgICAgICBAImFzX3B1YmxpY2tleSI6IEAiQkMtQWdZTWhxbXphbUg3X0F1bTBZdklk
OEZWMS11bWdId2VKTmU2WFExSU1BbTNFMjlsb1dYcVRSbmRpYnhIMjdrSktXY0lieXltdW5kT0RN
ZlZ4X1VNIiwKKyAgICAgICAgQCJhc19zYWx0IjogQCJ0a1BUNXhEZU4wbEFrU2M2bFpVa05nIiwK
KyAgICAgICAgQCJwYXlsb2FkIjogQCJvL3U0eXZjWEkxbmFwK3p5SU9CYldYZExxajFxSEcyY1gr
S1ZoQWRCUWoxR1ZBdDdsUT09IgorICAgIH0pOworfQorCitURVNUX0YoV2ViUHVzaERJbmplY3Rl
ZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEFFUzEyOEdDTVB1c2gpCit7CisgICAgLy8gRnJvbSBl
eGFtcGxlIGluIFJGQzgyOTEgU2VjdGlvbiA1LgorICAgIFN0cmluZyBwYXlsb2FkQmFzZTY0VVJM
ID0gIkRHdjZyYTFubFlnRENTMUZSbmJ6bHdBQUVBQkJCUDR6OUtzTjZuR1JUYlZZSV9jN1ZKU1BR
VEJ0a2djeTI3bWxtbE1vWklJZ0RsbDZlM3ZDWUxvY0lubVlXQW1TNlRsekFDOHdFcUtLNlBCcnUz
amw3QV95bDk1YlFwdTZjVlBUcEs0TXFna2YxQ1h6dExWQlN0MktzM29ad2J1d1hQWExXeW91QldM
VldHTldRZXhTZ1N4c2pfUXVsY3k0YS1mTiJfczsKKyAgICBTdHJpbmcgcGF5bG9hZEJhc2U2NCA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJhc2U2NFVSTERlY29kZShwYXlsb2FkQmFzZTY0VVJMKS52
YWx1ZSgpKTsKKworICAgIHJ1blRlc3QoQCJSZWNlaXZlZDogV2hlbiBJIGdyb3cgdXAsIEkgd2Fu
dCB0byBiZSBhIHdhdGVybWVsb24iLCBAeworICAgICAgICBAImNvbnRlbnRfZW5jb2RpbmciOiBA
ImFlczEyOGdjbSIsCisgICAgICAgIEAicGF5bG9hZCI6IChOU1N0cmluZyAqKXBheWxvYWRCYXNl
NjQKKyAgICB9KTsKK30KKworVEVTVF9GKFdlYlB1c2hEVGVzdCwgU3Vic2NyaWJlVGVzdCkKK3sK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogc291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3Jj
PSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIG5hdmlnYXRvci5z
ZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvc3cuanMnKS50aGVuKGFzeW5jICgpID0+IHsKKyAgICAg
ICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVh
ZHk7CisgICAgICAgIGxldCByZXN1bHQgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJz
Y3JpYmUoeworICAgICAgICAgICAgICAgIHVzZXJWaXNpYmxlT25seTogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICBhcHBsaWNhdGlvblNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWQorICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICByZXN1bHQgPSBzdWJzY3JpcHRpb24udG9KU09OKCk7CisgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICJFcnJvcjogIiArIGU7Cisg
ICAgICAgIH0KKyAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMubm90ZS5wb3N0
TWVzc2FnZShyZXN1bHQpOworICAgIH0pOworICAgIDwvc2NyaXB0PgorICAgIClIVE1MIjsKKwor
ICAgIF9fYmxvY2sgUmV0YWluUHRyPGlkPiBvYmogPSBuaWw7CisgICAgX19ibG9jayBib29sIGRv
bmUgPSBmYWxzZTsKKyAgICBbbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdl
SGFuZGxlcjpeKGlkIG1lc3NhZ2UpIHsKKyAgICAgICAgb2JqID0gbWVzc2FnZTsKKyAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBsb2FkUmVxdWVzdChzb3VyY2UsICIiKTsKKyAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgQVNTRVJUX1RSVUUoW29i
aiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CisKKyAgICBOU0RpY3Rpb25h
cnkgKnN1YnNjcmlwdGlvbiA9IG9iai5nZXQoKTsKKyAgICBBU1NFUlRfVFJVRShbc3Vic2NyaXB0
aW9uW0AiZW5kcG9pbnQiXSBoYXNQcmVmaXg6QCJodHRwczovLyJdKTsKKyAgICBBU1NFUlRfVFJV
RShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFz
c11dKTsKKworICAgIC8vIFNoYXJlZCBhdXRoIHNlY3JldCBzaG91bGQgYmUgMTYgYnl0ZXMgKDIy
IGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2NHVybCkuCisgICAgQVNTRVJUX0VRKFtzdWJzY3JpcHRp
b25bQCJrZXlzIl1bQCJhdXRoIl0gbGVuZ3RoXSwgMjJ1KTsKKworICAgIC8vIENsaWVudCBwdWJs
aWMga2V5IHNob3VsZCBiZSA2NSBieXRlcyAoODcgYnl0ZXMgaW4gdW5wYWRkZWQgYmFzZTY0dXJs
KS4KKyAgICBBU1NFUlRfRVEoW3N1YnNjcmlwdGlvbltAImtleXMiXVtAInAyNTZkaCJdIGxlbmd0
aF0sIDg3dSk7Cit9CisKK1RFU1RfRihXZWJQdXNoRFRlc3QsIFN1YnNjcmliZUZhaWx1cmVUZXN0
KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzb3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlw
dCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgbmF2aWdh
dG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4gewor
ICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtl
ci5yZWFkeTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2Vy
LnN1YnNjcmliZSh7CisgICAgICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAg
ICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZX1RIQVRf
Q0FVU0VTX0lOSkVDVEVEX0ZBSUxVUkUKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmVz
dWx0ID0gc3Vic2NyaXB0aW9uLnRvSlNPTigpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOworICAgICAgICB9CisgICAgICAgIHdpbmRv
dy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9
KTsKKyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxp
ZD4gb2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW21fbm90
aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7
CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOwor
CisgICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKKworICAgIC8vIFNwZWMgc2F5cyB0aGF0IGFuIGVycm9yIGluIHRoZSBwdXNo
IHNlcnZpY2Ugc2hvdWxkIGJlIGFuIEFib3J0RXJyb3IuCisgICAgQVNTRVJUX1RSVUUoW29iaiBp
c0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsKKyAgICBBU1NFUlRfVFJVRShbb2JqIGhh
c1ByZWZpeDpAIkVycm9yOiBBYm9ydEVycm9yIl0pOworfQorCitURVNUX0YoV2ViUHVzaERUZXN0
LCBVbnN1YnNjcmliZVRlc3QpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNvdXJjZSA9IFIi
SFRNTCgKKyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdD4KKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhl
bihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmln
YXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDsKKyAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSBhd2FpdCByZWdpc3Ry
YXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKKyAgICAgICAgICAgICAgICB1c2VyVmlzaWJs
ZU9ubHk6IHRydWUsCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElE
X1NFUlZFUl9LRVkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbGV0IHJlc3VsdDEgPSBh
d2FpdCBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKKyAgICAgICAgICAgIGxldCByZXN1bHQy
ID0gYXdhaXQgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CisgICAgICAgICAgICByZXN1bHQg
PSBbcmVzdWx0MSwgcmVzdWx0Ml07CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9ICJFcnJvcjogIiArIGU7CisgICAgICAgIH0KKyAgICAgICAgd2luZG93LndlYmtp
dC5tZXNzYWdlSGFuZGxlcnMubm90ZS5wb3N0TWVzc2FnZShyZXN1bHQpOworICAgIH0pOworICAg
IDwvc2NyaXB0PgorICAgIClIVE1MIjsKKworICAgIF9fYmxvY2sgUmV0YWluUHRyPGlkPiBvYmog
PSBuaWw7CisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbbV9ub3RpZmljYXRp
b25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlkIG1lc3NhZ2UpIHsKKyAgICAg
ICAgb2JqID0gbWVzc2FnZTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBs
b2FkUmVxdWVzdChzb3VyY2UsICIiKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOworCisgICAgLy8gRmlyc3QgdW5zdWJzY3JpYmUgc2hvdWxkIHN1Y2NlZWQuIFNlY29uZCBv
bmUgc2hvdWxkIGZhaWwgc2luY2UgdGhlIGZpcnN0IG9uZSByZW1vdmVkIHRoZSByZWNvcmQgZnJv
bSB0aGUgZGF0YWJhc2UuCisgICAgaWQgZXhwZWN0ZWQgPSBAW0AoMSksIEAoMCldOworICAgIEFT
U0VSVF9UUlVFKFtvYmogaXNFcXVhbDpleHBlY3RlZF0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJCg==
</data>
<flag name="commit-queue"
          id="477590"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451008</attachid>
            <date>2022-02-05 16:00:44 -0800</date>
            <delta_ts>2022-02-07 11:56:38 -0800</delta_ts>
            <desc>rebase</desc>
            <filename>bug-235857-20220205160043.patch</filename>
            <type>text/plain</type>
            <size>93184</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBkY2I3ZDQxM2Q4M2YxZTU4ZTBiZTZk
NjFiMjAzMDk5OTA0NDI4YTIuLmQ3ZDIzYWY1MDU3MmM1ZTcwYjg2ZjJlMWE2YTU2MzQ3MDE3M2E2
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgUHVzaEFQSUVuYWJsZWQgdG8gV2ViS2l0TGVn
YWN5IHNvIHdlIGNhbiBlbmFibGUgaXQgb24gaW4gQVBJIHRlc3RzIHZpYSBfV0tFeHBlcmltZW50
YWxGZWF0dXJlLgorCisgICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sOgorCiAyMDIyLTAyLTA1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgVGhyZWFkIHN1c3BlbmQgYW5kIHJlc3VtZSBzaG91bGQg
dGFrZSBhIGdsb2JhbCBsb2NrIHRvIGF2b2lkIGRlYWRsb2NrCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkyN2I1NjIy
MjQ3ZDlkNTg3NTI0MTc3NzFkMWMwNzc2YzE0MjhkMzAuLmFkMWFlM2IwMjdlNGJiZTQzMDRkY2Ew
Njg1M2I1MzE2YTgxMjYwYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDIyLTAxLTI4
ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBQdXNoU2VydmljZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1ODU3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRz
IFB1c2hTZXJ2aWNlIHRvIHdlYnB1c2hkLiBJdCBoYW5kbGVzIHJlcXVlc3RzIHRvIGNyZWF0ZSwg
cmVtb3ZlLCBhbmQgZ2V0IHB1c2gKKyAgICAgICAgc3Vic2NyaXB0aW9ucy4gSXQgYWxzbyBkZWNy
eXB0cyBpbmNvbWluZyBwdXNoZXMgYW5kIHBhc3MgdGhlbSBiYWNrIHRvIHRoZSBVSSBwcm9jZXNz
IHZpYSB0aGUKKyAgICAgICAgZXhpc3RpbmcgbWFjaGluZXJ5IGluIFdlYlB1c2hEYWVtb24uCisK
KyAgICAgICAgUHVzaFNlcnZpY2UgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRoIHR3byBvYmplY3Rz
OgorCisgICAgICAgIDEuIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjogdGhpcyBjcmVhdGVzIGFuZCBy
ZW1vdmVzIHB1c2ggc3Vic2NyaXB0aW9ucyBmcm9tIHRoZSBwdXNoIHNlcnZlci4KKyAgICAgICAg
ICAgSXQgYWxzbyByZWNlaXZlcyBpbmNvbWluZyBwdXNoZXMgZnJvbSB0aGUgcHVzaCBzZXJ2ZXIu
CisgICAgICAgIDIuIFB1c2hEYXRhYmFzZTogdGhpcyBwZXJzaXN0cyBwdXNoIHN1YnNjcmlwdGlv
bnMgdG8gZGlzay4KKworICAgICAgICBTZXZlcmFsIHRoaW5ncyBhcmUgbm90IHlldCBpbXBsZW1l
bnRlZDsgZm9yIGluc3RhbmNlLCB3ZSBjdXJyZW50bHkgYWx3YXlzIGdyYW50IGEgcGFnZSB0aGUK
KyAgICAgICAgcGVybWlzc2lvbiB0byByZWNlaXZlIHB1c2hlcy4gVGhpcyB3aWxsIGJlIGZpeGVk
IGluIGZ1dHVyZSBwYXRjaGVzLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4g
VGhlIGN1cnJlbnQgdGVzdHMgdXNlIGEgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbiB0aGF0IHZl
bmRzCisgICAgICAgIHN1YnNjcmlwdGlvbiB3aXRoIGZpeGVkIGRhdGEsIGJ1dCB0aGlzIGNhbiBi
ZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9X
S01haW4uaDoKKyAgICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbToKKyAgICAgICAg
KFdLV2ViUHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XZWJQdXNoTWVz
c2FnZUNvY29hLm1tOiBhZGQgYWJpbGl0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIGVtcHR5
IHZzLiBudWxsIHBheWxvYWQuCisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdlOjpmcm9t
RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdlOjp0b0RpY3Rpb25h
cnkgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlB1c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAg
ICAqIFNoYXJlZC9XZWJQdXNoTWVzc2FnZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQdXNoTWVz
c2FnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiB3ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmg6CisgICAg
ICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFdl
YlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNsaWVudEtleXMpOgor
ICAgICAgICAoV2ViUHVzaEQ6Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1YnNjcmliZSk6
CisgICAgICAgIChXZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6dW5zdWJzY3Jp
YmUpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpjb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZGF0YWJhc2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpk
aWRSZWNlaXZlUHVzaE1lc3NhZ2UpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLm1t
OiBBZGRlZC4KKyAgICAgICAgKFdlYlB1c2hEOjp1cGRhdGVUb3BpY0xpc3RzKToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNo
U2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2
aWNlOjpQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1c2hTdWJzY3JpcHRp
b25Gcm9tUmVjb3JkKToKKyAgICAgICAgKFdlYlB1c2hEOjptYWtlUHVzaFRvcGljKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OmJ1bmRsZUlkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6c2NvcGUpOgorICAgICAgICAoV2Vi
UHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6UHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpQdXNoU2VydmljZVJlcXVlc3RJbXBs
KToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpmdWxmaWxsKToK
KyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpyZWplY3QpOgorICAg
ICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlwdGlvblJl
cXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OnN0YXJ0
SW50ZXJuYWwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OlN1YnNjcmli
ZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW1w
bCk6CisgICAgICAgIChXZWJQdXNoRDo6U3Vic2NyaWJlUmVxdWVzdDo6YXR0ZW1wdFRvUmVjb3Zl
ckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKToKKyAgICAgICAgKFdlYlB1c2hEOjpVbnN1
YnNjcmliZVJlcXVlc3Q6OlVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChXZWJQdXNoRDo6
VW5zdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEludGVybmFsKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6Z2V0U3Vic2NyaXB0aW9uKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6c3Vic2NyaWJlKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6dW5zdWJzY3JpYmUpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1
c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChXZWJQ
dXNoRDo6bWFrZVJhd1B1c2hNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vydmlj
ZTo6ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24u
bW06CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNs
aWVudEtleXMpOgorICAgICAgICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb24uaDoKKyAgICAgICAg
KiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6Ok1lc3NhZ2VJ
bmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6OmVuY29kZVJlcGx5KToK
KyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0TW9ja1B1c2hTZXJ2aWNlKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVz
aEQ6OkRhZW1vbjo6c2V0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6
cnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6aW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYlB1c2hEOjpE
YWVtb246OmhhbmRsZUluY29taW5nUHVzaCk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpn
ZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN1YnNj
cmliZVRvUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6dW5zdWJzY3Jp
YmVGcm9tUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0UHVzaFN1
YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpnZXRQdXNoUGVybWlzc2lv
blN0YXRlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oOgorICAgICAg
ICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
dXNoRGFlbW9uTWFpbik6CisgICAgICAgICogd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJw
dXNoZC5tYWMucGxpc3Q6CisgICAgICAgICogd2VicHVzaGQvd2VicHVzaGQuY3BwOgorICAgICAg
ICAobWFpbik6CisKIDIwMjItMDItMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmVDb2xsZWN0
aW9uIHRvIGhhdmUgYSBzaW5nbGUgYmFja2luZyBzdG9yZSB0cmF2ZXJzYWwgZnVuY3Rpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4
cGVyaW1lbnRhbC55YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZl
cmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKaW5kZXggNWI0ZDNiNjI1NzE3NTMyNTU0ZjNhZDcyYTRk
YjQ1YTY5ZWNhODVlNi4uMDVmNzdmMzI1OTYwN2FiZDBmNzczY2Q1MjY3NThkZWM3ZjY5ZDhlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsLnlhbWwKKysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKQEAgLTExMjIsNiArMTEyMiw4IEBAIFB1c2hB
UElFbmFibGVkOgogICBkZWZhdWx0VmFsdWU6CiAgICAgV2ViQ29yZToKICAgICAgIGRlZmF1bHQ6
IGZhbHNlCisgICAgV2ViS2l0TGVnYWN5OgorICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJL
aXQ6CiAgICAgICBkZWZhdWx0OiBmYWxzZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvQ29jb2EvV0tNYWluLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2Ev
V0tNYWluLmgKaW5kZXggMzAzNzhmODU1M2FmZjVjM2RhMzRmYjk4ZjIzN2JhZTE1Njk4MDNhMi4u
OWNmODRkMjc0NGZhN2RlYmZiMDcxZGYxMjNlZDEyNjlhNDdmNTI3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaApAQCAtMzQsNyArMzQsNyBAQCBleHRlcm4gIkMiIHsK
IAogV0tfRVhQT1JUIGludCBXS1hQQ1NlcnZpY2VNYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiog
YXJndikgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiBXS19FWFBP
UlQgaW50IFdLQWRBdHRyaWJ1dGlvbkRhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBh
cmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwotV0tfRVhQT1JUIGludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFy
KiogYXJndikgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKK1dLX0VYUE9SVCBpbnQgV0tXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2Nv
YS9XS01haW4ubW0KaW5kZXggZGUyZTlmN2E1YmQ1NWY5MWRlODdlMWE5M2FhZjg5MDczZGZiZmQ0
MS4uOTdkNzg1ZjY5ZjI2MWFhZmNlMjVkOGQ5MTc2NzE0NGYyM2U5ZTA1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tCkBAIC00MCw3ICs0MCw3IEBAIGludCBXS0Fk
QXR0cmlidXRpb25EYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKICAgICBy
ZXR1cm4gV2ViS2l0OjpQQ01EYWVtb25NYWluKGFyZ2MsIGFyZ3YpOwogfQogCi1pbnQgV0tXZWJQ
dXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgV0tXZWJQdXNo
RGFlbW9uTWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6
V2ViUHVzaERhZW1vbk1haW4oYXJnYywgYXJndik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db2NvYS9XZWJQdXNoTWVzc2FnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbQppbmRleCBmMTI5MzhiYzRkZGYxZGU0
OTFkOTA5ZThiN2FmZGE2NTJkMGM5MDdiLi41YzU1NDM4NjZjNzhhNjMzYmQxZTgyMjgwZGIwODUy
MzA5NGZjYjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJQdXNo
TWVzc2FnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hN
ZXNzYWdlQ29jb2EubW0KQEAgLTM5LDIxICszOSwzMCBAQCBzdGQ6Om9wdGlvbmFsPFdlYlB1c2hN
ZXNzYWdlPiBXZWJQdXNoTWVzc2FnZTo6ZnJvbURpY3Rpb25hcnkoTlNEaWN0aW9uYXJ5ICpkaWN0
aQogICAgIGlmICghdXJsIHx8ICFbdXJsIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBOU0RhdGEgKnB1c2hEYXRhID0gW2Rp
Y3Rpb25hcnkgb2JqZWN0Rm9yS2V5OldlYktpdFB1c2hEYXRhS2V5XTsKLSAgICBpZiAoIXB1c2hE
YXRhIHx8ICFbcHVzaERhdGEgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0pCisgICAgaWQg
cHVzaERhdGEgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6V2ViS2l0UHVzaERhdGFLZXldOwor
ICAgIEJPT0wgaXNOdWxsID0gcHVzaERhdGEgPT0gW05TTnVsbCBudWxsXTsKKyAgICBCT09MIGlz
RGF0YSA9IFtwdXNoRGF0YSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXTsKKworICAgIGlm
ICghaXNOdWxsICYmICFpc0RhdGEpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4geyB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB7IHN0YXRpY19jYXN0PGNvbnN0
IHVpbnQ4X3QqPihwdXNoRGF0YS5ieXRlcyksIHB1c2hEYXRhLmxlbmd0aCB9LAotICAgICAgICBV
UkwgeyB1cmwgfQotICAgIH0gfTsKKyAgICBXZWJQdXNoTWVzc2FnZSBtZXNzYWdlIHsgeyB9LCBV
UkwgeyB1cmwgfSB9OworICAgIGlmIChpc0RhdGEpIHsKKyAgICAgICAgTlNEYXRhICpkYXRhID0g
KE5TRGF0YSAqKXB1c2hEYXRhOworICAgICAgICBtZXNzYWdlLnB1c2hEYXRhID0gVmVjdG9yPHVp
bnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxl
bmd0aCB9OworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlOwogfQogCiBOU0RpY3Rpb25hcnkg
KldlYlB1c2hNZXNzYWdlOjp0b0RpY3Rpb25hcnkoKSBjb25zdAogewotICAgIGF1dG8gbnNEYXRh
ID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpwdXNoRGF0YS5kYXRhKCkg
bGVuZ3RoOnB1c2hEYXRhLnNpemUoKV0pOworICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YTsK
KyAgICBpZiAocHVzaERhdGEpCisgICAgICAgIG5zRGF0YSA9IG5zRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cHVzaERhdGEtPmRhdGEoKSBsZW5ndGg6cHVzaERh
dGEtPnNpemUoKV0pOworCiAgICAgcmV0dXJuIEB7Ci0gICAgICAgIFdlYktpdFB1c2hEYXRhS2V5
IDogbnNEYXRhLmdldCgpLAorICAgICAgICBXZWJLaXRQdXNoRGF0YUtleSA6IG5zRGF0YSA/IG5z
RGF0YS5nZXQoKSA6IFtOU051bGwgbnVsbF0sCiAgICAgICAgIFdlYktpdFB1c2hSZWdpc3RyYXRp
b25VUkxLZXkgOiAoTlNVUkwgKilyZWdpc3RyYXRpb25VUkwKICAgICB9OwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCmluZGV4IGZjNDdkYzRmMTI3
NDg3MjRiMWI1N2M1NzJjMTQ5YjM4NzhlYzBhNWIuLmYzZjdiYmU2M2Y0ZWQzNWVkY2YzZTJhYWFk
OTNmYjNlNDkyOWZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hE
YWVtb25Db25zdGFudHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9u
Q29uc3RhbnRzLmgKQEAgLTQzLDYgKzQzLDcgQEAgZW51bSBjbGFzcyBNZXNzYWdlVHlwZSA6IHVp
bnQ4X3QgewogICAgIFNldERlYnVnTW9kZUlzRW5hYmxlZCwKICAgICBVcGRhdGVDb25uZWN0aW9u
Q29uZmlndXJhdGlvbiwKICAgICBJbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcsCisgICAgSW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLAogICAgIEdldFBlbmRpbmdQdXNoTWVz
c2FnZXMsCiAgICAgU3Vic2NyaWJlVG9QdXNoU2VydmljZSwKICAgICBVbnN1YnNjcmliZUZyb21Q
dXNoU2VydmljZSwKQEAgLTU5LDYgKzYwLDcgQEAgaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5k
c1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJl
cXVlc3RTeXN0ZW1Ob3RpZmljYXRpb25QZXJtaXNzaW9uOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6
OkdldFBlbmRpbmdQdXNoTWVzc2FnZXM6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0UHVz
aE1lc3NhZ2VGb3JUZXN0aW5nOgorICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRl
ZFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpTdWJzY3JpYmVU
b1B1c2hTZXJ2aWNlOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlVuc3Vic2NyaWJlRnJvbVB1c2hT
ZXJ2aWNlOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFB1c2hTdWJzY3JpcHRpb246CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViUHVzaE1lc3NhZ2UuaAppbmRleCBmOWU0M2YzMzNkNTY4NDg4YzJmYmUx
ZTZlYmMxMWQ2MjMzNGNmOGU3Li4xZjRlZmFjOTg0YjUyMjJkYmQxMGJlOGFhMzBjN2U1YTc4YmU5
OTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hNZXNzYWdlLmgKQEAgLTM3LDcgKzM3LDcg
QEAgc3RydWN0IFdlYlB1c2hNZXNzYWdlIHsKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViUHVzaE1lc3NhZ2U+IGRlY29kZShEZWNvZGVyJik7CiAK
LSAgICBWZWN0b3I8dWludDhfdD4gcHVzaERhdGE7CisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8
dWludDhfdD4+IHB1c2hEYXRhOwogICAgIFVSTCByZWdpc3RyYXRpb25VUkw7CiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBXZWJQdXNoTWVzc2FnZTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpv
cHRpb25hbDxXZWJQdXNoTWVzc2FnZT4gV2ViUHVzaE1lc3NhZ2U6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBwdXNoRGF0YTsK
KyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+Pj4gcHVzaERh
dGE7CiAgICAgZGVjb2RlciA+PiBwdXNoRGF0YTsKICAgICBpZiAoIXB1c2hEYXRhKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGM3YzMxYmM1NTdiNTVkNTE3MDVmYzM5ZDdlNjc5Yzk0
YzZhMGFmMy4uODI3OGU1MDI3NGU1MDBlZTFlOWRmYTY4ZmNmZTY1NjYzYmM2NjQxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NDYs
NyArOTQ2LDcgQEAKIAkJNTEyOTM1RTQxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxl
UGFnZUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQ
YWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJNTEyOUVCMTIyM0QwREU3QjAwQUYxQ0Q3
IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEyOUVCMTEyM0QwREU3ODAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNo
YXJlZC5oICovOyB9OwogCQk1MTJDRDY5ODI3MjFFRkM4MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1v
bkNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMkNENjk3MjcyMUVGQzMwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbi5o
ICovOyB9OwotCQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0
YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEy
Q0Q2OTkyNzIxRjA0OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCAqLzsgfTsK
KwkJNTEyQ0Q2OUEyNzIxRjBBOTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk5Mjcy
MUYwNDkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyRTM0RTUxMzBCNEQwNTAwQUJE
MTlBIC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0EzM0I0MTMwQjMwOEMwMEY4MENCNSAvKiBXS0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTEyRUNDMzUyNzE5NkFEQjAwMDg5QjY2IC8qIFByaXZhdGVDbGlj
a01lYXN1cmVtZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUNCOTMwRkUyNkU4MDIxNjAwMzJCMUMwIC8qIFByaXZhdGVDbGlja01l
YXN1cmVtZW50Q29ubmVjdGlvbi5oICovOyB9OwogCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAg
LyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4OEYxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCAqLzsgfTsKQEAgLTE5OTgsNiArMTk5OCw4IEBACiAJ
CUU1Q0JBNzY3MjdBMzE4RTEwMERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1Q0JBNzYwMjdBMzE4Nzkw
MERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCAqLzsgfTsKIAkJRTVDQkE3NjgyN0EzMThF
MTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVDQkE3NjIyN0EzMTg3OTAwREY3ODU4IC8qIFVuaWZp
ZWRTb3VyY2UxMTcuY3BwICovOyB9OwogCQlFNURFRkE2ODI2RjhGNDI2MDBBQjY4REIgLyogUGhv
dG9zVUlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU1REVGQTY3MjZGOEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQSS5oICovOyB9OworCQlFQjM2
QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQ
dXNoU2VydmljZS5oICovOyB9OworCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNl
cnZpY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
QjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi87IH07CiAJCUVCQThE
M0FCMjdBNUUzMTMwMENCNzkwMCAvKiBBcHBsZVB1c2hTZXJ2aWNlU1BJLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQTI3QTVFMzEzMDBDQjc5
MDAgLyogQXBwbGVQdXNoU2VydmljZVNQSS5oICovOyB9OwogCQlFQkE4RDNCMjI3QTVFMzNGMDBD
Qjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyog
QXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi87IH07CiAJCUVCQThEM0IzMjdBNUUzM0Yw
MENCNzkwMCAvKiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBRDI3QTVFMzNFMDBDQjc5MDAgLyog
TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovOyB9OwpAQCAtNjQ1OSw2ICs2NDYxLDggQEAK
IAkJRTVERUZBNjcyNkY4RjQyNjAwQUI2OERCIC8qIFBob3Rvc1VJU1BJLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBob3Rvc1VJU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJE
Mjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNo
ZC5tYWMucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJFMjc1QUUx
MzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLmlvcy5wbGlzdCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5pb3Mu
cGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVCMzZCMTY2MjdBN0I0NTAwMDUw
RTAwRCAvKiBQdXNoU2VydmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
dXNoU2VydmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjM2QjE2NzI3QTdC
NDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBQdXNoU2VydmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRUJBOEQzQUEyN0E1RTMxMzAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VTUEkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGVQdXNoU2VydmljZVNQSS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyogQXBw
bGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUQyN0E1RTMzRTAwQ0I3OTAwIC8qIE1vY2tQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1B1c2hT
ZXJ2aWNlQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwOTgs
NiArMTAxMDIsOCBAQAogCQkJCTUxNjBFOTU4Mjc0QzBEODgwMDU2NzM4OCAvKiBQdXNoQXBwQnVu
ZGxlLm1tICovLAogCQkJCTUxRjdCQjc5Mjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29u
bmVjdGlvbi5oICovLAogCQkJCTUxRjdCQjdBMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50
Q29ubmVjdGlvbi5tbSAqLywKKwkJCQlFQjM2QjE2NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNl
cnZpY2UuaCAqLywKKwkJCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2Uu
bW0gKi8sCiAJCQkJRUJBOEQzQUYyN0E1RTMzRjAwQ0I3OTAwIC8qIFB1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5oICovLAogCQkJCUVCQThEM0IxMjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNv
bm5lY3Rpb24ubW0gKi8sCiAJCQkJNTE3QjVGNzcyNzVFOTc5NTAwMkRDMjJEIC8qIHdlYnB1c2hk
LmNwcCAqLywKQEAgLTEzMjUwLDYgKzEzMjU2LDcgQEAKIAkJCQk1MTdCNUY4MTI3NUU5N0I2MDAy
REMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0QyNzVF
OTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4g
SGVhZGVycyAqLywKKwkJCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUVCQThEM0I1MjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUExRTY4ODcwMUY2RTJCQUIwMDcw
MDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBDMjI3RTI0NTEx
MzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTU1MDksNiArMTU1MTYsNyBAQAogCQkJCTJENTRDMzFCMjEyRjREQTYwMDQ5QzE3
NCAvKiBQcm9jZXNzTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGODIyNzVF
OTdCNjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTdC
NUY3QjI3NUU5N0E5MDAyREMyMkQgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gaW4gU291cmNl
cyAqLywKKwkJCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4g
U291cmNlcyAqLywKIAkJCQlFQkE4RDNCNzI3QTVFMzNGMDBDQjc5MDAgLyogUHVzaFNlcnZpY2VD
b25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyN0YyNDUxMTMwQTAwRUQ2MTRE
IC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUEwQzIyNUUyNDM1NzVDRDAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbSBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaAppbmRleCA3NzY5YmI2YmRkNTgyOGU3YjE2NGMxNjdjODQ2MGNmZGJk
N2MwNDAwLi5iOTUzYmI5YzEyZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3ZGY0NmQ5NGEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApA
QCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigp
OwogICAgIH5Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCk7CiAKKyAgICBXZWJDb3JlOjpQdXNo
Q3J5cHRvOjpDbGllbnRLZXlzIGdlbmVyYXRlQ2xpZW50S2V5cygpIGZpbmFsOworCiAgICAgdm9p
ZCBzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiB0b3BpYywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
YXBpZFB1YmxpY0tleSwgU3Vic2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKICAgICB2b2lkIHVu
c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFw
aWRQdWJsaWNLZXksIFVuc3Vic2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4
IGRiZWZhNzRhZWNkOWE5ZWEwZTQxOTgzMzg2OGUzMDhkM2Q3NmY2MDMuLmM0Y2YyZTY3OWI5MmJm
OTIzNTYxYzE1OGMyM2QzNjgwMWQ4NzgzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAgLTI2LDYgKzI2LDEwIEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIK
IAorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OjpQdXNoQ3J5cHRvOworCiBuYW1lc3BhY2UgV2ViUHVzaEQgewogCiBNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkKQEAgLTM0LDE0ICszOCwzMCBA
QCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkK
IAogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6fk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24o
KSA9IGRlZmF1bHQ7CiAKLXZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2NyaWJl
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFN1YnNjcmliZUhhbmRsZXIm
JiBoYW5kbGVyKQorQ2xpZW50S2V5cyBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0
ZUNsaWVudEtleXMoKQogewotICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21h
aW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1c2Vy
SW5mbzpuaWxdKTsKKyAgICAvLyBFeGFtcGxlIHZhbHVlcyBmcm9tIFJGQzgyOTEgU2VjdGlvbiA1
LgorICAgIGF1dG8gcHVibGljS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCQ1Z4c3I3Tl9lTmdWUnF2
SHREMHpUWnNFYzYtVlYtSnZMZXhocVV6T1JjeGFPemk2LUFZV1h2VEJIbTRianlQanM3VmQ4cFpH
SDZTUnBrTnRvSUFpdzQiX3MpLnZhbHVlKCk7CisgICAgYXV0byBwcml2YXRlS2V5ID0gYmFzZTY0
VVJMRGVjb2RlKCJxMWRYcHczVXBUNVZPbXVfY2ZfdjZpaDA3QWVtczNuanhJLUpXZ0xjTTk0Il9z
KS52YWx1ZSgpOworICAgIGF1dG8gc2VjcmV0ID0gYmFzZTY0VVJMRGVjb2RlKCJCVEJaTXFISDZy
NFR0czdKX2FTSWdnIl9zKS52YWx1ZSgpOworCisgICAgcmV0dXJuIENsaWVudEtleXMgeyBQMjU2
REhLZXlQYWlyIHsgV1RGTW92ZShwdWJsaWNLZXkpLCBXVEZNb3ZlKHByaXZhdGVLZXkpIH0sIFdU
Rk1vdmUoc2VjcmV0KSB9OworfQorCit2b2lkIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1
YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGlj
S2V5LCBTdWJzY3JpYmVIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBhdXRvIGFsd2F5c1JlamVj
dGVkS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCRUF4YVVNbzFzOHRqT1J4SmZuU1N2V2hZYjR1NTFr
ZzFoV1Qyc185Z3BWN1p4YXIxcEZfMkJROEFuY3VBZFMyQm9MaE40cWF4ekJ5MkN3SEU4QkJ6V2ci
X3MpLnZhbHVlKCk7CisgICAgaWYgKHZhcGlkUHVibGljS2V5ID09IGFsd2F5c1JlamVjdGVkS2V5
KSB7CisgICAgICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJXZWJQ
dXNoIiBjb2RlOi0xIHVzZXJJbmZvOm5pbF0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaGFuZGxlcihAImh0dHBzOi8vd2Via2l0Lm9yZy9wdXNoIiwgbmlsKTsKIH0KIAogdm9pZCBN
b2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mLCBVbnN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQogewotICAg
IGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWlu
IGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKKyAgICBoYW5k
bGVyKHRydWUsIG5pbCk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IE1vY2tQdXNoU2VydmljZUNvbm5l
Y3Rpb246OmVuYWJsZWRUb3BpY3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9QdXNoU2VydmljZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZlNDE1ZTAwOGRkNjMwNTEwNTgyNGY4Y2ZiMDI2OTVhZmMzMjNmZWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUHVzaFNl
cnZpY2VDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0V4Y2VwdGlvbkRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRhYmFz
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaFN1YnNjcmlwdGlvbkRhdGEuaD4KKyNpbmNsdWRl
IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitjbGFzcyBHZXRT
dWJzY3JpcHRpb25SZXF1ZXN0OworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0OworY2xhc3MgU3Vi
c2NyaWJlUmVxdWVzdDsKK2NsYXNzIFVuc3Vic2NyaWJlUmVxdWVzdDsKKworY2xhc3MgUHVzaFNl
cnZpY2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVzaW5n
IEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcm
IGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJik+OworCisgICAgc3Rh
dGljIHZvaWQgY3JlYXRlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYp
OworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU1vY2tTZXJ2aWNlKEluY29taW5nUHVzaE1lc3NhZ2VI
YW5kbGVyJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2
aWNlPiYmKT4mJik7CisgICAgflB1c2hTZXJ2aWNlKCk7CisKKyAgICBQdXNoU2VydmljZUNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KKyAgICBXZWJDb3Jl
OjpQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQorCisgICAg
dm9pZCBnZXRTdWJzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0
ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNl
cHRpb25EYXRhPiYpPiYmKTsKKyAgICB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRs
ZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
dmFwaWRQdWJsaWNLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2Vi
Q29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYp
OworICAgIHZvaWQgdW5zdWJzY3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNjb3BlLCBXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNl
cHRpb25EYXRhPiYpPiYmKTsKKworICAgIHZvaWQgZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25S
ZXF1ZXN0KEdldFN1YnNjcmlwdGlvblJlcXVlc3QmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlU3Vi
c2NyaWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0Jik7CisgICAgdm9pZCBkaWRDb21wbGV0ZVVu
c3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3QmKTsKKworICAgIHZvaWQgZGlkUmVj
ZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9KTsKKworcHJpdmF0ZToKKyAgICBQ
dXNoU2VydmljZShVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiYmLCBVbmlxdWVSZWY8
V2ViQ29yZTo6UHVzaERhdGFiYXNlPiYmLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmKTsK
KworICAgIHVzaW5nIFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCA9IEhhc2hNYXA8c3RkOjp0dXBsZTxT
dHJpbmcsIFN0cmluZz4sIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+
Pj47CisgICAgdm9pZCBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVz
dE1hcCYsIHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+JiYpOworICAgIHZvaWQg
ZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiwgUHVzaFNl
cnZpY2VSZXF1ZXN0Jik7CisKKyAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlB1c2hEYXRhYmFzZT4gbV9kYXRh
YmFzZTsKKworICAgIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyIG1faW5jb21pbmdQdXNoTWVz
c2FnZUhhbmRsZXI7CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV9nZXRTdWJzY3JpcHRp
b25SZXF1ZXN0czsKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV9zdWJzY3JpYmVSZXF1ZXN0
czsKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV91bnN1YnNjcmliZVJlcXVlc3RzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvUHVzaFNlcnZpY2UubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNl
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmVmMGI3Nzk2MDNkZTNkNmI1Y2ZmZWFmYWMzZDE4MmE1NzkzMjIxYTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1t
CkBAIC0wLDAgKzEsNTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJQdXNoU2VydmljZS5oIgorCisjaW1wb3J0ICJBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlv
bi5oIgorI2ltcG9ydCAiQXBwbGVQdXNoU2VydmljZVNQSS5oIgorI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIgorI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1c2hNZXNzYWdlQ3J5cHRvLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDx3dGYvT1NPYmpl
Y3RQdHIuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvZGFy
d2luL1hQQ1NQSS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYlB1
c2hEIHsKKworc3RhdGljIHZvaWQgdXBkYXRlVG9waWNMaXN0cyhQdXNoU2VydmljZUNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZGF0YWJhc2UuZ2V0VG9waWNzQnlX
YWtlU3RhdGUoWyZjb25uZWN0aW9uLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShhdXRvJiYgdG9waWNNYXApIG11dGFibGUgeworICAgICAgICAvLyBGSVhN
RTogbW92ZSB0b3BpY3MgdG8gaWdub3JlZCBsaXN0IGJhc2VkIG9uIHVzZXIgcHJlZmVyZW5jZXMu
CisgICAgICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6VG9waWNMaXN0cyB0b3BpY0xpc3RzOwor
CisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpXYWtp
bmcpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh0b3BpY0xp
c3RzLmVuYWJsZWRUb3BpY3MsIGl0LT52YWx1ZSk7CisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9w
aWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpPcHBvcnR1bmlzdGljKTsgaXQgIT0gdG9waWNNYXAu
ZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAodG9waWNMaXN0cy5vcHBvcnR1bmlzdGljVG9w
aWNzLCBpdC0+dmFsdWUpOworICAgICAgICBpZiAoYXV0byBpdCA9IHRvcGljTWFwLmZpbmQoUHVz
aFdha2VTdGF0ZTo6Tm9uV2FraW5nKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAgICAgICAg
ICBzdGQ6OnN3YXAodG9waWNMaXN0cy5ub25XYWtpbmdUb3BpY3MsIGl0LT52YWx1ZSk7CisKKyAg
ICAgICAgY29ubmVjdGlvbi5zZXRUb3BpY0xpc3RzKFdURk1vdmUodG9waWNMaXN0cykpOworCisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKyNpZiBIQVZFKEFQUExF
X1BVU0hfU0VSVklDRV9VUkxfVE9LRU5fU1VQUE9SVCkKKwordm9pZCBQdXNoU2VydmljZTo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+
JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBhZG9wdE9TT2Jq
ZWN0KG9zX3RyYW5zYWN0aW9uX2NyZWF0ZSgiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wdXNo
LXNlcnZpY2UtaW5pdCIpKTsKKworICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbiBBU0FQIHNv
IHRoYXQgd2UgYm9vdHN0cmFwX2NoZWNrX2luIHRvIHRoZSBzZXJ2aWNlIGluIGEgdGltZWx5IG1h
bm5lci4KKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlUmVmPEFwcGxlUHVzaFNlcnZp
Y2VDb25uZWN0aW9uPihpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSk7CisKKyAgICBQdXNoRGF0YWJh
c2U6OmNyZWF0ZShkYXRhYmFzZVBhdGgsIFt0cmFuc2FjdGlvbiA9IFdURk1vdmUodHJhbnNhY3Rp
b24pLCBjb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9uKSwgbWVzc2FnZUhhbmRsZXIgPSBX
VEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwgY3JlYXRpb25IYW5kbGVyID0gV1RGTW92ZShjcmVhdGlv
bkhhbmRsZXIpXShhdXRvJiYgZGF0YWJhc2VSZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAo
IWRhdGFiYXNlUmVzdWx0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaCBz
ZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoIGRhdGFiYXNlIGVycm9yIik7CisgICAg
ICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsK
KyAgICAgICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZGF0YWJhc2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5v
bk51bGxVbmlxdWVQdHIoV1RGTW92ZShkYXRhYmFzZVJlc3VsdCkpOworICAgICAgICBVbmlxdWVS
ZWY8UHVzaFNlcnZpY2U+IHNlcnZpY2UoKm5ldyBQdXNoU2VydmljZShXVEZNb3ZlKGNvbm5lY3Rp
b24pLCBXVEZNb3ZlKGRhdGFiYXNlKSwgV1RGTW92ZShtZXNzYWdlSGFuZGxlcikpKTsKKworICAg
ICAgICBhdXRvJiBjb25uZWN0aW9uUmVmID0gc2VydmljZS0+Y29ubmVjdGlvbigpOworICAgICAg
ICBhdXRvJiBkYXRhYmFzZVJlZiA9IHNlcnZpY2UtPmRhdGFiYXNlKCk7CisKKyAgICAgICAgLy8g
T25seSBwcm92aWRlIHRoZSBzZXJ2aWNlIG9iamVjdCBiYWNrIHRvIHRoZSBjYWxsZXIgYWZ0ZXIg
d2UndmUgc3luY2VkIHRoZSB0b3BpYyBsaXN0cyBpbgorICAgICAgICAvLyB0aGUgZGF0YWJhc2Ug
d2l0aCB0aGUgUHVzaFNlcnZpY2VDb25uZWN0aW9uL0FQU0Nvbm5lY3Rpb24uIFRoaXMgZW5zdXJl
cyB0aGF0IHdlIHdvbid0CisgICAgICAgIC8vIHNlcnZpY2UgYW55IGNhbGxzIHRvIHN1YnNjcmli
ZS91bnN1YnNjcmliZS9ldGMuIHVudGlsIGFmdGVyIHRoZSB0b3BpYyBsaXN0cyBhcmUgdXAgdG8K
KyAgICAgICAgLy8gZGF0ZSwgd2hpY2ggQVBTQ29ubmVjdGlvbiBjYXJlcyBhYm91dC4KKyAgICAg
ICAgdXBkYXRlVG9waWNMaXN0cyhjb25uZWN0aW9uUmVmLCBkYXRhYmFzZVJlZiwgW3RyYW5zYWN0
aW9uID0gV1RGTW92ZSh0cmFuc2FjdGlvbiksIHNlcnZpY2UgPSBXVEZNb3ZlKHNlcnZpY2UpLCBj
cmVhdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc2VydmljZS5tb3ZlVG9VbmlxdWVQdHIoKSk7Cisg
ICAgICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGxwdHI7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCisjZWxzZQorCit2b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxl
cikKK3sKKyAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigp
KTsKK30KKworI2VuZGlmIC8vIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQ
T1JUKQorCit2b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGVNb2NrU2VydmljZShJbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0
ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAg
IFB1c2hEYXRhYmFzZTo6Y3JlYXRlKFNRTGl0ZURhdGFiYXNlOjppbk1lbW9yeVBhdGgoKSwgW21l
c3NhZ2VIYW5kbGVyID0gV1RGTW92ZShtZXNzYWdlSGFuZGxlciksIGNyZWF0aW9uSGFuZGxlciA9
IFdURk1vdmUoY3JlYXRpb25IYW5kbGVyKV0oYXV0byYmIGRhdGFiYXNlUmVzdWx0KSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVJlc3VsdCkgeworICAgICAgICAgICAgY3JlYXRpb25I
YW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4oKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlUmVm
PE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24+KCk7CisgICAgICAgIGF1dG8gZGF0YWJhc2UgPSBt
YWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92ZShkYXRhYmFzZVJlc3VsdCkp
OworICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPihu
ZXcgUHVzaFNlcnZpY2UoV1RGTW92ZShjb25uZWN0aW9uKSwgV1RGTW92ZShkYXRhYmFzZSksIFdU
Rk1vdmUobWVzc2FnZUhhbmRsZXIpKSkpOworICAgIH0pOworfQorCitQdXNoU2VydmljZTo6UHVz
aFNlcnZpY2UoVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4mJiBwdXNoU2VydmljZUNv
bm5lY3Rpb24sIFVuaXF1ZVJlZjxQdXNoRGF0YWJhc2U+JiYgcHVzaERhdGFiYXNlLCBJbmNvbWlu
Z1B1c2hNZXNzYWdlSGFuZGxlciYmIGluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKQorICAgIDog
bV9jb25uZWN0aW9uKFdURk1vdmUocHVzaFNlcnZpY2VDb25uZWN0aW9uKSkKKyAgICAsIG1fZGF0
YWJhc2UoV1RGTW92ZShwdXNoRGF0YWJhc2UpKQorICAgICwgbV9pbmNvbWluZ1B1c2hNZXNzYWdl
SGFuZGxlcihXVEZNb3ZlKGluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKSkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKTsKKworICAgIG1fY29ubmVj
dGlvbi0+c3RhcnRMaXN0ZW5pbmdGb3JQdXNoTWVzc2FnZXMoW3RoaXNdKE5TU3RyaW5nICp0b3Bp
YywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykgeworICAgICAgICBkaWRSZWNlaXZlUHVzaE1lc3Nh
Z2UodG9waWMsIHVzZXJJbmZvKTsKKyAgICB9KTsKK30KKworUHVzaFNlcnZpY2U6On5QdXNoU2Vy
dmljZSgpID0gZGVmYXVsdDsKKworc3RhdGljIFB1c2hTdWJzY3JpcHRpb25EYXRhIG1ha2VQdXNo
U3Vic2NyaXB0aW9uRnJvbVJlY29yZChQdXNoUmVjb3JkJiYgcmVjb3JkKQoreworICAgIHJldHVy
biBQdXNoU3Vic2NyaXB0aW9uRGF0YSB7CisgICAgICAgIHJlY29yZC5pZGVudGlmaWVyLAorICAg
ICAgICBXVEZNb3ZlKHJlY29yZC5lbmRwb2ludCksCisgICAgICAgIFdURk1vdmUocmVjb3JkLmV4
cGlyYXRpb25UaW1lKSwKKyAgICAgICAgV1RGTW92ZShyZWNvcmQuc2VydmVyVkFQSURQdWJsaWNL
ZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5jbGllbnRQdWJsaWNLZXkpLAorICAgICAgICBX
VEZNb3ZlKHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0KQorICAgIH07Cit9CisKK3N0YXRpYyBTdHJp
bmcgbWFrZVB1c2hUb3BpYyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgc2NvcGUpCit7CisgICAgcmV0dXJuIGJ1bmRsZUlkZW50aWZpZXIgKyAiICIgKyBzY29w
ZTsKK30KKworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QdXNoU2VydmljZVJlcXVlc3QoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEFTQ0lJTGl0ZXJhbCBkZXNjcmlwdGlvbigpIGNvbnN0ID0g
MDsKKworICAgIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fYnVu
ZGxlSWRlbnRpZmllcjsgfQorICAgIGNvbnN0IFN0cmluZyYgc2NvcGUoKSB7IHJldHVybiBtX3Nj
b3BlOyB9OworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOworCitwcm90ZWN0ZWQ6Cisg
ICAgUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcm
IGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUpCisgICAgICAgIDogbV9zZXJ2
aWNlKHNlcnZpY2UpCisgICAgICAgICwgbV9jb25uZWN0aW9uKHNlcnZpY2UuY29ubmVjdGlvbigp
KQorICAgICAgICAsIG1fZGF0YWJhc2Uoc2VydmljZS5kYXRhYmFzZSgpKQorICAgICAgICAsIG1f
YnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyKQorICAgICAgICAsIG1fc2NvcGUoc2Nv
cGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CisKKyAg
ICBQdXNoU2VydmljZSYgbV9zZXJ2aWNlOworICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbiYgbV9j
b25uZWN0aW9uOworICAgIFB1c2hEYXRhYmFzZSYgbV9kYXRhYmFzZTsKKyAgICBTdHJpbmcgbV9i
dW5kbGVJZGVudGlmaWVyOworICAgIFN0cmluZyBtX3Njb3BlOworICAgIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoUHVzaFNlcnZpY2VSZXF1ZXN0Jik+IG1fY29tcGxldGlvbkhhbmRsZXI7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlPgorY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0
SW1wbCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3QgeworcHVibGljOgorICAgIHZvaWQgc3Rh
cnQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5
KCkgfHwgbV9zY29wZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJlamVjdChXZWJDb3JlOjpF
eGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJvciwgIkludmFsaWQgc2VuZGVyIl9zIH0p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5z
YWN0aW9uRGVzY3JpcHRpb24gPSBTdHJpbmcoImNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQ6Il9z
KSArIGRlc2NyaXB0aW9uKCkgKyAiOiJfcyArIG1fYnVuZGxlSWRlbnRpZmllciArICI6Il9zICsg
bV9zY29wZTsKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9IGFkb3B0T1NPYmplY3Qob3NfdHJhbnNh
Y3Rpb25fY3JlYXRlKHRyYW5zYWN0aW9uRGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSkpOworICAg
ICAgICBzdGFydEludGVybmFsKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgUmVz
dWx0SGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8UmVzdWx0
VHlwZSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT47CisKKyAgICBQdXNoU2VydmljZVJlcXVl
c3RJbXBsKFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQor
ICAgICAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdChzZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBz
Y29wZSkKKyAgICAgICAgLCBtX3Jlc3VsdEhhbmRsZXIoV1RGTW92ZShyZXN1bHRIYW5kbGVyKSkK
KyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRJbnRlcm5hbCgpID0gMDsKKworICAgIHZv
aWQgZnVsZmlsbChSZXN1bHRUeXBlIHJlc3VsdCkKKyAgICB7CisgICAgICAgIG1fcmVzdWx0SGFu
ZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICBmaW5pc2goKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiYgZGF0YSkKKyAgICB7CisgICAgICAg
IG1fcmVzdWx0SGFuZGxlcihtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGRhdGEpKSk7CisgICAgICAg
IGZpbmlzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRIYW5kbGVyIG1fcmVzdWx0
SGFuZGxlcjsKKyAgICBPU09iamVjdFB0cjxvc190cmFuc2FjdGlvbl90PiBtX3RyYW5zYWN0aW9u
OworfTsKKworY2xhc3MgR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCA6IHB1YmxpYyBQdXNoU2Vydmlj
ZVJlcXVlc3RJbXBsPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+
PiB7CitwdWJsaWM6CisgICAgR2V0U3Vic2NyaXB0aW9uUmVxdWVzdChQdXNoU2VydmljZSYsIGNv
bnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0
SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5HZXRTdWJzY3JpcHRpb25SZXF1ZXN0KCkgPSBkZWZh
dWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gIkdldFN1YnNjcmlwdGlvblJlcXVlc3QiX3M7IH0KKyAgICB2b2lkIHN0
YXJ0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIGZpbmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNl
LmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCgqdGhpcyk7IH0KK307CisKK0dldFN1
YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlwdGlvblJlcXVlc3QoUHVzaFNlcnZpY2UmIHNl
cnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29w
ZSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRsZXIpCisgICAgOiBQdXNoU2VydmljZVJlcXVl
c3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlc3VsdEhh
bmRsZXIpKQoreworfQorCisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBzaWRlIG9mIFB1c2hN
YW5hZ2VyLmdldFN1YnNjcmlwdGlvbi4KK3ZvaWQgR2V0U3Vic2NyaXB0aW9uUmVxdWVzdDo6c3Rh
cnRJbnRlcm5hbCgpCit7CisgICAgbV9kYXRhYmFzZS5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZp
ZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUsIFt0aGlzXShhdXRvJiYgcmVz
dWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGZ1bGZp
bGwoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4geyB9KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bGZpbGwobWFrZVB1c2hT
dWJzY3JpcHRpb25Gcm9tUmVjb3JkKFdURk1vdmUoKnJlc3VsdCkpKTsKKyAgICB9KTsKK30KKwor
Y2xhc3MgU3Vic2NyaWJlUmVxdWVzdCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJbXBsPFdl
YkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiB7CitwdWJsaWM6CisgICAgU3Vic2NyaWJlUmVx
dWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgUmVz
dWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5TdWJzY3JpYmVSZXF1ZXN0KCkgPSBkZWZhdWx0
OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gIlN1YnNjcmliZVJlcXVlc3QiX3M7IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJu
YWwoKSBmaW5hbCB7IHN0YXJ0SW1wbChJc1JldHJ5OjpObyk7IH0KKyAgICB2b2lkIGZpbmlzaCgp
IGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdCgqdGhpcyk7IH0K
KworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIElzUmV0cnkgeyBObywgWWVzIH07CisgICAgdm9p
ZCBzdGFydEltcGwoSXNSZXRyeSk7CisgICAgdm9pZCBhdHRlbXB0VG9SZWNvdmVyRnJvbVRvcGlj
QWxyZWFkeUluRmlsdGVyRXJyb3IoU3RyaW5nJiYpOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3Zh
cGlkUHVibGljS2V5OworfTsKKworU3Vic2NyaWJlUmVxdWVzdDo6U3Vic2NyaWJlUmVxdWVzdChQ
dXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBS
ZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikKKyAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdElt
cGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVzdWx0SGFuZGxl
cikpCisgICAgLCBtX3ZhcGlkUHVibGljS2V5KHZhcGlkUHVibGljS2V5KQoreworfQorCisvLyBJ
bXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBzaWRlIG9mIFB1c2hNYW5hZ2VyLnN1YnNjcmliZSgpLgor
dm9pZCBTdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEltcGwoSXNSZXRyeSBpc1JldHJ5KQoreworICAg
IG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUobV9idW5kbGVJ
ZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpcywgaXNSZXRyeV0oYXV0byYmIHJlc3VsdCkgbXV0YWJs
ZSB7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChtX3ZhcGlkUHVibGlj
S2V5ICE9IHJlc3VsdC0+c2VydmVyVkFQSURQdWJsaWNLZXkpCisgICAgICAgICAgICAgICAgcmVq
ZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwg
IlByb3ZpZGVkIGFwcGxpY2F0aW9uU2VydmVyS2V5IGRvZXMgbm90IG1hdGNoIHRoZSBrZXkgaW4g
dGhlIGV4aXN0aW5nIHN1YnNjcmlwdGlvbi4iX3MgfSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgZnVsZmlsbChtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92
ZSgqcmVzdWx0KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byB0b3BpYyA9IG1ha2VQdXNoVG9waWMobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlKTsK
KyAgICAgICAgbV9jb25uZWN0aW9uLnN1YnNjcmliZSh0b3BpYywgbV92YXBpZFB1YmxpY0tleSwg
W3RoaXMsIGlzUmV0cnksIHRvcGljXShOU1N0cmluZyAqZW5kcG9pbnQsIE5TRXJyb3IgKmVycm9y
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiB1c2UgcG9pbnRlciBjb21wYXJpc29uIG9uY2UgQVBTVVJMVG9rZW5FcnJvckRvbWFp
biBpcyBleHRlcm5lZC4KKyAgICAgICAgICAgICAgICBpZiAoaXNSZXRyeSA9PSBJc1JldHJ5OjpO
byAmJiBbZXJyb3IuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpAIkFQU1VSTFRva2VuRXJyb3JEb21h
aW4iXSAmJiBlcnJvci5jb2RlID09IEFQU1VSTFRva2VuRXJyb3JDb2RlVG9waWNBbHJlYWR5SW5G
aWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFRvUmVjb3ZlckZyb21Ub3BpY0Fs
cmVhZHlJbkZpbHRlckVycm9yKFdURk1vdmUodG9waWMpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
KFB1c2gsICJQdXNoTWFuYWdlci5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3Bl
OiAle3NlbnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkb21haW46ICV7cHVibGljfXMgY29kZTogJWxs
ZCkiLCBtX2J1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0
YSgpLCBlcnJvci5kb21haW4uVVRGOFN0cmluZywgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZXJyb3Iu
Y29kZSkpOworICAgICAgICAgICAgICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsg
V2ViQ29yZTo6QWJvcnRFcnJvciwgIkZhaWxlZCBkdWUgdG8gaW50ZXJuYWwgc2VydmljZSBlcnJv
ciJfcyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGF1dG8gY2xpZW50S2V5cyA9IG1fc2VydmljZS5jb25uZWN0aW9uKCkuZ2VuZXJhdGVD
bGllbnRLZXlzKCk7CisgICAgICAgICAgICBQdXNoUmVjb3JkIHJlY29yZDsKKyAgICAgICAgICAg
IHJlY29yZC5idW5kbGVJRCA9IG1fYnVuZGxlSWRlbnRpZmllcjsKKyAgICAgICAgICAgIHJlY29y
ZC5zZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG1fc2Nv
cGUpLT5kYXRhKCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJlY29yZC5zY29wZSA9IG1fc2Nv
cGU7CisgICAgICAgICAgICByZWNvcmQuZW5kcG9pbnQgPSBlbmRwb2ludDsKKyAgICAgICAgICAg
IHJlY29yZC50b3BpYyA9IFdURk1vdmUodG9waWMpOworICAgICAgICAgICAgcmVjb3JkLnNlcnZl
clZBUElEUHVibGljS2V5ID0gbV92YXBpZFB1YmxpY0tleTsKKyAgICAgICAgICAgIHJlY29yZC5j
bGllbnRQdWJsaWNLZXkgPSBXVEZNb3ZlKGNsaWVudEtleXMuY2xpZW50UDI1NkRIS2V5UGFpci5w
dWJsaWNLZXkpOworICAgICAgICAgICAgcmVjb3JkLmNsaWVudFByaXZhdGVLZXkgPSBXVEZNb3Zl
KGNsaWVudEtleXMuY2xpZW50UDI1NkRIS2V5UGFpci5wcml2YXRlS2V5KTsKKyAgICAgICAgICAg
IHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0ID0gV1RGTW92ZShjbGllbnRLZXlzLnNoYXJlZEF1dGhT
ZWNyZXQpOworCisgICAgICAgICAgICBtX2RhdGFiYXNlLmluc2VydFJlY29yZChyZWNvcmQsIFt0
aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3Vs
dCkgeworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaE1hbmFnZXIu
c3Vic2NyaWJlKGJ1bmRsZUlEOiAle3B1YmxpY31zLCBzY29wZTogJXtzZW5zaXRpdmV9cykgZmFp
bGVkIHdpdGggZGF0YWJhc2UgZXJyb3IiLCBtX2J1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEo
KSwgbV9zY29wZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpBYm9ydEVycm9yLCAiRmFpbGVkIGR1ZSB0
byBpbnRlcm5hbCBkYXRhYmFzZSBlcnJvciJfcyB9KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzdXBw
b3J0IHBhcnRpYWwgdG9waWMgbGlzdCB1cGRhdGVzLgorICAgICAgICAgICAgICAgIHVwZGF0ZVRv
cGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFiYXNlLCBbdGhpcywgcmVjb3JkID0gV1RGTW92
ZSgqcmVzdWx0KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmlsbChtYWtl
UHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92ZShyZWNvcmQpKSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKy8v
IFRyaWVzIHRvIHJlY292ZXIgZnJvbSBhIHRvcGljIGJlaW5nIG1vdmVkIHRvIHRoZSBnbG9iYWwg
cGF1c2VkIGZpbHRlciAocmRhcjovLzg4MTM5MzMwKS4KK3ZvaWQgU3Vic2NyaWJlUmVxdWVzdDo6
YXR0ZW1wdFRvUmVjb3ZlckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFN0cmluZyYmIHRv
cGljKQoreworICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB0b3BpYyA9IFdU
Rk1vdmUodG9waWMpXSgpIG11dGFibGUgeworICAgICAgICAvLyBUaGlzIHRha2VzIG93bmVyc2hp
cCBvZiB0aGUgcGF1c2VkIHRvcGljIGFuZCB0ZWxscyBhcHNkIHRvIGZvcmdldCBhYm91dCB0aGUg
dG9waWMuCisgICAgICAgIGF1dG8gb3JpZ2luYWxUb3BpY3MgPSBtX2Nvbm5lY3Rpb24uaWdub3Jl
ZFRvcGljcygpOworICAgICAgICBhdXRvIGF1Z21lbnRlZFRvcGljcyA9IG9yaWdpbmFsVG9waWNz
OworICAgICAgICBhdWdtZW50ZWRUb3BpY3MuYXBwZW5kKHRvcGljKTsKKyAgICAgICAgbV9jb25u
ZWN0aW9uLnNldElnbm9yZWRUb3BpY3MoV1RGTW92ZShhdWdtZW50ZWRUb3BpY3MpKTsKKyAgICAg
ICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3MoV1RGTW92ZShvcmlnaW5hbFRvcGljcykp
OworCisgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFt0aGlzXSgpIG11dGFibGUg
eworICAgICAgICAgICAgc3RhcnRJbXBsKElzUmV0cnk6Olllcyk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCitjbGFzcyBVbnN1YnNjcmliZVJlcXVlc3QgOiBwdWJsaWMgUHVzaFNlcnZpY2VS
ZXF1ZXN0SW1wbDxib29sPiB7CitwdWJsaWM6CisgICAgVW5zdWJzY3JpYmVSZXF1ZXN0KFB1c2hT
ZXJ2aWNlJiwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNj
b3BlLCBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2
aXJ0dWFsIH5VbnN1YnNjcmliZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAg
ICBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiVW5zdWJz
Y3JpYmVSZXF1ZXN0Il9zOyB9CisgICAgdm9pZCBzdGFydEludGVybmFsKCkgZmluYWw7CisgICAg
dm9pZCBmaW5pc2goKSBmaW5hbCB7IG1fc2VydmljZS5kaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVx
dWVzdCgqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmll
ciBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXI7Cit9OworCitVbnN1YnNjcmliZVJlcXVlc3Q6OlVu
c3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBidW5k
bGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBQdXNoU3Vic2NyaXB0aW9uSWRlbnRp
ZmllciBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxl
cikKKyAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmll
ciwgc2NvcGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikpCisgICAgLCBtX3N1YnNjcmlwdGlvbklk
ZW50aWZpZXIoc3Vic2NyaXB0aW9uSWRlbnRpZmllcikKK3sKK30KKworLy8gSW1wbGVtZW50cyB0
aGUgd2VicHVzaGQgc2lkZSBvZiBQdXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlLgordm9pZCBV
bnN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW50ZXJuYWwoKQoreworICAgIG1fZGF0YWJhc2UuZ2V0
UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVyLCBtX3Nj
b3BlLCBbdGhpc10oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVzdWx0
IHx8IG1fc3Vic2NyaXB0aW9uSWRlbnRpZmllciAhPSByZXN1bHQtPmlkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgIGZ1bGZpbGwoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byB0b3BpYyA9IG1ha2VQdXNoVG9waWMobV9idW5kbGVJZGVudGlmaWVy
LCBtX3Njb3BlKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnVuc3Vic2NyaWJlKHRvcGljLCByZXN1
bHQtPnNlcnZlclZBUElEUHVibGljS2V5LCBbdGhpc10oYm9vbCB1bnN1YnNjcmliZWQsIE5TRXJy
b3IgKmVycm9yKSBtdXRhYmxlIHsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAg
ICAgIC8vIElmIHdlIGZhaWwgdG8gdW5zdWJzY3JpYmUgZnJvbSBhcHNkLCBqdXN0IGRyb3AgYSBs
b2cuIFdlIHN0aWxsIHdhbnQgdG8gY29udGludWUgYW5kIHJlbW92ZSB0aGUgcmVjb3JkIGZyb20g
b3VyIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhIHN0YXRlIG1pc21hdGNoIGJldHdlZW4gb3Vy
IGRhdGFiYXNlIGFuZCBhcHNkJ3MgZGF0YWJhc2UuCisgICAgICAgICAgICBpZiAoIXVuc3Vic2Ny
aWJlZCkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaFN1YnNjcmlwdGlv
bi51bnN1YnNjcmliZShidW5kbGVJRDogJXtwdWJsaWN9cywgc2NvcGU6ICV7c2Vuc2l0aXZlfXMp
IGZhaWxlZCB3aXRoIGRvbWFpbjogJXtwdWJsaWN9cyBjb2RlOiAlbGxkKSIsIG1fYnVuZGxlSWRl
bnRpZmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0ZjgoKS5kYXRhKCksIGVycm9yLmRvbWFp
bi5VVEY4U3RyaW5nID86ICJub25lIiwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZXJyb3IuY29kZSkp
OworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTSh1bnN1YnNjcmliZWQpOworICAgICAg
ICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyNlbmRpZgorCisgICAgICAgICAgICBtX2RhdGFi
YXNlLnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihtX3N1YnNjcmlwdGlvbklkZW50aWZpZXIsIFt0
aGlzXShib29sIHJlbW92ZWQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghcmVtb3Zl
ZCkgeworICAgICAgICAgICAgICAgICAgICBmdWxmaWxsKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBzdXBwb3J0IHBhcnRpYWwgdG9waWMgbGlzdCB1cGRhdGVzLgorICAgICAgICAgICAgICAg
IHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFiYXNlLCBbdGhpc10oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmlsbCh0cnVlKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLy8gT25s
eSBhbGxvdyBvbmUgcmVxdWVzdCBwZXIgKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlKSB0byBwcm9j
ZWVkIGF0IG9uY2UuIEZvciBpbnN0YW5jZSwgaWYgYSBnaXZlbgorLy8gcGFnZSBjYWxscyBQdXNo
TWFuYWdlci5zdWJzY3JpYmUoKSB0d2ljZSBpbiBhIHJvdywgdGhlIHNlY29uZCBzdWJzY3JpYmUg
Y2FsbCB3b24ndCBzdGFydCB1bnRpbAorLy8gdGhlIGZpcnN0IG9uZSBjb21wbGV0ZXMuCit2b2lk
IFB1c2hTZXJ2aWNlOjplbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVz
dE1hcCYgbWFwLCBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0PiYmIHJlcXVlc3Qp
Cit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfdHVwbGUocmVxdWVzdC0+YnVuZGxlSWRlbnRp
ZmllcigpLCByZXF1ZXN0LT5zY29wZSgpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5lbnN1
cmUoa2V5LCBbXSgpIHsKKyAgICAgICAgcmV0dXJuIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxQdXNo
U2VydmljZVJlcXVlc3Q+PiB7IH07CisgICAgfSk7CisKKyAgICBhdXRvIGFkZGVkUmVxdWVzdCA9
IHJlcXVlc3QuZ2V0KCk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RG
TW92ZShyZXF1ZXN0KSk7CisKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IGFkZGVkUmVxdWVzdC0+c3RhcnQoKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZmluaXNoZWRQ
dXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiBtYXAsIFB1c2hTZXJ2aWNl
UmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV90dXBsZShyZXF1
ZXN0LmJ1bmRsZUlkZW50aWZpZXIoKSwgcmVxdWVzdC5zY29wZSgpKTsKKyAgICBhdXRvIHJlcXVl
c3RRdWV1ZUl0ID0gbWFwLmZpbmQoa2V5KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlcXVlc3RR
dWV1ZUl0ICE9IG1hcC5lbmQoKSk7CisgICAgYXV0byYgcmVxdWVzdFF1ZXVlID0gcmVxdWVzdFF1
ZXVlSXQtPnZhbHVlOworICAgIFJFTEVBU0VfQVNTRVJUKHJlcXVlc3RRdWV1ZS5zaXplKCkgPiAw
KTsKKyAgICBhdXRvIGN1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdFF1ZXVlLnRha2VGaXJzdCgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRSZXF1ZXN0LmdldCgpID09ICZyZXF1ZXN0KTsKKwor
ICAgIFB1c2hTZXJ2aWNlUmVxdWVzdCogbmV4dFJlcXVlc3QgPSBudWxscHRyOworICAgIGlmICgh
cmVxdWVzdFF1ZXVlLnNpemUoKSkKKyAgICAgICAgbWFwLnJlbW92ZShyZXF1ZXN0UXVldWVJdCk7
CisgICAgZWxzZQorICAgICAgICBuZXh0UmVxdWVzdCA9IHJlcXVlc3RRdWV1ZS5maXJzdCgpLmdl
dCgpOworCisgICAgLy8gRXZlbiBpZiB0aGVyZSdzIG5vIG5leHQgcmVxdWVzdCB0byBzdGFydCwg
aG9sZCBvbiB0byBjdXJyZW50UmVxdWVzdCB1bnRpbCB0aGUgbmV4dCB0dXJuIG9mIHRoZSBydW4g
bG9vcCBzaW5jZSB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGV4ZWN1dGluZyB0aGUgZmluaXNoKCkg
bWVtYmVyIGZ1bmN0aW9uIG9mIGN1cnJlbnRSZXF1ZXN0LgorICAgIFdvcmtRdWV1ZTo6bWFpbigp
LmRpc3BhdGNoKFtjdXJyZW50UmVxdWVzdCA9IFdURk1vdmUoY3VycmVudFJlcXVlc3QpLCBuZXh0
UmVxdWVzdF0geworICAgICAgICBpZiAobmV4dFJlcXVlc3QpCisgICAgICAgICAgICBuZXh0UmVx
dWVzdC0+c3RhcnQoKTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6Z2V0U3Vic2Ny
aXB0aW9uKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29w
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1f
Z2V0U3Vic2NyaXB0aW9uUmVxdWVzdHMsIG1ha2VVbmlxdWU8R2V0U3Vic2NyaXB0aW9uUmVxdWVz
dD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSkpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZUdldFN1YnNjcmlwdGlv
blJlcXVlc3QoR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBmaW5pc2hl
ZFB1c2hTZXJ2aWNlUmVxdWVzdChtX2dldFN1YnNjcmlwdGlvblJlcXVlc3RzLCByZXF1ZXN0KTsK
K30KKwordm9pZCBQdXNoU2VydmljZTo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBp
ZFB1YmxpY0tleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxXZWJDb3Jl
OjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1fc3Vic2Ny
aWJlUmVxdWVzdHMsIG1ha2VVbmlxdWU8U3Vic2NyaWJlUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlk
ZW50aWZpZXIsIHNjb3BlLCB2YXBpZFB1YmxpY0tleSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0
KFN1YnNjcmliZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZmluaXNoZWRQdXNoU2VydmljZVJl
cXVlc3QobV9zdWJzY3JpYmVSZXF1ZXN0cywgcmVxdWVzdCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZp
Y2U6OnVuc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRp
ZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3Jl
OjpFeGNlcHRpb25EYXRhPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGVucXVldWVQ
dXNoU2VydmljZVJlcXVlc3QobV91bnN1YnNjcmliZVJlcXVlc3RzLCBtYWtlVW5pcXVlPFVuc3Vi
c2NyaWJlUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBzdWJzY3JpcHRp
b25JZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCit2b2lkIFB1
c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVl
c3QmIHJlcXVlc3QpCit7CisgICAgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV91bnN1YnNj
cmliZVJlcXVlc3RzLCByZXF1ZXN0KTsKK30KKworZW51bSBjbGFzcyBDb250ZW50RW5jb2Rpbmcg
eworICAgIEVtcHR5LAorICAgIEFFU0dDTSwKKyAgICBBRVMxMjhHQ00KK307CisKK3N0cnVjdCBS
YXdQdXNoTWVzc2FnZSB7CisgICAgU3RyaW5nIHRvcGljOworICAgIENvbnRlbnRFbmNvZGluZyBl
bmNvZGluZzsKKworICAgIC8vIE9ubHkgc2V0IGlmIGVuY29kaW5nIGlzIG5vdCBDb250ZW50RW5j
b2Rpbmc6OkVtcHR5LgorICAgIFZlY3Rvcjx1aW50OF90PiBlbmNyeXB0ZWRQYXlsb2FkOworCisg
ICAgLy8gT25seSBzZXQgaWYgZW5jb2RpbmcgaXMgQ29udGVudEVuY29kaW5nOjpBRVNHQ00uCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclB1YmxpY0tleTsKKyAgICBWZWN0b3I8dWludDhfdD4g
c2FsdDsKKworfTsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmF3UHVzaE1lc3NhZ2U+IG1ha2VS
YXdQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSogdXNlckluZm8pCit7
CisgICAgUmF3UHVzaE1lc3NhZ2UgbWVzc2FnZTsKKworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBtZXNzYWdlLnRvcGljID0gdG9waWM7CisgICAgICAgIE5TU3RyaW5nICpjb250ZW50
RW5jb2RpbmcgPSB1c2VySW5mb1tAImNvbnRlbnRfZW5jb2RpbmciXTsKKyAgICAgICAgTlNTdHJp
bmcgKnBheWxvYWRCYXNlNjQgPSB1c2VySW5mb1tAInBheWxvYWQiXTsKKworICAgICAgICBpZiAo
IWNvbnRlbnRFbmNvZGluZy5sZW5ndGggfHwgIXBheWxvYWRCYXNlNjQubGVuZ3RoKSB7CisgICAg
ICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVudEVuY29kaW5nOjpFbXB0eTsKKyAgICAg
ICAgICAgIHJldHVybiBtZXNzYWdlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFtjb250ZW50
RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAiYWVzMTI4Z2NtIl0pCisgICAgICAgICAgICBtZXNz
YWdlLmVuY29kaW5nID0gQ29udGVudEVuY29kaW5nOjpBRVMxMjhHQ007CisgICAgICAgIGVsc2Ug
aWYgKFtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAiYWVzZ2NtIl0pIHsKKyAgICAg
ICAgICAgIG1lc3NhZ2UuZW5jb2RpbmcgPSBDb250ZW50RW5jb2Rpbmc6OkFFU0dDTTsKKworICAg
ICAgICAgICAgTlNTdHJpbmcgKnNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCA9IHVzZXJJbmZvW0Ai
YXNfcHVibGlja2V5Il07CisgICAgICAgICAgICBOU1N0cmluZyAqc2FsdEJhc2U2NFVSTCA9IHVz
ZXJJbmZvW0AiYXNfc2FsdCJdOworICAgICAgICAgICAgaWYgKCFzZXJ2ZXJQdWJsaWNLZXlCYXNl
NjRVUkwgfHwgIXNhbHRCYXNlNjRVUkwpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhQ
dXNoLCAiRHJvcHBpbmcgYWVzZ2NtLWVuY3J5cHRlZCBwdXNoIHdpdGhvdXQgcmVxdWlyZWQgc2Vy
dmVyIGtleSBhbmQgc2FsdCIpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5ID0gYmFz
ZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAgICAgICAgICBhdXRv
IHNhbHQgPSBiYXNlNjRVUkxEZWNvZGUoc2FsdEJhc2U2NFVSTCk7CisgICAgICAgICAgICBpZiAo
IXNlcnZlclB1YmxpY0tleSB8fCAhc2FsdCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
KFB1c2gsICJEcm9wcGluZyBhZXNnY20tZW5jcnlwdGVkIHB1c2ggd2l0aCBpbXByb3Blcmx5IGVu
Y29kZWQgc2VydmVyIGtleSBhbmQgc2FsdCIpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1lc3NhZ2Uuc2VydmVyUHVi
bGljS2V5ID0gV1RGTW92ZSgqc2VydmVyUHVibGljS2V5KTsKKyAgICAgICAgICAgIG1lc3NhZ2Uu
c2FsdCA9IFdURk1vdmUoKnNhbHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIHB1c2ggd2l0aCB1bmtub3duIGNvbnRlbnQgZW5jb2Rp
bmc6ICV7cHVibGljfXMiLCBjb250ZW50RW5jb2RpbmcuVVRGOFN0cmluZyk7CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgYXV0byBwYXlsb2Fk
ID0gYmFzZTY0RGVjb2RlKHBheWxvYWRCYXNlNjQpOworICAgICAgICBpZiAoIXBheWxvYWQpIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBwdXNoIHdpdGggaW1wcm9w
ZXJseSBlbmNvZGVkIHBheWxvYWQiKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgICAgIH0KKyAgICAgICAgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkID0gV1RGTW92ZSgq
cGF5bG9hZCk7CisgICAgfQorCisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK3ZvaWQgUHVzaFNl
cnZpY2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0cmluZyogdG9waWMsIE5TRGljdGlvbmFy
eSogdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBhdXRvIG1lc3NhZ2VSZXN1bHQgPSBtYWtlUmF3UHVzaE1lc3NhZ2UodG9waWMs
IHVzZXJJbmZvKTsKKyAgICBpZiAoIW1lc3NhZ2VSZXN1bHQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fZGF0YWJhc2UtPmdldFJlY29yZEJ5VG9waWModG9waWMsIFt0aGlzLCBtZXNzYWdlID0g
V1RGTW92ZSgqbWVzc2FnZVJlc3VsdCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKGF1dG8mJiByZWNvcmRSZXN1bHQpIG11dGFibGUgeworICAgICAgICBp
ZiAoIXJlY29yZFJlc3VsdCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3Bw
aW5nIGluY29taW5nIHB1c2ggc2VudCB0byB1bmtub3duIHRvcGljOiAle3NlbnNpdGl2ZX1zIiwg
bWVzc2FnZS50b3BpYy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byByZWNv
cmQgPSBXVEZNb3ZlKCpyZWNvcmRSZXN1bHQpOworCisgICAgICAgIGlmIChtZXNzYWdlLmVuY29k
aW5nID09IENvbnRlbnRFbmNvZGluZzo6RW1wdHkpIHsKKyAgICAgICAgICAgIG1faW5jb21pbmdQ
dXNoTWVzc2FnZUhhbmRsZXIocmVjb3JkLmJ1bmRsZUlELCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdl
IHsgeyB9LCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkgfSk7CisgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
UHVzaENyeXB0bzo6Q2xpZW50S2V5cyBjbGllbnRLZXlzIHsKKyAgICAgICAgICAgIHsgV1RGTW92
ZShyZWNvcmQuY2xpZW50UHVibGljS2V5KSwgV1RGTW92ZShyZWNvcmQuY2xpZW50UHJpdmF0ZUtl
eSkgfSwKKyAgICAgICAgICAgIFdURk1vdmUocmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQpCisgICAg
ICAgIH07CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlY3J5cHRl
ZFBheWxvYWQ7CisgICAgICAgIGlmIChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRFbmNvZGlu
Zzo6QUVTMTI4R0NNKQorICAgICAgICAgICAgZGVjcnlwdGVkUGF5bG9hZCA9IGRlY3J5cHRBRVMx
MjhHQ01QYXlsb2FkKGNsaWVudEtleXMsIG1lc3NhZ2UuZW5jcnlwdGVkUGF5bG9hZCk7CisgICAg
ICAgIGVsc2UgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVudEVuY29kaW5nOjpBRVNHQ00p
CisgICAgICAgICAgICBkZWNyeXB0ZWRQYXlsb2FkID0gZGVjcnlwdEFFU0dDTVBheWxvYWQoY2xp
ZW50S2V5cywgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXksIG1lc3NhZ2Uuc2FsdCwgbWVzc2FnZS5l
bmNyeXB0ZWRQYXlsb2FkKTsKKworICAgICAgICBpZiAoIWRlY3J5cHRlZFBheWxvYWQpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBpbmNvbWluZyBwdXNoIGR1ZSB0
byBkZWNyeXB0aW9uIGVycm9yIGZvciB0b3BpYyAle3NlbnNpdGl2ZX1zIiwgbWVzc2FnZS50b3Bp
Yy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2luY29taW5nUHVzaE1lc3Nh
Z2VIYW5kbGVyKHJlY29yZC5idW5kbGVJRCwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSB7IFdURk1v
dmUoKmRlY3J5cHRlZFBheWxvYWQpLCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkgfSk7CisKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VD
b25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlv
bi5oCmluZGV4IDJjMTQxNDRjNjFiYjNlZmFlNGVkMzI4ZTE1MjBkM2VjZjA4MzE3ZWYuLjE5ODE0
M2Y1Njk3Y2QyOGM2OTI4ZDQ1NjhjMjFjMzI1NDkyMGQyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaE1lc3NhZ2VDcnlwdG8uaD4KICNp
bmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
ICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTQ3LDYgKzQ4LDggQEAgcHVibGljOgogICAg
IFB1c2hTZXJ2aWNlQ29ubmVjdGlvbigpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIH5QdXNoU2Vy
dmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlB1c2hD
cnlwdG86OkNsaWVudEtleXMgZ2VuZXJhdGVDbGllbnRLZXlzKCk7CisKICAgICB1c2luZyBTdWJz
Y3JpYmVIYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChOU1N0cmluZyAqLCBOU0Vycm9y
ICopPjsKICAgICB2aXJ0dWFsIHZvaWQgc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFN1YnNjcmliZUhhbmRsZXImJikg
PSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29u
bmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tCmluZGV4IDUzNDMzMjVlYjVlYTIwM2U4ZGY2ZmY4MzAzY2I5YjBmZmM4MTMyMWIuLjkyZjgx
NDI3N2E4MzgxNTMxNjg4YjBlNDg1MTgyZDQzZDg1Y2M4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC0yOCw4ICsyOCwxNSBAQAog
CiAjaW1wb3J0IDx3dGYvV29ya1F1ZXVlLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CiBuYW1lc3BhY2UgV2ViUHVzaEQgewogCitQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIFB1c2hTZXJ2
aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKCkKK3sKKyAgICByZXR1cm4gUHVzaENy
eXB0bzo6Q2xpZW50S2V5czo6Z2VuZXJhdGUoKTsKK30KKwogdm9pZCBQdXNoU2VydmljZUNvbm5l
Y3Rpb246OnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKEluY29taW5nUHVzaE1lc3NhZ2VI
YW5kbGVyJiYgaGFuZGxlcikKIHsKICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0g
V1RGTW92ZShoYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKaW5k
ZXggYWYzMTg1N2RiODczN2E5YjY0Mzk1ZmIwMDA0NzUwYTk1OGU1NDhkMC4uMDI4MDg0ZTUyYjRh
MGRiYjNjMTQ5YmU2Yzk3MzZmNzU3NWU3ODdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlB1c2hDbGllbnRDb25u
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmgiCisjaW5jbHVkZSAi
UHVzaFNlcnZpY2UuaCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3Vy
YXRpb24uaCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAi
V2ViUHVzaE1lc3NhZ2UuaCIKQEAgLTYxLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bm5lY3Rpb25BZGRlZCh4cGNfY29ubmVjdGlvbl90KTsKICAgICB2b2lkIGNvbm5lY3Rpb25SZW1v
dmVkKHhwY19jb25uZWN0aW9uX3QpOwogCisgICAgdm9pZCBzdGFydE1vY2tQdXNoU2VydmljZSgp
OworICAgIHZvaWQgc3RhcnRQdXNoU2VydmljZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNl
cnZpY2VOYW1lLCBjb25zdCBTdHJpbmcmIHB1c2hEYXRhYmFzZVBhdGgpOworICAgIHZvaWQgaGFu
ZGxlSW5jb21pbmdQdXNoKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0OjpX
ZWJQdXNoTWVzc2FnZSYmKTsKKwogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKICAgICB2b2lkIGVj
aG9Ud2ljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCByZXF1ZXN0
U3lzdGVtTm90aWZpY2F0aW9uUGVybWlzc2lvbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3Ry
aW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiByZXBseVNlbmRlcik7CkBAIC02
OSw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlYnVnTW9kZUlzRW5hYmxlZChDbGll
bnRDb25uZWN0aW9uKiwgYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uQ29uZmlndXJh
dGlvbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25m
aWd1cmF0aW9uJik7CiAgICAgdm9pZCBpbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50
Q29ubmVjdGlvbiosIGNvbnN0IFB1c2hNZXNzYWdlRm9yVGVzdGluZyYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VG
b3JUZXN0aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xp
ZW50Q29ubmVjdGlvbiosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYktp
dDo6V2ViUHVzaE1lc3NhZ2U+Jik+JiYgcmVwbHlTZW5kZXIpOwogICAgIHZvaWQgc3Vic2NyaWJl
VG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVSTCwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBhcHBsaWNhdGlvblNlcnZlcktleSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2Vi
Q29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCB1bnN1YnNj
cmliZUZyb21QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVS
TCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiBy
ZXBseVNlbmRlcik7CkBAIC04OCw5ICs5NCwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBub3Rp
ZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGNvbnN0IFN0cmluZyYgY2xpZW50Q29kZVNp
Z25pbmdJZGVudGlmaWVyKTsKIAorICAgIHZvaWQgc2V0UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVf
cHRyPFB1c2hTZXJ2aWNlPiYmKTsKKyAgICB2b2lkIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2Vydmlj
ZShGdW5jdGlvbjx2b2lkKCk+JiYpOworCiAgICAgQ2xpZW50Q29ubmVjdGlvbiogdG9DbGllbnRD
b25uZWN0aW9uKHhwY19jb25uZWN0aW9uX3QpOwogICAgIEhhc2hNYXA8eHBjX2Nvbm5lY3Rpb25f
dCwgUmVmPENsaWVudENvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25NYXA7CiAKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8UHVzaFNlcnZpY2U+IG1fcHVzaFNlcnZpY2U7CisgICAgYm9vbCBtX3B1c2hTZXJ2
aWNlU3RhcnRlZCB7IGZhbHNlIH07CisgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgpPj4gbV9wZW5k
aW5nUHVzaFNlcnZpY2VGdW5jdGlvbnM7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFdl
YktpdDo6V2ViUHVzaE1lc3NhZ2U+PiBtX3B1c2hNZXNzYWdlczsKICAgICBIYXNoTWFwPFN0cmlu
ZywgRGVxdWU8UHVzaE1lc3NhZ2VGb3JUZXN0aW5nPj4gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzOwog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1t
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IGE4ZmU0OWY1
MmQ3NjMyNjYzMWNhYzdkNzY2YzA5MTQ5NWU5Y2U1NWUuLmFkZDZlM2Q4YWRmZWE4OTk4ODhmNGJh
ZjYxYWNjMDUzMTM2M2RjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24u
bW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lt
cG9ydCA8d3RmL1NwYW4uaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9Xb3Jr
UXVldWUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6V2ViUHVzaEQ7CiAKQEAgLTkxLDYg
KzkyLDExIEBAIEFSR1VNRU5UUyhQdXNoTWVzc2FnZUZvclRlc3RpbmcpCiBSRVBMWShib29sKQog
RU5ECiAKK0ZVTkNUSU9OKGluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZykKK0FS
R1VNRU5UUyhTdHJpbmcpCitSRVBMWShib29sKQorRU5ECisKIEZVTkNUSU9OKHN1YnNjcmliZVRv
UHVzaFNlcnZpY2UpCiBBUkdVTUVOVFMoVVJMLCBWZWN0b3I8dWludDhfdD4pCiBSRVBMWShjb25z
dCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YT4mKQpAQCAtMTUxLDYgKzE1NywxMyBAQCBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2Ug
aW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBseShib29sIHJlcGx5KQogICAg
IHJldHVybiBlbmNvZGVyLnRha2VCdWZmZXIoKTsKIH0KIAorV2ViUHVzaEQ6OkVuY29kZWRNZXNz
YWdlIGluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzo6ZW5jb2RlUmVwbHkoYm9v
bCByZXBseSkKK3sKKyAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOworICAgIGVu
Y29kZXIgPDwgcmVwbHk7CisgICAgcmV0dXJuIGVuY29kZXIudGFrZUJ1ZmZlcigpOworfQorCiBX
ZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczo6ZW5jb2RlUmVw
bHkoY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+JiByZXBseSkKIHsKICAgICBX
ZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOwpAQCAtMjI0LDYgKzIzNyw1MSBAQCBEYWVt
b24mIERhZW1vbjo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gZGFlbW9uOwogfQogCit2b2lkIERh
ZW1vbjo6c3RhcnRNb2NrUHVzaFNlcnZpY2UoKQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIg
PSBbdGhpc10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hN
ZXNzYWdlJiYgbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxlSWRl
bnRpZmllciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6Y3Jl
YXRlTW9ja1NlcnZpY2UoV1RGTW92ZShtZXNzYWdlSGFuZGxlciksIFt0aGlzXShhdXRvJiYgcHVz
aFNlcnZpY2UpIG11dGFibGUgeworICAgICAgICBzZXRQdXNoU2VydmljZShXVEZNb3ZlKHB1c2hT
ZXJ2aWNlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpzdGFydFB1c2hTZXJ2aWNlKGNv
bnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VQYXRoKQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkgewor
ICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92ZShtZXNz
YWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6Y3JlYXRlKGluY29taW5nUHVzaFNlcnZp
Y2VOYW1lLCBkYXRhYmFzZVBhdGgsIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBbdGhpc10oYXV0
byYmIHB1c2hTZXJ2aWNlKSBtdXRhYmxlIHsKKyAgICAgICAgc2V0UHVzaFNlcnZpY2UoV1RGTW92
ZShwdXNoU2VydmljZSkpOworICAgIH0pOworfQorCit2b2lkIERhZW1vbjo6c2V0UHVzaFNlcnZp
Y2Uoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmIHB1c2hTZXJ2aWNlKQoreworICAgIG1f
cHVzaFNlcnZpY2UgPSBXVEZNb3ZlKHB1c2hTZXJ2aWNlKTsKKyAgICBtX3B1c2hTZXJ2aWNlU3Rh
cnRlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVuY3Rpb25zLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2go
W3RoaXNdKCkgeworICAgICAgICB3aGlsZSAobV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMu
c2l6ZSgpKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0gbV9wZW5kaW5nUHVzaFNlcnZp
Y2VGdW5jdGlvbnMudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBmdW5jdGlvbigpOworICAgICAg
ICB9CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZp
Y2UoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQoreworICAgIGlmICghbV9wdXNoU2Vydmlj
ZVN0YXJ0ZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuYXBwZW5k
KFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdW5jdGlv
bigpOworfQorCiB2b2lkIERhZW1vbjo6YnJvYWRjYXN0RGVidWdNZXNzYWdlKEpTQzo6TWVzc2Fn
ZUxldmVsIG1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8g
ZGljdGlvbmFyeSA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIs
IG51bGxwdHIsIDApKTsKQEAgLTMyNSw2ICszODMsOSBAQCB2b2lkIERhZW1vbjo6ZGVjb2RlQW5k
SGFuZGxlTWVzc2FnZSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1l
cwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKICAg
ICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjppbmplY3RQ
dXNoTWVzc2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBX
VEZNb3ZlKHJlcGx5U2VuZGVyKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5
cGU6OkluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKKyAgICAgICAgaGFuZGxl
V2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjppbmplY3RFbmNyeXB0ZWRQdXNo
TWVzc2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZN
b3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVzc2FnZVR5cGU6
OkdldFBlbmRpbmdQdXNoTWVzc2FnZXM6CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdp
dGhSZXBseTxNZXNzYWdlSW5mbzo6Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcz4oY2xpZW50Q29ubmVj
dGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKICAgICAgICAgYnJl
YWs7CkBAIC00MzEsNiArNDkyLDQ2IEBAIHZvaWQgRGFlbW9uOjppbmplY3RQdXNoTWVzc2FnZUZv
clRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgUHVzCiAgICAgcmVw
bHlTZW5kZXIodHJ1ZSk7CiB9CiAKK3ZvaWQgRGFlbW9uOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVz
c2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIHJlcGx5U2VuZGVyKQor
eworICAgIGlmICghY29ubmVjdGlvbi0+aG9zdEFwcEhhc1B1c2hJbmplY3RFbnRpdGxlbWVudCgp
KSB7CisgICAgICAgIGNvbm5lY3Rpb24tPmJyb2FkY2FzdERlYnVnTWVzc2FnZSgiQXR0ZW1wdGlu
ZyB0byBpbmplY3QgYSBwdXNoIG1lc3NhZ2UgZnJvbSBhbiB1bmVudGl0bGVkIHByb2Nlc3MiKTsK
KyAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBtZXNzYWdlID0gbWVzc2FnZSwg
cmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNlbmRlcihmYWxzZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGJ5dGVzID0gbWVz
c2FnZS51dGY4KCk7CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGEgPSBhZG9wdE5TKFtb
TlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzLmRhdGEoKSBsZW5ndGg6IGJ5dGVzLmxl
bmd0aCgpXSk7CisKKyAgICAgICAgaWQgb2JqID0gW05TSlNPTlNlcmlhbGl6YXRpb24gSlNPTk9i
amVjdFdpdGhEYXRhOmRhdGEuZ2V0KCkgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOworICAgICAg
ICBpZiAoIW9iaiB8fCAhW29iaiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkg
eworICAgICAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIE5TTG9nKEAiZ290IG9iajogJUAiLCBvYmopOworCisgICAgICAg
IG1fcHVzaFNlcnZpY2UtPmRpZFJlY2VpdmVQdXNoTWVzc2FnZShvYmpbQCJ0b3BpYyJdLCBvYmpb
QCJ1c2VySW5mbyJdLCBbcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKHRydWUpOworICAgICAgICB9KTsKKyAgICB9
KTsKK30KKwordm9pZCBEYWVtb246OmhhbmRsZUluY29taW5nUHVzaChjb25zdCBTdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJiBtZXNzYWdlKQoreworICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9wdXNoTWVzc2FnZXMuZW5zdXJlKGJ1bmRsZUlkZW50aWZpZXIs
IFtdIHsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiB7IH07
CisgICAgfSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZSht
ZXNzYWdlKSk7CisKKyAgICBub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGJ1bmRs
ZUlkZW50aWZpZXIpOworfQorCiB2b2lkIERhZW1vbjo6bm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJ
c0F2YWlsYWJsZShjb25zdCBTdHJpbmcmIGNsaWVudENvZGVTaWduaW5nSWRlbnRpZmllcikKIHsK
ICNpZiBQTEFURk9STShNQUMpCkBAIC00NjIsNiArNTYzLDkgQEAgdm9pZCBEYWVtb246OmdldFBl
bmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlv
bkhhbmQKIAogICAgIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiByZXN1bHRNZXNzYWdl
czsKIAorICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9wdXNoTWVzc2FnZXMuZmluZChob3N0QXBw
Q29kZVNpZ25pbmdJZGVudGlmaWVyKTsgaXRlcmF0b3IgIT0gbV9wdXNoTWVzc2FnZXMuZW5kKCkp
CisgICAgICAgIHN0ZDo6c3dhcChyZXN1bHRNZXNzYWdlcywgaXRlcmF0b3ItPnZhbHVlKTsKKwog
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Rlc3RpbmdQdXNoTWVzc2FnZXMuZmluZChob3N0QXBwQ29k
ZVNpZ25pbmdJZGVudGlmaWVyKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV90ZXN0aW5nUHVzaE1l
c3NhZ2VzLmVuZCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IGl0ZXJhdG9yLT52
YWx1ZSkgewpAQCAtNDc2LDI1ICs1ODAsNTAgQEAgdm9pZCBEYWVtb246OmdldFBlbmRpbmdQdXNo
TWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmQKICAg
ICByZXBseVNlbmRlcihXVEZNb3ZlKHJlc3VsdE1lc3NhZ2VzKSk7CiB9CiAKLXZvaWQgRGFlbW9u
OjpzdWJzY3JpYmVUb1B1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNv
bnN0IFVSTCYgc2NvcGVVUkwsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXBwbGljYXRpb25TZXJ2
ZXJLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVz
aFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5k
ZXIpCit2b2lkIERhZW1vbjo6c3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9u
KiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHZhcGlkUHVibGljS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdl
YkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYm
IHJlcGx5U2VuZGVyKQogewotICAgIFVOVVNFRF9QQVJBTShhcHBsaWNhdGlvblNlcnZlcktleSk7
Ci0gICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7
IFdlYkNvcmU6Ok5vdEFsbG93ZWRFcnJvciwgIkxhY2sgcGVybWlzc2lvbiJfcyB9KSk7CisgICAg
cnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29u
bmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJM
LnN0cmluZygpLCB2YXBpZFB1YmxpY0tleSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2Vu
ZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAg
ICAgICByZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsg
V2ViQ29yZTo6SW52YWxpZFN0YXRlRXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24g
ZmFpbGVkIl9zIH0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IG1fcHVzaFNlcnZpY2UtPnN1YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgdmFwaWRQ
dWJsaWNLZXksIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyAgICB9KTsKIH0KIAotdm9pZCBEYWVt
b246OnVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rp
b24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlm
aWVyIHB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5k
ZXIpCit2b2lkIERhZW1vbjo6dW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNj
cmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYm
IHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICBydW5BZnRlclN0
YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIGJ1bmRsZUlkZW50aWZpZXIgPSBjb25uZWN0aW9uLT5o
b3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCksIHNjb3BlID0gc2NvcGVVUkwuc3RyaW5nKCks
IHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNlbmRl
cildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAgICAgICAg
ICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdl
YkNvcmU6OkludmFsaWRTdGF0ZUVycm9yLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZh
aWxlZCJfcyB9KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBt
X3B1c2hTZXJ2aWNlLT51bnN1YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgc3Vic2Ny
aXB0aW9uSWRlbnRpZmllciwgV1RGTW92ZShyZXBseVNlbmRlcikpOworICAgIH0pOwogfQogCiB2
b2lkIERhZW1vbjo6Z2V0UHVzaFN1YnNjcmlwdGlvbihDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0
aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4
cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJD
b3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVy
KHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+IHsgfSk7CisgICAg
cnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29u
bmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJM
LnN0cmluZygpLCByZXBseVNlbmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUg
eworICAgICAgICBpZiAoIW1fcHVzaFNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVy
KG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlk
U3RhdGVFcnJvciwgIlB1c2ggc2VydmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQiX3MgfSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9wdXNoU2VydmljZS0+
Z2V0U3Vic2NyaXB0aW9uKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlcGx5U2Vu
ZGVyKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgRGFlbW9uOjpnZXRQdXNoUGVybWlzc2lvblN0YXRl
KENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8dWludDhfdCwgV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKKyAgICAvLyBGSVhNRQorI2lmIEhBVkUoQVBQ
TEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JUKQorICAgIHJlcGx5U2VuZGVyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KFdlYkNvcmU6OlB1c2hQZXJtaXNzaW9uU3RhdGU6OkdyYW50ZWQpKTsK
KyNlbHNlCiAgICAgcmVwbHlTZW5kZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oV2ViQ29yZTo6UHVz
aFBlcm1pc3Npb25TdGF0ZTo6RGVuaWVkKSk7CisjZW5kaWYKIH0KIAogQ2xpZW50Q29ubmVjdGlv
biogRGFlbW9uOjp0b0NsaWVudENvbm5lY3Rpb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5o
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oCmluZGV4IGJiZWI5
NjhkZTdhNzU5ZGRmMjc2ZmMxYmE2N2QyOGI2NjZhNDg2NDAuLmQzYzE3ZTY1ZGEzYWVjNTI0NGFi
OTE2MTNiYWMzY2Y2ZTllYWEyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
V2ViUHVzaERhZW1vbk1haW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hE
YWVtb25NYWluLmgKQEAgLTI3LDYgKzI3LDYgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWlu
dCBXZWJQdXNoRGFlbW9uTWFpbihpbnQsIGNvbnN0IGNoYXIqKik7CitpbnQgV2ViUHVzaERhZW1v
bk1haW4oaW50LCBjaGFyKiopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0gYi9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tCmluZGV4IDJhNjhlMThmYTIwMTUwNjYy
MGQxYzM4MTc0NDExZWIwYWEyYmRjNTkuLjg5MjhkOGZjOTQwZmFlZjgxYTgzNGUzMDk0NWMzNTYw
NzMyN2FhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1v
bk1haW4ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5t
bQpAQCAtMzAsMjQgKzMwLDIxIEBACiAjaW1wb3J0ICJEYWVtb25EZWNvZGVyLmgiCiAjaW1wb3J0
ICJEYWVtb25FbmNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25VdGlsaXRpZXMuaCIKKyNpbXBvcnQg
IkxvZ0luaXRpYWxpemF0aW9uLmgiCiAjaW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCiAjaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6
YXRpb24uaD4KKyNpbXBvcnQgPGdldG9wdC5oPgorI2ltcG9ydCA8d3RmL0xvZ0luaXRpYWxpemF0
aW9uLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3
aW4vWFBDU1BJLmg+CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8c2Vy
dmVycy9ib290c3RyYXAuaD4KLSNlbHNlCi0jaW1wb3J0IDxtYWNoL3N0ZF90eXBlcy5oPgotZXh0
ZXJuICJDIiB7Ci1leHRlcm4ga2Vybl9yZXR1cm5fdCBib290c3RyYXBfY2hlY2tfaW4obWFjaF9w
b3J0X3QgYm9vdHN0cmFwUG9ydCwgY29uc3QgY2hhciAqc2VydmljZU5hbWUsIG1hY2hfcG9ydF90
Kik7Ci19Ci0jZW5kaWYKLQogdXNpbmcgV2ViS2l0OjpEYWVtb246OkVuY29kZWRNZXNzYWdlOwog
dXNpbmcgV2ViUHVzaEQ6OkRhZW1vbjsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmluY29taW5nUHVz
aFNlcnZpY2VOYW1lID0gImNvbS5hcHBsZS5hcHMud2Via2l0LndlYnB1c2hkLmluY29taW5nLXB1
c2giOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBlbnRpdGxlbWVudE5hbWUgPSAiY29tLmFw
cGxlLnByaXZhdGUud2Via2l0LndlYnB1c2giX3M7CitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFs
IGRlZmF1bHRNYWNoU2VydmljZU5hbWUgPSAiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5zZXJ2
aWNlIl9zOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBkZWZhdWx0SW5jb21pbmdQdXNoU2Vy
dmljZU5hbWUgPSAiY29tLmFwcGxlLmFwcy53ZWJraXQud2VicHVzaGQuaW5jb21pbmctcHVzaCJf
czsKIAogbmFtZXNwYWNlIFdlYlB1c2hEIHsKIApAQCAtNzQsMjMgKzcxLDU1IEBAIHVzaW5nIFdl
YlB1c2hEOjpjb25uZWN0aW9uUmVtb3ZlZDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWludCBX
ZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgV2ViUHVz
aERhZW1vbk1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIGlmIChhcmdjICE9IDMg
fHwgc3RyY21wKGFyZ3ZbMV0sICItLW1hY2hTZXJ2aWNlTmFtZSIpKSB7Ci0gICAgICAgIE5TTG9n
KEAidXNhZ2U6IHdlYnB1c2hkIC0tbWFjaFNlcnZpY2VOYW1lIDxuYW1lPiIpOwotICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIG1hY2hTZXJ2aWNlTmFtZSA9IGFyZ3Zb
Ml07Ci0KICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgV2ViS2l0OjpzdGFydExpc3Rl
bmluZ0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCAiY29tLmFwcGxl
LnByaXZhdGUud2Via2l0LndlYnB1c2giLCBjb25uZWN0aW9uQWRkZWQsIGNvbm5lY3Rpb25SZW1v
dmVkLCBjb25uZWN0aW9uRXZlbnRIYW5kbGVyKTsKLQotICAgICAgICAvLyBUT0RPOiByZW1vdmUg
dGhpcyBvbmNlIHdlIGFjdHVhbGx5IHN0YXJ0IHVzaW5nIEFQU0Nvbm5lY3Rpb24uCi0gICAgICAg
IG1hY2hfcG9ydF90IGluY29taW5nTWVzc2FnZVBvcnQ7Ci0gICAgICAgIGlmIChib290c3RyYXBf
Y2hlY2tfaW4oYm9vdHN0cmFwX3BvcnQsIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCAmaW5jb21p
bmdNZXNzYWdlUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICAgICAgTlNMb2coQCJDb3Vs
ZG4ndCByZWdpc3RlciBmb3IgaW5jb21pbmcgcHVzaCBsYXVuY2ggcG9ydC4iKTsKLSAgICAgICAg
CiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKworI2lmICFMT0dfRElTQUJM
RUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIFdURjo6bG9nQ2hhbm5lbHMoKS5p
bml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBXZWJDb3JlOjpsb2dD
aGFubmVscygpLmluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIFdl
YktpdDo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOwor
I2VuZGlmIC8vICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisKKyAgICAg
ICAgc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworICAgICAgICAgICAgeyAibWFj
aFNlcnZpY2VOYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdtJyB9LAorICAgICAgICAgICAg
eyAiaW5jb21pbmdQdXNoU2VydmljZU5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3AnIH0s
CisgICAgICAgICAgICB7ICJ1c2VNb2NrUHVzaFNlcnZpY2UiLCBub19hcmd1bWVudCwgMCwgJ2Yn
IH0KKyAgICAgICAgfTsKKworICAgICAgICBjb25zdCBjaGFyKiBtYWNoU2VydmljZU5hbWUgPSBk
ZWZhdWx0TWFjaFNlcnZpY2VOYW1lOworICAgICAgICBjb25zdCBjaGFyKiBpbmNvbWluZ1B1c2hT
ZXJ2aWNlTmFtZSA9IGRlZmF1bHRJbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZTsKKyAgICAgICAgYm9v
bCB1c2VNb2NrUHVzaFNlcnZpY2UgPSBmYWxzZTsKKworICAgICAgICBpbnQgYzsKKyAgICAgICAg
aW50IG9wdGlvbkluZGV4OworICAgICAgICB3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBh
cmd2LCAiIiwgb3B0aW9ucywgJm9wdGlvbkluZGV4KSkgIT0gLTEpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgbWFjaFNl
cnZpY2VOYW1lID0gb3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAncCc6CisgICAgICAgICAgICAgICAgaW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSBvcHRh
cmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAg
ICAgICAgICAgICB1c2VNb2NrUHVzaFNlcnZpY2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIlVua25vd24gb3B0aW9uOiAlY1xuIiwgb3B0b3B0KTsKKyAgICAgICAgICAgICAgICBleGl0
KDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgV2ViS2l0OjpzdGFydExp
c3RlbmluZ0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCBlbnRpdGxl
bWVudE5hbWUsIGNvbm5lY3Rpb25BZGRlZCwgY29ubmVjdGlvblJlbW92ZWQsIGNvbm5lY3Rpb25F
dmVudEhhbmRsZXIpOworCisgICAgICAgIGlmICh1c2VNb2NrUHVzaFNlcnZpY2UpCisgICAgICAg
ICAgICA6OldlYlB1c2hEOjpEYWVtb246OnNpbmdsZXRvbigpLnN0YXJ0TW9ja1B1c2hTZXJ2aWNl
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGxpYnJhcnlQYXRoID0gTlNT
ZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1Vz
ZXJEb21haW5NYXNrLCBZRVMpWzBdOworICAgICAgICAgICAgU3RyaW5nIHB1c2hEYXRhYmFzZVBh
dGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKGxpYnJhcnlQYXRoLCB7
ICJXZWJLaXQiLCAiV2ViUHVzaCIsICJQdXNoRGF0YWJhc2UuZGIiIH0pOworICAgICAgICAgICAg
OjpXZWJQdXNoRDo6RGFlbW9uOjpzaW5nbGV0b24oKS5zdGFydFB1c2hTZXJ2aWNlKGluY29taW5n
UHVzaFNlcnZpY2VOYW1lLCBwdXNoRGF0YWJhc2VQYXRoKTsKKyAgICAgICAgfQogICAgIH0KICAg
ICBDRlJ1bkxvb3BSdW4oKTsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QgYi9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0CmluZGV4
IGY3MWU1OWE0MDdmM2UzYTg5MDgwMGFlM2Y0MWUwODU1ZTUwYTdiMmEuLmIyNWFiZmY1YThlNGJk
YjhmMTkyYjlmMDVlNTg0NzM5NWQzNDE1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QKKysrIGIvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9jb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdApAQCAtMTks
NyArMTksNyBAQAogCTxzdHJpbmc+QWRhcHRpdmU8L3N0cmluZz4KIAk8a2V5PlByb2dyYW1Bcmd1
bWVudHM8L2tleT4KIAk8YXJyYXk+Ci0JCTxzdHJpbmc+L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvV2ViS2l0LmZyYW1ld29yay9EYWVtb25zL3dlYnB1c2hkPC9zdHJpbmc+CisJCTxzdHJpbmc+
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvV2ViS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0Rh
ZW1vbnMvd2VicHVzaGQ8L3N0cmluZz4KIAkJPHN0cmluZz4tLW1hY2hTZXJ2aWNlTmFtZTwvc3Ry
aW5nPgogCQk8c3RyaW5nPmNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQuc2VydmljZTwvc3RyaW5n
PgogCTwvYXJyYXk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL3dlYnB1c2hk
LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwCmluZGV4IGZkMDRlNDA0
NTg1OThlYzg3MzlhYzBmM2U5YThiOGYzZmJjYTFlYjguLjU5Y2VmMGQ5ODQzMDU1NjVhZWFkMThj
MjEyMmFkM2RmZmUxNTk2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2Vi
cHVzaGQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwCkBAIC0y
Niw3ICsyNiw3IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLTWFpbi5oPgogI2luY2x1ZGUgPG9zL2F2
YWlsYWJpbGl0eS5oPgogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgV0tXZWJQdXNoRGFlbW9uTWFp
bihhcmdjLCBhcmd2KTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA5NTlhYzY1MTk5OWM5MjQyMDlmOWY3YTFjOTY3Y2U2NDZmYjdkZjJhLi5l
MmJkMTY2ODA5ZjE1MTM5YjU4ZGFlYzczN2Y4MzRiNzgzZmE1ZWIyIDEwMDY0NAotLS0gYS9Ub29s
cy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjIt
MDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2
aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4
NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAgLSBN
b2RpZmVkIHRoZSBleGlzdGluZyBpbmplY3RlZCBwdXNoIHRlc3QgdG8gaW5qZWN0IGRpZmZlcmVu
dCB0eXBlcyBvZiByZWFsIHB1c2ggb2JqZWN0cworICAgICAgICAgICBmcm9tIEFQUyAoYW4gZW1w
dHkgcHVzaCwgYW4gYWVzZ2NtLWVuY3J5cHRlZCBwdXNoLCBhbmQgYW4gYWVzMTI4Z2NtLWVuY3J5
cHRlZCBwdXNoKS4KKyAgICAgICAgIC0gQWRkIGEgZmV3IGJhc2ljIHRlc3QgY2FzZXMgZm9yIHN1
YnNjcmliaW5nIGFuZCB1bnN1YnNjcmliaW5nIGZyb20gcHVzaC4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKC1b
Tm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XSk6Cisg
ICAgICAgICgtW05vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29u
dHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OnRlc3RXZWJQdXNoRGFlbW9uUExpc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y3Jl
YXRlTWVzc2FnZURpY3Rpb25hcnkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2VuZE1lc3Nh
Z2VUb0RhZW1vbik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZW5kTWVzc2FnZVRvRGFlbW9u
V2FpdGluZ0ZvclJlcGx5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnNlbmRDb25maWd1cmF0
aW9uV2l0aEF1ZGl0VG9rZW4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpmdW5jdGlvbik6IERlbGV0ZWQuCisKIDIwMjItMDItMDUgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBUaHJlYWQgc3VzcGVu
ZCBhbmQgcmVzdW1lIHNob3VsZCB0YWtlIGEgZ2xvYmFsIGxvY2sgdG8gYXZvaWQgZGVhZGxvY2sK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVz
aERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVz
aERhZW1vbi5tbQppbmRleCA2ZDkyY2U5Nzg2YWY4MWM3ODRiMTI0NDQxOWU2ZGU2MjgwM2NlODIw
Li5iN2IzNGI2Y2FhNTQ3YmUzMmEzNzYyOGNjZjFhY2RlZWM2ZjVkNjU5IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1t
CkBAIC0zNSwxMyArMzUsMTggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViUHVz
aERhZW1vbkNvbnN0YW50cy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1
cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5o
PgogI2ltcG9ydCA8bWFjaC9tYWNoX2luaXQuaD4KICNpbXBvcnQgPG1hY2gvdGFzay5oPgorI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogCit1c2luZyBXZWJLaXQ6OldlYlB1c2hE
OjpNZXNzYWdlVHlwZTsKKwogc3RhdGljIGJvb2wgYWxlcnRSZWNlaXZlZCA9IGZhbHNlOwogQGlu
dGVyZmFjZSBOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdhdGUgOiBOU09iamVjdDxXS1VJRGVs
ZWdhdGVQcml2YXRlPgogQGVuZApAQCAtNjEsNiArNjYsMjYgQEAgc3RhdGljIGJvb2wgYWxlcnRS
ZWNlaXZlZCA9IGZhbHNlOwogCiBAZW5kCiAKK0BpbnRlcmZhY2UgTm90aWZpY2F0aW9uU2NyaXB0
TWVzc2FnZUhhbmRsZXIgOiBOU09iamVjdDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPiB7CisgICAg
QmxvY2tQdHI8dm9pZChpZCk+IF9tZXNzYWdlSGFuZGxlcjsKK30KK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIE5vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyCisKKy0gKHZvaWQpc2V0TWVz
c2FnZUhhbmRsZXI6KHZvaWQgKF4pKGlkKSloYW5kbGVyCit7CisgICAgX21lc3NhZ2VIYW5kbGVy
ID0gaGFuZGxlcjsKK30KKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNv
bnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRN
ZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgaWYgKF9tZXNzYWdlSGFu
ZGxlcikKKyAgICAgICAgX21lc3NhZ2VIYW5kbGVyKG1lc3NhZ2UuYm9keSk7Cit9CisKK0BlbmQK
KwogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgUmV0YWluUHRyPE5TVVJMPiB0
ZXN0V2ViUHVzaERhZW1vbkxvY2F0aW9uKCkKQEAgLTc5LDcgKzEwNCw4IEBAIHN0YXRpYyBOU0Rp
Y3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+ICp0ZXN0V2ViUHVzaERhZW1vblBMaXN0KE5TVVJMICpz
dG9yYWdlTG9jYXRpCiAgICAgICAgIEAiUHJvZ3JhbUFyZ3VtZW50cyIgOiBAWwogICAgICAgICAg
ICAgdGVzdFdlYlB1c2hEYWVtb25Mb2NhdGlvbigpLmdldCgpLnBhdGgsCiAgICAgICAgICAgICBA
Ii0tbWFjaFNlcnZpY2VOYW1lIiwKLSAgICAgICAgICAgIEAib3JnLndlYmtpdC53ZWJwdXNodGVz
dGRhZW1vbi5zZXJ2aWNlIgorICAgICAgICAgICAgQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFl
bW9uLnNlcnZpY2UiLAorICAgICAgICAgICAgQCItLXVzZU1vY2tQdXNoU2VydmljZSIKICAgICAg
ICAgXQogICAgIH07CiB9CkBAIC0xMzUsMjQgKzE2MSwyNCBAQCBzdGF0aWMgdm9pZCBjbGVhblVw
VGVzdFdlYlB1c2hEKE5TVVJMICp0ZW1wRGlyKQogICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKIH0K
IAotc3RhdGljIFJldGFpblB0cjx4cGNfb2JqZWN0X3Q+IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5
KHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3N0
YXRpYyBSZXRhaW5QdHI8eHBjX29iamVjdF90PiBjcmVhdGVNZXNzYWdlRGljdGlvbmFyeShNZXNz
YWdlVHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewog
ICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxw
dHIsIG51bGxwdHIsIDApKTsKICAgICB4cGNfZGljdGlvbmFyeV9zZXRfdWludDY0KGRpY3Rpb25h
cnkuZ2V0KCksICJwcm90b2NvbCB2ZXJzaW9uIiwgMSk7Ci0gICAgeHBjX2RpY3Rpb25hcnlfc2V0
X3VpbnQ2NChkaWN0aW9uYXJ5LmdldCgpLCAibWVzc2FnZSB0eXBlIiwgbWVzc2FnZVR5cGUpOwor
ICAgIHhwY19kaWN0aW9uYXJ5X3NldF91aW50NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2Ug
dHlwZSIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtZXNzYWdlVHlwZSkpOwogICAgIHhwY19kaWN0
aW9uYXJ5X3NldF9kYXRhKGRpY3Rpb25hcnkuZ2V0KCksICJlbmNvZGVkIG1lc3NhZ2UiLCBtZXNz
YWdlLmRhdGEoKSwgbWVzc2FnZS5zaXplKCkpOwogICAgIHJldHVybiBXVEZNb3ZlKGRpY3Rpb25h
cnkpOwogfQogCiAvLyBVc2VzIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gdG8gdGhlIGRhZW1vbiBm
b3IgYSBvbmUtb2ZmIG1lc3NhZ2UKLXZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbih4cGNfY29ubmVj
dGlvbl90IGNvbm5lY3Rpb24sIHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgbWVzc2FnZSkKK3ZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbih4cGNfY29ubmVjdGlvbl90
IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlTWVzc2FnZURpY3Rp
b25hcnkobWVzc2FnZVR5cGUsIG1lc3NhZ2UpOwogICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVz
c2FnZShjb25uZWN0aW9uLCBkaWN0aW9uYXJ5LmdldCgpKTsKIH0KIAogLy8gVXNlcyBhbiBleGlz
dGluZyBjb25uZWN0aW9uIHRvIHRoZSBkYWVtb24gZm9yIGEgb25lLW9mZiBtZXNzYWdlLCB3YWl0
aW5nIGZvciB0aGUgcmVwbHkKLXZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBs
eSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3ZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRp
bmdGb3JSZXBseSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lc3Nh
Z2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0
aW9uYXJ5ID0gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkobWVzc2FnZVR5cGUsIG1lc3NhZ2UpOwog
CkBAIC0xODEsNyArMjA3LDcgQEAgc3RhdGljIHZvaWQgc2VuZENvbmZpZ3VyYXRpb25XaXRoQXVk
aXRUb2tlbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCiAgICAgICAgIGVuY29kZWRNZXNz
YWdlWzFdID0gMTsKICAgICAgICAgZW5jb2RlZE1lc3NhZ2VbMl0gPSAzMjsKICAgICAgICAgbWVt
Y3B5KCZlbmNvZGVkTWVzc2FnZVsxMF0sICZ0b2tlbiwgc2l6ZW9mKHRva2VuKSk7Ci0gICAgICAg
IHNlbmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbiwgNiwgZW5jb2RlZE1lc3NhZ2UpOworICAg
ICAgICBzZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlOjpVcGRhdGVD
b25uZWN0aW9uQ29uZmlndXJhdGlvbiwgZW5jb2RlZE1lc3NhZ2UpOwogICAgIH0KIH0KIApAQCAt
MjUyLDcgKzI3OCw3IEBAIFRFU1QoV2ViUHVzaEQsIEJhc2ljQ29tbXVuaWNhdGlvbikKICAgICAg
ICAgYXV0byBkaWN0aW9uYXJ5ID0gYWRvcHROUyh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0
ciwgbnVsbHB0ciwgMCkpOwogICAgICAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZE1lc3NhZ2Uo
MSk7CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzBdID0gMTsKLSAgICAgICAgc2VuZE1lc3NhZ2VU
b0RhZW1vbihjb25uZWN0aW9uLmdldCgpLCA1LCBlbmNvZGVkTWVzc2FnZSk7CisgICAgICAgIHNl
bmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OlNldERlYnVn
TW9kZUlzRW5hYmxlZCwgZW5jb2RlZE1lc3NhZ2UpOwogICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOwogICAgIH0KIApAQCAtMzYxLDU0ICszODcsNiBAQCBURVNUKFdlYlB1
c2hELCBQZXJtaXNzaW9uTWFuYWdlbWVudCkKICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBE
aXJlY3RvcnkpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogbWFpblNXQnl0ZXMgPSBSIlNXUkVT
T1VSQ0UoCi08c2NyaXB0PgotZnVuY3Rpb24gbG9nKG1zZykKLXsKLSAgICB3aW5kb3cud2Via2l0
Lm1lc3NhZ2VIYW5kbGVycy5zdy5wb3N0TWVzc2FnZShtc2cpOwotfQotCi1jb25zdCBjaGFubmVs
ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7Ci1jaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IChldmVu
dCkgPT4gbG9nKGV2ZW50LmRhdGEpOwotCi1uYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rl
cignL3N3LmpzJykudGhlbigocmVnaXN0cmF0aW9uKSA9PiB7Ci0gICAgaWYgKHJlZ2lzdHJhdGlv
bi5hY3RpdmUpIHsKLSAgICAgICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7cG9y
dDogY2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQyXSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgd29ya2VyID0gcmVnaXN0cmF0aW9uLmluc3RhbGxpbmc7Ci0gICAgd29ya2VyLmFk
ZEV2ZW50TGlzdGVuZXIoJ3N0YXRlY2hhbmdlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3
b3JrZXIuc3RhdGUgPT0gJ2FjdGl2YXRlZCcpCi0gICAgICAgICAgICB3b3JrZXIucG9zdE1lc3Nh
Z2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5wb3J0Ml0pOwotICAgIH0pOwotfSku
Y2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKLSAgICBsb2coIlJlZ2lzdHJhdGlvbiBmYWlsZWQgd2l0
aDogIiArIGVycm9yKTsKLX0pOwotPC9zY3JpcHQ+Ci0pU1dSRVNPVVJDRSI7Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiBzY3JpcHRCeXRlcyA9IFIiU1dSRVNPVVJDRSgKLWxldCBwb3J0Owotc2VsZi5h
ZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7Ci0gICAgcG9ydCA9IGV2ZW50
LmRhdGEucG9ydDsKLSAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWFkeSIpOwotfSk7Ci1zZWxmLmFk
ZEV2ZW50TGlzdGVuZXIoInB1c2giLCAoZXZlbnQpID0+IHsKLSAgICB0cnkgewotICAgICAgICBp
ZiAoIWV2ZW50LmRhdGEpIHsKLSAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVk
OiBudWxsIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBj
b25zdCB2YWx1ZSA9IGV2ZW50LmRhdGEudGV4dCgpOwotICAgICAgICBwb3J0LnBvc3RNZXNzYWdl
KCJSZWNlaXZlZDogIiArIHZhbHVlKTsKLSAgICAgICAgaWYgKHZhbHVlICE9ICdTd2VldCBQb3Rh
dG9lcycpCi0gICAgICAgICAgICBldmVudC53YWl0VW50aWwoUHJvbWlzZS5yZWplY3QoJ0kgd2Fu
dCBzd2VldCBwb3RhdG9lcycpKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIHBvcnQucG9z
dE1lc3NhZ2UoIkdvdCBleGNlcHRpb24gIiArIGUpOwotICAgIH0KLX0pOwotKVNXUkVTT1VSQ0Ui
OwotCiBzdGF0aWMgdm9pZCBjbGVhcldlYnNpdGVEYXRhU3RvcmUoV0tXZWJzaXRlRGF0YVN0b3Jl
ICpzdG9yZSkKIHsKICAgICBfX2Jsb2NrIGJvb2wgY2xlYXJlZFN0b3JlID0gZmFsc2U7CkBAIC00
MTgsNzYgKzM5NiwzMTUgQEAgc3RhdGljIHZvaWQgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFdLV2Vi
c2l0ZURhdGFTdG9yZSAqc3RvcmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjbGVh
cmVkU3RvcmUpOwogfQogCi1URVNUKFdlYlB1c2hELCBIYW5kbGVJbmplY3RlZFB1c2gpCi17Ci0g
ICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmln
aW5zXTsKK2NsYXNzIFdlYlB1c2hEVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHJv
dGVjdGVkOgorICAgIFdlYlB1c2hEVGVzdCgpCisgICAgeworICAgICAgICBbV0tXZWJzaXRlRGF0
YVN0b3JlIF9hbGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnNdOwogCi0gICAgTlNV
UkwgKnRlbXBEaXJlY3RvcnkgPSBzZXRVcFRlc3RXZWJQdXNoRCgpOworICAgICAgICBtX3RlbXBE
aXJlY3RvcnkgPSByZXRhaW5QdHIoc2V0VXBUZXN0V2ViUHVzaEQoKSk7CiAKLSAgICBhdXRvIGRh
dGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiBuZXddKTsKLSAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hN
YWNoU2VydmljZU5hbWUgPSBAIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSI7
Ci0gICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoRGFlbW9uVXNlc01vY2tC
dW5kbGVzRm9yVGVzdGluZyA9IFlFUzsKLSAgICBhdXRvIGRhdGFTdG9yZSA9IGFkb3B0TlMoW1tX
S1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgICAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKKyAg
ICAgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFjaFNlcnZpY2VOYW1l
ID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOworICAgICAgICBkYXRh
U3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hEYWVtb25Vc2VzTW9ja0J1bmRsZXNGb3JU
ZXN0aW5nID0gWUVTOworICAgICAgICBtX2RhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJh
dGlvbi5nZXQoKV0pOwogCi0gICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgPSBkYXRhU3RvcmUuZ2V0KCk7Ci0gICAgY2xlYXJXZWJzaXRlRGF0
YVN0b3JlKFtjb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdKTsKKyAgICAgICAgbV9jb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKKyAgICAgICAgbV9jb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBtX2Rh
dGFTdG9yZS5nZXQoKTsKKyAgICAgICAgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFttX2NvbmZpZ3Vy
YXRpb24gd2Vic2l0ZURhdGFTdG9yZV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJl
ZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllFU107Ci0gICAgZm9yIChfV0tFeHBl
cmltZW50YWxGZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZlcmVuY2VzIF9leHBlcmltZW50YWxG
ZWF0dXJlc10pIHsKLSAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJC
dWlsdEluTm90aWZpY2F0aW9uc0VuYWJsZWQiXSkKLSAgICAgICAgICAgIFtbY29uZmlndXJhdGlv
biBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAg
ICAgIFttX2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNF
bmFibGVkOllFU107CisgICAgICAgIGZvciAoX1dLRXhwZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVy
ZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFsRmVhdHVyZXNdKSB7CisgICAgICAgICAg
ICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1aWx0SW5Ob3RpZmljYXRpb25z
RW5hYmxlZCJdKQorICAgICAgICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZlcmVuY2Vz
XSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJQdXNoQVBJRW5hYmxlZCJdKQorICAg
ICAgICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZ
RVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgfQorCisgICAgICAgIG1fdGVzdE1lc3Nh
Z2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwor
ICAgICAgICBbW21fY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlw
dE1lc3NhZ2VIYW5kbGVyOm1fdGVzdE1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0Il07
CisKKyAgICAgICAgbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tOb3Rp
ZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICBbW21f
Y29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5k
bGVyOm1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAIm5vdGUiXTsKICAg
ICB9CiAKLSAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFu
ZGxlciBhbGxvY10gaW5pdF0pOwotICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRy
b2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6
QCJzdyJdOwotICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW21lc3NhZ2VIYW5k
bGVyIGFkZE1lc3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRsZXI6XnsKLSAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgdm9pZCBsb2FkUmVxdWVzdChjb25zdCBjaGFyKiBodG1sU291cmNlLCBjb25zdCBj
aGFyKiBzZXJ2aWNlV29ya2VyU2NyaXB0U291cmNlKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0YW50cyA9IFIiU1JDKAorICAgICAgICAgICAgY29uc3QgVkFMSURfU0VS
VkVSX0tFWSA9ICJCQTFIeHp5aTFSVU0xYjV3anhzbjduR3hBc3p3MnU2MW0xNjRpM01yQUl4SEY2
WUs1aDRTRFlpYy1kUnVVX1JDUENmQTVhcTlvalN3azVZMkVtQ2xCUHMiOworICAgICAgICAgICAg
Y29uc3QgVkFMSURfU0VSVkVSX0tFWV9USEFUX0NBVVNFU19JTkpFQ1RFRF9GQUlMVVJFID0gIkJF
QXhhVU1vMXM4dGpPUnhKZm5TU3ZXaFliNHU1MWtnMWhXVDJzXzlncFY3WnhhcjFwRl8yQlE4QW5j
dUFkUzJCb0xoTjRxYXh6QnkyQ3dIRThCQnpXZyI7CisgICAgICAgIClTUkMiOworICAgICAgICBt
X3NlcnZlci5yZXNldChuZXcgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcih7CisgICAgICAgICAg
ICB7ICIvIiwgeyBodG1sU291cmNlIH0gfSwKKyAgICAgICAgICAgIHsgIi9jb25zdGFudHMuanMi
LCB7IHsgeyAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgY29u
c3RhbnRzIH0gfSwKKyAgICAgICAgICAgIHsgIi9zdy5qcyIsIHsgeyB7ICJDb250ZW50LVR5cGUi
LCAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIgfSB9LCBzZXJ2aWNlV29ya2VyU2NyaXB0U291cmNl
IH0gfQorICAgICAgICB9LCBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpQcm90b2NvbDo6SHR0
cCkpOworCisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjptX2Nv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAgICAgW21fd2ViVmlldyBsb2FkUmVxdWVzdDptX3Nl
cnZlci0+cmVxdWVzdCgpXTsKKyAgICB9CisKKyAgICB+V2ViUHVzaERUZXN0KCkKKyAgICB7Cisg
ICAgICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQobV90ZW1wRGlyZWN0b3J5LmdldCgpKTsKKyAgICB9
CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IG1fdGVtcERpcmVjdG9yeTsKKyAgICBSZXRhaW5QdHI8
V0tXZWJzaXRlRGF0YVN0b3JlPiBtX2RhdGFTdG9yZTsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3
Q29uZmlndXJhdGlvbj4gbV9jb25maWd1cmF0aW9uOworICAgIFJldGFpblB0cjxUZXN0TWVzc2Fn
ZUhhbmRsZXI+IG1fdGVzdE1lc3NhZ2VIYW5kbGVyOworICAgIFJldGFpblB0cjxOb3RpZmljYXRp
b25TY3JpcHRNZXNzYWdlSGFuZGxlcj4gbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcj4gbV9zZXJ2ZXI7Cisg
ICAgUmV0YWluUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OworfTsKKworY2xhc3MgV2ViUHVzaERJ
bmplY3RlZFB1c2hUZXN0IDogcHVibGljIFdlYlB1c2hEVGVzdCB7Citwcm90ZWN0ZWQ6CisgICAg
dm9pZCBydW5UZXN0KE5TU3RyaW5nICpleHBlY3RlZE1lc3NhZ2UsIE5TRGljdGlvbmFyeSAqcHVz
aFVzZXJJbmZvKTsKK307CisKK3ZvaWQgV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0OjpydW5UZXN0
KE5TU3RyaW5nICpleHBlY3RlZE1lc3NhZ2UsIE5TRGljdGlvbmFyeSAqcHVzaFVzZXJJbmZvKQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBodG1sU291cmNlID0gUiJTV1JFU09VUkNFKAorICAg
IDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAg
IGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgeworICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VI
YW5kbGVycy50ZXN0LnBvc3RNZXNzYWdlKG1zZyk7CisgICAgfQorCisgICAgY29uc3QgY2hhbm5l
bCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOworICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0g
KGV2ZW50KSA9PiBsb2coZXZlbnQuZGF0YSk7CisKKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtl
ci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJl
Z2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAg
ICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNj
cmliZSh7CisgICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICBh
cHBsaWNhdGlvblNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWQorICAgICAgICB9KTsKKyAgICAg
ICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7cG9ydDogY2hhbm5lbC5wb3J0Mn0s
IFtjaGFubmVsLnBvcnQyXSk7CisgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAg
ICAgbG9nKCJSZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6ICIgKyBlcnJvcik7CisgICAgfSk7Cisg
ICAgPC9zY3JpcHQ+CisgICAgKVNXUkVTT1VSQ0UiOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHNlcnZpY2VXb3JrZXJTb3VyY2UgPSBSIlNXUkVTT1VSQ0UoCisgICAgbGV0IHBvcnQ7CisgICAg
c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7CisgICAgICAgIHBv
cnQgPSBldmVudC5kYXRhLnBvcnQ7CisgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlYWR5Iik7
CisgICAgfSk7CisgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoIWV2ZW50LmRhdGEpIHsKKyAgICAgICAg
ICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogbnVsbCBkYXRhIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgdmFsdWUg
PSBldmVudC5kYXRhLnRleHQoKTsKKyAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlY2Vp
dmVkOiAiICsgdmFsdWUpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBwb3J0
LnBvc3RNZXNzYWdlKCJFcnJvcjogIiArIGUpOworICAgICAgICB9CisgICAgfSk7CisgICAgKVNX
UkVTT1VSQ0UiOworCisgICAgX19ibG9jayBib29sIHJlYWR5ID0gZmFsc2U7CisgICAgW21fdGVz
dE1lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRsZXI6XnsKKyAgICAg
ICAgcmVhZHkgPSB0cnVlOwogICAgIH1dOwotICAgIFttZXNzYWdlSGFuZGxlciBhZGRNZXNzYWdl
OkAiUmVjZWl2ZWQ6IEhlbGxvIFdvcmxkIiB3aXRoSGFuZGxlcjpeewotICAgICAgICBkb25lID0g
dHJ1ZTsKKworICAgIF9fYmxvY2sgYm9vbCBnb3RFeHBlY3RlZE1lc3NhZ2UgPSBmYWxzZTsKKyAg
ICBbbV90ZXN0TWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpleHBlY3RlZE1lc3NhZ2Ugd2l0aEhh
bmRsZXI6XnsKKyAgICAgICAgZ290RXhwZWN0ZWRNZXNzYWdlID0gdHJ1ZTsKICAgICB9XTsKIAot
ICAgIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXIgc2VydmVyKHsKLSAgICAgICAgeyAiLyIsIHsg
bWFpblNXQnl0ZXMgfSB9LAotICAgICAgICB7ICIvc3cuanMiLCB7IHsgeyAiQ29udGVudC1UeXBl
IiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgc2NyaXB0Qnl0ZXMgfSB9Ci0gICAgfSwg
VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHApOworICAgIGxvYWRSZXF1
ZXN0KGh0bWxTb3VyY2UsIHNlcnZpY2VXb3JrZXJTb3VyY2UpOwogCi0gICAgYXV0byB3ZWJWaWV3
ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKLSAgICBb
d2ViVmlldyBsb2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJnJlYWR5KTsKIAotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7Ci0gICAgZG9uZSA9IGZhbHNlOworICAgIFN0cmluZyBidW5kbGVJZGVudGlmaWVyID0gImNv
bS5hcHBsZS5XZWJLaXQuVGVzdFdlYktpdEFQSSJfczsKKyAgICBTdHJpbmcgc2NvcGUgPSBtX3Nl
cnZlci0+cmVxdWVzdCgpLlVSTC5hYnNvbHV0ZVN0cmluZzsKKyAgICBTdHJpbmcgdG9waWMgPSBi
dW5kbGVJZGVudGlmaWVyICsgIiAiX3MgKyBzY29wZTsKIAotICAgIC8vIEluamVjdCBwdXNoIG1l
c3NhZ2UKLSAgICBhdXRvIGVuY29kZWRNZXNzYWdlID0gZW5jb2RlU3RyaW5nKCJjb20uYXBwbGUu
V2ViS2l0LlRlc3RXZWJLaXRBUEkiKTsKLSAgICBlbmNvZGVkTWVzc2FnZS5hcHBlbmRWZWN0b3Io
ZW5jb2RlU3RyaW5nKHNlcnZlci5yZXF1ZXN0KCkuVVJMLmFic29sdXRlU3RyaW5nKSk7Ci0gICAg
ZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVjdG9yKGVuY29kZVN0cmluZygiSGVsbG8gV29ybGQiKSk7
CisgICAgaWQgb2JqID0gQHsKKyAgICAgICAgQCJ0b3BpYyI6IChOU1N0cmluZyAqKXRvcGljLAor
ICAgICAgICBAInVzZXJJbmZvIjogcHVzaFVzZXJJbmZvCisgICAgfTsKKyAgICBOU0RhdGEgKmRh
dGEgPSBbTlNKU09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6b2JqIG9wdGlvbnM6
MCBlcnJvcjpudWxscHRyXTsKKworICAgIFN0cmluZyBtZXNzYWdlIHsgc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhciAqPihkYXRhLmJ5dGVzKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGEubGVuZ3Ro
KSB9OworICAgIGF1dG8gZW5jb2RlZE1lc3NhZ2UgPSBlbmNvZGVTdHJpbmcoV1RGTW92ZShtZXNz
YWdlKSk7CiAKICAgICBhdXRvIHV0aWxpdHlDb25uZWN0aW9uID0gY3JlYXRlQW5kQ29uZmlndXJl
Q29ubmVjdGlvblRvU2VydmljZSgib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNl
Iik7Ci0gICAgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh1dGlsaXR5Q29ubmVj
dGlvbi5nZXQoKSwgNywgZW5jb2RlZE1lc3NhZ2UpOworICAgIHNlbmRNZXNzYWdlVG9EYWVtb25X
YWl0aW5nRm9yUmVwbHkodXRpbGl0eUNvbm5lY3Rpb24uZ2V0KCksIE1lc3NhZ2VUeXBlOjpJbmpl
Y3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcsIGVuY29kZWRNZXNzYWdlKTsKIAogICAg
IC8vIEZldGNoIHB1c2ggbWVzc2FnZXMKKyAgICBfX2Jsb2NrIGJvb2wgZ290TWVzc2FnZXMgPSBm
YWxzZTsKICAgICBfX2Jsb2NrIFJldGFpblB0cjxOU0FycmF5PE5TRGljdGlvbmFyeSAqPj4gbWVz
c2FnZXM7Ci0gICAgW2RhdGFTdG9yZSBfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczpeKE5TQXJyYXk8
TlNEaWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykgeworICAgIFttX2RhdGFTdG9yZSBfZ2V0UGVu
ZGluZ1B1c2hNZXNzYWdlczpeKE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykg
ewogICAgICAgICBtZXNzYWdlcyA9IHJhd01lc3NhZ2VzOwotICAgICAgICBkb25lID0gdHJ1ZTsK
KyAgICAgICAgZ290TWVzc2FnZXMgPSB0cnVlOwogICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAgZG9uZSA9IGZhbHNlOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZ290TWVzc2FnZXMpOwogCiAgICAgRVhQRUNUX0VRKFttZXNzYWdlcyBjb3Vu
dF0sIDF1KTsKIAogICAgIC8vIEhhbmRsZSBwdXNoIG1lc3NhZ2UKICAgICBfX2Jsb2NrIGJvb2wg
cHVzaE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9wcm9jZXNzUHVz
aE1lc3NhZ2U6W21lc3NhZ2VzIGZpcnN0T2JqZWN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKGJvb2wg
cmVzdWx0KSB7CisgICAgW21fZGF0YVN0b3JlIF9wcm9jZXNzUHVzaE1lc3NhZ2U6W21lc3NhZ2Vz
IGZpcnN0T2JqZWN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKGJvb2wgcmVzdWx0KSB7CiAgICAgICAg
IHB1c2hNZXNzYWdlUHJvY2Vzc2VkID0gdHJ1ZTsKICAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290RXhw
ZWN0ZWRNZXNzYWdlKTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnB1c2hNZXNzYWdl
UHJvY2Vzc2VkKTsKK30KIAotICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7
CitURVNUX0YoV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEVtcHR5UHVz
aCkKK3sKKyAgICBydW5UZXN0KEAiUmVjZWl2ZWQ6IG51bGwgZGF0YSIsIEB7IH0pOworfQorCitU
RVNUX0YoV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEFFU0dDTVB1c2gp
Cit7CisgICAgcnVuVGVzdChAIlJlY2VpdmVkOiB0ZXN0IGFlc2djbSBwYXlsb2FkIiwgQHsKKyAg
ICAgICAgQCJjb250ZW50X2VuY29kaW5nIjogQCJhZXNnY20iLAorICAgICAgICBAImFzX3B1Ymxp
Y2tleSI6IEAiQkMtQWdZTWhxbXphbUg3X0F1bTBZdklkOEZWMS11bWdId2VKTmU2WFExSU1BbTNF
Mjlsb1dYcVRSbmRpYnhIMjdrSktXY0lieXltdW5kT0RNZlZ4X1VNIiwKKyAgICAgICAgQCJhc19z
YWx0IjogQCJ0a1BUNXhEZU4wbEFrU2M2bFpVa05nIiwKKyAgICAgICAgQCJwYXlsb2FkIjogQCJv
L3U0eXZjWEkxbmFwK3p5SU9CYldYZExxajFxSEcyY1grS1ZoQWRCUWoxR1ZBdDdsUT09IgorICAg
IH0pOworfQorCitURVNUX0YoV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3Rl
ZEFFUzEyOEdDTVB1c2gpCit7CisgICAgLy8gRnJvbSBleGFtcGxlIGluIFJGQzgyOTEgU2VjdGlv
biA1LgorICAgIFN0cmluZyBwYXlsb2FkQmFzZTY0VVJMID0gIkRHdjZyYTFubFlnRENTMUZSbmJ6
bHdBQUVBQkJCUDR6OUtzTjZuR1JUYlZZSV9jN1ZKU1BRVEJ0a2djeTI3bWxtbE1vWklJZ0RsbDZl
M3ZDWUxvY0lubVlXQW1TNlRsekFDOHdFcUtLNlBCcnUzamw3QV95bDk1YlFwdTZjVlBUcEs0TXFn
a2YxQ1h6dExWQlN0MktzM29ad2J1d1hQWExXeW91QldMVldHTldRZXhTZ1N4c2pfUXVsY3k0YS1m
TiJfczsKKyAgICBTdHJpbmcgcGF5bG9hZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJh
c2U2NFVSTERlY29kZShwYXlsb2FkQmFzZTY0VVJMKS52YWx1ZSgpKTsKKworICAgIHJ1blRlc3Qo
QCJSZWNlaXZlZDogV2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24iLCBA
eworICAgICAgICBAImNvbnRlbnRfZW5jb2RpbmciOiBAImFlczEyOGdjbSIsCisgICAgICAgIEAi
cGF5bG9hZCI6IChOU1N0cmluZyAqKXBheWxvYWRCYXNlNjQKKyAgICB9KTsKK30KKworVEVTVF9G
KFdlYlB1c2hEVGVzdCwgU3Vic2NyaWJlVGVzdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
c291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0PgorICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcv
c3cuanMnKS50aGVuKGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0g
YXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7CisgICAgICAgIGxldCByZXN1bHQg
PSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3
YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoeworICAgICAgICAgICAgICAg
IHVzZXJWaXNpYmxlT25seTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZl
cktleTogVkFMSURfU0VSVkVSX0tFWQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXN1
bHQgPSBzdWJzY3JpcHRpb24udG9KU09OKCk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9ICJFcnJvcjogIiArIGU7CisgICAgICAgIH0KKyAgICAgICAgd2luZG93
LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMubm90ZS5wb3N0TWVzc2FnZShyZXN1bHQpOworICAgIH0p
OworICAgIDwvc2NyaXB0PgorICAgIClIVE1MIjsKKworICAgIF9fYmxvY2sgUmV0YWluUHRyPGlk
PiBvYmogPSBuaWw7CisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbbV9ub3Rp
ZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlkIG1lc3NhZ2UpIHsK
KyAgICAgICAgb2JqID0gbWVzc2FnZTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisK
KyAgICBsb2FkUmVxdWVzdChzb3VyY2UsICIiKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOworCisgICAgQVNTRVJUX1RSVUUoW29iaiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rp
b25hcnkgY2xhc3NdXSk7CisKKyAgICBOU0RpY3Rpb25hcnkgKnN1YnNjcmlwdGlvbiA9IG9iai5n
ZXQoKTsKKyAgICBBU1NFUlRfVFJVRShbc3Vic2NyaXB0aW9uW0AiZW5kcG9pbnQiXSBoYXNQcmVm
aXg6QCJodHRwczovLyJdKTsKKyAgICBBU1NFUlRfVFJVRShbc3Vic2NyaXB0aW9uW0Aia2V5cyJd
IGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKworICAgIC8vIFNoYXJlZCBh
dXRoIHNlY3JldCBzaG91bGQgYmUgMTYgYnl0ZXMgKDIyIGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2
NHVybCkuCisgICAgQVNTRVJUX0VRKFtzdWJzY3JpcHRpb25bQCJrZXlzIl1bQCJhdXRoIl0gbGVu
Z3RoXSwgMjJ1KTsKKworICAgIC8vIENsaWVudCBwdWJsaWMga2V5IHNob3VsZCBiZSA2NSBieXRl
cyAoODcgYnl0ZXMgaW4gdW5wYWRkZWQgYmFzZTY0dXJsKS4KKyAgICBBU1NFUlRfRVEoW3N1YnNj
cmlwdGlvbltAImtleXMiXVtAInAyNTZkaCJdIGxlbmd0aF0sIDg3dSk7Cit9CisKK1RFU1RfRihX
ZWJQdXNoRFRlc3QsIFN1YnNjcmliZUZhaWx1cmVUZXN0KQoreworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBzb3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9Ii9jb25zdGFudHMuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0
ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCByZWdpc3RyYXRp
b24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKKyAgICAgICAgbGV0IHJl
c3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgc3Vic2NyaXB0aW9u
ID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7CisgICAgICAgICAg
ICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9u
U2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZX1RIQVRfQ0FVU0VTX0lOSkVDVEVEX0ZBSUxVUkUK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmVzdWx0ID0gc3Vic2NyaXB0aW9uLnRvSlNP
TigpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6
ICIgKyBlOworICAgICAgICB9CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJz
Lm5vdGUucG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICAp
SFRNTCI7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2JqID0gbmlsOworICAgIF9fYmxv
Y2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIg
c2V0TWVzc2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3Qoc291cmNl
LCAiIik7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIC8vIFNw
ZWMgc2F5cyB0aGF0IGFuIGVycm9yIGluIHRoZSBwdXNoIHNlcnZpY2Ugc2hvdWxkIGJlIGFuIEFi
b3J0RXJyb3IuCisgICAgQVNTRVJUX1RSVUUoW29iaiBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBj
bGFzc11dKTsKKyAgICBBU1NFUlRfVFJVRShbb2JqIGhhc1ByZWZpeDpAIkVycm9yOiBBYm9ydEVy
cm9yIl0pOworfQorCitURVNUX0YoV2ViUHVzaERUZXN0LCBVbnN1YnNjcmliZVRlc3QpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHNvdXJjZSA9IFIiSFRNTCgKKyAgICA8c2NyaXB0IHNyYz0i
L2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBuYXZpZ2F0b3Iuc2Vy
dmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAg
IGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5
OworICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IGxldCBzdWJzY3JpcHRpb24gPSBhd2FpdCByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2Ny
aWJlKHsKKyAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAg
ICAgICAgYXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgbGV0IHJlc3VsdDEgPSBhd2FpdCBzdWJzY3JpcHRpb24udW5zdWJz
Y3JpYmUoKTsKKyAgICAgICAgICAgIGxldCByZXN1bHQyID0gYXdhaXQgc3Vic2NyaXB0aW9uLnVu
c3Vic2NyaWJlKCk7CisgICAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0MSwgcmVzdWx0Ml07Cisg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICJFcnJvcjogIiArIGU7
CisgICAgICAgIH0KKyAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMubm90ZS5w
b3N0TWVzc2FnZShyZXN1bHQpOworICAgIH0pOworICAgIDwvc2NyaXB0PgorICAgIClIVE1MIjsK
KworICAgIF9fYmxvY2sgUmV0YWluUHRyPGlkPiBvYmogPSBuaWw7CisgICAgX19ibG9jayBib29s
IGRvbmUgPSBmYWxzZTsKKyAgICBbbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNz
YWdlSGFuZGxlcjpeKGlkIG1lc3NhZ2UpIHsKKyAgICAgICAgb2JqID0gbWVzc2FnZTsKKyAgICAg
ICAgZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBsb2FkUmVxdWVzdChzb3VyY2UsICIiKTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgLy8gRmlyc3QgdW5z
dWJzY3JpYmUgc2hvdWxkIHN1Y2NlZWQuIFNlY29uZCBvbmUgc2hvdWxkIGZhaWwgc2luY2UgdGhl
IGZpcnN0IG9uZSByZW1vdmVkIHRoZSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2UuCisgICAgaWQg
ZXhwZWN0ZWQgPSBAW0AoMSksIEAoMCldOworICAgIEFTU0VSVF9UUlVFKFtvYmogaXNFcXVhbDpl
eHBlY3RlZF0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451131</attachid>
            <date>2022-02-07 11:56:41 -0800</date>
            <delta_ts>2022-02-07 12:05:52 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235857-20220207115640.patch</filename>
            <type>text/plain</type>
            <size>93185</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ1ODM2MDVmNzY1ZTFhNDgyZTNjZTI1
OWZkYTA4MmNkNmYyY2M4ODIuLjNkODIzODYwYTNlYjgzMTYwMzAwODBhMTAzYmE5ZjFhYjUyMTU5
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgUHVzaEFQSUVuYWJsZWQgdG8gV2ViS2l0TGVn
YWN5IHNvIHdlIGNhbiBlbmFibGUgaXQgb24gaW4gQVBJIHRlc3RzIHZpYSBfV0tFeHBlcmltZW50
YWxGZWF0dXJlLgorCisgICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sOgorCiAyMDIyLTAyLTA0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KIAogICAgICAgICBHcmFkaWVudHMgZG9uJ3QgY29ycmVjdGx5IGludGVycG9sYXRl
IG1pc3Npbmcvbm9uZSBjb2xvciBjb21wb25lbnRzIGNvcnJlY3RseQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAxMWU3
NzAwOWZlMjZhMWFhMjllZjE0OWM4MTM4MTk0ODA3MGVhZjZmLi5kMjVlM2VjZjZjYmY0MGY2NTA2
OTRlOTMzNjBiMzdmNzY0MzJmNGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMi0w
MS0yOCAgQmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgUHVzaFNlcnZp
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTg1
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
YWRkcyBQdXNoU2VydmljZSB0byB3ZWJwdXNoZC4gSXQgaGFuZGxlcyByZXF1ZXN0cyB0byBjcmVh
dGUsIHJlbW92ZSwgYW5kIGdldCBwdXNoCisgICAgICAgIHN1YnNjcmlwdGlvbnMuIEl0IGFsc28g
ZGVjcnlwdHMgaW5jb21pbmcgcHVzaGVzIGFuZCBwYXNzIHRoZW0gYmFjayB0byB0aGUgVUkgcHJv
Y2VzcyB2aWEgdGhlCisgICAgICAgIGV4aXN0aW5nIG1hY2hpbmVyeSBpbiBXZWJQdXNoRGFlbW9u
LgorCisgICAgICAgIFB1c2hTZXJ2aWNlIHByaW1hcmlseSBpbnRlcmFjdHMgd2l0aCB0d28gb2Jq
ZWN0czoKKworICAgICAgICAxLiBQdXNoU2VydmljZUNvbm5lY3Rpb246IHRoaXMgY3JlYXRlcyBh
bmQgcmVtb3ZlcyBwdXNoIHN1YnNjcmlwdGlvbnMgZnJvbSB0aGUgcHVzaCBzZXJ2ZXIuCisgICAg
ICAgICAgIEl0IGFsc28gcmVjZWl2ZXMgaW5jb21pbmcgcHVzaGVzIGZyb20gdGhlIHB1c2ggc2Vy
dmVyLgorICAgICAgICAyLiBQdXNoRGF0YWJhc2U6IHRoaXMgcGVyc2lzdHMgcHVzaCBzdWJzY3Jp
cHRpb25zIHRvIGRpc2suCisKKyAgICAgICAgU2V2ZXJhbCB0aGluZ3MgYXJlIG5vdCB5ZXQgaW1w
bGVtZW50ZWQ7IGZvciBpbnN0YW5jZSwgd2UgY3VycmVudGx5IGFsd2F5cyBncmFudCBhIHBhZ2Ug
dGhlCisgICAgICAgIHBlcm1pc3Npb24gdG8gcmVjZWl2ZSBwdXNoZXMuIFRoaXMgd2lsbCBiZSBm
aXhlZCBpbiBmdXR1cmUgcGF0Y2hlcy4KKworICAgICAgICBDb3ZlcmVkIGJ5IG5ldyBBUEkgdGVz
dHMuIFRoZSBjdXJyZW50IHRlc3RzIHVzZSBhIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24gdGhh
dCB2ZW5kcworICAgICAgICBzdWJzY3JpcHRpb24gd2l0aCBmaXhlZCBkYXRhLCBidXQgdGhpcyBj
YW4gYmUgaW1wcm92ZWQgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIFNoYXJlZC9BUEkvQ29j
b2EvV0tNYWluLmg6CisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9XS01haW4ubW06CisgICAg
ICAgIChXS1dlYlB1c2hEYWVtb25NYWluKToKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV2ViUHVz
aE1lc3NhZ2VDb2NvYS5tbTogYWRkIGFiaWxpdHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBl
bXB0eSB2cy4gbnVsbCBwYXlsb2FkLgorICAgICAgICAoV2ViS2l0OjpXZWJQdXNoTWVzc2FnZTo6
ZnJvbURpY3Rpb25hcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQdXNoTWVzc2FnZTo6dG9EaWN0
aW9uYXJ5IGNvbnN0KToKKyAgICAgICAgKiBTaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJQdXNoRDo6bWVzc2FnZVR5cGVTZW5kc1JlcGx5KToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViUHVzaE1lc3NhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHVz
aE1lc3NhZ2U6OmRlY29kZSk6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOgor
ICAgICAgICAqIHdlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW06CisgICAgICAg
IChXZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlz
KToKKyAgICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdWJzY3Jp
YmUpOgorICAgICAgICAoV2ViUHVzaEQ6Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnVuc3Vi
c2NyaWJlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmRhdGFiYXNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vydmlj
ZTo6ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2Vydmlj
ZS5tbTogQWRkZWQuCisgICAgICAgIChXZWJQdXNoRDo6dXBkYXRlVG9waWNMaXN0cyk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJQdXNoRDo6
UHVzaFNlcnZpY2U6OmNyZWF0ZU1vY2tTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNo
U2VydmljZTo6UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6Om1ha2VQdXNoU3Vic2Ny
aXB0aW9uRnJvbVJlY29yZCk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1c2hUb3BpYyk6Cisg
ICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0OjpidW5kbGVJZGVudGlmaWVyKToK
KyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OnNjb3BlKToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OlB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAg
ICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6UHVzaFNlcnZpY2VSZXF1ZXN0
SW1wbCk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6ZnVsZmls
bCk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDo6cmVqZWN0KToK
KyAgICAgICAgKFdlYlB1c2hEOjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpHZXRTdWJzY3JpcHRp
b25SZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0Ojpz
dGFydEludGVybmFsKToKKyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjpTdWJz
Y3JpYmVSZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjpzdGFy
dEltcGwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OmF0dGVtcHRUb1Jl
Y292ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcik6CisgICAgICAgIChXZWJQdXNoRDo6
VW5zdWJzY3JpYmVSZXF1ZXN0OjpVbnN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVz
aEQ6OlVuc3Vic2NyaWJlUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmVucXVldWVQdXNoU2VydmljZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
UHVzaEQ6OlB1c2hTZXJ2aWNlOjpmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmdldFN1YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQ
dXNoRDo6UHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnN1YnNjcmliZSk6CisgICAgICAgIChXZWJQ
dXNoRDo6UHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OnVuc3Vic2NyaWJlKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAo
V2ViUHVzaEQ6Om1ha2VSYXdQdXNoTWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNl
cnZpY2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZSk6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNl
cnZpY2VDb25uZWN0aW9uLmg6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0
aW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJh
dGVDbGllbnRLZXlzKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmg6CisgICAg
ICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hEOjpNZXNz
YWdlSW5mbzo6aW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBs
eSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdGFydE1vY2tQdXNoU2VydmljZSk6Cisg
ICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpzdGFydFB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdl
YlB1c2hEOjpEYWVtb246OnNldFB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVt
b246OnJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFl
bW9uOjpkZWNvZGVBbmRIYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OmluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJQdXNo
RDo6RGFlbW9uOjpoYW5kbGVJbmNvbWluZ1B1c2gpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1v
bjo6Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcyk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpz
dWJzY3JpYmVUb1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnVuc3Vi
c2NyaWJlRnJvbVB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OmdldFB1
c2hTdWJzY3JpcHRpb24pOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0UHVzaFBlcm1p
c3Npb25TdGF0ZSk6CisgICAgICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaDoKKyAg
ICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIHdlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQu
d2VicHVzaGQubWFjLnBsaXN0OgorICAgICAgICAqIHdlYnB1c2hkL3dlYnB1c2hkLmNwcDoKKyAg
ICAgICAgKG1haW4pOgorCiAyMDIyLTAyLTA0ICBBcmNhZHkgR29sZG1pbnRzLU9ybG92ICA8YWdv
bGRtaW50c0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI4MDA3Nyk6IFtHVEtd
IEl0IGNhdXNlZCAxNTUgbmV3IHRlc3QgZmFpbHVyZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
U2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sIGIvU291
cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlh
bWwKaW5kZXggNWI0ZDNiNjI1NzE3NTMyNTU0ZjNhZDcyYTRkYjQ1YTY5ZWNhODVlNi4uMDVmNzdm
MzI1OTYwN2FiZDBmNzczY2Q1MjY3NThkZWM3ZjY5ZDhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKKysr
IGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVu
dGFsLnlhbWwKQEAgLTExMjIsNiArMTEyMiw4IEBAIFB1c2hBUElFbmFibGVkOgogICBkZWZhdWx0
VmFsdWU6CiAgICAgV2ViQ29yZToKICAgICAgIGRlZmF1bHQ6IGZhbHNlCisgICAgV2ViS2l0TGVn
YWN5OgorICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJLaXQ6CiAgICAgICBkZWZhdWx0OiBm
YWxzZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWlu
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLmgKaW5kZXggMzAzNzhm
ODU1M2FmZjVjM2RhMzRmYjk4ZjIzN2JhZTE1Njk4MDNhMi4uOWNmODRkMjc0NGZhN2RlYmZiMDcx
ZGYxMjNlZDEyNjlhNDdmNTI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJ
L0NvY29hL1dLTWFpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01h
aW4uaApAQCAtMzQsNyArMzQsNyBAQCBleHRlcm4gIkMiIHsKIAogV0tfRVhQT1JUIGludCBXS1hQ
Q1NlcnZpY2VNYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiBXS19FWFBPUlQgaW50IFdLQWRBdHRyaWJ1dGlv
bkRhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotV0tfRVhQT1JUIGludCBXS1dl
YlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKK1dLX0VYUE9SVCBpbnQg
V0tXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKICNpZmRlZiBfX2NwbHVz
cGx1cwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFp
bi5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4ubW0KaW5kZXggZGUy
ZTlmN2E1YmQ1NWY5MWRlODdlMWE5M2FhZjg5MDczZGZiZmQ0MS4uOTdkNzg1ZjY5ZjI2MWFhZmNl
MjVkOGQ5MTc2NzE0NGYyM2U5ZTA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
QVBJL0NvY29hL1dLTWFpbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2Ev
V0tNYWluLm1tCkBAIC00MCw3ICs0MCw3IEBAIGludCBXS0FkQXR0cmlidXRpb25EYWVtb25NYWlu
KGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKICAgICByZXR1cm4gV2ViS2l0OjpQQ01EYWVt
b25NYWluKGFyZ2MsIGFyZ3YpOwogfQogCi1pbnQgV0tXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJn
YywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgV0tXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiB7CiAgICAgcmV0dXJuIFdlYktpdDo6V2ViUHVzaERhZW1vbk1haW4oYXJn
YywgYXJndik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJQ
dXNoTWVzc2FnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViUHVzaE1l
c3NhZ2VDb2NvYS5tbQppbmRleCBmMTI5MzhiYzRkZGYxZGU0OTFkOTA5ZThiN2FmZGE2NTJkMGM5
MDdiLi5kOTM0ZGE0MDdjMWU2ODA5NzFiOGU5NGNlNjYyOTAzZDVhNmEzZGRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJQdXNoTWVzc2FnZUNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hNZXNzYWdlQ29jb2EubW0KQEAgLTM5
LDIxICszOSwzMCBAQCBzdGQ6Om9wdGlvbmFsPFdlYlB1c2hNZXNzYWdlPiBXZWJQdXNoTWVzc2Fn
ZTo6ZnJvbURpY3Rpb25hcnkoTlNEaWN0aW9uYXJ5ICpkaWN0aQogICAgIGlmICghdXJsIHx8ICFb
dXJsIGlzS2luZE9mQ2xhc3M6W05TVVJMIGNsYXNzXV0pCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICBOU0RhdGEgKnB1c2hEYXRhID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5
OldlYktpdFB1c2hEYXRhS2V5XTsKLSAgICBpZiAoIXB1c2hEYXRhIHx8ICFbcHVzaERhdGEgaXNL
aW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV0pCisgICAgaWQgcHVzaERhdGEgPSBbZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6V2ViS2l0UHVzaERhdGFLZXldOworICAgIEJPT0wgaXNOdWxsID0gW3B1
c2hEYXRhIGlzRXF1YWw6W05TTnVsbCBudWxsXV07CisgICAgQk9PTCBpc0RhdGEgPSBbcHVzaERh
dGEgaXNLaW5kT2ZDbGFzczpbTlNEYXRhIGNsYXNzXV07CisKKyAgICBpZiAoIWlzTnVsbCAmJiAh
aXNEYXRhKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHsgewot
ICAgICAgICBWZWN0b3I8dWludDhfdD4geyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4ocHVz
aERhdGEuYnl0ZXMpLCBwdXNoRGF0YS5sZW5ndGggfSwKLSAgICAgICAgVVJMIHsgdXJsIH0KLSAg
ICB9IH07CisgICAgV2ViUHVzaE1lc3NhZ2UgbWVzc2FnZSB7IHsgfSwgVVJMIHsgdXJsIH0gfTsK
KyAgICBpZiAoaXNEYXRhKSB7CisgICAgICAgIE5TRGF0YSAqZGF0YSA9IChOU0RhdGEgKilwdXNo
RGF0YTsKKyAgICAgICAgbWVzc2FnZS5wdXNoRGF0YSA9IFZlY3Rvcjx1aW50OF90PiB7IHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLmJ5dGVzKSwgZGF0YS5sZW5ndGggfTsKKyAgICB9
CisKKyAgICByZXR1cm4gbWVzc2FnZTsKIH0KIAogTlNEaWN0aW9uYXJ5ICpXZWJQdXNoTWVzc2Fn
ZTo6dG9EaWN0aW9uYXJ5KCkgY29uc3QKIHsKLSAgICBhdXRvIG5zRGF0YSA9IGFkb3B0TlMoW1tO
U0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cHVzaERhdGEuZGF0YSgpIGxlbmd0aDpwdXNoRGF0
YS5zaXplKCldKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiBuc0RhdGE7CisgICAgaWYgKHB1c2hE
YXRhKQorICAgICAgICBuc0RhdGEgPSBuc0RhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBp
bml0V2l0aEJ5dGVzOnB1c2hEYXRhLT5kYXRhKCkgbGVuZ3RoOnB1c2hEYXRhLT5zaXplKCldKTsK
KwogICAgIHJldHVybiBAewotICAgICAgICBXZWJLaXRQdXNoRGF0YUtleSA6IG5zRGF0YS5nZXQo
KSwKKyAgICAgICAgV2ViS2l0UHVzaERhdGFLZXkgOiBuc0RhdGEgPyBuc0RhdGEuZ2V0KCkgOiBb
TlNOdWxsIG51bGxdLAogICAgICAgICBXZWJLaXRQdXNoUmVnaXN0cmF0aW9uVVJMS2V5IDogKE5T
VVJMICopcmVnaXN0cmF0aW9uVVJMCiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAppbmRleCBmYzQ3ZGM0ZjEyNzQ4NzI0YjFiNTdjNTcy
YzE0OWIzODc4ZWMwYTViLi5mM2Y3YmJlNjNmNGVkMzVlZGNmM2UyYWFhZDkzZmIzZTQ5MjlmZjk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRz
LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCkBA
IC00Myw2ICs0Myw3IEBAIGVudW0gY2xhc3MgTWVzc2FnZVR5cGUgOiB1aW50OF90IHsKICAgICBT
ZXREZWJ1Z01vZGVJc0VuYWJsZWQsCiAgICAgVXBkYXRlQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24s
CiAgICAgSW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nLAorICAgIEluamVjdEVuY3J5cHRlZFB1
c2hNZXNzYWdlRm9yVGVzdGluZywKICAgICBHZXRQZW5kaW5nUHVzaE1lc3NhZ2VzLAogICAgIFN1
YnNjcmliZVRvUHVzaFNlcnZpY2UsCiAgICAgVW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UsCkBA
IC01OSw2ICs2MCw3IEBAIGlubGluZSBib29sIG1lc3NhZ2VUeXBlU2VuZHNSZXBseShNZXNzYWdl
VHlwZSBtZXNzYWdlVHlwZSkKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpSZXF1ZXN0U3lzdGVtTm90
aWZpY2F0aW9uUGVybWlzc2lvbjoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpHZXRQZW5kaW5nUHVz
aE1lc3NhZ2VzOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdFB1c2hNZXNzYWdlRm9yVGVz
dGluZzoKKyAgICBjYXNlIE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZv
clRlc3Rpbmc6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6U3Vic2NyaWJlVG9QdXNoU2VydmljZToK
ICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpVbnN1YnNjcmliZUZyb21QdXNoU2VydmljZToKICAgICBj
YXNlIE1lc3NhZ2VUeXBlOjpHZXRQdXNoU3Vic2NyaXB0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHVzaE1lc3NhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlB1c2hNZXNzYWdlLmgKaW5kZXggZjllNDNmMzMzZDU2ODQ4OGMyZmJlMWU2ZWJjMTFkNjIzMzRj
ZjhlNy4uMWY0ZWZhYzk4NGI1MjIyZGJkMTBiZThhYTMwYzdlNWE3OGJlOTk2MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaE1lc3NhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oCkBAIC0zNyw3ICszNyw3IEBAIHN0cnVjdCBXZWJQ
dXNoTWVzc2FnZSB7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFdlYlB1c2hNZXNzYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHB1c2hEYXRhOworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBwdXNo
RGF0YTsKICAgICBVUkwgcmVnaXN0cmF0aW9uVVJMOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBA
IC01NSw3ICs1NSw3IEBAIHZvaWQgV2ViUHVzaE1lc3NhZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KIHN0ZDo6b3B0aW9uYWw8V2ViUHVz
aE1lc3NhZ2U+IFdlYlB1c2hNZXNzYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gcHVzaERhdGE7CisgICAgc3RkOjpvcHRp
b25hbDxzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4+IHB1c2hEYXRhOwogICAgIGRlY29k
ZXIgPj4gcHVzaERhdGE7CiAgICAgaWYgKCFwdXNoRGF0YSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDBjN2MzMWJjNTU3YjU1ZDUxNzA1ZmMzOWQ3ZTY3OWM5NGM2YTBhZjMuLjgyNzhl
NTAyNzRlNTAwZWUxZTlkZmE2OGZjZmU2NTY2M2JjNjY0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTQ2LDcgKzk0Niw3IEBACiAJ
CTUxMjkzNUU0MTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVu
dUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTEyOTM1RTIxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51
Q2xpZW50LmggKi87IH07CiAJCTUxMjlFQjEyMjNEMERFN0IwMEFGMUNENyAvKiBDb250ZW50V29y
bGRTaGFyZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMjlFQjExMjNEMERFNzgwMEFGMUNENyAvKiBDb250ZW50V29ybGRTaGFyZWQuaCAqLzsgfTsK
IAkJNTEyQ0Q2OTgyNzIxRUZDODAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJDRDY5NzI3
MjFFRkMzMDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb24uaCAqLzsgfTsKLQkJNTEy
Q0Q2OUEyNzIxRjBBOTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk5MjcyMUYwNDkw
MEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggKi87IH07CisJCTUxMkNENjlBMjcy
MUYwQTkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJDRDY5OTI3MjFGMDQ5MDBGN0Y4RUMg
LyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxMkUzNEU1MTMwQjREMDUwMEFCRDE5QSAvKiBXS0FwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTdBMzNCNDEzMEIzMDhDMDBGODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUxMkVDQzM1MjcxOTZBREIwMDA4OUI2NiAvKiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudENv
bm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDQjkzMEZFMjZFODAyMTYwMDMyQjFDMCAvKiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvbm5l
Y3Rpb24uaCAqLzsgfTsKIAkJNTEyRjU4OTcxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMkY1ODhGMTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVByb3h5LmggKi87IH07CkBAIC0xOTk4LDYgKzE5OTgsOCBAQAogCQlFNUNCQTc2NzI3QTMx
OEUxMDBERjc4NTggLyogVW5pZmllZFNvdXJjZTExOS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNUNCQTc2MDI3QTMxODc5MDBERjc4NTggLyogVW5p
ZmllZFNvdXJjZTExOS5jcHAgKi87IH07CiAJCUU1Q0JBNzY4MjdBMzE4RTEwMERGNzg1OCAvKiBV
bmlmaWVkU291cmNlMTE3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU1Q0JBNzYyMjdBMzE4NzkwMERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE3LmNw
cCAqLzsgfTsKIAkJRTVERUZBNjgyNkY4RjQyNjAwQUI2OERCIC8qIFBob3Rvc1VJU1BJLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNURFRkE2NzI2RjhG
NDI2MDBBQjY4REIgLyogUGhvdG9zVUlTUEkuaCAqLzsgfTsKKwkJRUIzNkIxNjgyN0E3QjQ1MDAw
NTBFMDBEIC8qIFB1c2hTZXJ2aWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFQjM2QjE2NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCAq
LzsgfTsKKwkJRUIzNkIxNjkyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUIzNkIxNjcyN0E3QjQ1
MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLm1tICovOyB9OwogCQlFQkE4RDNBQjI3QTVFMzEzMDBD
Qjc5MDAgLyogQXBwbGVQdXNoU2VydmljZVNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRUJBOEQzQUEyN0E1RTMxMzAwQ0I3OTAwIC8qIEFwcGxlUHVz
aFNlcnZpY2VTUEkuaCAqLzsgfTsKIAkJRUJBOEQzQjIyN0E1RTMzRjAwQ0I3OTAwIC8qIEFwcGxl
UHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRUJBOEQzQUMyN0E1RTMzRTAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLm1tICovOyB9OwogCQlFQkE4RDNCMzI3QTVFMzNGMDBDQjc5MDAgLyogTW9j
a1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRUJBOEQzQUQyN0E1RTMzRTAwQ0I3OTAwIC8qIE1vY2tQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaCAqLzsgfTsKQEAgLTY0NTksNiArNjQ2MSw4IEBACiAJCUU1REVGQTY3MjZG
OEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaG90b3NVSVNQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjBEMzEyRDI3NUFFMTMzMDA4NjNE
OEYgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnBsaXN0LnhtbDsgcGF0aCA9IGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQjBEMzEyRTI3NUFFMTMzMDA4NjNEOEYgLyog
Y29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5pb3MucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0
LnhtbDsgcGF0aCA9IGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQuaW9zLnBsaXN0OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFQjM2QjE2NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNl
cnZpY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHVzaFNlcnZpY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRUIzNkIxNjcyN0E3QjQ1MDAwNTBFMDBEIC8q
IFB1c2hTZXJ2aWNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
UHVzaFNlcnZpY2UubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCQThEM0FBMjdB
NUUzMTMwMENCNzkwMCAvKiBBcHBsZVB1c2hTZXJ2aWNlU1BJLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFwcGxlUHVzaFNlcnZpY2VTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRUJBOEQzQUMyN0E1RTMzRTAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VD
b25uZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXBw
bGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUVCQThEM0FEMjdBNUUzM0UwMENCNzkwMCAvKiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tQdXNoU2VydmljZUNvbm5lY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMDk4LDYgKzEwMTAyLDggQEAK
IAkJCQk1MTYwRTk1ODI3NEMwRDg4MDA1NjczODggLyogUHVzaEFwcEJ1bmRsZS5tbSAqLywKIAkJ
CQk1MUY3QkI3OTI3NDRDNTA3MDBDNDVBNzIgLyogUHVzaENsaWVudENvbm5lY3Rpb24uaCAqLywK
IAkJCQk1MUY3QkI3QTI3NDRDNTA3MDBDNDVBNzIgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0g
Ki8sCisJCQkJRUIzNkIxNjYyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLmggKi8sCisJ
CQkJRUIzNkIxNjcyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLm1tICovLAogCQkJCUVC
QThEM0FGMjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24uaCAqLywKIAkJ
CQlFQkE4RDNCMTI3QTVFMzNGMDBDQjc5MDAgLyogUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tICov
LAogCQkJCTUxN0I1Rjc3Mjc1RTk3OTUwMDJEQzIyRCAvKiB3ZWJwdXNoZC5jcHAgKi8sCkBAIC0x
MzI1MCw2ICsxMzI1Niw3IEBACiAJCQkJNTE3QjVGODEyNzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hB
cHBCdW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1RjdEMjc1RTk3QjYwMDJEQzIyRCAv
KiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGOTUyNzVF
QkE2MzAwMkRDMjJEIC8qIFB1c2hNZXNzYWdlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRUIzNkIxNjgyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFQkE4RDNCNTI3QTVFMzNGMDBDQjc5MDAgLyogUHVzaFNlcnZpY2VDb25uZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUU2ODg3MDFGNkUyQkFCMDA3MDA2QTYgLyogUXVhcmFu
dGluZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwQzIyN0UyNDUxMTMwQTAwRUQ2MTREIC8q
IFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTE1NTA5
LDYgKzE1NTE2LDcgQEAKIAkJCQkyRDU0QzMxQjIxMkY0REE2MDA0OUMxNzQgLyogUHJvY2Vzc0xh
dW5jaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxN0I1RjgyMjc1RTk3QjYwMDJEQzIyRCAv
KiBQdXNoQXBwQnVuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGN0IyNzVFOTdBOTAw
MkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRUIz
NkIxNjkyN0E3QjQ1MDAwNTBFMDBEIC8qIFB1c2hTZXJ2aWNlLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRUJBOEQzQjcyN0E1RTMzRjAwQ0I3OTAwIC8qIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCTFBMEMyMjdGMjQ1MTEzMEEwMEVENjE0RCAvKiBRdWlja0xvb2tU
aHVtYm5haWxpbmdTb2Z0TGluay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMEMyMjVFMjQzNTc1
Q0QwMEVENjE0RCAvKiBRdWlja0xvb2tUaHVtYm5haWxMb2FkZXIubW0gaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9u
LmgKaW5kZXggNzc2OWJiNmJkZDU4MjhlN2IxNjRjMTY3Yzg0NjBjZmRiZDdjMDQwMC4uYjk1M2Ji
OWMxMmRkN2UyMmJkNjkxMzA1NDQ4NzljN2RmNDZkOTRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKQEAgLTM0LDYgKzM0LDgg
QEAgcHVibGljOgogICAgIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24oKTsKICAgICB+TW9ja1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbigpOwogCisgICAgV2ViQ29yZTo6UHVzaENyeXB0bzo6Q2xpZW50
S2V5cyBnZW5lcmF0ZUNsaWVudEtleXMoKSBmaW5hbDsKKwogICAgIHZvaWQgc3Vic2NyaWJlKGNv
bnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXks
IFN1YnNjcmliZUhhbmRsZXImJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1bnN1YnNjcmliZShjb25z
dCBTdHJpbmcmIHRvcGljLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBV
bnN1YnNjcmliZUhhbmRsZXImJikgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQppbmRleCBkYmVmYTc0YWVjZDlh
OWVhMGU0MTk4MzM4NjhlMzA4ZDNkNzZmNjAzLi5jNGNmMmU2NzliOTJiZjkyMzU2MWMxNThjMjNk
MzY4MDFkODc4MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNo
U2VydmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC0yNiw2ICsyNiwxMCBAQAogI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgiCiAKKyNpbXBvcnQgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6UHVzaENyeXB0bzsK
KwogbmFtZXNwYWNlIFdlYlB1c2hEIHsKIAogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6TW9j
a1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpCkBAIC0zNCwxNCArMzgsMzAgQEAgTW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbjo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpCiAKIE1vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb246On5Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0Owog
Ci12b2lkIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1YnNjcmliZShjb25zdCBTdHJpbmcm
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCBTdWJzY3JpYmVIYW5kbGVyJiYgaGFuZGxlcikKK0Ns
aWVudEtleXMgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKCkK
IHsKLSAgICBoYW5kbGVyKHsgfSwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29jb2FFcnJv
ckRvbWFpbiBjb2RlOk5TRmVhdHVyZVVuc3VwcG9ydGVkRXJyb3IgdXNlckluZm86bmlsXSk7Cisg
ICAgLy8gRXhhbXBsZSB2YWx1ZXMgZnJvbSBSRkM4MjkxIFNlY3Rpb24gNS4KKyAgICBhdXRvIHB1
YmxpY0tleSA9IGJhc2U2NFVSTERlY29kZSgiQkNWeHNyN05fZU5nVlJxdkh0RDB6VFpzRWM2LVZW
LUp2TGV4aHFVek9SY3hhT3ppNi1BWVdYdlRCSG00Ymp5UGpzN1ZkOHBaR0g2U1Jwa050b0lBaXc0
Il9zKS52YWx1ZSgpOworICAgIGF1dG8gcHJpdmF0ZUtleSA9IGJhc2U2NFVSTERlY29kZSgicTFk
WHB3M1VwVDVWT211X2NmX3Y2aWgwN0FlbXMzbmp4SS1KV2dMY005NCJfcykudmFsdWUoKTsKKyAg
ICBhdXRvIHNlY3JldCA9IGJhc2U2NFVSTERlY29kZSgiQlRCWk1xSEg2cjRUdHM3Sl9hU0lnZyJf
cykudmFsdWUoKTsKKworICAgIHJldHVybiBDbGllbnRLZXlzIHsgUDI1NkRIS2V5UGFpciB7IFdU
Rk1vdmUocHVibGljS2V5KSwgV1RGTW92ZShwcml2YXRlS2V5KSB9LCBXVEZNb3ZlKHNlY3JldCkg
fTsKK30KKwordm9pZCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpzdWJzY3JpYmUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgU3Vic2NyaWJl
SGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgYXV0byBhbHdheXNSZWplY3RlZEtleSA9IGJhc2U2
NFVSTERlY29kZSgiQkVBeGFVTW8xczh0ak9SeEpmblNTdldoWWI0dTUxa2cxaFdUMnNfOWdwVjda
eGFyMXBGXzJCUThBbmN1QWRTMkJvTGhONHFheHpCeTJDd0hFOEJCeldnIl9zKS52YWx1ZSgpOwor
ICAgIGlmICh2YXBpZFB1YmxpY0tleSA9PSBhbHdheXNSZWplY3RlZEtleSkgeworICAgICAgICBo
YW5kbGVyKHsgfSwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiV2ViUHVzaCIgY29kZTotMSB1
c2VySW5mbzpuaWxdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGhhbmRsZXIoQCJo
dHRwczovL3dlYmtpdC5vcmcvcHVzaCIsIG5pbCk7CiB9CiAKIHZvaWQgTW9ja1B1c2hTZXJ2aWNl
Q29ubmVjdGlvbjo6dW5zdWJzY3JpYmUoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiwgVW5zdWJzY3JpYmVIYW5kbGVyJiYgaGFuZGxlcikKIHsKLSAgICBoYW5kbGVyKHsgfSwg
W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOk5TQ29jb2FFcnJvckRvbWFpbiBjb2RlOk5TRmVhdHVy
ZVVuc3VwcG9ydGVkRXJyb3IgdXNlckluZm86bmlsXSk7CisgICAgaGFuZGxlcih0cnVlLCBuaWwp
OwogfQogCiBWZWN0b3I8U3RyaW5nPiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjplbmFibGVk
VG9waWNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2Uu
aCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZTQx
NWUwMDhkZDYzMDUxMDU4MjRmOGNmYjAyNjk1YWZjMzIzZmViCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oCkBAIC0wLDAgKzEsODcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlB1c2hTZXJ2aWNlQ29ubmVjdGlv
bi5oIgorI2luY2x1ZGUgIldlYlB1c2hNZXNzYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FeGNl
cHRpb25EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QdXNoRGF0YWJhc2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1B1c2hTdWJzY3JpcHRpb25EYXRhLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJl
Zi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYlB1c2hEIHsKKworY2xhc3MgR2V0U3Vic2NyaXB0aW9uUmVx
dWVzdDsKK2NsYXNzIFB1c2hTZXJ2aWNlUmVxdWVzdDsKK2NsYXNzIFN1YnNjcmliZVJlcXVlc3Q7
CitjbGFzcyBVbnN1YnNjcmliZVJlcXVlc3Q7CisKK2NsYXNzIFB1c2hTZXJ2aWNlIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlciA9IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlm
aWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYpPjsKKworICAgIHN0YXRpYyB2b2lkIGNyZWF0
ZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlUGF0aCwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmKTsKKyAgICBzdGF0aWMg
dm9pZCBjcmVhdGVNb2NrU2VydmljZShJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYpOwor
ICAgIH5QdXNoU2VydmljZSgpOworCisgICAgUHVzaFNlcnZpY2VDb25uZWN0aW9uJiBjb25uZWN0
aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uOyB9CisgICAgV2ViQ29yZTo6UHVzaERhdGFiYXNl
JiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KKworICAgIHZvaWQgZ2V0U3Vic2Ny
aXB0aW9uKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29w
ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4m
Jik7CisgICAgdm9pZCBzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJz
Y3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmKTsKKyAgICB2b2lkIHVu
c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBz
Y29wZSwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4m
Jik7CisKKyAgICB2b2lkIGRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdChHZXRTdWJz
Y3JpcHRpb25SZXF1ZXN0Jik7CisgICAgdm9pZCBkaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3Qo
U3Vic2NyaWJlUmVxdWVzdCYpOworICAgIHZvaWQgZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVl
c3QoVW5zdWJzY3JpYmVSZXF1ZXN0Jik7CisKKyAgICB2b2lkIGRpZFJlY2VpdmVQdXNoTWVzc2Fn
ZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSAqdXNlckluZm8sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiA9IFtdIHsgfSk7CisKK3ByaXZhdGU6CisgICAgUHVzaFNlcnZpY2UoVW5p
cXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4mJiwgVW5pcXVlUmVmPFdlYkNvcmU6OlB1c2hE
YXRhYmFzZT4mJiwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJik7CisKKyAgICB1c2luZyBQ
dXNoU2VydmljZVJlcXVlc3RNYXAgPSBIYXNoTWFwPHN0ZDo6dHVwbGU8U3RyaW5nLCBTdHJpbmc+
LCBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0Pj4+OworICAgIHZvaWQg
ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2VydmljZVJlcXVlc3RNYXAmLCBzdGQ6OnVu
aXF1ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0PiYmKTsKKyAgICB2b2lkIGZpbmlzaGVkUHVzaFNl
cnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYsIFB1c2hTZXJ2aWNlUmVxdWVzdCYp
OworCisgICAgVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwor
ICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpQdXNoRGF0YWJhc2U+IG1fZGF0YWJhc2U7CisKKyAgICBJ
bmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyOwor
CisgICAgUHVzaFNlcnZpY2VSZXF1ZXN0TWFwIG1fZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdHM7Cisg
ICAgUHVzaFNlcnZpY2VSZXF1ZXN0TWFwIG1fc3Vic2NyaWJlUmVxdWVzdHM7CisgICAgUHVzaFNl
cnZpY2VSZXF1ZXN0TWFwIG1fdW5zdWJzY3JpYmVSZXF1ZXN0czsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYlB1c2hECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2
aWNlLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wYzhhOWZiNmEyNGUyMjZjNWU2OWRhMmU3NGVjODBiNDZiOWNiNjhkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5tbQpAQCAtMCwwICsxLDU5
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUHVzaFNlcnZp
Y2UuaCIKKworI2ltcG9ydCAiQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIKKyNpbXBvcnQg
Ik1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9QdXNoTWVzc2Fn
ZUNyeXB0by5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgorI2ltcG9ydCA8
d3RmL09TT2JqZWN0UHRyLmg+CisjaW1wb3J0IDx3dGYvV29ya1F1ZXVlLmg+CisjaW1wb3J0IDx3
dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJQdXNoRCB7CisKK3N0YXRpYyB2b2lkIHVwZGF0ZVRvcGljTGlzdHMoUHVzaFNlcnZp
Y2VDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBQdXNoRGF0YWJhc2UmIGRhdGFiYXNlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGRhdGFiYXNlLmdl
dFRvcGljc0J5V2FrZVN0YXRlKFsmY29ubmVjdGlvbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIHRvcGljTWFwKSBtdXRhYmxlIHsKKyAgICAg
ICAgLy8gRklYTUU6IG1vdmUgdG9waWNzIHRvIGlnbm9yZWQgbGlzdCBiYXNlZCBvbiB1c2VyIHBy
ZWZlcmVuY2VzLgorICAgICAgICBQdXNoU2VydmljZUNvbm5lY3Rpb246OlRvcGljTGlzdHMgdG9w
aWNMaXN0czsKKworICAgICAgICBpZiAoYXV0byBpdCA9IHRvcGljTWFwLmZpbmQoUHVzaFdha2VT
dGF0ZTo6V2FraW5nKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3
YXAodG9waWNMaXN0cy5lbmFibGVkVG9waWNzLCBpdC0+dmFsdWUpOworICAgICAgICBpZiAoYXV0
byBpdCA9IHRvcGljTWFwLmZpbmQoUHVzaFdha2VTdGF0ZTo6T3Bwb3J0dW5pc3RpYyk7IGl0ICE9
IHRvcGljTWFwLmVuZCgpKQorICAgICAgICAgICAgc3RkOjpzd2FwKHRvcGljTGlzdHMub3Bwb3J0
dW5pc3RpY1RvcGljcywgaXQtPnZhbHVlKTsKKyAgICAgICAgaWYgKGF1dG8gaXQgPSB0b3BpY01h
cC5maW5kKFB1c2hXYWtlU3RhdGU6Ok5vbldha2luZyk7IGl0ICE9IHRvcGljTWFwLmVuZCgpKQor
ICAgICAgICAgICAgc3RkOjpzd2FwKHRvcGljTGlzdHMubm9uV2FraW5nVG9waWNzLCBpdC0+dmFs
dWUpOworCisgICAgICAgIGNvbm5lY3Rpb24uc2V0VG9waWNMaXN0cyhXVEZNb3ZlKHRvcGljTGlz
dHMpKTsKKworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCisjaWYg
SEFWRShBUFBMRV9QVVNIX1NFUlZJQ0VfVVJMX1RPS0VOX1NVUFBPUlQpCisKK3ZvaWQgUHVzaFNl
cnZpY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlUGF0aCwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiBtZXNz
YWdlSGFuZGxlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNl
cnZpY2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIHRyYW5zYWN0aW9uID0g
YWRvcHRPU09iamVjdChvc190cmFuc2FjdGlvbl9jcmVhdGUoImNvbS5hcHBsZS53ZWJraXQud2Vi
cHVzaGQucHVzaC1zZXJ2aWNlLWluaXQiKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rp
b24gQVNBUCBzbyB0aGF0IHdlIGJvb3RzdHJhcF9jaGVja19pbiB0byB0aGUgc2VydmljZSBpbiBh
IHRpbWVseSBtYW5uZXIuCisgICAgYXV0byBjb25uZWN0aW9uID0gbWFrZVVuaXF1ZVJlZjxBcHBs
ZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4oaW5jb21pbmdQdXNoU2VydmljZU5hbWUpOworCisgICAg
UHVzaERhdGFiYXNlOjpjcmVhdGUoZGF0YWJhc2VQYXRoLCBbdHJhbnNhY3Rpb24gPSBXVEZNb3Zl
KHRyYW5zYWN0aW9uKSwgY29ubmVjdGlvbiA9IFdURk1vdmUoY29ubmVjdGlvbiksIG1lc3NhZ2VI
YW5kbGVyID0gV1RGTW92ZShtZXNzYWdlSGFuZGxlciksIGNyZWF0aW9uSGFuZGxlciA9IFdURk1v
dmUoY3JlYXRpb25IYW5kbGVyKV0oYXV0byYmIGRhdGFiYXNlUmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKCFkYXRhYmFzZVJlc3VsdCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVz
aCwgIlB1c2ggc2VydmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBkYXRhYmFzZSBlcnJv
ciIpOworICAgICAgICAgICAgY3JlYXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2Vy
dmljZT4oKSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGRhdGFiYXNlID0gbWFrZVVuaXF1
ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1vdmUoZGF0YWJhc2VSZXN1bHQpKTsKKyAgICAg
ICAgVW5pcXVlUmVmPFB1c2hTZXJ2aWNlPiBzZXJ2aWNlKCpuZXcgUHVzaFNlcnZpY2UoV1RGTW92
ZShjb25uZWN0aW9uKSwgV1RGTW92ZShkYXRhYmFzZSksIFdURk1vdmUobWVzc2FnZUhhbmRsZXIp
KSk7CisKKyAgICAgICAgYXV0byYgY29ubmVjdGlvblJlZiA9IHNlcnZpY2UtPmNvbm5lY3Rpb24o
KTsKKyAgICAgICAgYXV0byYgZGF0YWJhc2VSZWYgPSBzZXJ2aWNlLT5kYXRhYmFzZSgpOworCisg
ICAgICAgIC8vIE9ubHkgcHJvdmlkZSB0aGUgc2VydmljZSBvYmplY3QgYmFjayB0byB0aGUgY2Fs
bGVyIGFmdGVyIHdlJ3ZlIHN5bmNlZCB0aGUgdG9waWMgbGlzdHMgaW4KKyAgICAgICAgLy8gdGhl
IGRhdGFiYXNlIHdpdGggdGhlIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbi9BUFNDb25uZWN0aW9uLiBU
aGlzIGVuc3VyZXMgdGhhdCB3ZSB3b24ndAorICAgICAgICAvLyBzZXJ2aWNlIGFueSBjYWxscyB0
byBzdWJzY3JpYmUvdW5zdWJzY3JpYmUvZXRjLiB1bnRpbCBhZnRlciB0aGUgdG9waWMgbGlzdHMg
YXJlIHVwIHRvCisgICAgICAgIC8vIGRhdGUsIHdoaWNoIEFQU0Nvbm5lY3Rpb24gY2FyZXMgYWJv
dXQuCisgICAgICAgIHVwZGF0ZVRvcGljTGlzdHMoY29ubmVjdGlvblJlZiwgZGF0YWJhc2VSZWYs
IFt0cmFuc2FjdGlvbiA9IFdURk1vdmUodHJhbnNhY3Rpb24pLCBzZXJ2aWNlID0gV1RGTW92ZShz
ZXJ2aWNlKSwgY3JlYXRpb25IYW5kbGVyID0gV1RGTW92ZShjcmVhdGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgY3JlYXRpb25IYW5kbGVyKHNlcnZpY2UubW92ZVRvVW5pcXVl
UHRyKCkpOworICAgICAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxscHRyOworICAgICAgICB9KTsK
KyAgICB9KTsKK30KKworI2Vsc2UKKwordm9pZCBQdXNoU2VydmljZTo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYsIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKT4mJiBjcmVh
dGlvbkhhbmRsZXIpCit7CisgICAgY3JlYXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNo
U2VydmljZT4oKSk7Cit9CisKKyNlbmRpZiAvLyBIQVZFKEFQUExFX1BVU0hfU0VSVklDRV9VUkxf
VE9LRU5fU1VQUE9SVCkKKwordm9pZCBQdXNoU2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UoSW5j
b21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiBtZXNzYWdlSGFuZGxlciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxl
cikKK3sKKyAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShTUUxpdGVEYXRhYmFzZTo6aW5NZW1vcnlQ
YXRoKCksIFttZXNzYWdlSGFuZGxlciA9IFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBjcmVhdGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKGF1dG8mJiBkYXRhYmFzZVJlc3Vs
dCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghZGF0YWJhc2VSZXN1bHQpIHsKKyAgICAgICAgICAg
IGNyZWF0aW9uSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+KCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBjb25uZWN0aW9uID0gbWFr
ZVVuaXF1ZVJlZjxNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uPigpOworICAgICAgICBhdXRvIGRh
dGFiYXNlID0gbWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1vdmUoZGF0YWJh
c2VSZXN1bHQpKTsKKyAgICAgICAgY3JlYXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNo
U2VydmljZT4obmV3IFB1c2hTZXJ2aWNlKFdURk1vdmUoY29ubmVjdGlvbiksIFdURk1vdmUoZGF0
YWJhc2UpLCBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSkpKTsKKyAgICB9KTsKK30KKworUHVzaFNl
cnZpY2U6OlB1c2hTZXJ2aWNlKFVuaXF1ZVJlZjxQdXNoU2VydmljZUNvbm5lY3Rpb24+JiYgcHVz
aFNlcnZpY2VDb25uZWN0aW9uLCBVbmlxdWVSZWY8UHVzaERhdGFiYXNlPiYmIHB1c2hEYXRhYmFz
ZSwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiBpbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxl
cikKKyAgICA6IG1fY29ubmVjdGlvbihXVEZNb3ZlKHB1c2hTZXJ2aWNlQ29ubmVjdGlvbikpCisg
ICAgLCBtX2RhdGFiYXNlKFdURk1vdmUocHVzaERhdGFiYXNlKSkKKyAgICAsIG1faW5jb21pbmdQ
dXNoTWVzc2FnZUhhbmRsZXIoV1RGTW92ZShpbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcikpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcik7CisKKyAg
ICBtX2Nvbm5lY3Rpb24tPnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKFt0aGlzXShOU1N0
cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSAqdXNlckluZm8pIHsKKyAgICAgICAgZGlkUmVjZWl2
ZVB1c2hNZXNzYWdlKHRvcGljLCB1c2VySW5mbyk7CisgICAgfSk7Cit9CisKK1B1c2hTZXJ2aWNl
Ojp+UHVzaFNlcnZpY2UoKSA9IGRlZmF1bHQ7CisKK3N0YXRpYyBQdXNoU3Vic2NyaXB0aW9uRGF0
YSBtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoUHVzaFJlY29yZCYmIHJlY29yZCkKK3sK
KyAgICByZXR1cm4gUHVzaFN1YnNjcmlwdGlvbkRhdGEgeworICAgICAgICByZWNvcmQuaWRlbnRp
ZmllciwKKyAgICAgICAgV1RGTW92ZShyZWNvcmQuZW5kcG9pbnQpLAorICAgICAgICBXVEZNb3Zl
KHJlY29yZC5leHBpcmF0aW9uVGltZSksCisgICAgICAgIFdURk1vdmUocmVjb3JkLnNlcnZlclZB
UElEUHVibGljS2V5KSwKKyAgICAgICAgV1RGTW92ZShyZWNvcmQuY2xpZW50UHVibGljS2V5KSwK
KyAgICAgICAgV1RGTW92ZShyZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkKKyAgICB9OworfQorCitz
dGF0aWMgU3RyaW5nIG1ha2VQdXNoVG9waWMoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNjb3BlKQoreworICAgIHJldHVybiBidW5kbGVJZGVudGlmaWVyICsg
IiAiICsgc2NvcGU7Cit9CisKK2NsYXNzIFB1c2hTZXJ2aWNlUmVxdWVzdCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UHVzaFNlcnZpY2VSZXF1
ZXN0KCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24o
KSBjb25zdCA9IDA7CisKKyAgICBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIoKSB7IHJl
dHVybiBtX2J1bmRsZUlkZW50aWZpZXI7IH0KKyAgICBjb25zdCBTdHJpbmcmIHNjb3BlKCkgeyBy
ZXR1cm4gbV9zY29wZTsgfTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIFB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29u
c3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlKQorICAgICAg
ICA6IG1fc2VydmljZShzZXJ2aWNlKQorICAgICAgICAsIG1fY29ubmVjdGlvbihzZXJ2aWNlLmNv
bm5lY3Rpb24oKSkKKyAgICAgICAgLCBtX2RhdGFiYXNlKHNlcnZpY2UuZGF0YWJhc2UoKSkKKyAg
ICAgICAgLCBtX2J1bmRsZUlkZW50aWZpZXIoYnVuZGxlSWRlbnRpZmllcikKKyAgICAgICAgLCBt
X3Njb3BlKHNjb3BlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCkg
PSAwOworCisgICAgUHVzaFNlcnZpY2UmIG1fc2VydmljZTsKKyAgICBQdXNoU2VydmljZUNvbm5l
Y3Rpb24mIG1fY29ubmVjdGlvbjsKKyAgICBQdXNoRGF0YWJhc2UmIG1fZGF0YWJhc2U7CisgICAg
U3RyaW5nIG1fYnVuZGxlSWRlbnRpZmllcjsKKyAgICBTdHJpbmcgbV9zY29wZTsKKyAgICBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFB1c2hTZXJ2aWNlUmVxdWVzdCYpPiBtX2NvbXBsZXRpb25IYW5k
bGVyOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZT4KK2NsYXNzIFB1c2hTZXJ2
aWNlUmVxdWVzdEltcGwgOiBwdWJsaWMgUHVzaFNlcnZpY2VSZXF1ZXN0IHsKK3B1YmxpYzoKKyAg
ICB2b2lkIHN0YXJ0KCkgZmluYWwKKyAgICB7CisgICAgICAgIGlmIChtX2J1bmRsZUlkZW50aWZp
ZXIuaXNFbXB0eSgpIHx8IG1fc2NvcGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZWplY3Qo
V2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkFib3J0RXJyb3IsICJJbnZhbGlkIHNl
bmRlciJfcyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFN0
cmluZyB0cmFuc2FjdGlvbkRlc2NyaXB0aW9uID0gU3RyaW5nKCJjb20uYXBwbGUud2Via2l0Lndl
YnB1c2hkOiJfcykgKyBkZXNjcmlwdGlvbigpICsgIjoiX3MgKyBtX2J1bmRsZUlkZW50aWZpZXIg
KyAiOiJfcyArIG1fc2NvcGU7CisgICAgICAgIG1fdHJhbnNhY3Rpb24gPSBhZG9wdE9TT2JqZWN0
KG9zX3RyYW5zYWN0aW9uX2NyZWF0ZSh0cmFuc2FjdGlvbkRlc2NyaXB0aW9uLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICAgICAgc3RhcnRJbnRlcm5hbCgpOworICAgIH0KKworcHJvdGVjdGVkOgorICAg
IHVzaW5nIFJlc3VsdEhhbmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVj
dGVkPFJlc3VsdFR5cGUsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+OworCisgICAgUHVzaFNl
cnZpY2VSZXF1ZXN0SW1wbChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBidW5k
bGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0
SGFuZGxlcikKKyAgICAgICAgOiBQdXNoU2VydmljZVJlcXVlc3Qoc2VydmljZSwgYnVuZGxlSWRl
bnRpZmllciwgc2NvcGUpCisgICAgICAgICwgbV9yZXN1bHRIYW5kbGVyKFdURk1vdmUocmVzdWx0
SGFuZGxlcikpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5QdXNoU2VydmljZVJlcXVlc3RJ
bXBsKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0SW50ZXJuYWwoKSA9IDA7
CisKKyAgICB2b2lkIGZ1bGZpbGwoUmVzdWx0VHlwZSByZXN1bHQpCisgICAgeworICAgICAgICBt
X3Jlc3VsdEhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgZmluaXNoKCk7CisgICAg
fQorCisgICAgdm9pZCByZWplY3QoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSYmIGRhdGEpCisgICAg
eworICAgICAgICBtX3Jlc3VsdEhhbmRsZXIobWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShkYXRhKSkp
OworICAgICAgICBmaW5pc2goKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdWx0SGFuZGxl
ciBtX3Jlc3VsdEhhbmRsZXI7CisgICAgT1NPYmplY3RQdHI8b3NfdHJhbnNhY3Rpb25fdD4gbV90
cmFuc2FjdGlvbjsKK307CisKK2NsYXNzIEdldFN1YnNjcmlwdGlvblJlcXVlc3QgOiBwdWJsaWMg
UHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDxzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3Jp
cHRpb25EYXRhPj4geworcHVibGljOgorICAgIEdldFN1YnNjcmlwdGlvblJlcXVlc3QoUHVzaFNl
cnZpY2UmLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2Nv
cGUsIFJlc3VsdEhhbmRsZXImJik7CisgICAgdmlydHVhbCB+R2V0U3Vic2NyaXB0aW9uUmVxdWVz
dCgpID0gZGVmYXVsdDsKKworcHJvdGVjdGVkOgorICAgIEFTQ0lJTGl0ZXJhbCBkZXNjcmlwdGlv
bigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJHZXRTdWJzY3JpcHRpb25SZXF1ZXN0Il9zOyB9Cisg
ICAgdm9pZCBzdGFydEludGVybmFsKCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbCB7
IG1fc2VydmljZS5kaWRDb21wbGV0ZUdldFN1YnNjcmlwdGlvblJlcXVlc3QoKnRoaXMpOyB9Cit9
OworCitHZXRTdWJzY3JpcHRpb25SZXF1ZXN0OjpHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KFB1c2hT
ZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgc2NvcGUsIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQorICAgIDogUHVzaFNl
cnZpY2VSZXF1ZXN0SW1wbChzZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RGTW92
ZShyZXN1bHRIYW5kbGVyKSkKK3sKK30KKworLy8gSW1wbGVtZW50cyB0aGUgd2VicHVzaGQgc2lk
ZSBvZiBQdXNoTWFuYWdlci5nZXRTdWJzY3JpcHRpb24uCit2b2lkIEdldFN1YnNjcmlwdGlvblJl
cXVlc3Q6OnN0YXJ0SW50ZXJuYWwoKQoreworICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5k
bGVJZGVudGlmaWVyQW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpc10o
YXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAg
ICAgICBmdWxmaWxsKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+
IHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmdWxmaWxs
KG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChXVEZNb3ZlKCpyZXN1bHQpKSk7CisgICAg
fSk7Cit9CisKK2NsYXNzIFN1YnNjcmliZVJlcXVlc3QgOiBwdWJsaWMgUHVzaFNlcnZpY2VSZXF1
ZXN0SW1wbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4geworcHVibGljOgorICAgIFN1
YnNjcmliZVJlcXVlc3QoUHVzaFNlcnZpY2UmLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJs
aWNLZXksIFJlc3VsdEhhbmRsZXImJik7CisgICAgdmlydHVhbCB+U3Vic2NyaWJlUmVxdWVzdCgp
ID0gZGVmYXVsdDsKKworcHJvdGVjdGVkOgorICAgIEFTQ0lJTGl0ZXJhbCBkZXNjcmlwdGlvbigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTdWJzY3JpYmVSZXF1ZXN0Il9zOyB9CisgICAgdm9pZCBz
dGFydEludGVybmFsKCkgZmluYWwgeyBzdGFydEltcGwoSXNSZXRyeTo6Tm8pOyB9CisgICAgdm9p
ZCBmaW5pc2goKSBmaW5hbCB7IG1fc2VydmljZS5kaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3Qo
KnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBJc1JldHJ5IHsgTm8sIFllcyB9
OworICAgIHZvaWQgc3RhcnRJbXBsKElzUmV0cnkpOworICAgIHZvaWQgYXR0ZW1wdFRvUmVjb3Zl
ckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFN0cmluZyYmKTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gbV92YXBpZFB1YmxpY0tleTsKK307CisKK1N1YnNjcmliZVJlcXVlc3Q6OlN1YnNjcmli
ZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1
YmxpY0tleSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRsZXIpCisgICAgOiBQdXNoU2Vydmlj
ZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJl
c3VsdEhhbmRsZXIpKQorICAgICwgbV92YXBpZFB1YmxpY0tleSh2YXBpZFB1YmxpY0tleSkKK3sK
K30KKworLy8gSW1wbGVtZW50cyB0aGUgd2VicHVzaGQgc2lkZSBvZiBQdXNoTWFuYWdlci5zdWJz
Y3JpYmUoKS4KK3ZvaWQgU3Vic2NyaWJlUmVxdWVzdDo6c3RhcnRJbXBsKElzUmV0cnkgaXNSZXRy
eSkKK3sKKyAgICBtX2RhdGFiYXNlLmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3Bl
KG1fYnVuZGxlSWRlbnRpZmllciwgbV9zY29wZSwgW3RoaXMsIGlzUmV0cnldKGF1dG8mJiByZXN1
bHQpIG11dGFibGUgeworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBpZiAobV92
YXBpZFB1YmxpY0tleSAhPSByZXN1bHQtPnNlcnZlclZBUElEUHVibGljS2V5KQorICAgICAgICAg
ICAgICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6SW52YWxpZFN0
YXRlRXJyb3IsICJQcm92aWRlZCBhcHBsaWNhdGlvblNlcnZlcktleSBkb2VzIG5vdCBtYXRjaCB0
aGUga2V5IGluIHRoZSBleGlzdGluZyBzdWJzY3JpcHRpb24uIl9zIH0pOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGZ1bGZpbGwobWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVj
b3JkKFdURk1vdmUoKnJlc3VsdCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gdG9waWMgPSBtYWtlUHVzaFRvcGljKG1fYnVuZGxlSWRlbnRpZmllciwg
bV9zY29wZSk7CisgICAgICAgIG1fY29ubmVjdGlvbi5zdWJzY3JpYmUodG9waWMsIG1fdmFwaWRQ
dWJsaWNLZXksIFt0aGlzLCBpc1JldHJ5LCB0b3BpY10oTlNTdHJpbmcgKmVuZHBvaW50LCBOU0Vy
cm9yICplcnJvcikgbXV0YWJsZSB7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogdXNlIHBvaW50ZXIgY29tcGFyaXNvbiBvbmNlIEFQU1VSTFRva2Vu
RXJyb3JEb21haW4gaXMgZXh0ZXJuZWQuCisgICAgICAgICAgICAgICAgaWYgKGlzUmV0cnkgPT0g
SXNSZXRyeTo6Tm8gJiYgW2Vycm9yLmRvbWFpbiBpc0VxdWFsVG9TdHJpbmc6QCJBUFNVUkxUb2tl
bkVycm9yRG9tYWluIl0gJiYgZXJyb3IuY29kZSA9PSBBUFNVUkxUb2tlbkVycm9yQ29kZVRvcGlj
QWxyZWFkeUluRmlsdGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRUb1JlY292ZXJG
cm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcihXVEZNb3ZlKHRvcGljKSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0xPRyhQdXNoLCAiUHVzaE1hbmFnZXIuc3Vic2NyaWJlKGJ1bmRsZUlEOiAle3B1Ymxp
Y31zLCBzY29wZTogJXtzZW5zaXRpdmV9cykgZmFpbGVkIHdpdGggZG9tYWluOiAle3B1YmxpY31z
IGNvZGU6ICVsbGQpIiwgbV9idW5kbGVJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCksIG1fc2NvcGUu
dXRmOCgpLmRhdGEoKSwgZXJyb3IuZG9tYWluLlVURjhTdHJpbmcsIHN0YXRpY19jYXN0PGludDY0
X3Q+KGVycm9yLmNvZGUpKTsKKyAgICAgICAgICAgICAgICByZWplY3QoV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YSB7IFdlYkNvcmU6OkFib3J0RXJyb3IsICJGYWlsZWQgZHVlIHRvIGludGVybmFsIHNl
cnZpY2UgZXJyb3IiX3MgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBhdXRvIGNsaWVudEtleXMgPSBtX3NlcnZpY2UuY29ubmVjdGlvbigp
LmdlbmVyYXRlQ2xpZW50S2V5cygpOworICAgICAgICAgICAgUHVzaFJlY29yZCByZWNvcmQ7Cisg
ICAgICAgICAgICByZWNvcmQuYnVuZGxlSUQgPSBtX2J1bmRsZUlkZW50aWZpZXI7CisgICAgICAg
ICAgICByZWNvcmQuc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0
cmluZyhtX3Njb3BlKS0+ZGF0YSgpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZWNvcmQuc2Nv
cGUgPSBtX3Njb3BlOworICAgICAgICAgICAgcmVjb3JkLmVuZHBvaW50ID0gZW5kcG9pbnQ7Cisg
ICAgICAgICAgICByZWNvcmQudG9waWMgPSBXVEZNb3ZlKHRvcGljKTsKKyAgICAgICAgICAgIHJl
Y29yZC5zZXJ2ZXJWQVBJRFB1YmxpY0tleSA9IG1fdmFwaWRQdWJsaWNLZXk7CisgICAgICAgICAg
ICByZWNvcmQuY2xpZW50UHVibGljS2V5ID0gV1RGTW92ZShjbGllbnRLZXlzLmNsaWVudFAyNTZE
SEtleVBhaXIucHVibGljS2V5KTsKKyAgICAgICAgICAgIHJlY29yZC5jbGllbnRQcml2YXRlS2V5
ID0gV1RGTW92ZShjbGllbnRLZXlzLmNsaWVudFAyNTZESEtleVBhaXIucHJpdmF0ZUtleSk7Cisg
ICAgICAgICAgICByZWNvcmQuc2hhcmVkQXV0aFNlY3JldCA9IFdURk1vdmUoY2xpZW50S2V5cy5z
aGFyZWRBdXRoU2VjcmV0KTsKKworICAgICAgICAgICAgbV9kYXRhYmFzZS5pbnNlcnRSZWNvcmQo
cmVjb3JkLCBbdGhpc10oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1
c2hNYW5hZ2VyLnN1YnNjcmliZShidW5kbGVJRDogJXtwdWJsaWN9cywgc2NvcGU6ICV7c2Vuc2l0
aXZlfXMpIGZhaWxlZCB3aXRoIGRhdGFiYXNlIGVycm9yIiwgbV9idW5kbGVJZGVudGlmaWVyLnV0
ZjgoKS5kYXRhKCksIG1fc2NvcGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJvciwgIkZh
aWxlZCBkdWUgdG8gaW50ZXJuYWwgZGF0YWJhc2UgZXJyb3IiX3MgfSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogc3VwcG9ydCBwYXJ0aWFsIHRvcGljIGxpc3QgdXBkYXRlcy4KKyAgICAgICAgICAgICAg
ICB1cGRhdGVUb3BpY0xpc3RzKG1fY29ubmVjdGlvbiwgbV9kYXRhYmFzZSwgW3RoaXMsIHJlY29y
ZCA9IFdURk1vdmUoKnJlc3VsdCldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGZ1
bGZpbGwobWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKFdURk1vdmUocmVjb3JkKSkpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCisvLyBUcmllcyB0byByZWNvdmVyIGZyb20gYSB0b3BpYyBiZWluZyBtb3ZlZCB0byB0
aGUgZ2xvYmFsIHBhdXNlZCBmaWx0ZXIgKHJkYXI6Ly84ODEzOTMzMCkuCit2b2lkIFN1YnNjcmli
ZVJlcXVlc3Q6OmF0dGVtcHRUb1JlY292ZXJGcm9tVG9waWNBbHJlYWR5SW5GaWx0ZXJFcnJvcihT
dHJpbmcmJiB0b3BpYykKK3sKKyAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbdGhpcywg
dG9waWMgPSBXVEZNb3ZlKHRvcGljKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgLy8gVGhpcyB0YWtl
cyBvd25lcnNoaXAgb2YgdGhlIHBhdXNlZCB0b3BpYyBhbmQgdGVsbHMgYXBzZCB0byBmb3JnZXQg
YWJvdXQgdGhlIHRvcGljLgorICAgICAgICBhdXRvIG9yaWdpbmFsVG9waWNzID0gbV9jb25uZWN0
aW9uLmlnbm9yZWRUb3BpY3MoKTsKKyAgICAgICAgYXV0byBhdWdtZW50ZWRUb3BpY3MgPSBvcmln
aW5hbFRvcGljczsKKyAgICAgICAgYXVnbWVudGVkVG9waWNzLmFwcGVuZCh0b3BpYyk7CisgICAg
ICAgIG1fY29ubmVjdGlvbi5zZXRJZ25vcmVkVG9waWNzKFdURk1vdmUoYXVnbWVudGVkVG9waWNz
KSk7CisgICAgICAgIG1fY29ubmVjdGlvbi5zZXRJZ25vcmVkVG9waWNzKFdURk1vdmUob3JpZ2lu
YWxUb3BpY3MpKTsKKworICAgICAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbdGhpc10o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0YXJ0SW1wbChJc1JldHJ5OjpZZXMpOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKworY2xhc3MgVW5zdWJzY3JpYmVSZXF1ZXN0IDogcHVibGljIFB1
c2hTZXJ2aWNlUmVxdWVzdEltcGw8Ym9vbD4geworcHVibGljOgorICAgIFVuc3Vic2NyaWJlUmVx
dWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIFJlc3VsdEhhbmRsZXIm
Jik7CisgICAgdmlydHVhbCB+VW5zdWJzY3JpYmVSZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90
ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIlVuc3Vic2NyaWJlUmVxdWVzdCJfczsgfQorICAgIHZvaWQgc3RhcnRJbnRlcm5hbCgpIGZp
bmFsOworICAgIHZvaWQgZmluaXNoKCkgZmluYWwgeyBtX3NlcnZpY2UuZGlkQ29tcGxldGVVbnN1
YnNjcmliZVJlcXVlc3QoKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgUHVzaFN1YnNjcmlwdGlv
bklkZW50aWZpZXIgbV9zdWJzY3JpcHRpb25JZGVudGlmaWVyOworfTsKKworVW5zdWJzY3JpYmVS
ZXF1ZXN0OjpVbnN1YnNjcmliZVJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0
cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1YnNjcmlw
dGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgUmVzdWx0SGFuZGxlciYmIHJl
c3VsdEhhbmRsZXIpCisgICAgOiBQdXNoU2VydmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRs
ZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQorICAgICwgbV9zdWJz
Y3JpcHRpb25JZGVudGlmaWVyKHN1YnNjcmlwdGlvbklkZW50aWZpZXIpCit7Cit9CisKKy8vIElt
cGxlbWVudHMgdGhlIHdlYnB1c2hkIHNpZGUgb2YgUHVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmli
ZS4KK3ZvaWQgVW5zdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEludGVybmFsKCkKK3sKKyAgICBtX2Rh
dGFiYXNlLmdldFJlY29yZEJ5QnVuZGxlSWRlbnRpZmllckFuZFNjb3BlKG1fYnVuZGxlSWRlbnRp
ZmllciwgbV9zY29wZSwgW3RoaXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBp
ZiAoIXJlc3VsdCB8fCBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXIgIT0gcmVzdWx0LT5pZGVudGlm
aWVyKSB7CisgICAgICAgICAgICBmdWxmaWxsKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gdG9waWMgPSBtYWtlUHVzaFRvcGljKG1fYnVuZGxl
SWRlbnRpZmllciwgbV9zY29wZSk7CisgICAgICAgIG1fY29ubmVjdGlvbi51bnN1YnNjcmliZSh0
b3BpYywgcmVzdWx0LT5zZXJ2ZXJWQVBJRFB1YmxpY0tleSwgW3RoaXNdKGJvb2wgdW5zdWJzY3Jp
YmVkLCBOU0Vycm9yICplcnJvcikgbXV0YWJsZSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgICAgICAgICAvLyBJZiB3ZSBmYWlsIHRvIHVuc3Vic2NyaWJlIGZyb20gYXBzZCwganVz
dCBkcm9wIGEgbG9nLiBXZSBzdGlsbCB3YW50IHRvIGNvbnRpbnVlIGFuZCByZW1vdmUgdGhlIHJl
Y29yZCBmcm9tIG91ciBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYSBzdGF0ZSBtaXNtYXRjaCBi
ZXR3ZWVuIG91ciBkYXRhYmFzZSBhbmQgYXBzZCdzIGRhdGFiYXNlLgorICAgICAgICAgICAgaWYg
KCF1bnN1YnNjcmliZWQpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1c2hT
dWJzY3JpcHRpb24udW5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAle3Nl
bnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkb21haW46ICV7cHVibGljfXMgY29kZTogJWxsZCkiLCBt
X2J1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgpLCBl
cnJvci5kb21haW4uVVRGOFN0cmluZyA/OiAibm9uZSIsIHN0YXRpY19jYXN0PGludDY0X3Q+KGVy
cm9yLmNvZGUpKTsKKyNlbHNlCisgICAgICAgICAgICBVTlVTRURfUEFSQU0odW5zdWJzY3JpYmVk
KTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShlcnJvcik7CisjZW5kaWYKKworICAgICAgICAg
ICAgbV9kYXRhYmFzZS5yZW1vdmVSZWNvcmRCeUlkZW50aWZpZXIobV9zdWJzY3JpcHRpb25JZGVu
dGlmaWVyLCBbdGhpc10oYm9vbCByZW1vdmVkKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXJlbW92ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmlsbChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogc3VwcG9ydCBwYXJ0aWFsIHRvcGljIGxpc3QgdXBkYXRlcy4KKyAgICAg
ICAgICAgICAgICB1cGRhdGVUb3BpY0xpc3RzKG1fY29ubmVjdGlvbiwgbV9kYXRhYmFzZSwgW3Ro
aXNdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwodHJ1ZSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CisKKy8vIE9ubHkgYWxsb3cgb25lIHJlcXVlc3QgcGVyIChidW5kbGVJZGVudGlmaWVyLCBzY29w
ZSkgdG8gcHJvY2VlZCBhdCBvbmNlLiBGb3IgaW5zdGFuY2UsIGlmIGEgZ2l2ZW4KKy8vIHBhZ2Ug
Y2FsbHMgUHVzaE1hbmFnZXIuc3Vic2NyaWJlKCkgdHdpY2UgaW4gYSByb3csIHRoZSBzZWNvbmQg
c3Vic2NyaWJlIGNhbGwgd29uJ3Qgc3RhcnQgdW50aWwKKy8vIHRoZSBmaXJzdCBvbmUgY29tcGxl
dGVzLgordm9pZCBQdXNoU2VydmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdChQdXNoU2Vy
dmljZVJlcXVlc3RNYXAmIG1hcCwgc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlUmVxdWVzdD4m
JiByZXF1ZXN0KQoreworICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3R1cGxlKHJlcXVlc3QtPmJ1
bmRsZUlkZW50aWZpZXIoKSwgcmVxdWVzdC0+c2NvcGUoKSk7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtYXAuZW5zdXJlKGtleSwgW10oKSB7CisgICAgICAgIHJldHVybiBEZXF1ZTxzdGQ6OnVuaXF1
ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0Pj4geyB9OworICAgIH0pOworCisgICAgYXV0byBhZGRl
ZFJlcXVlc3QgPSByZXF1ZXN0LmdldCgpOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKFdURk1vdmUocmVxdWVzdCkpOworCisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICBhZGRlZFJlcXVlc3QtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6
OmZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYgbWFwLCBQ
dXNoU2VydmljZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2Vf
dHVwbGUocmVxdWVzdC5idW5kbGVJZGVudGlmaWVyKCksIHJlcXVlc3Quc2NvcGUoKSk7CisgICAg
YXV0byByZXF1ZXN0UXVldWVJdCA9IG1hcC5maW5kKGtleSk7CisKKyAgICBSRUxFQVNFX0FTU0VS
VChyZXF1ZXN0UXVldWVJdCAhPSBtYXAuZW5kKCkpOworICAgIGF1dG8mIHJlcXVlc3RRdWV1ZSA9
IHJlcXVlc3RRdWV1ZUl0LT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXF1ZXN0UXVldWUu
c2l6ZSgpID4gMCk7CisgICAgYXV0byBjdXJyZW50UmVxdWVzdCA9IHJlcXVlc3RRdWV1ZS50YWtl
Rmlyc3QoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50UmVxdWVzdC5nZXQoKSA9PSAmcmVx
dWVzdCk7CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3QqIG5leHRSZXF1ZXN0ID0gbnVsbHB0cjsK
KyAgICBpZiAoIXJlcXVlc3RRdWV1ZS5zaXplKCkpCisgICAgICAgIG1hcC5yZW1vdmUocmVxdWVz
dFF1ZXVlSXQpOworICAgIGVsc2UKKyAgICAgICAgbmV4dFJlcXVlc3QgPSByZXF1ZXN0UXVldWUu
Zmlyc3QoKS5nZXQoKTsKKworICAgIC8vIEV2ZW4gaWYgdGhlcmUncyBubyBuZXh0IHJlcXVlc3Qg
dG8gc3RhcnQsIGhvbGQgb24gdG8gY3VycmVudFJlcXVlc3QgdW50aWwgdGhlIG5leHQgdHVybiBv
ZiB0aGUgcnVuIGxvb3Agc2luY2Ugd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBleGVjdXRpbmcgdGhl
IGZpbmlzaCgpIG1lbWJlciBmdW5jdGlvbiBvZiBjdXJyZW50UmVxdWVzdC4KKyAgICBXb3JrUXVl
dWU6Om1haW4oKS5kaXNwYXRjaChbY3VycmVudFJlcXVlc3QgPSBXVEZNb3ZlKGN1cnJlbnRSZXF1
ZXN0KSwgbmV4dFJlcXVlc3RdIHsKKyAgICAgICAgaWYgKG5leHRSZXF1ZXN0KQorICAgICAgICAg
ICAgbmV4dFJlcXVlc3QtPnN0YXJ0KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6
OmdldFN1YnNjcmlwdGlvbihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8c3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4sIFdlYkNvcmU6OkV4Y2VwdGlv
bkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2aWNl
UmVxdWVzdChtX2dldFN1YnNjcmlwdGlvblJlcXVlc3RzLCBtYWtlVW5pcXVlPEdldFN1YnNjcmlw
dGlvblJlcXVlc3Q+KCp0aGlzLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVHZXRT
dWJzY3JpcHRpb25SZXF1ZXN0KEdldFN1YnNjcmlwdGlvblJlcXVlc3QmIHJlcXVlc3QpCit7Cisg
ICAgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV9nZXRTdWJzY3JpcHRpb25SZXF1ZXN0cywg
cmVxdWVzdCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OnN1YnNjcmliZShjb25zdCBTdHJpbmcm
IGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgdmFwaWRQdWJsaWNLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0
ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVz
dChtX3N1YnNjcmliZVJlcXVlc3RzLCBtYWtlVW5pcXVlPFN1YnNjcmliZVJlcXVlc3Q+KCp0aGlz
LCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlU3Vic2Ny
aWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZpbmlzaGVkUHVz
aFNlcnZpY2VSZXF1ZXN0KG1fc3Vic2NyaWJlUmVxdWVzdHMsIHJlcXVlc3QpOworfQorCit2b2lk
IFB1c2hTZXJ2aWNlOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc2NvcGUsIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHN1YnNjcmlw
dGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9v
bCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1fdW5zdWJzY3JpYmVSZXF1ZXN0cywgbWFrZVVu
aXF1ZTxVbnN1YnNjcmliZVJlcXVlc3Q+KCp0aGlzLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSwg
c3Vic2NyaXB0aW9uSWRlbnRpZmllciwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKK30K
Kwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVVbnN1YnNjcmliZVJlcXVlc3QoVW5zdWJz
Y3JpYmVSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0
KG1fdW5zdWJzY3JpYmVSZXF1ZXN0cywgcmVxdWVzdCk7Cit9CisKK2VudW0gY2xhc3MgQ29udGVu
dEVuY29kaW5nIHsKKyAgICBFbXB0eSwKKyAgICBBRVNHQ00sCisgICAgQUVTMTI4R0NNCit9Owor
CitzdHJ1Y3QgUmF3UHVzaE1lc3NhZ2UgeworICAgIFN0cmluZyB0b3BpYzsKKyAgICBDb250ZW50
RW5jb2RpbmcgZW5jb2Rpbmc7CisKKyAgICAvLyBPbmx5IHNldCBpZiBlbmNvZGluZyBpcyBub3Qg
Q29udGVudEVuY29kaW5nOjpFbXB0eS4KKyAgICBWZWN0b3I8dWludDhfdD4gZW5jcnlwdGVkUGF5
bG9hZDsKKworICAgIC8vIE9ubHkgc2V0IGlmIGVuY29kaW5nIGlzIENvbnRlbnRFbmNvZGluZzo6
QUVTR0NNLgorICAgIFZlY3Rvcjx1aW50OF90PiBzZXJ2ZXJQdWJsaWNLZXk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHNhbHQ7CisKK307CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFJhd1B1c2hNZXNz
YWdlPiBtYWtlUmF3UHVzaE1lc3NhZ2UoTlNTdHJpbmcgKnRvcGljLCBOU0RpY3Rpb25hcnkqIHVz
ZXJJbmZvKQoreworICAgIFJhd1B1c2hNZXNzYWdlIG1lc3NhZ2U7CisKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgbWVzc2FnZS50b3BpYyA9IHRvcGljOworICAgICAgICBOU1N0cmlu
ZyAqY29udGVudEVuY29kaW5nID0gdXNlckluZm9bQCJjb250ZW50X2VuY29kaW5nIl07CisgICAg
ICAgIE5TU3RyaW5nICpwYXlsb2FkQmFzZTY0ID0gdXNlckluZm9bQCJwYXlsb2FkIl07CisKKyAg
ICAgICAgaWYgKCFjb250ZW50RW5jb2RpbmcubGVuZ3RoIHx8ICFwYXlsb2FkQmFzZTY0Lmxlbmd0
aCkgeworICAgICAgICAgICAgbWVzc2FnZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6RW1w
dHk7CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChbY29udGVudEVuY29kaW5nIGlzRXF1YWxUb1N0cmluZzpAImFlczEyOGdjbSJdKQorICAgICAg
ICAgICAgbWVzc2FnZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6QUVTMTI4R0NNOworICAg
ICAgICBlbHNlIGlmIChbY29udGVudEVuY29kaW5nIGlzRXF1YWxUb1N0cmluZzpAImFlc2djbSJd
KSB7CisgICAgICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVudEVuY29kaW5nOjpBRVNH
Q007CisKKyAgICAgICAgICAgIE5TU3RyaW5nICpzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwgPSB1
c2VySW5mb1tAImFzX3B1YmxpY2tleSJdOworICAgICAgICAgICAgTlNTdHJpbmcgKnNhbHRCYXNl
NjRVUkwgPSB1c2VySW5mb1tAImFzX3NhbHQiXTsKKyAgICAgICAgICAgIGlmICghc2VydmVyUHVi
bGljS2V5QmFzZTY0VVJMIHx8ICFzYWx0QmFzZTY0VVJMKSB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIGFlc2djbS1lbmNyeXB0ZWQgcHVzaCB3aXRob3V0IHJl
cXVpcmVkIHNlcnZlciBrZXkgYW5kIHNhbHQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHNlcnZlclB1Ymxp
Y0tleSA9IGJhc2U2NFVSTERlY29kZShzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwpOworICAgICAg
ICAgICAgYXV0byBzYWx0ID0gYmFzZTY0VVJMRGVjb2RlKHNhbHRCYXNlNjRVUkwpOworICAgICAg
ICAgICAgaWYgKCFzZXJ2ZXJQdWJsaWNLZXkgfHwgIXNhbHQpIHsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgYWVzZ2NtLWVuY3J5cHRlZCBwdXNoIHdpdGggaW1w
cm9wZXJseSBlbmNvZGVkIHNlcnZlciBrZXkgYW5kIHNhbHQiKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZXNzYWdl
LnNlcnZlclB1YmxpY0tleSA9IFdURk1vdmUoKnNlcnZlclB1YmxpY0tleSk7CisgICAgICAgICAg
ICBtZXNzYWdlLnNhbHQgPSBXVEZNb3ZlKCpzYWx0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBwdXNoIHdpdGggdW5rbm93biBjb250
ZW50IGVuY29kaW5nOiAle3B1YmxpY31zIiwgY29udGVudEVuY29kaW5nLlVURjhTdHJpbmcpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gcGF5bG9hZCA9IGJhc2U2NERlY29kZShwYXlsb2FkQmFzZTY0KTsKKyAgICAgICAgaWYgKCFw
YXlsb2FkKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgcHVzaCB3
aXRoIGltcHJvcGVybHkgZW5jb2RlZCBwYXlsb2FkIik7CisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgICAgICB9CisgICAgICAgIG1lc3NhZ2UuZW5jcnlwdGVkUGF5bG9hZCA9
IFdURk1vdmUoKnBheWxvYWQpOworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlOworfQorCit2
b2lkIFB1c2hTZXJ2aWNlOjpkaWRSZWNlaXZlUHVzaE1lc3NhZ2UoTlNTdHJpbmcqIHRvcGljLCBO
U0RpY3Rpb25hcnkqIHVzZXJJbmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgYXV0byBtZXNzYWdlUmVzdWx0ID0gbWFrZVJhd1B1c2hNZXNz
YWdlKHRvcGljLCB1c2VySW5mbyk7CisgICAgaWYgKCFtZXNzYWdlUmVzdWx0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2RhdGFiYXNlLT5nZXRSZWNvcmRCeVRvcGljKHRvcGljLCBbdGhpcywg
bWVzc2FnZSA9IFdURk1vdmUoKm1lc3NhZ2VSZXN1bHQpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgcmVjb3JkUmVzdWx0KSBtdXRhYmxlIHsK
KyAgICAgICAgaWYgKCFyZWNvcmRSZXN1bHQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1
c2gsICJEcm9wcGluZyBpbmNvbWluZyBwdXNoIHNlbnQgdG8gdW5rbm93biB0b3BpYzogJXtzZW5z
aXRpdmV9cyIsIG1lc3NhZ2UudG9waWMudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGF1dG8gcmVjb3JkID0gV1RGTW92ZSgqcmVjb3JkUmVzdWx0KTsKKworICAgICAgICBpZiAobWVz
c2FnZS5lbmNvZGluZyA9PSBDb250ZW50RW5jb2Rpbmc6OkVtcHR5KSB7CisgICAgICAgICAgICBt
X2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKHJlY29yZC5idW5kbGVJRCwgV2ViS2l0OjpXZWJQ
dXNoTWVzc2FnZSB7IHsgfSwgVVJMKFVSTCgpLCByZWNvcmQuc2NvcGUpIH0pOworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIFB1c2hDcnlwdG86OkNsaWVudEtleXMgY2xpZW50S2V5cyB7CisgICAgICAgICAg
ICB7IFdURk1vdmUocmVjb3JkLmNsaWVudFB1YmxpY0tleSksIFdURk1vdmUocmVjb3JkLmNsaWVu
dFByaXZhdGVLZXkpIH0sCisgICAgICAgICAgICBXVEZNb3ZlKHJlY29yZC5zaGFyZWRBdXRoU2Vj
cmV0KQorICAgICAgICB9OworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+
PiBkZWNyeXB0ZWRQYXlsb2FkOworICAgICAgICBpZiAobWVzc2FnZS5lbmNvZGluZyA9PSBDb250
ZW50RW5jb2Rpbmc6OkFFUzEyOEdDTSkKKyAgICAgICAgICAgIGRlY3J5cHRlZFBheWxvYWQgPSBk
ZWNyeXB0QUVTMTI4R0NNUGF5bG9hZChjbGllbnRLZXlzLCBtZXNzYWdlLmVuY3J5cHRlZFBheWxv
YWQpOworICAgICAgICBlbHNlIGlmIChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRFbmNvZGlu
Zzo6QUVTR0NNKQorICAgICAgICAgICAgZGVjcnlwdGVkUGF5bG9hZCA9IGRlY3J5cHRBRVNHQ01Q
YXlsb2FkKGNsaWVudEtleXMsIG1lc3NhZ2Uuc2VydmVyUHVibGljS2V5LCBtZXNzYWdlLnNhbHQs
IG1lc3NhZ2UuZW5jcnlwdGVkUGF5bG9hZCk7CisKKyAgICAgICAgaWYgKCFkZWNyeXB0ZWRQYXls
b2FkKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgaW5jb21pbmcg
cHVzaCBkdWUgdG8gZGVjcnlwdGlvbiBlcnJvciBmb3IgdG9waWMgJXtzZW5zaXRpdmV9cyIsIG1l
c3NhZ2UudG9waWMudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9pbmNvbWlu
Z1B1c2hNZXNzYWdlSGFuZGxlcihyZWNvcmQuYnVuZGxlSUQsIFdlYktpdDo6V2ViUHVzaE1lc3Nh
Z2UgeyBXVEZNb3ZlKCpkZWNyeXB0ZWRQYXlsb2FkKSwgVVJMKFVSTCgpLCByZWNvcmQuc2NvcGUp
IH0pOworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYlB1c2hECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaAppbmRleCAyYzE0MTQ0YzYxYmIzZWZhZTRlZDMyOGUxNTIwZDNlY2YwODMx
N2VmLi4xOTgxNDNmNTY5N2NkMjhjNjkyOGQ0NTY4YzIxYzMyNTQ5MjBkMjBmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hNZXNzYWdlQ3J5
cHRvLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC00Nyw2ICs0OCw4IEBAIHB1
YmxpYzoKICAgICBQdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAgICAgdmlydHVh
bCB+UHVzaFNlcnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwogCisgICAgdmlydHVhbCBXZWJD
b3JlOjpQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIGdlbmVyYXRlQ2xpZW50S2V5cygpOworCiAgICAg
dXNpbmcgU3Vic2NyaWJlSGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoTlNTdHJpbmcg
KiwgTlNFcnJvciAqKT47CiAgICAgdmlydHVhbCB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJpbmcm
IHRvcGljLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBTdWJzY3JpYmVI
YW5kbGVyJiYpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNo
U2VydmljZUNvbm5lY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNl
Q29ubmVjdGlvbi5tbQppbmRleCA1MzQzMzI1ZWI1ZWEyMDNlOGRmNmZmODMwM2NiOWIwZmZjODEz
MjFiLi45MmY4MTQyNzdhODM4MTUzMTY4OGIwZTQ4NTE4MmQ0M2Q4NWNjODY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQpAQCAtMjgsOCAr
MjgsMTUgQEAKIAogI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5oPgogCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKwogbmFtZXNwYWNlIFdlYlB1c2hEIHsKIAorUHVzaENyeXB0bzo6Q2xpZW50S2V5
cyBQdXNoU2VydmljZUNvbm5lY3Rpb246OmdlbmVyYXRlQ2xpZW50S2V5cygpCit7CisgICAgcmV0
dXJuIFB1c2hDcnlwdG86OkNsaWVudEtleXM6OmdlbmVyYXRlKCk7Cit9CisKIHZvaWQgUHVzaFNl
cnZpY2VDb25uZWN0aW9uOjpzdGFydExpc3RlbmluZ0ZvclB1c2hNZXNzYWdlcyhJbmNvbWluZ1B1
c2hNZXNzYWdlSGFuZGxlciYmIGhhbmRsZXIpCiB7CiAgICAgbV9pbmNvbWluZ1B1c2hNZXNzYWdl
SGFuZGxlciA9IFdURk1vdmUoaGFuZGxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1dlYlB1c2hEYWVtb24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERh
ZW1vbi5oCmluZGV4IGFmMzE4NTdkYjg3MzdhOWI2NDM5NWZiMDAwNDc1MGE5NThlNTQ4ZDAuLjAy
ODA4NGU1MmI0YTBkYmIzYzE0OWJlNmM5NzM2Zjc1NzVlNzg3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvV2ViUHVzaERhZW1vbi5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJQdXNo
Q2xpZW50Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlB1c2hNZXNzYWdlRm9yVGVzdGluZy5oIgor
I2luY2x1ZGUgIlB1c2hTZXJ2aWNlLmgiCiAjaW5jbHVkZSAiV2ViUHVzaERhZW1vbkNvbm5lY3Rp
b25Db25maWd1cmF0aW9uLmgiCiAjaW5jbHVkZSAiV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIgog
I2luY2x1ZGUgIldlYlB1c2hNZXNzYWdlLmgiCkBAIC02MSw2ICs2MiwxMCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjb25uZWN0aW9uQWRkZWQoeHBjX2Nvbm5lY3Rpb25fdCk7CiAgICAgdm9pZCBjb25u
ZWN0aW9uUmVtb3ZlZCh4cGNfY29ubmVjdGlvbl90KTsKIAorICAgIHZvaWQgc3RhcnRNb2NrUHVz
aFNlcnZpY2UoKTsKKyAgICB2b2lkIHN0YXJ0UHVzaFNlcnZpY2UoY29uc3QgU3RyaW5nJiBpbmNv
bWluZ1B1c2hTZXJ2aWNlTmFtZSwgY29uc3QgU3RyaW5nJiBwdXNoRGF0YWJhc2VQYXRoKTsKKyAg
ICB2b2lkIGhhbmRsZUluY29taW5nUHVzaChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJik7CisKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzCiAg
ICAgdm9pZCBlY2hvVHdpY2UoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFN0cmluZyYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgcmVwbHlTZW5kZXIpOwogICAgIHZv
aWQgcmVxdWVzdFN5c3RlbU5vdGlmaWNhdGlvblBlcm1pc3Npb24oQ2xpZW50Q29ubmVjdGlvbios
IGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgcmVwbHlTZW5k
ZXIpOwpAQCAtNjksNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZWJ1Z01vZGVJc0Vu
YWJsZWQoQ2xpZW50Q29ubmVjdGlvbiosIGJvb2wpOwogICAgIHZvaWQgdXBkYXRlQ29ubmVjdGlv
bkNvbmZpZ3VyYXRpb24oQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFdlYlB1c2hEYWVtb25Db25u
ZWN0aW9uQ29uZmlndXJhdGlvbiYpOwogICAgIHZvaWQgaW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0
aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBQdXNoTWVzc2FnZUZvclRlc3RpbmcmLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGluamVjdEVuY3J5cHRlZFB1
c2hNZXNzYWdlRm9yVGVzdGluZyhDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBnZXRQZW5kaW5nUHVzaE1l
c3NhZ2VzKENsaWVudENvbm5lY3Rpb24qLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZl
Y3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiYpPiYmIHJlcGx5U2VuZGVyKTsKICAgICB2b2lk
IHN1YnNjcmliZVRvUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFVSTCYgc2Nv
cGVVUkwsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXBwbGljYXRpb25TZXJ2ZXJLZXksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlv
bkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpOwogICAgIHZv
aWQgdW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFVS
TCYgc2NvcGVVUkwsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGE+Jik+JiYgcmVwbHlTZW5kZXIpOwpAQCAtODgsOSArOTQsMTcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgbm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJc0F2YWlsYWJsZShjb25zdCBTdHJpbmcmIGNs
aWVudENvZGVTaWduaW5nSWRlbnRpZmllcik7CiAKKyAgICB2b2lkIHNldFB1c2hTZXJ2aWNlKHN0
ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik7CisgICAgdm9pZCBydW5BZnRlclN0YXJ0aW5n
UHVzaFNlcnZpY2UoRnVuY3Rpb248dm9pZCgpPiYmKTsKKwogICAgIENsaWVudENvbm5lY3Rpb24q
IHRvQ2xpZW50Q29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90KTsKICAgICBIYXNoTWFwPHhwY19j
b25uZWN0aW9uX3QsIFJlZjxDbGllbnRDb25uZWN0aW9uPj4gbV9jb25uZWN0aW9uTWFwOwogCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiBtX3B1c2hTZXJ2aWNlOworICAgIGJvb2wg
bV9wdXNoU2VydmljZVN0YXJ0ZWQgeyBmYWxzZSB9OworICAgIERlcXVlPEZ1bmN0aW9uPHZvaWQo
KT4+IG1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVuY3Rpb25zOworCisgICAgSGFzaE1hcDxTdHJpbmcs
IFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPj4gbV9wdXNoTWVzc2FnZXM7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIERlcXVlPFB1c2hNZXNzYWdlRm9yVGVzdGluZz4+IG1fdGVzdGluZ1B1c2hN
ZXNzYWdlczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQppbmRl
eCBhOGZlNDlmNTJkNzYzMjY2MzFjYWM3ZDc2NmMwOTE0OTVlOWNlNTVlLi5hZGQ2ZTNkOGFkZmVh
ODk5ODg4ZjRiYWY2MWFjYzA1MzEzNjNkY2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0IDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KICNpbXBvcnQgPHd0Zi9TcGFuLmg+CiAjaW1wb3J0IDx3dGYvVVJMLmg+CisjaW1wb3J0
IDx3dGYvV29ya1F1ZXVlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ6OldlYlB1c2hEOwog
CkBAIC05MSw2ICs5MiwxMSBAQCBBUkdVTUVOVFMoUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKQogUkVQ
TFkoYm9vbCkKIEVORAogCitGVU5DVElPTihpbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRl
c3RpbmcpCitBUkdVTUVOVFMoU3RyaW5nKQorUkVQTFkoYm9vbCkKK0VORAorCiBGVU5DVElPTihz
dWJzY3JpYmVUb1B1c2hTZXJ2aWNlKQogQVJHVU1FTlRTKFVSTCwgVmVjdG9yPHVpbnQ4X3Q+KQog
UkVQTFkoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNv
cmU6OkV4Y2VwdGlvbkRhdGE+JikKQEAgLTE1MSw2ICsxNTcsMTMgQEAgV2ViUHVzaEQ6OkVuY29k
ZWRNZXNzYWdlIGluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZzo6ZW5jb2RlUmVwbHkoYm9vbCBy
ZXBseSkKICAgICByZXR1cm4gZW5jb2Rlci50YWtlQnVmZmVyKCk7CiB9CiAKK1dlYlB1c2hEOjpF
bmNvZGVkTWVzc2FnZSBpbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6OmVuY29k
ZVJlcGx5KGJvb2wgcmVwbHkpCit7CisgICAgV2ViS2l0OjpEYWVtb246OkVuY29kZXIgZW5jb2Rl
cjsKKyAgICBlbmNvZGVyIDw8IHJlcGx5OworICAgIHJldHVybiBlbmNvZGVyLnRha2VCdWZmZXIo
KTsKK30KKwogV2ViUHVzaEQ6OkVuY29kZWRNZXNzYWdlIGdldFBlbmRpbmdQdXNoTWVzc2FnZXM6
OmVuY29kZVJlcGx5KGNvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiYgcmVwbHkp
CiB7CiAgICAgV2ViS2l0OjpEYWVtb246OkVuY29kZXIgZW5jb2RlcjsKQEAgLTIyNCw2ICsyMzcs
NTEgQEAgRGFlbW9uJiBEYWVtb246OnNpbmdsZXRvbigpCiAgICAgcmV0dXJuIGRhZW1vbjsKIH0K
IAordm9pZCBEYWVtb246OnN0YXJ0TW9ja1B1c2hTZXJ2aWNlKCkKK3sKKyAgICBhdXRvIG1lc3Nh
Z2VIYW5kbGVyID0gW3RoaXNdKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0
OjpXZWJQdXNoTWVzc2FnZSYmIG1lc3NhZ2UpIHsKKyAgICAgICAgaGFuZGxlSW5jb21pbmdQdXNo
KGJ1bmRsZUlkZW50aWZpZXIsIFdURk1vdmUobWVzc2FnZSkpOworICAgIH07CisgICAgUHVzaFNl
cnZpY2U6OmNyZWF0ZU1vY2tTZXJ2aWNlKFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBbdGhpc10o
YXV0byYmIHB1c2hTZXJ2aWNlKSBtdXRhYmxlIHsKKyAgICAgICAgc2V0UHVzaFNlcnZpY2UoV1RG
TW92ZShwdXNoU2VydmljZSkpOworICAgIH0pOworfQorCit2b2lkIERhZW1vbjo6c3RhcnRQdXNo
U2VydmljZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlUGF0aCkKK3sKKyAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gW3RoaXNdKGNv
bnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYmIG1l
c3NhZ2UpIHsKKyAgICAgICAgaGFuZGxlSW5jb21pbmdQdXNoKGJ1bmRsZUlkZW50aWZpZXIsIFdU
Rk1vdmUobWVzc2FnZSkpOworICAgIH07CisgICAgUHVzaFNlcnZpY2U6OmNyZWF0ZShpbmNvbWlu
Z1B1c2hTZXJ2aWNlTmFtZSwgZGF0YWJhc2VQYXRoLCBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwg
W3RoaXNdKGF1dG8mJiBwdXNoU2VydmljZSkgbXV0YWJsZSB7CisgICAgICAgIHNldFB1c2hTZXJ2
aWNlKFdURk1vdmUocHVzaFNlcnZpY2UpKTsKKyAgICB9KTsKK30KKwordm9pZCBEYWVtb246OnNl
dFB1c2hTZXJ2aWNlKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJiBwdXNoU2VydmljZSkK
K3sKKyAgICBtX3B1c2hTZXJ2aWNlID0gV1RGTW92ZShwdXNoU2VydmljZSk7CisgICAgbV9wdXNo
U2VydmljZVN0YXJ0ZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3BlbmRpbmdQdXNoU2VydmljZUZ1
bmN0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdvcmtRdWV1ZTo6bWFpbigp
LmRpc3BhdGNoKFt0aGlzXSgpIHsKKyAgICAgICAgd2hpbGUgKG1fcGVuZGluZ1B1c2hTZXJ2aWNl
RnVuY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgYXV0byBmdW5jdGlvbiA9IG1fcGVuZGlu
Z1B1c2hTZXJ2aWNlRnVuY3Rpb25zLnRha2VGaXJzdCgpOworICAgICAgICAgICAgZnVuY3Rpb24o
KTsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIERhZW1vbjo6cnVuQWZ0ZXJTdGFydGlu
Z1B1c2hTZXJ2aWNlKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBpZiAoIW1f
cHVzaFNlcnZpY2VTdGFydGVkKSB7CisgICAgICAgIG1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVuY3Rp
b25zLmFwcGVuZChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgZnVuY3Rpb24oKTsKK30KKwogdm9pZCBEYWVtb246OmJyb2FkY2FzdERlYnVnTWVzc2FnZShK
U0M6Ok1lc3NhZ2VMZXZlbCBtZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsK
ICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdE9TT2JqZWN0KHhwY19kaWN0aW9uYXJ5X2NyZWF0
ZShudWxscHRyLCBudWxscHRyLCAwKSk7CkBAIC0zMjUsNiArMzgzLDkgQEAgdm9pZCBEYWVtb246
OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBNZXNz
YWdlVHlwZSBtZXMKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpJbmplY3RQdXNoTWVzc2FnZUZvclRl
c3Rpbmc6CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5m
bzo6aW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nPihjbGllbnRDb25uZWN0aW9uLCBlbmNvZGVk
TWVzc2FnZSwgV1RGTW92ZShyZXBseVNlbmRlcikpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6CisgICAg
ICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6aW5qZWN0RW5j
cnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nPihjbGllbnRDb25uZWN0aW9uLCBlbmNvZGVkTWVz
c2FnZSwgV1RGTW92ZShyZXBseVNlbmRlcikpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE1l
c3NhZ2VUeXBlOjpHZXRQZW5kaW5nUHVzaE1lc3NhZ2VzOgogICAgICAgICBoYW5kbGVXZWJQdXNo
RE1lc3NhZ2VXaXRoUmVwbHk8TWVzc2FnZUluZm86OmdldFBlbmRpbmdQdXNoTWVzc2FnZXM+KGNs
aWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtNDMxLDYgKzQ5Miw0NiBAQCB2b2lkIERhZW1vbjo6aW5qZWN0UHVz
aE1lc3NhZ2VGb3JUZXN0aW5nKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFB1
cwogICAgIHJlcGx5U2VuZGVyKHRydWUpOwogfQogCit2b2lkIERhZW1vbjo6aW5qZWN0RW5jcnlw
dGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiByZXBs
eVNlbmRlcikKK3sKKyAgICBpZiAoIWNvbm5lY3Rpb24tPmhvc3RBcHBIYXNQdXNoSW5qZWN0RW50
aXRsZW1lbnQoKSkgeworICAgICAgICBjb25uZWN0aW9uLT5icm9hZGNhc3REZWJ1Z01lc3NhZ2Uo
IkF0dGVtcHRpbmcgdG8gaW5qZWN0IGEgcHVzaCBtZXNzYWdlIGZyb20gYW4gdW5lbnRpdGxlZCBw
cm9jZXNzIik7CisgICAgICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShbdGhpcywgbWVzc2FnZSA9
IG1lc3NhZ2UsIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNlbmRlcildKCkgbXV0YWJsZSB7
CisgICAgICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIo
ZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBi
eXRlcyA9IG1lc3NhZ2UudXRmOCgpOworICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhID0g
YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpieXRlcy5kYXRhKCkgbGVuZ3Ro
OiBieXRlcy5sZW5ndGgoKV0pOworCisgICAgICAgIGlkIG9iaiA9IFtOU0pTT05TZXJpYWxpemF0
aW9uIEpTT05PYmplY3RXaXRoRGF0YTpkYXRhLmdldCgpIG9wdGlvbnM6MCBlcnJvcjpudWxscHRy
XTsKKyAgICAgICAgaWYgKCFvYmogfHwgIVtvYmogaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5
IGNsYXNzXV0pIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBOU0xvZyhAImdvdCBvYmo6ICVAIiwgb2JqKTsK
KworICAgICAgICBtX3B1c2hTZXJ2aWNlLT5kaWRSZWNlaXZlUHVzaE1lc3NhZ2Uob2JqW0AidG9w
aWMiXSwgb2JqW0AidXNlckluZm8iXSwgW3JlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNlbmRl
cildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICByZXBseVNlbmRlcih0cnVlKTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpoYW5kbGVJbmNvbWluZ1B1c2goY29uc3Qg
U3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2Fn
ZSkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcHVzaE1lc3NhZ2VzLmVuc3VyZShidW5kbGVJ
ZGVudGlmaWVyLCBbXSB7CisgICAgICAgIHJldHVybiBWZWN0b3I8V2ViS2l0OjpXZWJQdXNoTWVz
c2FnZT4geyB9OworICAgIH0pOworICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KFdURk1vdmUobWVzc2FnZSkpOworCisgICAgbm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJc0F2YWls
YWJsZShidW5kbGVJZGVudGlmaWVyKTsKK30KKwogdm9pZCBEYWVtb246Om5vdGlmeUNsaWVudFB1
c2hNZXNzYWdlSXNBdmFpbGFibGUoY29uc3QgU3RyaW5nJiBjbGllbnRDb2RlU2lnbmluZ0lkZW50
aWZpZXIpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDYyLDYgKzU2Myw5IEBAIHZvaWQgRGFl
bW9uOjpnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24s
IENvbXBsZXRpb25IYW5kCiAKICAgICBWZWN0b3I8V2ViS2l0OjpXZWJQdXNoTWVzc2FnZT4gcmVz
dWx0TWVzc2FnZXM7CiAKKyAgICBpZiAoYXV0byBpdGVyYXRvciA9IG1fcHVzaE1lc3NhZ2VzLmZp
bmQoaG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcik7IGl0ZXJhdG9yICE9IG1fcHVzaE1lc3Nh
Z2VzLmVuZCgpKQorICAgICAgICBzdGQ6OnN3YXAocmVzdWx0TWVzc2FnZXMsIGl0ZXJhdG9yLT52
YWx1ZSk7CisKICAgICBhdXRvIGl0ZXJhdG9yID0gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzLmZpbmQo
aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcik7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fdGVz
dGluZ1B1c2hNZXNzYWdlcy5lbmQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIG1lc3NhZ2UgOiBp
dGVyYXRvci0+dmFsdWUpIHsKQEAgLTQ3NiwyNSArNTgwLDUwIEBAIHZvaWQgRGFlbW9uOjpnZXRQ
ZW5kaW5nUHVzaE1lc3NhZ2VzKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvbXBsZXRp
b25IYW5kCiAgICAgcmVwbHlTZW5kZXIoV1RGTW92ZShyZXN1bHRNZXNzYWdlcykpOwogfQogCi12
b2lkIERhZW1vbjo6c3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGFwcGxp
Y2F0aW9uU2VydmVyS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdl
YkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYm
IHJlcGx5U2VuZGVyKQordm9pZCBEYWVtb246OnN1YnNjcmliZVRvUHVzaFNlcnZpY2UoQ2xpZW50
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBF
eHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9u
RGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKLSAgICBVTlVTRURfUEFSQU0oYXBwbGljYXRpb25T
ZXJ2ZXJLZXkpOwotICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2Vw
dGlvbkRhdGEgeyBXZWJDb3JlOjpOb3RBbGxvd2VkRXJyb3IsICJMYWNrIHBlcm1pc3Npb24iX3Mg
fSkpOworICAgIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShbdGhpcywgYnVuZGxlSWRlbnRp
ZmllciA9IGNvbm5lY3Rpb24tPmhvc3RBcHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgc2NvcGUg
PSBzY29wZVVSTC5zdHJpbmcoKSwgdmFwaWRQdWJsaWNLZXksIHJlcGx5U2VuZGVyID0gV1RGTW92
ZShyZXBseVNlbmRlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9wdXNoU2VydmljZSkg
eworICAgICAgICAgICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0
aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVycm9yLCAiUHVzaCBzZXJ2aWNlIGluaXRp
YWxpemF0aW9uIGZhaWxlZCJfcyB9KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX3B1c2hTZXJ2aWNlLT5zdWJzY3JpYmUoYnVuZGxlSWRlbnRpZmllciwgc2Nv
cGUsIHZhcGlkUHVibGljS2V5LCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgfSk7CiB9CiAK
LXZvaWQgRGFlbW9uOjp1bnN1YnNjcmliZUZyb21QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9u
KiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBXZWJDb3JlOjpQdXNoU3Vic2NyaXB0
aW9uSWRlbnRpZmllciBwdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYm
IHJlcGx5U2VuZGVyKQordm9pZCBEYWVtb246OnVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlKENs
aWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIFdlYkNvcmU6
OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9u
RGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKLSAgICByZXBseVNlbmRlcihmYWxzZSk7CisgICAg
cnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29u
bmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJM
LnN0cmluZygpLCBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCByZXBseVNlbmRlciA9IFdURk1vdmUo
cmVwbHlTZW5kZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1fcHVzaFNlcnZpY2UpIHsK
KyAgICAgICAgICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2VwdGlv
bkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2VydmljZSBpbml0aWFs
aXphdGlvbiBmYWlsZWQiX3MgfSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgbV9wdXNoU2VydmljZS0+dW5zdWJzY3JpYmUoYnVuZGxlSWRlbnRpZmllciwgc2Nv
cGUsIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBEYWVtb246OmdldFB1c2hTdWJzY3JpcHRpb24oQ2xpZW50Q29ubmVjdGlv
biogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25E
YXRhPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKLSAgICBy
ZXBseVNlbmRlcihzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiB7
IH0pOworICAgIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShbdGhpcywgYnVuZGxlSWRlbnRp
ZmllciA9IGNvbm5lY3Rpb24tPmhvc3RBcHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgc2NvcGUg
PSBzY29wZVVSTC5zdHJpbmcoKSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICBy
ZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29y
ZTo6SW52YWxpZFN0YXRlRXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVk
Il9zIH0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcHVz
aFNlcnZpY2UtPmdldFN1YnNjcmlwdGlvbihidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgV1RGTW92
ZShyZXBseVNlbmRlcikpOworICAgIH0pOwogfQogCiB2b2lkIERhZW1vbjo6Z2V0UHVzaFBlcm1p
c3Npb25TdGF0ZShDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3Bl
VVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHVpbnQ4X3QsIFdlYkNv
cmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCiB7CisgICAgLy8gRklYTUUKKyNp
ZiBIQVZFKEFQUExFX1BVU0hfU0VSVklDRV9VUkxfVE9LRU5fU1VQUE9SVCkKKyAgICByZXBseVNl
bmRlcihzdGF0aWNfY2FzdDx1aW50OF90PihXZWJDb3JlOjpQdXNoUGVybWlzc2lvblN0YXRlOjpH
cmFudGVkKSk7CisjZWxzZQogICAgIHJlcGx5U2VuZGVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdl
YkNvcmU6OlB1c2hQZXJtaXNzaW9uU3RhdGU6OkRlbmllZCkpOworI2VuZGlmCiB9CiAKIENsaWVu
dENvbm5lY3Rpb24qIERhZW1vbjo6dG9DbGllbnRDb25uZWN0aW9uKHhwY19jb25uZWN0aW9uX3Qg
Y29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERh
ZW1vbk1haW4uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaApp
bmRleCBiYmViOTY4ZGU3YTc1OWRkZjI3NmZjMWJhNjdkMjhiNjY2YTQ4NjQwLi5kM2MxN2U2NWRh
M2FlYzUyNDRhYjkxNjEzYmFjM2NmNmU5ZWFhMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9XZWJQdXNoRGFlbW9uTWFpbi5oCkBAIC0yNyw2ICsyNyw2IEBACiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCi1pbnQgV2ViUHVzaERhZW1vbk1haW4oaW50LCBjb25zdCBjaGFyKiopOworaW50IFdl
YlB1c2hEYWVtb25NYWluKGludCwgY2hhcioqKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbQppbmRleCAyYTY4ZTE4
ZmEyMDE1MDY2MjBkMWMzODE3NDQxMWViMGFhMmJkYzU5Li44OTI4ZDhmYzk0MGZhZWY4MWE4MzRl
MzA5NDVjMzU2MDczMjdhYWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dl
YlB1c2hEYWVtb25NYWluLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERh
ZW1vbk1haW4ubW0KQEAgLTMwLDI0ICszMCwyMSBAQAogI2ltcG9ydCAiRGFlbW9uRGVjb2Rlci5o
IgogI2ltcG9ydCAiRGFlbW9uRW5jb2Rlci5oIgogI2ltcG9ydCAiRGFlbW9uVXRpbGl0aWVzLmgi
CisjaW1wb3J0ICJMb2dJbml0aWFsaXphdGlvbi5oIgogI2ltcG9ydCAiV2ViUHVzaERhZW1vbi5o
IgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xv
Z0luaXRpYWxpemF0aW9uLmg+CisjaW1wb3J0IDxnZXRvcHQuaD4KKyNpbXBvcnQgPHd0Zi9Mb2dJ
bml0aWFsaXphdGlvbi5oPgogI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KICNpbXBvcnQgPHd0
Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgogCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNp
bXBvcnQgPHNlcnZlcnMvYm9vdHN0cmFwLmg+Ci0jZWxzZQotI2ltcG9ydCA8bWFjaC9zdGRfdHlw
ZXMuaD4KLWV4dGVybiAiQyIgewotZXh0ZXJuIGtlcm5fcmV0dXJuX3QgYm9vdHN0cmFwX2NoZWNr
X2luKG1hY2hfcG9ydF90IGJvb3RzdHJhcFBvcnQsIGNvbnN0IGNoYXIgKnNlcnZpY2VOYW1lLCBt
YWNoX3BvcnRfdCopOwotfQotI2VuZGlmCi0KIHVzaW5nIFdlYktpdDo6RGFlbW9uOjpFbmNvZGVk
TWVzc2FnZTsKIHVzaW5nIFdlYlB1c2hEOjpEYWVtb247CiAKLXN0YXRpYyBjb25zdCBjaGFyICpp
bmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSA9ICJjb20uYXBwbGUuYXBzLndlYmtpdC53ZWJwdXNoZC5p
bmNvbWluZy1wdXNoIjsKK3N0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgZW50aXRsZW1lbnROYW1l
ID0gImNvbS5hcHBsZS5wcml2YXRlLndlYmtpdC53ZWJwdXNoIl9zOworc3RhdGljIGNvbnN0IEFT
Q0lJTGl0ZXJhbCBkZWZhdWx0TWFjaFNlcnZpY2VOYW1lID0gImNvbS5hcHBsZS53ZWJraXQud2Vi
cHVzaGQuc2VydmljZSJfczsKK3N0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgZGVmYXVsdEluY29t
aW5nUHVzaFNlcnZpY2VOYW1lID0gImNvbS5hcHBsZS5hcHMud2Via2l0LndlYnB1c2hkLmluY29t
aW5nLXB1c2giX3M7CiAKIG5hbWVzcGFjZSBXZWJQdXNoRCB7CiAKQEAgLTc0LDIzICs3MSw1NSBA
QCB1c2luZyBXZWJQdXNoRDo6Y29ubmVjdGlvblJlbW92ZWQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1pbnQgV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KQor
aW50IFdlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKLSAgICBpZiAo
YXJnYyAhPSAzIHx8IHN0cmNtcChhcmd2WzFdLCAiLS1tYWNoU2VydmljZU5hbWUiKSkgewotICAg
ICAgICBOU0xvZyhAInVzYWdlOiB3ZWJwdXNoZCAtLW1hY2hTZXJ2aWNlTmFtZSA8bmFtZT4iKTsK
LSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiBtYWNoU2VydmljZU5h
bWUgPSBhcmd2WzJdOwotCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIFdlYktpdDo6
c3RhcnRMaXN0ZW5pbmdGb3JNYWNoU2VydmljZUNvbm5lY3Rpb25zKG1hY2hTZXJ2aWNlTmFtZSwg
ImNvbS5hcHBsZS5wcml2YXRlLndlYmtpdC53ZWJwdXNoIiwgY29ubmVjdGlvbkFkZGVkLCBjb25u
ZWN0aW9uUmVtb3ZlZCwgY29ubmVjdGlvbkV2ZW50SGFuZGxlcik7Ci0KLSAgICAgICAgLy8gVE9E
TzogcmVtb3ZlIHRoaXMgb25jZSB3ZSBhY3R1YWxseSBzdGFydCB1c2luZyBBUFNDb25uZWN0aW9u
LgotICAgICAgICBtYWNoX3BvcnRfdCBpbmNvbWluZ01lc3NhZ2VQb3J0OwotICAgICAgICBpZiAo
Ym9vdHN0cmFwX2NoZWNrX2luKGJvb3RzdHJhcF9wb3J0LCBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFt
ZSwgJmluY29taW5nTWVzc2FnZVBvcnQpICE9IEtFUk5fU1VDQ0VTUykKLSAgICAgICAgICAgIE5T
TG9nKEAiQ291bGRuJ3QgcmVnaXN0ZXIgZm9yIGluY29taW5nIHB1c2ggbGF1bmNoIHBvcnQuIik7
Ci0gICAgICAgIAogICAgICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CisKKyNpZiAh
TE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICBXVEY6OmxvZ0No
YW5uZWxzKCkuaW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgV2Vi
Q29yZTo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOwor
ICAgICAgICBXZWJLaXQ6OmxvZ0NoYW5uZWxzKCkuaW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNl
c3NhcnkoKTsKKyNlbmRpZiAvLyAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorCisgICAgICAgIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKyAgICAgICAg
ICAgIHsgIm1hY2hTZXJ2aWNlTmFtZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbScgfSwKKyAg
ICAgICAgICAgIHsgImluY29taW5nUHVzaFNlcnZpY2VOYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQs
IDAsICdwJyB9LAorICAgICAgICAgICAgeyAidXNlTW9ja1B1c2hTZXJ2aWNlIiwgbm9fYXJndW1l
bnQsIDAsICdmJyB9CisgICAgICAgIH07CisKKyAgICAgICAgY29uc3QgY2hhciogbWFjaFNlcnZp
Y2VOYW1lID0gZGVmYXVsdE1hY2hTZXJ2aWNlTmFtZTsKKyAgICAgICAgY29uc3QgY2hhciogaW5j
b21pbmdQdXNoU2VydmljZU5hbWUgPSBkZWZhdWx0SW5jb21pbmdQdXNoU2VydmljZU5hbWU7Cisg
ICAgICAgIGJvb2wgdXNlTW9ja1B1c2hTZXJ2aWNlID0gZmFsc2U7CisKKyAgICAgICAgaW50IGM7
CisgICAgICAgIGludCBvcHRpb25JbmRleDsKKyAgICAgICAgd2hpbGUgKChjID0gZ2V0b3B0X2xv
bmcoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMsICZvcHRpb25JbmRleCkpICE9IC0xKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAgICAg
ICAgIG1hY2hTZXJ2aWNlTmFtZSA9IG9wdGFyZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgJ3AnOgorICAgICAgICAgICAgICAgIGluY29taW5nUHVzaFNlcnZpY2VO
YW1lID0gb3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAn
Zic6CisgICAgICAgICAgICAgICAgdXNlTW9ja1B1c2hTZXJ2aWNlID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJWNcbiIsIG9wdG9wdCk7CisgICAgICAgICAg
ICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFdlYktp
dDo6c3RhcnRMaXN0ZW5pbmdGb3JNYWNoU2VydmljZUNvbm5lY3Rpb25zKG1hY2hTZXJ2aWNlTmFt
ZSwgZW50aXRsZW1lbnROYW1lLCBjb25uZWN0aW9uQWRkZWQsIGNvbm5lY3Rpb25SZW1vdmVkLCBj
b25uZWN0aW9uRXZlbnRIYW5kbGVyKTsKKworICAgICAgICBpZiAodXNlTW9ja1B1c2hTZXJ2aWNl
KQorICAgICAgICAgICAgOjpXZWJQdXNoRDo6RGFlbW9uOjpzaW5nbGV0b24oKS5zdGFydE1vY2tQ
dXNoU2VydmljZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBsaWJyYXJ5
UGF0aCA9IE5TU2VhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKE5TTGlicmFyeURpcmVj
dG9yeSwgTlNVc2VyRG9tYWluTWFzaywgWUVTKVswXTsKKyAgICAgICAgICAgIFN0cmluZyBwdXNo
RGF0YWJhc2VQYXRoID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhsaWJy
YXJ5UGF0aCwgeyAiV2ViS2l0IiwgIldlYlB1c2giLCAiUHVzaERhdGFiYXNlLmRiIiB9KTsKKyAg
ICAgICAgICAgIDo6V2ViUHVzaEQ6OkRhZW1vbjo6c2luZ2xldG9uKCkuc3RhcnRQdXNoU2Vydmlj
ZShpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgcHVzaERhdGFiYXNlUGF0aCk7CisgICAgICAgIH0K
ICAgICB9CiAgICAgQ0ZSdW5Mb29wUnVuKCk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9jb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5w
bGlzdAppbmRleCBmNzFlNTlhNDA3ZjNlM2E4OTA4MDBhZTNmNDFlMDg1NWU1MGE3YjJhLi5iMjVh
YmZmNWE4ZTRiZGI4ZjE5MmI5ZjA1ZTU4NDczOTVkMzQxNTRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0CisrKyBi
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxp
c3QKQEAgLTE5LDcgKzE5LDcgQEAKIAk8c3RyaW5nPkFkYXB0aXZlPC9zdHJpbmc+CiAJPGtleT5Q
cm9ncmFtQXJndW1lbnRzPC9rZXk+CiAJPGFycmF5PgotCQk8c3RyaW5nPi9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvRGFlbW9ucy93ZWJwdXNoZDwvc3RyaW5nPgor
CQk8c3RyaW5nPi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9EYWVtb25zL3dlYnB1c2hkPC9zdHJpbmc+CiAJCTxzdHJpbmc+LS1tYWNoU2Vydmlj
ZU5hbWU8L3N0cmluZz4KIAkJPHN0cmluZz5jb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnNlcnZp
Y2U8L3N0cmluZz4KIAk8L2FycmF5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC93ZWJwdXNoZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL3dlYnB1c2hkLmNwcAppbmRl
eCBmZDA0ZTQwNDU4NTk4ZWM4NzM5YWMwZjNlOWE4YjhmM2ZiY2ExZWI4Li41OWNlZjBkOTg0MzA1
NTY1YWVhZDE4YzIxMjJhZDNkZmZlMTU5NjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL3dlYnB1c2hkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL3dlYnB1c2hk
LmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS01haW4uaD4KICNpbmNs
dWRlIDxvcy9hdmFpbGFiaWxpdHkuaD4KIAotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIq
KiBhcmd2KQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewogICAgIFdLV2ViUHVz
aERhZW1vbk1haW4oYXJnYywgYXJndik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTYxMThlNzcxNDNkYmY4NjQzMDkyMTM3ZTE3YTk5M2Nm
YmI3MDM4NC4uMTJlNzkyNGY3ZGQ1MjAxYjkwNjczODYzYWNlYzJjOWE4ZjNjMmIzYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1
IEBACisyMDIyLTAxLTI4ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBQdXNoU2VydmljZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1ODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgIC0gTW9kaWZlZCB0aGUgZXhpc3RpbmcgaW5qZWN0ZWQgcHVzaCB0ZXN0IHRvIGluamVj
dCBkaWZmZXJlbnQgdHlwZXMgb2YgcmVhbCBwdXNoIG9iamVjdHMKKyAgICAgICAgICAgZnJvbSBB
UFMgKGFuIGVtcHR5IHB1c2gsIGFuIGFlc2djbS1lbmNyeXB0ZWQgcHVzaCwgYW5kIGFuIGFlczEy
OGdjbS1lbmNyeXB0ZWQgcHVzaCkuCisgICAgICAgICAtIEFkZCBhIGZldyBiYXNpYyB0ZXN0IGNh
c2VzIGZvciBzdWJzY3JpYmluZyBhbmQgdW5zdWJzY3JpYmluZyBmcm9tIHB1c2guCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW06Cisg
ICAgICAgICgtW05vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5k
bGVyOl0pOgorICAgICAgICAoLVtOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciB1c2Vy
Q29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjp0ZXN0V2ViUHVzaERhZW1vblBMaXN0KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OmNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OnNlbmRNZXNzYWdlVG9EYWVtb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2VuZE1lc3Nh
Z2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZW5k
Q29uZmlndXJhdGlvbldpdGhBdWRpdFRva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZnVuY3Rpb24pOiBEZWxldGVkLgorCiAyMDIy
LTAyLTA0ICBBcmNhZHkgR29sZG1pbnRzLU9ybG92ICA8YWdvbGRtaW50c0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04ocjI4MDA3Nyk6IFtHVEtdIEl0IGNhdXNlZCAxNTUgbmV3IHRl
c3QgZmFpbHVyZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV2ViUHVzaERhZW1vbi5tbQppbmRleCA2ZDkyY2U5Nzg2YWY4MWM3ODRiMTI0NDQxOWU2
ZGU2MjgwM2NlODIwLi5iN2IzNGI2Y2FhNTQ3YmUzMmEzNzYyOGNjZjFhY2RlZWM2ZjVkNjU5IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hE
YWVtb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQ
dXNoRGFlbW9uLm1tCkBAIC0zNSwxMyArMzUsMTggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZl
cmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVy
aW1lbnRhbEZlYXR1cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8bWFjaC9tYWNoX2luaXQuaD4KICNpbXBvcnQgPG1hY2gv
dGFzay5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNl
NjQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogCit1c2luZyBXZWJL
aXQ6OldlYlB1c2hEOjpNZXNzYWdlVHlwZTsKKwogc3RhdGljIGJvb2wgYWxlcnRSZWNlaXZlZCA9
IGZhbHNlOwogQGludGVyZmFjZSBOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdhdGUgOiBOU09i
amVjdDxXS1VJRGVsZWdhdGVQcml2YXRlPgogQGVuZApAQCAtNjEsNiArNjYsMjYgQEAgLSAodm9p
ZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0
aE1lc3NhZ2U6KE5TU3RyaW4KIAogQGVuZAogCitAaW50ZXJmYWNlIE5vdGlmaWNhdGlvblNjcmlw
dE1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3Q8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4geworICAg
IEJsb2NrUHRyPHZvaWQoaWQpPiBfbWVzc2FnZUhhbmRsZXI7Cit9CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlcgorCistICh2b2lkKXNldE1l
c3NhZ2VIYW5kbGVyOih2b2lkICheKShpZCkpaGFuZGxlcgoreworICAgIF9tZXNzYWdlSGFuZGxl
ciA9IGhhbmRsZXI7Cit9CisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJD
b250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0
TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIGlmIChfbWVzc2FnZUhh
bmRsZXIpCisgICAgICAgIF9tZXNzYWdlSGFuZGxlcihtZXNzYWdlLmJvZHkpOworfQorCitAZW5k
CisKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIFJldGFpblB0cjxOU1VSTD4g
dGVzdFdlYlB1c2hEYWVtb25Mb2NhdGlvbigpCkBAIC03OSw3ICsxMDQsOCBAQCBzdGF0aWMgTlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqdGVzdFdlYlB1c2hEYWVtb25QTGlzdChOU1VSTCAq
c3RvcmFnZUxvY2F0aQogICAgICAgICBAIlByb2dyYW1Bcmd1bWVudHMiIDogQFsKICAgICAgICAg
ICAgIHRlc3RXZWJQdXNoRGFlbW9uTG9jYXRpb24oKS5nZXQoKS5wYXRoLAogICAgICAgICAgICAg
QCItLW1hY2hTZXJ2aWNlTmFtZSIsCi0gICAgICAgICAgICBAIm9yZy53ZWJraXQud2VicHVzaHRl
c3RkYWVtb24uc2VydmljZSIKKyAgICAgICAgICAgIEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRh
ZW1vbi5zZXJ2aWNlIiwKKyAgICAgICAgICAgIEAiLS11c2VNb2NrUHVzaFNlcnZpY2UiCiAgICAg
ICAgIF0KICAgICB9OwogfQpAQCAtMTM1LDI0ICsxNjEsMjQgQEAgc3RhdGljIHZvaWQgY2xlYW5V
cFRlc3RXZWJQdXNoRChOU1VSTCAqdGVtcERpcikKICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiB9
CiAKLXN0YXRpYyBSZXRhaW5QdHI8eHBjX29iamVjdF90PiBjcmVhdGVNZXNzYWdlRGljdGlvbmFy
eSh1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCitz
dGF0aWMgUmV0YWluUHRyPHhwY19vYmplY3RfdD4gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkoTWVz
c2FnZVR5cGUgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKIHsK
ICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdE5TKHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShudWxs
cHRyLCBudWxscHRyLCAwKSk7CiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3VpbnQ2NChkaWN0aW9u
YXJ5LmdldCgpLCAicHJvdG9jb2wgdmVyc2lvbiIsIDEpOwotICAgIHhwY19kaWN0aW9uYXJ5X3Nl
dF91aW50NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlwZSIsIG1lc3NhZ2VUeXBlKTsK
KyAgICB4cGNfZGljdGlvbmFyeV9zZXRfdWludDY0KGRpY3Rpb25hcnkuZ2V0KCksICJtZXNzYWdl
IHR5cGUiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obWVzc2FnZVR5cGUpKTsKICAgICB4cGNfZGlj
dGlvbmFyeV9zZXRfZGF0YShkaWN0aW9uYXJ5LmdldCgpLCAiZW5jb2RlZCBtZXNzYWdlIiwgbWVz
c2FnZS5kYXRhKCksIG1lc3NhZ2Uuc2l6ZSgpKTsKICAgICByZXR1cm4gV1RGTW92ZShkaWN0aW9u
YXJ5KTsKIH0KIAogLy8gVXNlcyBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRvIHRoZSBkYWVtb24g
Zm9yIGEgb25lLW9mZiBtZXNzYWdlCi12b2lkIHNlbmRNZXNzYWdlVG9EYWVtb24oeHBjX2Nvbm5l
Y3Rpb25fdCBjb25uZWN0aW9uLCB1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIG1lc3NhZ2UpCit2b2lkIHNlbmRNZXNzYWdlVG9EYWVtb24oeHBjX2Nvbm5lY3Rpb25f
dCBjb25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZU1lc3NhZ2VEaWN0
aW9uYXJ5KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsKICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21l
c3NhZ2UoY29ubmVjdGlvbiwgZGljdGlvbmFyeS5nZXQoKSk7CiB9CiAKIC8vIFVzZXMgYW4gZXhp
c3RpbmcgY29ubmVjdGlvbiB0byB0aGUgZGFlbW9uIGZvciBhIG9uZS1vZmYgbWVzc2FnZSwgd2Fp
dGluZyBmb3IgdGhlIHJlcGx5Ci12b2lkIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVw
bHkoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCB1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25z
dCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCit2b2lkIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0
aW5nRm9yUmVwbHkoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNz
YWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGlj
dGlvbmFyeSA9IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsK
IApAQCAtMTgxLDcgKzIwNyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRDb25maWd1cmF0aW9uV2l0aEF1
ZGl0VG9rZW4oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQogICAgICAgICBlbmNvZGVkTWVz
c2FnZVsxXSA9IDE7CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzJdID0gMzI7CiAgICAgICAgIG1l
bWNweSgmZW5jb2RlZE1lc3NhZ2VbMTBdLCAmdG9rZW4sIHNpemVvZih0b2tlbikpOwotICAgICAg
ICBzZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24sIDYsIGVuY29kZWRNZXNzYWdlKTsKKyAg
ICAgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbihjb25uZWN0aW9uLCBNZXNzYWdlVHlwZTo6VXBkYXRl
Q29ubmVjdGlvbkNvbmZpZ3VyYXRpb24sIGVuY29kZWRNZXNzYWdlKTsKICAgICB9CiB9CiAKQEAg
LTI1Miw3ICsyNzgsNyBAQCBURVNUKFdlYlB1c2hELCBCYXNpY0NvbW11bmljYXRpb24pCiAgICAg
ICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxw
dHIsIG51bGxwdHIsIDApKTsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRNZXNzYWdl
KDEpOwogICAgICAgICBlbmNvZGVkTWVzc2FnZVswXSA9IDE7Ci0gICAgICAgIHNlbmRNZXNzYWdl
VG9EYWVtb24oY29ubmVjdGlvbi5nZXQoKSwgNSwgZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBz
ZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24uZ2V0KCksIE1lc3NhZ2VUeXBlOjpTZXREZWJ1
Z01vZGVJc0VuYWJsZWQsIGVuY29kZWRNZXNzYWdlKTsKICAgICAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZkb25lKTsKICAgICB9CiAKQEAgLTM2MSw1NCArMzg3LDYgQEAgVEVTVChXZWJQ
dXNoRCwgUGVybWlzc2lvbk1hbmFnZW1lbnQpCiAgICAgY2xlYW5VcFRlc3RXZWJQdXNoRCh0ZW1w
RGlyZWN0b3J5KTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIG1haW5TV0J5dGVzID0gUiJTV1JF
U09VUkNFKAotPHNjcmlwdD4KLWZ1bmN0aW9uIGxvZyhtc2cpCi17Ci0gICAgd2luZG93LndlYmtp
dC5tZXNzYWdlSGFuZGxlcnMuc3cucG9zdE1lc3NhZ2UobXNnKTsKLX0KLQotY29uc3QgY2hhbm5l
bCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwotY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSAoZXZl
bnQpID0+IGxvZyhldmVudC5kYXRhKTsKLQotbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0
ZXIoJy9zdy5qcycpLnRoZW4oKHJlZ2lzdHJhdGlvbikgPT4gewotICAgIGlmIChyZWdpc3RyYXRp
b24uYWN0aXZlKSB7Ci0gICAgICAgIHJlZ2lzdHJhdGlvbi5hY3RpdmUucG9zdE1lc3NhZ2Uoe3Bv
cnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5wb3J0Ml0pOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIHdvcmtlciA9IHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nOwotICAgIHdvcmtlci5h
ZGRFdmVudExpc3RlbmVyKCdzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAo
d29ya2VyLnN0YXRlID09ICdhY3RpdmF0ZWQnKQotICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNz
YWdlKHtwb3J0OiBjaGFubmVsLnBvcnQyfSwgW2NoYW5uZWwucG9ydDJdKTsKLSAgICB9KTsKLX0p
LmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgbG9nKCJSZWdpc3RyYXRpb24gZmFpbGVkIHdp
dGg6ICIgKyBlcnJvcik7Ci19KTsKLTwvc2NyaXB0PgotKVNXUkVTT1VSQ0UiOwotCi1zdGF0aWMg
Y29uc3QgY2hhciogc2NyaXB0Qnl0ZXMgPSBSIlNXUkVTT1VSQ0UoCi1sZXQgcG9ydDsKLXNlbGYu
YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChldmVudCkgPT4gewotICAgIHBvcnQgPSBldmVu
dC5kYXRhLnBvcnQ7Ci0gICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVhZHkiKTsKLX0pOwotc2VsZi5h
ZGRFdmVudExpc3RlbmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7Ci0gICAgdHJ5IHsKLSAgICAgICAg
aWYgKCFldmVudC5kYXRhKSB7Ci0gICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZl
ZDogbnVsbCBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Y29uc3QgdmFsdWUgPSBldmVudC5kYXRhLnRleHQoKTsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2Fn
ZSgiUmVjZWl2ZWQ6ICIgKyB2YWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSAnU3dlZXQgUG90
YXRvZXMnKQotICAgICAgICAgICAgZXZlbnQud2FpdFVudGlsKFByb21pc2UucmVqZWN0KCdJIHdh
bnQgc3dlZXQgcG90YXRvZXMnKSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBwb3J0LnBv
c3RNZXNzYWdlKCJHb3QgZXhjZXB0aW9uICIgKyBlKTsKLSAgICB9Ci19KTsKLSlTV1JFU09VUkNF
IjsKLQogc3RhdGljIHZvaWQgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFTdG9y
ZSAqc3RvcmUpCiB7CiAgICAgX19ibG9jayBib29sIGNsZWFyZWRTdG9yZSA9IGZhbHNlOwpAQCAt
NDE4LDc2ICszOTYsMzE1IEBAIHN0YXRpYyB2b2lkIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShXS1dl
YnNpdGVEYXRhU3RvcmUgKnN0b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2xl
YXJlZFN0b3JlKTsKIH0KIAotVEVTVChXZWJQdXNoRCwgSGFuZGxlSW5qZWN0ZWRQdXNoKQotewot
ICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2FsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3Jp
Z2luc107CitjbGFzcyBXZWJQdXNoRFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3By
b3RlY3RlZDoKKyAgICBXZWJQdXNoRFRlc3QoKQorICAgIHsKKyAgICAgICAgW1dLV2Vic2l0ZURh
dGFTdG9yZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zXTsKIAotICAgIE5T
VVJMICp0ZW1wRGlyZWN0b3J5ID0gc2V0VXBUZXN0V2ViUHVzaEQoKTsKKyAgICAgICAgbV90ZW1w
RGlyZWN0b3J5ID0gcmV0YWluUHRyKHNldFVwVGVzdFdlYlB1c2hEKCkpOwogCi0gICAgYXV0byBk
YXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24gbmV3XSk7Ci0gICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNo
TWFjaFNlcnZpY2VOYW1lID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2Ui
OwotICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaERhZW1vblVzZXNNb2Nr
QnVuZGxlc0ZvclRlc3RpbmcgPSBZRVM7Ci0gICAgYXV0byBkYXRhU3RvcmUgPSBhZG9wdE5TKFtb
V0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAgICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0
aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7Cisg
ICAgICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaE1hY2hTZXJ2aWNlTmFt
ZSA9IEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIjsKKyAgICAgICAgZGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoRGFlbW9uVXNlc01vY2tCdW5kbGVzRm9y
VGVzdGluZyA9IFlFUzsKKyAgICAgICAgbV9kYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRl
RGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKIAotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlID0gZGF0YVN0b3JlLmdldCgpOwotICAgIGNsZWFyV2Vic2l0ZURh
dGFTdG9yZShbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSk7CisgICAgICAgIG1fY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CisgICAgICAgIG1fY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gbV9k
YXRhU3RvcmUuZ2V0KCk7CisgICAgICAgIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShbbV9jb25maWd1
cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnBy
ZWZlcmVuY2VzIF9zZXROb3RpZmljYXRpb25zRW5hYmxlZDpZRVNdOwotICAgIGZvciAoX1dLRXhw
ZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFs
RmVhdHVyZXNdKSB7Ci0gICAgICAgIGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAi
QnVpbHRJbk5vdGlmaWNhdGlvbnNFbmFibGVkIl0pCi0gICAgICAgICAgICBbW2NvbmZpZ3VyYXRp
b24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JGZWF0dXJlOmZlYXR1cmVdOworICAg
ICAgICBbbV9jb25maWd1cmF0aW9uLmdldCgpLnByZWZlcmVuY2VzIF9zZXROb3RpZmljYXRpb25z
RW5hYmxlZDpZRVNdOworICAgICAgICBmb3IgKF9XS0V4cGVyaW1lbnRhbEZlYXR1cmUgKmZlYXR1
cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1lbnRhbEZlYXR1cmVzXSkgeworICAgICAgICAg
ICAgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9u
c0VuYWJsZWQiXSkKKyAgICAgICAgICAgICAgICBbW21fY29uZmlndXJhdGlvbiBwcmVmZXJlbmNl
c10gX3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgICAgICBlbHNl
IGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiUHVzaEFQSUVuYWJsZWQiXSkKKyAg
ICAgICAgICAgICAgICBbW21fY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6
WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgIH0KKworICAgICAgICBtX3Rlc3RNZXNz
YWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsK
KyAgICAgICAgW1ttX2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3Jp
cHRNZXNzYWdlSGFuZGxlcjptX3Rlc3RNZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdCJd
OworCisgICAgICAgIG1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbTm90
aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW1tt
X2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFu
ZGxlcjptX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJub3RlIl07CiAg
ICAgfQogCi0gICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0TWVzc2FnZUhh
bmRsZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1l
OkAic3ciXTsKLSAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFttZXNzYWdlSGFu
ZGxlciBhZGRNZXNzYWdlOkAiUmVhZHkiIHdpdGhIYW5kbGVyOl57Ci0gICAgICAgIGRvbmUgPSB0
cnVlOworICAgIHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgY2hhciogaHRtbFNvdXJjZSwgY29uc3Qg
Y2hhciogc2VydmljZVdvcmtlclNjcmlwdFNvdXJjZSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdGFudHMgPSBSIlNSQygKKyAgICAgICAgICAgIGNvbnN0IFZBTElEX1NF
UlZFUl9LRVkgPSAiQkExSHh6eWkxUlVNMWI1d2p4c243bkd4QXN6dzJ1NjFtMTY0aTNNckFJeEhG
NllLNWg0U0RZaWMtZFJ1VV9SQ1BDZkE1YXE5b2pTd2s1WTJFbUNsQlBzIjsKKyAgICAgICAgICAg
IGNvbnN0IFZBTElEX1NFUlZFUl9LRVlfVEhBVF9DQVVTRVNfSU5KRUNURURfRkFJTFVSRSA9ICJC
RUF4YVVNbzFzOHRqT1J4SmZuU1N2V2hZYjR1NTFrZzFoV1Qyc185Z3BWN1p4YXIxcEZfMkJROEFu
Y3VBZFMyQm9MaE40cWF4ekJ5MkN3SEU4QkJ6V2ciOworICAgICAgICApU1JDIjsKKyAgICAgICAg
bV9zZXJ2ZXIucmVzZXQobmV3IFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXIoeworICAgICAgICAg
ICAgeyAiLyIsIHsgaHRtbFNvdXJjZSB9IH0sCisgICAgICAgICAgICB7ICIvY29uc3RhbnRzLmpz
IiwgeyB7IHsgIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIGNv
bnN0YW50cyB9IH0sCisgICAgICAgICAgICB7ICIvc3cuanMiLCB7IHsgeyAiQ29udGVudC1UeXBl
IiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgc2VydmljZVdvcmtlclNjcmlwdFNvdXJj
ZSB9IH0KKyAgICAgICAgfSwgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0
dHApKTsKKworICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bV9j
b25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgICAgIFttX3dlYlZpZXcgbG9hZFJlcXVlc3Q6bV9z
ZXJ2ZXItPnJlcXVlc3QoKV07CisgICAgfQorCisgICAgfldlYlB1c2hEVGVzdCgpCisgICAgewor
ICAgICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAg
fQorCisgICAgUmV0YWluUHRyPE5TVVJMPiBtX3RlbXBEaXJlY3Rvcnk7CisgICAgUmV0YWluUHRy
PFdLV2Vic2l0ZURhdGFTdG9yZT4gbV9kYXRhU3RvcmU7CisgICAgUmV0YWluUHRyPFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24+IG1fY29uZmlndXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8VGVzdE1lc3Nh
Z2VIYW5kbGVyPiBtX3Rlc3RNZXNzYWdlSGFuZGxlcjsKKyAgICBSZXRhaW5QdHI8Tm90aWZpY2F0
aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXI+IG1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXI7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI+IG1fc2VydmVyOwor
ICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IG1fd2ViVmlldzsKK307CisKK2NsYXNzIFdlYlB1c2hE
SW5qZWN0ZWRQdXNoVGVzdCA6IHB1YmxpYyBXZWJQdXNoRFRlc3QgeworcHJvdGVjdGVkOgorICAg
IHZvaWQgcnVuVGVzdChOU1N0cmluZyAqZXhwZWN0ZWRNZXNzYWdlLCBOU0RpY3Rpb25hcnkgKnB1
c2hVc2VySW5mbyk7Cit9OworCit2b2lkIFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdDo6cnVuVGVz
dChOU1N0cmluZyAqZXhwZWN0ZWRNZXNzYWdlLCBOU0RpY3Rpb25hcnkgKnB1c2hVc2VySW5mbykK
K3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaHRtbFNvdXJjZSA9IFIiU1dSRVNPVVJDRSgKKyAg
ICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAg
ICBmdW5jdGlvbiBsb2cobXNnKQorICAgIHsKKyAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdl
SGFuZGxlcnMudGVzdC5wb3N0TWVzc2FnZShtc2cpOworICAgIH0KKworICAgIGNvbnN0IGNoYW5u
ZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKKyAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9
IChldmVudCkgPT4gbG9nKGV2ZW50LmRhdGEpOworCisgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3Jr
ZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCBy
ZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKKyAgICAg
ICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJz
Y3JpYmUoeworICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAg
YXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgfSk7CisgICAg
ICAgIHJlZ2lzdHJhdGlvbi5hY3RpdmUucG9zdE1lc3NhZ2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9
LCBbY2hhbm5lbC5wb3J0Ml0pOworICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAg
ICAgIGxvZygiUmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoOiAiICsgZXJyb3IpOworICAgIH0pOwor
ICAgIDwvc2NyaXB0PgorICAgIClTV1JFU09VUkNFIjsKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBzZXJ2aWNlV29ya2VyU291cmNlID0gUiJTV1JFU09VUkNFKAorICAgIGxldCBwb3J0OworICAg
IHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChldmVudCkgPT4geworICAgICAgICBw
b3J0ID0gZXZlbnQuZGF0YS5wb3J0OworICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWFkeSIp
OworICAgIH0pOworICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicHVzaCIsIChldmVudCkgPT4g
eworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKCFldmVudC5kYXRhKSB7CisgICAgICAg
ICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVjZWl2ZWQ6IG51bGwgZGF0YSIpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IHZhbHVl
ID0gZXZlbnQuZGF0YS50ZXh0KCk7CisgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNl
aXZlZDogIiArIHZhbHVlKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcG9y
dC5wb3N0TWVzc2FnZSgiRXJyb3I6ICIgKyBlKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIClT
V1JFU09VUkNFIjsKKworICAgIF9fYmxvY2sgYm9vbCByZWFkeSA9IGZhbHNlOworICAgIFttX3Rl
c3RNZXNzYWdlSGFuZGxlciBhZGRNZXNzYWdlOkAiUmVhZHkiIHdpdGhIYW5kbGVyOl57CisgICAg
ICAgIHJlYWR5ID0gdHJ1ZTsKICAgICB9XTsKLSAgICBbbWVzc2FnZUhhbmRsZXIgYWRkTWVzc2Fn
ZTpAIlJlY2VpdmVkOiBIZWxsbyBXb3JsZCIgd2l0aEhhbmRsZXI6XnsKLSAgICAgICAgZG9uZSA9
IHRydWU7CisKKyAgICBfX2Jsb2NrIGJvb2wgZ290RXhwZWN0ZWRNZXNzYWdlID0gZmFsc2U7Cisg
ICAgW21fdGVzdE1lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6ZXhwZWN0ZWRNZXNzYWdlIHdpdGhI
YW5kbGVyOl57CisgICAgICAgIGdvdEV4cGVjdGVkTWVzc2FnZSA9IHRydWU7CiAgICAgfV07CiAK
LSAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyIHNlcnZlcih7Ci0gICAgICAgIHsgIi8iLCB7
IG1haW5TV0J5dGVzIH0gfSwKLSAgICAgICAgeyAiL3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQtVHlw
ZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIHNjcmlwdEJ5dGVzIH0gfQotICAgIH0s
IFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwKTsKKyAgICBsb2FkUmVx
dWVzdChodG1sU291cmNlLCBzZXJ2aWNlV29ya2VyU291cmNlKTsKIAotICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWFkeSk7CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRv
bmUpOwotICAgIGRvbmUgPSBmYWxzZTsKKyAgICBTdHJpbmcgYnVuZGxlSWRlbnRpZmllciA9ICJj
b20uYXBwbGUuV2ViS2l0LlRlc3RXZWJLaXRBUEkiX3M7CisgICAgU3RyaW5nIHNjb3BlID0gbV9z
ZXJ2ZXItPnJlcXVlc3QoKS5VUkwuYWJzb2x1dGVTdHJpbmc7CisgICAgU3RyaW5nIHRvcGljID0g
YnVuZGxlSWRlbnRpZmllciArICIgIl9zICsgc2NvcGU7CiAKLSAgICAvLyBJbmplY3QgcHVzaCBt
ZXNzYWdlCi0gICAgYXV0byBlbmNvZGVkTWVzc2FnZSA9IGVuY29kZVN0cmluZygiY29tLmFwcGxl
LldlYktpdC5UZXN0V2ViS2l0QVBJIik7Ci0gICAgZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVjdG9y
KGVuY29kZVN0cmluZyhzZXJ2ZXIucmVxdWVzdCgpLlVSTC5hYnNvbHV0ZVN0cmluZykpOwotICAg
IGVuY29kZWRNZXNzYWdlLmFwcGVuZFZlY3RvcihlbmNvZGVTdHJpbmcoIkhlbGxvIFdvcmxkIikp
OworICAgIGlkIG9iaiA9IEB7CisgICAgICAgIEAidG9waWMiOiAoTlNTdHJpbmcgKil0b3BpYywK
KyAgICAgICAgQCJ1c2VySW5mbyI6IHB1c2hVc2VySW5mbworICAgIH07CisgICAgTlNEYXRhICpk
YXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0Om9iaiBvcHRpb25z
OjAgZXJyb3I6bnVsbHB0cl07CisKKyAgICBTdHJpbmcgbWVzc2FnZSB7IHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIgKj4oZGF0YS5ieXRlcyksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhLmxlbmd0
aCkgfTsKKyAgICBhdXRvIGVuY29kZWRNZXNzYWdlID0gZW5jb2RlU3RyaW5nKFdURk1vdmUobWVz
c2FnZSkpOwogCiAgICAgYXV0byB1dGlsaXR5Q29ubmVjdGlvbiA9IGNyZWF0ZUFuZENvbmZpZ3Vy
ZUNvbm5lY3Rpb25Ub1NlcnZpY2UoIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2Vydmlj
ZSIpOwotICAgIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkodXRpbGl0eUNvbm5l
Y3Rpb24uZ2V0KCksIDcsIGVuY29kZWRNZXNzYWdlKTsKKyAgICBzZW5kTWVzc2FnZVRvRGFlbW9u
V2FpdGluZ0ZvclJlcGx5KHV0aWxpdHlDb25uZWN0aW9uLmdldCgpLCBNZXNzYWdlVHlwZTo6SW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLCBlbmNvZGVkTWVzc2FnZSk7CiAKICAg
ICAvLyBGZXRjaCBwdXNoIG1lc3NhZ2VzCisgICAgX19ibG9jayBib29sIGdvdE1lc3NhZ2VzID0g
ZmFsc2U7CiAgICAgX19ibG9jayBSZXRhaW5QdHI8TlNBcnJheTxOU0RpY3Rpb25hcnkgKj4+IG1l
c3NhZ2VzOwotICAgIFtkYXRhU3RvcmUgX2dldFBlbmRpbmdQdXNoTWVzc2FnZXM6XihOU0FycmF5
PE5TRGljdGlvbmFyeSAqPiAqcmF3TWVzc2FnZXMpIHsKKyAgICBbbV9kYXRhU3RvcmUgX2dldFBl
bmRpbmdQdXNoTWVzc2FnZXM6XihOU0FycmF5PE5TRGljdGlvbmFyeSAqPiAqcmF3TWVzc2FnZXMp
IHsKICAgICAgICAgbWVzc2FnZXMgPSByYXdNZXNzYWdlczsKLSAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgICAgIGdvdE1lc3NhZ2VzID0gdHJ1ZTsKICAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmUpOwotICAgIGRvbmUgPSBmYWxzZTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmdvdE1lc3NhZ2VzKTsKIAogICAgIEVYUEVDVF9FUShbbWVzc2FnZXMgY291
bnRdLCAxdSk7CiAKICAgICAvLyBIYW5kbGUgcHVzaCBtZXNzYWdlCiAgICAgX19ibG9jayBib29s
IHB1c2hNZXNzYWdlUHJvY2Vzc2VkID0gZmFsc2U7Ci0gICAgW2RhdGFTdG9yZSBfcHJvY2Vzc1B1
c2hNZXNzYWdlOlttZXNzYWdlcyBmaXJzdE9iamVjdF0gY29tcGxldGlvbkhhbmRsZXI6Xihib29s
IHJlc3VsdCkgeworICAgIFttX2RhdGFTdG9yZSBfcHJvY2Vzc1B1c2hNZXNzYWdlOlttZXNzYWdl
cyBmaXJzdE9iamVjdF0gY29tcGxldGlvbkhhbmRsZXI6Xihib29sIHJlc3VsdCkgewogICAgICAg
ICBwdXNoTWVzc2FnZVByb2Nlc3NlZCA9IHRydWU7CiAgICAgfV07Ci0gICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdEV4
cGVjdGVkTWVzc2FnZSk7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZwdXNoTWVzc2Fn
ZVByb2Nlc3NlZCk7Cit9CiAKLSAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3Rvcnkp
OworVEVTVF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRFbXB0eVB1
c2gpCit7CisgICAgcnVuVGVzdChAIlJlY2VpdmVkOiBudWxsIGRhdGEiLCBAeyB9KTsKK30KKwor
VEVTVF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRBRVNHQ01QdXNo
KQoreworICAgIHJ1blRlc3QoQCJSZWNlaXZlZDogdGVzdCBhZXNnY20gcGF5bG9hZCIsIEB7Cisg
ICAgICAgIEAiY29udGVudF9lbmNvZGluZyI6IEAiYWVzZ2NtIiwKKyAgICAgICAgQCJhc19wdWJs
aWNrZXkiOiBAIkJDLUFnWU1ocW16YW1IN19BdW0wWXZJZDhGVjEtdW1nSHdlSk5lNlhRMUlNQW0z
RTI5bG9XWHFUUm5kaWJ4SDI3a0pLV2NJYnl5bXVuZE9ETWZWeF9VTSIsCisgICAgICAgIEAiYXNf
c2FsdCI6IEAidGtQVDV4RGVOMGxBa1NjNmxaVWtOZyIsCisgICAgICAgIEAicGF5bG9hZCI6IEAi
by91NHl2Y1hJMW5hcCt6eUlPQmJXWGRMcWoxcUhHMmNYK0tWaEFkQlFqMUdWQXQ3bFE9PSIKKyAg
ICB9KTsKK30KKworVEVTVF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0
ZWRBRVMxMjhHQ01QdXNoKQoreworICAgIC8vIEZyb20gZXhhbXBsZSBpbiBSRkM4MjkxIFNlY3Rp
b24gNS4KKyAgICBTdHJpbmcgcGF5bG9hZEJhc2U2NFVSTCA9ICJER3Y2cmExbmxZZ0RDUzFGUm5i
emx3QUFFQUJCQlA0ejlLc042bkdSVGJWWUlfYzdWSlNQUVRCdGtnY3kyN21sbWxNb1pJSWdEbGw2
ZTN2Q1lMb2NJbm1ZV0FtUzZUbHpBQzh3RXFLSzZQQnJ1M2psN0FfeWw5NWJRcHU2Y1ZQVHBLNE1x
Z2tmMUNYenRMVkJTdDJLczNvWndidXdYUFhMV3lvdUJXTFZXR05XUWV4U2dTeHNqX1F1bGN5NGEt
Zk4iX3M7CisgICAgU3RyaW5nIHBheWxvYWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhi
YXNlNjRVUkxEZWNvZGUocGF5bG9hZEJhc2U2NFVSTCkudmFsdWUoKSk7CisKKyAgICBydW5UZXN0
KEAiUmVjZWl2ZWQ6IFdoZW4gSSBncm93IHVwLCBJIHdhbnQgdG8gYmUgYSB3YXRlcm1lbG9uIiwg
QHsKKyAgICAgICAgQCJjb250ZW50X2VuY29kaW5nIjogQCJhZXMxMjhnY20iLAorICAgICAgICBA
InBheWxvYWQiOiAoTlNTdHJpbmcgKilwYXlsb2FkQmFzZTY0CisgICAgfSk7Cit9CisKK1RFU1Rf
RihXZWJQdXNoRFRlc3QsIFN1YnNjcmliZVRlc3QpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHNvdXJjZSA9IFIiSFRNTCgKKyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdD4KKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rlcign
L3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9
IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgcmVzdWx0
ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSBh
d2FpdCByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKKyAgICAgICAgICAgICAg
ICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TZXJ2
ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmVz
dWx0ID0gc3Vic2NyaXB0aW9uLnRvSlNPTigpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOworICAgICAgICB9CisgICAgICAgIHdpbmRv
dy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9
KTsKKyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxp
ZD4gb2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW21fbm90
aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7
CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOwor
CisgICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKKworICAgIEFTU0VSVF9UUlVFKFtvYmogaXNLaW5kT2ZDbGFzczpbTlNEaWN0
aW9uYXJ5IGNsYXNzXV0pOworCisgICAgTlNEaWN0aW9uYXJ5ICpzdWJzY3JpcHRpb24gPSBvYmou
Z2V0KCk7CisgICAgQVNTRVJUX1RSVUUoW3N1YnNjcmlwdGlvbltAImVuZHBvaW50Il0gaGFzUHJl
Zml4OkAiaHR0cHM6Ly8iXSk7CisgICAgQVNTRVJUX1RSVUUoW3N1YnNjcmlwdGlvbltAImtleXMi
XSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CisKKyAgICAvLyBTaGFyZWQg
YXV0aCBzZWNyZXQgc2hvdWxkIGJlIDE2IGJ5dGVzICgyMiBieXRlcyBpbiB1bnBhZGRlZCBiYXNl
NjR1cmwpLgorICAgIEFTU0VSVF9FUShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdW0AiYXV0aCJdIGxl
bmd0aF0sIDIydSk7CisKKyAgICAvLyBDbGllbnQgcHVibGljIGtleSBzaG91bGQgYmUgNjUgYnl0
ZXMgKDg3IGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2NHVybCkuCisgICAgQVNTRVJUX0VRKFtzdWJz
Y3JpcHRpb25bQCJrZXlzIl1bQCJwMjU2ZGgiXSBsZW5ndGhdLCA4N3UpOworfQorCitURVNUX0Yo
V2ViUHVzaERUZXN0LCBTdWJzY3JpYmVGYWlsdXJlVGVzdCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogc291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lz
dGVyKCcvc3cuanMnKS50aGVuKGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0
aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7CisgICAgICAgIGxldCBy
ZXN1bHQgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlv
biA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoeworICAgICAgICAg
ICAgICAgIHVzZXJWaXNpYmxlT25seTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlv
blNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWV9USEFUX0NBVVNFU19JTkpFQ1RFRF9GQUlMVVJF
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1YnNjcmlwdGlvbi50b0pT
T04oKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gIkVycm9y
OiAiICsgZTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVy
cy5ub3RlLnBvc3RNZXNzYWdlKHJlc3VsdCk7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAg
KUhUTUwiOworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG9iaiA9IG5pbDsKKyAgICBfX2Js
b2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFttX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVy
IHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQgbWVzc2FnZSkgeworICAgICAgICBvYmogPSBtZXNzYWdl
OworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KHNvdXJj
ZSwgIiIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAvLyBT
cGVjIHNheXMgdGhhdCBhbiBlcnJvciBpbiB0aGUgcHVzaCBzZXJ2aWNlIHNob3VsZCBiZSBhbiBB
Ym9ydEVycm9yLgorICAgIEFTU0VSVF9UUlVFKFtvYmogaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcg
Y2xhc3NdXSk7CisgICAgQVNTRVJUX1RSVUUoW29iaiBoYXNQcmVmaXg6QCJFcnJvcjogQWJvcnRF
cnJvciJdKTsKK30KKworVEVTVF9GKFdlYlB1c2hEVGVzdCwgVW5zdWJzY3JpYmVUZXN0KQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzb3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9
Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgbmF2aWdhdG9yLnNl
cnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAg
ICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFk
eTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNj
cmliZSh7CisgICAgICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAg
ICAgICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZCisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIGxldCByZXN1bHQxID0gYXdhaXQgc3Vic2NyaXB0aW9uLnVuc3Vi
c2NyaWJlKCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0MiA9IGF3YWl0IHN1YnNjcmlwdGlvbi51
bnN1YnNjcmliZSgpOworICAgICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdDEsIHJlc3VsdDJdOwor
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBl
OworICAgICAgICB9CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUu
cG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7
CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9v
bCBkb25lID0gZmFsc2U7CisgICAgW21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVz
c2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAg
ICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIC8vIEZpcnN0IHVu
c3Vic2NyaWJlIHNob3VsZCBzdWNjZWVkLiBTZWNvbmQgb25lIHNob3VsZCBmYWlsIHNpbmNlIHRo
ZSBmaXJzdCBvbmUgcmVtb3ZlZCB0aGUgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlLgorICAgIGlk
IGV4cGVjdGVkID0gQFtAKDEpLCBAKDApXTsKKyAgICBBU1NFUlRfVFJVRShbb2JqIGlzRXF1YWw6
ZXhwZWN0ZWRdKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451134</attachid>
            <date>2022-02-07 12:05:55 -0800</date>
            <delta_ts>2022-02-07 13:19:55 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235857-20220207120554.patch</filename>
            <type>text/plain</type>
            <size>93179</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ1ODM2MDVmNzY1ZTFhNDgyZTNjZTI1
OWZkYTA4MmNkNmYyY2M4ODIuLjFjYmViZTI4YjNmM2ViM2QwZmM0MzVlOGNhNmI0Njg1NjY3MjY1
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBC
cmFkeSBFaWRzb24uCisKKyAgICAgICAgQWRkIFB1c2hBUElFbmFibGVkIHRvIFdlYktpdExlZ2Fj
eSBzbyB3ZSBjYW4gZW5hYmxlIGl0IG9uIGluIEFQSSB0ZXN0cyB2aWEgX1dLRXhwZXJpbWVudGFs
RmVhdHVyZS4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNF
eHBlcmltZW50YWwueWFtbDoKKwogMjAyMi0wMi0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CiAKICAgICAgICAgR3JhZGllbnRzIGRvbid0IGNvcnJlY3RseSBpbnRlcnBvbGF0ZSBt
aXNzaW5nL25vbmUgY29sb3IgY29tcG9uZW50cyBjb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMTFlNzcw
MDlmZTI2YTFhYTI5ZWYxNDljODEzODE5NDgwNzBlYWY2Zi4uZTcyMGUwZDhiMDFkMTk3NGMxNmZl
YTRlMzdiNzY1MDU5YTAyMjhmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMjItMDEt
MjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcK
KworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCisKKyAgICAgICAgVGhpcyBhZGRz
IFB1c2hTZXJ2aWNlIHRvIHdlYnB1c2hkLiBJdCBoYW5kbGVzIHJlcXVlc3RzIHRvIGNyZWF0ZSwg
cmVtb3ZlLCBhbmQgZ2V0IHB1c2gKKyAgICAgICAgc3Vic2NyaXB0aW9ucy4gSXQgYWxzbyBkZWNy
eXB0cyBpbmNvbWluZyBwdXNoZXMgYW5kIHBhc3MgdGhlbSBiYWNrIHRvIHRoZSBVSSBwcm9jZXNz
IHZpYSB0aGUKKyAgICAgICAgZXhpc3RpbmcgbWFjaGluZXJ5IGluIFdlYlB1c2hEYWVtb24uCisK
KyAgICAgICAgUHVzaFNlcnZpY2UgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRoIHR3byBvYmplY3Rz
OgorCisgICAgICAgIDEuIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjogdGhpcyBjcmVhdGVzIGFuZCBy
ZW1vdmVzIHB1c2ggc3Vic2NyaXB0aW9ucyBmcm9tIHRoZSBwdXNoIHNlcnZlci4KKyAgICAgICAg
ICAgSXQgYWxzbyByZWNlaXZlcyBpbmNvbWluZyBwdXNoZXMgZnJvbSB0aGUgcHVzaCBzZXJ2ZXIu
CisgICAgICAgIDIuIFB1c2hEYXRhYmFzZTogdGhpcyBwZXJzaXN0cyBwdXNoIHN1YnNjcmlwdGlv
bnMgdG8gZGlzay4KKworICAgICAgICBTZXZlcmFsIHRoaW5ncyBhcmUgbm90IHlldCBpbXBsZW1l
bnRlZDsgZm9yIGluc3RhbmNlLCB3ZSBjdXJyZW50bHkgYWx3YXlzIGdyYW50IGEgcGFnZSB0aGUK
KyAgICAgICAgcGVybWlzc2lvbiB0byByZWNlaXZlIHB1c2hlcy4gVGhpcyB3aWxsIGJlIGZpeGVk
IGluIGZ1dHVyZSBwYXRjaGVzLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4g
VGhlIGN1cnJlbnQgdGVzdHMgdXNlIGEgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbiB0aGF0IHZl
bmRzCisgICAgICAgIHN1YnNjcmlwdGlvbiB3aXRoIGZpeGVkIGRhdGEsIGJ1dCB0aGlzIGNhbiBi
ZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9X
S01haW4uaDoKKyAgICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbToKKyAgICAgICAg
KFdLV2ViUHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XZWJQdXNoTWVz
c2FnZUNvY29hLm1tOiBhZGQgYWJpbGl0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIGVtcHR5
IHZzLiBudWxsIHBheWxvYWQuCisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdlOjpmcm9t
RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdlOjp0b0RpY3Rpb25h
cnkgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlB1c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAg
ICAqIFNoYXJlZC9XZWJQdXNoTWVzc2FnZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQdXNoTWVz
c2FnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiB3ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmg6CisgICAg
ICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFdl
YlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNsaWVudEtleXMpOgor
ICAgICAgICAoV2ViUHVzaEQ6Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1YnNjcmliZSk6
CisgICAgICAgIChXZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6dW5zdWJzY3Jp
YmUpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpjb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZGF0YWJhc2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpk
aWRSZWNlaXZlUHVzaE1lc3NhZ2UpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLm1t
OiBBZGRlZC4KKyAgICAgICAgKFdlYlB1c2hEOjp1cGRhdGVUb3BpY0xpc3RzKToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNo
U2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2
aWNlOjpQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1c2hTdWJzY3JpcHRp
b25Gcm9tUmVjb3JkKToKKyAgICAgICAgKFdlYlB1c2hEOjptYWtlUHVzaFRvcGljKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OmJ1bmRsZUlkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6c2NvcGUpOgorICAgICAgICAoV2Vi
UHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6UHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpQdXNoU2VydmljZVJlcXVlc3RJbXBs
KToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpmdWxmaWxsKToK
KyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpyZWplY3QpOgorICAg
ICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlwdGlvblJl
cXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OnN0YXJ0
SW50ZXJuYWwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OlN1YnNjcmli
ZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW1w
bCk6CisgICAgICAgIChXZWJQdXNoRDo6U3Vic2NyaWJlUmVxdWVzdDo6YXR0ZW1wdFRvUmVjb3Zl
ckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKToKKyAgICAgICAgKFdlYlB1c2hEOjpVbnN1
YnNjcmliZVJlcXVlc3Q6OlVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChXZWJQdXNoRDo6
VW5zdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEludGVybmFsKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6Z2V0U3Vic2NyaXB0aW9uKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6c3Vic2NyaWJlKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6dW5zdWJzY3JpYmUpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1
c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChXZWJQ
dXNoRDo6bWFrZVJhd1B1c2hNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vydmlj
ZTo6ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24u
bW06CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNs
aWVudEtleXMpOgorICAgICAgICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb24uaDoKKyAgICAgICAg
KiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6Ok1lc3NhZ2VJ
bmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6OmVuY29kZVJlcGx5KToK
KyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0TW9ja1B1c2hTZXJ2aWNlKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVz
aEQ6OkRhZW1vbjo6c2V0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6
cnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6aW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYlB1c2hEOjpE
YWVtb246OmhhbmRsZUluY29taW5nUHVzaCk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpn
ZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN1YnNj
cmliZVRvUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6dW5zdWJzY3Jp
YmVGcm9tUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0UHVzaFN1
YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpnZXRQdXNoUGVybWlzc2lv
blN0YXRlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oOgorICAgICAg
ICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
dXNoRGFlbW9uTWFpbik6CisgICAgICAgICogd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJw
dXNoZC5tYWMucGxpc3Q6CisgICAgICAgICogd2VicHVzaGQvd2VicHVzaGQuY3BwOgorICAgICAg
ICAobWFpbik6CisKIDIwMjItMDItMDQgIEFyY2FkeSBHb2xkbWludHMtT3Jsb3YgIDxhZ29sZG1p
bnRzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjgwMDc3KTogW0dUS10gSXQg
Y2F1c2VkIDE1NSBuZXcgdGVzdCBmYWlsdXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3Jp
cHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2Uv
V1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApp
bmRleCA1YjRkM2I2MjU3MTc1MzI1NTRmM2FkNzJhNGRiNDVhNjllY2E4NWU2Li4wNWY3N2YzMjU5
NjA3YWJkMGY3NzNjZDUyNjc1OGRlYzdmNjlkOGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1Nj
cmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9T
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwu
eWFtbApAQCAtMTEyMiw2ICsxMTIyLDggQEAgUHVzaEFQSUVuYWJsZWQ6CiAgIGRlZmF1bHRWYWx1
ZToKICAgICBXZWJDb3JlOgogICAgICAgZGVmYXVsdDogZmFsc2UKKyAgICBXZWJLaXRMZWdhY3k6
CisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYktpdDoKICAgICAgIGRlZmF1bHQ6IGZhbHNl
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaAppbmRleCAzMDM3OGY4NTUz
YWZmNWMzZGEzNGZiOThmMjM3YmFlMTU2OTgwM2EyLi45Y2Y4NGQyNzQ0ZmE3ZGViZmIwNzFkZjEy
M2VkMTI2OWE0N2Y1Mjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29j
b2EvV0tNYWluLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5o
CkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiBXS19FWFBPUlQgaW50IFdLWFBDU2Vy
dmljZU1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIFdLX0VYUE9SVCBpbnQgV0tBZEF0dHJpYnV0aW9uRGFl
bW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci1XS19FWFBPUlQgaW50IFdLV2ViUHVz
aERhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworV0tfRVhQT1JUIGludCBXS1dl
YlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVz
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1t
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbQppbmRleCBkZTJlOWY3
YTViZDU1ZjkxZGU4N2UxYTkzYWFmODkwNzNkZmJmZDQxLi45N2Q3ODVmNjlmMjYxYWFmY2UyNWQ4
ZDkxNzY3MTQ0ZjIzZTllMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkv
Q29jb2EvV0tNYWluLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01h
aW4ubW0KQEAgLTQwLDcgKzQwLDcgQEAgaW50IFdLQWRBdHRyaWJ1dGlvbkRhZW1vbk1haW4oaW50
IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KQogICAgIHJldHVybiBXZWJLaXQ6OlBDTURhZW1vbk1h
aW4oYXJnYywgYXJndik7CiB9CiAKLWludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBj
b25zdCBjaGFyKiogYXJndikKK2ludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKIHsKICAgICByZXR1cm4gV2ViS2l0OjpXZWJQdXNoRGFlbW9uTWFpbihhcmdjLCBh
cmd2KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hN
ZXNzYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJQdXNoTWVzc2Fn
ZUNvY29hLm1tCmluZGV4IGYxMjkzOGJjNGRkZjFkZTQ5MWQ5MDllOGI3YWZkYTY1MmQwYzkwN2Iu
LmQ5MzRkYTQwN2MxZTY4MDk3MWI4ZTk0Y2U2NjI5MDNkNWE2YTNkZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hNZXNzYWdlQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbQpAQCAtMzksMjEg
KzM5LDMwIEBAIHN0ZDo6b3B0aW9uYWw8V2ViUHVzaE1lc3NhZ2U+IFdlYlB1c2hNZXNzYWdlOjpm
cm9tRGljdGlvbmFyeShOU0RpY3Rpb25hcnkgKmRpY3RpCiAgICAgaWYgKCF1cmwgfHwgIVt1cmwg
aXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIE5TRGF0YSAqcHVzaERhdGEgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6V2Vi
S2l0UHVzaERhdGFLZXldOwotICAgIGlmICghcHVzaERhdGEgfHwgIVtwdXNoRGF0YSBpc0tpbmRP
ZkNsYXNzOltOU0RhdGEgY2xhc3NdXSkKKyAgICBpZCBwdXNoRGF0YSA9IFtkaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpXZWJLaXRQdXNoRGF0YUtleV07CisgICAgQk9PTCBpc051bGwgPSBbcHVzaERh
dGEgaXNFcXVhbDpbTlNOdWxsIG51bGxdXTsKKyAgICBCT09MIGlzRGF0YSA9IFtwdXNoRGF0YSBp
c0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXTsKKworICAgIGlmICghaXNOdWxsICYmICFpc0Rh
dGEpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4geyB7Ci0gICAg
ICAgIFZlY3Rvcjx1aW50OF90PiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdXNoRGF0
YS5ieXRlcyksIHB1c2hEYXRhLmxlbmd0aCB9LAotICAgICAgICBVUkwgeyB1cmwgfQotICAgIH0g
fTsKKyAgICBXZWJQdXNoTWVzc2FnZSBtZXNzYWdlIHsgeyB9LCBVUkwgeyB1cmwgfSB9OworICAg
IGlmIChpc0RhdGEpIHsKKyAgICAgICAgTlNEYXRhICpkYXRhID0gKE5TRGF0YSAqKXB1c2hEYXRh
OworICAgICAgICBtZXNzYWdlLnB1c2hEYXRhID0gVmVjdG9yPHVpbnQ4X3Q+IHsgc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9OworICAgIH0KKwor
ICAgIHJldHVybiBtZXNzYWdlOwogfQogCiBOU0RpY3Rpb25hcnkgKldlYlB1c2hNZXNzYWdlOjp0
b0RpY3Rpb25hcnkoKSBjb25zdAogewotICAgIGF1dG8gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlczpwdXNoRGF0YS5kYXRhKCkgbGVuZ3RoOnB1c2hEYXRhLnNp
emUoKV0pOworICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YTsKKyAgICBpZiAocHVzaERhdGEp
CisgICAgICAgIG5zRGF0YSA9IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXM6cHVzaERhdGEtPmRhdGEoKSBsZW5ndGg6cHVzaERhdGEtPnNpemUoKV0pOworCiAg
ICAgcmV0dXJuIEB7Ci0gICAgICAgIFdlYktpdFB1c2hEYXRhS2V5IDogbnNEYXRhLmdldCgpLAor
ICAgICAgICBXZWJLaXRQdXNoRGF0YUtleSA6IG5zRGF0YSA/IG5zRGF0YS5nZXQoKSA6IFtOU051
bGwgbnVsbF0sCiAgICAgICAgIFdlYktpdFB1c2hSZWdpc3RyYXRpb25VUkxLZXkgOiAoTlNVUkwg
KilyZWdpc3RyYXRpb25VUkwKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
UHVzaERhZW1vbkNvbnN0YW50cy5oCmluZGV4IGZjNDdkYzRmMTI3NDg3MjRiMWI1N2M1NzJjMTQ5
YjM4NzhlYzBhNWIuLmYzZjdiYmU2M2Y0ZWQzNWVkY2YzZTJhYWFkOTNmYjNlNDkyOWZmOTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKQEAgLTQz
LDYgKzQzLDcgQEAgZW51bSBjbGFzcyBNZXNzYWdlVHlwZSA6IHVpbnQ4X3QgewogICAgIFNldERl
YnVnTW9kZUlzRW5hYmxlZCwKICAgICBVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbiwKICAg
ICBJbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcsCisgICAgSW5qZWN0RW5jcnlwdGVkUHVzaE1l
c3NhZ2VGb3JUZXN0aW5nLAogICAgIEdldFBlbmRpbmdQdXNoTWVzc2FnZXMsCiAgICAgU3Vic2Ny
aWJlVG9QdXNoU2VydmljZSwKICAgICBVbnN1YnNjcmliZUZyb21QdXNoU2VydmljZSwKQEAgLTU5
LDYgKzYwLDcgQEAgaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBl
IG1lc3NhZ2VUeXBlKQogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlcXVlc3RTeXN0ZW1Ob3RpZmlj
YXRpb25QZXJtaXNzaW9uOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVz
c2FnZXM6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5n
OgorICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVz
dGluZzoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpTdWJzY3JpYmVUb1B1c2hTZXJ2aWNlOgogICAg
IGNhc2UgTWVzc2FnZVR5cGU6OlVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlOgogICAgIGNhc2Ug
TWVzc2FnZVR5cGU6OkdldFB1c2hTdWJzY3JpcHRpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVz
aE1lc3NhZ2UuaAppbmRleCBmOWU0M2YzMzNkNTY4NDg4YzJmYmUxZTZlYmMxMWQ2MjMzNGNmOGU3
Li4xZjRlZmFjOTg0YjUyMjJkYmQxMGJlOGFhMzBjN2U1YTc4YmU5OTYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYlB1c2hNZXNzYWdlLmgKQEAgLTM3LDcgKzM3LDcgQEAgc3RydWN0IFdlYlB1c2hN
ZXNzYWdlIHsKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8V2ViUHVzaE1lc3NhZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBWZWN0b3I8dWludDhf
dD4gcHVzaERhdGE7CisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IHB1c2hEYXRh
OwogICAgIFVSTCByZWdpc3RyYXRpb25VUkw7CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTU1
LDcgKzU1LDcgQEAgdm9pZCBXZWJQdXNoTWVzc2FnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpvcHRpb25hbDxXZWJQdXNoTWVz
c2FnZT4gV2ViUHVzaE1lc3NhZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBwdXNoRGF0YTsKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+Pj4gcHVzaERhdGE7CiAgICAgZGVjb2RlciA+
PiBwdXNoRGF0YTsKICAgICBpZiAoIXB1c2hEYXRhKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMGM3YzMxYmM1NTdiNTVkNTE3MDVmYzM5ZDdlNjc5Yzk0YzZhMGFmMy4uODI3OGU1MDI3
NGU1MDBlZTFlOWRmYTY4ZmNmZTY1NjYzYmM2NjQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NDYsNyArOTQ2LDcgQEAKIAkJNTEy
OTM1RTQxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5
MzVFMjEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGll
bnQuaCAqLzsgfTsKIAkJNTEyOUVCMTIyM0QwREU3QjAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNo
YXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEy
OUVCMTEyM0QwREU3ODAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oICovOyB9OwogCQk1
MTJDRDY5ODI3MjFFRkM4MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk3MjcyMUVG
QzMwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbi5oICovOyB9OwotCQk1MTJDRDY5
QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyQ0Q2OTkyNzIxRjA0OTAwRjdG
OEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCAqLzsgfTsKKwkJNTEyQ0Q2OUEyNzIxRjBB
OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk5MjcyMUYwNDkwMEY3RjhFQyAvKiBX
ZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTEyRTM0RTUxMzBCNEQwNTAwQUJEMTlBIC8qIFdLQXBwbGljYXRp
b25DYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxN0EzM0I0MTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTEyRUNDMzUyNzE5NkFEQjAwMDg5QjY2IC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNC
OTMwRkUyNkU4MDIxNjAwMzJCMUMwIC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVjdGlv
bi5oICovOyB9OwogCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEyRjU4OEYxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkuaCAqLzsgfTsKQEAgLTE5OTgsNiArMTk5OCw4IEBACiAJCUU1Q0JBNzY3MjdBMzE4RTEw
MERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1Q0JBNzYwMjdBMzE4NzkwMERGNzg1OCAvKiBVbmlmaWVk
U291cmNlMTE5LmNwcCAqLzsgfTsKIAkJRTVDQkE3NjgyN0EzMThFMTAwREY3ODU4IC8qIFVuaWZp
ZWRTb3VyY2UxMTcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTVDQkE3NjIyN0EzMTg3OTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwICov
OyB9OwogCQlFNURFRkE2ODI2RjhGNDI2MDBBQjY4REIgLyogUGhvdG9zVUlTUEkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1REVGQTY3MjZGOEY0MjYw
MEFCNjhEQiAvKiBQaG90b3NVSVNQSS5oICovOyB9OworCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUw
MEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQdXNoU2VydmljZS5oICovOyB9
OworCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjM2QjE2NzI3QTdCNDUwMDA1
MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi87IH07CiAJCUVCQThEM0FCMjdBNUUzMTMwMENCNzkw
MCAvKiBBcHBsZVB1c2hTZXJ2aWNlU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQTI3QTVFMzEzMDBDQjc5MDAgLyogQXBwbGVQdXNoU2Vy
dmljZVNQSS5oICovOyB9OwogCQlFQkE4RDNCMjI3QTVFMzNGMDBDQjc5MDAgLyogQXBwbGVQdXNo
U2VydmljZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNv
bm5lY3Rpb24ubW0gKi87IH07CiAJCUVCQThEM0IzMjdBNUUzM0YwMENCNzkwMCAvKiBNb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFQkE4RDNBRDI3QTVFMzNFMDBDQjc5MDAgLyogTW9ja1B1c2hTZXJ2aWNlQ29u
bmVjdGlvbi5oICovOyB9OwpAQCAtNjQ1OSw2ICs2NDYxLDggQEAKIAkJRTVERUZBNjcyNkY4RjQy
NjAwQUI2OERCIC8qIFBob3Rvc1VJU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rvc1VJU1BJLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJEMjc1QUUxMzMwMDg2M0Q4RiAv
KiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxp
c3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3Q7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJFMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20u
YXBwbGUud2Via2l0LndlYnB1c2hkLmlvcy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1s
OyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5pb3MucGxpc3Q7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQdXNoU2Vydmlj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoU2VydmljZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVz
aFNlcnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQdXNo
U2VydmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUEyN0E1RTMx
MzAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXBwbGVQdXNoU2VydmljZVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5l
Y3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBsZVB1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJB
OEQzQUQyN0E1RTMzRTAwQ0I3OTAwIC8qIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwOTgsNiArMTAxMDIsOCBAQAogCQkJ
CTUxNjBFOTU4Mjc0QzBEODgwMDU2NzM4OCAvKiBQdXNoQXBwQnVuZGxlLm1tICovLAogCQkJCTUx
RjdCQjc5Mjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oICovLAogCQkJ
CTUxRjdCQjdBMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5tbSAqLywK
KwkJCQlFQjM2QjE2NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCAqLywKKwkJCQlF
QjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi8sCiAJCQkJRUJBOEQz
QUYyN0E1RTMzRjAwQ0I3OTAwIC8qIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovLAogCQkJCUVC
QThEM0IxMjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8sCiAJ
CQkJNTE3QjVGNzcyNzVFOTc5NTAwMkRDMjJEIC8qIHdlYnB1c2hkLmNwcCAqLywKQEAgLTEzMjUw
LDYgKzEzMjU2LDcgQEAKIAkJCQk1MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1
bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1
c2hDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY5NTI3NUVCQTYz
MDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlF
QjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUVCQThEM0I1MjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUExRTY4ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBRdWFyYW50aW5l
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBDMjI3RTI0NTExMzBBMDBFRDYxNEQgLyogUXVp
Y2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMTU1MDksNiAr
MTU1MTYsNyBAQAogCQkJCTJENTRDMzFCMjEyRjREQTYwMDQ5QzE3NCAvKiBQcm9jZXNzTGF1bmNo
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGODIyNzVFOTdCNjAwMkRDMjJEIC8qIFB1
c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTdCNUY3QjI3NUU5N0E5MDAyREMy
MkQgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQlFQjM2QjE2
OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlF
QkE4RDNCNzI3QTVFMzNGMDBDQjc5MDAgLyogUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUEwQzIyN0YyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1i
bmFpbGluZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyNUUyNDM1NzVDRDAw
RUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9u
LmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApp
bmRleCA3NzY5YmI2YmRkNTgyOGU3YjE2NGMxNjdjODQ2MGNmZGJkN2MwNDAwLi5iOTUzYmI5YzEy
ZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3ZGY0NmQ5NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAtMzQsNiArMzQsOCBAQCBw
dWJsaWM6CiAgICAgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpOwogICAgIH5Nb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uKCk7CiAKKyAgICBXZWJDb3JlOjpQdXNoQ3J5cHRvOjpDbGllbnRLZXlz
IGdlbmVyYXRlQ2xpZW50S2V5cygpIGZpbmFsOworCiAgICAgdm9pZCBzdWJzY3JpYmUoY29uc3Qg
U3RyaW5nJiB0b3BpYywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgU3Vi
c2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKICAgICB2b2lkIHVuc3Vic2NyaWJlKGNvbnN0IFN0
cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFVuc3Vi
c2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IGRiZWZhNzRhZWNkOWE5ZWEw
ZTQxOTgzMzg2OGUzMDhkM2Q3NmY2MDMuLmM0Y2YyZTY3OWI5MmJmOTIzNTYxYzE1OGMyM2QzNjgw
MWQ4NzgzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24ubW0KQEAgLTI2LDYgKzI2LDEwIEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIKIAorI2ltcG9ydCA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpQdXNoQ3J5cHRvOworCiBu
YW1lc3BhY2UgV2ViUHVzaEQgewogCiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uKCkKQEAgLTM0LDE0ICszOCwzMCBAQCBNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkKIAogTW9ja1B1c2hTZXJ2aWNl
Q29ubmVjdGlvbjo6fk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYsIFN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQorQ2xpZW50
S2V5cyBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNsaWVudEtleXMoKQogewot
ICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9t
YWluIGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKKyAgICAv
LyBFeGFtcGxlIHZhbHVlcyBmcm9tIFJGQzgyOTEgU2VjdGlvbiA1LgorICAgIGF1dG8gcHVibGlj
S2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCQ1Z4c3I3Tl9lTmdWUnF2SHREMHpUWnNFYzYtVlYtSnZM
ZXhocVV6T1JjeGFPemk2LUFZV1h2VEJIbTRianlQanM3VmQ4cFpHSDZTUnBrTnRvSUFpdzQiX3Mp
LnZhbHVlKCk7CisgICAgYXV0byBwcml2YXRlS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJxMWRYcHcz
VXBUNVZPbXVfY2ZfdjZpaDA3QWVtczNuanhJLUpXZ0xjTTk0Il9zKS52YWx1ZSgpOworICAgIGF1
dG8gc2VjcmV0ID0gYmFzZTY0VVJMRGVjb2RlKCJCVEJaTXFISDZyNFR0czdKX2FTSWdnIl9zKS52
YWx1ZSgpOworCisgICAgcmV0dXJuIENsaWVudEtleXMgeyBQMjU2REhLZXlQYWlyIHsgV1RGTW92
ZShwdWJsaWNLZXkpLCBXVEZNb3ZlKHByaXZhdGVLZXkpIH0sIFdURk1vdmUoc2VjcmV0KSB9Owor
fQorCit2b2lkIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1YnNjcmliZShjb25zdCBTdHJp
bmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBTdWJzY3JpYmVIYW5k
bGVyJiYgaGFuZGxlcikKK3sKKyAgICBhdXRvIGFsd2F5c1JlamVjdGVkS2V5ID0gYmFzZTY0VVJM
RGVjb2RlKCJCRUF4YVVNbzFzOHRqT1J4SmZuU1N2V2hZYjR1NTFrZzFoV1Qyc185Z3BWN1p4YXIx
cEZfMkJROEFuY3VBZFMyQm9MaE40cWF4ekJ5MkN3SEU4QkJ6V2ciX3MpLnZhbHVlKCk7CisgICAg
aWYgKHZhcGlkUHVibGljS2V5ID09IGFsd2F5c1JlamVjdGVkS2V5KSB7CisgICAgICAgIGhhbmRs
ZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJXZWJQdXNoIiBjb2RlOi0xIHVzZXJJ
bmZvOm5pbF0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlcihAImh0dHBz
Oi8vd2Via2l0Lm9yZy9wdXNoIiwgbmlsKTsKIH0KIAogdm9pZCBNb2NrUHVzaFNlcnZpY2VDb25u
ZWN0aW9uOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
LCBVbnN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQogewotICAgIGhhbmRsZXIoeyB9LCBbTlNF
cnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6TlNGZWF0dXJlVW5z
dXBwb3J0ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKKyAgICBoYW5kbGVyKHRydWUsIG5pbCk7CiB9
CiAKIFZlY3RvcjxTdHJpbmc+IE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OmVuYWJsZWRUb3Bp
Y3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNDE1ZTAw
OGRkNjMwNTEwNTgyNGY4Y2ZiMDI2OTVhZmMzMjNmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUHVzaFN1YnNjcmlwdGlvbkRhdGEuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitjbGFzcyBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0
OworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0OworY2xhc3MgU3Vic2NyaWJlUmVxdWVzdDsKK2Ns
YXNzIFVuc3Vic2NyaWJlUmVxdWVzdDsKKworY2xhc3MgUHVzaFNlcnZpY2UgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVzaW5nIEluY29taW5nUHVzaE1lc3Nh
Z2VIYW5kbGVyID0gRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJik+OworCisgICAgc3RhdGljIHZvaWQgY3JlYXRlKGNv
bnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYpOworICAgIHN0YXRpYyB2b2lk
IGNyZWF0ZU1vY2tTZXJ2aWNlKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKT4mJik7CisgICAg
flB1c2hTZXJ2aWNlKCk7CisKKyAgICBQdXNoU2VydmljZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24o
KSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KKyAgICBXZWJDb3JlOjpQdXNoRGF0YWJhc2UmIGRh
dGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQorCisgICAgdm9pZCBnZXRTdWJzY3JpcHRp
b24oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmKTsK
KyAgICB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlw
dGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYpOworICAgIHZvaWQgdW5zdWJz
Y3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3Bl
LCBXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmKTsK
KworICAgIHZvaWQgZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KEdldFN1YnNjcmlw
dGlvblJlcXVlc3QmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdChTdWJz
Y3JpYmVSZXF1ZXN0Jik7CisgICAgdm9pZCBkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdChV
bnN1YnNjcmliZVJlcXVlc3QmKTsKKworICAgIHZvaWQgZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5T
U3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmID0gW10geyB9KTsKKworcHJpdmF0ZToKKyAgICBQdXNoU2VydmljZShVbmlxdWVS
ZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiYmLCBVbmlxdWVSZWY8V2ViQ29yZTo6UHVzaERhdGFi
YXNlPiYmLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmKTsKKworICAgIHVzaW5nIFB1c2hT
ZXJ2aWNlUmVxdWVzdE1hcCA9IEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJpbmcsIFN0cmluZz4sIERl
cXVlPHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+Pj47CisgICAgdm9pZCBlbnF1
ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYsIHN0ZDo6dW5pcXVl
X3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+JiYpOworICAgIHZvaWQgZmluaXNoZWRQdXNoU2Vydmlj
ZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiwgUHVzaFNlcnZpY2VSZXF1ZXN0Jik7CisK
KyAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAg
VW5pcXVlUmVmPFdlYkNvcmU6OlB1c2hEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKworICAgIEluY29t
aW5nUHVzaE1lc3NhZ2VIYW5kbGVyIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXI7CisKKyAg
ICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV9nZXRTdWJzY3JpcHRpb25SZXF1ZXN0czsKKyAgICBQ
dXNoU2VydmljZVJlcXVlc3RNYXAgbV9zdWJzY3JpYmVSZXF1ZXN0czsKKyAgICBQdXNoU2Vydmlj
ZVJlcXVlc3RNYXAgbV91bnN1YnNjcmliZVJlcXVlc3RzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2Uu
bW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBj
OGE5ZmI2YTI0ZTIyNmM1ZTY5ZGEyZTc0ZWM4MGI0NmI5Y2I2OGQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCkBAIC0wLDAgKzEsNTkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQdXNoU2VydmljZS5o
IgorCisjaW1wb3J0ICJBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiTW9j
a1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL1B1c2hNZXNzYWdlQ3J5
cHRvLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDx3dGYv
T1NPYmplY3RQdHIuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbXBvcnQgPHd0Zi9z
cGkvZGFyd2luL1hQQ1NQSS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYlB1c2hEIHsKKworc3RhdGljIHZvaWQgdXBkYXRlVG9waWNMaXN0cyhQdXNoU2VydmljZUNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIFB1c2hEYXRhYmFzZSYgZGF0YWJhc2UsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZGF0YWJhc2UuZ2V0VG9w
aWNzQnlXYWtlU3RhdGUoWyZjb25uZWN0aW9uLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgdG9waWNNYXApIG11dGFibGUgeworICAgICAgICAv
LyBGSVhNRTogbW92ZSB0b3BpY3MgdG8gaWdub3JlZCBsaXN0IGJhc2VkIG9uIHVzZXIgcHJlZmVy
ZW5jZXMuCisgICAgICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6VG9waWNMaXN0cyB0b3BpY0xp
c3RzOworCisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRl
OjpXYWtpbmcpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh0
b3BpY0xpc3RzLmVuYWJsZWRUb3BpY3MsIGl0LT52YWx1ZSk7CisgICAgICAgIGlmIChhdXRvIGl0
ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpPcHBvcnR1bmlzdGljKTsgaXQgIT0gdG9w
aWNNYXAuZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAodG9waWNMaXN0cy5vcHBvcnR1bmlz
dGljVG9waWNzLCBpdC0+dmFsdWUpOworICAgICAgICBpZiAoYXV0byBpdCA9IHRvcGljTWFwLmZp
bmQoUHVzaFdha2VTdGF0ZTo6Tm9uV2FraW5nKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAg
ICAgICAgICBzdGQ6OnN3YXAodG9waWNMaXN0cy5ub25XYWtpbmdUb3BpY3MsIGl0LT52YWx1ZSk7
CisKKyAgICAgICAgY29ubmVjdGlvbi5zZXRUb3BpY0xpc3RzKFdURk1vdmUodG9waWNMaXN0cykp
OworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgfSk7Cit9CisKKyNpZiBIQVZF
KEFQUExFX1BVU0hfU0VSVklDRV9VUkxfVE9LRU5fU1VQUE9SVCkKKwordm9pZCBQdXNoU2Vydmlj
ZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIG1lc3NhZ2VI
YW5kbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2Vydmlj
ZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBhZG9w
dE9TT2JqZWN0KG9zX3RyYW5zYWN0aW9uX2NyZWF0ZSgiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNo
ZC5wdXNoLXNlcnZpY2UtaW5pdCIpKTsKKworICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbiBB
U0FQIHNvIHRoYXQgd2UgYm9vdHN0cmFwX2NoZWNrX2luIHRvIHRoZSBzZXJ2aWNlIGluIGEgdGlt
ZWx5IG1hbm5lci4KKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlUmVmPEFwcGxlUHVz
aFNlcnZpY2VDb25uZWN0aW9uPihpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSk7CisKKyAgICBQdXNo
RGF0YWJhc2U6OmNyZWF0ZShkYXRhYmFzZVBhdGgsIFt0cmFuc2FjdGlvbiA9IFdURk1vdmUodHJh
bnNhY3Rpb24pLCBjb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9uKSwgbWVzc2FnZUhhbmRs
ZXIgPSBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwgY3JlYXRpb25IYW5kbGVyID0gV1RGTW92ZShj
cmVhdGlvbkhhbmRsZXIpXShhdXRvJiYgZGF0YWJhc2VSZXN1bHQpIG11dGFibGUgeworICAgICAg
ICBpZiAoIWRhdGFiYXNlUmVzdWx0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAi
UHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoIGRhdGFiYXNlIGVycm9yIik7
CisgICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNl
PigpKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZGF0YWJhc2UgPSBtYWtlVW5pcXVlUmVm
RnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92ZShkYXRhYmFzZVJlc3VsdCkpOworICAgICAgICBV
bmlxdWVSZWY8UHVzaFNlcnZpY2U+IHNlcnZpY2UoKm5ldyBQdXNoU2VydmljZShXVEZNb3ZlKGNv
bm5lY3Rpb24pLCBXVEZNb3ZlKGRhdGFiYXNlKSwgV1RGTW92ZShtZXNzYWdlSGFuZGxlcikpKTsK
KworICAgICAgICBhdXRvJiBjb25uZWN0aW9uUmVmID0gc2VydmljZS0+Y29ubmVjdGlvbigpOwor
ICAgICAgICBhdXRvJiBkYXRhYmFzZVJlZiA9IHNlcnZpY2UtPmRhdGFiYXNlKCk7CisKKyAgICAg
ICAgLy8gT25seSBwcm92aWRlIHRoZSBzZXJ2aWNlIG9iamVjdCBiYWNrIHRvIHRoZSBjYWxsZXIg
YWZ0ZXIgd2UndmUgc3luY2VkIHRoZSB0b3BpYyBsaXN0cyBpbgorICAgICAgICAvLyB0aGUgZGF0
YWJhc2Ugd2l0aCB0aGUgUHVzaFNlcnZpY2VDb25uZWN0aW9uL0FQU0Nvbm5lY3Rpb24uIFRoaXMg
ZW5zdXJlcyB0aGF0IHdlIHdvbid0CisgICAgICAgIC8vIHNlcnZpY2UgYW55IGNhbGxzIHRvIHN1
YnNjcmliZS91bnN1YnNjcmliZS9ldGMuIHVudGlsIGFmdGVyIHRoZSB0b3BpYyBsaXN0cyBhcmUg
dXAgdG8KKyAgICAgICAgLy8gZGF0ZSwgd2hpY2ggQVBTQ29ubmVjdGlvbiBjYXJlcyBhYm91dC4K
KyAgICAgICAgdXBkYXRlVG9waWNMaXN0cyhjb25uZWN0aW9uUmVmLCBkYXRhYmFzZVJlZiwgW3Ry
YW5zYWN0aW9uID0gV1RGTW92ZSh0cmFuc2FjdGlvbiksIHNlcnZpY2UgPSBXVEZNb3ZlKHNlcnZp
Y2UpLCBjcmVhdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc2VydmljZS5tb3ZlVG9VbmlxdWVQdHIo
KSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGxwdHI7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCisjZWxzZQorCit2b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXImJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmIGNyZWF0aW9u
SGFuZGxlcikKK3sKKyAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2
aWNlPigpKTsKK30KKworI2VuZGlmIC8vIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tF
Tl9TVVBQT1JUKQorCit2b2lkIFB1c2hTZXJ2aWNlOjpjcmVhdGVNb2NrU2VydmljZShJbmNvbWlu
Z1B1c2hNZXNzYWdlSGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQor
eworICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKFNRTGl0ZURhdGFiYXNlOjppbk1lbW9yeVBhdGgo
KSwgW21lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShtZXNzYWdlSGFuZGxlciksIGNyZWF0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY3JlYXRpb25IYW5kbGVyKV0oYXV0byYmIGRhdGFiYXNlUmVzdWx0KSBt
dXRhYmxlIHsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVJlc3VsdCkgeworICAgICAgICAgICAgY3Jl
YXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4oKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtlVW5p
cXVlUmVmPE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24+KCk7CisgICAgICAgIGF1dG8gZGF0YWJh
c2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92ZShkYXRhYmFzZVJl
c3VsdCkpOworICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2
aWNlPihuZXcgUHVzaFNlcnZpY2UoV1RGTW92ZShjb25uZWN0aW9uKSwgV1RGTW92ZShkYXRhYmFz
ZSksIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpKSkpOworICAgIH0pOworfQorCitQdXNoU2Vydmlj
ZTo6UHVzaFNlcnZpY2UoVW5pcXVlUmVmPFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4mJiBwdXNoU2Vy
dmljZUNvbm5lY3Rpb24sIFVuaXF1ZVJlZjxQdXNoRGF0YWJhc2U+JiYgcHVzaERhdGFiYXNlLCBJ
bmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIGluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKQor
ICAgIDogbV9jb25uZWN0aW9uKFdURk1vdmUocHVzaFNlcnZpY2VDb25uZWN0aW9uKSkKKyAgICAs
IG1fZGF0YWJhc2UoV1RGTW92ZShwdXNoRGF0YWJhc2UpKQorICAgICwgbV9pbmNvbWluZ1B1c2hN
ZXNzYWdlSGFuZGxlcihXVEZNb3ZlKGluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKSkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKTsKKworICAgIG1f
Y29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5pbmdGb3JQdXNoTWVzc2FnZXMoW3RoaXNdKE5TU3RyaW5n
ICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykgeworICAgICAgICBkaWRSZWNlaXZlUHVz
aE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKKyAgICB9KTsKK30KKworUHVzaFNlcnZpY2U6On5Q
dXNoU2VydmljZSgpID0gZGVmYXVsdDsKKworc3RhdGljIFB1c2hTdWJzY3JpcHRpb25EYXRhIG1h
a2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChQdXNoUmVjb3JkJiYgcmVjb3JkKQoreworICAg
IHJldHVybiBQdXNoU3Vic2NyaXB0aW9uRGF0YSB7CisgICAgICAgIHJlY29yZC5pZGVudGlmaWVy
LAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5lbmRwb2ludCksCisgICAgICAgIFdURk1vdmUocmVj
b3JkLmV4cGlyYXRpb25UaW1lKSwKKyAgICAgICAgV1RGTW92ZShyZWNvcmQuc2VydmVyVkFQSURQ
dWJsaWNLZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5jbGllbnRQdWJsaWNLZXkpLAorICAg
ICAgICBXVEZNb3ZlKHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0KQorICAgIH07Cit9CisKK3N0YXRp
YyBTdHJpbmcgbWFrZVB1c2hUb3BpYyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgc2NvcGUpCit7CisgICAgcmV0dXJuIGJ1bmRsZUlkZW50aWZpZXIgKyAiICIg
KyBzY29wZTsKK30KKworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QdXNoU2VydmljZVJlcXVlc3Qo
KSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEFTQ0lJTGl0ZXJhbCBkZXNjcmlwdGlvbigpIGNv
bnN0ID0gMDsKKworICAgIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJu
IG1fYnVuZGxlSWRlbnRpZmllcjsgfQorICAgIGNvbnN0IFN0cmluZyYgc2NvcGUoKSB7IHJldHVy
biBtX3Njb3BlOyB9OworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOworCitwcm90ZWN0
ZWQ6CisgICAgUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBT
dHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUpCisgICAgICAgIDog
bV9zZXJ2aWNlKHNlcnZpY2UpCisgICAgICAgICwgbV9jb25uZWN0aW9uKHNlcnZpY2UuY29ubmVj
dGlvbigpKQorICAgICAgICAsIG1fZGF0YWJhc2Uoc2VydmljZS5kYXRhYmFzZSgpKQorICAgICAg
ICAsIG1fYnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlmaWVyKQorICAgICAgICAsIG1fc2Nv
cGUoc2NvcGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7
CisKKyAgICBQdXNoU2VydmljZSYgbV9zZXJ2aWNlOworICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlv
biYgbV9jb25uZWN0aW9uOworICAgIFB1c2hEYXRhYmFzZSYgbV9kYXRhYmFzZTsKKyAgICBTdHJp
bmcgbV9idW5kbGVJZGVudGlmaWVyOworICAgIFN0cmluZyBtX3Njb3BlOworICAgIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoUHVzaFNlcnZpY2VSZXF1ZXN0Jik+IG1fY29tcGxldGlvbkhhbmRsZXI7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlPgorY2xhc3MgUHVzaFNlcnZpY2VS
ZXF1ZXN0SW1wbCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3QgeworcHVibGljOgorICAgIHZv
aWQgc3RhcnQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYgKG1fYnVuZGxlSWRlbnRpZmllci5p
c0VtcHR5KCkgfHwgbV9zY29wZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJlamVjdChXZWJD
b3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJvciwgIkludmFsaWQgc2VuZGVy
Il9zIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5n
IHRyYW5zYWN0aW9uRGVzY3JpcHRpb24gPSBTdHJpbmcoImNvbS5hcHBsZS53ZWJraXQud2VicHVz
aGQ6Il9zKSArIGRlc2NyaXB0aW9uKCkgKyAiOiJfcyArIG1fYnVuZGxlSWRlbnRpZmllciArICI6
Il9zICsgbV9zY29wZTsKKyAgICAgICAgbV90cmFuc2FjdGlvbiA9IGFkb3B0T1NPYmplY3Qob3Nf
dHJhbnNhY3Rpb25fY3JlYXRlKHRyYW5zYWN0aW9uRGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSkp
OworICAgICAgICBzdGFydEludGVybmFsKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgUmVzdWx0SGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8
UmVzdWx0VHlwZSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT47CisKKyAgICBQdXNoU2Vydmlj
ZVJlcXVlc3RJbXBsKFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5k
bGVyKQorICAgICAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdChzZXJ2aWNlLCBidW5kbGVJZGVudGlm
aWVyLCBzY29wZSkKKyAgICAgICAgLCBtX3Jlc3VsdEhhbmRsZXIoV1RGTW92ZShyZXN1bHRIYW5k
bGVyKSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflB1c2hTZXJ2aWNlUmVxdWVzdEltcGwo
KSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRJbnRlcm5hbCgpID0gMDsKKwor
ICAgIHZvaWQgZnVsZmlsbChSZXN1bHRUeXBlIHJlc3VsdCkKKyAgICB7CisgICAgICAgIG1fcmVz
dWx0SGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICBmaW5pc2goKTsKKyAgICB9CisK
KyAgICB2b2lkIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhJiYgZGF0YSkKKyAgICB7Cisg
ICAgICAgIG1fcmVzdWx0SGFuZGxlcihtYWtlVW5leHBlY3RlZChXVEZNb3ZlKGRhdGEpKSk7Cisg
ICAgICAgIGZpbmlzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRIYW5kbGVyIG1f
cmVzdWx0SGFuZGxlcjsKKyAgICBPU09iamVjdFB0cjxvc190cmFuc2FjdGlvbl90PiBtX3RyYW5z
YWN0aW9uOworfTsKKworY2xhc3MgR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCA6IHB1YmxpYyBQdXNo
U2VydmljZVJlcXVlc3RJbXBsPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlv
bkRhdGE+PiB7CitwdWJsaWM6CisgICAgR2V0U3Vic2NyaXB0aW9uUmVxdWVzdChQdXNoU2Vydmlj
ZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwg
UmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5HZXRTdWJzY3JpcHRpb25SZXF1ZXN0KCkg
PSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkdldFN1YnNjcmlwdGlvblJlcXVlc3QiX3M7IH0KKyAgICB2
b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIGZpbmlzaCgpIGZpbmFsIHsgbV9z
ZXJ2aWNlLmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCgqdGhpcyk7IH0KK307CisK
K0dldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlwdGlvblJlcXVlc3QoUHVzaFNlcnZp
Y2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBzY29wZSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRsZXIpCisgICAgOiBQdXNoU2Vydmlj
ZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJl
c3VsdEhhbmRsZXIpKQoreworfQorCisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBzaWRlIG9m
IFB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlvbi4KK3ZvaWQgR2V0U3Vic2NyaXB0aW9uUmVxdWVz
dDo6c3RhcnRJbnRlcm5hbCgpCit7CisgICAgbV9kYXRhYmFzZS5nZXRSZWNvcmRCeUJ1bmRsZUlk
ZW50aWZpZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUsIFt0aGlzXShhdXRv
JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAg
IGZ1bGZpbGwoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4geyB9
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bGZpbGwobWFr
ZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKFdURk1vdmUoKnJlc3VsdCkpKTsKKyAgICB9KTsK
K30KKworY2xhc3MgU3Vic2NyaWJlUmVxdWVzdCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJ
bXBsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiB7CitwdWJsaWM6CisgICAgU3Vic2Ny
aWJlUmVxdWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tl
eSwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5TdWJzY3JpYmVSZXF1ZXN0KCkgPSBk
ZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIlN1YnNjcmliZVJlcXVlc3QiX3M7IH0KKyAgICB2b2lkIHN0YXJ0
SW50ZXJuYWwoKSBmaW5hbCB7IHN0YXJ0SW1wbChJc1JldHJ5OjpObyk7IH0KKyAgICB2b2lkIGZp
bmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdCgqdGhp
cyk7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIElzUmV0cnkgeyBObywgWWVzIH07Cisg
ICAgdm9pZCBzdGFydEltcGwoSXNSZXRyeSk7CisgICAgdm9pZCBhdHRlbXB0VG9SZWNvdmVyRnJv
bVRvcGljQWxyZWFkeUluRmlsdGVyRXJyb3IoU3RyaW5nJiYpOworICAgIFZlY3Rvcjx1aW50OF90
PiBtX3ZhcGlkUHVibGljS2V5OworfTsKKworU3Vic2NyaWJlUmVxdWVzdDo6U3Vic2NyaWJlUmVx
dWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGlj
S2V5LCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikKKyAgICA6IFB1c2hTZXJ2aWNlUmVx
dWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVzdWx0
SGFuZGxlcikpCisgICAgLCBtX3ZhcGlkUHVibGljS2V5KHZhcGlkUHVibGljS2V5KQoreworfQor
CisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBzaWRlIG9mIFB1c2hNYW5hZ2VyLnN1YnNjcmli
ZSgpLgordm9pZCBTdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEltcGwoSXNSZXRyeSBpc1JldHJ5KQor
eworICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUobV9i
dW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpcywgaXNSZXRyeV0oYXV0byYmIHJlc3VsdCkg
bXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChtX3ZhcGlk
UHVibGljS2V5ICE9IHJlc3VsdC0+c2VydmVyVkFQSURQdWJsaWNLZXkpCisgICAgICAgICAgICAg
ICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVF
cnJvciwgIlByb3ZpZGVkIGFwcGxpY2F0aW9uU2VydmVyS2V5IGRvZXMgbm90IG1hdGNoIHRoZSBr
ZXkgaW4gdGhlIGV4aXN0aW5nIHN1YnNjcmlwdGlvbi4iX3MgfSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZnVsZmlsbChtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQo
V1RGTW92ZSgqcmVzdWx0KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byB0b3BpYyA9IG1ha2VQdXNoVG9waWMobV9idW5kbGVJZGVudGlmaWVyLCBtX3Nj
b3BlKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnN1YnNjcmliZSh0b3BpYywgbV92YXBpZFB1Ymxp
Y0tleSwgW3RoaXMsIGlzUmV0cnksIHRvcGljXShOU1N0cmluZyAqZW5kcG9pbnQsIE5TRXJyb3Ig
KmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiB1c2UgcG9pbnRlciBjb21wYXJpc29uIG9uY2UgQVBTVVJMVG9rZW5FcnJv
ckRvbWFpbiBpcyBleHRlcm5lZC4KKyAgICAgICAgICAgICAgICBpZiAoaXNSZXRyeSA9PSBJc1Jl
dHJ5OjpObyAmJiBbZXJyb3IuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpAIkFQU1VSTFRva2VuRXJy
b3JEb21haW4iXSAmJiBlcnJvci5jb2RlID09IEFQU1VSTFRva2VuRXJyb3JDb2RlVG9waWNBbHJl
YWR5SW5GaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFRvUmVjb3ZlckZyb21U
b3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFdURk1vdmUodG9waWMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFTEVB
U0VfTE9HKFB1c2gsICJQdXNoTWFuYWdlci5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMs
IHNjb3BlOiAle3NlbnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkb21haW46ICV7cHVibGljfXMgY29k
ZTogJWxsZCkiLCBtX2J1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4
KCkuZGF0YSgpLCBlcnJvci5kb21haW4uVVRGOFN0cmluZywgc3RhdGljX2Nhc3Q8aW50NjRfdD4o
ZXJyb3IuY29kZSkpOworICAgICAgICAgICAgICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25E
YXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJvciwgIkZhaWxlZCBkdWUgdG8gaW50ZXJuYWwgc2Vydmlj
ZSBlcnJvciJfcyB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGF1dG8gY2xpZW50S2V5cyA9IG1fc2VydmljZS5jb25uZWN0aW9uKCkuZ2Vu
ZXJhdGVDbGllbnRLZXlzKCk7CisgICAgICAgICAgICBQdXNoUmVjb3JkIHJlY29yZDsKKyAgICAg
ICAgICAgIHJlY29yZC5idW5kbGVJRCA9IG1fYnVuZGxlSWRlbnRpZmllcjsKKyAgICAgICAgICAg
IHJlY29yZC5zZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5n
KG1fc2NvcGUpLT5kYXRhKCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJlY29yZC5zY29wZSA9
IG1fc2NvcGU7CisgICAgICAgICAgICByZWNvcmQuZW5kcG9pbnQgPSBlbmRwb2ludDsKKyAgICAg
ICAgICAgIHJlY29yZC50b3BpYyA9IFdURk1vdmUodG9waWMpOworICAgICAgICAgICAgcmVjb3Jk
LnNlcnZlclZBUElEUHVibGljS2V5ID0gbV92YXBpZFB1YmxpY0tleTsKKyAgICAgICAgICAgIHJl
Y29yZC5jbGllbnRQdWJsaWNLZXkgPSBXVEZNb3ZlKGNsaWVudEtleXMuY2xpZW50UDI1NkRIS2V5
UGFpci5wdWJsaWNLZXkpOworICAgICAgICAgICAgcmVjb3JkLmNsaWVudFByaXZhdGVLZXkgPSBX
VEZNb3ZlKGNsaWVudEtleXMuY2xpZW50UDI1NkRIS2V5UGFpci5wcml2YXRlS2V5KTsKKyAgICAg
ICAgICAgIHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0ID0gV1RGTW92ZShjbGllbnRLZXlzLnNoYXJl
ZEF1dGhTZWNyZXQpOworCisgICAgICAgICAgICBtX2RhdGFiYXNlLmluc2VydFJlY29yZChyZWNv
cmQsIFt0aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaE1h
bmFnZXIuc3Vic2NyaWJlKGJ1bmRsZUlEOiAle3B1YmxpY31zLCBzY29wZTogJXtzZW5zaXRpdmV9
cykgZmFpbGVkIHdpdGggZGF0YWJhc2UgZXJyb3IiLCBtX2J1bmRsZUlkZW50aWZpZXIudXRmOCgp
LmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVq
ZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpBYm9ydEVycm9yLCAiRmFpbGVk
IGR1ZSB0byBpbnRlcm5hbCBkYXRhYmFzZSBlcnJvciJfcyB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBzdXBwb3J0IHBhcnRpYWwgdG9waWMgbGlzdCB1cGRhdGVzLgorICAgICAgICAgICAgICAgIHVw
ZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFiYXNlLCBbdGhpcywgcmVjb3JkID0g
V1RGTW92ZSgqcmVzdWx0KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmls
bChtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92ZShyZWNvcmQpKSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CisKKy8vIFRyaWVzIHRvIHJlY292ZXIgZnJvbSBhIHRvcGljIGJlaW5nIG1vdmVkIHRvIHRoZSBn
bG9iYWwgcGF1c2VkIGZpbHRlciAocmRhcjovLzg4MTM5MzMwKS4KK3ZvaWQgU3Vic2NyaWJlUmVx
dWVzdDo6YXR0ZW1wdFRvUmVjb3ZlckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFN0cmlu
ZyYmIHRvcGljKQoreworICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB0b3Bp
YyA9IFdURk1vdmUodG9waWMpXSgpIG11dGFibGUgeworICAgICAgICAvLyBUaGlzIHRha2VzIG93
bmVyc2hpcCBvZiB0aGUgcGF1c2VkIHRvcGljIGFuZCB0ZWxscyBhcHNkIHRvIGZvcmdldCBhYm91
dCB0aGUgdG9waWMuCisgICAgICAgIGF1dG8gb3JpZ2luYWxUb3BpY3MgPSBtX2Nvbm5lY3Rpb24u
aWdub3JlZFRvcGljcygpOworICAgICAgICBhdXRvIGF1Z21lbnRlZFRvcGljcyA9IG9yaWdpbmFs
VG9waWNzOworICAgICAgICBhdWdtZW50ZWRUb3BpY3MuYXBwZW5kKHRvcGljKTsKKyAgICAgICAg
bV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3MoV1RGTW92ZShhdWdtZW50ZWRUb3BpY3MpKTsK
KyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRUb3BpY3MoV1RGTW92ZShvcmlnaW5hbFRv
cGljcykpOworCisgICAgICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFt0aGlzXSgpIG11
dGFibGUgeworICAgICAgICAgICAgc3RhcnRJbXBsKElzUmV0cnk6Olllcyk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCitjbGFzcyBVbnN1YnNjcmliZVJlcXVlc3QgOiBwdWJsaWMgUHVzaFNl
cnZpY2VSZXF1ZXN0SW1wbDxib29sPiB7CitwdWJsaWM6CisgICAgVW5zdWJzY3JpYmVSZXF1ZXN0
KFB1c2hTZXJ2aWNlJiwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIHNjb3BlLCBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgUmVzdWx0SGFuZGxlciYmKTsK
KyAgICB2aXJ0dWFsIH5VbnN1YnNjcmliZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKK3Byb3RlY3Rl
ZDoKKyAgICBBU0NJSUxpdGVyYWwgZGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
VW5zdWJzY3JpYmVSZXF1ZXN0Il9zOyB9CisgICAgdm9pZCBzdGFydEludGVybmFsKCkgZmluYWw7
CisgICAgdm9pZCBmaW5pc2goKSBmaW5hbCB7IG1fc2VydmljZS5kaWRDb21wbGV0ZVVuc3Vic2Ny
aWJlUmVxdWVzdCgqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBQdXNoU3Vic2NyaXB0aW9uSWRl
bnRpZmllciBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXI7Cit9OworCitVbnN1YnNjcmliZVJlcXVl
c3Q6OlVuc3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBQdXNoU3Vic2NyaXB0aW9u
SWRlbnRpZmllciBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0
SGFuZGxlcikKKyAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRl
bnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikpCisgICAgLCBtX3N1YnNjcmlw
dGlvbklkZW50aWZpZXIoc3Vic2NyaXB0aW9uSWRlbnRpZmllcikKK3sKK30KKworLy8gSW1wbGVt
ZW50cyB0aGUgd2VicHVzaGQgc2lkZSBvZiBQdXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlLgor
dm9pZCBVbnN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW50ZXJuYWwoKQoreworICAgIG1fZGF0YWJh
c2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVy
LCBtX3Njb3BlLCBbdGhpc10oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICgh
cmVzdWx0IHx8IG1fc3Vic2NyaXB0aW9uSWRlbnRpZmllciAhPSByZXN1bHQtPmlkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgIGZ1bGZpbGwoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byB0b3BpYyA9IG1ha2VQdXNoVG9waWMobV9idW5kbGVJZGVu
dGlmaWVyLCBtX3Njb3BlKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnVuc3Vic2NyaWJlKHRvcGlj
LCByZXN1bHQtPnNlcnZlclZBUElEUHVibGljS2V5LCBbdGhpc10oYm9vbCB1bnN1YnNjcmliZWQs
IE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICAgICAgICAgIC8vIElmIHdlIGZhaWwgdG8gdW5zdWJzY3JpYmUgZnJvbSBhcHNkLCBqdXN0IGRy
b3AgYSBsb2cuIFdlIHN0aWxsIHdhbnQgdG8gY29udGludWUgYW5kIHJlbW92ZSB0aGUgcmVjb3Jk
IGZyb20gb3VyIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhIHN0YXRlIG1pc21hdGNoIGJldHdl
ZW4gb3VyIGRhdGFiYXNlIGFuZCBhcHNkJ3MgZGF0YWJhc2UuCisgICAgICAgICAgICBpZiAoIXVu
c3Vic2NyaWJlZCkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaFN1YnNj
cmlwdGlvbi51bnN1YnNjcmliZShidW5kbGVJRDogJXtwdWJsaWN9cywgc2NvcGU6ICV7c2Vuc2l0
aXZlfXMpIGZhaWxlZCB3aXRoIGRvbWFpbjogJXtwdWJsaWN9cyBjb2RlOiAlbGxkKSIsIG1fYnVu
ZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0ZjgoKS5kYXRhKCksIGVycm9y
LmRvbWFpbi5VVEY4U3RyaW5nID86ICJub25lIiwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZXJyb3Iu
Y29kZSkpOworI2Vsc2UKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTSh1bnN1YnNjcmliZWQpOwor
ICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGVycm9yKTsKKyNlbmRpZgorCisgICAgICAgICAgICBt
X2RhdGFiYXNlLnJlbW92ZVJlY29yZEJ5SWRlbnRpZmllcihtX3N1YnNjcmlwdGlvbklkZW50aWZp
ZXIsIFt0aGlzXShib29sIHJlbW92ZWQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICgh
cmVtb3ZlZCkgeworICAgICAgICAgICAgICAgICAgICBmdWxmaWxsKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBzdXBwb3J0IHBhcnRpYWwgdG9waWMgbGlzdCB1cGRhdGVzLgorICAgICAgICAg
ICAgICAgIHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0aW9uLCBtX2RhdGFiYXNlLCBbdGhpc10o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmlsbCh0cnVlKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
Ly8gT25seSBhbGxvdyBvbmUgcmVxdWVzdCBwZXIgKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlKSB0
byBwcm9jZWVkIGF0IG9uY2UuIEZvciBpbnN0YW5jZSwgaWYgYSBnaXZlbgorLy8gcGFnZSBjYWxs
cyBQdXNoTWFuYWdlci5zdWJzY3JpYmUoKSB0d2ljZSBpbiBhIHJvdywgdGhlIHNlY29uZCBzdWJz
Y3JpYmUgY2FsbCB3b24ndCBzdGFydCB1bnRpbAorLy8gdGhlIGZpcnN0IG9uZSBjb21wbGV0ZXMu
Cit2b2lkIFB1c2hTZXJ2aWNlOjplbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNl
UmVxdWVzdE1hcCYgbWFwLCBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0PiYmIHJl
cXVlc3QpCit7CisgICAgYXV0byBrZXkgPSBzdGQ6Om1ha2VfdHVwbGUocmVxdWVzdC0+YnVuZGxl
SWRlbnRpZmllcigpLCByZXF1ZXN0LT5zY29wZSgpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1h
cC5lbnN1cmUoa2V5LCBbXSgpIHsKKyAgICAgICAgcmV0dXJuIERlcXVlPHN0ZDo6dW5pcXVlX3B0
cjxQdXNoU2VydmljZVJlcXVlc3Q+PiB7IH07CisgICAgfSk7CisKKyAgICBhdXRvIGFkZGVkUmVx
dWVzdCA9IHJlcXVlc3QuZ2V0KCk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBl
bmQoV1RGTW92ZShyZXF1ZXN0KSk7CisKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisg
ICAgICAgIGFkZGVkUmVxdWVzdC0+c3RhcnQoKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6Zmlu
aXNoZWRQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiBtYXAsIFB1c2hT
ZXJ2aWNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV90dXBs
ZShyZXF1ZXN0LmJ1bmRsZUlkZW50aWZpZXIoKSwgcmVxdWVzdC5zY29wZSgpKTsKKyAgICBhdXRv
IHJlcXVlc3RRdWV1ZUl0ID0gbWFwLmZpbmQoa2V5KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHJl
cXVlc3RRdWV1ZUl0ICE9IG1hcC5lbmQoKSk7CisgICAgYXV0byYgcmVxdWVzdFF1ZXVlID0gcmVx
dWVzdFF1ZXVlSXQtPnZhbHVlOworICAgIFJFTEVBU0VfQVNTRVJUKHJlcXVlc3RRdWV1ZS5zaXpl
KCkgPiAwKTsKKyAgICBhdXRvIGN1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdFF1ZXVlLnRha2VGaXJz
dCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRSZXF1ZXN0LmdldCgpID09ICZyZXF1ZXN0
KTsKKworICAgIFB1c2hTZXJ2aWNlUmVxdWVzdCogbmV4dFJlcXVlc3QgPSBudWxscHRyOworICAg
IGlmICghcmVxdWVzdFF1ZXVlLnNpemUoKSkKKyAgICAgICAgbWFwLnJlbW92ZShyZXF1ZXN0UXVl
dWVJdCk7CisgICAgZWxzZQorICAgICAgICBuZXh0UmVxdWVzdCA9IHJlcXVlc3RRdWV1ZS5maXJz
dCgpLmdldCgpOworCisgICAgLy8gRXZlbiBpZiB0aGVyZSdzIG5vIG5leHQgcmVxdWVzdCB0byBz
dGFydCwgaG9sZCBvbiB0byBjdXJyZW50UmVxdWVzdCB1bnRpbCB0aGUgbmV4dCB0dXJuIG9mIHRo
ZSBydW4gbG9vcCBzaW5jZSB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGV4ZWN1dGluZyB0aGUgZmlu
aXNoKCkgbWVtYmVyIGZ1bmN0aW9uIG9mIGN1cnJlbnRSZXF1ZXN0LgorICAgIFdvcmtRdWV1ZTo6
bWFpbigpLmRpc3BhdGNoKFtjdXJyZW50UmVxdWVzdCA9IFdURk1vdmUoY3VycmVudFJlcXVlc3Qp
LCBuZXh0UmVxdWVzdF0geworICAgICAgICBpZiAobmV4dFJlcXVlc3QpCisgICAgICAgICAgICBu
ZXh0UmVxdWVzdC0+c3RhcnQoKTsKKyAgICB9KTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6Z2V0
U3Vic2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1
ZXN0KG1fZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdHMsIG1ha2VVbmlxdWU8R2V0U3Vic2NyaXB0aW9u
UmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSkpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZUdldFN1YnNj
cmlwdGlvblJlcXVlc3QoR2V0U3Vic2NyaXB0aW9uUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBm
aW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdChtX2dldFN1YnNjcmlwdGlvblJlcXVlc3RzLCByZXF1
ZXN0KTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVu
ZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxX
ZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1f
c3Vic2NyaWJlUmVxdWVzdHMsIG1ha2VVbmlxdWU8U3Vic2NyaWJlUmVxdWVzdD4oKnRoaXMsIGJ1
bmRsZUlkZW50aWZpZXIsIHNjb3BlLCB2YXBpZFB1YmxpY0tleSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVTdWJzY3JpYmVS
ZXF1ZXN0KFN1YnNjcmliZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZmluaXNoZWRQdXNoU2Vy
dmljZVJlcXVlc3QobV9zdWJzY3JpYmVSZXF1ZXN0cywgcmVxdWVzdCk7Cit9CisKK3ZvaWQgUHVz
aFNlcnZpY2U6OnVuc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9u
SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBX
ZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGVu
cXVldWVQdXNoU2VydmljZVJlcXVlc3QobV91bnN1YnNjcmliZVJlcXVlc3RzLCBtYWtlVW5pcXVl
PFVuc3Vic2NyaWJlUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBzdWJz
Y3JpcHRpb25JZGVudGlmaWVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCit2
b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmli
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV91
bnN1YnNjcmliZVJlcXVlc3RzLCByZXF1ZXN0KTsKK30KKworZW51bSBjbGFzcyBDb250ZW50RW5j
b2RpbmcgeworICAgIEVtcHR5LAorICAgIEFFU0dDTSwKKyAgICBBRVMxMjhHQ00KK307CisKK3N0
cnVjdCBSYXdQdXNoTWVzc2FnZSB7CisgICAgU3RyaW5nIHRvcGljOworICAgIENvbnRlbnRFbmNv
ZGluZyBlbmNvZGluZzsKKworICAgIC8vIE9ubHkgc2V0IGlmIGVuY29kaW5nIGlzIG5vdCBDb250
ZW50RW5jb2Rpbmc6OkVtcHR5LgorICAgIFZlY3Rvcjx1aW50OF90PiBlbmNyeXB0ZWRQYXlsb2Fk
OworCisgICAgLy8gT25seSBzZXQgaWYgZW5jb2RpbmcgaXMgQ29udGVudEVuY29kaW5nOjpBRVNH
Q00uCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlcnZlclB1YmxpY0tleTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gc2FsdDsKKworfTsKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmF3UHVzaE1lc3NhZ2U+
IG1ha2VSYXdQdXNoTWVzc2FnZShOU1N0cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSogdXNlcklu
Zm8pCit7CisgICAgUmF3UHVzaE1lc3NhZ2UgbWVzc2FnZTsKKworICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBtZXNzYWdlLnRvcGljID0gdG9waWM7CisgICAgICAgIE5TU3RyaW5nICpj
b250ZW50RW5jb2RpbmcgPSB1c2VySW5mb1tAImNvbnRlbnRfZW5jb2RpbmciXTsKKyAgICAgICAg
TlNTdHJpbmcgKnBheWxvYWRCYXNlNjQgPSB1c2VySW5mb1tAInBheWxvYWQiXTsKKworICAgICAg
ICBpZiAoIWNvbnRlbnRFbmNvZGluZy5sZW5ndGggfHwgIXBheWxvYWRCYXNlNjQubGVuZ3RoKSB7
CisgICAgICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVudEVuY29kaW5nOjpFbXB0eTsK
KyAgICAgICAgICAgIHJldHVybiBtZXNzYWdlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFtj
b250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAiYWVzMTI4Z2NtIl0pCisgICAgICAgICAg
ICBtZXNzYWdlLmVuY29kaW5nID0gQ29udGVudEVuY29kaW5nOjpBRVMxMjhHQ007CisgICAgICAg
IGVsc2UgaWYgKFtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRvU3RyaW5nOkAiYWVzZ2NtIl0pIHsK
KyAgICAgICAgICAgIG1lc3NhZ2UuZW5jb2RpbmcgPSBDb250ZW50RW5jb2Rpbmc6OkFFU0dDTTsK
KworICAgICAgICAgICAgTlNTdHJpbmcgKnNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCA9IHVzZXJJ
bmZvW0AiYXNfcHVibGlja2V5Il07CisgICAgICAgICAgICBOU1N0cmluZyAqc2FsdEJhc2U2NFVS
TCA9IHVzZXJJbmZvW0AiYXNfc2FsdCJdOworICAgICAgICAgICAgaWYgKCFzZXJ2ZXJQdWJsaWNL
ZXlCYXNlNjRVUkwgfHwgIXNhbHRCYXNlNjRVUkwpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPRyhQdXNoLCAiRHJvcHBpbmcgYWVzZ2NtLWVuY3J5cHRlZCBwdXNoIHdpdGhvdXQgcmVxdWly
ZWQgc2VydmVyIGtleSBhbmQgc2FsdCIpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5
ID0gYmFzZTY0VVJMRGVjb2RlKHNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAgICAgICAg
ICBhdXRvIHNhbHQgPSBiYXNlNjRVUkxEZWNvZGUoc2FsdEJhc2U2NFVSTCk7CisgICAgICAgICAg
ICBpZiAoIXNlcnZlclB1YmxpY0tleSB8fCAhc2FsdCkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfTE9HKFB1c2gsICJEcm9wcGluZyBhZXNnY20tZW5jcnlwdGVkIHB1c2ggd2l0aCBpbXByb3Bl
cmx5IGVuY29kZWQgc2VydmVyIGtleSBhbmQgc2FsdCIpOworICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1lc3NhZ2Uuc2Vy
dmVyUHVibGljS2V5ID0gV1RGTW92ZSgqc2VydmVyUHVibGljS2V5KTsKKyAgICAgICAgICAgIG1l
c3NhZ2Uuc2FsdCA9IFdURk1vdmUoKnNhbHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIHB1c2ggd2l0aCB1bmtub3duIGNvbnRlbnQg
ZW5jb2Rpbmc6ICV7cHVibGljfXMiLCBjb250ZW50RW5jb2RpbmcuVVRGOFN0cmluZyk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgYXV0byBw
YXlsb2FkID0gYmFzZTY0RGVjb2RlKHBheWxvYWRCYXNlNjQpOworICAgICAgICBpZiAoIXBheWxv
YWQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBwdXNoIHdpdGgg
aW1wcm9wZXJseSBlbmNvZGVkIHBheWxvYWQiKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgICAgIH0KKyAgICAgICAgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkID0gV1RG
TW92ZSgqcGF5bG9hZCk7CisgICAgfQorCisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK3ZvaWQg
UHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQdXNoTWVzc2FnZShOU1N0cmluZyogdG9waWMsIE5TRGlj
dGlvbmFyeSogdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBhdXRvIG1lc3NhZ2VSZXN1bHQgPSBtYWtlUmF3UHVzaE1lc3NhZ2Uo
dG9waWMsIHVzZXJJbmZvKTsKKyAgICBpZiAoIW1lc3NhZ2VSZXN1bHQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZGF0YWJhc2UtPmdldFJlY29yZEJ5VG9waWModG9waWMsIFt0aGlzLCBtZXNz
YWdlID0gV1RGTW92ZSgqbWVzc2FnZVJlc3VsdCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mJiByZWNvcmRSZXN1bHQpIG11dGFibGUgeworICAg
ICAgICBpZiAoIXJlY29yZFJlc3VsdCkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwg
IkRyb3BwaW5nIGluY29taW5nIHB1c2ggc2VudCB0byB1bmtub3duIHRvcGljOiAle3NlbnNpdGl2
ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0
byByZWNvcmQgPSBXVEZNb3ZlKCpyZWNvcmRSZXN1bHQpOworCisgICAgICAgIGlmIChtZXNzYWdl
LmVuY29kaW5nID09IENvbnRlbnRFbmNvZGluZzo6RW1wdHkpIHsKKyAgICAgICAgICAgIG1faW5j
b21pbmdQdXNoTWVzc2FnZUhhbmRsZXIocmVjb3JkLmJ1bmRsZUlELCBXZWJLaXQ6OldlYlB1c2hN
ZXNzYWdlIHsgeyB9LCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkgfSk7CisgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgUHVzaENyeXB0bzo6Q2xpZW50S2V5cyBjbGllbnRLZXlzIHsKKyAgICAgICAgICAgIHsg
V1RGTW92ZShyZWNvcmQuY2xpZW50UHVibGljS2V5KSwgV1RGTW92ZShyZWNvcmQuY2xpZW50UHJp
dmF0ZUtleSkgfSwKKyAgICAgICAgICAgIFdURk1vdmUocmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQp
CisgICAgICAgIH07CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRl
Y3J5cHRlZFBheWxvYWQ7CisgICAgICAgIGlmIChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRF
bmNvZGluZzo6QUVTMTI4R0NNKQorICAgICAgICAgICAgZGVjcnlwdGVkUGF5bG9hZCA9IGRlY3J5
cHRBRVMxMjhHQ01QYXlsb2FkKGNsaWVudEtleXMsIG1lc3NhZ2UuZW5jcnlwdGVkUGF5bG9hZCk7
CisgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVudEVuY29kaW5nOjpB
RVNHQ00pCisgICAgICAgICAgICBkZWNyeXB0ZWRQYXlsb2FkID0gZGVjcnlwdEFFU0dDTVBheWxv
YWQoY2xpZW50S2V5cywgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXksIG1lc3NhZ2Uuc2FsdCwgbWVz
c2FnZS5lbmNyeXB0ZWRQYXlsb2FkKTsKKworICAgICAgICBpZiAoIWRlY3J5cHRlZFBheWxvYWQp
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBpbmNvbWluZyBwdXNo
IGR1ZSB0byBkZWNyeXB0aW9uIGVycm9yIGZvciB0b3BpYyAle3NlbnNpdGl2ZX1zIiwgbWVzc2Fn
ZS50b3BpYy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2luY29taW5nUHVz
aE1lc3NhZ2VIYW5kbGVyKHJlY29yZC5idW5kbGVJRCwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSB7
IFdURk1vdmUoKmRlY3J5cHRlZFBheWxvYWQpLCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkgfSk7
CisKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNl
cnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29u
bmVjdGlvbi5oCmluZGV4IDJjMTQxNDRjNjFiYjNlZmFlNGVkMzI4ZTE1MjBkM2VjZjA4MzE3ZWYu
LjE5ODE0M2Y1Njk3Y2QyOGM2OTI4ZDQ1NjhjMjFjMzI1NDkyMGQyMGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAtMjUsNiArMjUsNyBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaE1lc3NhZ2VDcnlwdG8u
aD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTQ3LDYgKzQ4LDggQEAgcHVibGlj
OgogICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbigpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIH5Q
dXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OlB1c2hDcnlwdG86OkNsaWVudEtleXMgZ2VuZXJhdGVDbGllbnRLZXlzKCk7CisKICAgICB1c2lu
ZyBTdWJzY3JpYmVIYW5kbGVyID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChOU1N0cmluZyAqLCBO
U0Vycm9yICopPjsKICAgICB2aXJ0dWFsIHZvaWQgc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9w
aWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFN1YnNjcmliZUhhbmRs
ZXImJikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25u
ZWN0aW9uLm1tCmluZGV4IDUzNDMzMjVlYjVlYTIwM2U4ZGY2ZmY4MzAzY2I5YjBmZmM4MTMyMWIu
LjkyZjgxNDI3N2E4MzgxNTMxNjg4YjBlNDg1MTgyZDQzZDg1Y2M4NjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCkBAIC0yOCw4ICsyOCwx
NSBAQAogCiAjaW1wb3J0IDx3dGYvV29ya1F1ZXVlLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCiBuYW1lc3BhY2UgV2ViUHVzaEQgewogCitQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIFB1
c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2VuZXJhdGVDbGllbnRLZXlzKCkKK3sKKyAgICByZXR1cm4g
UHVzaENyeXB0bzo6Q2xpZW50S2V5czo6Z2VuZXJhdGUoKTsKK30KKwogdm9pZCBQdXNoU2Vydmlj
ZUNvbm5lY3Rpb246OnN0YXJ0TGlzdGVuaW5nRm9yUHVzaE1lc3NhZ2VzKEluY29taW5nUHVzaE1l
c3NhZ2VIYW5kbGVyJiYgaGFuZGxlcikKIHsKICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5k
bGVyID0gV1RGTW92ZShoYW5kbGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvV2ViUHVzaERhZW1vbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9u
LmgKaW5kZXggYWYzMTg1N2RiODczN2E5YjY0Mzk1ZmIwMDA0NzUwYTk1OGU1NDhkMC4uMDI4MDg0
ZTUyYjRhMGRiYjNjMTQ5YmU2Yzk3MzZmNzU3NWU3ODdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9XZWJQdXNoRGFlbW9uLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlB1c2hDbGll
bnRDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmgiCisjaW5j
bHVkZSAiUHVzaFNlcnZpY2UuaCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNv
bmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgiCiAjaW5j
bHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKQEAgLTYxLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvbm5lY3Rpb25BZGRlZCh4cGNfY29ubmVjdGlvbl90KTsKICAgICB2b2lkIGNvbm5lY3Rp
b25SZW1vdmVkKHhwY19jb25uZWN0aW9uX3QpOwogCisgICAgdm9pZCBzdGFydE1vY2tQdXNoU2Vy
dmljZSgpOworICAgIHZvaWQgc3RhcnRQdXNoU2VydmljZShjb25zdCBTdHJpbmcmIGluY29taW5n
UHVzaFNlcnZpY2VOYW1lLCBjb25zdCBTdHJpbmcmIHB1c2hEYXRhYmFzZVBhdGgpOworICAgIHZv
aWQgaGFuZGxlSW5jb21pbmdQdXNoKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2Vi
S2l0OjpXZWJQdXNoTWVzc2FnZSYmKTsKKwogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKICAgICB2
b2lkIGVjaG9Ud2ljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCBy
ZXF1ZXN0U3lzdGVtTm90aWZpY2F0aW9uUGVybWlzc2lvbihDbGllbnRDb25uZWN0aW9uKiwgY29u
c3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiByZXBseVNlbmRlcik7
CkBAIC02OSw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERlYnVnTW9kZUlzRW5hYmxl
ZChDbGllbnRDb25uZWN0aW9uKiwgYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uQ29u
ZmlndXJhdGlvbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgV2ViUHVzaERhZW1vbkNvbm5lY3Rp
b25Db25maWd1cmF0aW9uJik7CiAgICAgdm9pZCBpbmplY3RQdXNoTWVzc2FnZUZvclRlc3Rpbmco
Q2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFB1c2hNZXNzYWdlRm9yVGVzdGluZyYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgaW5qZWN0RW5jcnlwdGVkUHVzaE1l
c3NhZ2VGb3JUZXN0aW5nKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIGdldFBlbmRpbmdQdXNoTWVzc2Fn
ZXMoQ2xpZW50Q29ubmVjdGlvbiosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9y
PFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+Jik+JiYgcmVwbHlTZW5kZXIpOwogICAgIHZvaWQgc3Vi
c2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVS
TCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhcHBsaWNhdGlvblNlcnZlcktleSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0
YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCB1
bnN1YnNjcmliZUZyb21QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBz
Y29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4m
KT4mJiByZXBseVNlbmRlcik7CkBAIC04OCw5ICs5NCwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGNvbnN0IFN0cmluZyYgY2xpZW50
Q29kZVNpZ25pbmdJZGVudGlmaWVyKTsKIAorICAgIHZvaWQgc2V0UHVzaFNlcnZpY2Uoc3RkOjp1
bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKTsKKyAgICB2b2lkIHJ1bkFmdGVyU3RhcnRpbmdQdXNo
U2VydmljZShGdW5jdGlvbjx2b2lkKCk+JiYpOworCiAgICAgQ2xpZW50Q29ubmVjdGlvbiogdG9D
bGllbnRDb25uZWN0aW9uKHhwY19jb25uZWN0aW9uX3QpOwogICAgIEhhc2hNYXA8eHBjX2Nvbm5l
Y3Rpb25fdCwgUmVmPENsaWVudENvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25NYXA7CiAKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+IG1fcHVzaFNlcnZpY2U7CisgICAgYm9vbCBtX3B1
c2hTZXJ2aWNlU3RhcnRlZCB7IGZhbHNlIH07CisgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgpPj4g
bV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnM7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVj
dG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+PiBtX3B1c2hNZXNzYWdlczsKICAgICBIYXNoTWFw
PFN0cmluZywgRGVxdWU8UHVzaE1lc3NhZ2VGb3JUZXN0aW5nPj4gbV90ZXN0aW5nUHVzaE1lc3Nh
Z2VzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFl
bW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IGE4
ZmU0OWY1MmQ3NjMyNjYzMWNhYzdkNzY2YzA5MTQ5NWU5Y2U1NWUuLmFkZDZlM2Q4YWRmZWE4OTk4
ODhmNGJhZjYxYWNjMDUzMTM2M2RjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvV2ViUHVzaERhZW1vbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hE
YWVtb24ubW0KQEAgLTQwLDYgKzQwLDcgQEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2ltcG9ydCA8d3RmL1NwYW4uaD4KICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0
Zi9Xb3JrUXVldWUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDo6V2ViUHVzaEQ7CiAKQEAg
LTkxLDYgKzkyLDExIEBAIEFSR1VNRU5UUyhQdXNoTWVzc2FnZUZvclRlc3RpbmcpCiBSRVBMWShi
b29sKQogRU5ECiAKK0ZVTkNUSU9OKGluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGlu
ZykKK0FSR1VNRU5UUyhTdHJpbmcpCitSRVBMWShib29sKQorRU5ECisKIEZVTkNUSU9OKHN1YnNj
cmliZVRvUHVzaFNlcnZpY2UpCiBBUkdVTUVOVFMoVVJMLCBWZWN0b3I8dWludDhfdD4pCiBSRVBM
WShjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YT4mKQpAQCAtMTUxLDYgKzE1NywxMyBAQCBXZWJQdXNoRDo6RW5jb2RlZE1l
c3NhZ2UgaW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBseShib29sIHJlcGx5
KQogICAgIHJldHVybiBlbmNvZGVyLnRha2VCdWZmZXIoKTsKIH0KIAorV2ViUHVzaEQ6OkVuY29k
ZWRNZXNzYWdlIGluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzo6ZW5jb2RlUmVw
bHkoYm9vbCByZXBseSkKK3sKKyAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOwor
ICAgIGVuY29kZXIgPDwgcmVwbHk7CisgICAgcmV0dXJuIGVuY29kZXIudGFrZUJ1ZmZlcigpOwor
fQorCiBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczo6ZW5j
b2RlUmVwbHkoY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+JiByZXBseSkKIHsK
ICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOwpAQCAtMjI0LDYgKzIzNyw1MSBA
QCBEYWVtb24mIERhZW1vbjo6c2luZ2xldG9uKCkKICAgICByZXR1cm4gZGFlbW9uOwogfQogCit2
b2lkIERhZW1vbjo6c3RhcnRNb2NrUHVzaFNlcnZpY2UoKQoreworICAgIGF1dG8gbWVzc2FnZUhh
bmRsZXIgPSBbdGhpc10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6Oldl
YlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVu
ZGxlSWRlbnRpZmllciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2Vydmlj
ZTo6Y3JlYXRlTW9ja1NlcnZpY2UoV1RGTW92ZShtZXNzYWdlSGFuZGxlciksIFt0aGlzXShhdXRv
JiYgcHVzaFNlcnZpY2UpIG11dGFibGUgeworICAgICAgICBzZXRQdXNoU2VydmljZShXVEZNb3Zl
KHB1c2hTZXJ2aWNlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpzdGFydFB1c2hTZXJ2
aWNlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VQYXRoKQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3Qg
U3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2Fn
ZSkgeworICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92
ZShtZXNzYWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6Y3JlYXRlKGluY29taW5nUHVz
aFNlcnZpY2VOYW1lLCBkYXRhYmFzZVBhdGgsIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBbdGhp
c10oYXV0byYmIHB1c2hTZXJ2aWNlKSBtdXRhYmxlIHsKKyAgICAgICAgc2V0UHVzaFNlcnZpY2Uo
V1RGTW92ZShwdXNoU2VydmljZSkpOworICAgIH0pOworfQorCit2b2lkIERhZW1vbjo6c2V0UHVz
aFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmIHB1c2hTZXJ2aWNlKQorewor
ICAgIG1fcHVzaFNlcnZpY2UgPSBXVEZNb3ZlKHB1c2hTZXJ2aWNlKTsKKyAgICBtX3B1c2hTZXJ2
aWNlU3RhcnRlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVuY3Rp
b25zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlz
cGF0Y2goW3RoaXNdKCkgeworICAgICAgICB3aGlsZSAobV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5j
dGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBhdXRvIGZ1bmN0aW9uID0gbV9wZW5kaW5nUHVz
aFNlcnZpY2VGdW5jdGlvbnMudGFrZUZpcnN0KCk7CisgICAgICAgICAgICBmdW5jdGlvbigpOwor
ICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpydW5BZnRlclN0YXJ0aW5nUHVz
aFNlcnZpY2UoRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQoreworICAgIGlmICghbV9wdXNo
U2VydmljZVN0YXJ0ZWQpIHsKKyAgICAgICAgbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMu
YXBwZW5kKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBm
dW5jdGlvbigpOworfQorCiB2b2lkIERhZW1vbjo6YnJvYWRjYXN0RGVidWdNZXNzYWdlKEpTQzo6
TWVzc2FnZUxldmVsIG1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAg
IGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51
bGxwdHIsIG51bGxwdHIsIDApKTsKQEAgLTMyNSw2ICszODMsOSBAQCB2b2lkIERhZW1vbjo6ZGVj
b2RlQW5kSGFuZGxlTWVzc2FnZSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VU
eXBlIG1lcwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGlu
ZzoKICAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjpp
bmplY3RQdXNoTWVzc2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNz
YWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVz
c2FnZVR5cGU6OkluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKKyAgICAgICAg
aGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjppbmplY3RFbmNyeXB0
ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdl
LCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVzc2Fn
ZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVzc2FnZXM6CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVz
c2FnZVdpdGhSZXBseTxNZXNzYWdlSW5mbzo6Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcz4oY2xpZW50
Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKICAgICAg
ICAgYnJlYWs7CkBAIC00MzEsNiArNDkyLDQ2IEBAIHZvaWQgRGFlbW9uOjppbmplY3RQdXNoTWVz
c2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgUHVzCiAg
ICAgcmVwbHlTZW5kZXIodHJ1ZSk7CiB9CiAKK3ZvaWQgRGFlbW9uOjppbmplY3RFbmNyeXB0ZWRQ
dXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIHJlcGx5U2Vu
ZGVyKQoreworICAgIGlmICghY29ubmVjdGlvbi0+aG9zdEFwcEhhc1B1c2hJbmplY3RFbnRpdGxl
bWVudCgpKSB7CisgICAgICAgIGNvbm5lY3Rpb24tPmJyb2FkY2FzdERlYnVnTWVzc2FnZSgiQXR0
ZW1wdGluZyB0byBpbmplY3QgYSBwdXNoIG1lc3NhZ2UgZnJvbSBhbiB1bmVudGl0bGVkIHByb2Nl
c3MiKTsKKyAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBtZXNzYWdlID0gbWVz
c2FnZSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNlbmRlcihmYWxz
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGJ5dGVz
ID0gbWVzc2FnZS51dGY4KCk7CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGEgPSBhZG9w
dE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzLmRhdGEoKSBsZW5ndGg6IGJ5
dGVzLmxlbmd0aCgpXSk7CisKKyAgICAgICAgaWQgb2JqID0gW05TSlNPTlNlcmlhbGl6YXRpb24g
SlNPTk9iamVjdFdpdGhEYXRhOmRhdGEuZ2V0KCkgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOwor
ICAgICAgICBpZiAoIW9iaiB8fCAhW29iaiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xh
c3NdXSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIE5TTG9nKEAiZ290IG9iajogJUAiLCBvYmopOworCisg
ICAgICAgIG1fcHVzaFNlcnZpY2UtPmRpZFJlY2VpdmVQdXNoTWVzc2FnZShvYmpbQCJ0b3BpYyJd
LCBvYmpbQCJ1c2VySW5mbyJdLCBbcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKHRydWUpOworICAgICAgICB9KTsK
KyAgICB9KTsKK30KKwordm9pZCBEYWVtb246OmhhbmRsZUluY29taW5nUHVzaChjb25zdCBTdHJp
bmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJiBtZXNzYWdlKQor
eworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9wdXNoTWVzc2FnZXMuZW5zdXJlKGJ1bmRsZUlkZW50
aWZpZXIsIFtdIHsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdl
PiB7IH07CisgICAgfSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RG
TW92ZShtZXNzYWdlKSk7CisKKyAgICBub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxl
KGJ1bmRsZUlkZW50aWZpZXIpOworfQorCiB2b2lkIERhZW1vbjo6bm90aWZ5Q2xpZW50UHVzaE1l
c3NhZ2VJc0F2YWlsYWJsZShjb25zdCBTdHJpbmcmIGNsaWVudENvZGVTaWduaW5nSWRlbnRpZmll
cikKIHsKICNpZiBQTEFURk9STShNQUMpCkBAIC00NjIsNiArNTYzLDkgQEAgdm9pZCBEYWVtb246
OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29t
cGxldGlvbkhhbmQKIAogICAgIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiByZXN1bHRN
ZXNzYWdlczsKIAorICAgIGlmIChhdXRvIGl0ZXJhdG9yID0gbV9wdXNoTWVzc2FnZXMuZmluZCho
b3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKTsgaXRlcmF0b3IgIT0gbV9wdXNoTWVzc2FnZXMu
ZW5kKCkpCisgICAgICAgIHN0ZDo6c3dhcChyZXN1bHRNZXNzYWdlcywgaXRlcmF0b3ItPnZhbHVl
KTsKKwogICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Rlc3RpbmdQdXNoTWVzc2FnZXMuZmluZChob3N0
QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV90ZXN0aW5n
UHVzaE1lc3NhZ2VzLmVuZCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IGl0ZXJh
dG9yLT52YWx1ZSkgewpAQCAtNDc2LDI1ICs1ODAsNTAgQEAgdm9pZCBEYWVtb246OmdldFBlbmRp
bmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhh
bmQKICAgICByZXBseVNlbmRlcihXVEZNb3ZlKHJlc3VsdE1lc3NhZ2VzKSk7CiB9CiAKLXZvaWQg
RGFlbW9uOjpzdWJzY3JpYmVUb1B1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rp
b24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXBwbGljYXRp
b25TZXJ2ZXJLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29y
ZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVw
bHlTZW5kZXIpCit2b2lkIERhZW1vbjo6c3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25u
ZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIHZhcGlkUHVibGljS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVj
dGVkPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRh
PiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIFVOVVNFRF9QQVJBTShhcHBsaWNhdGlvblNlcnZl
cktleSk7Ci0gICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9u
RGF0YSB7IFdlYkNvcmU6Ok5vdEFsbG93ZWRFcnJvciwgIkxhY2sgcGVybWlzc2lvbiJfcyB9KSk7
CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVy
ID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNj
b3BlVVJMLnN0cmluZygpLCB2YXBpZFB1YmxpY0tleSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJl
cGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7Cisg
ICAgICAgICAgICByZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25E
YXRhIHsgV2ViQ29yZTo6SW52YWxpZFN0YXRlRXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6
YXRpb24gZmFpbGVkIl9zIH0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fcHVzaFNlcnZpY2UtPnN1YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwg
dmFwaWRQdWJsaWNLZXksIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyAgICB9KTsKIH0KIAotdm9p
ZCBEYWVtb246OnVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNv
bm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25J
ZGVudGlmaWVyIHB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVw
bHlTZW5kZXIpCit2b2lkIERhZW1vbjo6dW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVz
aFN1YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRh
PiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICBydW5B
ZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIGJ1bmRsZUlkZW50aWZpZXIgPSBjb25uZWN0
aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCksIHNjb3BlID0gc2NvcGVVUkwuc3Ry
aW5nKCksIHN1YnNjcmlwdGlvbklkZW50aWZpZXIsIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBs
eVNlbmRlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAg
ICAgICAgICAgcmVwbHlTZW5kZXIobWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVycm9yLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0
aW9uIGZhaWxlZCJfcyB9KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBtX3B1c2hTZXJ2aWNlLT51bnN1YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwg
c3Vic2NyaXB0aW9uSWRlbnRpZmllciwgV1RGTW92ZShyZXBseVNlbmRlcikpOworICAgIH0pOwog
fQogCiB2b2lkIERhZW1vbjo6Z2V0UHVzaFN1YnNjcmlwdGlvbihDbGllbnRDb25uZWN0aW9uKiBj
b25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+
LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5
U2VuZGVyKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+IHsgfSk7
CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVy
ID0gY29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNj
b3BlVVJMLnN0cmluZygpLCByZXBseVNlbmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11
dGFibGUgeworICAgICAgICBpZiAoIW1fcHVzaFNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJlcGx5
U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJ
bnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2VydmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQiX3Mg
fSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9wdXNoU2Vy
dmljZS0+Z2V0U3Vic2NyaXB0aW9uKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJl
cGx5U2VuZGVyKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgRGFlbW9uOjpnZXRQdXNoUGVybWlzc2lv
blN0YXRlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8dWludDhfdCwgV2ViQ29yZTo6
RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKIHsKKyAgICAvLyBGSVhNRQorI2lmIEhB
VkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JUKQorICAgIHJlcGx5U2VuZGVy
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdlYkNvcmU6OlB1c2hQZXJtaXNzaW9uU3RhdGU6OkdyYW50
ZWQpKTsKKyNlbHNlCiAgICAgcmVwbHlTZW5kZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oV2ViQ29y
ZTo6UHVzaFBlcm1pc3Npb25TdGF0ZTo6RGVuaWVkKSk7CisjZW5kaWYKIH0KIAogQ2xpZW50Q29u
bmVjdGlvbiogRGFlbW9uOjp0b0NsaWVudENvbm5lY3Rpb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25u
ZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9u
TWFpbi5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oCmluZGV4
IGJiZWI5NjhkZTdhNzU5ZGRmMjc2ZmMxYmE2N2QyOGI2NjZhNDg2NDAuLmQzYzE3ZTY1ZGEzYWVj
NTI0NGFiOTE2MTNiYWMzY2Y2ZTllYWEyNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvV2ViUHVzaERhZW1vbk1haW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dl
YlB1c2hEYWVtb25NYWluLmgKQEAgLTI3LDYgKzI3LDYgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQsIGNvbnN0IGNoYXIqKik7CitpbnQgV2ViUHVz
aERhZW1vbk1haW4oaW50LCBjaGFyKiopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0gYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tCmluZGV4IDJhNjhlMThmYTIw
MTUwNjYyMGQxYzM4MTc0NDExZWIwYWEyYmRjNTkuLjg5MjhkOGZjOTQwZmFlZjgxYTgzNGUzMDk0
NWMzNTYwNzMyN2FhY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbk1haW4ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9u
TWFpbi5tbQpAQCAtMzAsMjQgKzMwLDIxIEBACiAjaW1wb3J0ICJEYWVtb25EZWNvZGVyLmgiCiAj
aW1wb3J0ICJEYWVtb25FbmNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25VdGlsaXRpZXMuaCIKKyNp
bXBvcnQgIkxvZ0luaXRpYWxpemF0aW9uLmgiCiAjaW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCiAj
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9nSW5p
dGlhbGl6YXRpb24uaD4KKyNpbXBvcnQgPGdldG9wdC5oPgorI2ltcG9ydCA8d3RmL0xvZ0luaXRp
YWxpemF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL3Nw
aS9kYXJ3aW4vWFBDU1BJLmg+CiAKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9y
dCA8c2VydmVycy9ib290c3RyYXAuaD4KLSNlbHNlCi0jaW1wb3J0IDxtYWNoL3N0ZF90eXBlcy5o
PgotZXh0ZXJuICJDIiB7Ci1leHRlcm4ga2Vybl9yZXR1cm5fdCBib290c3RyYXBfY2hlY2tfaW4o
bWFjaF9wb3J0X3QgYm9vdHN0cmFwUG9ydCwgY29uc3QgY2hhciAqc2VydmljZU5hbWUsIG1hY2hf
cG9ydF90Kik7Ci19Ci0jZW5kaWYKLQogdXNpbmcgV2ViS2l0OjpEYWVtb246OkVuY29kZWRNZXNz
YWdlOwogdXNpbmcgV2ViUHVzaEQ6OkRhZW1vbjsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmluY29t
aW5nUHVzaFNlcnZpY2VOYW1lID0gImNvbS5hcHBsZS5hcHMud2Via2l0LndlYnB1c2hkLmluY29t
aW5nLXB1c2giOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBlbnRpdGxlbWVudE5hbWUgPSAi
Y29tLmFwcGxlLnByaXZhdGUud2Via2l0LndlYnB1c2giX3M7CitzdGF0aWMgY29uc3QgQVNDSUlM
aXRlcmFsIGRlZmF1bHRNYWNoU2VydmljZU5hbWUgPSAiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNo
ZC5zZXJ2aWNlIl9zOworc3RhdGljIGNvbnN0IEFTQ0lJTGl0ZXJhbCBkZWZhdWx0SW5jb21pbmdQ
dXNoU2VydmljZU5hbWUgPSAiY29tLmFwcGxlLmFwcy53ZWJraXQud2VicHVzaGQuaW5jb21pbmct
cHVzaCJfczsKIAogbmFtZXNwYWNlIFdlYlB1c2hEIHsKIApAQCAtNzQsMjMgKzcxLDU1IEBAIHVz
aW5nIFdlYlB1c2hEOjpjb25uZWN0aW9uUmVtb3ZlZDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWludCBXZWJQdXNoRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQg
V2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIGlmIChhcmdj
ICE9IDMgfHwgc3RyY21wKGFyZ3ZbMV0sICItLW1hY2hTZXJ2aWNlTmFtZSIpKSB7Ci0gICAgICAg
IE5TTG9nKEAidXNhZ2U6IHdlYnB1c2hkIC0tbWFjaFNlcnZpY2VOYW1lIDxuYW1lPiIpOwotICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIG1hY2hTZXJ2aWNlTmFtZSA9
IGFyZ3ZbMl07Ci0KICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgV2ViS2l0OjpzdGFy
dExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCAiY29t
LmFwcGxlLnByaXZhdGUud2Via2l0LndlYnB1c2giLCBjb25uZWN0aW9uQWRkZWQsIGNvbm5lY3Rp
b25SZW1vdmVkLCBjb25uZWN0aW9uRXZlbnRIYW5kbGVyKTsKLQotICAgICAgICAvLyBUT0RPOiBy
ZW1vdmUgdGhpcyBvbmNlIHdlIGFjdHVhbGx5IHN0YXJ0IHVzaW5nIEFQU0Nvbm5lY3Rpb24uCi0g
ICAgICAgIG1hY2hfcG9ydF90IGluY29taW5nTWVzc2FnZVBvcnQ7Ci0gICAgICAgIGlmIChib290
c3RyYXBfY2hlY2tfaW4oYm9vdHN0cmFwX3BvcnQsIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCAm
aW5jb21pbmdNZXNzYWdlUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQotICAgICAgICAgICAgTlNMb2co
QCJDb3VsZG4ndCByZWdpc3RlciBmb3IgaW5jb21pbmcgcHVzaCBsYXVuY2ggcG9ydC4iKTsKLSAg
ICAgICAgCiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKworI2lmICFMT0df
RElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgIFdURjo6bG9nQ2hhbm5l
bHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBXZWJDb3Jl
Ojpsb2dDaGFubmVscygpLmluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisgICAg
ICAgIFdlYktpdDo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2Fy
eSgpOworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisK
KyAgICAgICAgc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworICAgICAgICAgICAg
eyAibWFjaFNlcnZpY2VOYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQsIDAsICdtJyB9LAorICAgICAg
ICAgICAgeyAiaW5jb21pbmdQdXNoU2VydmljZU5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwg
J3AnIH0sCisgICAgICAgICAgICB7ICJ1c2VNb2NrUHVzaFNlcnZpY2UiLCBub19hcmd1bWVudCwg
MCwgJ2YnIH0KKyAgICAgICAgfTsKKworICAgICAgICBjb25zdCBjaGFyKiBtYWNoU2VydmljZU5h
bWUgPSBkZWZhdWx0TWFjaFNlcnZpY2VOYW1lOworICAgICAgICBjb25zdCBjaGFyKiBpbmNvbWlu
Z1B1c2hTZXJ2aWNlTmFtZSA9IGRlZmF1bHRJbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZTsKKyAgICAg
ICAgYm9vbCB1c2VNb2NrUHVzaFNlcnZpY2UgPSBmYWxzZTsKKworICAgICAgICBpbnQgYzsKKyAg
ICAgICAgaW50IG9wdGlvbkluZGV4OworICAgICAgICB3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhh
cmdjLCBhcmd2LCAiIiwgb3B0aW9ucywgJm9wdGlvbkluZGV4KSkgIT0gLTEpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAg
bWFjaFNlcnZpY2VOYW1lID0gb3B0YXJnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgaW5jb21pbmdQdXNoU2VydmljZU5hbWUg
PSBvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdmJzoK
KyAgICAgICAgICAgICAgICB1c2VNb2NrUHVzaFNlcnZpY2UgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIlVua25vd24gb3B0aW9uOiAlY1xuIiwgb3B0b3B0KTsKKyAgICAgICAgICAgICAg
ICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgV2ViS2l0Ojpz
dGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNlQ29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCBl
bnRpdGxlbWVudE5hbWUsIGNvbm5lY3Rpb25BZGRlZCwgY29ubmVjdGlvblJlbW92ZWQsIGNvbm5l
Y3Rpb25FdmVudEhhbmRsZXIpOworCisgICAgICAgIGlmICh1c2VNb2NrUHVzaFNlcnZpY2UpCisg
ICAgICAgICAgICA6OldlYlB1c2hEOjpEYWVtb246OnNpbmdsZXRvbigpLnN0YXJ0TW9ja1B1c2hT
ZXJ2aWNlKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGxpYnJhcnlQYXRo
ID0gTlNTZWFyY2hQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5
LCBOU1VzZXJEb21haW5NYXNrLCBZRVMpWzBdOworICAgICAgICAgICAgU3RyaW5nIHB1c2hEYXRh
YmFzZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKGxpYnJhcnlQ
YXRoLCB7ICJXZWJLaXQiLCAiV2ViUHVzaCIsICJQdXNoRGF0YWJhc2UuZGIiIH0pOworICAgICAg
ICAgICAgOjpXZWJQdXNoRDo6RGFlbW9uOjpzaW5nbGV0b24oKS5zdGFydFB1c2hTZXJ2aWNlKGlu
Y29taW5nUHVzaFNlcnZpY2VOYW1lLCBwdXNoRGF0YWJhc2VQYXRoKTsKKyAgICAgICAgfQogICAg
IH0KICAgICBDRlJ1bkxvb3BSdW4oKTsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QgYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL2NvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0
CmluZGV4IGY3MWU1OWE0MDdmM2UzYTg5MDgwMGFlM2Y0MWUwODU1ZTUwYTdiMmEuLmIyNWFiZmY1
YThlNGJkYjhmMTkyYjlmMDVlNTg0NzM5NWQzNDE1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QKKysrIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9jb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdApA
QCAtMTksNyArMTksNyBAQAogCTxzdHJpbmc+QWRhcHRpdmU8L3N0cmluZz4KIAk8a2V5PlByb2dy
YW1Bcmd1bWVudHM8L2tleT4KIAk8YXJyYXk+Ci0JCTxzdHJpbmc+L1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvV2ViS2l0LmZyYW1ld29yay9EYWVtb25zL3dlYnB1c2hkPC9zdHJpbmc+CisJCTxz
dHJpbmc+L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvV2ViS2l0LmZyYW1ld29yay9WZXJzaW9u
cy9BL0RhZW1vbnMvd2VicHVzaGQ8L3N0cmluZz4KIAkJPHN0cmluZz4tLW1hY2hTZXJ2aWNlTmFt
ZTwvc3RyaW5nPgogCQk8c3RyaW5nPmNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQuc2VydmljZTwv
c3RyaW5nPgogCTwvYXJyYXk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL3dl
YnB1c2hkLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwCmluZGV4IGZk
MDRlNDA0NTg1OThlYzg3MzlhYzBmM2U5YThiOGYzZmJjYTFlYjguLjU5Y2VmMGQ5ODQzMDU1NjVh
ZWFkMThjMjEyMmFkM2RmZmUxNTk2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvd2VicHVzaGQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3Bw
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLTWFpbi5oPgogI2luY2x1ZGUg
PG9zL2F2YWlsYWJpbGl0eS5oPgogCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFy
Z3YpCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgV0tXZWJQdXNoRGFl
bW9uTWFpbihhcmdjLCBhcmd2KTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA1NjExOGU3NzE0M2RiZjg2NDMwOTIxMzdlMTdhOTkzY2ZiYjcw
Mzg0Li4wNTg1MmFmZDEzMGZmNWQ1MzAxMWY2ZWRkZTg3MmViNjNjYTMyNDI0IDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAK
KzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1
c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCisKKyAgICAgICAg
IC0gTW9kaWZlZCB0aGUgZXhpc3RpbmcgaW5qZWN0ZWQgcHVzaCB0ZXN0IHRvIGluamVjdCBkaWZm
ZXJlbnQgdHlwZXMgb2YgcmVhbCBwdXNoIG9iamVjdHMKKyAgICAgICAgICAgZnJvbSBBUFMgKGFu
IGVtcHR5IHB1c2gsIGFuIGFlc2djbS1lbmNyeXB0ZWQgcHVzaCwgYW5kIGFuIGFlczEyOGdjbS1l
bmNyeXB0ZWQgcHVzaCkuCisgICAgICAgICAtIEFkZCBhIGZldyBiYXNpYyB0ZXN0IGNhc2VzIGZv
ciBzdWJzY3JpYmluZyBhbmQgdW5zdWJzY3JpYmluZyBmcm9tIHB1c2guCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW06CisgICAgICAg
ICgtW05vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5kbGVyOl0p
OgorICAgICAgICAoLVtOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlciB1c2VyQ29udGVu
dENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjp0ZXN0V2ViUHVzaERhZW1vblBMaXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OmNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnNlbmRN
ZXNzYWdlVG9EYWVtb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2VuZE1lc3NhZ2VUb0Rh
ZW1vbldhaXRpbmdGb3JSZXBseSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZW5kQ29uZmln
dXJhdGlvbldpdGhBdWRpdFRva2VuKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZnVuY3Rpb24pOiBEZWxldGVkLgorCiAyMDIyLTAyLTA0
ICBBcmNhZHkgR29sZG1pbnRzLU9ybG92ICA8YWdvbGRtaW50c0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT04ocjI4MDA3Nyk6IFtHVEtdIEl0IGNhdXNlZCAxNTUgbmV3IHRlc3QgZmFp
bHVyZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
V2ViUHVzaERhZW1vbi5tbQppbmRleCA2ZDkyY2U5Nzg2YWY4MWM3ODRiMTI0NDQxOWU2ZGU2Mjgw
M2NlODIwLi5iN2IzNGI2Y2FhNTQ3YmUzMmEzNzYyOGNjZjFhY2RlZWM2ZjVkNjU5IDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24u
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFl
bW9uLm1tCkBAIC0zNSwxMyArMzUsMTggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQv
V2ViUHVzaERhZW1vbkNvbnN0YW50cy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVyaW1lbnRh
bEZlYXR1cmUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJh
dGlvbi5oPgogI2ltcG9ydCA8bWFjaC9tYWNoX2luaXQuaD4KICNpbXBvcnQgPG1hY2gvdGFzay5o
PgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4K
IAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQogCit1c2luZyBXZWJLaXQ6Oldl
YlB1c2hEOjpNZXNzYWdlVHlwZTsKKwogc3RhdGljIGJvb2wgYWxlcnRSZWNlaXZlZCA9IGZhbHNl
OwogQGludGVyZmFjZSBOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdhdGUgOiBOU09iamVjdDxX
S1VJRGVsZWdhdGVQcml2YXRlPgogQGVuZApAQCAtNjEsNiArNjYsMjYgQEAgLSAodm9pZCl3ZWJW
aWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3Nh
Z2U6KE5TU3RyaW4KIAogQGVuZAogCitAaW50ZXJmYWNlIE5vdGlmaWNhdGlvblNjcmlwdE1lc3Nh
Z2VIYW5kbGVyIDogTlNPYmplY3Q8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4geworICAgIEJsb2Nr
UHRyPHZvaWQoaWQpPiBfbWVzc2FnZUhhbmRsZXI7Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBOb3RpZmljYXRpb25TY3JpcHRNZXNzYWdlSGFuZGxlcgorCistICh2b2lkKXNldE1lc3NhZ2VI
YW5kbGVyOih2b2lkICheKShpZCkpaGFuZGxlcgoreworICAgIF9tZXNzYWdlSGFuZGxlciA9IGhh
bmRsZXI7Cit9CisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50
Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVzc2Fn
ZTooV0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIGlmIChfbWVzc2FnZUhhbmRsZXIp
CisgICAgICAgIF9tZXNzYWdlSGFuZGxlcihtZXNzYWdlLmJvZHkpOworfQorCitAZW5kCisKIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogc3RhdGljIFJldGFpblB0cjxOU1VSTD4gdGVzdFdl
YlB1c2hEYWVtb25Mb2NhdGlvbigpCkBAIC03OSw3ICsxMDQsOCBAQCBzdGF0aWMgTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqdGVzdFdlYlB1c2hEYWVtb25QTGlzdChOU1VSTCAqc3RvcmFn
ZUxvY2F0aQogICAgICAgICBAIlByb2dyYW1Bcmd1bWVudHMiIDogQFsKICAgICAgICAgICAgIHRl
c3RXZWJQdXNoRGFlbW9uTG9jYXRpb24oKS5nZXQoKS5wYXRoLAogICAgICAgICAgICAgQCItLW1h
Y2hTZXJ2aWNlTmFtZSIsCi0gICAgICAgICAgICBAIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVt
b24uc2VydmljZSIKKyAgICAgICAgICAgIEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5z
ZXJ2aWNlIiwKKyAgICAgICAgICAgIEAiLS11c2VNb2NrUHVzaFNlcnZpY2UiCiAgICAgICAgIF0K
ICAgICB9OwogfQpAQCAtMTM1LDI0ICsxNjEsMjQgQEAgc3RhdGljIHZvaWQgY2xlYW5VcFRlc3RX
ZWJQdXNoRChOU1VSTCAqdGVtcERpcikKICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiB9CiAKLXN0
YXRpYyBSZXRhaW5QdHI8eHBjX29iamVjdF90PiBjcmVhdGVNZXNzYWdlRGljdGlvbmFyeSh1aW50
OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCitzdGF0aWMg
UmV0YWluUHRyPHhwY19vYmplY3RfdD4gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkoTWVzc2FnZVR5
cGUgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKIHsKICAgICBh
dXRvIGRpY3Rpb25hcnkgPSBhZG9wdE5TKHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShudWxscHRyLCBu
dWxscHRyLCAwKSk7CiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3VpbnQ2NChkaWN0aW9uYXJ5Lmdl
dCgpLCAicHJvdG9jb2wgdmVyc2lvbiIsIDEpOwotICAgIHhwY19kaWN0aW9uYXJ5X3NldF91aW50
NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlwZSIsIG1lc3NhZ2VUeXBlKTsKKyAgICB4
cGNfZGljdGlvbmFyeV9zZXRfdWludDY0KGRpY3Rpb25hcnkuZ2V0KCksICJtZXNzYWdlIHR5cGUi
LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obWVzc2FnZVR5cGUpKTsKICAgICB4cGNfZGljdGlvbmFy
eV9zZXRfZGF0YShkaWN0aW9uYXJ5LmdldCgpLCAiZW5jb2RlZCBtZXNzYWdlIiwgbWVzc2FnZS5k
YXRhKCksIG1lc3NhZ2Uuc2l6ZSgpKTsKICAgICByZXR1cm4gV1RGTW92ZShkaWN0aW9uYXJ5KTsK
IH0KIAogLy8gVXNlcyBhbiBleGlzdGluZyBjb25uZWN0aW9uIHRvIHRoZSBkYWVtb24gZm9yIGEg
b25lLW9mZiBtZXNzYWdlCi12b2lkIHNlbmRNZXNzYWdlVG9EYWVtb24oeHBjX2Nvbm5lY3Rpb25f
dCBjb25uZWN0aW9uLCB1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IG1lc3NhZ2UpCit2b2lkIHNlbmRNZXNzYWdlVG9EYWVtb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25u
ZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBt
ZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5
KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsKICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGljdGlvbmFyeS5nZXQoKSk7CiB9CiAKIC8vIFVzZXMgYW4gZXhpc3Rpbmcg
Y29ubmVjdGlvbiB0byB0aGUgZGFlbW9uIGZvciBhIG9uZS1vZmYgbWVzc2FnZSwgd2FpdGluZyBm
b3IgdGhlIHJlcGx5Ci12b2lkIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkoeHBj
X2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCB1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIG1lc3NhZ2UpCit2b2lkIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9y
UmVwbHkoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNzYWdlVHlw
ZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFy
eSA9IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsKIApAQCAt
MTgxLDcgKzIwNyw3IEBAIHN0YXRpYyB2b2lkIHNlbmRDb25maWd1cmF0aW9uV2l0aEF1ZGl0VG9r
ZW4oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQogICAgICAgICBlbmNvZGVkTWVzc2FnZVsx
XSA9IDE7CiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzJdID0gMzI7CiAgICAgICAgIG1lbWNweSgm
ZW5jb2RlZE1lc3NhZ2VbMTBdLCAmdG9rZW4sIHNpemVvZih0b2tlbikpOwotICAgICAgICBzZW5k
TWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24sIDYsIGVuY29kZWRNZXNzYWdlKTsKKyAgICAgICAg
c2VuZE1lc3NhZ2VUb0RhZW1vbihjb25uZWN0aW9uLCBNZXNzYWdlVHlwZTo6VXBkYXRlQ29ubmVj
dGlvbkNvbmZpZ3VyYXRpb24sIGVuY29kZWRNZXNzYWdlKTsKICAgICB9CiB9CiAKQEAgLTI1Miw3
ICsyNzgsNyBAQCBURVNUKFdlYlB1c2hELCBCYXNpY0NvbW11bmljYXRpb24pCiAgICAgICAgIGF1
dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51
bGxwdHIsIDApKTsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRNZXNzYWdlKDEpOwog
ICAgICAgICBlbmNvZGVkTWVzc2FnZVswXSA9IDE7Ci0gICAgICAgIHNlbmRNZXNzYWdlVG9EYWVt
b24oY29ubmVjdGlvbi5nZXQoKSwgNSwgZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBzZW5kTWVz
c2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24uZ2V0KCksIE1lc3NhZ2VUeXBlOjpTZXREZWJ1Z01vZGVJ
c0VuYWJsZWQsIGVuY29kZWRNZXNzYWdlKTsKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lKTsKICAgICB9CiAKQEAgLTM2MSw1NCArMzg3LDYgQEAgVEVTVChXZWJQdXNoRCwg
UGVybWlzc2lvbk1hbmFnZW1lbnQpCiAgICAgY2xlYW5VcFRlc3RXZWJQdXNoRCh0ZW1wRGlyZWN0
b3J5KTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIG1haW5TV0J5dGVzID0gUiJTV1JFU09VUkNF
KAotPHNjcmlwdD4KLWZ1bmN0aW9uIGxvZyhtc2cpCi17Ci0gICAgd2luZG93LndlYmtpdC5tZXNz
YWdlSGFuZGxlcnMuc3cucG9zdE1lc3NhZ2UobXNnKTsKLX0KLQotY29uc3QgY2hhbm5lbCA9IG5l
dyBNZXNzYWdlQ2hhbm5lbCgpOwotY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+
IGxvZyhldmVudC5kYXRhKTsKLQotbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9z
dy5qcycpLnRoZW4oKHJlZ2lzdHJhdGlvbikgPT4gewotICAgIGlmIChyZWdpc3RyYXRpb24uYWN0
aXZlKSB7Ci0gICAgICAgIHJlZ2lzdHJhdGlvbi5hY3RpdmUucG9zdE1lc3NhZ2Uoe3BvcnQ6IGNo
YW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5wb3J0Ml0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHdvcmtlciA9IHJlZ2lzdHJhdGlvbi5pbnN0YWxsaW5nOwotICAgIHdvcmtlci5hZGRFdmVu
dExpc3RlbmVyKCdzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod29ya2Vy
LnN0YXRlID09ICdhY3RpdmF0ZWQnKQotICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtw
b3J0OiBjaGFubmVsLnBvcnQyfSwgW2NoYW5uZWwucG9ydDJdKTsKLSAgICB9KTsKLX0pLmNhdGNo
KGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgbG9nKCJSZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6ICIg
KyBlcnJvcik7Ci19KTsKLTwvc2NyaXB0PgotKVNXUkVTT1VSQ0UiOwotCi1zdGF0aWMgY29uc3Qg
Y2hhciogc2NyaXB0Qnl0ZXMgPSBSIlNXUkVTT1VSQ0UoCi1sZXQgcG9ydDsKLXNlbGYuYWRkRXZl
bnRMaXN0ZW5lcigibWVzc2FnZSIsIChldmVudCkgPT4gewotICAgIHBvcnQgPSBldmVudC5kYXRh
LnBvcnQ7Ci0gICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVhZHkiKTsKLX0pOwotc2VsZi5hZGRFdmVu
dExpc3RlbmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7Ci0gICAgdHJ5IHsKLSAgICAgICAgaWYgKCFl
dmVudC5kYXRhKSB7Ci0gICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogbnVs
bCBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3Qg
dmFsdWUgPSBldmVudC5kYXRhLnRleHQoKTsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVj
ZWl2ZWQ6ICIgKyB2YWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSAnU3dlZXQgUG90YXRvZXMn
KQotICAgICAgICAgICAgZXZlbnQud2FpdFVudGlsKFByb21pc2UucmVqZWN0KCdJIHdhbnQgc3dl
ZXQgcG90YXRvZXMnKSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBwb3J0LnBvc3RNZXNz
YWdlKCJHb3QgZXhjZXB0aW9uICIgKyBlKTsKLSAgICB9Ci19KTsKLSlTV1JFU09VUkNFIjsKLQog
c3RhdGljIHZvaWQgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFTdG9yZSAqc3Rv
cmUpCiB7CiAgICAgX19ibG9jayBib29sIGNsZWFyZWRTdG9yZSA9IGZhbHNlOwpAQCAtNDE4LDc2
ICszOTYsMzE1IEBAIHN0YXRpYyB2b2lkIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShXS1dlYnNpdGVE
YXRhU3RvcmUgKnN0b3JlKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2xlYXJlZFN0
b3JlKTsKIH0KIAotVEVTVChXZWJQdXNoRCwgSGFuZGxlSW5qZWN0ZWRQdXNoKQotewotICAgIFtX
S1dlYnNpdGVEYXRhU3RvcmUgX2FsbG93V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2luc107
CitjbGFzcyBXZWJQdXNoRFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3Rl
ZDoKKyAgICBXZWJQdXNoRFRlc3QoKQorICAgIHsKKyAgICAgICAgW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zXTsKIAotICAgIE5TVVJMICp0
ZW1wRGlyZWN0b3J5ID0gc2V0VXBUZXN0V2ViUHVzaEQoKTsKKyAgICAgICAgbV90ZW1wRGlyZWN0
b3J5ID0gcmV0YWluUHRyKHNldFVwVGVzdFdlYlB1c2hEKCkpOwogCi0gICAgYXV0byBkYXRhU3Rv
cmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRp
b24gbmV3XSk7Ci0gICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFjaFNl
cnZpY2VOYW1lID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOwotICAg
IGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaERhZW1vblVzZXNNb2NrQnVuZGxl
c0ZvclRlc3RpbmcgPSBZRVM7Ci0gICAgYXV0byBkYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJz
aXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZp
Z3VyYXRpb24uZ2V0KCldKTsKKyAgICAgICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9uID0g
YWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgICAg
IGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaE1hY2hTZXJ2aWNlTmFtZSA9IEAi
b3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIjsKKyAgICAgICAgZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoRGFlbW9uVXNlc01vY2tCdW5kbGVzRm9yVGVzdGlu
ZyA9IFlFUzsKKyAgICAgICAgbV9kYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0
b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCldKTsKIAotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdD
b25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJhdGlvbi5nZXQoKS53ZWJz
aXRlRGF0YVN0b3JlID0gZGF0YVN0b3JlLmdldCgpOwotICAgIGNsZWFyV2Vic2l0ZURhdGFTdG9y
ZShbY29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0YVN0b3JlXSk7CisgICAgICAgIG1fY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Cisg
ICAgICAgIG1fY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gbV9kYXRhU3Rv
cmUuZ2V0KCk7CisgICAgICAgIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShbbV9jb25maWd1cmF0aW9u
IHdlYnNpdGVEYXRhU3RvcmVdKTsKIAotICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByZWZlcmVu
Y2VzIF9zZXROb3RpZmljYXRpb25zRW5hYmxlZDpZRVNdOwotICAgIGZvciAoX1dLRXhwZXJpbWVu
dGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFsRmVhdHVy
ZXNdKSB7Ci0gICAgICAgIGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiQnVpbHRJ
bk5vdGlmaWNhdGlvbnNFbmFibGVkIl0pCi0gICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJl
ZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JGZWF0dXJlOmZlYXR1cmVdOworICAgICAgICBb
bV9jb25maWd1cmF0aW9uLmdldCgpLnByZWZlcmVuY2VzIF9zZXROb3RpZmljYXRpb25zRW5hYmxl
ZDpZRVNdOworICAgICAgICBmb3IgKF9XS0V4cGVyaW1lbnRhbEZlYXR1cmUgKmZlYXR1cmUgaW4g
W1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1lbnRhbEZlYXR1cmVzXSkgeworICAgICAgICAgICAgaWYg
KFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9uc0VuYWJs
ZWQiXSkKKyAgICAgICAgICAgICAgICBbW21fY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3Nl
dEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgICAgICBlbHNlIGlmIChb
ZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiUHVzaEFQSUVuYWJsZWQiXSkKKyAgICAgICAg
ICAgICAgICBbW21fY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZv
ckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgIH0KKworICAgICAgICBtX3Rlc3RNZXNzYWdlSGFu
ZGxlciA9IGFkb3B0TlMoW1tUZXN0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgW1ttX2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNz
YWdlSGFuZGxlcjptX3Rlc3RNZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdCJdOworCisg
ICAgICAgIG1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbTm90aWZpY2F0
aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW1ttX2NvbmZp
Z3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjpt
X25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJub3RlIl07CiAgICAgfQog
Ci0gICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0TWVzc2FnZUhhbmRsZXIg
YWxsb2NdIGluaXRdKTsKLSAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVy
XSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ci
XTsKLSAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIFttZXNzYWdlSGFuZGxlciBh
ZGRNZXNzYWdlOkAiUmVhZHkiIHdpdGhIYW5kbGVyOl57Ci0gICAgICAgIGRvbmUgPSB0cnVlOwor
ICAgIHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgY2hhciogaHRtbFNvdXJjZSwgY29uc3QgY2hhciog
c2VydmljZVdvcmtlclNjcmlwdFNvdXJjZSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdGFudHMgPSBSIlNSQygKKyAgICAgICAgICAgIGNvbnN0IFZBTElEX1NFUlZFUl9L
RVkgPSAiQkExSHh6eWkxUlVNMWI1d2p4c243bkd4QXN6dzJ1NjFtMTY0aTNNckFJeEhGNllLNWg0
U0RZaWMtZFJ1VV9SQ1BDZkE1YXE5b2pTd2s1WTJFbUNsQlBzIjsKKyAgICAgICAgICAgIGNvbnN0
IFZBTElEX1NFUlZFUl9LRVlfVEhBVF9DQVVTRVNfSU5KRUNURURfRkFJTFVSRSA9ICJCRUF4YVVN
bzFzOHRqT1J4SmZuU1N2V2hZYjR1NTFrZzFoV1Qyc185Z3BWN1p4YXIxcEZfMkJROEFuY3VBZFMy
Qm9MaE40cWF4ekJ5MkN3SEU4QkJ6V2ciOworICAgICAgICApU1JDIjsKKyAgICAgICAgbV9zZXJ2
ZXIucmVzZXQobmV3IFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXIoeworICAgICAgICAgICAgeyAi
LyIsIHsgaHRtbFNvdXJjZSB9IH0sCisgICAgICAgICAgICB7ICIvY29uc3RhbnRzLmpzIiwgeyB7
IHsgIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIGNvbnN0YW50
cyB9IH0sCisgICAgICAgICAgICB7ICIvc3cuanMiLCB7IHsgeyAiQ29udGVudC1UeXBlIiwgImFw
cGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgc2VydmljZVdvcmtlclNjcmlwdFNvdXJjZSB9IH0K
KyAgICAgICAgfSwgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHApKTsK
KworICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bV9jb25maWd1
cmF0aW9uLmdldCgpXSk7CisgICAgICAgIFttX3dlYlZpZXcgbG9hZFJlcXVlc3Q6bV9zZXJ2ZXIt
PnJlcXVlc3QoKV07CisgICAgfQorCisgICAgfldlYlB1c2hEVGVzdCgpCisgICAgeworICAgICAg
ICBjbGVhblVwVGVzdFdlYlB1c2hEKG1fdGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAgfQorCisg
ICAgUmV0YWluUHRyPE5TVVJMPiBtX3RlbXBEaXJlY3Rvcnk7CisgICAgUmV0YWluUHRyPFdLV2Vi
c2l0ZURhdGFTdG9yZT4gbV9kYXRhU3RvcmU7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZp
Z3VyYXRpb24+IG1fY29uZmlndXJhdGlvbjsKKyAgICBSZXRhaW5QdHI8VGVzdE1lc3NhZ2VIYW5k
bGVyPiBtX3Rlc3RNZXNzYWdlSGFuZGxlcjsKKyAgICBSZXRhaW5QdHI8Tm90aWZpY2F0aW9uU2Ny
aXB0TWVzc2FnZUhhbmRsZXI+IG1fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXI7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI+IG1fc2VydmVyOworICAgIFJl
dGFpblB0cjxXS1dlYlZpZXc+IG1fd2ViVmlldzsKK307CisKK2NsYXNzIFdlYlB1c2hESW5qZWN0
ZWRQdXNoVGVzdCA6IHB1YmxpYyBXZWJQdXNoRFRlc3QgeworcHJvdGVjdGVkOgorICAgIHZvaWQg
cnVuVGVzdChOU1N0cmluZyAqZXhwZWN0ZWRNZXNzYWdlLCBOU0RpY3Rpb25hcnkgKnB1c2hVc2Vy
SW5mbyk7Cit9OworCit2b2lkIFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdDo6cnVuVGVzdChOU1N0
cmluZyAqZXhwZWN0ZWRNZXNzYWdlLCBOU0RpY3Rpb25hcnkgKnB1c2hVc2VySW5mbykKK3sKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogaHRtbFNvdXJjZSA9IFIiU1dSRVNPVVJDRSgKKyAgICA8c2Ny
aXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBmdW5j
dGlvbiBsb2cobXNnKQorICAgIHsKKyAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxl
cnMudGVzdC5wb3N0TWVzc2FnZShtc2cpOworICAgIH0KKworICAgIGNvbnN0IGNoYW5uZWwgPSBu
ZXcgTWVzc2FnZUNoYW5uZWwoKTsKKyAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IChldmVu
dCkgPT4gbG9nKGV2ZW50LmRhdGEpOworCisgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVn
aXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCByZWdpc3Ry
YXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKKyAgICAgICAgbGV0
IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUo
eworICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAgYXBwbGlj
YXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgfSk7CisgICAgICAgIHJl
Z2lzdHJhdGlvbi5hY3RpdmUucG9zdE1lc3NhZ2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hh
bm5lbC5wb3J0Ml0pOworICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgIGxv
ZygiUmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoOiAiICsgZXJyb3IpOworICAgIH0pOworICAgIDwv
c2NyaXB0PgorICAgIClTV1JFU09VUkNFIjsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZXJ2
aWNlV29ya2VyU291cmNlID0gUiJTV1JFU09VUkNFKAorICAgIGxldCBwb3J0OworICAgIHNlbGYu
YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChldmVudCkgPT4geworICAgICAgICBwb3J0ID0g
ZXZlbnQuZGF0YS5wb3J0OworICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWFkeSIpOworICAg
IH0pOworICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicHVzaCIsIChldmVudCkgPT4geworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgaWYgKCFldmVudC5kYXRhKSB7CisgICAgICAgICAgICAg
ICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVjZWl2ZWQ6IG51bGwgZGF0YSIpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXZl
bnQuZGF0YS50ZXh0KCk7CisgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDog
IiArIHZhbHVlKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcG9ydC5wb3N0
TWVzc2FnZSgiRXJyb3I6ICIgKyBlKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIClTV1JFU09V
UkNFIjsKKworICAgIF9fYmxvY2sgYm9vbCByZWFkeSA9IGZhbHNlOworICAgIFttX3Rlc3RNZXNz
YWdlSGFuZGxlciBhZGRNZXNzYWdlOkAiUmVhZHkiIHdpdGhIYW5kbGVyOl57CisgICAgICAgIHJl
YWR5ID0gdHJ1ZTsKICAgICB9XTsKLSAgICBbbWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpAIlJl
Y2VpdmVkOiBIZWxsbyBXb3JsZCIgd2l0aEhhbmRsZXI6XnsKLSAgICAgICAgZG9uZSA9IHRydWU7
CisKKyAgICBfX2Jsb2NrIGJvb2wgZ290RXhwZWN0ZWRNZXNzYWdlID0gZmFsc2U7CisgICAgW21f
dGVzdE1lc3NhZ2VIYW5kbGVyIGFkZE1lc3NhZ2U6ZXhwZWN0ZWRNZXNzYWdlIHdpdGhIYW5kbGVy
Ol57CisgICAgICAgIGdvdEV4cGVjdGVkTWVzc2FnZSA9IHRydWU7CiAgICAgfV07CiAKLSAgICBU
ZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyIHNlcnZlcih7Ci0gICAgICAgIHsgIi8iLCB7IG1haW5T
V0J5dGVzIH0gfSwKLSAgICAgICAgeyAiL3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQtVHlwZSIsICJh
cHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIHNjcmlwdEJ5dGVzIH0gfQotICAgIH0sIFRlc3RX
ZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlByb3RvY29sOjpIdHRwKTsKKyAgICBsb2FkUmVxdWVzdCho
dG1sU291cmNlLCBzZXJ2aWNlV29ya2VyU291cmNlKTsKIAotICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgW3dlYlZp
ZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJlcXVlc3QoKV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWFkeSk7CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwot
ICAgIGRvbmUgPSBmYWxzZTsKKyAgICBTdHJpbmcgYnVuZGxlSWRlbnRpZmllciA9ICJjb20uYXBw
bGUuV2ViS2l0LlRlc3RXZWJLaXRBUEkiX3M7CisgICAgU3RyaW5nIHNjb3BlID0gbV9zZXJ2ZXIt
PnJlcXVlc3QoKS5VUkwuYWJzb2x1dGVTdHJpbmc7CisgICAgU3RyaW5nIHRvcGljID0gYnVuZGxl
SWRlbnRpZmllciArICIgIl9zICsgc2NvcGU7CiAKLSAgICAvLyBJbmplY3QgcHVzaCBtZXNzYWdl
Ci0gICAgYXV0byBlbmNvZGVkTWVzc2FnZSA9IGVuY29kZVN0cmluZygiY29tLmFwcGxlLldlYktp
dC5UZXN0V2ViS2l0QVBJIik7Ci0gICAgZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVjdG9yKGVuY29k
ZVN0cmluZyhzZXJ2ZXIucmVxdWVzdCgpLlVSTC5hYnNvbHV0ZVN0cmluZykpOwotICAgIGVuY29k
ZWRNZXNzYWdlLmFwcGVuZFZlY3RvcihlbmNvZGVTdHJpbmcoIkhlbGxvIFdvcmxkIikpOworICAg
IGlkIG9iaiA9IEB7CisgICAgICAgIEAidG9waWMiOiAoTlNTdHJpbmcgKil0b3BpYywKKyAgICAg
ICAgQCJ1c2VySW5mbyI6IHB1c2hVc2VySW5mbworICAgIH07CisgICAgTlNEYXRhICpkYXRhID0g
W05TSlNPTlNlcmlhbGl6YXRpb24gZGF0YVdpdGhKU09OT2JqZWN0Om9iaiBvcHRpb25zOjAgZXJy
b3I6bnVsbHB0cl07CisKKyAgICBTdHJpbmcgbWVzc2FnZSB7IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIgKj4oZGF0YS5ieXRlcyksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhLmxlbmd0aCkgfTsK
KyAgICBhdXRvIGVuY29kZWRNZXNzYWdlID0gZW5jb2RlU3RyaW5nKFdURk1vdmUobWVzc2FnZSkp
OwogCiAgICAgYXV0byB1dGlsaXR5Q29ubmVjdGlvbiA9IGNyZWF0ZUFuZENvbmZpZ3VyZUNvbm5l
Y3Rpb25Ub1NlcnZpY2UoIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSIpOwot
ICAgIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkodXRpbGl0eUNvbm5lY3Rpb24u
Z2V0KCksIDcsIGVuY29kZWRNZXNzYWdlKTsKKyAgICBzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGlu
Z0ZvclJlcGx5KHV0aWxpdHlDb25uZWN0aW9uLmdldCgpLCBNZXNzYWdlVHlwZTo6SW5qZWN0RW5j
cnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLCBlbmNvZGVkTWVzc2FnZSk7CiAKICAgICAvLyBG
ZXRjaCBwdXNoIG1lc3NhZ2VzCisgICAgX19ibG9jayBib29sIGdvdE1lc3NhZ2VzID0gZmFsc2U7
CiAgICAgX19ibG9jayBSZXRhaW5QdHI8TlNBcnJheTxOU0RpY3Rpb25hcnkgKj4+IG1lc3NhZ2Vz
OwotICAgIFtkYXRhU3RvcmUgX2dldFBlbmRpbmdQdXNoTWVzc2FnZXM6XihOU0FycmF5PE5TRGlj
dGlvbmFyeSAqPiAqcmF3TWVzc2FnZXMpIHsKKyAgICBbbV9kYXRhU3RvcmUgX2dldFBlbmRpbmdQ
dXNoTWVzc2FnZXM6XihOU0FycmF5PE5TRGljdGlvbmFyeSAqPiAqcmF3TWVzc2FnZXMpIHsKICAg
ICAgICAgbWVzc2FnZXMgPSByYXdNZXNzYWdlczsKLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAg
ICAgIGdvdE1lc3NhZ2VzID0gdHJ1ZTsKICAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOwotICAgIGRvbmUgPSBmYWxzZTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmdvdE1lc3NhZ2VzKTsKIAogICAgIEVYUEVDVF9FUShbbWVzc2FnZXMgY291bnRdLCAx
dSk7CiAKICAgICAvLyBIYW5kbGUgcHVzaCBtZXNzYWdlCiAgICAgX19ibG9jayBib29sIHB1c2hN
ZXNzYWdlUHJvY2Vzc2VkID0gZmFsc2U7Ci0gICAgW2RhdGFTdG9yZSBfcHJvY2Vzc1B1c2hNZXNz
YWdlOlttZXNzYWdlcyBmaXJzdE9iamVjdF0gY29tcGxldGlvbkhhbmRsZXI6Xihib29sIHJlc3Vs
dCkgeworICAgIFttX2RhdGFTdG9yZSBfcHJvY2Vzc1B1c2hNZXNzYWdlOlttZXNzYWdlcyBmaXJz
dE9iamVjdF0gY29tcGxldGlvbkhhbmRsZXI6Xihib29sIHJlc3VsdCkgewogICAgICAgICBwdXNo
TWVzc2FnZVByb2Nlc3NlZCA9IHRydWU7CiAgICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdEV4cGVjdGVk
TWVzc2FnZSk7CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZwdXNoTWVzc2FnZVByb2Nl
c3NlZCk7Cit9CiAKLSAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOworVEVT
VF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRFbXB0eVB1c2gpCit7
CisgICAgcnVuVGVzdChAIlJlY2VpdmVkOiBudWxsIGRhdGEiLCBAeyB9KTsKK30KKworVEVTVF9G
KFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRBRVNHQ01QdXNoKQorewor
ICAgIHJ1blRlc3QoQCJSZWNlaXZlZDogdGVzdCBhZXNnY20gcGF5bG9hZCIsIEB7CisgICAgICAg
IEAiY29udGVudF9lbmNvZGluZyI6IEAiYWVzZ2NtIiwKKyAgICAgICAgQCJhc19wdWJsaWNrZXki
OiBAIkJDLUFnWU1ocW16YW1IN19BdW0wWXZJZDhGVjEtdW1nSHdlSk5lNlhRMUlNQW0zRTI5bG9X
WHFUUm5kaWJ4SDI3a0pLV2NJYnl5bXVuZE9ETWZWeF9VTSIsCisgICAgICAgIEAiYXNfc2FsdCI6
IEAidGtQVDV4RGVOMGxBa1NjNmxaVWtOZyIsCisgICAgICAgIEAicGF5bG9hZCI6IEAiby91NHl2
Y1hJMW5hcCt6eUlPQmJXWGRMcWoxcUhHMmNYK0tWaEFkQlFqMUdWQXQ3bFE9PSIKKyAgICB9KTsK
K30KKworVEVTVF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRBRVMx
MjhHQ01QdXNoKQoreworICAgIC8vIEZyb20gZXhhbXBsZSBpbiBSRkM4MjkxIFNlY3Rpb24gNS4K
KyAgICBTdHJpbmcgcGF5bG9hZEJhc2U2NFVSTCA9ICJER3Y2cmExbmxZZ0RDUzFGUm5iemx3QUFF
QUJCQlA0ejlLc042bkdSVGJWWUlfYzdWSlNQUVRCdGtnY3kyN21sbWxNb1pJSWdEbGw2ZTN2Q1lM
b2NJbm1ZV0FtUzZUbHpBQzh3RXFLSzZQQnJ1M2psN0FfeWw5NWJRcHU2Y1ZQVHBLNE1xZ2tmMUNY
enRMVkJTdDJLczNvWndidXdYUFhMV3lvdUJXTFZXR05XUWV4U2dTeHNqX1F1bGN5NGEtZk4iX3M7
CisgICAgU3RyaW5nIHBheWxvYWRCYXNlNjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhiYXNlNjRV
UkxEZWNvZGUocGF5bG9hZEJhc2U2NFVSTCkudmFsdWUoKSk7CisKKyAgICBydW5UZXN0KEAiUmVj
ZWl2ZWQ6IFdoZW4gSSBncm93IHVwLCBJIHdhbnQgdG8gYmUgYSB3YXRlcm1lbG9uIiwgQHsKKyAg
ICAgICAgQCJjb250ZW50X2VuY29kaW5nIjogQCJhZXMxMjhnY20iLAorICAgICAgICBAInBheWxv
YWQiOiAoTlNTdHJpbmcgKilwYXlsb2FkQmFzZTY0CisgICAgfSk7Cit9CisKK1RFU1RfRihXZWJQ
dXNoRFRlc3QsIFN1YnNjcmliZVRlc3QpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNvdXJj
ZSA9IFIiSFRNTCgKKyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdD4KKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3Lmpz
JykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0
IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgcmVzdWx0ID0gbnVs
bDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSBhd2FpdCBy
ZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKKyAgICAgICAgICAgICAgICB1c2Vy
VmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25TZXJ2ZXJLZXk6
IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmVzdWx0ID0g
c3Vic2NyaXB0aW9uLnRvSlNPTigpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
ICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOworICAgICAgICB9CisgICAgICAgIHdpbmRvdy53ZWJr
aXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsKKyAg
ICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2Jq
ID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW21fbm90aWZpY2F0
aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7CisgICAg
ICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAg
bG9hZFJlcXVlc3Qoc291cmNlLCAiIik7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lKTsKKworICAgIEFTU0VSVF9UUlVFKFtvYmogaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5
IGNsYXNzXV0pOworCisgICAgTlNEaWN0aW9uYXJ5ICpzdWJzY3JpcHRpb24gPSBvYmouZ2V0KCk7
CisgICAgQVNTRVJUX1RSVUUoW3N1YnNjcmlwdGlvbltAImVuZHBvaW50Il0gaGFzUHJlZml4OkAi
aHR0cHM6Ly8iXSk7CisgICAgQVNTRVJUX1RSVUUoW3N1YnNjcmlwdGlvbltAImtleXMiXSBpc0tp
bmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSk7CisKKyAgICAvLyBTaGFyZWQgYXV0aCBz
ZWNyZXQgc2hvdWxkIGJlIDE2IGJ5dGVzICgyMiBieXRlcyBpbiB1bnBhZGRlZCBiYXNlNjR1cmwp
LgorICAgIEFTU0VSVF9FUShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdW0AiYXV0aCJdIGxlbmd0aF0s
IDIydSk7CisKKyAgICAvLyBDbGllbnQgcHVibGljIGtleSBzaG91bGQgYmUgNjUgYnl0ZXMgKDg3
IGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2NHVybCkuCisgICAgQVNTRVJUX0VRKFtzdWJzY3JpcHRp
b25bQCJrZXlzIl1bQCJwMjU2ZGgiXSBsZW5ndGhdLCA4N3UpOworfQorCitURVNUX0YoV2ViUHVz
aERUZXN0LCBTdWJzY3JpYmVGYWlsdXJlVGVzdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
c291cmNlID0gUiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0PgorICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcv
c3cuanMnKS50aGVuKGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0g
YXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7CisgICAgICAgIGxldCByZXN1bHQg
PSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3
YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoeworICAgICAgICAgICAgICAg
IHVzZXJWaXNpYmxlT25seTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZl
cktleTogVkFMSURfU0VSVkVSX0tFWV9USEFUX0NBVVNFU19JTkpFQ1RFRF9GQUlMVVJFCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1YnNjcmlwdGlvbi50b0pTT04oKTsK
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gIkVycm9yOiAiICsg
ZTsKKyAgICAgICAgfQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5ub3Rl
LnBvc3RNZXNzYWdlKHJlc3VsdCk7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgKUhUTUwi
OworCisgICAgX19ibG9jayBSZXRhaW5QdHI8aWQ+IG9iaiA9IG5pbDsKKyAgICBfX2Jsb2NrIGJv
b2wgZG9uZSA9IGZhbHNlOworICAgIFttX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyIHNldE1l
c3NhZ2VIYW5kbGVyOl4oaWQgbWVzc2FnZSkgeworICAgICAgICBvYmogPSBtZXNzYWdlOworICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIGxvYWRSZXF1ZXN0KHNvdXJjZSwgIiIp
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICAvLyBTcGVjIHNh
eXMgdGhhdCBhbiBlcnJvciBpbiB0aGUgcHVzaCBzZXJ2aWNlIHNob3VsZCBiZSBhbiBBYm9ydEVy
cm9yLgorICAgIEFTU0VSVF9UUlVFKFtvYmogaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3Nd
XSk7CisgICAgQVNTRVJUX1RSVUUoW29iaiBoYXNQcmVmaXg6QCJFcnJvcjogQWJvcnRFcnJvciJd
KTsKK30KKworVEVTVF9GKFdlYlB1c2hEVGVzdCwgVW5zdWJzY3JpYmVUZXN0KQoreworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzb3VyY2UgPSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9Ii9jb25z
dGFudHMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgbmF2aWdhdG9yLnNlcnZpY2VX
b3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBjb25z
dCByZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKKyAg
ICAgICAgbGV0IHJlc3VsdCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQg
c3Vic2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7
CisgICAgICAgICAgICAgICAgdXNlclZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAgICAg
IGFwcGxpY2F0aW9uU2VydmVyS2V5OiBWQUxJRF9TRVJWRVJfS0VZCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGxldCByZXN1bHQxID0gYXdhaXQgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJl
KCk7CisgICAgICAgICAgICBsZXQgcmVzdWx0MiA9IGF3YWl0IHN1YnNjcmlwdGlvbi51bnN1YnNj
cmliZSgpOworICAgICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdDEsIHJlc3VsdDJdOworICAgICAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOworICAg
ICAgICB9CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1l
c3NhZ2UocmVzdWx0KTsKKyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisKKyAg
ICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBkb25l
ID0gZmFsc2U7CisgICAgW21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhh
bmRsZXI6XihpZCBtZXNzYWdlKSB7CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAgIGRv
bmUgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7CisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIC8vIEZpcnN0IHVuc3Vic2Ny
aWJlIHNob3VsZCBzdWNjZWVkLiBTZWNvbmQgb25lIHNob3VsZCBmYWlsIHNpbmNlIHRoZSBmaXJz
dCBvbmUgcmVtb3ZlZCB0aGUgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlLgorICAgIGlkIGV4cGVj
dGVkID0gQFtAKDEpLCBAKDApXTsKKyAgICBBU1NFUlRfVFJVRShbb2JqIGlzRXF1YWw6ZXhwZWN0
ZWRdKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451144</attachid>
            <date>2022-02-07 13:19:58 -0800</date>
            <delta_ts>2022-02-07 17:22:17 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235857-20220207131957.patch</filename>
            <type>text/plain</type>
            <size>93212</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ1ODM2MDVmNzY1ZTFhNDgyZTNjZTI1
OWZkYTA4MmNkNmYyY2M4ODIuLjFjYmViZTI4YjNmM2ViM2QwZmM0MzVlOGNhNmI0Njg1NjY3MjY1
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBC
cmFkeSBFaWRzb24uCisKKyAgICAgICAgQWRkIFB1c2hBUElFbmFibGVkIHRvIFdlYktpdExlZ2Fj
eSBzbyB3ZSBjYW4gZW5hYmxlIGl0IG9uIGluIEFQSSB0ZXN0cyB2aWEgX1dLRXhwZXJpbWVudGFs
RmVhdHVyZS4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNF
eHBlcmltZW50YWwueWFtbDoKKwogMjAyMi0wMi0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBs
ZS5jb20+CiAKICAgICAgICAgR3JhZGllbnRzIGRvbid0IGNvcnJlY3RseSBpbnRlcnBvbGF0ZSBt
aXNzaW5nL25vbmUgY29sb3IgY29tcG9uZW50cyBjb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMTFlNzcw
MDlmZTI2YTFhYTI5ZWYxNDljODEzODE5NDgwNzBlYWY2Zi4uZTcyMGUwZDhiMDFkMTk3NGMxNmZl
YTRlMzdiNzY1MDU5YTAyMjhmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMjItMDEt
MjggIEJlbiBOaGFtICA8bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcK
KworICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCisKKyAgICAgICAgVGhpcyBhZGRz
IFB1c2hTZXJ2aWNlIHRvIHdlYnB1c2hkLiBJdCBoYW5kbGVzIHJlcXVlc3RzIHRvIGNyZWF0ZSwg
cmVtb3ZlLCBhbmQgZ2V0IHB1c2gKKyAgICAgICAgc3Vic2NyaXB0aW9ucy4gSXQgYWxzbyBkZWNy
eXB0cyBpbmNvbWluZyBwdXNoZXMgYW5kIHBhc3MgdGhlbSBiYWNrIHRvIHRoZSBVSSBwcm9jZXNz
IHZpYSB0aGUKKyAgICAgICAgZXhpc3RpbmcgbWFjaGluZXJ5IGluIFdlYlB1c2hEYWVtb24uCisK
KyAgICAgICAgUHVzaFNlcnZpY2UgcHJpbWFyaWx5IGludGVyYWN0cyB3aXRoIHR3byBvYmplY3Rz
OgorCisgICAgICAgIDEuIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjogdGhpcyBjcmVhdGVzIGFuZCBy
ZW1vdmVzIHB1c2ggc3Vic2NyaXB0aW9ucyBmcm9tIHRoZSBwdXNoIHNlcnZlci4KKyAgICAgICAg
ICAgSXQgYWxzbyByZWNlaXZlcyBpbmNvbWluZyBwdXNoZXMgZnJvbSB0aGUgcHVzaCBzZXJ2ZXIu
CisgICAgICAgIDIuIFB1c2hEYXRhYmFzZTogdGhpcyBwZXJzaXN0cyBwdXNoIHN1YnNjcmlwdGlv
bnMgdG8gZGlzay4KKworICAgICAgICBTZXZlcmFsIHRoaW5ncyBhcmUgbm90IHlldCBpbXBsZW1l
bnRlZDsgZm9yIGluc3RhbmNlLCB3ZSBjdXJyZW50bHkgYWx3YXlzIGdyYW50IGEgcGFnZSB0aGUK
KyAgICAgICAgcGVybWlzc2lvbiB0byByZWNlaXZlIHB1c2hlcy4gVGhpcyB3aWxsIGJlIGZpeGVk
IGluIGZ1dHVyZSBwYXRjaGVzLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4g
VGhlIGN1cnJlbnQgdGVzdHMgdXNlIGEgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbiB0aGF0IHZl
bmRzCisgICAgICAgIHN1YnNjcmlwdGlvbiB3aXRoIGZpeGVkIGRhdGEsIGJ1dCB0aGlzIGNhbiBi
ZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9X
S01haW4uaDoKKyAgICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbToKKyAgICAgICAg
KFdLV2ViUHVzaERhZW1vbk1haW4pOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9XZWJQdXNoTWVz
c2FnZUNvY29hLm1tOiBhZGQgYWJpbGl0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIGVtcHR5
IHZzLiBudWxsIHBheWxvYWQuCisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdlOjpmcm9t
RGljdGlvbmFyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdlOjp0b0RpY3Rpb25h
cnkgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlB1c2hEOjptZXNzYWdlVHlwZVNlbmRzUmVwbHkpOgorICAgICAg
ICAqIFNoYXJlZC9XZWJQdXNoTWVzc2FnZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQdXNoTWVz
c2FnZTo6ZGVjb2RlKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiB3ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmg6CisgICAg
ICAgICogd2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToKKyAgICAgICAgKFdl
YlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNsaWVudEtleXMpOgor
ICAgICAgICAoV2ViUHVzaEQ6Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1YnNjcmliZSk6
CisgICAgICAgIChXZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6dW5zdWJzY3Jp
YmUpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpjb25uZWN0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZGF0YWJhc2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpk
aWRSZWNlaXZlUHVzaE1lc3NhZ2UpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlLm1t
OiBBZGRlZC4KKyAgICAgICAgKFdlYlB1c2hEOjp1cGRhdGVUb3BpY0xpc3RzKToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNo
U2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2
aWNlOjpQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6bWFrZVB1c2hTdWJzY3JpcHRp
b25Gcm9tUmVjb3JkKToKKyAgICAgICAgKFdlYlB1c2hEOjptYWtlUHVzaFRvcGljKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3Q6OmJ1bmRsZUlkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6c2NvcGUpOgorICAgICAgICAoV2Vi
UHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6UHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAg
KFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpQdXNoU2VydmljZVJlcXVlc3RJbXBs
KToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpmdWxmaWxsKToK
KyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZVJlcXVlc3RJbXBsOjpyZWplY3QpOgorICAg
ICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlwdGlvblJl
cXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OkdldFN1YnNjcmlwdGlvblJlcXVlc3Q6OnN0YXJ0
SW50ZXJuYWwpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OlN1YnNjcmli
ZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVzaEQ6OlN1YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW1w
bCk6CisgICAgICAgIChXZWJQdXNoRDo6U3Vic2NyaWJlUmVxdWVzdDo6YXR0ZW1wdFRvUmVjb3Zl
ckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKToKKyAgICAgICAgKFdlYlB1c2hEOjpVbnN1
YnNjcmliZVJlcXVlc3Q6OlVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChXZWJQdXNoRDo6
VW5zdWJzY3JpYmVSZXF1ZXN0OjpzdGFydEludGVybmFsKToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZW5xdWV1ZVB1c2hTZXJ2aWNlUmVxdWVzdCk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2U6OmZpbmlzaGVkUHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6Z2V0U3Vic2NyaXB0aW9uKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KToKKyAgICAg
ICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZTo6c3Vic2NyaWJlKToKKyAgICAgICAgKFdlYlB1c2hE
OjpQdXNoU2VydmljZTo6ZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KToKKyAgICAgICAgKFdl
YlB1c2hEOjpQdXNoU2VydmljZTo6dW5zdWJzY3JpYmUpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1
c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdCk6CisgICAgICAgIChXZWJQ
dXNoRDo6bWFrZVJhd1B1c2hNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2Vydmlj
ZTo6ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2Vydmlj
ZUNvbm5lY3Rpb24uaDoKKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24u
bW06CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNs
aWVudEtleXMpOgorICAgICAgICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb24uaDoKKyAgICAgICAg
KiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6Ok1lc3NhZ2VJ
bmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc6OmVuY29kZVJlcGx5KToK
KyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0TW9ja1B1c2hTZXJ2aWNlKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpEYWVtb246OnN0YXJ0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVz
aEQ6OkRhZW1vbjo6c2V0UHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6
cnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246
OmRlY29kZUFuZEhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6aW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKToKKyAgICAgICAgKFdlYlB1c2hEOjpE
YWVtb246OmhhbmRsZUluY29taW5nUHVzaCk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpn
ZXRQZW5kaW5nUHVzaE1lc3NhZ2VzKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OnN1YnNj
cmliZVRvUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6dW5zdWJzY3Jp
YmVGcm9tUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0UHVzaFN1
YnNjcmlwdGlvbik6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpnZXRQdXNoUGVybWlzc2lv
blN0YXRlKToKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oOgorICAgICAg
ICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
dXNoRGFlbW9uTWFpbik6CisgICAgICAgICogd2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJw
dXNoZC5tYWMucGxpc3Q6CisgICAgICAgICogd2VicHVzaGQvd2VicHVzaGQuY3BwOgorICAgICAg
ICAobWFpbik6CisKIDIwMjItMDItMDQgIEFyY2FkeSBHb2xkbWludHMtT3Jsb3YgIDxhZ29sZG1p
bnRzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjgwMDc3KTogW0dUS10gSXQg
Y2F1c2VkIDE1NSBuZXcgdGVzdCBmYWlsdXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3Jp
cHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2Uv
V1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApp
bmRleCA1YjRkM2I2MjU3MTc1MzI1NTRmM2FkNzJhNGRiNDVhNjllY2E4NWU2Li4wNWY3N2YzMjU5
NjA3YWJkMGY3NzNjZDUyNjc1OGRlYzdmNjlkOGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1Nj
cmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9T
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwu
eWFtbApAQCAtMTEyMiw2ICsxMTIyLDggQEAgUHVzaEFQSUVuYWJsZWQ6CiAgIGRlZmF1bHRWYWx1
ZToKICAgICBXZWJDb3JlOgogICAgICAgZGVmYXVsdDogZmFsc2UKKyAgICBXZWJLaXRMZWdhY3k6
CisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYktpdDoKICAgICAgIGRlZmF1bHQ6IGZhbHNl
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01haW4uaAppbmRleCAzMDM3OGY4NTUz
YWZmNWMzZGEzNGZiOThmMjM3YmFlMTU2OTgwM2EyLi45Y2Y4NGQyNzQ0ZmE3ZGViZmIwNzFkZjEy
M2VkMTI2OWE0N2Y1Mjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29j
b2EvV0tNYWluLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5o
CkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiBXS19FWFBPUlQgaW50IFdLWFBDU2Vy
dmljZU1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIFdLX0VYUE9SVCBpbnQgV0tBZEF0dHJpYnV0aW9uRGFl
bW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci1XS19FWFBPUlQgaW50IFdLV2ViUHVz
aERhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KSBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworV0tfRVhQT1JUIGludCBXS1dl
YlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVz
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1t
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLTWFpbi5tbQppbmRleCBkZTJlOWY3
YTViZDU1ZjkxZGU4N2UxYTkzYWFmODkwNzNkZmJmZDQxLi45N2Q3ODVmNjlmMjYxYWFmY2UyNWQ4
ZDkxNzY3MTQ0ZjIzZTllMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkv
Q29jb2EvV0tNYWluLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01h
aW4ubW0KQEAgLTQwLDcgKzQwLDcgQEAgaW50IFdLQWRBdHRyaWJ1dGlvbkRhZW1vbk1haW4oaW50
IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KQogICAgIHJldHVybiBXZWJLaXQ6OlBDTURhZW1vbk1h
aW4oYXJnYywgYXJndik7CiB9CiAKLWludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBj
b25zdCBjaGFyKiogYXJndikKK2ludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKIHsKICAgICByZXR1cm4gV2ViS2l0OjpXZWJQdXNoRGFlbW9uTWFpbihhcmdjLCBh
cmd2KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hN
ZXNzYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJQdXNoTWVzc2Fn
ZUNvY29hLm1tCmluZGV4IGYxMjkzOGJjNGRkZjFkZTQ5MWQ5MDllOGI3YWZkYTY1MmQwYzkwN2Iu
LmQ5MzRkYTQwN2MxZTY4MDk3MWI4ZTk0Y2U2NjI5MDNkNWE2YTNkZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hNZXNzYWdlQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViUHVzaE1lc3NhZ2VDb2NvYS5tbQpAQCAtMzksMjEg
KzM5LDMwIEBAIHN0ZDo6b3B0aW9uYWw8V2ViUHVzaE1lc3NhZ2U+IFdlYlB1c2hNZXNzYWdlOjpm
cm9tRGljdGlvbmFyeShOU0RpY3Rpb25hcnkgKmRpY3RpCiAgICAgaWYgKCF1cmwgfHwgIVt1cmwg
aXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIE5TRGF0YSAqcHVzaERhdGEgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6V2Vi
S2l0UHVzaERhdGFLZXldOwotICAgIGlmICghcHVzaERhdGEgfHwgIVtwdXNoRGF0YSBpc0tpbmRP
ZkNsYXNzOltOU0RhdGEgY2xhc3NdXSkKKyAgICBpZCBwdXNoRGF0YSA9IFtkaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpXZWJLaXRQdXNoRGF0YUtleV07CisgICAgQk9PTCBpc051bGwgPSBbcHVzaERh
dGEgaXNFcXVhbDpbTlNOdWxsIG51bGxdXTsKKyAgICBCT09MIGlzRGF0YSA9IFtwdXNoRGF0YSBp
c0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXTsKKworICAgIGlmICghaXNOdWxsICYmICFpc0Rh
dGEpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4geyB7Ci0gICAg
ICAgIFZlY3Rvcjx1aW50OF90PiB7IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihwdXNoRGF0
YS5ieXRlcyksIHB1c2hEYXRhLmxlbmd0aCB9LAotICAgICAgICBVUkwgeyB1cmwgfQotICAgIH0g
fTsKKyAgICBXZWJQdXNoTWVzc2FnZSBtZXNzYWdlIHsgeyB9LCBVUkwgeyB1cmwgfSB9OworICAg
IGlmIChpc0RhdGEpIHsKKyAgICAgICAgTlNEYXRhICpkYXRhID0gKE5TRGF0YSAqKXB1c2hEYXRh
OworICAgICAgICBtZXNzYWdlLnB1c2hEYXRhID0gVmVjdG9yPHVpbnQ4X3Q+IHsgc3RhdGljX2Nh
c3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9OworICAgIH0KKwor
ICAgIHJldHVybiBtZXNzYWdlOwogfQogCiBOU0RpY3Rpb25hcnkgKldlYlB1c2hNZXNzYWdlOjp0
b0RpY3Rpb25hcnkoKSBjb25zdAogewotICAgIGF1dG8gbnNEYXRhID0gYWRvcHROUyhbW05TRGF0
YSBhbGxvY10gaW5pdFdpdGhCeXRlczpwdXNoRGF0YS5kYXRhKCkgbGVuZ3RoOnB1c2hEYXRhLnNp
emUoKV0pOworICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0YTsKKyAgICBpZiAocHVzaERhdGEp
CisgICAgICAgIG5zRGF0YSA9IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRX
aXRoQnl0ZXM6cHVzaERhdGEtPmRhdGEoKSBsZW5ndGg6cHVzaERhdGEtPnNpemUoKV0pOworCiAg
ICAgcmV0dXJuIEB7Ci0gICAgICAgIFdlYktpdFB1c2hEYXRhS2V5IDogbnNEYXRhLmdldCgpLAor
ICAgICAgICBXZWJLaXRQdXNoRGF0YUtleSA6IG5zRGF0YSA/IG5zRGF0YS5nZXQoKSA6IFtOU051
bGwgbnVsbF0sCiAgICAgICAgIFdlYktpdFB1c2hSZWdpc3RyYXRpb25VUkxLZXkgOiAoTlNVUkwg
KilyZWdpc3RyYXRpb25VUkwKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
UHVzaERhZW1vbkNvbnN0YW50cy5oCmluZGV4IGZjNDdkYzRmMTI3NDg3MjRiMWI1N2M1NzJjMTQ5
YjM4NzhlYzBhNWIuLmYzZjdiYmU2M2Y0ZWQzNWVkY2YzZTJhYWFkOTNmYjNlNDkyOWZmOTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgKQEAgLTQz
LDYgKzQzLDcgQEAgZW51bSBjbGFzcyBNZXNzYWdlVHlwZSA6IHVpbnQ4X3QgewogICAgIFNldERl
YnVnTW9kZUlzRW5hYmxlZCwKICAgICBVcGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbiwKICAg
ICBJbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcsCisgICAgSW5qZWN0RW5jcnlwdGVkUHVzaE1l
c3NhZ2VGb3JUZXN0aW5nLAogICAgIEdldFBlbmRpbmdQdXNoTWVzc2FnZXMsCiAgICAgU3Vic2Ny
aWJlVG9QdXNoU2VydmljZSwKICAgICBVbnN1YnNjcmliZUZyb21QdXNoU2VydmljZSwKQEAgLTU5
LDYgKzYwLDcgQEAgaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVTZW5kc1JlcGx5KE1lc3NhZ2VUeXBl
IG1lc3NhZ2VUeXBlKQogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlJlcXVlc3RTeXN0ZW1Ob3RpZmlj
YXRpb25QZXJtaXNzaW9uOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVz
c2FnZXM6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5n
OgorICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVz
dGluZzoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpTdWJzY3JpYmVUb1B1c2hTZXJ2aWNlOgogICAg
IGNhc2UgTWVzc2FnZVR5cGU6OlVuc3Vic2NyaWJlRnJvbVB1c2hTZXJ2aWNlOgogICAgIGNhc2Ug
TWVzc2FnZVR5cGU6OkdldFB1c2hTdWJzY3JpcHRpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVz
aE1lc3NhZ2UuaAppbmRleCBmOWU0M2YzMzNkNTY4NDg4YzJmYmUxZTZlYmMxMWQ2MjMzNGNmOGU3
Li4xZjRlZmFjOTg0YjUyMjJkYmQxMGJlOGFhMzBjN2U1YTc4YmU5OTYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYlB1c2hNZXNzYWdlLmgKQEAgLTM3LDcgKzM3LDcgQEAgc3RydWN0IFdlYlB1c2hN
ZXNzYWdlIHsKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9u
YWw8V2ViUHVzaE1lc3NhZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBWZWN0b3I8dWludDhf
dD4gcHVzaERhdGE7CisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IHB1c2hEYXRh
OwogICAgIFVSTCByZWdpc3RyYXRpb25VUkw7CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTU1
LDcgKzU1LDcgQEAgdm9pZCBXZWJQdXNoTWVzc2FnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpvcHRpb25hbDxXZWJQdXNoTWVz
c2FnZT4gV2ViUHVzaE1lc3NhZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIHN0
ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBwdXNoRGF0YTsKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+Pj4gcHVzaERhdGE7CiAgICAgZGVjb2RlciA+
PiBwdXNoRGF0YTsKICAgICBpZiAoIXB1c2hEYXRhKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMGM3YzMxYmM1NTdiNTVkNTE3MDVmYzM5ZDdlNjc5Yzk0YzZhMGFmMy4uODI3OGU1MDI3
NGU1MDBlZTFlOWRmYTY4ZmNmZTY1NjYzYmM2NjQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NDYsNyArOTQ2LDcgQEAKIAkJNTEy
OTM1RTQxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5
MzVFMjEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGll
bnQuaCAqLzsgfTsKIAkJNTEyOUVCMTIyM0QwREU3QjAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNo
YXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEy
OUVCMTEyM0QwREU3ODAwQUYxQ0Q3IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oICovOyB9OwogCQk1
MTJDRDY5ODI3MjFFRkM4MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk3MjcyMUVG
QzMwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbi5oICovOyB9OwotCQk1MTJDRDY5
QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyQ0Q2OTkyNzIxRjA0OTAwRjdG
OEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCAqLzsgfTsKKwkJNTEyQ0Q2OUEyNzIxRjBB
OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk5MjcyMUYwNDkwMEY3RjhFQyAvKiBX
ZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTEyRTM0RTUxMzBCNEQwNTAwQUJEMTlBIC8qIFdLQXBwbGljYXRp
b25DYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxN0EzM0I0MTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTEyRUNDMzUyNzE5NkFEQjAwMDg5QjY2IC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNC
OTMwRkUyNkU4MDIxNjAwMzJCMUMwIC8qIFByaXZhdGVDbGlja01lYXN1cmVtZW50Q29ubmVjdGlv
bi5oICovOyB9OwogCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1MzAgLyogQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEyRjU4OEYxMkE4ODM4ODAwNjI5NTMwIC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkuaCAqLzsgfTsKQEAgLTE5OTgsNiArMTk5OCw4IEBACiAJCUU1Q0JBNzY3MjdBMzE4RTEw
MERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1Q0JBNzYwMjdBMzE4NzkwMERGNzg1OCAvKiBVbmlmaWVk
U291cmNlMTE5LmNwcCAqLzsgfTsKIAkJRTVDQkE3NjgyN0EzMThFMTAwREY3ODU4IC8qIFVuaWZp
ZWRTb3VyY2UxMTcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTVDQkE3NjIyN0EzMTg3OTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwICov
OyB9OwogCQlFNURFRkE2ODI2RjhGNDI2MDBBQjY4REIgLyogUGhvdG9zVUlTUEkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1REVGQTY3MjZGOEY0MjYw
MEFCNjhEQiAvKiBQaG90b3NVSVNQSS5oICovOyB9OworCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUw
MEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQdXNoU2VydmljZS5oICovOyB9
OworCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQjM2QjE2NzI3QTdCNDUwMDA1
MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi87IH07CiAJCUVCQThEM0FCMjdBNUUzMTMwMENCNzkw
MCAvKiBBcHBsZVB1c2hTZXJ2aWNlU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQTI3QTVFMzEzMDBDQjc5MDAgLyogQXBwbGVQdXNoU2Vy
dmljZVNQSS5oICovOyB9OwogCQlFQkE4RDNCMjI3QTVFMzNGMDBDQjc5MDAgLyogQXBwbGVQdXNo
U2VydmljZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNv
bm5lY3Rpb24ubW0gKi87IH07CiAJCUVCQThEM0IzMjdBNUUzM0YwMENCNzkwMCAvKiBNb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFQkE4RDNBRDI3QTVFMzNFMDBDQjc5MDAgLyogTW9ja1B1c2hTZXJ2aWNlQ29u
bmVjdGlvbi5oICovOyB9OwpAQCAtNjQ1OSw2ICs2NDYxLDggQEAKIAkJRTVERUZBNjcyNkY4RjQy
NjAwQUI2OERCIC8qIFBob3Rvc1VJU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rvc1VJU1BJLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJEMjc1QUUxMzMwMDg2M0Q4RiAv
KiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxp
c3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3Q7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJFMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20u
YXBwbGUud2Via2l0LndlYnB1c2hkLmlvcy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1s
OyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5pb3MucGxpc3Q7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAvKiBQdXNoU2Vydmlj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXNoU2VydmljZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVz
aFNlcnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQdXNo
U2VydmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUEyN0E1RTMx
MzAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXBwbGVQdXNoU2VydmljZVNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5l
Y3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBcHBsZVB1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUJB
OEQzQUQyN0E1RTMzRTAwQ0I3OTAwIC8qIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAwOTgsNiArMTAxMDIsOCBAQAogCQkJ
CTUxNjBFOTU4Mjc0QzBEODgwMDU2NzM4OCAvKiBQdXNoQXBwQnVuZGxlLm1tICovLAogCQkJCTUx
RjdCQjc5Mjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5oICovLAogCQkJ
CTUxRjdCQjdBMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5tbSAqLywK
KwkJCQlFQjM2QjE2NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCAqLywKKwkJCQlF
QjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi8sCiAJCQkJRUJBOEQz
QUYyN0E1RTMzRjAwQ0I3OTAwIC8qIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovLAogCQkJCUVC
QThEM0IxMjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8sCiAJ
CQkJNTE3QjVGNzcyNzVFOTc5NTAwMkRDMjJEIC8qIHdlYnB1c2hkLmNwcCAqLywKQEAgLTEzMjUw
LDYgKzEzMjU2LDcgQEAKIAkJCQk1MTdCNUY4MTI3NUU5N0I2MDAyREMyMkQgLyogUHVzaEFwcEJ1
bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0QyNzVFOTdCNjAwMkRDMjJEIC8qIFB1
c2hDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUY5NTI3NUVCQTYz
MDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlF
QjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUVCQThEM0I1MjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2VydmljZUNvbm5lY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUExRTY4ODcwMUY2RTJCQUIwMDcwMDZBNiAvKiBRdWFyYW50aW5l
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBDMjI3RTI0NTExMzBBMDBFRDYxNEQgLyogUXVp
Y2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMTU1MDksNiAr
MTU1MTYsNyBAQAogCQkJCTJENTRDMzFCMjEyRjREQTYwMDQ5QzE3NCAvKiBQcm9jZXNzTGF1bmNo
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGODIyNzVFOTdCNjAwMkRDMjJEIC8qIFB1
c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTdCNUY3QjI3NUU5N0E5MDAyREMy
MkQgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQlFQjM2QjE2
OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gaW4gU291cmNlcyAqLywKIAkJCQlF
QkE4RDNCNzI3QTVFMzNGMDBDQjc5MDAgLyogUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUEwQzIyN0YyNDUxMTMwQTAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1i
bmFpbGluZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyNUUyNDM1NzVDRDAw
RUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9u
LmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApp
bmRleCA3NzY5YmI2YmRkNTgyOGU3YjE2NGMxNjdjODQ2MGNmZGJkN2MwNDAwLi5iOTUzYmI5YzEy
ZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3ZGY0NmQ5NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaApAQCAtMzQsNiArMzQsOCBAQCBw
dWJsaWM6CiAgICAgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbigpOwogICAgIH5Nb2NrUHVzaFNl
cnZpY2VDb25uZWN0aW9uKCk7CiAKKyAgICBXZWJDb3JlOjpQdXNoQ3J5cHRvOjpDbGllbnRLZXlz
IGdlbmVyYXRlQ2xpZW50S2V5cygpIGZpbmFsOworCiAgICAgdm9pZCBzdWJzY3JpYmUoY29uc3Qg
U3RyaW5nJiB0b3BpYywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgU3Vi
c2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKICAgICB2b2lkIHVuc3Vic2NyaWJlKGNvbnN0IFN0
cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIFVuc3Vi
c2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IGRiZWZhNzRhZWNkOWE5ZWEw
ZTQxOTgzMzg2OGUzMDhkM2Q3NmY2MDMuLmM0Y2YyZTY3OWI5MmJmOTIzNTYxYzE1OGMyM2QzNjgw
MWQ4NzgzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTW9ja1B1c2hTZXJ2
aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24ubW0KQEAgLTI2LDYgKzI2LDEwIEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaCIKIAorI2ltcG9ydCA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpQdXNoQ3J5cHRvOworCiBu
YW1lc3BhY2UgV2ViUHVzaEQgewogCiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVz
aFNlcnZpY2VDb25uZWN0aW9uKCkKQEAgLTM0LDE0ICszOCwzMCBAQCBNb2NrUHVzaFNlcnZpY2VD
b25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkKIAogTW9ja1B1c2hTZXJ2aWNl
Q29ubmVjdGlvbjo6fk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYsIFN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQorQ2xpZW50
S2V5cyBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5lcmF0ZUNsaWVudEtleXMoKQogewot
ICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9t
YWluIGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKKyAgICAv
LyBFeGFtcGxlIHZhbHVlcyBmcm9tIFJGQzgyOTEgU2VjdGlvbiA1LgorICAgIGF1dG8gcHVibGlj
S2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCQ1Z4c3I3Tl9lTmdWUnF2SHREMHpUWnNFYzYtVlYtSnZM
ZXhocVV6T1JjeGFPemk2LUFZV1h2VEJIbTRianlQanM3VmQ4cFpHSDZTUnBrTnRvSUFpdzQiX3Mp
LnZhbHVlKCk7CisgICAgYXV0byBwcml2YXRlS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJxMWRYcHcz
VXBUNVZPbXVfY2ZfdjZpaDA3QWVtczNuanhJLUpXZ0xjTTk0Il9zKS52YWx1ZSgpOworICAgIGF1
dG8gc2VjcmV0ID0gYmFzZTY0VVJMRGVjb2RlKCJCVEJaTXFISDZyNFR0czdKX2FTSWdnIl9zKS52
YWx1ZSgpOworCisgICAgcmV0dXJuIENsaWVudEtleXMgeyBQMjU2REhLZXlQYWlyIHsgV1RGTW92
ZShwdWJsaWNLZXkpLCBXVEZNb3ZlKHByaXZhdGVLZXkpIH0sIFdURk1vdmUoc2VjcmV0KSB9Owor
fQorCit2b2lkIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OnN1YnNjcmliZShjb25zdCBTdHJp
bmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBTdWJzY3JpYmVIYW5k
bGVyJiYgaGFuZGxlcikKK3sKKyAgICBhdXRvIGFsd2F5c1JlamVjdGVkS2V5ID0gYmFzZTY0VVJM
RGVjb2RlKCJCRUF4YVVNbzFzOHRqT1J4SmZuU1N2V2hZYjR1NTFrZzFoV1Qyc185Z3BWN1p4YXIx
cEZfMkJROEFuY3VBZFMyQm9MaE40cWF4ekJ5MkN3SEU4QkJ6V2ciX3MpLnZhbHVlKCk7CisgICAg
aWYgKHZhcGlkUHVibGljS2V5ID09IGFsd2F5c1JlamVjdGVkS2V5KSB7CisgICAgICAgIGhhbmRs
ZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJXZWJQdXNoIiBjb2RlOi0xIHVzZXJJ
bmZvOm5pbF0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlcihAImh0dHBz
Oi8vd2Via2l0Lm9yZy9wdXNoIiwgbmlsKTsKIH0KIAogdm9pZCBNb2NrUHVzaFNlcnZpY2VDb25u
ZWN0aW9uOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
LCBVbnN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQogewotICAgIGhhbmRsZXIoeyB9LCBbTlNF
cnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6TlNGZWF0dXJlVW5z
dXBwb3J0ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKKyAgICBoYW5kbGVyKHRydWUsIG5pbCk7CiB9
CiAKIFZlY3RvcjxTdHJpbmc+IE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OmVuYWJsZWRUb3Bp
Y3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNDE1ZTAw
OGRkNjMwNTEwNTgyNGY4Y2ZiMDI2OTVhZmMzMjNmZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0V4Y2VwdGlv
bkRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUHVzaFN1YnNjcmlwdGlvbkRhdGEuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitjbGFzcyBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0
OworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0OworY2xhc3MgU3Vic2NyaWJlUmVxdWVzdDsKK2Ns
YXNzIFVuc3Vic2NyaWJlUmVxdWVzdDsKKworY2xhc3MgUHVzaFNlcnZpY2UgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVzaW5nIEluY29taW5nUHVzaE1lc3Nh
Z2VIYW5kbGVyID0gRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJik+OworCisgICAgc3RhdGljIHZvaWQgY3JlYXRlKGNv
bnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYpOworICAgIHN0YXRpYyB2b2lk
IGNyZWF0ZU1vY2tTZXJ2aWNlKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYmKT4mJik7CisgICAg
flB1c2hTZXJ2aWNlKCk7CisKKyAgICBQdXNoU2VydmljZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24o
KSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KKyAgICBXZWJDb3JlOjpQdXNoRGF0YWJhc2UmIGRh
dGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQorCisgICAgdm9pZCBnZXRTdWJzY3JpcHRp
b24oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmKTsK
KyAgICB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQdWJsaWNLZXksIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlw
dGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYpOworICAgIHZvaWQgdW5zdWJz
Y3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3Bl
LCBXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmKTsK
KworICAgIHZvaWQgZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRpb25SZXF1ZXN0KEdldFN1YnNjcmlw
dGlvblJlcXVlc3QmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdChTdWJz
Y3JpYmVSZXF1ZXN0Jik7CisgICAgdm9pZCBkaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdChV
bnN1YnNjcmliZVJlcXVlc3QmKTsKKworICAgIHZvaWQgZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5T
U3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmID0gW10geyB9KTsKKworcHJpdmF0ZToKKyAgICBQdXNoU2VydmljZShVbmlxdWVS
ZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiYmLCBVbmlxdWVSZWY8V2ViQ29yZTo6UHVzaERhdGFi
YXNlPiYmLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmKTsKKworICAgIHVzaW5nIFB1c2hT
ZXJ2aWNlUmVxdWVzdE1hcCA9IEhhc2hNYXA8c3RkOjp0dXBsZTxTdHJpbmcsIFN0cmluZz4sIERl
cXVlPHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+Pj47CisgICAgdm9pZCBlbnF1
ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYsIHN0ZDo6dW5pcXVl
X3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+JiYpOworICAgIHZvaWQgZmluaXNoZWRQdXNoU2Vydmlj
ZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiwgUHVzaFNlcnZpY2VSZXF1ZXN0Jik7CisK
KyAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAg
VW5pcXVlUmVmPFdlYkNvcmU6OlB1c2hEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKworICAgIEluY29t
aW5nUHVzaE1lc3NhZ2VIYW5kbGVyIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXI7CisKKyAg
ICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV9nZXRTdWJzY3JpcHRpb25SZXF1ZXN0czsKKyAgICBQ
dXNoU2VydmljZVJlcXVlc3RNYXAgbV9zdWJzY3JpYmVSZXF1ZXN0czsKKyAgICBQdXNoU2Vydmlj
ZVJlcXVlc3RNYXAgbV91bnN1YnNjcmliZVJlcXVlc3RzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2Uu
bW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVk
OGVhNmE4NjVkZDI2YmIzYTRmYTg3YjI1MDJmNWY0ZDNhMjMxYjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLm1tCkBAIC0wLDAgKzEsNTkxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQdXNoU2VydmljZS5o
IgorCisjaW1wb3J0ICJBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAiQXBw
bGVQdXNoU2VydmljZVNQSS5oIgorI2ltcG9ydCAiTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5o
IgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1B1c2hNZXNzYWdlQ3J5cHRvLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KKyNpbXBvcnQg
PHd0Zi9Xb3JrUXVldWUuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgorI2lt
cG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYlB1c2hEIHsKKworc3RhdGljIHZv
aWQgdXBkYXRlVG9waWNMaXN0cyhQdXNoU2VydmljZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFB1
c2hEYXRhYmFzZSYgZGF0YWJhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgZGF0YWJhc2UuZ2V0VG9waWNzQnlXYWtlU3RhdGUoWyZjb25uZWN0
aW9uLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRv
JiYgdG9waWNNYXApIG11dGFibGUgeworICAgICAgICAvLyBGSVhNRTogbW92ZSB0b3BpY3MgdG8g
aWdub3JlZCBsaXN0IGJhc2VkIG9uIHVzZXIgcHJlZmVyZW5jZXMuCisgICAgICAgIFB1c2hTZXJ2
aWNlQ29ubmVjdGlvbjo6VG9waWNMaXN0cyB0b3BpY0xpc3RzOworCisgICAgICAgIGlmIChhdXRv
IGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpXYWtpbmcpOyBpdCAhPSB0b3BpY01h
cC5lbmQoKSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh0b3BpY0xpc3RzLmVuYWJsZWRUb3BpY3Ms
IGl0LT52YWx1ZSk7CisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2Fr
ZVN0YXRlOjpPcHBvcnR1bmlzdGljKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAgICAgICAg
ICBzdGQ6OnN3YXAodG9waWNMaXN0cy5vcHBvcnR1bmlzdGljVG9waWNzLCBpdC0+dmFsdWUpOwor
ICAgICAgICBpZiAoYXV0byBpdCA9IHRvcGljTWFwLmZpbmQoUHVzaFdha2VTdGF0ZTo6Tm9uV2Fr
aW5nKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAodG9waWNM
aXN0cy5ub25XYWtpbmdUb3BpY3MsIGl0LT52YWx1ZSk7CisKKyAgICAgICAgY29ubmVjdGlvbi5z
ZXRUb3BpY0xpc3RzKFdURk1vdmUodG9waWNMaXN0cykpOworCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CisgICAgfSk7Cit9CisKKyNpZiBIQVZFKEFQUExFX1BVU0hfU0VSVklDRV9VUkxf
VE9LRU5fU1VQUE9SVCkKKwordm9pZCBQdXNoU2VydmljZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
aW5jb21pbmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBJbmNv
bWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVy
KQoreworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBhZG9wdE9TT2JqZWN0KG9zX3RyYW5zYWN0aW9u
X2NyZWF0ZSgiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wdXNoLXNlcnZpY2UtaW5pdCIpKTsK
KworICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbiBBU0FQIHNvIHRoYXQgd2UgYm9vdHN0cmFw
X2NoZWNrX2luIHRvIHRoZSBzZXJ2aWNlIGluIGEgdGltZWx5IG1hbm5lci4KKyAgICBhdXRvIGNv
bm5lY3Rpb24gPSBtYWtlVW5pcXVlUmVmPEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uPihpbmNv
bWluZ1B1c2hTZXJ2aWNlTmFtZSk7CisKKyAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShkYXRhYmFz
ZVBhdGgsIFt0cmFuc2FjdGlvbiA9IFdURk1vdmUodHJhbnNhY3Rpb24pLCBjb25uZWN0aW9uID0g
V1RGTW92ZShjb25uZWN0aW9uKSwgbWVzc2FnZUhhbmRsZXIgPSBXVEZNb3ZlKG1lc3NhZ2VIYW5k
bGVyKSwgY3JlYXRpb25IYW5kbGVyID0gV1RGTW92ZShjcmVhdGlvbkhhbmRsZXIpXShhdXRvJiYg
ZGF0YWJhc2VSZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIWRhdGFiYXNlUmVzdWx0KSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0
aW9uIGZhaWxlZCB3aXRoIGRhdGFiYXNlIGVycm9yIik7CisgICAgICAgICAgICBjcmVhdGlvbkhh
bmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKKyAgICAgICAgICAgIHRyYW5z
YWN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGF1dG8gZGF0YWJhc2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RG
TW92ZShkYXRhYmFzZVJlc3VsdCkpOworICAgICAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2U+IHNl
cnZpY2UoKm5ldyBQdXNoU2VydmljZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3ZlKGRhdGFi
YXNlKSwgV1RGTW92ZShtZXNzYWdlSGFuZGxlcikpKTsKKworICAgICAgICBhdXRvJiBjb25uZWN0
aW9uUmVmID0gc2VydmljZS0+Y29ubmVjdGlvbigpOworICAgICAgICBhdXRvJiBkYXRhYmFzZVJl
ZiA9IHNlcnZpY2UtPmRhdGFiYXNlKCk7CisKKyAgICAgICAgLy8gT25seSBwcm92aWRlIHRoZSBz
ZXJ2aWNlIG9iamVjdCBiYWNrIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgd2UndmUgc3luY2VkIHRoZSB0
b3BpYyBsaXN0cyBpbgorICAgICAgICAvLyB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgUHVzaFNlcnZp
Y2VDb25uZWN0aW9uL0FQU0Nvbm5lY3Rpb24uIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdvbid0Cisg
ICAgICAgIC8vIHNlcnZpY2UgYW55IGNhbGxzIHRvIHN1YnNjcmliZS91bnN1YnNjcmliZS9ldGMu
IHVudGlsIGFmdGVyIHRoZSB0b3BpYyBsaXN0cyBhcmUgdXAgdG8KKyAgICAgICAgLy8gZGF0ZSwg
d2hpY2ggQVBTQ29ubmVjdGlvbiBjYXJlcyBhYm91dC4KKyAgICAgICAgdXBkYXRlVG9waWNMaXN0
cyhjb25uZWN0aW9uUmVmLCBkYXRhYmFzZVJlZiwgW3RyYW5zYWN0aW9uID0gV1RGTW92ZSh0cmFu
c2FjdGlvbiksIHNlcnZpY2UgPSBXVEZNb3ZlKHNlcnZpY2UpLCBjcmVhdGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNyZWF0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjcmVhdGlv
bkhhbmRsZXIoc2VydmljZS5tb3ZlVG9VbmlxdWVQdHIoKSk7CisgICAgICAgICAgICB0cmFuc2Fj
dGlvbiA9IG51bGxwdHI7CisgICAgICAgIH0pOworICAgIH0pOworfQorCisjZWxzZQorCit2b2lk
IFB1c2hTZXJ2aWNlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgSW5jb21p
bmdQdXNoTWVzc2FnZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1
ZV9wdHI8UHVzaFNlcnZpY2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxlcikKK3sKKyAgICBjcmVhdGlv
bkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKK30KKworI2VuZGlmIC8v
IEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JUKQorCit2b2lkIFB1c2hT
ZXJ2aWNlOjpjcmVhdGVNb2NrU2VydmljZShJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIG1l
c3NhZ2VIYW5kbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNo
U2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIFB1c2hEYXRhYmFzZTo6Y3Jl
YXRlKFNRTGl0ZURhdGFiYXNlOjppbk1lbW9yeVBhdGgoKSwgW21lc3NhZ2VIYW5kbGVyID0gV1RG
TW92ZShtZXNzYWdlSGFuZGxlciksIGNyZWF0aW9uSGFuZGxlciA9IFdURk1vdmUoY3JlYXRpb25I
YW5kbGVyKV0oYXV0byYmIGRhdGFiYXNlUmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFk
YXRhYmFzZVJlc3VsdCkgeworICAgICAgICAgICAgY3JlYXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVl
X3B0cjxQdXNoU2VydmljZT4oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBhdXRvIGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlUmVmPE1vY2tQdXNoU2VydmljZUNv
bm5lY3Rpb24+KCk7CisgICAgICAgIGF1dG8gZGF0YWJhc2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5v
bk51bGxVbmlxdWVQdHIoV1RGTW92ZShkYXRhYmFzZVJlc3VsdCkpOworICAgICAgICBjcmVhdGlv
bkhhbmRsZXIoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPihuZXcgUHVzaFNlcnZpY2UoV1RG
TW92ZShjb25uZWN0aW9uKSwgV1RGTW92ZShkYXRhYmFzZSksIFdURk1vdmUobWVzc2FnZUhhbmRs
ZXIpKSkpOworICAgIH0pOworfQorCitQdXNoU2VydmljZTo6UHVzaFNlcnZpY2UoVW5pcXVlUmVm
PFB1c2hTZXJ2aWNlQ29ubmVjdGlvbj4mJiBwdXNoU2VydmljZUNvbm5lY3Rpb24sIFVuaXF1ZVJl
ZjxQdXNoRGF0YWJhc2U+JiYgcHVzaERhdGFiYXNlLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxl
ciYmIGluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKQorICAgIDogbV9jb25uZWN0aW9uKFdURk1v
dmUocHVzaFNlcnZpY2VDb25uZWN0aW9uKSkKKyAgICAsIG1fZGF0YWJhc2UoV1RGTW92ZShwdXNo
RGF0YWJhc2UpKQorICAgICwgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcihXVEZNb3ZlKGlu
Y29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2luY29t
aW5nUHVzaE1lc3NhZ2VIYW5kbGVyKTsKKworICAgIG1fY29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5p
bmdGb3JQdXNoTWVzc2FnZXMoW3RoaXNdKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1
c2VySW5mbykgeworICAgICAgICBkaWRSZWNlaXZlUHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZv
KTsKKyAgICB9KTsKK30KKworUHVzaFNlcnZpY2U6On5QdXNoU2VydmljZSgpID0gZGVmYXVsdDsK
Kworc3RhdGljIFB1c2hTdWJzY3JpcHRpb25EYXRhIG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJl
Y29yZChQdXNoUmVjb3JkJiYgcmVjb3JkKQoreworICAgIHJldHVybiBQdXNoU3Vic2NyaXB0aW9u
RGF0YSB7CisgICAgICAgIHJlY29yZC5pZGVudGlmaWVyLAorICAgICAgICBXVEZNb3ZlKHJlY29y
ZC5lbmRwb2ludCksCisgICAgICAgIFdURk1vdmUocmVjb3JkLmV4cGlyYXRpb25UaW1lKSwKKyAg
ICAgICAgV1RGTW92ZShyZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkpLAorICAgICAgICBXVEZN
b3ZlKHJlY29yZC5jbGllbnRQdWJsaWNLZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5zaGFy
ZWRBdXRoU2VjcmV0KQorICAgIH07Cit9CisKK3N0YXRpYyBTdHJpbmcgbWFrZVB1c2hUb3BpYyhj
b25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUpCit7Cisg
ICAgcmV0dXJuIGJ1bmRsZUlkZW50aWZpZXIgKyAiICIgKyBzY29wZTsKK30KKworY2xhc3MgUHVz
aFNlcnZpY2VSZXF1ZXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5QdXNoU2VydmljZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0
dWFsIEFTQ0lJTGl0ZXJhbCBkZXNjcmlwdGlvbigpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFN0
cmluZyYgYnVuZGxlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fYnVuZGxlSWRlbnRpZmllcjsgfQor
ICAgIGNvbnN0IFN0cmluZyYgc2NvcGUoKSB7IHJldHVybiBtX3Njb3BlOyB9OworCisgICAgdmly
dHVhbCB2b2lkIHN0YXJ0KCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgUHVzaFNlcnZpY2VSZXF1
ZXN0KFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgc2NvcGUpCisgICAgICAgIDogbV9zZXJ2aWNlKHNlcnZpY2UpCisgICAg
ICAgICwgbV9jb25uZWN0aW9uKHNlcnZpY2UuY29ubmVjdGlvbigpKQorICAgICAgICAsIG1fZGF0
YWJhc2Uoc2VydmljZS5kYXRhYmFzZSgpKQorICAgICAgICAsIG1fYnVuZGxlSWRlbnRpZmllcihi
dW5kbGVJZGVudGlmaWVyKQorICAgICAgICAsIG1fc2NvcGUoc2NvcGUpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CisKKyAgICBQdXNoU2VydmljZSYgbV9z
ZXJ2aWNlOworICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbiYgbV9jb25uZWN0aW9uOworICAgIFB1
c2hEYXRhYmFzZSYgbV9kYXRhYmFzZTsKKyAgICBTdHJpbmcgbV9idW5kbGVJZGVudGlmaWVyOwor
ICAgIFN0cmluZyBtX3Njb3BlOworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUHVzaFNlcnZp
Y2VSZXF1ZXN0Jik+IG1fY29tcGxldGlvbkhhbmRsZXI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXN1bHRUeXBlPgorY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbCA6IHB1YmxpYyBQdXNo
U2VydmljZVJlcXVlc3QgeworcHVibGljOgorICAgIHZvaWQgc3RhcnQoKSBmaW5hbAorICAgIHsK
KyAgICAgICAgaWYgKG1fYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkgfHwgbV9zY29wZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2Vi
Q29yZTo6QWJvcnRFcnJvciwgIkludmFsaWQgc2VuZGVyIl9zIH0pOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5zYWN0aW9uRGVzY3JpcHRpb24g
PSBTdHJpbmcoImNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQ6Il9zKSArIGRlc2NyaXB0aW9uKCkg
KyAiOiJfcyArIG1fYnVuZGxlSWRlbnRpZmllciArICI6Il9zICsgbV9zY29wZTsKKyAgICAgICAg
bV90cmFuc2FjdGlvbiA9IGFkb3B0T1NPYmplY3Qob3NfdHJhbnNhY3Rpb25fY3JlYXRlKHRyYW5z
YWN0aW9uRGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSkpOworICAgICAgICBzdGFydEludGVybmFs
KCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgUmVzdWx0SGFuZGxlciA9IENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8UmVzdWx0VHlwZSwgV2ViQ29yZTo6RXhj
ZXB0aW9uRGF0YT4mKT47CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3RJbXBsKFB1c2hTZXJ2aWNl
JiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
c2NvcGUsIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQorICAgICAgICA6IFB1c2hTZXJ2
aWNlUmVxdWVzdChzZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSkKKyAgICAgICAgLCBt
X3Jlc3VsdEhhbmRsZXIoV1RGTW92ZShyZXN1bHRIYW5kbGVyKSkKKyAgICB7CisgICAgfQorICAg
IHZpcnR1YWwgflB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc3RhcnRJbnRlcm5hbCgpID0gMDsKKworICAgIHZvaWQgZnVsZmlsbChSZXN1bHRU
eXBlIHJlc3VsdCkKKyAgICB7CisgICAgICAgIG1fcmVzdWx0SGFuZGxlcihXVEZNb3ZlKHJlc3Vs
dCkpOworICAgICAgICBmaW5pc2goKTsKKyAgICB9CisKKyAgICB2b2lkIHJlamVjdChXZWJDb3Jl
OjpFeGNlcHRpb25EYXRhJiYgZGF0YSkKKyAgICB7CisgICAgICAgIG1fcmVzdWx0SGFuZGxlciht
YWtlVW5leHBlY3RlZChXVEZNb3ZlKGRhdGEpKSk7CisgICAgICAgIGZpbmlzaCgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBSZXN1bHRIYW5kbGVyIG1fcmVzdWx0SGFuZGxlcjsKKyAgICBPU09i
amVjdFB0cjxvc190cmFuc2FjdGlvbl90PiBtX3RyYW5zYWN0aW9uOworfTsKKworY2xhc3MgR2V0
U3Vic2NyaXB0aW9uUmVxdWVzdCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJbXBsPHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+PiB7CitwdWJsaWM6CisgICAg
R2V0U3Vic2NyaXB0aW9uUmVxdWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxl
SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2
aXJ0dWFsIH5HZXRTdWJzY3JpcHRpb25SZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6
CisgICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdl
dFN1YnNjcmlwdGlvblJlcXVlc3QiX3M7IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5h
bDsKKyAgICB2b2lkIGZpbmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlR2V0U3Vi
c2NyaXB0aW9uUmVxdWVzdCgqdGhpcyk7IH0KK307CisKK0dldFN1YnNjcmlwdGlvblJlcXVlc3Q6
OkdldFN1YnNjcmlwdGlvblJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmlu
ZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYm
IHJlc3VsdEhhbmRsZXIpCisgICAgOiBQdXNoU2VydmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1
bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQoreworfQorCisv
LyBJbXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBzaWRlIG9mIFB1c2hNYW5hZ2VyLmdldFN1YnNjcmlw
dGlvbi4KK3ZvaWQgR2V0U3Vic2NyaXB0aW9uUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCgpCit7Cisg
ICAgbV9kYXRhYmFzZS5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShtX2J1bmRs
ZUlkZW50aWZpZXIsIG1fc2NvcGUsIFt0aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIGZ1bGZpbGwoc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bGZpbGwobWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVj
b3JkKFdURk1vdmUoKnJlc3VsdCkpKTsKKyAgICB9KTsKK30KKworY2xhc3MgU3Vic2NyaWJlUmVx
dWVzdCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJbXBsPFdlYkNvcmU6OlB1c2hTdWJzY3Jp
cHRpb25EYXRhPiB7CitwdWJsaWM6CisgICAgU3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYs
IGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgUmVzdWx0SGFuZGxlciYmKTsKKyAg
ICB2aXJ0dWFsIH5TdWJzY3JpYmVSZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6Cisg
ICAgQVNDSUlMaXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlN1YnNj
cmliZVJlcXVlc3QiX3M7IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbCB7IHN0YXJ0
SW1wbChJc1JldHJ5OjpObyk7IH0KKyAgICB2b2lkIGZpbmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNl
LmRpZENvbXBsZXRlU3Vic2NyaWJlUmVxdWVzdCgqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBl
bnVtIGNsYXNzIElzUmV0cnkgeyBObywgWWVzIH07CisgICAgdm9pZCBzdGFydEltcGwoSXNSZXRy
eSk7CisgICAgdm9pZCBhdHRlbXB0VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVyRXJy
b3IoU3RyaW5nJiYpOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3ZhcGlkUHVibGljS2V5OworfTsK
KworU3Vic2NyaWJlUmVxdWVzdDo6U3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYgc2Vydmlj
ZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBSZXN1bHRIYW5kbGVyJiYgcmVz
dWx0SGFuZGxlcikKKyAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxl
SWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikpCisgICAgLCBtX3ZhcGlk
UHVibGljS2V5KHZhcGlkUHVibGljS2V5KQoreworfQorCisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJw
dXNoZCBzaWRlIG9mIFB1c2hNYW5hZ2VyLnN1YnNjcmliZSgpLgordm9pZCBTdWJzY3JpYmVSZXF1
ZXN0OjpzdGFydEltcGwoSXNSZXRyeSBpc1JldHJ5KQoreworICAgIG1fZGF0YWJhc2UuZ2V0UmVj
b3JkQnlCdW5kbGVJZGVudGlmaWVyQW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3Bl
LCBbdGhpcywgaXNSZXRyeV0oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChy
ZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChtX3ZhcGlkUHVibGljS2V5ICE9IHJlc3VsdC0+c2Vy
dmVyVkFQSURQdWJsaWNLZXkpCisgICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2Vw
dGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlByb3ZpZGVkIGFwcGxpY2F0
aW9uU2VydmVyS2V5IGRvZXMgbm90IG1hdGNoIHRoZSBrZXkgaW4gdGhlIGV4aXN0aW5nIHN1YnNj
cmlwdGlvbi4iX3MgfSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnVsZmls
bChtYWtlUHVzaFN1YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92ZSgqcmVzdWx0KSkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0b3BpYyA9IG1ha2VQ
dXNoVG9waWMobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlKTsKKyAgICAgICAgbV9jb25uZWN0
aW9uLnN1YnNjcmliZSh0b3BpYywgbV92YXBpZFB1YmxpY0tleSwgW3RoaXMsIGlzUmV0cnksIHRv
cGljXShOU1N0cmluZyAqZW5kcG9pbnQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB1c2UgcG9pbnRl
ciBjb21wYXJpc29uIG9uY2UgQVBTVVJMVG9rZW5FcnJvckRvbWFpbiBpcyBleHRlcm5lZC4KKyAg
ICAgICAgICAgICAgICBpZiAoaXNSZXRyeSA9PSBJc1JldHJ5OjpObyAmJiBbZXJyb3IuZG9tYWlu
IGlzRXF1YWxUb1N0cmluZzpAIkFQU1VSTFRva2VuRXJyb3JEb21haW4iXSAmJiBlcnJvci5jb2Rl
ID09IEFQU1VSTFRva2VuRXJyb3JDb2RlVG9waWNBbHJlYWR5SW5GaWx0ZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXR0ZW1wdFRvUmVjb3ZlckZyb21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9y
KFdURk1vdmUodG9waWMpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoTWFuYWdl
ci5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAle3NlbnNpdGl2ZX1zKSBm
YWlsZWQgd2l0aCBkb21haW46ICV7cHVibGljfXMgY29kZTogJWxsZCkiLCBtX2J1bmRsZUlkZW50
aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCkuZGF0YSgpLCBlcnJvci5kb21haW4u
VVRGOFN0cmluZywgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZXJyb3IuY29kZSkpOworICAgICAgICAg
ICAgICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRFcnJv
ciwgIkZhaWxlZCBkdWUgdG8gaW50ZXJuYWwgc2VydmljZSBlcnJvciJfcyB9KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gY2xpZW50
S2V5cyA9IG1fc2VydmljZS5jb25uZWN0aW9uKCkuZ2VuZXJhdGVDbGllbnRLZXlzKCk7CisgICAg
ICAgICAgICBQdXNoUmVjb3JkIHJlY29yZDsKKyAgICAgICAgICAgIHJlY29yZC5idW5kbGVJRCA9
IG1fYnVuZGxlSWRlbnRpZmllcjsKKyAgICAgICAgICAgIHJlY29yZC5zZWN1cml0eU9yaWdpbiA9
IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKG1fc2NvcGUpLT5kYXRhKCkudG9TdHJp
bmcoKTsKKyAgICAgICAgICAgIHJlY29yZC5zY29wZSA9IG1fc2NvcGU7CisgICAgICAgICAgICBy
ZWNvcmQuZW5kcG9pbnQgPSBlbmRwb2ludDsKKyAgICAgICAgICAgIHJlY29yZC50b3BpYyA9IFdU
Rk1vdmUodG9waWMpOworICAgICAgICAgICAgcmVjb3JkLnNlcnZlclZBUElEUHVibGljS2V5ID0g
bV92YXBpZFB1YmxpY0tleTsKKyAgICAgICAgICAgIHJlY29yZC5jbGllbnRQdWJsaWNLZXkgPSBX
VEZNb3ZlKGNsaWVudEtleXMuY2xpZW50UDI1NkRIS2V5UGFpci5wdWJsaWNLZXkpOworICAgICAg
ICAgICAgcmVjb3JkLmNsaWVudFByaXZhdGVLZXkgPSBXVEZNb3ZlKGNsaWVudEtleXMuY2xpZW50
UDI1NkRIS2V5UGFpci5wcml2YXRlS2V5KTsKKyAgICAgICAgICAgIHJlY29yZC5zaGFyZWRBdXRo
U2VjcmV0ID0gV1RGTW92ZShjbGllbnRLZXlzLnNoYXJlZEF1dGhTZWNyZXQpOworCisgICAgICAg
ICAgICBtX2RhdGFiYXNlLmluc2VydFJlY29yZChyZWNvcmQsIFt0aGlzXShhdXRvJiYgcmVzdWx0
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaE1hbmFnZXIuc3Vic2NyaWJlKGJ1bmRsZUlE
OiAle3B1YmxpY31zLCBzY29wZTogJXtzZW5zaXRpdmV9cykgZmFpbGVkIHdpdGggZGF0YWJhc2Ug
ZXJyb3IiLCBtX2J1bmRsZUlkZW50aWZpZXIudXRmOCgpLmRhdGEoKSwgbV9zY29wZS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRh
dGEgeyBXZWJDb3JlOjpBYm9ydEVycm9yLCAiRmFpbGVkIGR1ZSB0byBpbnRlcm5hbCBkYXRhYmFz
ZSBlcnJvciJfcyB9KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IHBhcnRpYWwgdG9waWMg
bGlzdCB1cGRhdGVzLgorICAgICAgICAgICAgICAgIHVwZGF0ZVRvcGljTGlzdHMobV9jb25uZWN0
aW9uLCBtX2RhdGFiYXNlLCBbdGhpcywgcmVjb3JkID0gV1RGTW92ZSgqcmVzdWx0KV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgICAgICAgICAgZnVsZmlsbChtYWtlUHVzaFN1YnNjcmlwdGlvbkZy
b21SZWNvcmQoV1RGTW92ZShyZWNvcmQpKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKy8vIFRyaWVzIHRvIHJlY292ZXIg
ZnJvbSBhIHRvcGljIGJlaW5nIG1vdmVkIHRvIHRoZSBnbG9iYWwgcGF1c2VkIGZpbHRlciAocmRh
cjovLzg4MTM5MzMwKS4KK3ZvaWQgU3Vic2NyaWJlUmVxdWVzdDo6YXR0ZW1wdFRvUmVjb3ZlckZy
b21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFN0cmluZyYmIHRvcGljKQoreworICAgIFdvcmtR
dWV1ZTo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB0b3BpYyA9IFdURk1vdmUodG9waWMpXSgpIG11
dGFibGUgeworICAgICAgICAvLyBUaGlzIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcGF1c2VkIHRv
cGljIGFuZCB0ZWxscyBhcHNkIHRvIGZvcmdldCBhYm91dCB0aGUgdG9waWMuCisgICAgICAgIGF1
dG8gb3JpZ2luYWxUb3BpY3MgPSBtX2Nvbm5lY3Rpb24uaWdub3JlZFRvcGljcygpOworICAgICAg
ICBhdXRvIGF1Z21lbnRlZFRvcGljcyA9IG9yaWdpbmFsVG9waWNzOworICAgICAgICBhdWdtZW50
ZWRUb3BpY3MuYXBwZW5kKHRvcGljKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9yZWRU
b3BpY3MoV1RGTW92ZShhdWdtZW50ZWRUb3BpY3MpKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNl
dElnbm9yZWRUb3BpY3MoV1RGTW92ZShvcmlnaW5hbFRvcGljcykpOworCisgICAgICAgIFdvcmtR
dWV1ZTo6bWFpbigpLmRpc3BhdGNoKFt0aGlzXSgpIG11dGFibGUgeworICAgICAgICAgICAgc3Rh
cnRJbXBsKElzUmV0cnk6Olllcyk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCitjbGFzcyBV
bnN1YnNjcmliZVJlcXVlc3QgOiBwdWJsaWMgUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbDxib29sPiB7
CitwdWJsaWM6CisgICAgVW5zdWJzY3JpYmVSZXF1ZXN0KFB1c2hTZXJ2aWNlJiwgY29uc3QgU3Ry
aW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBQdXNoU3Vic2NyaXB0
aW9uSWRlbnRpZmllciwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5VbnN1YnNjcmli
ZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKK3Byb3RlY3RlZDoKKyAgICBBU0NJSUxpdGVyYWwgZGVz
Y3JpcHRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiAiVW5zdWJzY3JpYmVSZXF1ZXN0Il9zOyB9
CisgICAgdm9pZCBzdGFydEludGVybmFsKCkgZmluYWw7CisgICAgdm9pZCBmaW5pc2goKSBmaW5h
bCB7IG1fc2VydmljZS5kaWRDb21wbGV0ZVVuc3Vic2NyaWJlUmVxdWVzdCgqdGhpcyk7IH0KKwor
cHJpdmF0ZToKKyAgICBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciBtX3N1YnNjcmlwdGlvbklk
ZW50aWZpZXI7Cit9OworCitVbnN1YnNjcmliZVJlcXVlc3Q6OlVuc3Vic2NyaWJlUmVxdWVzdChQ
dXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNjb3BlLCBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciBzdWJzY3JpcHRpb25J
ZGVudGlmaWVyLCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikKKyAgICA6IFB1c2hTZXJ2
aWNlUmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUo
cmVzdWx0SGFuZGxlcikpCisgICAgLCBtX3N1YnNjcmlwdGlvbklkZW50aWZpZXIoc3Vic2NyaXB0
aW9uSWRlbnRpZmllcikKK3sKK30KKworLy8gSW1wbGVtZW50cyB0aGUgd2VicHVzaGQgc2lkZSBv
ZiBQdXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlLgordm9pZCBVbnN1YnNjcmliZVJlcXVlc3Q6
OnN0YXJ0SW50ZXJuYWwoKQoreworICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJZGVu
dGlmaWVyQW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpc10oYXV0byYm
IHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVzdWx0IHx8IG1fc3Vic2NyaXB0aW9u
SWRlbnRpZmllciAhPSByZXN1bHQtPmlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGZ1bGZpbGwo
ZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0
b3BpYyA9IG1ha2VQdXNoVG9waWMobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlKTsKKyAgICAg
ICAgbV9jb25uZWN0aW9uLnVuc3Vic2NyaWJlKHRvcGljLCByZXN1bHQtPnNlcnZlclZBUElEUHVi
bGljS2V5LCBbdGhpc10oYm9vbCB1bnN1YnNjcmliZWQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxl
IHsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgICAgIC8vIElmIHdlIGZhaWwg
dG8gdW5zdWJzY3JpYmUgZnJvbSBhcHNkLCBqdXN0IGRyb3AgYSBsb2cuIFdlIHN0aWxsIHdhbnQg
dG8gY29udGludWUgYW5kIHJlbW92ZSB0aGUgcmVjb3JkIGZyb20gb3VyIGRhdGFiYXNlIGluIGNh
c2UgdGhlcmUncyBhIHN0YXRlIG1pc21hdGNoIGJldHdlZW4gb3VyIGRhdGFiYXNlIGFuZCBhcHNk
J3MgZGF0YWJhc2UuCisgICAgICAgICAgICBpZiAoIXVuc3Vic2NyaWJlZCkKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZShidW5k
bGVJRDogJXtwdWJsaWN9cywgc2NvcGU6ICV7c2Vuc2l0aXZlfXMpIGZhaWxlZCB3aXRoIGRvbWFp
bjogJXtwdWJsaWN9cyBjb2RlOiAlbGxkKSIsIG1fYnVuZGxlSWRlbnRpZmllci51dGY4KCkuZGF0
YSgpLCBtX3Njb3BlLnV0ZjgoKS5kYXRhKCksIGVycm9yLmRvbWFpbi5VVEY4U3RyaW5nID86ICJu
b25lIiwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZXJyb3IuY29kZSkpOworI2Vsc2UKKyAgICAgICAg
ICAgIFVOVVNFRF9QQVJBTSh1bnN1YnNjcmliZWQpOworICAgICAgICAgICAgVU5VU0VEX1BBUkFN
KGVycm9yKTsKKyNlbmRpZgorCisgICAgICAgICAgICBtX2RhdGFiYXNlLnJlbW92ZVJlY29yZEJ5
SWRlbnRpZmllcihtX3N1YnNjcmlwdGlvbklkZW50aWZpZXIsIFt0aGlzXShib29sIHJlbW92ZWQp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlZCkgeworICAgICAgICAgICAg
ICAgICAgICBmdWxmaWxsKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IHBhcnRp
YWwgdG9waWMgbGlzdCB1cGRhdGVzLgorICAgICAgICAgICAgICAgIHVwZGF0ZVRvcGljTGlzdHMo
bV9jb25uZWN0aW9uLCBtX2RhdGFiYXNlLCBbdGhpc10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICAgICAgZnVsZmlsbCh0cnVlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLy8gT25seSBhbGxvdyBvbmUgcmVxdWVz
dCBwZXIgKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlKSB0byBwcm9jZWVkIGF0IG9uY2UuIEZvciBp
bnN0YW5jZSwgaWYgYSBnaXZlbgorLy8gcGFnZSBjYWxscyBQdXNoTWFuYWdlci5zdWJzY3JpYmUo
KSB0d2ljZSBpbiBhIHJvdywgdGhlIHNlY29uZCBzdWJzY3JpYmUgY2FsbCB3b24ndCBzdGFydCB1
bnRpbAorLy8gdGhlIGZpcnN0IG9uZSBjb21wbGV0ZXMuCit2b2lkIFB1c2hTZXJ2aWNlOjplbnF1
ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCYgbWFwLCBzdGQ6OnVu
aXF1ZV9wdHI8UHVzaFNlcnZpY2VSZXF1ZXN0PiYmIHJlcXVlc3QpCit7CisgICAgYXV0byBrZXkg
PSBzdGQ6Om1ha2VfdHVwbGUocmVxdWVzdC0+YnVuZGxlSWRlbnRpZmllcigpLCByZXF1ZXN0LT5z
Y29wZSgpKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1hcC5lbnN1cmUoa2V5LCBbXSgpIHsKKyAg
ICAgICAgcmV0dXJuIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+PiB7
IH07CisgICAgfSk7CisKKyAgICBhdXRvIGFkZGVkUmVxdWVzdCA9IHJlcXVlc3QuZ2V0KCk7Cisg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZShyZXF1ZXN0KSk7CisK
KyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZGVkUmVxdWVzdC0+c3Rh
cnQoKTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6ZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3Qo
UHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiBtYXAsIFB1c2hTZXJ2aWNlUmVxdWVzdCYgcmVxdWVzdCkK
K3sKKyAgICBhdXRvIGtleSA9IHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0LmJ1bmRsZUlkZW50aWZp
ZXIoKSwgcmVxdWVzdC5zY29wZSgpKTsKKyAgICBhdXRvIHJlcXVlc3RRdWV1ZUl0ID0gbWFwLmZp
bmQoa2V5KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHJlcXVlc3RRdWV1ZUl0ICE9IG1hcC5lbmQo
KSk7CisgICAgYXV0byYgcmVxdWVzdFF1ZXVlID0gcmVxdWVzdFF1ZXVlSXQtPnZhbHVlOworICAg
IFJFTEVBU0VfQVNTRVJUKHJlcXVlc3RRdWV1ZS5zaXplKCkgPiAwKTsKKyAgICBhdXRvIGN1cnJl
bnRSZXF1ZXN0ID0gcmVxdWVzdFF1ZXVlLnRha2VGaXJzdCgpOworICAgIFJFTEVBU0VfQVNTRVJU
KGN1cnJlbnRSZXF1ZXN0LmdldCgpID09ICZyZXF1ZXN0KTsKKworICAgIFB1c2hTZXJ2aWNlUmVx
dWVzdCogbmV4dFJlcXVlc3QgPSBudWxscHRyOworICAgIGlmICghcmVxdWVzdFF1ZXVlLnNpemUo
KSkKKyAgICAgICAgbWFwLnJlbW92ZShyZXF1ZXN0UXVldWVJdCk7CisgICAgZWxzZQorICAgICAg
ICBuZXh0UmVxdWVzdCA9IHJlcXVlc3RRdWV1ZS5maXJzdCgpLmdldCgpOworCisgICAgLy8gRXZl
biBpZiB0aGVyZSdzIG5vIG5leHQgcmVxdWVzdCB0byBzdGFydCwgaG9sZCBvbiB0byBjdXJyZW50
UmVxdWVzdCB1bnRpbCB0aGUgbmV4dCB0dXJuIG9mIHRoZSBydW4gbG9vcCBzaW5jZSB3ZSdyZSBp
biB0aGUgbWlkZGxlIG9mIGV4ZWN1dGluZyB0aGUgZmluaXNoKCkgbWVtYmVyIGZ1bmN0aW9uIG9m
IGN1cnJlbnRSZXF1ZXN0LgorICAgIFdvcmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFtjdXJyZW50
UmVxdWVzdCA9IFdURk1vdmUoY3VycmVudFJlcXVlc3QpLCBuZXh0UmVxdWVzdF0geworICAgICAg
ICBpZiAobmV4dFJlcXVlc3QpCisgICAgICAgICAgICBuZXh0UmVxdWVzdC0+c3RhcnQoKTsKKyAg
ICB9KTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6Z2V0U3Vic2NyaXB0aW9uKGNvbnN0IFN0cmlu
ZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBFeHBlY3RlZDxzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlB1c2hTdWJzY3Jp
cHRpb25EYXRhPiwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1fZ2V0U3Vic2NyaXB0aW9uUmVx
dWVzdHMsIG1ha2VVbmlxdWU8R2V0U3Vic2NyaXB0aW9uUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlk
ZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCit2b2lk
IFB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZUdldFN1YnNjcmlwdGlvblJlcXVlc3QoR2V0U3Vic2Ny
aXB0aW9uUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVz
dChtX2dldFN1YnNjcmlwdGlvblJlcXVlc3RzLCByZXF1ZXN0KTsKK30KKwordm9pZCBQdXNoU2Vy
dmljZTo6c3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3Ry
aW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9u
RGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KG1fc3Vic2NyaWJlUmVxdWVzdHMsIG1ha2VV
bmlxdWU8U3Vic2NyaWJlUmVxdWVzdD4oKnRoaXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCB2
YXBpZFB1YmxpY0tleSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpKTsKK30KKwordm9pZCBQ
dXNoU2VydmljZTo6ZGlkQ29tcGxldGVTdWJzY3JpYmVSZXF1ZXN0KFN1YnNjcmliZVJlcXVlc3Qm
IHJlcXVlc3QpCit7CisgICAgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV9zdWJzY3JpYmVS
ZXF1ZXN0cywgcmVxdWVzdCk7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OnVuc3Vic2NyaWJlKGNv
bnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUHVzaFN1
YnNjcmlwdGlvbklkZW50aWZpZXIgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGVucXVldWVQdXNoU2VydmljZVJlcXVlc3Qo
bV91bnN1YnNjcmliZVJlcXVlc3RzLCBtYWtlVW5pcXVlPFVuc3Vic2NyaWJlUmVxdWVzdD4oKnRo
aXMsIGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21w
bGV0ZVVuc3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3QmIHJlcXVlc3QpCit7Cisg
ICAgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QobV91bnN1YnNjcmliZVJlcXVlc3RzLCByZXF1
ZXN0KTsKK30KKworZW51bSBjbGFzcyBDb250ZW50RW5jb2RpbmcgeworICAgIEVtcHR5LAorICAg
IEFFU0dDTSwKKyAgICBBRVMxMjhHQ00KK307CisKK3N0cnVjdCBSYXdQdXNoTWVzc2FnZSB7Cisg
ICAgU3RyaW5nIHRvcGljOworICAgIENvbnRlbnRFbmNvZGluZyBlbmNvZGluZzsKKworICAgIC8v
IE9ubHkgc2V0IGlmIGVuY29kaW5nIGlzIG5vdCBDb250ZW50RW5jb2Rpbmc6OkVtcHR5LgorICAg
IFZlY3Rvcjx1aW50OF90PiBlbmNyeXB0ZWRQYXlsb2FkOworCisgICAgLy8gT25seSBzZXQgaWYg
ZW5jb2RpbmcgaXMgQ29udGVudEVuY29kaW5nOjpBRVNHQ00uCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHNlcnZlclB1YmxpY0tleTsKKyAgICBWZWN0b3I8dWludDhfdD4gc2FsdDsKKworfTsKKworc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UmF3UHVzaE1lc3NhZ2U+IG1ha2VSYXdQdXNoTWVzc2FnZShOU1N0
cmluZyAqdG9waWMsIE5TRGljdGlvbmFyeSogdXNlckluZm8pCit7CisgICAgUmF3UHVzaE1lc3Nh
Z2UgbWVzc2FnZTsKKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBtZXNzYWdlLnRv
cGljID0gdG9waWM7CisgICAgICAgIE5TU3RyaW5nICpjb250ZW50RW5jb2RpbmcgPSB1c2VySW5m
b1tAImNvbnRlbnRfZW5jb2RpbmciXTsKKyAgICAgICAgTlNTdHJpbmcgKnBheWxvYWRCYXNlNjQg
PSB1c2VySW5mb1tAInBheWxvYWQiXTsKKworICAgICAgICBpZiAoIWNvbnRlbnRFbmNvZGluZy5s
ZW5ndGggfHwgIXBheWxvYWRCYXNlNjQubGVuZ3RoKSB7CisgICAgICAgICAgICBtZXNzYWdlLmVu
Y29kaW5nID0gQ29udGVudEVuY29kaW5nOjpFbXB0eTsKKyAgICAgICAgICAgIHJldHVybiBtZXNz
YWdlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFtjb250ZW50RW5jb2RpbmcgaXNFcXVhbFRv
U3RyaW5nOkAiYWVzMTI4Z2NtIl0pCisgICAgICAgICAgICBtZXNzYWdlLmVuY29kaW5nID0gQ29u
dGVudEVuY29kaW5nOjpBRVMxMjhHQ007CisgICAgICAgIGVsc2UgaWYgKFtjb250ZW50RW5jb2Rp
bmcgaXNFcXVhbFRvU3RyaW5nOkAiYWVzZ2NtIl0pIHsKKyAgICAgICAgICAgIG1lc3NhZ2UuZW5j
b2RpbmcgPSBDb250ZW50RW5jb2Rpbmc6OkFFU0dDTTsKKworICAgICAgICAgICAgTlNTdHJpbmcg
KnNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCA9IHVzZXJJbmZvW0AiYXNfcHVibGlja2V5Il07Cisg
ICAgICAgICAgICBOU1N0cmluZyAqc2FsdEJhc2U2NFVSTCA9IHVzZXJJbmZvW0AiYXNfc2FsdCJd
OworICAgICAgICAgICAgaWYgKCFzZXJ2ZXJQdWJsaWNLZXlCYXNlNjRVUkwgfHwgIXNhbHRCYXNl
NjRVUkwpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgYWVz
Z2NtLWVuY3J5cHRlZCBwdXNoIHdpdGhvdXQgcmVxdWlyZWQgc2VydmVyIGtleSBhbmQgc2FsdCIp
OworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGF1dG8gc2VydmVyUHVibGljS2V5ID0gYmFzZTY0VVJMRGVjb2RlKHNlcnZl
clB1YmxpY0tleUJhc2U2NFVSTCk7CisgICAgICAgICAgICBhdXRvIHNhbHQgPSBiYXNlNjRVUkxE
ZWNvZGUoc2FsdEJhc2U2NFVSTCk7CisgICAgICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleSB8
fCAhc2FsdCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJEcm9wcGluZyBh
ZXNnY20tZW5jcnlwdGVkIHB1c2ggd2l0aCBpbXByb3Blcmx5IGVuY29kZWQgc2VydmVyIGtleSBh
bmQgc2FsdCIpOworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG1lc3NhZ2Uuc2VydmVyUHVibGljS2V5ID0gV1RGTW92ZSgq
c2VydmVyUHVibGljS2V5KTsKKyAgICAgICAgICAgIG1lc3NhZ2Uuc2FsdCA9IFdURk1vdmUoKnNh
bHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRy
b3BwaW5nIHB1c2ggd2l0aCB1bmtub3duIGNvbnRlbnQgZW5jb2Rpbmc6ICV7cHVibGljfXMiLCBj
b250ZW50RW5jb2RpbmcuVVRGOFN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgICAgICB9CisKKyAgICAgICAgYXV0byBwYXlsb2FkID0gYmFzZTY0RGVjb2RlKHBh
eWxvYWRCYXNlNjQpOworICAgICAgICBpZiAoIXBheWxvYWQpIHsKKyAgICAgICAgICAgIFJFTEVB
U0VfTE9HKFB1c2gsICJEcm9wcGluZyBwdXNoIHdpdGggaW1wcm9wZXJseSBlbmNvZGVkIHBheWxv
YWQiKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICAg
ICAgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkID0gV1RGTW92ZSgqcGF5bG9hZCk7CisgICAgfQor
CisgICAgcmV0dXJuIG1lc3NhZ2U7Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZFJlY2VpdmVQ
dXNoTWVzc2FnZShOU1N0cmluZyogdG9waWMsIE5TRGljdGlvbmFyeSogdXNlckluZm8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRvIG1l
c3NhZ2VSZXN1bHQgPSBtYWtlUmF3UHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKKyAgICBp
ZiAoIW1lc3NhZ2VSZXN1bHQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YWJhc2UtPmdl
dFJlY29yZEJ5VG9waWModG9waWMsIFt0aGlzLCBtZXNzYWdlID0gV1RGTW92ZSgqbWVzc2FnZVJl
c3VsdCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGF1
dG8mJiByZWNvcmRSZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIXJlY29yZFJlc3VsdCkg
eworICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIGluY29taW5nIHB1c2gg
c2VudCB0byB1bmtub3duIHRvcGljOiAle3NlbnNpdGl2ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byByZWNvcmQgPSBXVEZNb3ZlKCpyZWNv
cmRSZXN1bHQpOworCisgICAgICAgIGlmIChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRFbmNv
ZGluZzo6RW1wdHkpIHsKKyAgICAgICAgICAgIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIo
cmVjb3JkLmJ1bmRsZUlELCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlIHsgeyB9LCBVUkwoVVJMKCks
IHJlY29yZC5zY29wZSkgfSk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUHVzaENyeXB0bzo6Q2xpZW50
S2V5cyBjbGllbnRLZXlzIHsKKyAgICAgICAgICAgIHsgV1RGTW92ZShyZWNvcmQuY2xpZW50UHVi
bGljS2V5KSwgV1RGTW92ZShyZWNvcmQuY2xpZW50UHJpdmF0ZUtleSkgfSwKKyAgICAgICAgICAg
IFdURk1vdmUocmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQpCisgICAgICAgIH07CisKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGRlY3J5cHRlZFBheWxvYWQ7CisgICAgICAg
IGlmIChtZXNzYWdlLmVuY29kaW5nID09IENvbnRlbnRFbmNvZGluZzo6QUVTMTI4R0NNKQorICAg
ICAgICAgICAgZGVjcnlwdGVkUGF5bG9hZCA9IGRlY3J5cHRBRVMxMjhHQ01QYXlsb2FkKGNsaWVu
dEtleXMsIG1lc3NhZ2UuZW5jcnlwdGVkUGF5bG9hZCk7CisgICAgICAgIGVsc2UgaWYgKG1lc3Nh
Z2UuZW5jb2RpbmcgPT0gQ29udGVudEVuY29kaW5nOjpBRVNHQ00pCisgICAgICAgICAgICBkZWNy
eXB0ZWRQYXlsb2FkID0gZGVjcnlwdEFFU0dDTVBheWxvYWQoY2xpZW50S2V5cywgbWVzc2FnZS5z
ZXJ2ZXJQdWJsaWNLZXksIG1lc3NhZ2Uuc2FsdCwgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkKTsK
KworICAgICAgICBpZiAoIWRlY3J5cHRlZFBheWxvYWQpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HKFB1c2gsICJEcm9wcGluZyBpbmNvbWluZyBwdXNoIGR1ZSB0byBkZWNyeXB0aW9uIGVycm9y
IGZvciB0b3BpYyAle3NlbnNpdGl2ZX1zIiwgbWVzc2FnZS50b3BpYy51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyKHJlY29yZC5i
dW5kbGVJRCwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSB7IFdURk1vdmUoKmRlY3J5cHRlZFBheWxv
YWQpLCBVUkwoVVJMKCksIHJlY29yZC5zY29wZSkgfSk7CisKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCmluZGV4IDJjMTQxNDRj
NjFiYjNlZmFlNGVkMzI4ZTE1MjBkM2VjZjA4MzE3ZWYuLjE5ODE0M2Y1Njk3Y2QyOGM2OTI4ZDQ1
NjhjMjFjMzI1NDkyMGQyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVz
aFNlcnZpY2VDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgPFdlYkNvcmUvUHVzaE1lc3NhZ2VDcnlwdG8uaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxl
dGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KQEAgLTQ3LDYgKzQ4LDggQEAgcHVibGljOgogICAgIFB1c2hTZXJ2aWNlQ29ubmVj
dGlvbigpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIH5QdXNoU2VydmljZUNvbm5lY3Rpb24oKSA9
IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlB1c2hDcnlwdG86OkNsaWVudEtleXMg
Z2VuZXJhdGVDbGllbnRLZXlzKCk7CisKICAgICB1c2luZyBTdWJzY3JpYmVIYW5kbGVyID0gQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChOU1N0cmluZyAqLCBOU0Vycm9yICopPjsKICAgICB2aXJ0dWFs
IHZvaWQgc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgdmFwaWRQdWJsaWNLZXksIFN1YnNjcmliZUhhbmRsZXImJikgPSAwOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbSBiL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmluZGV4IDUzNDMzMjVl
YjVlYTIwM2U4ZGY2ZmY4MzAzY2I5YjBmZmM4MTMyMWIuLjkyZjgxNDI3N2E4MzgxNTMxNjg4YjBl
NDg1MTgyZDQzZDg1Y2M4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVz
aFNlcnZpY2VDb25uZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNl
cnZpY2VDb25uZWN0aW9uLm1tCkBAIC0yOCw4ICsyOCwxNSBAQAogCiAjaW1wb3J0IDx3dGYvV29y
a1F1ZXVlLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBuYW1lc3BhY2UgV2ViUHVz
aEQgewogCitQdXNoQ3J5cHRvOjpDbGllbnRLZXlzIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6Z2Vu
ZXJhdGVDbGllbnRLZXlzKCkKK3sKKyAgICByZXR1cm4gUHVzaENyeXB0bzo6Q2xpZW50S2V5czo6
Z2VuZXJhdGUoKTsKK30KKwogdm9pZCBQdXNoU2VydmljZUNvbm5lY3Rpb246OnN0YXJ0TGlzdGVu
aW5nRm9yUHVzaE1lc3NhZ2VzKEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyJiYgaGFuZGxlcikK
IHsKICAgICBtX2luY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShoYW5kbGVyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKaW5kZXggYWYzMTg1N2RiODczN2E5
YjY0Mzk1ZmIwMDA0NzUwYTk1OGU1NDhkMC4uMDI4MDg0ZTUyYjRhMGRiYjNjMTQ5YmU2Yzk3MzZm
NzU3NWU3ODdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFl
bW9uLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLmgKQEAgLTI3
LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlB1c2hDbGllbnRDb25uZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmgiCisjaW5jbHVkZSAiUHVzaFNlcnZpY2UuaCIKICNp
bmNsdWRlICJXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRl
ICJXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIK
QEAgLTYxLDYgKzYyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3Rpb25BZGRlZCh4cGNf
Y29ubmVjdGlvbl90KTsKICAgICB2b2lkIGNvbm5lY3Rpb25SZW1vdmVkKHhwY19jb25uZWN0aW9u
X3QpOwogCisgICAgdm9pZCBzdGFydE1vY2tQdXNoU2VydmljZSgpOworICAgIHZvaWQgc3RhcnRQ
dXNoU2VydmljZShjb25zdCBTdHJpbmcmIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBjb25zdCBT
dHJpbmcmIHB1c2hEYXRhYmFzZVBhdGgpOworICAgIHZvaWQgaGFuZGxlSW5jb21pbmdQdXNoKGNv
bnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYmKTsK
KwogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMKICAgICB2b2lkIGVjaG9Ud2ljZShDbGllbnRDb25u
ZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJp
bmcmKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCByZXF1ZXN0U3lzdGVtTm90aWZpY2F0aW9u
UGVybWlzc2lvbihDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJiByZXBseVNlbmRlcik7CkBAIC02OSw2ICs3NCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldERlYnVnTW9kZUlzRW5hYmxlZChDbGllbnRDb25uZWN0aW9uKiwgYm9v
bCk7CiAgICAgdm9pZCB1cGRhdGVDb25uZWN0aW9uQ29uZmlndXJhdGlvbihDbGllbnRDb25uZWN0
aW9uKiwgY29uc3QgV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uJik7CiAgICAg
dm9pZCBpbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0
IFB1c2hNZXNzYWdlRm9yVGVzdGluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
OworICAgIHZvaWQgaW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKENsaWVudENv
bm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KTsKICAgICB2b2lkIGdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29ubmVjdGlvbiosIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+
Jik+JiYgcmVwbHlTZW5kZXIpOwogICAgIHZvaWQgc3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGll
bnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVSTCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBhcHBsaWNhdGlvblNlcnZlcktleSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBl
Y3RlZDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0
YT4mKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCB1bnN1YnNjcmliZUZyb21QdXNoU2Vydmlj
ZShDbGllbnRDb25uZWN0aW9uKiwgY29uc3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1
YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0
ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcik7CkBAIC04
OCw5ICs5NCwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBub3RpZnlDbGllbnRQdXNoTWVzc2Fn
ZUlzQXZhaWxhYmxlKGNvbnN0IFN0cmluZyYgY2xpZW50Q29kZVNpZ25pbmdJZGVudGlmaWVyKTsK
IAorICAgIHZvaWQgc2V0UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPiYm
KTsKKyAgICB2b2lkIHJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShGdW5jdGlvbjx2b2lkKCk+
JiYpOworCiAgICAgQ2xpZW50Q29ubmVjdGlvbiogdG9DbGllbnRDb25uZWN0aW9uKHhwY19jb25u
ZWN0aW9uX3QpOwogICAgIEhhc2hNYXA8eHBjX2Nvbm5lY3Rpb25fdCwgUmVmPENsaWVudENvbm5l
Y3Rpb24+PiBtX2Nvbm5lY3Rpb25NYXA7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNlcnZp
Y2U+IG1fcHVzaFNlcnZpY2U7CisgICAgYm9vbCBtX3B1c2hTZXJ2aWNlU3RhcnRlZCB7IGZhbHNl
IH07CisgICAgRGVxdWU8RnVuY3Rpb248dm9pZCgpPj4gbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5j
dGlvbnM7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3Nh
Z2U+PiBtX3B1c2hNZXNzYWdlczsKICAgICBIYXNoTWFwPFN0cmluZywgRGVxdWU8UHVzaE1lc3Nh
Z2VGb3JUZXN0aW5nPj4gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tIGIvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IGE4ZmU0OWY1MmQ3NjMyNjYzMWNhYzdkNzY2
YzA5MTQ5NWU5Y2U1NWUuLmFkZDZlM2Q4YWRmZWE4OTk4ODhmNGJhZjYxYWNjMDUzMTM2M2RjYzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KQEAgLTQwLDYgKzQwLDcg
QEAKICNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2ltcG9ydCA8d3RmL1NwYW4uaD4K
ICNpbXBvcnQgPHd0Zi9VUkwuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVldWUuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDo6V2ViUHVzaEQ7CiAKQEAgLTkxLDYgKzkyLDExIEBAIEFSR1VNRU5U
UyhQdXNoTWVzc2FnZUZvclRlc3RpbmcpCiBSRVBMWShib29sKQogRU5ECiAKK0ZVTkNUSU9OKGlu
amVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZykKK0FSR1VNRU5UUyhTdHJpbmcpCitS
RVBMWShib29sKQorRU5ECisKIEZVTkNUSU9OKHN1YnNjcmliZVRvUHVzaFNlcnZpY2UpCiBBUkdV
TUVOVFMoVVJMLCBWZWN0b3I8dWludDhfdD4pCiBSRVBMWShjb25zdCBFeHBlY3RlZDxXZWJDb3Jl
OjpQdXNoU3Vic2NyaXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKQpAQCAtMTUx
LDYgKzE1NywxMyBAQCBXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgaW5qZWN0UHVzaE1lc3NhZ2VG
b3JUZXN0aW5nOjplbmNvZGVSZXBseShib29sIHJlcGx5KQogICAgIHJldHVybiBlbmNvZGVyLnRh
a2VCdWZmZXIoKTsKIH0KIAorV2ViUHVzaEQ6OkVuY29kZWRNZXNzYWdlIGluamVjdEVuY3J5cHRl
ZFB1c2hNZXNzYWdlRm9yVGVzdGluZzo6ZW5jb2RlUmVwbHkoYm9vbCByZXBseSkKK3sKKyAgICBX
ZWJLaXQ6OkRhZW1vbjo6RW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgcmVwbHk7Cisg
ICAgcmV0dXJuIGVuY29kZXIudGFrZUJ1ZmZlcigpOworfQorCiBXZWJQdXNoRDo6RW5jb2RlZE1l
c3NhZ2UgZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczo6ZW5jb2RlUmVwbHkoY29uc3QgVmVjdG9yPFdl
YktpdDo6V2ViUHVzaE1lc3NhZ2U+JiByZXBseSkKIHsKICAgICBXZWJLaXQ6OkRhZW1vbjo6RW5j
b2RlciBlbmNvZGVyOwpAQCAtMjI0LDYgKzIzNyw1MSBAQCBEYWVtb24mIERhZW1vbjo6c2luZ2xl
dG9uKCkKICAgICByZXR1cm4gZGFlbW9uOwogfQogCit2b2lkIERhZW1vbjo6c3RhcnRNb2NrUHVz
aFNlcnZpY2UoKQoreworICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3QgU3Ry
aW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkg
eworICAgICAgICBoYW5kbGVJbmNvbWluZ1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92ZSht
ZXNzYWdlKSk7CisgICAgfTsKKyAgICBQdXNoU2VydmljZTo6Y3JlYXRlTW9ja1NlcnZpY2UoV1RG
TW92ZShtZXNzYWdlSGFuZGxlciksIFt0aGlzXShhdXRvJiYgcHVzaFNlcnZpY2UpIG11dGFibGUg
eworICAgICAgICBzZXRQdXNoU2VydmljZShXVEZNb3ZlKHB1c2hTZXJ2aWNlKSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgRGFlbW9uOjpzdGFydFB1c2hTZXJ2aWNlKGNvbnN0IFN0cmluZyYgaW5jb21p
bmdQdXNoU2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKQoreworICAgIGF1
dG8gbWVzc2FnZUhhbmRsZXIgPSBbdGhpc10oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlJiYgbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVJbmNv
bWluZ1B1c2goYnVuZGxlSWRlbnRpZmllciwgV1RGTW92ZShtZXNzYWdlKSk7CisgICAgfTsKKyAg
ICBQdXNoU2VydmljZTo6Y3JlYXRlKGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBkYXRhYmFzZVBh
dGgsIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpLCBbdGhpc10oYXV0byYmIHB1c2hTZXJ2aWNlKSBt
dXRhYmxlIHsKKyAgICAgICAgc2V0UHVzaFNlcnZpY2UoV1RGTW92ZShwdXNoU2VydmljZSkpOwor
ICAgIH0pOworfQorCit2b2lkIERhZW1vbjo6c2V0UHVzaFNlcnZpY2Uoc3RkOjp1bmlxdWVfcHRy
PFB1c2hTZXJ2aWNlPiYmIHB1c2hTZXJ2aWNlKQoreworICAgIG1fcHVzaFNlcnZpY2UgPSBXVEZN
b3ZlKHB1c2hTZXJ2aWNlKTsKKyAgICBtX3B1c2hTZXJ2aWNlU3RhcnRlZCA9IHRydWU7CisKKyAg
ICBpZiAoIW1fcGVuZGluZ1B1c2hTZXJ2aWNlRnVuY3Rpb25zLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0Y2goW3RoaXNdKCkgeworICAgICAg
ICB3aGlsZSAobV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuc2l6ZSgpKSB7CisgICAgICAg
ICAgICBhdXRvIGZ1bmN0aW9uID0gbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMudGFrZUZp
cnN0KCk7CisgICAgICAgICAgICBmdW5jdGlvbigpOworICAgICAgICB9CisgICAgfSk7Cit9CisK
K3ZvaWQgRGFlbW9uOjpydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoRnVuY3Rpb248dm9pZCgp
PiYmIGZ1bmN0aW9uKQoreworICAgIGlmICghbV9wdXNoU2VydmljZVN0YXJ0ZWQpIHsKKyAgICAg
ICAgbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb24p
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdW5jdGlvbigpOworfQorCiB2b2lkIERh
ZW1vbjo6YnJvYWRjYXN0RGVidWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVsIG1lc3NhZ2VMZXZl
bCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0
T1NPYmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKQEAg
LTMyNSw2ICszODMsOSBAQCB2b2lkIERhZW1vbjo6ZGVjb2RlQW5kSGFuZGxlTWVzc2FnZSh4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lcwogICAgIGNhc2UgTWVzc2Fn
ZVR5cGU6OkluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKICAgICAgICAgaGFuZGxlV2ViUHVz
aERNZXNzYWdlV2l0aFJlcGx5PE1lc3NhZ2VJbmZvOjppbmplY3RQdXNoTWVzc2FnZUZvclRlc3Rp
bmc+KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVy
KSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5cHRl
ZFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKKyAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0
aFJlcGx5PE1lc3NhZ2VJbmZvOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rpbmc+
KGNsaWVudENvbm5lY3Rpb24sIGVuY29kZWRNZXNzYWdlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFBlbmRpbmdQdXNoTWVz
c2FnZXM6CiAgICAgICAgIGhhbmRsZVdlYlB1c2hETWVzc2FnZVdpdGhSZXBseTxNZXNzYWdlSW5m
bzo6Z2V0UGVuZGluZ1B1c2hNZXNzYWdlcz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3Nh
Z2UsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKICAgICAgICAgYnJlYWs7CkBAIC00MzEsNiArNDky
LDQ2IEBAIHZvaWQgRGFlbW9uOjppbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xpZW50Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgUHVzCiAgICAgcmVwbHlTZW5kZXIodHJ1ZSk7CiB9
CiAKK3ZvaWQgRGFlbW9uOjppbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcoQ2xp
ZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIHJlcGx5U2VuZGVyKQoreworICAgIGlmICghY29ubmVj
dGlvbi0+aG9zdEFwcEhhc1B1c2hJbmplY3RFbnRpdGxlbWVudCgpKSB7CisgICAgICAgIGNvbm5l
Y3Rpb24tPmJyb2FkY2FzdERlYnVnTWVzc2FnZSgiQXR0ZW1wdGluZyB0byBpbmplY3QgYSBwdXNo
IG1lc3NhZ2UgZnJvbSBhbiB1bmVudGl0bGVkIHByb2Nlc3MiKTsKKyAgICAgICAgcmVwbHlTZW5k
ZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcnVuQWZ0ZXJTdGFydGlu
Z1B1c2hTZXJ2aWNlKFt0aGlzLCBtZXNzYWdlID0gbWVzc2FnZSwgcmVwbHlTZW5kZXIgPSBXVEZN
b3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNl
KSB7CisgICAgICAgICAgICByZXBseVNlbmRlcihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGJ5dGVzID0gbWVzc2FnZS51dGY4KCk7CisgICAg
ICAgIFJldGFpblB0cjxOU0RhdGE+IGRhdGEgPSBhZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0
V2l0aEJ5dGVzOmJ5dGVzLmRhdGEoKSBsZW5ndGg6IGJ5dGVzLmxlbmd0aCgpXSk7CisKKyAgICAg
ICAgaWQgb2JqID0gW05TSlNPTlNlcmlhbGl6YXRpb24gSlNPTk9iamVjdFdpdGhEYXRhOmRhdGEu
Z2V0KCkgb3B0aW9uczowIGVycm9yOm51bGxwdHJdOworICAgICAgICBpZiAoIW9iaiB8fCAhW29i
aiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkgeworICAgICAgICAgICAgcmVw
bHlTZW5kZXIoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IE5TTG9nKEAiZ290IG9iajogJUAiLCBvYmopOworCisgICAgICAgIG1fcHVzaFNlcnZpY2UtPmRp
ZFJlY2VpdmVQdXNoTWVzc2FnZShvYmpbQCJ0b3BpYyJdLCBvYmpbQCJ1c2VySW5mbyJdLCBbcmVw
bHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IHJlcGx5U2VuZGVyKHRydWUpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBEYWVt
b246OmhhbmRsZUluY29taW5nUHVzaChjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdl
YktpdDo6V2ViUHVzaE1lc3NhZ2UmJiBtZXNzYWdlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9wdXNoTWVzc2FnZXMuZW5zdXJlKGJ1bmRsZUlkZW50aWZpZXIsIFtdIHsKKyAgICAgICAgcmV0
dXJuIFZlY3RvcjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiB7IH07CisgICAgfSk7CisgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoV1RGTW92ZShtZXNzYWdlKSk7CisKKyAgICBu
b3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxhYmxlKGJ1bmRsZUlkZW50aWZpZXIpOworfQor
CiB2b2lkIERhZW1vbjo6bm90aWZ5Q2xpZW50UHVzaE1lc3NhZ2VJc0F2YWlsYWJsZShjb25zdCBT
dHJpbmcmIGNsaWVudENvZGVTaWduaW5nSWRlbnRpZmllcikKIHsKICNpZiBQTEFURk9STShNQUMp
CkBAIC00NjIsNiArNTYzLDkgQEAgdm9pZCBEYWVtb246OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMo
Q2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmQKIAogICAgIFZlY3Rv
cjxXZWJLaXQ6OldlYlB1c2hNZXNzYWdlPiByZXN1bHRNZXNzYWdlczsKIAorICAgIGlmIChhdXRv
IGl0ZXJhdG9yID0gbV9wdXNoTWVzc2FnZXMuZmluZChob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlm
aWVyKTsgaXRlcmF0b3IgIT0gbV9wdXNoTWVzc2FnZXMuZW5kKCkpCisgICAgICAgIHN0ZDo6c3dh
cChyZXN1bHRNZXNzYWdlcywgaXRlcmF0b3ItPnZhbHVlKTsKKwogICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3Rlc3RpbmdQdXNoTWVzc2FnZXMuZmluZChob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVy
KTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV90ZXN0aW5nUHVzaE1lc3NhZ2VzLmVuZCgpKSB7CiAg
ICAgICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IGl0ZXJhdG9yLT52YWx1ZSkgewpAQCAtNDc2LDI1
ICs1ODAsNTAgQEAgdm9pZCBEYWVtb246OmdldFBlbmRpbmdQdXNoTWVzc2FnZXMoQ2xpZW50Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmQKICAgICByZXBseVNlbmRlcihXVEZN
b3ZlKHJlc3VsdE1lc3NhZ2VzKSk7CiB9CiAKLXZvaWQgRGFlbW9uOjpzdWJzY3JpYmVUb1B1c2hT
ZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkws
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYXBwbGljYXRpb25TZXJ2ZXJLZXksIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEs
IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2b2lkIERhZW1vbjo6
c3Vic2NyaWJlVG9QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25z
dCBVUkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3Jp
cHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewot
ICAgIFVOVVNFRF9QQVJBTShhcHBsaWNhdGlvblNlcnZlcktleSk7Ci0gICAgcmVwbHlTZW5kZXIo
bWFrZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6Ok5vdEFsbG93
ZWRFcnJvciwgIkxhY2sgcGVybWlzc2lvbiJfcyB9KSk7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1
c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENv
ZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCB2YXBpZFB1
YmxpY0tleSwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBseVNlbmRlciht
YWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6SW52YWxpZFN0
YXRlRXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIl9zIH0pKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcHVzaFNlcnZpY2UtPnN1
YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgdmFwaWRQdWJsaWNLZXksIFdURk1vdmUo
cmVwbHlTZW5kZXIpKTsKKyAgICB9KTsKIH0KIAotdm9pZCBEYWVtb246OnVuc3Vic2NyaWJlRnJv
bVB1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2Nv
cGVVUkwsIFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHB1c2hTdWJzY3JpcHRp
b25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2ws
IFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCit2b2lkIERhZW1vbjo6
dW5zdWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwg
Y29uc3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIg
c3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBl
Y3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKQogewot
ICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICBydW5BZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2Uo
W3RoaXMsIGJ1bmRsZUlkZW50aWZpZXIgPSBjb25uZWN0aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJ
ZGVudGlmaWVyKCksIHNjb3BlID0gc2NvcGVVUkwuc3RyaW5nKCksIHN1YnNjcmlwdGlvbklkZW50
aWZpZXIsIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNlbmRlcildKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIobWFr
ZVVuZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0
ZUVycm9yLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCJfcyB9KSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3B1c2hTZXJ2aWNlLT51bnN1
YnNjcmliZShidW5kbGVJZGVudGlmaWVyLCBzY29wZSwgc3Vic2NyaXB0aW9uSWRlbnRpZmllciwg
V1RGTW92ZShyZXBseVNlbmRlcikpOworICAgIH0pOwogfQogCiB2b2lkIERhZW1vbjo6Z2V0UHVz
aFN1YnNjcmlwdGlvbihDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBVUkwmIHNj
b3BlVVJMLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRh
PiYpPiYmIHJlcGx5U2VuZGVyKQogewotICAgIHJlcGx5U2VuZGVyKHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+IHsgfSk7CisgICAgcnVuQWZ0ZXJTdGFydGluZ1B1
c2hTZXJ2aWNlKFt0aGlzLCBidW5kbGVJZGVudGlmaWVyID0gY29ubmVjdGlvbi0+aG9zdEFwcENv
ZGVTaWduaW5nSWRlbnRpZmllcigpLCBzY29wZSA9IHNjb3BlVVJMLnN0cmluZygpLCByZXBseVNl
bmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1f
cHVzaFNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdl
YkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2gg
c2VydmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQiX3MgfSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgbV9wdXNoU2VydmljZS0+Z2V0U3Vic2NyaXB0aW9uKGJ1
bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgfSk7CiB9
CiAKIHZvaWQgRGFlbW9uOjpnZXRQdXNoUGVybWlzc2lvblN0YXRlKENsaWVudENvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgRXhwZWN0ZWQ8dWludDhfdCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBs
eVNlbmRlcikKIHsKKyAgICAvLyBGSVhNRQorI2lmIEhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VS
TF9UT0tFTl9TVVBQT1JUKQorICAgIHJlcGx5U2VuZGVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdl
YkNvcmU6OlB1c2hQZXJtaXNzaW9uU3RhdGU6OkdyYW50ZWQpKTsKKyNlbHNlCiAgICAgcmVwbHlT
ZW5kZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oV2ViQ29yZTo6UHVzaFBlcm1pc3Npb25TdGF0ZTo6
RGVuaWVkKSk7CisjZW5kaWYKIH0KIAogQ2xpZW50Q29ubmVjdGlvbiogRGFlbW9uOjp0b0NsaWVu
dENvbm5lY3Rpb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oIGIvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5oCmluZGV4IGJiZWI5NjhkZTdhNzU5ZGRmMjc2ZmMx
YmE2N2QyOGI2NjZhNDg2NDAuLmQzYzE3ZTY1ZGEzYWVjNTI0NGFiOTE2MTNiYWMzY2Y2ZTllYWEy
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4u
aAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmgKQEAgLTI3
LDYgKzI3LDYgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWludCBXZWJQdXNoRGFlbW9uTWFp
bihpbnQsIGNvbnN0IGNoYXIqKik7CitpbnQgV2ViUHVzaERhZW1vbk1haW4oaW50LCBjaGFyKiop
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1
c2hEYWVtb25NYWluLm1tCmluZGV4IDJhNjhlMThmYTIwMTUwNjYyMGQxYzM4MTc0NDExZWIwYWEy
YmRjNTkuLjg5MjhkOGZjOTQwZmFlZjgxYTgzNGUzMDk0NWMzNTYwNzMyN2FhY2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0KKysrIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbQpAQCAtMzAsMjQgKzMwLDIx
IEBACiAjaW1wb3J0ICJEYWVtb25EZWNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25FbmNvZGVyLmgi
CiAjaW1wb3J0ICJEYWVtb25VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIkxvZ0luaXRpYWxpemF0aW9u
LmgiCiAjaW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4KKyNpbXBvcnQg
PGdldG9wdC5oPgorI2ltcG9ydCA8d3RmL0xvZ0luaXRpYWxpemF0aW9uLmg+CiAjaW1wb3J0IDx3
dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL3NwaS9kYXJ3aW4vWFBDU1BJLmg+CiAKLSNp
ZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8c2VydmVycy9ib290c3RyYXAuaD4K
LSNlbHNlCi0jaW1wb3J0IDxtYWNoL3N0ZF90eXBlcy5oPgotZXh0ZXJuICJDIiB7Ci1leHRlcm4g
a2Vybl9yZXR1cm5fdCBib290c3RyYXBfY2hlY2tfaW4obWFjaF9wb3J0X3QgYm9vdHN0cmFwUG9y
dCwgY29uc3QgY2hhciAqc2VydmljZU5hbWUsIG1hY2hfcG9ydF90Kik7Ci19Ci0jZW5kaWYKLQog
dXNpbmcgV2ViS2l0OjpEYWVtb246OkVuY29kZWRNZXNzYWdlOwogdXNpbmcgV2ViUHVzaEQ6OkRh
ZW1vbjsKIAotc3RhdGljIGNvbnN0IGNoYXIgKmluY29taW5nUHVzaFNlcnZpY2VOYW1lID0gImNv
bS5hcHBsZS5hcHMud2Via2l0LndlYnB1c2hkLmluY29taW5nLXB1c2giOworc3RhdGljIGNvbnN0
IEFTQ0lJTGl0ZXJhbCBlbnRpdGxlbWVudE5hbWUgPSAiY29tLmFwcGxlLnByaXZhdGUud2Via2l0
LndlYnB1c2giX3M7CitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGRlZmF1bHRNYWNoU2Vydmlj
ZU5hbWUgPSAiY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5zZXJ2aWNlIl9zOworc3RhdGljIGNv
bnN0IEFTQ0lJTGl0ZXJhbCBkZWZhdWx0SW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSAiY29tLmFw
cGxlLmFwcy53ZWJraXQud2VicHVzaGQuaW5jb21pbmctcHVzaCJfczsKIAogbmFtZXNwYWNlIFdl
YlB1c2hEIHsKIApAQCAtNzQsMjMgKzcxLDU1IEBAIHVzaW5nIFdlYlB1c2hEOjpjb25uZWN0aW9u
UmVtb3ZlZDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWludCBXZWJQdXNoRGFlbW9uTWFpbihp
bnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgV2ViUHVzaERhZW1vbk1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogewotICAgIGlmIChhcmdjICE9IDMgfHwgc3RyY21wKGFyZ3ZbMV0s
ICItLW1hY2hTZXJ2aWNlTmFtZSIpKSB7Ci0gICAgICAgIE5TTG9nKEAidXNhZ2U6IHdlYnB1c2hk
IC0tbWFjaFNlcnZpY2VOYW1lIDxuYW1lPiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQot
ICAgIGNvbnN0IGNoYXIqIG1hY2hTZXJ2aWNlTmFtZSA9IGFyZ3ZbMl07Ci0KICAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKLSAgICAgICAgV2ViS2l0OjpzdGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2aWNl
Q29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCAiY29tLmFwcGxlLnByaXZhdGUud2Via2l0Lndl
YnB1c2giLCBjb25uZWN0aW9uQWRkZWQsIGNvbm5lY3Rpb25SZW1vdmVkLCBjb25uZWN0aW9uRXZl
bnRIYW5kbGVyKTsKLQotICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBvbmNlIHdlIGFjdHVh
bGx5IHN0YXJ0IHVzaW5nIEFQU0Nvbm5lY3Rpb24uCi0gICAgICAgIG1hY2hfcG9ydF90IGluY29t
aW5nTWVzc2FnZVBvcnQ7Ci0gICAgICAgIGlmIChib290c3RyYXBfY2hlY2tfaW4oYm9vdHN0cmFw
X3BvcnQsIGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCAmaW5jb21pbmdNZXNzYWdlUG9ydCkgIT0g
S0VSTl9TVUNDRVNTKQotICAgICAgICAgICAgTlNMb2coQCJDb3VsZG4ndCByZWdpc3RlciBmb3Ig
aW5jb21pbmcgcHVzaCBsYXVuY2ggcG9ydC4iKTsKLSAgICAgICAgCiAgICAgICAgIFdURjo6aW5p
dGlhbGl6ZU1haW5UaHJlYWQoKTsKKworI2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgICAgIFdURjo6bG9nQ2hhbm5lbHMoKS5pbml0aWFsaXplTG9nQ2hhbm5l
bHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBXZWJDb3JlOjpsb2dDaGFubmVscygpLmluaXRpYWxp
emVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIFdlYktpdDo6bG9nQ2hhbm5lbHMo
KS5pbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworI2VuZGlmIC8vICFMT0dfRElT
QUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisKKyAgICAgICAgc3RhdGljIHN0cnVjdCBv
cHRpb24gb3B0aW9uc1tdID0geworICAgICAgICAgICAgeyAibWFjaFNlcnZpY2VOYW1lIiwgcmVx
dWlyZWRfYXJndW1lbnQsIDAsICdtJyB9LAorICAgICAgICAgICAgeyAiaW5jb21pbmdQdXNoU2Vy
dmljZU5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3AnIH0sCisgICAgICAgICAgICB7ICJ1
c2VNb2NrUHVzaFNlcnZpY2UiLCBub19hcmd1bWVudCwgMCwgJ2YnIH0KKyAgICAgICAgfTsKKwor
ICAgICAgICBjb25zdCBjaGFyKiBtYWNoU2VydmljZU5hbWUgPSBkZWZhdWx0TWFjaFNlcnZpY2VO
YW1lOworICAgICAgICBjb25zdCBjaGFyKiBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSA9IGRlZmF1
bHRJbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZTsKKyAgICAgICAgYm9vbCB1c2VNb2NrUHVzaFNlcnZp
Y2UgPSBmYWxzZTsKKworICAgICAgICBpbnQgYzsKKyAgICAgICAgaW50IG9wdGlvbkluZGV4Owor
ICAgICAgICB3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiIiwgb3B0aW9ucywg
Jm9wdGlvbkluZGV4KSkgIT0gLTEpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAg
ICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgbWFjaFNlcnZpY2VOYW1lID0gb3B0YXJn
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAg
ICAgICAgICAgaW5jb21pbmdQdXNoU2VydmljZU5hbWUgPSBvcHRhcmc7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICB1c2VNb2Nr
UHVzaFNlcnZpY2UgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9u
OiAlY1xuIiwgb3B0b3B0KTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgV2ViS2l0OjpzdGFydExpc3RlbmluZ0Zvck1hY2hTZXJ2
aWNlQ29ubmVjdGlvbnMobWFjaFNlcnZpY2VOYW1lLCBlbnRpdGxlbWVudE5hbWUsIGNvbm5lY3Rp
b25BZGRlZCwgY29ubmVjdGlvblJlbW92ZWQsIGNvbm5lY3Rpb25FdmVudEhhbmRsZXIpOworCisg
ICAgICAgIGlmICh1c2VNb2NrUHVzaFNlcnZpY2UpCisgICAgICAgICAgICA6OldlYlB1c2hEOjpE
YWVtb246OnNpbmdsZXRvbigpLnN0YXJ0TW9ja1B1c2hTZXJ2aWNlKCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgU3RyaW5nIGxpYnJhcnlQYXRoID0gTlNTZWFyY2hQYXRoRm9yRGlyZWN0
b3JpZXNJbkRvbWFpbnMoTlNMaWJyYXJ5RGlyZWN0b3J5LCBOU1VzZXJEb21haW5NYXNrLCBZRVMp
WzBdOworICAgICAgICAgICAgU3RyaW5nIHB1c2hEYXRhYmFzZVBhdGggPSBGaWxlU3lzdGVtOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKGxpYnJhcnlQYXRoLCB7ICJXZWJLaXQiLCAiV2ViUHVz
aCIsICJQdXNoRGF0YWJhc2UuZGIiIH0pOworICAgICAgICAgICAgOjpXZWJQdXNoRDo6RGFlbW9u
OjpzaW5nbGV0b24oKS5zdGFydFB1c2hTZXJ2aWNlKGluY29taW5nUHVzaFNlcnZpY2VOYW1lLCBw
dXNoRGF0YWJhc2VQYXRoKTsKKyAgICAgICAgfQogICAgIH0KICAgICBDRlJ1bkxvb3BSdW4oKTsK
ICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvY29tLmFw
cGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL2Nv
bS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0CmluZGV4IGY3MWU1OWE0MDdmM2UzYTg5
MDgwMGFlM2Y0MWUwODU1ZTUwYTdiMmEuLmIyNWFiZmY1YThlNGJkYjhmMTkyYjlmMDVlNTg0NzM5
NWQzNDE1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvY29tLmFwcGxlLndl
YmtpdC53ZWJwdXNoZC5tYWMucGxpc3QKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9jb20u
YXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdApAQCAtMTksNyArMTksNyBAQAogCTxzdHJp
bmc+QWRhcHRpdmU8L3N0cmluZz4KIAk8a2V5PlByb2dyYW1Bcmd1bWVudHM8L2tleT4KIAk8YXJy
YXk+Ci0JCTxzdHJpbmc+L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvV2ViS2l0LmZyYW1ld29y
ay9EYWVtb25zL3dlYnB1c2hkPC9zdHJpbmc+CisJCTxzdHJpbmc+L1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvV2ViS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0RhZW1vbnMvd2VicHVzaGQ8L3N0
cmluZz4KIAkJPHN0cmluZz4tLW1hY2hTZXJ2aWNlTmFtZTwvc3RyaW5nPgogCQk8c3RyaW5nPmNv
bS5hcHBsZS53ZWJraXQud2VicHVzaGQuc2VydmljZTwvc3RyaW5nPgogCTwvYXJyYXk+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL3dlYnB1c2hkLmNwcCBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvd2VicHVzaGQuY3BwCmluZGV4IGZkMDRlNDA0NTg1OThlYzg3MzlhYzBmM2U5
YThiOGYzZmJjYTFlYjguLjU5Y2VmMGQ5ODQzMDU1NjVhZWFkMThjMjEyMmFkM2RmZmUxNTk2MjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j
bHVkZSA8V2ViS2l0L1dLTWFpbi5oPgogI2luY2x1ZGUgPG9zL2F2YWlsYWJpbGl0eS5oPgogCi1p
bnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCitpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiB7CiAgICAgV0tXZWJQdXNoRGFlbW9uTWFpbihhcmdjLCBhcmd2KTsKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1NjEx
OGU3NzE0M2RiZjg2NDMwOTIxMzdlMTdhOTkzY2ZiYjcwMzg0Li4wNTg1MmFmZDEzMGZmNWQ1MzAx
MWY2ZWRkZTg3MmViNjNjYTMyNDI0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8
bmhhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBCcmFkeSBFaWRzb24uCisKKyAgICAgICAgIC0gTW9kaWZlZCB0aGUgZXhpc3Rpbmcg
aW5qZWN0ZWQgcHVzaCB0ZXN0IHRvIGluamVjdCBkaWZmZXJlbnQgdHlwZXMgb2YgcmVhbCBwdXNo
IG9iamVjdHMKKyAgICAgICAgICAgZnJvbSBBUFMgKGFuIGVtcHR5IHB1c2gsIGFuIGFlc2djbS1l
bmNyeXB0ZWQgcHVzaCwgYW5kIGFuIGFlczEyOGdjbS1lbmNyeXB0ZWQgcHVzaCkuCisgICAgICAg
ICAtIEFkZCBhIGZldyBiYXNpYyB0ZXN0IGNhc2VzIGZvciBzdWJzY3JpYmluZyBhbmQgdW5zdWJz
Y3JpYmluZyBmcm9tIHB1c2guCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYlB1c2hEYWVtb24ubW06CisgICAgICAgICgtW05vdGlmaWNhdGlvblNjcmlwdE1l
c3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5kbGVyOl0pOgorICAgICAgICAoLVtOb3RpZmljYXRp
b25TY3JpcHRNZXNzYWdlSGFuZGxlciB1c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNj
cmlwdE1lc3NhZ2U6XSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0V2ViUHVzaERhZW1v
blBMaXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnNlbmRNZXNzYWdlVG9EYWVtb24pOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6c2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZW5kQ29uZmlndXJhdGlvbldpdGhBdWRpdFRva2VuKToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
ZnVuY3Rpb24pOiBEZWxldGVkLgorCiAyMDIyLTAyLTA0ICBBcmNhZHkgR29sZG1pbnRzLU9ybG92
ICA8YWdvbGRtaW50c0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI4MDA3Nyk6
IFtHVEtdIEl0IGNhdXNlZCAxNTUgbmV3IHRlc3QgZmFpbHVyZXMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQppbmRleCA2
ZDkyY2U5Nzg2YWY4MWM3ODRiMTI0NDQxOWU2ZGU2MjgwM2NlODIwLi5iN2IzNGI2Y2FhNTQ3YmUz
MmEzNzYyOGNjZjFhY2RlZWM2ZjVkNjU5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCkBAIC0zNSwxMyArMzUsMTgg
QEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRh
U3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8bWFjaC9t
YWNoX2luaXQuaD4KICNpbXBvcnQgPG1hY2gvdGFzay5oPgorI2ltcG9ydCA8d3RmL0Jsb2NrUHRy
Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykgfHwg
UExBVEZPUk0oSU9TKQogCit1c2luZyBXZWJLaXQ6OldlYlB1c2hEOjpNZXNzYWdlVHlwZTsKKwog
c3RhdGljIGJvb2wgYWxlcnRSZWNlaXZlZCA9IGZhbHNlOwogQGludGVyZmFjZSBOb3RpZmljYXRp
b25QZXJtaXNzaW9uRGVsZWdhdGUgOiBOU09iamVjdDxXS1VJRGVsZWdhdGVQcml2YXRlPgogQGVu
ZApAQCAtNjEsNiArNjYsMjYgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6KE5TU3RyaW4KIAogQGVuZAogCitA
aW50ZXJmYWNlIE5vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3Q8V0tT
Y3JpcHRNZXNzYWdlSGFuZGxlcj4geworICAgIEJsb2NrUHRyPHZvaWQoaWQpPiBfbWVzc2FnZUhh
bmRsZXI7Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOb3RpZmljYXRpb25TY3JpcHRNZXNz
YWdlSGFuZGxlcgorCistICh2b2lkKXNldE1lc3NhZ2VIYW5kbGVyOih2b2lkICheKShpZCkpaGFu
ZGxlcgoreworICAgIF9tZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7Cit9CisKKy0gKHZvaWQpdXNl
ckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50
Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTooV0tTY3JpcHRNZXNzYWdlICopbWVz
c2FnZQoreworICAgIGlmIChfbWVzc2FnZUhhbmRsZXIpCisgICAgICAgIF9tZXNzYWdlSGFuZGxl
cihtZXNzYWdlLmJvZHkpOworfQorCitAZW5kCisKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IAogc3RhdGljIFJldGFpblB0cjxOU1VSTD4gdGVzdFdlYlB1c2hEYWVtb25Mb2NhdGlvbigpCkBA
IC03OSw3ICsxMDQsOCBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqdGVz
dFdlYlB1c2hEYWVtb25QTGlzdChOU1VSTCAqc3RvcmFnZUxvY2F0aQogICAgICAgICBAIlByb2dy
YW1Bcmd1bWVudHMiIDogQFsKICAgICAgICAgICAgIHRlc3RXZWJQdXNoRGFlbW9uTG9jYXRpb24o
KS5nZXQoKS5wYXRoLAogICAgICAgICAgICAgQCItLW1hY2hTZXJ2aWNlTmFtZSIsCi0gICAgICAg
ICAgICBAIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSIKKyAgICAgICAgICAg
IEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIiwKKyAgICAgICAgICAgIEAi
LS11c2VNb2NrUHVzaFNlcnZpY2UiCiAgICAgICAgIF0KICAgICB9OwogfQpAQCAtMTM1LDI0ICsx
NjEsMjQgQEAgc3RhdGljIHZvaWQgY2xlYW5VcFRlc3RXZWJQdXNoRChOU1VSTCAqdGVtcERpcikK
ICAgICBFWFBFQ1RfTlVMTChlcnJvcik7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8eHBjX29iamVj
dF90PiBjcmVhdGVNZXNzYWdlRGljdGlvbmFyeSh1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCitzdGF0aWMgUmV0YWluUHRyPHhwY19vYmplY3RfdD4g
Y3JlYXRlTWVzc2FnZURpY3Rpb25hcnkoTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKIHsKICAgICBhdXRvIGRpY3Rpb25hcnkgPSBhZG9wdE5T
KHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShudWxscHRyLCBudWxscHRyLCAwKSk7CiAgICAgeHBjX2Rp
Y3Rpb25hcnlfc2V0X3VpbnQ2NChkaWN0aW9uYXJ5LmdldCgpLCAicHJvdG9jb2wgdmVyc2lvbiIs
IDEpOwotICAgIHhwY19kaWN0aW9uYXJ5X3NldF91aW50NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1l
c3NhZ2UgdHlwZSIsIG1lc3NhZ2VUeXBlKTsKKyAgICB4cGNfZGljdGlvbmFyeV9zZXRfdWludDY0
KGRpY3Rpb25hcnkuZ2V0KCksICJtZXNzYWdlIHR5cGUiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bWVzc2FnZVR5cGUpKTsKICAgICB4cGNfZGljdGlvbmFyeV9zZXRfZGF0YShkaWN0aW9uYXJ5Lmdl
dCgpLCAiZW5jb2RlZCBtZXNzYWdlIiwgbWVzc2FnZS5kYXRhKCksIG1lc3NhZ2Uuc2l6ZSgpKTsK
ICAgICByZXR1cm4gV1RGTW92ZShkaWN0aW9uYXJ5KTsKIH0KIAogLy8gVXNlcyBhbiBleGlzdGlu
ZyBjb25uZWN0aW9uIHRvIHRoZSBkYWVtb24gZm9yIGEgb25lLW9mZiBtZXNzYWdlCi12b2lkIHNl
bmRNZXNzYWdlVG9EYWVtb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCB1aW50OF90IG1l
c3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCit2b2lkIHNlbmRNZXNz
YWdlVG9EYWVtb24oeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNz
YWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGlj
dGlvbmFyeSA9IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsK
ICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbiwgZGljdGlvbmFyeS5n
ZXQoKSk7CiB9CiAKIC8vIFVzZXMgYW4gZXhpc3RpbmcgY29ubmVjdGlvbiB0byB0aGUgZGFlbW9u
IGZvciBhIG9uZS1vZmYgbWVzc2FnZSwgd2FpdGluZyBmb3IgdGhlIHJlcGx5Ci12b2lkIHNlbmRN
ZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkoeHBjX2Nvbm5lY3Rpb25fdCBjb25uZWN0aW9u
LCB1aW50OF90IG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCit2
b2lkIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9yUmVwbHkoeHBjX2Nvbm5lY3Rpb25fdCBj
b25uZWN0aW9uLCBNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBtZXNzYWdlKQogewogICAgIGF1dG8gZGljdGlvbmFyeSA9IGNyZWF0ZU1lc3NhZ2VEaWN0aW9u
YXJ5KG1lc3NhZ2VUeXBlLCBtZXNzYWdlKTsKIApAQCAtMTgxLDcgKzIwNyw3IEBAIHN0YXRpYyB2
b2lkIHNlbmRDb25maWd1cmF0aW9uV2l0aEF1ZGl0VG9rZW4oeHBjX2Nvbm5lY3Rpb25fdCBjb25u
ZWN0aW9uKQogICAgICAgICBlbmNvZGVkTWVzc2FnZVsxXSA9IDE7CiAgICAgICAgIGVuY29kZWRN
ZXNzYWdlWzJdID0gMzI7CiAgICAgICAgIG1lbWNweSgmZW5jb2RlZE1lc3NhZ2VbMTBdLCAmdG9r
ZW4sIHNpemVvZih0b2tlbikpOwotICAgICAgICBzZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rp
b24sIDYsIGVuY29kZWRNZXNzYWdlKTsKKyAgICAgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbihjb25u
ZWN0aW9uLCBNZXNzYWdlVHlwZTo6VXBkYXRlQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24sIGVuY29k
ZWRNZXNzYWdlKTsKICAgICB9CiB9CiAKQEAgLTI1Miw3ICsyNzgsNyBAQCBURVNUKFdlYlB1c2hE
LCBCYXNpY0NvbW11bmljYXRpb24pCiAgICAgICAgIGF1dG8gZGljdGlvbmFyeSA9IGFkb3B0TlMo
eHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKICAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGVuY29kZWRNZXNzYWdlKDEpOwogICAgICAgICBlbmNvZGVkTWVzc2FnZVsw
XSA9IDE7Ci0gICAgICAgIHNlbmRNZXNzYWdlVG9EYWVtb24oY29ubmVjdGlvbi5nZXQoKSwgNSwg
ZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBzZW5kTWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24u
Z2V0KCksIE1lc3NhZ2VUeXBlOjpTZXREZWJ1Z01vZGVJc0VuYWJsZWQsIGVuY29kZWRNZXNzYWdl
KTsKICAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKICAgICB9CiAKQEAg
LTM2MSw1NCArMzg3LDYgQEAgVEVTVChXZWJQdXNoRCwgUGVybWlzc2lvbk1hbmFnZW1lbnQpCiAg
ICAgY2xlYW5VcFRlc3RXZWJQdXNoRCh0ZW1wRGlyZWN0b3J5KTsKIH0KIAotc3RhdGljIGNvbnN0
IGNoYXIqIG1haW5TV0J5dGVzID0gUiJTV1JFU09VUkNFKAotPHNjcmlwdD4KLWZ1bmN0aW9uIGxv
Zyhtc2cpCi17Ci0gICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMuc3cucG9zdE1lc3Nh
Z2UobXNnKTsKLX0KLQotY29uc3QgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpOwotY2hh
bm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IGxvZyhldmVudC5kYXRhKTsKLQotbmF2
aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oKHJlZ2lzdHJhdGlv
bikgPT4gewotICAgIGlmIChyZWdpc3RyYXRpb24uYWN0aXZlKSB7Ci0gICAgICAgIHJlZ2lzdHJh
dGlvbi5hY3RpdmUucG9zdE1lc3NhZ2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5w
b3J0Ml0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHdvcmtlciA9IHJlZ2lzdHJhdGlv
bi5pbnN0YWxsaW5nOwotICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdzdGF0ZWNoYW5nZScs
IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAod29ya2VyLnN0YXRlID09ICdhY3RpdmF0ZWQnKQot
ICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtwb3J0OiBjaGFubmVsLnBvcnQyfSwgW2No
YW5uZWwucG9ydDJdKTsKLSAgICB9KTsKLX0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAg
bG9nKCJSZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6ICIgKyBlcnJvcik7Ci19KTsKLTwvc2NyaXB0
PgotKVNXUkVTT1VSQ0UiOwotCi1zdGF0aWMgY29uc3QgY2hhciogc2NyaXB0Qnl0ZXMgPSBSIlNX
UkVTT1VSQ0UoCi1sZXQgcG9ydDsKLXNlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChl
dmVudCkgPT4gewotICAgIHBvcnQgPSBldmVudC5kYXRhLnBvcnQ7Ci0gICAgcG9ydC5wb3N0TWVz
c2FnZSgiUmVhZHkiKTsKLX0pOwotc2VsZi5hZGRFdmVudExpc3RlbmVyKCJwdXNoIiwgKGV2ZW50
KSA9PiB7Ci0gICAgdHJ5IHsKLSAgICAgICAgaWYgKCFldmVudC5kYXRhKSB7Ci0gICAgICAgICAg
ICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogbnVsbCBkYXRhIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5kYXRhLnRleHQo
KTsKLSAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVjZWl2ZWQ6ICIgKyB2YWx1ZSk7Ci0gICAg
ICAgIGlmICh2YWx1ZSAhPSAnU3dlZXQgUG90YXRvZXMnKQotICAgICAgICAgICAgZXZlbnQud2Fp
dFVudGlsKFByb21pc2UucmVqZWN0KCdJIHdhbnQgc3dlZXQgcG90YXRvZXMnKSk7Ci0gICAgfSBj
YXRjaCAoZSkgewotICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJHb3QgZXhjZXB0aW9uICIgKyBl
KTsKLSAgICB9Ci19KTsKLSlTV1JFU09VUkNFIjsKLQogc3RhdGljIHZvaWQgY2xlYXJXZWJzaXRl
RGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFTdG9yZSAqc3RvcmUpCiB7CiAgICAgX19ibG9jayBib29s
IGNsZWFyZWRTdG9yZSA9IGZhbHNlOwpAQCAtNDE4LDc2ICszOTYsMzE1IEBAIHN0YXRpYyB2b2lk
IGNsZWFyV2Vic2l0ZURhdGFTdG9yZShXS1dlYnNpdGVEYXRhU3RvcmUgKnN0b3JlKQogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2xlYXJlZFN0b3JlKTsKIH0KIAotVEVTVChXZWJQdXNo
RCwgSGFuZGxlSW5qZWN0ZWRQdXNoKQotewotICAgIFtXS1dlYnNpdGVEYXRhU3RvcmUgX2FsbG93
V2Vic2l0ZURhdGFSZWNvcmRzRm9yQWxsT3JpZ2luc107CitjbGFzcyBXZWJQdXNoRFRlc3QgOiBw
dWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3RlZDoKKyAgICBXZWJQdXNoRFRlc3QoKQor
ICAgIHsKKyAgICAgICAgW1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29y
ZHNGb3JBbGxPcmlnaW5zXTsKIAotICAgIE5TVVJMICp0ZW1wRGlyZWN0b3J5ID0gc2V0VXBUZXN0
V2ViUHVzaEQoKTsKKyAgICAgICAgbV90ZW1wRGlyZWN0b3J5ID0gcmV0YWluUHRyKHNldFVwVGVz
dFdlYlB1c2hEKCkpOwogCi0gICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHRO
UyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7Ci0gICAgZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFjaFNlcnZpY2VOYW1lID0gQCJvcmcud2Via2l0
LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOwotICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCkud2ViUHVzaERhZW1vblVzZXNNb2NrQnVuZGxlc0ZvclRlc3RpbmcgPSBZRVM7Ci0gICAg
YXV0byBkYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5p
dFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICAg
ICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCkud2ViUHVzaE1hY2hTZXJ2aWNlTmFtZSA9IEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRh
ZW1vbi5zZXJ2aWNlIjsKKyAgICAgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQ
dXNoRGFlbW9uVXNlc01vY2tCdW5kbGVzRm9yVGVzdGluZyA9IFlFUzsKKyAgICAgICAgbV9kYXRh
U3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25m
aWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKIAotICAgIGF1dG8gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7Ci0gICAgY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gZGF0YVN0b3Jl
LmdldCgpOwotICAgIGNsZWFyV2Vic2l0ZURhdGFTdG9yZShbY29uZmlndXJhdGlvbiB3ZWJzaXRl
RGF0YVN0b3JlXSk7CisgICAgICAgIG1fY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgICAgIG1fY29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJzaXRlRGF0YVN0b3JlID0gbV9kYXRhU3RvcmUuZ2V0KCk7CisgICAgICAgIGNsZWFy
V2Vic2l0ZURhdGFTdG9yZShbbV9jb25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdKTsKIAot
ICAgIFtjb25maWd1cmF0aW9uLmdldCgpLnByZWZlcmVuY2VzIF9zZXROb3RpZmljYXRpb25zRW5h
YmxlZDpZRVNdOwotICAgIGZvciAoX1dLRXhwZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBb
V0tQcmVmZXJlbmNlcyBfZXhwZXJpbWVudGFsRmVhdHVyZXNdKSB7Ci0gICAgICAgIGlmIChbZmVh
dHVyZS5rZXkgaXNFcXVhbFRvU3RyaW5nOkAiQnVpbHRJbk5vdGlmaWNhdGlvbnNFbmFibGVkIl0p
Ci0gICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllF
UyBmb3JGZWF0dXJlOmZlYXR1cmVdOworICAgICAgICBbbV9jb25maWd1cmF0aW9uLmdldCgpLnBy
ZWZlcmVuY2VzIF9zZXROb3RpZmljYXRpb25zRW5hYmxlZDpZRVNdOworICAgICAgICBmb3IgKF9X
S0V4cGVyaW1lbnRhbEZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1l
bnRhbEZlYXR1cmVzXSkgeworICAgICAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9T
dHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9uc0VuYWJsZWQiXSkKKyAgICAgICAgICAgICAgICBb
W21fY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6
ZmVhdHVyZV07CisgICAgICAgICAgICBlbHNlIGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRvU3Ry
aW5nOkAiUHVzaEFQSUVuYWJsZWQiXSkKKyAgICAgICAgICAgICAgICBbW21fY29uZmlndXJhdGlv
biBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAg
ICAgIH0KKworICAgICAgICBtX3Rlc3RNZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0TWVz
c2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW1ttX2NvbmZpZ3VyYXRpb24gdXNl
ckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptX3Rlc3RNZXNzYWdl
SGFuZGxlci5nZXQoKSBuYW1lOkAidGVzdCJdOworCisgICAgICAgIG1fbm90aWZpY2F0aW9uTWVz
c2FnZUhhbmRsZXIgPSBhZG9wdE5TKFtbTm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIg
YWxsb2NdIGluaXRdKTsKKyAgICAgICAgW1ttX2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250
cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxlcjptX25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5k
bGVyLmdldCgpIG5hbWU6QCJub3RlIl07CiAgICAgfQogCi0gICAgYXV0byBtZXNzYWdlSGFuZGxl
ciA9IGFkb3B0TlMoW1tUZXN0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbW2Nv
bmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdlSGFuZGxl
cjptZXNzYWdlSGFuZGxlci5nZXQoKSBuYW1lOkAic3ciXTsKLSAgICBfX2Jsb2NrIGJvb2wgZG9u
ZSA9IGZhbHNlOwotICAgIFttZXNzYWdlSGFuZGxlciBhZGRNZXNzYWdlOkAiUmVhZHkiIHdpdGhI
YW5kbGVyOl57Ci0gICAgICAgIGRvbmUgPSB0cnVlOworICAgIHZvaWQgbG9hZFJlcXVlc3QoY29u
c3QgY2hhciogaHRtbFNvdXJjZSwgY29uc3QgY2hhciogc2VydmljZVdvcmtlclNjcmlwdFNvdXJj
ZSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdGFudHMgPSBSIlNSQygK
KyAgICAgICAgICAgIGNvbnN0IFZBTElEX1NFUlZFUl9LRVkgPSAiQkExSHh6eWkxUlVNMWI1d2p4
c243bkd4QXN6dzJ1NjFtMTY0aTNNckFJeEhGNllLNWg0U0RZaWMtZFJ1VV9SQ1BDZkE1YXE5b2pT
d2s1WTJFbUNsQlBzIjsKKyAgICAgICAgICAgIGNvbnN0IFZBTElEX1NFUlZFUl9LRVlfVEhBVF9D
QVVTRVNfSU5KRUNURURfRkFJTFVSRSA9ICJCRUF4YVVNbzFzOHRqT1J4SmZuU1N2V2hZYjR1NTFr
ZzFoV1Qyc185Z3BWN1p4YXIxcEZfMkJROEFuY3VBZFMyQm9MaE40cWF4ekJ5MkN3SEU4QkJ6V2ci
OworICAgICAgICApU1JDIjsKKyAgICAgICAgbV9zZXJ2ZXIucmVzZXQobmV3IFRlc3RXZWJLaXRB
UEk6OkhUVFBTZXJ2ZXIoeworICAgICAgICAgICAgeyAiLyIsIHsgaHRtbFNvdXJjZSB9IH0sCisg
ICAgICAgICAgICB7ICIvY29uc3RhbnRzLmpzIiwgeyB7IHsgIkNvbnRlbnQtVHlwZSIsICJhcHBs
aWNhdGlvbi9qYXZhc2NyaXB0IiB9IH0sIGNvbnN0YW50cyB9IH0sCisgICAgICAgICAgICB7ICIv
c3cuanMiLCB7IHsgeyAiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0g
fSwgc2VydmljZVdvcmtlclNjcmlwdFNvdXJjZSB9IH0KKyAgICAgICAgfSwgVGVzdFdlYktpdEFQ
STo6SFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHApKTsKKworICAgICAgICBtX3dlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246bV9jb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgICAg
IFttX3dlYlZpZXcgbG9hZFJlcXVlc3Q6bV9zZXJ2ZXItPnJlcXVlc3QoKV07CisgICAgfQorCisg
ICAgfldlYlB1c2hEVGVzdCgpCisgICAgeworICAgICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKG1f
dGVtcERpcmVjdG9yeS5nZXQoKSk7CisgICAgfQorCisgICAgUmV0YWluUHRyPE5TVVJMPiBtX3Rl
bXBEaXJlY3Rvcnk7CisgICAgUmV0YWluUHRyPFdLV2Vic2l0ZURhdGFTdG9yZT4gbV9kYXRhU3Rv
cmU7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IG1fY29uZmlndXJhdGlv
bjsKKyAgICBSZXRhaW5QdHI8VGVzdE1lc3NhZ2VIYW5kbGVyPiBtX3Rlc3RNZXNzYWdlSGFuZGxl
cjsKKyAgICBSZXRhaW5QdHI8Tm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXI+IG1fbm90
aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRlc3RXZWJLaXRB
UEk6OkhUVFBTZXJ2ZXI+IG1fc2VydmVyOworICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IG1fd2Vi
VmlldzsKK307CisKK2NsYXNzIFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVzdCA6IHB1YmxpYyBXZWJQ
dXNoRFRlc3QgeworcHJvdGVjdGVkOgorICAgIHZvaWQgcnVuVGVzdChOU1N0cmluZyAqZXhwZWN0
ZWRNZXNzYWdlLCBOU0RpY3Rpb25hcnkgKnB1c2hVc2VySW5mbyk7Cit9OworCit2b2lkIFdlYlB1
c2hESW5qZWN0ZWRQdXNoVGVzdDo6cnVuVGVzdChOU1N0cmluZyAqZXhwZWN0ZWRNZXNzYWdlLCBO
U0RpY3Rpb25hcnkgKnB1c2hVc2VySW5mbykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogaHRt
bFNvdXJjZSA9IFIiU1dSRVNPVVJDRSgKKyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50cy5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgIHsKKyAg
ICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdC5wb3N0TWVzc2FnZShtc2cp
OworICAgIH0KKworICAgIGNvbnN0IGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKKyAg
ICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IChldmVudCkgPT4gbG9nKGV2ZW50LmRhdGEpOwor
CisgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpLnRoZW4oYXN5
bmMgKCkgPT4geworICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBuYXZpZ2F0b3Iu
c2VydmljZVdvcmtlci5yZWFkeTsKKyAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJl
Z2lzdHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoeworICAgICAgICAgICAgdXNlclZpc2li
bGVPbmx5OiB0cnVlLAorICAgICAgICAgICAgYXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NF
UlZFUl9LRVkKKyAgICAgICAgfSk7CisgICAgICAgIHJlZ2lzdHJhdGlvbi5hY3RpdmUucG9zdE1l
c3NhZ2Uoe3BvcnQ6IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5wb3J0Ml0pOworICAgIH0pLmNh
dGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgIGxvZygiUmVnaXN0cmF0aW9uIGZhaWxlZCB3
aXRoOiAiICsgZXJyb3IpOworICAgIH0pOworICAgIDwvc2NyaXB0PgorICAgIClTV1JFU09VUkNF
IjsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzZXJ2aWNlV29ya2VyU291cmNlID0gUiJTV1JF
U09VUkNFKAorICAgIGxldCBwb3J0OworICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2Fn
ZSIsIChldmVudCkgPT4geworICAgICAgICBwb3J0ID0gZXZlbnQuZGF0YS5wb3J0OworICAgICAg
ICBwb3J0LnBvc3RNZXNzYWdlKCJSZWFkeSIpOworICAgIH0pOworICAgIHNlbGYuYWRkRXZlbnRM
aXN0ZW5lcigicHVzaCIsIChldmVudCkgPT4geworICAgICAgICB0cnkgeworICAgICAgICAgICAg
aWYgKCFldmVudC5kYXRhKSB7CisgICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiUmVj
ZWl2ZWQ6IG51bGwgZGF0YSIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQuZGF0YS50ZXh0KCk7CisgICAgICAg
ICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogIiArIHZhbHVlKTsKKyAgICAgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSgiRXJyb3I6ICIgKyBlKTsK
KyAgICAgICAgfQorICAgIH0pOworICAgIClTV1JFU09VUkNFIjsKKworICAgIF9fYmxvY2sgYm9v
bCByZWFkeSA9IGZhbHNlOworICAgIFttX3Rlc3RNZXNzYWdlSGFuZGxlciBhZGRNZXNzYWdlOkAi
UmVhZHkiIHdpdGhIYW5kbGVyOl57CisgICAgICAgIHJlYWR5ID0gdHJ1ZTsKICAgICB9XTsKLSAg
ICBbbWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpAIlJlY2VpdmVkOiBIZWxsbyBXb3JsZCIgd2l0
aEhhbmRsZXI6XnsKLSAgICAgICAgZG9uZSA9IHRydWU7CisKKyAgICBfX2Jsb2NrIGJvb2wgZ290
RXhwZWN0ZWRNZXNzYWdlID0gZmFsc2U7CisgICAgW21fdGVzdE1lc3NhZ2VIYW5kbGVyIGFkZE1l
c3NhZ2U6ZXhwZWN0ZWRNZXNzYWdlIHdpdGhIYW5kbGVyOl57CisgICAgICAgIGdvdEV4cGVjdGVk
TWVzc2FnZSA9IHRydWU7CiAgICAgfV07CiAKLSAgICBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVy
IHNlcnZlcih7Ci0gICAgICAgIHsgIi8iLCB7IG1haW5TV0J5dGVzIH0gfSwKLSAgICAgICAgeyAi
L3N3LmpzIiwgeyB7IHsgIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiB9
IH0sIHNjcmlwdEJ5dGVzIH0gfQotICAgIH0sIFRlc3RXZWJLaXRBUEk6OkhUVFBTZXJ2ZXI6OlBy
b3RvY29sOjpIdHRwKTsKKyAgICBsb2FkUmVxdWVzdChodG1sU291cmNlLCBzZXJ2aWNlV29ya2Vy
U291cmNlKTsKIAotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6c2VydmVyLnJl
cXVlc3QoKV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWFkeSk7CiAKLSAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwotICAgIGRvbmUgPSBmYWxzZTsKKyAgICBT
dHJpbmcgYnVuZGxlSWRlbnRpZmllciA9ICJjb20uYXBwbGUuV2ViS2l0LlRlc3RXZWJLaXRBUEki
X3M7CisgICAgU3RyaW5nIHNjb3BlID0gbV9zZXJ2ZXItPnJlcXVlc3QoKS5VUkwuYWJzb2x1dGVT
dHJpbmc7CisgICAgU3RyaW5nIHRvcGljID0gYnVuZGxlSWRlbnRpZmllciArICIgIl9zICsgc2Nv
cGU7CiAKLSAgICAvLyBJbmplY3QgcHVzaCBtZXNzYWdlCi0gICAgYXV0byBlbmNvZGVkTWVzc2Fn
ZSA9IGVuY29kZVN0cmluZygiY29tLmFwcGxlLldlYktpdC5UZXN0V2ViS2l0QVBJIik7Ci0gICAg
ZW5jb2RlZE1lc3NhZ2UuYXBwZW5kVmVjdG9yKGVuY29kZVN0cmluZyhzZXJ2ZXIucmVxdWVzdCgp
LlVSTC5hYnNvbHV0ZVN0cmluZykpOwotICAgIGVuY29kZWRNZXNzYWdlLmFwcGVuZFZlY3Rvcihl
bmNvZGVTdHJpbmcoIkhlbGxvIFdvcmxkIikpOworICAgIGlkIG9iaiA9IEB7CisgICAgICAgIEAi
dG9waWMiOiAoTlNTdHJpbmcgKil0b3BpYywKKyAgICAgICAgQCJ1c2VySW5mbyI6IHB1c2hVc2Vy
SW5mbworICAgIH07CisgICAgTlNEYXRhICpkYXRhID0gW05TSlNPTlNlcmlhbGl6YXRpb24gZGF0
YVdpdGhKU09OT2JqZWN0Om9iaiBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07CisKKyAgICBTdHJp
bmcgbWVzc2FnZSB7IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIgKj4oZGF0YS5ieXRlcyksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihkYXRhLmxlbmd0aCkgfTsKKyAgICBhdXRvIGVuY29kZWRNZXNzYWdl
ID0gZW5jb2RlU3RyaW5nKFdURk1vdmUobWVzc2FnZSkpOwogCiAgICAgYXV0byB1dGlsaXR5Q29u
bmVjdGlvbiA9IGNyZWF0ZUFuZENvbmZpZ3VyZUNvbm5lY3Rpb25Ub1NlcnZpY2UoIm9yZy53ZWJr
aXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSIpOwotICAgIHNlbmRNZXNzYWdlVG9EYWVtb25X
YWl0aW5nRm9yUmVwbHkodXRpbGl0eUNvbm5lY3Rpb24uZ2V0KCksIDcsIGVuY29kZWRNZXNzYWdl
KTsKKyAgICBzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0ZvclJlcGx5KHV0aWxpdHlDb25uZWN0
aW9uLmdldCgpLCBNZXNzYWdlVHlwZTo6SW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0
aW5nLCBlbmNvZGVkTWVzc2FnZSk7CiAKICAgICAvLyBGZXRjaCBwdXNoIG1lc3NhZ2VzCisgICAg
X19ibG9jayBib29sIGdvdE1lc3NhZ2VzID0gZmFsc2U7CiAgICAgX19ibG9jayBSZXRhaW5QdHI8
TlNBcnJheTxOU0RpY3Rpb25hcnkgKj4+IG1lc3NhZ2VzOwotICAgIFtkYXRhU3RvcmUgX2dldFBl
bmRpbmdQdXNoTWVzc2FnZXM6XihOU0FycmF5PE5TRGljdGlvbmFyeSAqPiAqcmF3TWVzc2FnZXMp
IHsKKyAgICBbbV9kYXRhU3RvcmUgX2dldFBlbmRpbmdQdXNoTWVzc2FnZXM6XihOU0FycmF5PE5T
RGljdGlvbmFyeSAqPiAqcmF3TWVzc2FnZXMpIHsKICAgICAgICAgbWVzc2FnZXMgPSByYXdNZXNz
YWdlczsKLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgIGdvdE1lc3NhZ2VzID0gdHJ1ZTsK
ICAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwotICAgIGRvbmUg
PSBmYWxzZTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdE1lc3NhZ2VzKTsKIAog
ICAgIEVYUEVDVF9FUShbbWVzc2FnZXMgY291bnRdLCAxdSk7CiAKICAgICAvLyBIYW5kbGUgcHVz
aCBtZXNzYWdlCiAgICAgX19ibG9jayBib29sIHB1c2hNZXNzYWdlUHJvY2Vzc2VkID0gZmFsc2U7
Ci0gICAgW2RhdGFTdG9yZSBfcHJvY2Vzc1B1c2hNZXNzYWdlOlttZXNzYWdlcyBmaXJzdE9iamVj
dF0gY29tcGxldGlvbkhhbmRsZXI6Xihib29sIHJlc3VsdCkgeworICAgIFttX2RhdGFTdG9yZSBf
cHJvY2Vzc1B1c2hNZXNzYWdlOlttZXNzYWdlcyBmaXJzdE9iamVjdF0gY29tcGxldGlvbkhhbmRs
ZXI6Xihib29sIHJlc3VsdCkgewogICAgICAgICBwdXNoTWVzc2FnZVByb2Nlc3NlZCA9IHRydWU7
CiAgICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdvdEV4cGVjdGVkTWVzc2FnZSk7CiAgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZwdXNoTWVzc2FnZVByb2Nlc3NlZCk7Cit9CiAKLSAgICBjbGVhblVw
VGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOworVEVTVF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNo
VGVzdCwgSGFuZGxlSW5qZWN0ZWRFbXB0eVB1c2gpCit7CisgICAgcnVuVGVzdChAIlJlY2VpdmVk
OiBudWxsIGRhdGEiLCBAeyB9KTsKK30KKworVEVTVF9GKFdlYlB1c2hESW5qZWN0ZWRQdXNoVGVz
dCwgSGFuZGxlSW5qZWN0ZWRBRVNHQ01QdXNoKQoreworICAgIHJ1blRlc3QoQCJSZWNlaXZlZDog
dGVzdCBhZXNnY20gcGF5bG9hZCIsIEB7CisgICAgICAgIEAiY29udGVudF9lbmNvZGluZyI6IEAi
YWVzZ2NtIiwKKyAgICAgICAgQCJhc19wdWJsaWNrZXkiOiBAIkJDLUFnWU1ocW16YW1IN19BdW0w
WXZJZDhGVjEtdW1nSHdlSk5lNlhRMUlNQW0zRTI5bG9XWHFUUm5kaWJ4SDI3a0pLV2NJYnl5bXVu
ZE9ETWZWeF9VTSIsCisgICAgICAgIEAiYXNfc2FsdCI6IEAidGtQVDV4RGVOMGxBa1NjNmxaVWtO
ZyIsCisgICAgICAgIEAicGF5bG9hZCI6IEAiby91NHl2Y1hJMW5hcCt6eUlPQmJXWGRMcWoxcUhH
MmNYK0tWaEFkQlFqMUdWQXQ3bFE9PSIKKyAgICB9KTsKK30KKworVEVTVF9GKFdlYlB1c2hESW5q
ZWN0ZWRQdXNoVGVzdCwgSGFuZGxlSW5qZWN0ZWRBRVMxMjhHQ01QdXNoKQoreworICAgIC8vIEZy
b20gZXhhbXBsZSBpbiBSRkM4MjkxIFNlY3Rpb24gNS4KKyAgICBTdHJpbmcgcGF5bG9hZEJhc2U2
NFVSTCA9ICJER3Y2cmExbmxZZ0RDUzFGUm5iemx3QUFFQUJCQlA0ejlLc042bkdSVGJWWUlfYzdW
SlNQUVRCdGtnY3kyN21sbWxNb1pJSWdEbGw2ZTN2Q1lMb2NJbm1ZV0FtUzZUbHpBQzh3RXFLSzZQ
QnJ1M2psN0FfeWw5NWJRcHU2Y1ZQVHBLNE1xZ2tmMUNYenRMVkJTdDJLczNvWndidXdYUFhMV3lv
dUJXTFZXR05XUWV4U2dTeHNqX1F1bGN5NGEtZk4iX3M7CisgICAgU3RyaW5nIHBheWxvYWRCYXNl
NjQgPSBiYXNlNjRFbmNvZGVUb1N0cmluZyhiYXNlNjRVUkxEZWNvZGUocGF5bG9hZEJhc2U2NFVS
TCkudmFsdWUoKSk7CisKKyAgICBydW5UZXN0KEAiUmVjZWl2ZWQ6IFdoZW4gSSBncm93IHVwLCBJ
IHdhbnQgdG8gYmUgYSB3YXRlcm1lbG9uIiwgQHsKKyAgICAgICAgQCJjb250ZW50X2VuY29kaW5n
IjogQCJhZXMxMjhnY20iLAorICAgICAgICBAInBheWxvYWQiOiAoTlNTdHJpbmcgKilwYXlsb2Fk
QmFzZTY0CisgICAgfSk7Cit9CisKK1RFU1RfRihXZWJQdXNoRFRlc3QsIFN1YnNjcmliZVRlc3Qp
Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNvdXJjZSA9IFIiSFRNTCgKKyAgICA8c2NyaXB0
IHNyYz0iL2NvbnN0YW50cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBuYXZpZ2F0
b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7Cisg
ICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2Vy
LnJlYWR5OworICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSBhd2FpdCByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIu
c3Vic2NyaWJlKHsKKyAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAg
ICAgICAgICAgICAgYXBwbGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcmVzdWx0ID0gc3Vic2NyaXB0aW9uLnRvSlNPTigpOwor
ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBl
OworICAgICAgICB9CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUu
cG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7
CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9v
bCBkb25lID0gZmFsc2U7CisgICAgW21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVz
c2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAg
ICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIEFTU0VSVF9UUlVF
KFtvYmogaXNLaW5kT2ZDbGFzczpbTlNEaWN0aW9uYXJ5IGNsYXNzXV0pOworCisgICAgTlNEaWN0
aW9uYXJ5ICpzdWJzY3JpcHRpb24gPSBvYmouZ2V0KCk7CisgICAgQVNTRVJUX1RSVUUoW3N1YnNj
cmlwdGlvbltAImVuZHBvaW50Il0gaGFzUHJlZml4OkAiaHR0cHM6Ly8iXSk7CisgICAgQVNTRVJU
X1RSVUUoW3N1YnNjcmlwdGlvbltAImtleXMiXSBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkg
Y2xhc3NdXSk7CisKKyAgICAvLyBTaGFyZWQgYXV0aCBzZWNyZXQgc2hvdWxkIGJlIDE2IGJ5dGVz
ICgyMiBieXRlcyBpbiB1bnBhZGRlZCBiYXNlNjR1cmwpLgorICAgIEFTU0VSVF9FUShbc3Vic2Ny
aXB0aW9uW0Aia2V5cyJdW0AiYXV0aCJdIGxlbmd0aF0sIDIydSk7CisKKyAgICAvLyBDbGllbnQg
cHVibGljIGtleSBzaG91bGQgYmUgNjUgYnl0ZXMgKDg3IGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2
NHVybCkuCisgICAgQVNTRVJUX0VRKFtzdWJzY3JpcHRpb25bQCJrZXlzIl1bQCJwMjU2ZGgiXSBs
ZW5ndGhdLCA4N3UpOworfQorCitURVNUX0YoV2ViUHVzaERUZXN0LCBTdWJzY3JpYmVGYWlsdXJl
VGVzdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc291cmNlID0gUiJIVE1MKAorICAgIDxz
Y3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIG5h
dmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvc3cuanMnKS50aGVuKGFzeW5jICgpID0+
IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VX
b3JrZXIucmVhZHk7CisgICAgICAgIGxldCByZXN1bHQgPSBudWxsOworICAgICAgICB0cnkgewor
ICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJlZ2lzdHJhdGlvbi5wdXNoTWFu
YWdlci5zdWJzY3JpYmUoeworICAgICAgICAgICAgICAgIHVzZXJWaXNpYmxlT25seTogdHJ1ZSwK
KyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWV9U
SEFUX0NBVVNFU19JTkpFQ1RFRF9GQUlMVVJFCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHN1YnNjcmlwdGlvbi50b0pTT04oKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgcmVzdWx0ID0gIkVycm9yOiAiICsgZTsKKyAgICAgICAgfQorICAgICAgICB3
aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5ub3RlLnBvc3RNZXNzYWdlKHJlc3VsdCk7Cisg
ICAgfSk7CisgICAgPC9zY3JpcHQ+CisgICAgKUhUTUwiOworCisgICAgX19ibG9jayBSZXRhaW5Q
dHI8aWQ+IG9iaiA9IG5pbDsKKyAgICBfX2Jsb2NrIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFtt
X25vdGlmaWNhdGlvbk1lc3NhZ2VIYW5kbGVyIHNldE1lc3NhZ2VIYW5kbGVyOl4oaWQgbWVzc2Fn
ZSkgeworICAgICAgICBvYmogPSBtZXNzYWdlOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9
XTsKKworICAgIGxvYWRSZXF1ZXN0KHNvdXJjZSwgIiIpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZSk7CisKKyAgICAvLyBTcGVjIHNheXMgdGhhdCBhbiBlcnJvciBpbiB0aGUg
cHVzaCBzZXJ2aWNlIHNob3VsZCBiZSBhbiBBYm9ydEVycm9yLgorICAgIEFTU0VSVF9UUlVFKFtv
YmogaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7CisgICAgQVNTRVJUX1RSVUUoW29i
aiBoYXNQcmVmaXg6QCJFcnJvcjogQWJvcnRFcnJvciJdKTsKK30KKworVEVTVF9GKFdlYlB1c2hE
VGVzdCwgVW5zdWJzY3JpYmVUZXN0KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzb3VyY2Ug
PSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQ+CisgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycp
LnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2FpdCBu
YXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQgcmVn
aXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7CisgICAgICAgICAgICAgICAgdXNlclZp
c2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5OiBW
QUxJRF9TRVJWRVJfS0VZCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGxldCByZXN1bHQx
ID0gYXdhaXQgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CisgICAgICAgICAgICBsZXQgcmVz
dWx0MiA9IGF3YWl0IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOworICAgICAgICAgICAgcmVz
dWx0ID0gW3Jlc3VsdDEsIHJlc3VsdDJdOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOworICAgICAgICB9CisgICAgICAgIHdpbmRvdy53
ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9zdE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsK
KyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4g
b2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7CisgICAgW21fbm90aWZp
Y2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7Cisg
ICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworCisg
ICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lKTsKKworICAgIC8vIEZpcnN0IHVuc3Vic2NyaWJlIHNob3VsZCBzdWNjZWVkLiBTZWNv
bmQgb25lIHNob3VsZCBmYWlsIHNpbmNlIHRoZSBmaXJzdCBvbmUgcmVtb3ZlZCB0aGUgcmVjb3Jk
IGZyb20gdGhlIGRhdGFiYXNlLgorICAgIGlkIGV4cGVjdGVkID0gQFtAKDEpLCBAKDApXTsKKyAg
ICBBU1NFUlRfVFJVRShbb2JqIGlzRXF1YWw6ZXhwZWN0ZWRdKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451182</attachid>
            <date>2022-02-07 17:22:20 -0800</date>
            <delta_ts>2022-02-07 18:59:46 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235857-20220207172219.patch</filename>
            <type>text/plain</type>
            <size>93346</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBkY2I3ZDQxM2Q4M2YxZTU4ZTBiZTZk
NjFiMjAzMDk5OTA0NDI4YTIuLjYxN2ZkM2YxZTRiOWQ3ZjJlMDQ1ZmZkZThkOTdlZTkyYmUxZjBk
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDEtMjggIEJlbiBOaGFtICA8bmhhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIFB1c2hTZXJ2aWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzU4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBC
cmFkeSBFaWRzb24uCisKKyAgICAgICAgQWRkIFB1c2hBUElFbmFibGVkIHRvIFdlYktpdExlZ2Fj
eSBzbyB3ZSBjYW4gZW5hYmxlIGl0IG9uIGluIEFQSSB0ZXN0cyB2aWEgX1dLRXhwZXJpbWVudGFs
RmVhdHVyZS4KKworICAgICAgICAqIFNjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNF
eHBlcmltZW50YWwueWFtbDoKKwogMjAyMi0wMi0wNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFRocmVhZCBzdXNwZW5kIGFuZCByZXN1bWUgc2hvdWxkIHRh
a2UgYSBnbG9iYWwgbG9jayB0byBhdm9pZCBkZWFkbG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MjdiNTYyMjI0
N2Q5ZDU4NzUyNDE3NzcxZDFjMDc3NmMxNDI4ZDMwLi42NmUwYjNmNmNmZmUwNTllYTgwNDk3OTA5
YTkyYTE3MDcxOGIzYjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMi0wMS0yOCAg
QmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgUHVzaFNlcnZpY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTg1NworCisg
ICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KKworICAgICAgICBUaGlzIGFkZHMgUHVz
aFNlcnZpY2UgdG8gd2VicHVzaGQuIEl0IGhhbmRsZXMgcmVxdWVzdHMgdG8gY3JlYXRlLCByZW1v
dmUsIGFuZCBnZXQgcHVzaAorICAgICAgICBzdWJzY3JpcHRpb25zLiBJdCBhbHNvIGRlY3J5cHRz
IGluY29taW5nIHB1c2hlcyBhbmQgcGFzcyB0aGVtIGJhY2sgdG8gdGhlIFVJIHByb2Nlc3Mgdmlh
IHRoZQorICAgICAgICBleGlzdGluZyBtYWNoaW5lcnkgaW4gV2ViUHVzaERhZW1vbi4KKworICAg
ICAgICBQdXNoU2VydmljZSBwcmltYXJpbHkgaW50ZXJhY3RzIHdpdGggdHdvIG9iamVjdHM6CisK
KyAgICAgICAgMS4gUHVzaFNlcnZpY2VDb25uZWN0aW9uOiB0aGlzIGNyZWF0ZXMgYW5kIHJlbW92
ZXMgcHVzaCBzdWJzY3JpcHRpb25zIGZyb20gdGhlIHB1c2ggc2VydmVyLgorICAgICAgICAgICBJ
dCBhbHNvIHJlY2VpdmVzIGluY29taW5nIHB1c2hlcyBmcm9tIHRoZSBwdXNoIHNlcnZlci4KKyAg
ICAgICAgMi4gUHVzaERhdGFiYXNlOiB0aGlzIHBlcnNpc3RzIHB1c2ggc3Vic2NyaXB0aW9ucyB0
byBkaXNrLgorCisgICAgICAgIFNldmVyYWwgdGhpbmdzIGFyZSBub3QgeWV0IGltcGxlbWVudGVk
OyBmb3IgaW5zdGFuY2UsIHdlIGN1cnJlbnRseSBhbHdheXMgZ3JhbnQgYSBwYWdlIHRoZQorICAg
ICAgICBwZXJtaXNzaW9uIHRvIHJlY2VpdmUgcHVzaGVzLiBUaGlzIHdpbGwgYmUgZml4ZWQgaW4g
ZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgQ292ZXJlZCBieSBuZXcgQVBJIHRlc3RzLiBUaGUg
Y3VycmVudCB0ZXN0cyB1c2UgYSBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uIHRoYXQgdmVuZHMK
KyAgICAgICAgc3Vic2NyaXB0aW9uIHdpdGggZml4ZWQgZGF0YSwgYnV0IHRoaXMgY2FuIGJlIGlt
cHJvdmVkIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLTWFp
bi5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tOgorICAgICAgICAoV0tX
ZWJQdXNoRGFlbW9uTWFpbik6CisgICAgICAgICogU2hhcmVkL0NvY29hL1dlYlB1c2hNZXNzYWdl
Q29jb2EubW06IGFkZCBhYmlsaXR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gZW1wdHkgdnMu
IG51bGwgcGF5bG9hZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U6OmZyb21EaWN0
aW9uYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U6OnRvRGljdGlvbmFyeSBj
b25zdCk6CisgICAgICAgICogU2hhcmVkL1dlYlB1c2hEYWVtb25Db25zdGFudHMuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHVzaEQ6Om1lc3NhZ2VUeXBlU2VuZHNSZXBseSk6CisgICAgICAgICog
U2hhcmVkL1dlYlB1c2hNZXNzYWdlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hNZXNzYWdl
OjpkZWNvZGUpOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHdlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24uaDoKKyAgICAgICAg
KiB3ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tOgorICAgICAgICAoV2ViUHVz
aEQ6Ok1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246OmdlbmVyYXRlQ2xpZW50S2V5cyk6CisgICAg
ICAgIChXZWJQdXNoRDo6TW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2NyaWJlKToKKyAg
ICAgICAgKFdlYlB1c2hEOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp1bnN1YnNjcmliZSk6
CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJQ
dXNoRDo6UHVzaFNlcnZpY2U6OmNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hT
ZXJ2aWNlOjpkYXRhYmFzZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6OmRpZFJl
Y2VpdmVQdXNoTWVzc2FnZSk6CisgICAgICAgICogd2VicHVzaGQvUHVzaFNlcnZpY2UubW06IEFk
ZGVkLgorICAgICAgICAoV2ViUHVzaEQ6OnVwZGF0ZVRvcGljTGlzdHMpOgorICAgICAgICAoV2Vi
UHVzaEQ6OlB1c2hTZXJ2aWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2
aWNlOjpjcmVhdGVNb2NrU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNlcnZpY2U6
OlB1c2hTZXJ2aWNlKToKKyAgICAgICAgKFdlYlB1c2hEOjptYWtlUHVzaFN1YnNjcmlwdGlvbkZy
b21SZWNvcmQpOgorICAgICAgICAoV2ViUHVzaEQ6Om1ha2VQdXNoVG9waWMpOgorICAgICAgICAo
V2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdDo6YnVuZGxlSWRlbnRpZmllcik6CisgICAgICAg
IChXZWJQdXNoRDo6UHVzaFNlcnZpY2VSZXF1ZXN0OjpzY29wZSk6CisgICAgICAgIChXZWJQdXNo
RDo6UHVzaFNlcnZpY2VSZXF1ZXN0OjpQdXNoU2VydmljZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
UHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdEltcGw6OlB1c2hTZXJ2aWNlUmVxdWVzdEltcGwpOgor
ICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdEltcGw6OmZ1bGZpbGwpOgorICAg
ICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlUmVxdWVzdEltcGw6OnJlamVjdCk6CisgICAgICAg
IChXZWJQdXNoRDo6R2V0U3Vic2NyaXB0aW9uUmVxdWVzdDo6R2V0U3Vic2NyaXB0aW9uUmVxdWVz
dCk6CisgICAgICAgIChXZWJQdXNoRDo6R2V0U3Vic2NyaXB0aW9uUmVxdWVzdDo6c3RhcnRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJQdXNoRDo6U3Vic2NyaWJlUmVxdWVzdDo6U3Vic2NyaWJlUmVx
dWVzdCk6CisgICAgICAgIChXZWJQdXNoRDo6U3Vic2NyaWJlUmVxdWVzdDo6c3RhcnRJbXBsKToK
KyAgICAgICAgKFdlYlB1c2hEOjpTdWJzY3JpYmVSZXF1ZXN0OjphdHRlbXB0VG9SZWNvdmVyRnJv
bVRvcGljQWxyZWFkeUluRmlsdGVyRXJyb3IpOgorICAgICAgICAoV2ViUHVzaEQ6OlVuc3Vic2Ny
aWJlUmVxdWVzdDo6VW5zdWJzY3JpYmVSZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpVbnN1
YnNjcmliZVJlcXVlc3Q6OnN0YXJ0SW50ZXJuYWwpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hT
ZXJ2aWNlOjplbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hEOjpQ
dXNoU2VydmljZTo6ZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVz
aEQ6OlB1c2hTZXJ2aWNlOjpnZXRTdWJzY3JpcHRpb24pOgorICAgICAgICAoV2ViUHVzaEQ6OlB1
c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZUdldFN1YnNjcmlwdGlvblJlcXVlc3QpOgorICAgICAgICAo
V2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpzdWJzY3JpYmUpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1
c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3QpOgorICAgICAgICAoV2ViUHVz
aEQ6OlB1c2hTZXJ2aWNlOjp1bnN1YnNjcmliZSk6CisgICAgICAgIChXZWJQdXNoRDo6UHVzaFNl
cnZpY2U6OmRpZENvbXBsZXRlVW5zdWJzY3JpYmVSZXF1ZXN0KToKKyAgICAgICAgKFdlYlB1c2hE
OjptYWtlUmF3UHVzaE1lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OlB1c2hTZXJ2aWNlOjpk
aWRSZWNlaXZlUHVzaE1lc3NhZ2UpOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlQ29u
bmVjdGlvbi5oOgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbToK
KyAgICAgICAgKFdlYlB1c2hEOjpQdXNoU2VydmljZUNvbm5lY3Rpb246OmdlbmVyYXRlQ2xpZW50
S2V5cyk6CisgICAgICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5oOgorICAgICAgICAqIHdl
YnB1c2hkL1dlYlB1c2hEYWVtb24ubW06CisgICAgICAgIChXZWJQdXNoRDo6TWVzc2FnZUluZm86
OmluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzo6ZW5jb2RlUmVwbHkpOgorICAg
ICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6c3RhcnRNb2NrUHVzaFNlcnZpY2UpOgorICAgICAgICAo
V2ViUHVzaEQ6OkRhZW1vbjo6c3RhcnRQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6
RGFlbW9uOjpzZXRQdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpydW5B
ZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6ZGVj
b2RlQW5kSGFuZGxlTWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjppbmplY3RF
bmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1v
bjo6aGFuZGxlSW5jb21pbmdQdXNoKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OmdldFBl
bmRpbmdQdXNoTWVzc2FnZXMpOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6c3Vic2NyaWJl
VG9QdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjp1bnN1YnNjcmliZUZy
b21QdXNoU2VydmljZSk6CisgICAgICAgIChXZWJQdXNoRDo6RGFlbW9uOjpnZXRQdXNoU3Vic2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OmdldFB1c2hQZXJtaXNzaW9uU3Rh
dGUpOgorICAgICAgICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmg6CisgICAgICAgICog
d2VicHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW06CisgICAgICAgIChXZWJLaXQ6OldlYlB1c2hE
YWVtb25NYWluKToKKyAgICAgICAgKiB3ZWJwdXNoZC9jb20uYXBwbGUud2Via2l0LndlYnB1c2hk
Lm1hYy5wbGlzdDoKKyAgICAgICAgKiB3ZWJwdXNoZC93ZWJwdXNoZC5jcHA6CisgICAgICAgICht
YWluKToKKwogMjAyMi0wMi0wNSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZWZhY3RvciBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxlY3Rpb24g
dG8gaGF2ZSBhIHNpbmdsZSBiYWNraW5nIHN0b3JlIHRyYXZlcnNhbCBmdW5jdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJp
bWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5j
ZXNFeHBlcmltZW50YWwueWFtbAppbmRleCA1YjRkM2I2MjU3MTc1MzI1NTRmM2FkNzJhNGRiNDVh
NjllY2E4NWU2Li4wNWY3N2YzMjU5NjA3YWJkMGY3NzNjZDUyNjc1OGRlYzdmNjlkOGUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBl
cmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJl
ZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAtMTEyMiw2ICsxMTIyLDggQEAgUHVzaEFQSUVu
YWJsZWQ6CiAgIGRlZmF1bHRWYWx1ZToKICAgICBXZWJDb3JlOgogICAgICAgZGVmYXVsdDogZmFs
c2UKKyAgICBXZWJLaXRMZWdhY3k6CisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYktpdDoK
ICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0FQSS9Db2NvYS9XS01haW4uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS01h
aW4uaAppbmRleCAzMDM3OGY4NTUzYWZmNWMzZGEzNGZiOThmMjM3YmFlMTU2OTgwM2EyLi45Y2Y4
NGQyNzQ0ZmE3ZGViZmIwNzFkZjEyM2VkMTI2OWE0N2Y1Mjc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvQVBJL0NvY29hL1dLTWFpbi5oCkBAIC0zNCw3ICszNCw3IEBAIGV4dGVybiAiQyIgewogCiBX
S19FWFBPUlQgaW50IFdLWFBDU2VydmljZU1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2
KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIFdLX0VYUE9SVCBp
bnQgV0tBZEF0dHJpYnV0aW9uRGFlbW9uTWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3Yp
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci1X
S19FWFBPUlQgaW50IFdLV2ViUHVzaERhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBh
cmd2KSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OworV0tfRVhQT1JUIGludCBXS1dlYlB1c2hEYWVtb25NYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
IAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9BUEkvQ29jb2EvV0tNYWluLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dL
TWFpbi5tbQppbmRleCBkZTJlOWY3YTViZDU1ZjkxZGU4N2UxYTkzYWFmODkwNzNkZmJmZDQxLi45
N2Q3ODVmNjlmMjYxYWFmY2UyNWQ4ZDkxNzY3MTQ0ZjIzZTllMDUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tNYWluLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0FQSS9Db2NvYS9XS01haW4ubW0KQEAgLTQwLDcgKzQwLDcgQEAgaW50IFdLQWRBdHRy
aWJ1dGlvbkRhZW1vbk1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KQogICAgIHJldHVy
biBXZWJLaXQ6OlBDTURhZW1vbk1haW4oYXJnYywgYXJndik7CiB9CiAKLWludCBXS1dlYlB1c2hE
YWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKK2ludCBXS1dlYlB1c2hEYWVt
b25NYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICByZXR1cm4gV2ViS2l0OjpXZWJQ
dXNoRGFlbW9uTWFpbihhcmdjLCBhcmd2KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0NvY29hL1dlYlB1c2hNZXNzYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9XZWJQdXNoTWVzc2FnZUNvY29hLm1tCmluZGV4IGYxMjkzOGJjNGRkZjFkZTQ5MWQ5
MDllOGI3YWZkYTY1MmQwYzkwN2IuLmQ5MzRkYTQwN2MxZTY4MDk3MWI4ZTk0Y2U2NjI5MDNkNWE2
YTNkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYlB1c2hNZXNz
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViUHVzaE1lc3Nh
Z2VDb2NvYS5tbQpAQCAtMzksMjEgKzM5LDMwIEBAIHN0ZDo6b3B0aW9uYWw8V2ViUHVzaE1lc3Nh
Z2U+IFdlYlB1c2hNZXNzYWdlOjpmcm9tRGljdGlvbmFyeShOU0RpY3Rpb25hcnkgKmRpY3RpCiAg
ICAgaWYgKCF1cmwgfHwgIVt1cmwgaXNLaW5kT2ZDbGFzczpbTlNVUkwgY2xhc3NdXSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIE5TRGF0YSAqcHVzaERhdGEgPSBbZGljdGlv
bmFyeSBvYmplY3RGb3JLZXk6V2ViS2l0UHVzaERhdGFLZXldOwotICAgIGlmICghcHVzaERhdGEg
fHwgIVtwdXNoRGF0YSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXSkKKyAgICBpZCBwdXNo
RGF0YSA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpXZWJLaXRQdXNoRGF0YUtleV07CisgICAg
Qk9PTCBpc051bGwgPSBbcHVzaERhdGEgaXNFcXVhbDpbTlNOdWxsIG51bGxdXTsKKyAgICBCT09M
IGlzRGF0YSA9IFtwdXNoRGF0YSBpc0tpbmRPZkNsYXNzOltOU0RhdGEgY2xhc3NdXTsKKworICAg
IGlmICghaXNOdWxsICYmICFpc0RhdGEpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAK
LSAgICByZXR1cm4geyB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB7IHN0YXRpY19jYXN0PGNv
bnN0IHVpbnQ4X3QqPihwdXNoRGF0YS5ieXRlcyksIHB1c2hEYXRhLmxlbmd0aCB9LAotICAgICAg
ICBVUkwgeyB1cmwgfQotICAgIH0gfTsKKyAgICBXZWJQdXNoTWVzc2FnZSBtZXNzYWdlIHsgeyB9
LCBVUkwgeyB1cmwgfSB9OworICAgIGlmIChpc0RhdGEpIHsKKyAgICAgICAgTlNEYXRhICpkYXRh
ID0gKE5TRGF0YSAqKXB1c2hEYXRhOworICAgICAgICBtZXNzYWdlLnB1c2hEYXRhID0gVmVjdG9y
PHVpbnQ4X3Q+IHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRh
Lmxlbmd0aCB9OworICAgIH0KKworICAgIHJldHVybiBtZXNzYWdlOwogfQogCiBOU0RpY3Rpb25h
cnkgKldlYlB1c2hNZXNzYWdlOjp0b0RpY3Rpb25hcnkoKSBjb25zdAogewotICAgIGF1dG8gbnNE
YXRhID0gYWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhCeXRlczpwdXNoRGF0YS5kYXRh
KCkgbGVuZ3RoOnB1c2hEYXRhLnNpemUoKV0pOworICAgIFJldGFpblB0cjxOU0RhdGE+IG5zRGF0
YTsKKyAgICBpZiAocHVzaERhdGEpCisgICAgICAgIG5zRGF0YSA9IG5zRGF0YSA9IGFkb3B0TlMo
W1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXM6cHVzaERhdGEtPmRhdGEoKSBsZW5ndGg6cHVz
aERhdGEtPnNpemUoKV0pOworCiAgICAgcmV0dXJuIEB7Ci0gICAgICAgIFdlYktpdFB1c2hEYXRh
S2V5IDogbnNEYXRhLmdldCgpLAorICAgICAgICBXZWJLaXRQdXNoRGF0YUtleSA6IG5zRGF0YSA/
IG5zRGF0YS5nZXQoKSA6IFtOU051bGwgbnVsbF0sCiAgICAgICAgIFdlYktpdFB1c2hSZWdpc3Ry
YXRpb25VUkxLZXkgOiAoTlNVUkwgKilyZWdpc3RyYXRpb25VUkwKICAgICB9OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUHVzaERhZW1vbkNvbnN0YW50cy5oCmluZGV4IGZjNDdkYzRm
MTI3NDg3MjRiMWI1N2M1NzJjMTQ5YjM4NzhlYzBhNWIuLmYzZjdiYmU2M2Y0ZWQzNWVkY2YzZTJh
YWFkOTNmYjNlNDkyOWZmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1
c2hEYWVtb25Db25zdGFudHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoRGFl
bW9uQ29uc3RhbnRzLmgKQEAgLTQzLDYgKzQzLDcgQEAgZW51bSBjbGFzcyBNZXNzYWdlVHlwZSA6
IHVpbnQ4X3QgewogICAgIFNldERlYnVnTW9kZUlzRW5hYmxlZCwKICAgICBVcGRhdGVDb25uZWN0
aW9uQ29uZmlndXJhdGlvbiwKICAgICBJbmplY3RQdXNoTWVzc2FnZUZvclRlc3RpbmcsCisgICAg
SW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLAogICAgIEdldFBlbmRpbmdQdXNo
TWVzc2FnZXMsCiAgICAgU3Vic2NyaWJlVG9QdXNoU2VydmljZSwKICAgICBVbnN1YnNjcmliZUZy
b21QdXNoU2VydmljZSwKQEAgLTU5LDYgKzYwLDcgQEAgaW5saW5lIGJvb2wgbWVzc2FnZVR5cGVT
ZW5kc1JlcGx5KE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlKQogICAgIGNhc2UgTWVzc2FnZVR5cGU6
OlJlcXVlc3RTeXN0ZW1Ob3RpZmljYXRpb25QZXJtaXNzaW9uOgogICAgIGNhc2UgTWVzc2FnZVR5
cGU6OkdldFBlbmRpbmdQdXNoTWVzc2FnZXM6CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0
UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOgorICAgIGNhc2UgTWVzc2FnZVR5cGU6OkluamVjdEVuY3J5
cHRlZFB1c2hNZXNzYWdlRm9yVGVzdGluZzoKICAgICBjYXNlIE1lc3NhZ2VUeXBlOjpTdWJzY3Jp
YmVUb1B1c2hTZXJ2aWNlOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OlVuc3Vic2NyaWJlRnJvbVB1
c2hTZXJ2aWNlOgogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkdldFB1c2hTdWJzY3JpcHRpb246CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHVzaE1lc3NhZ2UuaAppbmRleCBmOWU0M2YzMzNkNTY4NDg4YzJm
YmUxZTZlYmMxMWQ2MjMzNGNmOGU3Li4xZjRlZmFjOTg0YjUyMjJkYmQxMGJlOGFhMzBjN2U1YTc4
YmU5OTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQdXNoTWVzc2FnZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlB1c2hNZXNzYWdlLmgKQEAgLTM3LDcgKzM3
LDcgQEAgc3RydWN0IFdlYlB1c2hNZXNzYWdlIHsKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViUHVzaE1lc3NhZ2U+IGRlY29kZShEZWNvZGVyJik7
CiAKLSAgICBWZWN0b3I8dWludDhfdD4gcHVzaERhdGE7CisgICAgc3RkOjpvcHRpb25hbDxWZWN0
b3I8dWludDhfdD4+IHB1c2hEYXRhOwogICAgIFVSTCByZWdpc3RyYXRpb25VUkw7CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBXZWJQdXNoTWVzc2FnZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3Rk
OjpvcHRpb25hbDxXZWJQdXNoTWVzc2FnZT4gV2ViUHVzaE1lc3NhZ2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogewotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBwdXNoRGF0
YTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6b3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+Pj4gcHVz
aERhdGE7CiAgICAgZGVjb2RlciA+PiBwdXNoRGF0YTsKICAgICBpZiAoIXB1c2hEYXRhKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGM3YzMxYmM1NTdiNTVkNTE3MDVmYzM5ZDdlNjc5
Yzk0YzZhMGFmMy4uODI3OGU1MDI3NGU1MDBlZTFlOWRmYTY4ZmNmZTY1NjYzYmM2NjQxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05
NDYsNyArOTQ2LDcgQEAKIAkJNTEyOTM1RTQxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVu
ZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJNTEyOUVCMTIyM0QwREU3QjAwQUYx
Q0Q3IC8qIENvbnRlbnRXb3JsZFNoYXJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEyOUVCMTEyM0QwREU3ODAwQUYxQ0Q3IC8qIENvbnRlbnRXb3Js
ZFNoYXJlZC5oICovOyB9OwogCQk1MTJDRDY5ODI3MjFFRkM4MDBGN0Y4RUMgLyogV2ViUHVzaERh
ZW1vbkNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMkNENjk3MjcyMUVGQzMwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlv
bi5oICovOyB9OwotCQk1MTJDRDY5QTI3MjFGMEE5MDBGN0Y4RUMgLyogV2ViUHVzaERhZW1vbkNv
bnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTEyQ0Q2OTkyNzIxRjA0OTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMuaCAqLzsg
fTsKKwkJNTEyQ0Q2OUEyNzIxRjBBOTAwRjdGOEVDIC8qIFdlYlB1c2hEYWVtb25Db25zdGFudHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkNENjk5
MjcyMUYwNDkwMEY3RjhFQyAvKiBXZWJQdXNoRGFlbW9uQ29uc3RhbnRzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyRTM0RTUxMzBCNEQwNTAw
QUJEMTlBIC8qIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0EzM0I0MTMwQjMwOEMwMEY4MENCNSAvKiBX
S0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEyRUNDMzUyNzE5NkFEQjAwMDg5QjY2IC8qIFByaXZhdGVD
bGlja01lYXN1cmVtZW50Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNCOTMwRkUyNkU4MDIxNjAwMzJCMUMwIC8qIFByaXZhdGVDbGlj
a01lYXN1cmVtZW50Q29ubmVjdGlvbi5oICovOyB9OwogCQk1MTJGNTg5NzEyQTg4Mzg4MDA2Mjk1
MzAgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyRjU4OEYxMkE4ODM4ODAwNjI5NTMwIC8qIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCAqLzsgfTsKQEAgLTE5OTgsNiArMTk5OCw4IEBA
CiAJCUU1Q0JBNzY3MjdBMzE4RTEwMERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU1Q0JBNzYwMjdBMzE4
NzkwMERGNzg1OCAvKiBVbmlmaWVkU291cmNlMTE5LmNwcCAqLzsgfTsKIAkJRTVDQkE3NjgyN0Ez
MThFMTAwREY3ODU4IC8qIFVuaWZpZWRTb3VyY2UxMTcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTVDQkE3NjIyN0EzMTg3OTAwREY3ODU4IC8qIFVu
aWZpZWRTb3VyY2UxMTcuY3BwICovOyB9OwogCQlFNURFRkE2ODI2RjhGNDI2MDBBQjY4REIgLyog
UGhvdG9zVUlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU1REVGQTY3MjZGOEY0MjYwMEFCNjhEQiAvKiBQaG90b3NVSVNQSS5oICovOyB9OworCQlF
QjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVCMzZCMTY2MjdBN0I0NTAwMDUwRTAwRCAv
KiBQdXNoU2VydmljZS5oICovOyB9OworCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVz
aFNlcnZpY2UubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi87IH07CiAJCUVC
QThEM0FCMjdBNUUzMTMwMENCNzkwMCAvKiBBcHBsZVB1c2hTZXJ2aWNlU1BJLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQTI3QTVFMzEzMDBD
Qjc5MDAgLyogQXBwbGVQdXNoU2VydmljZVNQSS5oICovOyB9OwogCQlFQkE4RDNCMjI3QTVFMzNG
MDBDQjc5MDAgLyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAg
LyogQXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi87IH07CiAJCUVCQThEM0IzMjdBNUUz
M0YwMENCNzkwMCAvKiBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFQkE4RDNBRDI3QTVFMzNFMDBDQjc5MDAg
LyogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oICovOyB9OwpAQCAtNjQ1OSw2ICs2NDYxLDgg
QEAKIAkJRTVERUZBNjcyNkY4RjQyNjAwQUI2OERCIC8qIFBob3Rvc1VJU1BJLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBob3Rvc1VJU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQz
MTJEMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlz
dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJw
dXNoZC5tYWMucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUVCMEQzMTJFMjc1
QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLmlvcy5wbGlzdCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQucGxpc3QueG1sOyBwYXRoID0gY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5p
b3MucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUVCMzZCMTY2MjdBN0I0NTAw
MDUwRTAwRCAvKiBQdXNoU2VydmljZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQdXNoU2VydmljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFQjM2QjE2NzI3
QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBQdXNoU2VydmljZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRUJBOEQzQUEyN0E1RTMxMzAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VTUEkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGVQdXNoU2VydmljZVNQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFQkE4RDNBQzI3QTVFMzNFMDBDQjc5MDAgLyog
QXBwbGVQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRUJBOEQzQUQyN0E1RTMzRTAwQ0I3OTAwIC8qIE1vY2tQdXNoU2Vy
dmljZUNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1B1
c2hTZXJ2aWNlQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAw
OTgsNiArMTAxMDIsOCBAQAogCQkJCTUxNjBFOTU4Mjc0QzBEODgwMDU2NzM4OCAvKiBQdXNoQXBw
QnVuZGxlLm1tICovLAogCQkJCTUxRjdCQjc5Mjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50
Q29ubmVjdGlvbi5oICovLAogCQkJCTUxRjdCQjdBMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xp
ZW50Q29ubmVjdGlvbi5tbSAqLywKKwkJCQlFQjM2QjE2NjI3QTdCNDUwMDA1MEUwMEQgLyogUHVz
aFNlcnZpY2UuaCAqLywKKwkJCQlFQjM2QjE2NzI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZp
Y2UubW0gKi8sCiAJCQkJRUJBOEQzQUYyN0E1RTMzRjAwQ0I3OTAwIC8qIFB1c2hTZXJ2aWNlQ29u
bmVjdGlvbi5oICovLAogCQkJCUVCQThEM0IxMjdBNUUzM0YwMENCNzkwMCAvKiBQdXNoU2Vydmlj
ZUNvbm5lY3Rpb24ubW0gKi8sCiAJCQkJNTE3QjVGNzcyNzVFOTc5NTAwMkRDMjJEIC8qIHdlYnB1
c2hkLmNwcCAqLywKQEAgLTEzMjUwLDYgKzEzMjU2LDcgQEAKIAkJCQk1MTdCNUY4MTI3NUU5N0I2
MDAyREMyMkQgLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGN0Qy
NzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hDbGllbnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTdCNUY5NTI3NUVCQTYzMDAyREMyMkQgLyogUHVzaE1lc3NhZ2VGb3JUZXN0aW5nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFQjM2QjE2ODI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZp
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUVCQThEM0I1MjdBNUUzM0YwMENCNzkwMCAvKiBQdXNo
U2VydmljZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUExRTY4ODcwMUY2RTJCQUIw
MDcwMDZBNiAvKiBRdWFyYW50aW5lU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBDMjI3RTI0
NTExMzBBMDBFRDYxNEQgLyogUXVpY2tMb29rVGh1bWJuYWlsaW5nU29mdExpbmsuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTU1MDksNiArMTU1MTYsNyBAQAogCQkJCTJENTRDMzFCMjEyRjREQTYwMDQ5
QzE3NCAvKiBQcm9jZXNzTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGODIy
NzVFOTdCNjAwMkRDMjJEIC8qIFB1c2hBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
MTdCNUY3QjI3NUU5N0E5MDAyREMyMkQgLyogUHVzaENsaWVudENvbm5lY3Rpb24ubW0gaW4gU291
cmNlcyAqLywKKwkJCQlFQjM2QjE2OTI3QTdCNDUwMDA1MEUwMEQgLyogUHVzaFNlcnZpY2UubW0g
aW4gU291cmNlcyAqLywKIAkJCQlFQkE4RDNCNzI3QTVFMzNGMDBDQjc5MDAgLyogUHVzaFNlcnZp
Y2VDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwQzIyN0YyNDUxMTMwQTAwRUQ2
MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbGluZ1NvZnRMaW5rLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUEwQzIyNUUyNDM1NzVDRDAwRUQ2MTREIC8qIFF1aWNrTG9va1RodW1ibmFpbExvYWRlci5t
bSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2Nr
UHVzaFNlcnZpY2VDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNo
U2VydmljZUNvbm5lY3Rpb24uaAppbmRleCA3NzY5YmI2YmRkNTgyOGU3YjE2NGMxNjdjODQ2MGNm
ZGJkN2MwNDAwLi5iOTUzYmI5YzEyZGQ3ZTIyYmQ2OTEzMDU0NDg3OWM3ZGY0NmQ5NGEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24u
aApAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWM6CiAgICAgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlv
bigpOwogICAgIH5Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCk7CiAKKyAgICBXZWJDb3JlOjpQ
dXNoQ3J5cHRvOjpDbGllbnRLZXlzIGdlbmVyYXRlQ2xpZW50S2V5cygpIGZpbmFsOworCiAgICAg
dm9pZCBzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiB0b3BpYywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiB2YXBpZFB1YmxpY0tleSwgU3Vic2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKICAgICB2b2lk
IHVuc3Vic2NyaWJlKGNvbnN0IFN0cmluZyYgdG9waWMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
dmFwaWRQdWJsaWNLZXksIFVuc3Vic2NyaWJlSGFuZGxlciYmKSBvdmVycmlkZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1t
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Nb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tCmlu
ZGV4IGRiZWZhNzRhZWNkOWE5ZWEwZTQxOTgzMzg2OGUzMDhkM2Q3NmY2MDMuLmM0Y2YyZTY3OWI5
MmJmOTIzNTYxYzE1OGMyM2QzNjgwMWQ4NzgzNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL01vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAgLTI2LDYgKzI2LDEwIEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIk1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24u
aCIKIAorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOjpQdXNoQ3J5cHRvOworCiBuYW1lc3BhY2UgV2ViUHVzaEQgewogCiBNb2NrUHVzaFNlcnZp
Y2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uKCkKQEAgLTM0LDE0ICszOCwz
MCBAQCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9u
KCkKIAogTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6fk1vY2tQdXNoU2VydmljZUNvbm5lY3Rp
b24oKSA9IGRlZmF1bHQ7CiAKLXZvaWQgTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6c3Vic2Ny
aWJlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIFN1YnNjcmliZUhhbmRs
ZXImJiBoYW5kbGVyKQorQ2xpZW50S2V5cyBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjpnZW5l
cmF0ZUNsaWVudEtleXMoKQogewotICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhE
b21haW46TlNDb2NvYUVycm9yRG9tYWluIGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1
c2VySW5mbzpuaWxdKTsKKyAgICAvLyBFeGFtcGxlIHZhbHVlcyBmcm9tIFJGQzgyOTEgU2VjdGlv
biA1LgorICAgIGF1dG8gcHVibGljS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCQ1Z4c3I3Tl9lTmdW
UnF2SHREMHpUWnNFYzYtVlYtSnZMZXhocVV6T1JjeGFPemk2LUFZV1h2VEJIbTRianlQanM3VmQ4
cFpHSDZTUnBrTnRvSUFpdzQiX3MpLnZhbHVlKCk7CisgICAgYXV0byBwcml2YXRlS2V5ID0gYmFz
ZTY0VVJMRGVjb2RlKCJxMWRYcHczVXBUNVZPbXVfY2ZfdjZpaDA3QWVtczNuanhJLUpXZ0xjTTk0
Il9zKS52YWx1ZSgpOworICAgIGF1dG8gc2VjcmV0ID0gYmFzZTY0VVJMRGVjb2RlKCJCVEJaTXFI
SDZyNFR0czdKX2FTSWdnIl9zKS52YWx1ZSgpOworCisgICAgcmV0dXJuIENsaWVudEtleXMgeyBQ
MjU2REhLZXlQYWlyIHsgV1RGTW92ZShwdWJsaWNLZXkpLCBXVEZNb3ZlKHByaXZhdGVLZXkpIH0s
IFdURk1vdmUoc2VjcmV0KSB9OworfQorCit2b2lkIE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb246
OnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVi
bGljS2V5LCBTdWJzY3JpYmVIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBhdXRvIGFsd2F5c1Jl
amVjdGVkS2V5ID0gYmFzZTY0VVJMRGVjb2RlKCJCRUF4YVVNbzFzOHRqT1J4SmZuU1N2V2hZYjR1
NTFrZzFoV1Qyc185Z3BWN1p4YXIxcEZfMkJROEFuY3VBZFMyQm9MaE40cWF4ekJ5MkN3SEU4QkJ6
V2ciX3MpLnZhbHVlKCk7CisgICAgaWYgKHZhcGlkUHVibGljS2V5ID09IGFsd2F5c1JlamVjdGVk
S2V5KSB7CisgICAgICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJX
ZWJQdXNoIiBjb2RlOi0xIHVzZXJJbmZvOm5pbF0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaGFuZGxlcihAImh0dHBzOi8vd2Via2l0Lm9yZy9wdXNoIiwgbmlsKTsKIH0KIAogdm9p
ZCBNb2NrUHVzaFNlcnZpY2VDb25uZWN0aW9uOjp1bnN1YnNjcmliZShjb25zdCBTdHJpbmcmLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mLCBVbnN1YnNjcmliZUhhbmRsZXImJiBoYW5kbGVyKQogewot
ICAgIGhhbmRsZXIoeyB9LCBbTlNFcnJvciBlcnJvcldpdGhEb21haW46TlNDb2NvYUVycm9yRG9t
YWluIGNvZGU6TlNGZWF0dXJlVW5zdXBwb3J0ZWRFcnJvciB1c2VySW5mbzpuaWxdKTsKKyAgICBo
YW5kbGVyKHRydWUsIG5pbCk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IE1vY2tQdXNoU2VydmljZUNv
bm5lY3Rpb246OmVuYWJsZWRUb3BpY3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9QdXNoU2VydmljZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmZlNDE1ZTAwOGRkNjMwNTEwNTgyNGY4Y2ZiMDI2OTVhZmMzMjNmZWIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNlLmgKQEAg
LTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUHVz
aFNlcnZpY2VDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViUHVzaE1lc3NhZ2UuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0V4Y2VwdGlvbkRhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1B1c2hEYXRh
YmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHVzaFN1YnNjcmlwdGlvbkRhdGEuaD4KKyNpbmNs
dWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNs
dWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitjbGFzcyBH
ZXRTdWJzY3JpcHRpb25SZXF1ZXN0OworY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0OworY2xhc3Mg
U3Vic2NyaWJlUmVxdWVzdDsKK2NsYXNzIFVuc3Vic2NyaWJlUmVxdWVzdDsKKworY2xhc3MgUHVz
aFNlcnZpY2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVz
aW5nIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyID0gRnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJik+OworCisgICAg
c3RhdGljIHZvaWQgY3JlYXRlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5hbWUs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+
JiYpOworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZU1vY2tTZXJ2aWNlKEluY29taW5nUHVzaE1lc3Nh
Z2VIYW5kbGVyJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjp1bmlxdWVfcHRyPFB1c2hT
ZXJ2aWNlPiYmKT4mJik7CisgICAgflB1c2hTZXJ2aWNlKCk7CisKKyAgICBQdXNoU2VydmljZUNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KKyAgICBXZWJD
b3JlOjpQdXNoRGF0YWJhc2UmIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQorCisg
ICAgdm9pZCBnZXRTdWJzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVk
PHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPiYpPiYmKTsKKyAgICB2b2lkIHN1YnNjcmliZShjb25zdCBTdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90
PiYgdmFwaWRQdWJsaWNLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8
V2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+
JiYpOworICAgIHZvaWQgdW5zdWJzY3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNjb3BlLCBXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPiYpPiYmKTsKKworICAgIHZvaWQgZGlkQ29tcGxldGVHZXRTdWJzY3JpcHRp
b25SZXF1ZXN0KEdldFN1YnNjcmlwdGlvblJlcXVlc3QmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRl
U3Vic2NyaWJlUmVxdWVzdChTdWJzY3JpYmVSZXF1ZXN0Jik7CisgICAgdm9pZCBkaWRDb21wbGV0
ZVVuc3Vic2NyaWJlUmVxdWVzdChVbnN1YnNjcmliZVJlcXVlc3QmKTsKKworICAgIHZvaWQgZGlk
UmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5m
bywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9KTsKKworcHJpdmF0ZToKKyAg
ICBQdXNoU2VydmljZShVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9uPiYmLCBVbmlxdWVS
ZWY8V2ViQ29yZTo6UHVzaERhdGFiYXNlPiYmLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYm
KTsKKworICAgIHVzaW5nIFB1c2hTZXJ2aWNlUmVxdWVzdE1hcCA9IEhhc2hNYXA8c3RkOjp0dXBs
ZTxTdHJpbmcsIFN0cmluZz4sIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVl
c3Q+Pj47CisgICAgdm9pZCBlbnF1ZXVlUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2aWNlUmVx
dWVzdE1hcCYsIHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+JiYpOworICAgIHZv
aWQgZmluaXNoZWRQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiwgUHVz
aFNlcnZpY2VSZXF1ZXN0Jik7CisKKyAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2VDb25uZWN0aW9u
PiBtX2Nvbm5lY3Rpb247CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlB1c2hEYXRhYmFzZT4gbV9k
YXRhYmFzZTsKKworICAgIEluY29taW5nUHVzaE1lc3NhZ2VIYW5kbGVyIG1faW5jb21pbmdQdXNo
TWVzc2FnZUhhbmRsZXI7CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV9nZXRTdWJzY3Jp
cHRpb25SZXF1ZXN0czsKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV9zdWJzY3JpYmVSZXF1
ZXN0czsKKyAgICBQdXNoU2VydmljZVJlcXVlc3RNYXAgbV91bnN1YnNjcmliZVJlcXVlc3RzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvUHVzaFNlcnZpY2UubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2
aWNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA1OGE3NjllNjk2Y2FlY2U2NjQ1NDJkMGNhNzAwOGM4NzRiOGE3
ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hTZXJ2aWNl
Lm1tCkBAIC0wLDAgKzEsNTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJQdXNoU2VydmljZS5oIgorCisjaW1wb3J0ICJBcHBsZVB1c2hTZXJ2aWNlQ29ubmVj
dGlvbi5oIgorI2ltcG9ydCAiTW9ja1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oIgorI2ltcG9ydCAi
TG9nZ2luZy5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1B1c2hNZXNzYWdlQ3J5cHRvLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3Jp
Z2luLmg+CisjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KKyNpbXBvcnQgPHd0Zi9Xb3JrUXVl
dWUuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgorI2ltcG9ydCA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYlB1c2hEIHsKKworc3RhdGljIHZvaWQgdXBkYXRlVG9w
aWNMaXN0cyhQdXNoU2VydmljZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIFB1c2hEYXRhYmFzZSYg
ZGF0YWJhc2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgZGF0YWJhc2UuZ2V0VG9waWNzQnlXYWtlU3RhdGUoWyZjb25uZWN0aW9uLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiYgdG9waWNNYXAp
IG11dGFibGUgeworICAgICAgICAvLyBGSVhNRTogbW92ZSB0b3BpY3MgdG8gaWdub3JlZCBsaXN0
IGJhc2VkIG9uIHVzZXIgcHJlZmVyZW5jZXMuCisgICAgICAgIFB1c2hTZXJ2aWNlQ29ubmVjdGlv
bjo6VG9waWNMaXN0cyB0b3BpY0xpc3RzOworCisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNN
YXAuZmluZChQdXNoV2FrZVN0YXRlOjpXYWtpbmcpOyBpdCAhPSB0b3BpY01hcC5lbmQoKSkKKyAg
ICAgICAgICAgIHN0ZDo6c3dhcCh0b3BpY0xpc3RzLmVuYWJsZWRUb3BpY3MsIGl0LT52YWx1ZSk7
CisgICAgICAgIGlmIChhdXRvIGl0ID0gdG9waWNNYXAuZmluZChQdXNoV2FrZVN0YXRlOjpPcHBv
cnR1bmlzdGljKTsgaXQgIT0gdG9waWNNYXAuZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAo
dG9waWNMaXN0cy5vcHBvcnR1bmlzdGljVG9waWNzLCBpdC0+dmFsdWUpOworICAgICAgICBpZiAo
YXV0byBpdCA9IHRvcGljTWFwLmZpbmQoUHVzaFdha2VTdGF0ZTo6Tm9uV2FraW5nKTsgaXQgIT0g
dG9waWNNYXAuZW5kKCkpCisgICAgICAgICAgICBzdGQ6OnN3YXAodG9waWNMaXN0cy5ub25XYWtp
bmdUb3BpY3MsIGl0LT52YWx1ZSk7CisKKyAgICAgICAgY29ubmVjdGlvbi5zZXRUb3BpY0xpc3Rz
KFdURk1vdmUodG9waWNMaXN0cykpOworCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgfSk7Cit9CisKKyNpZiBIQVZFKEFQUExFX1BVU0hfU0VSVklDRV9VUkxfVE9LRU5fU1VQUE9S
VCkKKwordm9pZCBQdXNoU2VydmljZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNo
U2VydmljZU5hbWUsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoLCBJbmNvbWluZ1B1c2hNZXNz
YWdlSGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6
dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIGF1
dG8gdHJhbnNhY3Rpb24gPSBhZG9wdE9TT2JqZWN0KG9zX3RyYW5zYWN0aW9uX2NyZWF0ZSgiY29t
LmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wdXNoLXNlcnZpY2UtaW5pdCIpKTsKKworICAgIC8vIENy
ZWF0ZSB0aGUgY29ubmVjdGlvbiBBU0FQIHNvIHRoYXQgd2UgYm9vdHN0cmFwX2NoZWNrX2luIHRv
IHRoZSBzZXJ2aWNlIGluIGEgdGltZWx5IG1hbm5lci4KKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBt
YWtlVW5pcXVlUmVmPEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9uPihpbmNvbWluZ1B1c2hTZXJ2
aWNlTmFtZSk7CisKKyAgICBQdXNoRGF0YWJhc2U6OmNyZWF0ZShkYXRhYmFzZVBhdGgsIFt0cmFu
c2FjdGlvbiA9IFdURk1vdmUodHJhbnNhY3Rpb24pLCBjb25uZWN0aW9uID0gV1RGTW92ZShjb25u
ZWN0aW9uKSwgbWVzc2FnZUhhbmRsZXIgPSBXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwgY3JlYXRp
b25IYW5kbGVyID0gV1RGTW92ZShjcmVhdGlvbkhhbmRsZXIpXShhdXRvJiYgZGF0YWJhc2VSZXN1
bHQpIG11dGFibGUgeworICAgICAgICBpZiAoIWRhdGFiYXNlUmVzdWx0KSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPRyhQdXNoLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3
aXRoIGRhdGFiYXNlIGVycm9yIik7CisgICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3RkOjp1
bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZGF0
YWJhc2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92ZShkYXRhYmFz
ZVJlc3VsdCkpOworICAgICAgICBVbmlxdWVSZWY8UHVzaFNlcnZpY2U+IHNlcnZpY2UoKm5ldyBQ
dXNoU2VydmljZShXVEZNb3ZlKGNvbm5lY3Rpb24pLCBXVEZNb3ZlKGRhdGFiYXNlKSwgV1RGTW92
ZShtZXNzYWdlSGFuZGxlcikpKTsKKworICAgICAgICBhdXRvJiBjb25uZWN0aW9uUmVmID0gc2Vy
dmljZS0+Y29ubmVjdGlvbigpOworICAgICAgICBhdXRvJiBkYXRhYmFzZVJlZiA9IHNlcnZpY2Ut
PmRhdGFiYXNlKCk7CisKKyAgICAgICAgLy8gT25seSBwcm92aWRlIHRoZSBzZXJ2aWNlIG9iamVj
dCBiYWNrIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgd2UndmUgc3luY2VkIHRoZSB0b3BpYyBsaXN0cyBp
bgorICAgICAgICAvLyB0aGUgZGF0YWJhc2Ugd2l0aCB0aGUgUHVzaFNlcnZpY2VDb25uZWN0aW9u
L0FQU0Nvbm5lY3Rpb24uIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdvbid0CisgICAgICAgIC8vIHNl
cnZpY2UgYW55IGNhbGxzIHRvIHN1YnNjcmliZS91bnN1YnNjcmliZS9ldGMuIHVudGlsIGFmdGVy
IHRoZSB0b3BpYyBsaXN0cyBhcmUgdXAgdG8KKyAgICAgICAgLy8gZGF0ZSwgd2hpY2ggQVBTQ29u
bmVjdGlvbiBjYXJlcyBhYm91dC4KKyAgICAgICAgdXBkYXRlVG9waWNMaXN0cyhjb25uZWN0aW9u
UmVmLCBkYXRhYmFzZVJlZiwgW3RyYW5zYWN0aW9uID0gV1RGTW92ZSh0cmFuc2FjdGlvbiksIHNl
cnZpY2UgPSBXVEZNb3ZlKHNlcnZpY2UpLCBjcmVhdGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNyZWF0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc2Vy
dmljZS5tb3ZlVG9VbmlxdWVQdHIoKSk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbiA9IG51bGxw
dHI7CisgICAgICAgIH0pOworICAgIH0pOworfQorCisjZWxzZQorCit2b2lkIFB1c2hTZXJ2aWNl
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgSW5jb21pbmdQdXNoTWVzc2Fn
ZUhhbmRsZXImJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6OnVuaXF1ZV9wdHI8UHVzaFNl
cnZpY2U+JiYpPiYmIGNyZWF0aW9uSGFuZGxlcikKK3sKKyAgICBjcmVhdGlvbkhhbmRsZXIoc3Rk
Ojp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPigpKTsKK30KKworI2VuZGlmIC8vIEhBVkUoQVBQTEVf
UFVTSF9TRVJWSUNFX1VSTF9UT0tFTl9TVVBQT1JUKQorCit2b2lkIFB1c2hTZXJ2aWNlOjpjcmVh
dGVNb2NrU2VydmljZShJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIG1lc3NhZ2VIYW5kbGVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZT4mJik+
JiYgY3JlYXRpb25IYW5kbGVyKQoreworICAgIFB1c2hEYXRhYmFzZTo6Y3JlYXRlKFNRTGl0ZURh
dGFiYXNlOjppbk1lbW9yeVBhdGgoKSwgW21lc3NhZ2VIYW5kbGVyID0gV1RGTW92ZShtZXNzYWdl
SGFuZGxlciksIGNyZWF0aW9uSGFuZGxlciA9IFdURk1vdmUoY3JlYXRpb25IYW5kbGVyKV0oYXV0
byYmIGRhdGFiYXNlUmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFkYXRhYmFzZVJlc3Vs
dCkgeworICAgICAgICAgICAgY3JlYXRpb25IYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2Vy
dmljZT4oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGNvbm5lY3Rpb24gPSBtYWtlVW5pcXVlUmVmPE1vY2tQdXNoU2VydmljZUNvbm5lY3Rpb24+KCk7
CisgICAgICAgIGF1dG8gZGF0YWJhc2UgPSBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQ
dHIoV1RGTW92ZShkYXRhYmFzZVJlc3VsdCkpOworICAgICAgICBjcmVhdGlvbkhhbmRsZXIoc3Rk
Ojp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNlPihuZXcgUHVzaFNlcnZpY2UoV1RGTW92ZShjb25uZWN0
aW9uKSwgV1RGTW92ZShkYXRhYmFzZSksIFdURk1vdmUobWVzc2FnZUhhbmRsZXIpKSkpOworICAg
IH0pOworfQorCitQdXNoU2VydmljZTo6UHVzaFNlcnZpY2UoVW5pcXVlUmVmPFB1c2hTZXJ2aWNl
Q29ubmVjdGlvbj4mJiBwdXNoU2VydmljZUNvbm5lY3Rpb24sIFVuaXF1ZVJlZjxQdXNoRGF0YWJh
c2U+JiYgcHVzaERhdGFiYXNlLCBJbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlciYmIGluY29taW5n
UHVzaE1lc3NhZ2VIYW5kbGVyKQorICAgIDogbV9jb25uZWN0aW9uKFdURk1vdmUocHVzaFNlcnZp
Y2VDb25uZWN0aW9uKSkKKyAgICAsIG1fZGF0YWJhc2UoV1RGTW92ZShwdXNoRGF0YWJhc2UpKQor
ICAgICwgbV9pbmNvbWluZ1B1c2hNZXNzYWdlSGFuZGxlcihXVEZNb3ZlKGluY29taW5nUHVzaE1l
c3NhZ2VIYW5kbGVyKSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX2luY29taW5nUHVzaE1lc3Nh
Z2VIYW5kbGVyKTsKKworICAgIG1fY29ubmVjdGlvbi0+c3RhcnRMaXN0ZW5pbmdGb3JQdXNoTWVz
c2FnZXMoW3RoaXNdKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5ICp1c2VySW5mbykgewor
ICAgICAgICBkaWRSZWNlaXZlUHVzaE1lc3NhZ2UodG9waWMsIHVzZXJJbmZvKTsKKyAgICB9KTsK
K30KKworUHVzaFNlcnZpY2U6On5QdXNoU2VydmljZSgpID0gZGVmYXVsdDsKKworc3RhdGljIFB1
c2hTdWJzY3JpcHRpb25EYXRhIG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChQdXNoUmVj
b3JkJiYgcmVjb3JkKQoreworICAgIHJldHVybiBQdXNoU3Vic2NyaXB0aW9uRGF0YSB7CisgICAg
ICAgIHJlY29yZC5pZGVudGlmaWVyLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5lbmRwb2ludCks
CisgICAgICAgIFdURk1vdmUocmVjb3JkLmV4cGlyYXRpb25UaW1lKSwKKyAgICAgICAgV1RGTW92
ZShyZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5j
bGllbnRQdWJsaWNLZXkpLAorICAgICAgICBXVEZNb3ZlKHJlY29yZC5zaGFyZWRBdXRoU2VjcmV0
KQorICAgIH07Cit9CisKK3N0YXRpYyBTdHJpbmcgbWFrZVB1c2hUb3BpYyhjb25zdCBTdHJpbmcm
IGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUpCit7CisgICAgcmV0dXJuIGJ1
bmRsZUlkZW50aWZpZXIgKyAiICIgKyBzY29wZTsKK30KKworY2xhc3MgUHVzaFNlcnZpY2VSZXF1
ZXN0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5QdXNoU2VydmljZVJlcXVlc3QoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEFTQ0lJTGl0
ZXJhbCBkZXNjcmlwdGlvbigpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFN0cmluZyYgYnVuZGxl
SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fYnVuZGxlSWRlbnRpZmllcjsgfQorICAgIGNvbnN0IFN0
cmluZyYgc2NvcGUoKSB7IHJldHVybiBtX3Njb3BlOyB9OworCisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0KCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgUHVzaFNlcnZpY2VSZXF1ZXN0KFB1c2hTZXJ2
aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgc2NvcGUpCisgICAgICAgIDogbV9zZXJ2aWNlKHNlcnZpY2UpCisgICAgICAgICwgbV9jb25u
ZWN0aW9uKHNlcnZpY2UuY29ubmVjdGlvbigpKQorICAgICAgICAsIG1fZGF0YWJhc2Uoc2Vydmlj
ZS5kYXRhYmFzZSgpKQorICAgICAgICAsIG1fYnVuZGxlSWRlbnRpZmllcihidW5kbGVJZGVudGlm
aWVyKQorICAgICAgICAsIG1fc2NvcGUoc2NvcGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2goKSA9IDA7CisKKyAgICBQdXNoU2VydmljZSYgbV9zZXJ2aWNlOworICAg
IFB1c2hTZXJ2aWNlQ29ubmVjdGlvbiYgbV9jb25uZWN0aW9uOworICAgIFB1c2hEYXRhYmFzZSYg
bV9kYXRhYmFzZTsKKyAgICBTdHJpbmcgbV9idW5kbGVJZGVudGlmaWVyOworICAgIFN0cmluZyBt
X3Njb3BlOworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUHVzaFNlcnZpY2VSZXF1ZXN0Jik+
IG1fY29tcGxldGlvbkhhbmRsZXI7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBl
PgorY2xhc3MgUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVl
c3QgeworcHVibGljOgorICAgIHZvaWQgc3RhcnQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgaWYg
KG1fYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkgfHwgbV9zY29wZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6QWJvcnRF
cnJvciwgIkludmFsaWQgc2VuZGVyIl9zIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgU3RyaW5nIHRyYW5zYWN0aW9uRGVzY3JpcHRpb24gPSBTdHJpbmcoImNv
bS5hcHBsZS53ZWJraXQud2VicHVzaGQ6Il9zKSArIGRlc2NyaXB0aW9uKCkgKyAiOiJfcyArIG1f
YnVuZGxlSWRlbnRpZmllciArICI6Il9zICsgbV9zY29wZTsKKyAgICAgICAgbV90cmFuc2FjdGlv
biA9IGFkb3B0T1NPYmplY3Qob3NfdHJhbnNhY3Rpb25fY3JlYXRlKHRyYW5zYWN0aW9uRGVzY3Jp
cHRpb24udXRmOCgpLmRhdGEoKSkpOworICAgICAgICBzdGFydEludGVybmFsKCk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgdXNpbmcgUmVzdWx0SGFuZGxlciA9IENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgRXhwZWN0ZWQ8UmVzdWx0VHlwZSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4m
KT47CisKKyAgICBQdXNoU2VydmljZVJlcXVlc3RJbXBsKFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBj
b25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFJlc3Vs
dEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQorICAgICAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdChz
ZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29wZSkKKyAgICAgICAgLCBtX3Jlc3VsdEhhbmRs
ZXIoV1RGTW92ZShyZXN1bHRIYW5kbGVyKSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflB1
c2hTZXJ2aWNlUmVxdWVzdEltcGwoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnRJbnRlcm5hbCgpID0gMDsKKworICAgIHZvaWQgZnVsZmlsbChSZXN1bHRUeXBlIHJlc3VsdCkK
KyAgICB7CisgICAgICAgIG1fcmVzdWx0SGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAg
ICBmaW5pc2goKTsKKyAgICB9CisKKyAgICB2b2lkIHJlamVjdChXZWJDb3JlOjpFeGNlcHRpb25E
YXRhJiYgZGF0YSkKKyAgICB7CisgICAgICAgIG1fcmVzdWx0SGFuZGxlcihtYWtlVW5leHBlY3Rl
ZChXVEZNb3ZlKGRhdGEpKSk7CisgICAgICAgIGZpbmlzaCgpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZXN1bHRIYW5kbGVyIG1fcmVzdWx0SGFuZGxlcjsKKyAgICBPU09iamVjdFB0cjxvc190
cmFuc2FjdGlvbl90PiBtX3RyYW5zYWN0aW9uOworfTsKKworY2xhc3MgR2V0U3Vic2NyaXB0aW9u
UmVxdWVzdCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJbXBsPHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6UHVzaFN1YnNjcmlwdGlvbkRhdGE+PiB7CitwdWJsaWM6CisgICAgR2V0U3Vic2NyaXB0
aW9uUmVxdWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwg
Y29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5HZXRT
dWJzY3JpcHRpb25SZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlM
aXRlcmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdldFN1YnNjcmlwdGlv
blJlcXVlc3QiX3M7IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lk
IGZpbmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVx
dWVzdCgqdGhpcyk7IH0KK307CisKK0dldFN1YnNjcmlwdGlvblJlcXVlc3Q6OkdldFN1YnNjcmlw
dGlvblJlcXVlc3QoUHVzaFNlcnZpY2UmIHNlcnZpY2UsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgUmVzdWx0SGFuZGxlciYmIHJlc3VsdEhhbmRs
ZXIpCisgICAgOiBQdXNoU2VydmljZVJlcXVlc3RJbXBsKHNlcnZpY2UsIGJ1bmRsZUlkZW50aWZp
ZXIsIHNjb3BlLCBXVEZNb3ZlKHJlc3VsdEhhbmRsZXIpKQoreworfQorCisvLyBJbXBsZW1lbnRz
IHRoZSB3ZWJwdXNoZCBzaWRlIG9mIFB1c2hNYW5hZ2VyLmdldFN1YnNjcmlwdGlvbi4KK3ZvaWQg
R2V0U3Vic2NyaXB0aW9uUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCgpCit7CisgICAgbV9kYXRhYmFz
ZS5nZXRSZWNvcmRCeUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIs
IG1fc2NvcGUsIFt0aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgICAgIGZ1bGZpbGwoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNo
U3Vic2NyaXB0aW9uRGF0YT4geyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bGZpbGwobWFrZVB1c2hTdWJzY3JpcHRpb25Gcm9tUmVjb3JkKFdURk1vdmUo
KnJlc3VsdCkpKTsKKyAgICB9KTsKK30KKworY2xhc3MgU3Vic2NyaWJlUmVxdWVzdCA6IHB1Ymxp
YyBQdXNoU2VydmljZVJlcXVlc3RJbXBsPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhPiB7
CitwdWJsaWM6CisgICAgU3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYsIGNvbnN0IFN0cmlu
ZyYgYnVuZGxlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzY29wZSwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgUmVzdWx0SGFuZGxlciYmKTsKKyAgICB2aXJ0dWFsIH5T
dWJzY3JpYmVSZXF1ZXN0KCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgQVNDSUlMaXRl
cmFsIGRlc2NyaXB0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlN1YnNjcmliZVJlcXVlc3Qi
X3M7IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbCB7IHN0YXJ0SW1wbChJc1JldHJ5
OjpObyk7IH0KKyAgICB2b2lkIGZpbmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRl
U3Vic2NyaWJlUmVxdWVzdCgqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIElz
UmV0cnkgeyBObywgWWVzIH07CisgICAgdm9pZCBzdGFydEltcGwoSXNSZXRyeSk7CisgICAgdm9p
ZCBhdHRlbXB0VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVyRXJyb3IoU3RyaW5nJiYp
OworICAgIFZlY3Rvcjx1aW50OF90PiBtX3ZhcGlkUHVibGljS2V5OworfTsKKworU3Vic2NyaWJl
UmVxdWVzdDo6U3Vic2NyaWJlUmVxdWVzdChQdXNoU2VydmljZSYgc2VydmljZSwgY29uc3QgU3Ry
aW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIHZhcGlkUHVibGljS2V5LCBSZXN1bHRIYW5kbGVyJiYgcmVzdWx0SGFuZGxlcikK
KyAgICA6IFB1c2hTZXJ2aWNlUmVxdWVzdEltcGwoc2VydmljZSwgYnVuZGxlSWRlbnRpZmllciwg
c2NvcGUsIFdURk1vdmUocmVzdWx0SGFuZGxlcikpCisgICAgLCBtX3ZhcGlkUHVibGljS2V5KHZh
cGlkUHVibGljS2V5KQoreworfQorCisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJwdXNoZCBzaWRlIG9m
IFB1c2hNYW5hZ2VyLnN1YnNjcmliZSgpLgordm9pZCBTdWJzY3JpYmVSZXF1ZXN0OjpzdGFydElt
cGwoSXNSZXRyeSBpc1JldHJ5KQoreworICAgIG1fZGF0YWJhc2UuZ2V0UmVjb3JkQnlCdW5kbGVJ
ZGVudGlmaWVyQW5kU2NvcGUobV9idW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlLCBbdGhpcywgaXNS
ZXRyeV0oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAg
ICAgICAgICAgIGlmIChtX3ZhcGlkUHVibGljS2V5ICE9IHJlc3VsdC0+c2VydmVyVkFQSURQdWJs
aWNLZXkpCisgICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBX
ZWJDb3JlOjpJbnZhbGlkU3RhdGVFcnJvciwgIlByb3ZpZGVkIGFwcGxpY2F0aW9uU2VydmVyS2V5
IGRvZXMgbm90IG1hdGNoIHRoZSBrZXkgaW4gdGhlIGV4aXN0aW5nIHN1YnNjcmlwdGlvbi4iX3Mg
fSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnVsZmlsbChtYWtlUHVzaFN1
YnNjcmlwdGlvbkZyb21SZWNvcmQoV1RGTW92ZSgqcmVzdWx0KSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0b3BpYyA9IG1ha2VQdXNoVG9waWMobV9i
dW5kbGVJZGVudGlmaWVyLCBtX3Njb3BlKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnN1YnNjcmli
ZSh0b3BpYywgbV92YXBpZFB1YmxpY0tleSwgW3RoaXMsIGlzUmV0cnksIHRvcGljXShOU1N0cmlu
ZyAqZW5kcG9pbnQsIE5TRXJyb3IgKmVycm9yKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChl
cnJvcikgeworI2lmICFIQVZFKEFQUExFX1BVU0hfU0VSVklDRV9VUkxfVE9LRU5fU1VQUE9SVCkK
KyAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oaXNSZXRyeSk7CisjZWxzZQorICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiB1c2UgcG9pbnRlciBjb21wYXJpc29uIG9uY2UgQVBTVVJMVG9rZW5F
cnJvckRvbWFpbiBpcyBleHRlcm5lZC4KKyAgICAgICAgICAgICAgICBpZiAoaXNSZXRyeSA9PSBJ
c1JldHJ5OjpObyAmJiBbZXJyb3IuZG9tYWluIGlzRXF1YWxUb1N0cmluZzpAIkFQU1VSTFRva2Vu
RXJyb3JEb21haW4iXSAmJiBlcnJvci5jb2RlID09IEFQU1VSTFRva2VuRXJyb3JDb2RlVG9waWNB
bHJlYWR5SW5GaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFRvUmVjb3ZlckZy
b21Ub3BpY0FscmVhZHlJbkZpbHRlckVycm9yKFdURk1vdmUodG9waWMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIlB1c2hNYW5hZ2VyLnN1YnNjcmliZShidW5kbGVJRDog
JXtwdWJsaWN9cywgc2NvcGU6ICV7c2Vuc2l0aXZlfXMpIGZhaWxlZCB3aXRoIGRvbWFpbjogJXtw
dWJsaWN9cyBjb2RlOiAlbGxkKSIsIG1fYnVuZGxlSWRlbnRpZmllci51dGY4KCkuZGF0YSgpLCBt
X3Njb3BlLnV0ZjgoKS5kYXRhKCksIGVycm9yLmRvbWFpbi5VVEY4U3RyaW5nLCBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihlcnJvci5jb2RlKSk7CisgICAgICAgICAgICAgICAgcmVqZWN0KFdlYkNvcmU6
OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3JlOjpBYm9ydEVycm9yLCAiRmFpbGVkIGR1ZSB0byBpbnRl
cm5hbCBzZXJ2aWNlIGVycm9yIl9zIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBjbGllbnRLZXlzID0gbV9zZXJ2aWNlLmNvbm5l
Y3Rpb24oKS5nZW5lcmF0ZUNsaWVudEtleXMoKTsKKyAgICAgICAgICAgIFB1c2hSZWNvcmQgcmVj
b3JkOworICAgICAgICAgICAgcmVjb3JkLmJ1bmRsZUlEID0gbV9idW5kbGVJZGVudGlmaWVyOwor
ICAgICAgICAgICAgcmVjb3JkLnNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZUZyb21TdHJpbmcobV9zY29wZSktPmRhdGEoKS50b1N0cmluZygpOworICAgICAgICAgICAgcmVj
b3JkLnNjb3BlID0gbV9zY29wZTsKKyAgICAgICAgICAgIHJlY29yZC5lbmRwb2ludCA9IGVuZHBv
aW50OworICAgICAgICAgICAgcmVjb3JkLnRvcGljID0gV1RGTW92ZSh0b3BpYyk7CisgICAgICAg
ICAgICByZWNvcmQuc2VydmVyVkFQSURQdWJsaWNLZXkgPSBtX3ZhcGlkUHVibGljS2V5OworICAg
ICAgICAgICAgcmVjb3JkLmNsaWVudFB1YmxpY0tleSA9IFdURk1vdmUoY2xpZW50S2V5cy5jbGll
bnRQMjU2REhLZXlQYWlyLnB1YmxpY0tleSk7CisgICAgICAgICAgICByZWNvcmQuY2xpZW50UHJp
dmF0ZUtleSA9IFdURk1vdmUoY2xpZW50S2V5cy5jbGllbnRQMjU2REhLZXlQYWlyLnByaXZhdGVL
ZXkpOworICAgICAgICAgICAgcmVjb3JkLnNoYXJlZEF1dGhTZWNyZXQgPSBXVEZNb3ZlKGNsaWVu
dEtleXMuc2hhcmVkQXV0aFNlY3JldCk7CisKKyAgICAgICAgICAgIG1fZGF0YWJhc2UuaW5zZXJ0
UmVjb3JkKHJlY29yZCwgW3RoaXNdKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICAg
ICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1
c2gsICJQdXNoTWFuYWdlci5zdWJzY3JpYmUoYnVuZGxlSUQ6ICV7cHVibGljfXMsIHNjb3BlOiAl
e3NlbnNpdGl2ZX1zKSBmYWlsZWQgd2l0aCBkYXRhYmFzZSBlcnJvciIsIG1fYnVuZGxlSWRlbnRp
Zmllci51dGY4KCkuZGF0YSgpLCBtX3Njb3BlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
ICAgICAgICByZWplY3QoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkFib3J0RXJy
b3IsICJGYWlsZWQgZHVlIHRvIGludGVybmFsIGRhdGFiYXNlIGVycm9yIl9zIH0pOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IHN1cHBvcnQgcGFydGlhbCB0b3BpYyBsaXN0IHVwZGF0ZXMuCisgICAgICAg
ICAgICAgICAgdXBkYXRlVG9waWNMaXN0cyhtX2Nvbm5lY3Rpb24sIG1fZGF0YWJhc2UsIFt0aGlz
LCByZWNvcmQgPSBXVEZNb3ZlKCpyZXN1bHQpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
ICAgICBmdWxmaWxsKG1ha2VQdXNoU3Vic2NyaXB0aW9uRnJvbVJlY29yZChXVEZNb3ZlKHJlY29y
ZCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
KyAgICB9KTsKK30KKworLy8gVHJpZXMgdG8gcmVjb3ZlciBmcm9tIGEgdG9waWMgYmVpbmcgbW92
ZWQgdG8gdGhlIGdsb2JhbCBwYXVzZWQgZmlsdGVyIChyZGFyOi8vODgxMzkzMzApLgordm9pZCBT
dWJzY3JpYmVSZXF1ZXN0OjphdHRlbXB0VG9SZWNvdmVyRnJvbVRvcGljQWxyZWFkeUluRmlsdGVy
RXJyb3IoU3RyaW5nJiYgdG9waWMpCit7CisjaWYgIUhBVkUoQVBQTEVfUFVTSF9TRVJWSUNFX1VS
TF9UT0tFTl9TVVBQT1JUKQorICAgIFVOVVNFRF9QQVJBTSh0b3BpYyk7CisjZWxzZQorICAgIFdv
cmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB0b3BpYyA9IFdURk1vdmUodG9waWMpXSgp
IG11dGFibGUgeworICAgICAgICAvLyBUaGlzIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcGF1c2Vk
IHRvcGljIGFuZCB0ZWxscyBhcHNkIHRvIGZvcmdldCBhYm91dCB0aGUgdG9waWMuCisgICAgICAg
IGF1dG8gb3JpZ2luYWxUb3BpY3MgPSBtX2Nvbm5lY3Rpb24uaWdub3JlZFRvcGljcygpOworICAg
ICAgICBhdXRvIGF1Z21lbnRlZFRvcGljcyA9IG9yaWdpbmFsVG9waWNzOworICAgICAgICBhdWdt
ZW50ZWRUb3BpY3MuYXBwZW5kKHRvcGljKTsKKyAgICAgICAgbV9jb25uZWN0aW9uLnNldElnbm9y
ZWRUb3BpY3MoV1RGTW92ZShhdWdtZW50ZWRUb3BpY3MpKTsKKyAgICAgICAgbV9jb25uZWN0aW9u
LnNldElnbm9yZWRUb3BpY3MoV1RGTW92ZShvcmlnaW5hbFRvcGljcykpOworCisgICAgICAgIFdv
cmtRdWV1ZTo6bWFpbigpLmRpc3BhdGNoKFt0aGlzXSgpIG11dGFibGUgeworICAgICAgICAgICAg
c3RhcnRJbXBsKElzUmV0cnk6Olllcyk7CisgICAgICAgIH0pOworICAgIH0pOworI2VuZGlmCit9
CisKK2NsYXNzIFVuc3Vic2NyaWJlUmVxdWVzdCA6IHB1YmxpYyBQdXNoU2VydmljZVJlcXVlc3RJ
bXBsPGJvb2w+IHsKK3B1YmxpYzoKKyAgICBVbnN1YnNjcmliZVJlcXVlc3QoUHVzaFNlcnZpY2Um
LCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFB1
c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyLCBSZXN1bHRIYW5kbGVyJiYpOworICAgIHZpcnR1YWwg
flVuc3Vic2NyaWJlUmVxdWVzdCgpID0gZGVmYXVsdDsKKworcHJvdGVjdGVkOgorICAgIEFTQ0lJ
TGl0ZXJhbCBkZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJVbnN1YnNjcmliZVJl
cXVlc3QiX3M7IH0KKyAgICB2b2lkIHN0YXJ0SW50ZXJuYWwoKSBmaW5hbDsKKyAgICB2b2lkIGZp
bmlzaCgpIGZpbmFsIHsgbV9zZXJ2aWNlLmRpZENvbXBsZXRlVW5zdWJzY3JpYmVSZXF1ZXN0KCp0
aGlzKTsgfQorCitwcml2YXRlOgorICAgIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIG1fc3Vi
c2NyaXB0aW9uSWRlbnRpZmllcjsKK307CisKK1Vuc3Vic2NyaWJlUmVxdWVzdDo6VW5zdWJzY3Jp
YmVSZXF1ZXN0KFB1c2hTZXJ2aWNlJiBzZXJ2aWNlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgc2NvcGUsIFB1c2hTdWJzY3JpcHRpb25JZGVudGlmaWVyIHN1
YnNjcmlwdGlvbklkZW50aWZpZXIsIFJlc3VsdEhhbmRsZXImJiByZXN1bHRIYW5kbGVyKQorICAg
IDogUHVzaFNlcnZpY2VSZXF1ZXN0SW1wbChzZXJ2aWNlLCBidW5kbGVJZGVudGlmaWVyLCBzY29w
ZSwgV1RGTW92ZShyZXN1bHRIYW5kbGVyKSkKKyAgICAsIG1fc3Vic2NyaXB0aW9uSWRlbnRpZmll
cihzdWJzY3JpcHRpb25JZGVudGlmaWVyKQoreworfQorCisvLyBJbXBsZW1lbnRzIHRoZSB3ZWJw
dXNoZCBzaWRlIG9mIFB1c2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUuCit2b2lkIFVuc3Vic2Ny
aWJlUmVxdWVzdDo6c3RhcnRJbnRlcm5hbCgpCit7CisgICAgbV9kYXRhYmFzZS5nZXRSZWNvcmRC
eUJ1bmRsZUlkZW50aWZpZXJBbmRTY29wZShtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2NvcGUsIFt0
aGlzXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFyZXN1bHQgfHwgbV9z
dWJzY3JpcHRpb25JZGVudGlmaWVyICE9IHJlc3VsdC0+aWRlbnRpZmllcikgeworICAgICAgICAg
ICAgZnVsZmlsbChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBhdXRvIHRvcGljID0gbWFrZVB1c2hUb3BpYyhtX2J1bmRsZUlkZW50aWZpZXIsIG1fc2Nv
cGUpOworICAgICAgICBtX2Nvbm5lY3Rpb24udW5zdWJzY3JpYmUodG9waWMsIHJlc3VsdC0+c2Vy
dmVyVkFQSURQdWJsaWNLZXksIFt0aGlzXShib29sIHVuc3Vic2NyaWJlZCwgTlNFcnJvciAqZXJy
b3IpIG11dGFibGUgeworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAgLy8g
SWYgd2UgZmFpbCB0byB1bnN1YnNjcmliZSBmcm9tIGFwc2QsIGp1c3QgZHJvcCBhIGxvZy4gV2Ug
c3RpbGwgd2FudCB0byBjb250aW51ZSBhbmQgcmVtb3ZlIHRoZSByZWNvcmQgZnJvbSBvdXIgZGF0
YWJhc2UgaW4gY2FzZSB0aGVyZSdzIGEgc3RhdGUgbWlzbWF0Y2ggYmV0d2VlbiBvdXIgZGF0YWJh
c2UgYW5kIGFwc2QncyBkYXRhYmFzZS4KKyAgICAgICAgICAgIGlmICghdW5zdWJzY3JpYmVkKQor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJQdXNoU3Vic2NyaXB0aW9uLnVuc3Vi
c2NyaWJlKGJ1bmRsZUlEOiAle3B1YmxpY31zLCBzY29wZTogJXtzZW5zaXRpdmV9cykgZmFpbGVk
IHdpdGggZG9tYWluOiAle3B1YmxpY31zIGNvZGU6ICVsbGQpIiwgbV9idW5kbGVJZGVudGlmaWVy
LnV0ZjgoKS5kYXRhKCksIG1fc2NvcGUudXRmOCgpLmRhdGEoKSwgZXJyb3IuZG9tYWluLlVURjhT
dHJpbmcgPzogIm5vbmUiLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihlcnJvci5jb2RlKSk7CisjZWxz
ZQorICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHVuc3Vic2NyaWJlZCk7CisgICAgICAgICAgICBV
TlVTRURfUEFSQU0oZXJyb3IpOworI2VuZGlmCisKKyAgICAgICAgICAgIG1fZGF0YWJhc2UucmVt
b3ZlUmVjb3JkQnlJZGVudGlmaWVyKG1fc3Vic2NyaXB0aW9uSWRlbnRpZmllciwgW3RoaXNdKGJv
b2wgcmVtb3ZlZCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZW1vdmVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZ1bGZpbGwoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHN1
cHBvcnQgcGFydGlhbCB0b3BpYyBsaXN0IHVwZGF0ZXMuCisgICAgICAgICAgICAgICAgdXBkYXRl
VG9waWNMaXN0cyhtX2Nvbm5lY3Rpb24sIG1fZGF0YWJhc2UsIFt0aGlzXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgICAgICBmdWxmaWxsKHRydWUpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCisvLyBPbmx5IGFsbG93
IG9uZSByZXF1ZXN0IHBlciAoYnVuZGxlSWRlbnRpZmllciwgc2NvcGUpIHRvIHByb2NlZWQgYXQg
b25jZS4gRm9yIGluc3RhbmNlLCBpZiBhIGdpdmVuCisvLyBwYWdlIGNhbGxzIFB1c2hNYW5hZ2Vy
LnN1YnNjcmliZSgpIHR3aWNlIGluIGEgcm93LCB0aGUgc2Vjb25kIHN1YnNjcmliZSBjYWxsIHdv
bid0IHN0YXJ0IHVudGlsCisvLyB0aGUgZmlyc3Qgb25lIGNvbXBsZXRlcy4KK3ZvaWQgUHVzaFNl
cnZpY2U6OmVucXVldWVQdXNoU2VydmljZVJlcXVlc3QoUHVzaFNlcnZpY2VSZXF1ZXN0TWFwJiBt
YXAsIHN0ZDo6dW5pcXVlX3B0cjxQdXNoU2VydmljZVJlcXVlc3Q+JiYgcmVxdWVzdCkKK3sKKyAg
ICBhdXRvIGtleSA9IHN0ZDo6bWFrZV90dXBsZShyZXF1ZXN0LT5idW5kbGVJZGVudGlmaWVyKCks
IHJlcXVlc3QtPnNjb3BlKCkpOworICAgIGF1dG8gYWRkUmVzdWx0ID0gbWFwLmVuc3VyZShrZXks
IFtdKCkgeworICAgICAgICByZXR1cm4gRGVxdWU8c3RkOjp1bmlxdWVfcHRyPFB1c2hTZXJ2aWNl
UmVxdWVzdD4+IHsgfTsKKyAgICB9KTsKKworICAgIGF1dG8gYWRkZWRSZXF1ZXN0ID0gcmVxdWVz
dC5nZXQoKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZNb3ZlKHJl
cXVlc3QpKTsKKworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkZWRS
ZXF1ZXN0LT5zdGFydCgpOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpmaW5pc2hlZFB1c2hTZXJ2
aWNlUmVxdWVzdChQdXNoU2VydmljZVJlcXVlc3RNYXAmIG1hcCwgUHVzaFNlcnZpY2VSZXF1ZXN0
JiByZXF1ZXN0KQoreworICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3R1cGxlKHJlcXVlc3QuYnVu
ZGxlSWRlbnRpZmllcigpLCByZXF1ZXN0LnNjb3BlKCkpOworICAgIGF1dG8gcmVxdWVzdFF1ZXVl
SXQgPSBtYXAuZmluZChrZXkpOworCisgICAgUkVMRUFTRV9BU1NFUlQocmVxdWVzdFF1ZXVlSXQg
IT0gbWFwLmVuZCgpKTsKKyAgICBhdXRvJiByZXF1ZXN0UXVldWUgPSByZXF1ZXN0UXVldWVJdC0+
dmFsdWU7CisgICAgUkVMRUFTRV9BU1NFUlQocmVxdWVzdFF1ZXVlLnNpemUoKSA+IDApOworICAg
IGF1dG8gY3VycmVudFJlcXVlc3QgPSByZXF1ZXN0UXVldWUudGFrZUZpcnN0KCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoY3VycmVudFJlcXVlc3QuZ2V0KCkgPT0gJnJlcXVlc3QpOworCisgICAgUHVz
aFNlcnZpY2VSZXF1ZXN0KiBuZXh0UmVxdWVzdCA9IG51bGxwdHI7CisgICAgaWYgKCFyZXF1ZXN0
UXVldWUuc2l6ZSgpKQorICAgICAgICBtYXAucmVtb3ZlKHJlcXVlc3RRdWV1ZUl0KTsKKyAgICBl
bHNlCisgICAgICAgIG5leHRSZXF1ZXN0ID0gcmVxdWVzdFF1ZXVlLmZpcnN0KCkuZ2V0KCk7CisK
KyAgICAvLyBFdmVuIGlmIHRoZXJlJ3Mgbm8gbmV4dCByZXF1ZXN0IHRvIHN0YXJ0LCBob2xkIG9u
IHRvIGN1cnJlbnRSZXF1ZXN0IHVudGlsIHRoZSBuZXh0IHR1cm4gb2YgdGhlIHJ1biBsb29wIHNp
bmNlIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgZXhlY3V0aW5nIHRoZSBmaW5pc2goKSBtZW1iZXIg
ZnVuY3Rpb24gb2YgY3VycmVudFJlcXVlc3QuCisgICAgV29ya1F1ZXVlOjptYWluKCkuZGlzcGF0
Y2goW2N1cnJlbnRSZXF1ZXN0ID0gV1RGTW92ZShjdXJyZW50UmVxdWVzdCksIG5leHRSZXF1ZXN0
XSB7CisgICAgICAgIGlmIChuZXh0UmVxdWVzdCkKKyAgICAgICAgICAgIG5leHRSZXF1ZXN0LT5z
dGFydCgpOworICAgIH0pOworfQorCit2b2lkIFB1c2hTZXJ2aWNlOjpnZXRTdWJzY3JpcHRpb24o
Y29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNjb3BlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
UHVzaFN1YnNjcmlwdGlvbkRhdGE+LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIGVucXVldWVQdXNoU2VydmljZVJlcXVlc3QobV9nZXRTdWJz
Y3JpcHRpb25SZXF1ZXN0cywgbWFrZVVuaXF1ZTxHZXRTdWJzY3JpcHRpb25SZXF1ZXN0PigqdGhp
cywgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7
Cit9CisKK3ZvaWQgUHVzaFNlcnZpY2U6OmRpZENvbXBsZXRlR2V0U3Vic2NyaXB0aW9uUmVxdWVz
dChHZXRTdWJzY3JpcHRpb25SZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGZpbmlzaGVkUHVzaFNl
cnZpY2VSZXF1ZXN0KG1fZ2V0U3Vic2NyaXB0aW9uUmVxdWVzdHMsIHJlcXVlc3QpOworfQorCit2
b2lkIFB1c2hTZXJ2aWNlOjpzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIHNjb3BlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhcGlkUHVibGlj
S2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hT
dWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGVucXVldWVQdXNoU2VydmljZVJlcXVlc3QobV9zdWJzY3JpYmVSZXF1
ZXN0cywgbWFrZVVuaXF1ZTxTdWJzY3JpYmVSZXF1ZXN0PigqdGhpcywgYnVuZGxlSWRlbnRpZmll
ciwgc2NvcGUsIHZhcGlkUHVibGljS2V5LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOwor
fQorCit2b2lkIFB1c2hTZXJ2aWNlOjpkaWRDb21wbGV0ZVN1YnNjcmliZVJlcXVlc3QoU3Vic2Ny
aWJlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdCht
X3N1YnNjcmliZVJlcXVlc3RzLCByZXF1ZXN0KTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6dW5z
dWJzY3JpYmUoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNj
b3BlLCBQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2Vw
dGlvbkRhdGE+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZW5xdWV1ZVB1c2hTZXJ2
aWNlUmVxdWVzdChtX3Vuc3Vic2NyaWJlUmVxdWVzdHMsIG1ha2VVbmlxdWU8VW5zdWJzY3JpYmVS
ZXF1ZXN0PigqdGhpcywgYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIHN1YnNjcmlwdGlvbklkZW50
aWZpZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7Cit9CisKK3ZvaWQgUHVzaFNlcnZp
Y2U6OmRpZENvbXBsZXRlVW5zdWJzY3JpYmVSZXF1ZXN0KFVuc3Vic2NyaWJlUmVxdWVzdCYgcmVx
dWVzdCkKK3sKKyAgICBmaW5pc2hlZFB1c2hTZXJ2aWNlUmVxdWVzdChtX3Vuc3Vic2NyaWJlUmVx
dWVzdHMsIHJlcXVlc3QpOworfQorCitlbnVtIGNsYXNzIENvbnRlbnRFbmNvZGluZyB7CisgICAg
RW1wdHksCisgICAgQUVTR0NNLAorICAgIEFFUzEyOEdDTQorfTsKKworc3RydWN0IFJhd1B1c2hN
ZXNzYWdlIHsKKyAgICBTdHJpbmcgdG9waWM7CisgICAgQ29udGVudEVuY29kaW5nIGVuY29kaW5n
OworCisgICAgLy8gT25seSBzZXQgaWYgZW5jb2RpbmcgaXMgbm90IENvbnRlbnRFbmNvZGluZzo6
RW1wdHkuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY3J5cHRlZFBheWxvYWQ7CisKKyAgICAvLyBP
bmx5IHNldCBpZiBlbmNvZGluZyBpcyBDb250ZW50RW5jb2Rpbmc6OkFFU0dDTS4KKyAgICBWZWN0
b3I8dWludDhfdD4gc2VydmVyUHVibGljS2V5OworICAgIFZlY3Rvcjx1aW50OF90PiBzYWx0Owor
Cit9OworCitzdGF0aWMgc3RkOjpvcHRpb25hbDxSYXdQdXNoTWVzc2FnZT4gbWFrZVJhd1B1c2hN
ZXNzYWdlKE5TU3RyaW5nICp0b3BpYywgTlNEaWN0aW9uYXJ5KiB1c2VySW5mbykKK3sKKyAgICBS
YXdQdXNoTWVzc2FnZSBtZXNzYWdlOworCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IG1lc3NhZ2UudG9waWMgPSB0b3BpYzsKKyAgICAgICAgTlNTdHJpbmcgKmNvbnRlbnRFbmNvZGlu
ZyA9IHVzZXJJbmZvW0AiY29udGVudF9lbmNvZGluZyJdOworICAgICAgICBOU1N0cmluZyAqcGF5
bG9hZEJhc2U2NCA9IHVzZXJJbmZvW0AicGF5bG9hZCJdOworCisgICAgICAgIGlmICghY29udGVu
dEVuY29kaW5nLmxlbmd0aCB8fCAhcGF5bG9hZEJhc2U2NC5sZW5ndGgpIHsKKyAgICAgICAgICAg
IG1lc3NhZ2UuZW5jb2RpbmcgPSBDb250ZW50RW5jb2Rpbmc6OkVtcHR5OworICAgICAgICAgICAg
cmV0dXJuIG1lc3NhZ2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoW2NvbnRlbnRFbmNvZGlu
ZyBpc0VxdWFsVG9TdHJpbmc6QCJhZXMxMjhnY20iXSkKKyAgICAgICAgICAgIG1lc3NhZ2UuZW5j
b2RpbmcgPSBDb250ZW50RW5jb2Rpbmc6OkFFUzEyOEdDTTsKKyAgICAgICAgZWxzZSBpZiAoW2Nv
bnRlbnRFbmNvZGluZyBpc0VxdWFsVG9TdHJpbmc6QCJhZXNnY20iXSkgeworICAgICAgICAgICAg
bWVzc2FnZS5lbmNvZGluZyA9IENvbnRlbnRFbmNvZGluZzo6QUVTR0NNOworCisgICAgICAgICAg
ICBOU1N0cmluZyAqc2VydmVyUHVibGljS2V5QmFzZTY0VVJMID0gdXNlckluZm9bQCJhc19wdWJs
aWNrZXkiXTsKKyAgICAgICAgICAgIE5TU3RyaW5nICpzYWx0QmFzZTY0VVJMID0gdXNlckluZm9b
QCJhc19zYWx0Il07CisgICAgICAgICAgICBpZiAoIXNlcnZlclB1YmxpY0tleUJhc2U2NFVSTCB8
fCAhc2FsdEJhc2U2NFVSTCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFB1c2gsICJE
cm9wcGluZyBhZXNnY20tZW5jcnlwdGVkIHB1c2ggd2l0aG91dCByZXF1aXJlZCBzZXJ2ZXIga2V5
IGFuZCBzYWx0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBzZXJ2ZXJQdWJsaWNLZXkgPSBiYXNlNjRVUkxE
ZWNvZGUoc2VydmVyUHVibGljS2V5QmFzZTY0VVJMKTsKKyAgICAgICAgICAgIGF1dG8gc2FsdCA9
IGJhc2U2NFVSTERlY29kZShzYWx0QmFzZTY0VVJMKTsKKyAgICAgICAgICAgIGlmICghc2VydmVy
UHVibGljS2V5IHx8ICFzYWx0KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUHVzaCwg
IkRyb3BwaW5nIGFlc2djbS1lbmNyeXB0ZWQgcHVzaCB3aXRoIGltcHJvcGVybHkgZW5jb2RlZCBz
ZXJ2ZXIga2V5IGFuZCBzYWx0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWVzc2FnZS5zZXJ2ZXJQdWJsaWNLZXkg
PSBXVEZNb3ZlKCpzZXJ2ZXJQdWJsaWNLZXkpOworICAgICAgICAgICAgbWVzc2FnZS5zYWx0ID0g
V1RGTW92ZSgqc2FsdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0xP
RyhQdXNoLCAiRHJvcHBpbmcgcHVzaCB3aXRoIHVua25vd24gY29udGVudCBlbmNvZGluZzogJXtw
dWJsaWN9cyIsIGNvbnRlbnRFbmNvZGluZy5VVEY4U3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHBheWxvYWQgPSBiYXNl
NjREZWNvZGUocGF5bG9hZEJhc2U2NCk7CisgICAgICAgIGlmICghcGF5bG9hZCkgeworICAgICAg
ICAgICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIHB1c2ggd2l0aCBpbXByb3Blcmx5IGVu
Y29kZWQgcGF5bG9hZCIpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgfQorICAgICAgICBtZXNzYWdlLmVuY3J5cHRlZFBheWxvYWQgPSBXVEZNb3ZlKCpwYXlsb2Fk
KTsKKyAgICB9CisKKyAgICByZXR1cm4gbWVzc2FnZTsKK30KKwordm9pZCBQdXNoU2VydmljZTo6
ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKE5TU3RyaW5nKiB0b3BpYywgTlNEaWN0aW9uYXJ5KiB1c2Vy
SW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIGF1dG8gbWVzc2FnZVJlc3VsdCA9IG1ha2VSYXdQdXNoTWVzc2FnZSh0b3BpYywgdXNlcklu
Zm8pOworICAgIGlmICghbWVzc2FnZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9k
YXRhYmFzZS0+Z2V0UmVjb3JkQnlUb3BpYyh0b3BpYywgW3RoaXMsIG1lc3NhZ2UgPSBXVEZNb3Zl
KCptZXNzYWdlUmVzdWx0KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oYXV0byYmIHJlY29yZFJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghcmVj
b3JkUmVzdWx0KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhQdXNoLCAiRHJvcHBpbmcgaW5j
b21pbmcgcHVzaCBzZW50IHRvIHVua25vd24gdG9waWM6ICV7c2Vuc2l0aXZlfXMiLCBtZXNzYWdl
LnRvcGljLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHJlY29yZCA9IFdU
Rk1vdmUoKnJlY29yZFJlc3VsdCk7CisKKyAgICAgICAgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0g
Q29udGVudEVuY29kaW5nOjpFbXB0eSkgeworICAgICAgICAgICAgbV9pbmNvbWluZ1B1c2hNZXNz
YWdlSGFuZGxlcihyZWNvcmQuYnVuZGxlSUQsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UgeyB7IH0s
IFVSTChVUkwoKSwgcmVjb3JkLnNjb3BlKSB9KTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBQdXNoQ3J5
cHRvOjpDbGllbnRLZXlzIGNsaWVudEtleXMgeworICAgICAgICAgICAgeyBXVEZNb3ZlKHJlY29y
ZC5jbGllbnRQdWJsaWNLZXkpLCBXVEZNb3ZlKHJlY29yZC5jbGllbnRQcml2YXRlS2V5KSB9LAor
ICAgICAgICAgICAgV1RGTW92ZShyZWNvcmQuc2hhcmVkQXV0aFNlY3JldCkKKyAgICAgICAgfTsK
KworICAgICAgICBzdGQ6Om9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZGVjcnlwdGVkUGF5bG9h
ZDsKKyAgICAgICAgaWYgKG1lc3NhZ2UuZW5jb2RpbmcgPT0gQ29udGVudEVuY29kaW5nOjpBRVMx
MjhHQ00pCisgICAgICAgICAgICBkZWNyeXB0ZWRQYXlsb2FkID0gZGVjcnlwdEFFUzEyOEdDTVBh
eWxvYWQoY2xpZW50S2V5cywgbWVzc2FnZS5lbmNyeXB0ZWRQYXlsb2FkKTsKKyAgICAgICAgZWxz
ZSBpZiAobWVzc2FnZS5lbmNvZGluZyA9PSBDb250ZW50RW5jb2Rpbmc6OkFFU0dDTSkKKyAgICAg
ICAgICAgIGRlY3J5cHRlZFBheWxvYWQgPSBkZWNyeXB0QUVTR0NNUGF5bG9hZChjbGllbnRLZXlz
LCBtZXNzYWdlLnNlcnZlclB1YmxpY0tleSwgbWVzc2FnZS5zYWx0LCBtZXNzYWdlLmVuY3J5cHRl
ZFBheWxvYWQpOworCisgICAgICAgIGlmICghZGVjcnlwdGVkUGF5bG9hZCkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0coUHVzaCwgIkRyb3BwaW5nIGluY29taW5nIHB1c2ggZHVlIHRvIGRlY3J5
cHRpb24gZXJyb3IgZm9yIHRvcGljICV7c2Vuc2l0aXZlfXMiLCBtZXNzYWdlLnRvcGljLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRs
ZXIocmVjb3JkLmJ1bmRsZUlELCBXZWJLaXQ6OldlYlB1c2hNZXNzYWdlIHsgV1RGTW92ZSgqZGVj
cnlwdGVkUGF5bG9hZCksIFVSTChVUkwoKSwgcmVjb3JkLnNjb3BlKSB9KTsKKworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJQdXNo
RApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9uLmgKaW5k
ZXggMmMxNDE0NGM2MWJiM2VmYWU0ZWQzMjhlMTUyMGQzZWNmMDgzMTdlZi4uMTk4MTQzZjU2OTdj
ZDI4YzY5MjhkNDU2OGMyMWMzMjU0OTIwZDIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL1B1c2hTZXJ2aWNlQ29ubmVjdGlvbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSA8V2ViQ29yZS9QdXNoTWVzc2FnZUNyeXB0by5oPgogI2luY2x1ZGUg
PHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgpAQCAtNDcsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgUHVzaFNl
cnZpY2VDb25uZWN0aW9uKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgflB1c2hTZXJ2aWNlQ29u
bmVjdGlvbigpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6UHVzaENyeXB0bzo6
Q2xpZW50S2V5cyBnZW5lcmF0ZUNsaWVudEtleXMoKTsKKwogICAgIHVzaW5nIFN1YnNjcmliZUhh
bmRsZXIgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE5TU3RyaW5nICosIE5TRXJyb3IgKik+Owog
ICAgIHZpcnR1YWwgdm9pZCBzdWJzY3JpYmUoY29uc3QgU3RyaW5nJiB0b3BpYywgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB2YXBpZFB1YmxpY0tleSwgU3Vic2NyaWJlSGFuZGxlciYmKSA9IDA7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KaW5k
ZXggNTM0MzMyNWViNWVhMjAzZThkZjZmZjgzMDNjYjliMGZmYzgxMzIxYi4uOTJmODE0Mjc3YTgz
ODE1MzE2ODhiMGU0ODUxODJkNDNkODVjYzg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9QdXNoU2VydmljZUNvbm5lY3Rpb24ubW0KQEAgLTI4LDggKzI4LDE1IEBACiAKICNpbXBv
cnQgPHd0Zi9Xb3JrUXVldWUuaD4KIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIG5hbWVz
cGFjZSBXZWJQdXNoRCB7CiAKK1B1c2hDcnlwdG86OkNsaWVudEtleXMgUHVzaFNlcnZpY2VDb25u
ZWN0aW9uOjpnZW5lcmF0ZUNsaWVudEtleXMoKQoreworICAgIHJldHVybiBQdXNoQ3J5cHRvOjpD
bGllbnRLZXlzOjpnZW5lcmF0ZSgpOworfQorCiB2b2lkIFB1c2hTZXJ2aWNlQ29ubmVjdGlvbjo6
c3RhcnRMaXN0ZW5pbmdGb3JQdXNoTWVzc2FnZXMoSW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIm
JiBoYW5kbGVyKQogewogICAgIG1faW5jb21pbmdQdXNoTWVzc2FnZUhhbmRsZXIgPSBXVEZNb3Zl
KGhhbmRsZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFl
bW9uLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24uaAppbmRleCBhZjMx
ODU3ZGI4NzM3YTliNjQzOTVmYjAwMDQ3NTBhOTU4ZTU0OGQwLi4wMjgwODRlNTJiNGEwZGJiM2Mx
NDliZTZjOTczNmY3NTc1ZTc4N2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L1dlYlB1c2hEYWVtb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVt
b24uaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiUHVzaENsaWVudENvbm5lY3Rpb24u
aCIKICNpbmNsdWRlICJQdXNoTWVzc2FnZUZvclRlc3RpbmcuaCIKKyNpbmNsdWRlICJQdXNoU2Vy
dmljZS5oIgogI2luY2x1ZGUgIldlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5o
IgogI2luY2x1ZGUgIldlYlB1c2hEYWVtb25Db25zdGFudHMuaCIKICNpbmNsdWRlICJXZWJQdXNo
TWVzc2FnZS5oIgpAQCAtNjEsNiArNjIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY29ubmVjdGlv
bkFkZGVkKHhwY19jb25uZWN0aW9uX3QpOwogICAgIHZvaWQgY29ubmVjdGlvblJlbW92ZWQoeHBj
X2Nvbm5lY3Rpb25fdCk7CiAKKyAgICB2b2lkIHN0YXJ0TW9ja1B1c2hTZXJ2aWNlKCk7CisgICAg
dm9pZCBzdGFydFB1c2hTZXJ2aWNlKGNvbnN0IFN0cmluZyYgaW5jb21pbmdQdXNoU2VydmljZU5h
bWUsIGNvbnN0IFN0cmluZyYgcHVzaERhdGFiYXNlUGF0aCk7CisgICAgdm9pZCBoYW5kbGVJbmNv
bWluZ1B1c2goY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJLaXQ6OldlYlB1c2hN
ZXNzYWdlJiYpOworCiAgICAgLy8gTWVzc2FnZSBoYW5kbGVycwogICAgIHZvaWQgZWNob1R3aWNl
KENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFN0cmluZyYpPiYmIHJlcGx5U2VuZGVyKTsKICAgICB2b2lkIHJlcXVlc3RTeXN0ZW1O
b3RpZmljYXRpb25QZXJtaXNzaW9uKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBTdHJpbmcmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIHJlcGx5U2VuZGVyKTsKQEAgLTY5LDYgKzc0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGVidWdNb2RlSXNFbmFibGVkKENsaWVudENvbm5l
Y3Rpb24qLCBib29sKTsKICAgICB2b2lkIHVwZGF0ZUNvbm5lY3Rpb25Db25maWd1cmF0aW9uKENs
aWVudENvbm5lY3Rpb24qLCBjb25zdCBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRp
b24mKTsKICAgICB2b2lkIGluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGluZyhDbGllbnRDb25uZWN0
aW9uKiwgY29uc3QgUHVzaE1lc3NhZ2VGb3JUZXN0aW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJik7CisgICAgdm9pZCBpbmplY3RFbmNyeXB0ZWRQdXNoTWVzc2FnZUZvclRlc3Rp
bmcoQ2xpZW50Q29ubmVjdGlvbiosIGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYpOwogICAgIHZvaWQgZ2V0UGVuZGluZ1B1c2hNZXNzYWdlcyhDbGllbnRDb25u
ZWN0aW9uKiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8V2ViS2l0OjpXZWJQ
dXNoTWVzc2FnZT4mKT4mJiByZXBseVNlbmRlcik7CiAgICAgdm9pZCBzdWJzY3JpYmVUb1B1c2hT
ZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIGFwcGxpY2F0aW9uU2VydmVyS2V5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IEV4cGVjdGVkPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpF
eGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2VuZGVyKTsKICAgICB2b2lkIHVuc3Vic2NyaWJlRnJv
bVB1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBXZWJD
b3JlOjpQdXNoU3Vic2NyaXB0aW9uSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBFeHBlY3RlZDxib29sLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRhPiYpPiYmIHJlcGx5U2Vu
ZGVyKTsKQEAgLTg4LDkgKzk0LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG5vdGlmeUNsaWVu
dFB1c2hNZXNzYWdlSXNBdmFpbGFibGUoY29uc3QgU3RyaW5nJiBjbGllbnRDb2RlU2lnbmluZ0lk
ZW50aWZpZXIpOwogCisgICAgdm9pZCBzZXRQdXNoU2VydmljZShzdGQ6OnVuaXF1ZV9wdHI8UHVz
aFNlcnZpY2U+JiYpOworICAgIHZvaWQgcnVuQWZ0ZXJTdGFydGluZ1B1c2hTZXJ2aWNlKEZ1bmN0
aW9uPHZvaWQoKT4mJik7CisKICAgICBDbGllbnRDb25uZWN0aW9uKiB0b0NsaWVudENvbm5lY3Rp
b24oeHBjX2Nvbm5lY3Rpb25fdCk7CiAgICAgSGFzaE1hcDx4cGNfY29ubmVjdGlvbl90LCBSZWY8
Q2xpZW50Q29ubmVjdGlvbj4+IG1fY29ubmVjdGlvbk1hcDsKIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxQdXNoU2VydmljZT4gbV9wdXNoU2VydmljZTsKKyAgICBib29sIG1fcHVzaFNlcnZpY2VTdGFy
dGVkIHsgZmFsc2UgfTsKKyAgICBEZXF1ZTxGdW5jdGlvbjx2b2lkKCk+PiBtX3BlbmRpbmdQdXNo
U2VydmljZUZ1bmN0aW9uczsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8V2ViS2l0OjpX
ZWJQdXNoTWVzc2FnZT4+IG1fcHVzaE1lc3NhZ2VzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBEZXF1
ZTxQdXNoTWVzc2FnZUZvclRlc3Rpbmc+PiBtX3Rlc3RpbmdQdXNoTWVzc2FnZXM7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0gYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggYThmZTQ5ZjUyZDc2MzI2
NjMxY2FjN2Q3NjZjMDkxNDk1ZTljZTU1ZS4uYWRkNmUzZDhhZGZlYTg5OTg4OGY0YmFmNjFhY2Mw
NTMxMzYzZGNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFl
bW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAt
NDAsNiArNDAsNyBAQAogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW1wb3J0IDx3
dGYvU3Bhbi5oPgogI2ltcG9ydCA8d3RmL1VSTC5oPgorI2ltcG9ydCA8d3RmL1dvcmtRdWV1ZS5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OjpXZWJQdXNoRDsKIApAQCAtOTEsNiArOTIsMTEg
QEAgQVJHVU1FTlRTKFB1c2hNZXNzYWdlRm9yVGVzdGluZykKIFJFUExZKGJvb2wpCiBFTkQKIAor
RlVOQ1RJT04oaW5qZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nKQorQVJHVU1FTlRT
KFN0cmluZykKK1JFUExZKGJvb2wpCitFTkQKKwogRlVOQ1RJT04oc3Vic2NyaWJlVG9QdXNoU2Vy
dmljZSkKIEFSR1VNRU5UUyhVUkwsIFZlY3Rvcjx1aW50OF90PikKIFJFUExZKGNvbnN0IEV4cGVj
dGVkPFdlYkNvcmU6OlB1c2hTdWJzY3JpcHRpb25EYXRhLCBXZWJDb3JlOjpFeGNlcHRpb25EYXRh
PiYpCkBAIC0xNTEsNiArMTU3LDEzIEBAIFdlYlB1c2hEOjpFbmNvZGVkTWVzc2FnZSBpbmplY3RQ
dXNoTWVzc2FnZUZvclRlc3Rpbmc6OmVuY29kZVJlcGx5KGJvb2wgcmVwbHkpCiAgICAgcmV0dXJu
IGVuY29kZXIudGFrZUJ1ZmZlcigpOwogfQogCitXZWJQdXNoRDo6RW5jb2RlZE1lc3NhZ2UgaW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nOjplbmNvZGVSZXBseShib29sIHJlcGx5
KQoreworICAgIFdlYktpdDo6RGFlbW9uOjpFbmNvZGVyIGVuY29kZXI7CisgICAgZW5jb2RlciA8
PCByZXBseTsKKyAgICByZXR1cm4gZW5jb2Rlci50YWtlQnVmZmVyKCk7Cit9CisKIFdlYlB1c2hE
OjpFbmNvZGVkTWVzc2FnZSBnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzOjplbmNvZGVSZXBseShjb25z
dCBWZWN0b3I8V2ViS2l0OjpXZWJQdXNoTWVzc2FnZT4mIHJlcGx5KQogewogICAgIFdlYktpdDo6
RGFlbW9uOjpFbmNvZGVyIGVuY29kZXI7CkBAIC0yMjQsNiArMjM3LDUxIEBAIERhZW1vbiYgRGFl
bW9uOjpzaW5nbGV0b24oKQogICAgIHJldHVybiBkYWVtb247CiB9CiAKK3ZvaWQgRGFlbW9uOjpz
dGFydE1vY2tQdXNoU2VydmljZSgpCit7CisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IFt0aGlz
XShjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2Um
JiBtZXNzYWdlKSB7CisgICAgICAgIGhhbmRsZUluY29taW5nUHVzaChidW5kbGVJZGVudGlmaWVy
LCBXVEZNb3ZlKG1lc3NhZ2UpKTsKKyAgICB9OworICAgIFB1c2hTZXJ2aWNlOjpjcmVhdGVNb2Nr
U2VydmljZShXVEZNb3ZlKG1lc3NhZ2VIYW5kbGVyKSwgW3RoaXNdKGF1dG8mJiBwdXNoU2Vydmlj
ZSkgbXV0YWJsZSB7CisgICAgICAgIHNldFB1c2hTZXJ2aWNlKFdURk1vdmUocHVzaFNlcnZpY2Up
KTsKKyAgICB9KTsKK30KKwordm9pZCBEYWVtb246OnN0YXJ0UHVzaFNlcnZpY2UoY29uc3QgU3Ry
aW5nJiBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVBhdGgp
Cit7CisgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IFt0aGlzXShjb25zdCBTdHJpbmcmIGJ1bmRs
ZUlkZW50aWZpZXIsIFdlYktpdDo6V2ViUHVzaE1lc3NhZ2UmJiBtZXNzYWdlKSB7CisgICAgICAg
IGhhbmRsZUluY29taW5nUHVzaChidW5kbGVJZGVudGlmaWVyLCBXVEZNb3ZlKG1lc3NhZ2UpKTsK
KyAgICB9OworICAgIFB1c2hTZXJ2aWNlOjpjcmVhdGUoaW5jb21pbmdQdXNoU2VydmljZU5hbWUs
IGRhdGFiYXNlUGF0aCwgV1RGTW92ZShtZXNzYWdlSGFuZGxlciksIFt0aGlzXShhdXRvJiYgcHVz
aFNlcnZpY2UpIG11dGFibGUgeworICAgICAgICBzZXRQdXNoU2VydmljZShXVEZNb3ZlKHB1c2hT
ZXJ2aWNlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgRGFlbW9uOjpzZXRQdXNoU2VydmljZShzdGQ6
OnVuaXF1ZV9wdHI8UHVzaFNlcnZpY2U+JiYgcHVzaFNlcnZpY2UpCit7CisgICAgbV9wdXNoU2Vy
dmljZSA9IFdURk1vdmUocHVzaFNlcnZpY2UpOworICAgIG1fcHVzaFNlcnZpY2VTdGFydGVkID0g
dHJ1ZTsKKworICAgIGlmICghbV9wZW5kaW5nUHVzaFNlcnZpY2VGdW5jdGlvbnMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXb3JrUXVldWU6Om1haW4oKS5kaXNwYXRjaChbdGhpc10o
KSB7CisgICAgICAgIHdoaWxlIChtX3BlbmRpbmdQdXNoU2VydmljZUZ1bmN0aW9ucy5zaXplKCkp
IHsKKyAgICAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBtX3BlbmRpbmdQdXNoU2VydmljZUZ1bmN0
aW9ucy50YWtlRmlyc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAgIH0KKyAg
ICB9KTsKK30KKwordm9pZCBEYWVtb246OnJ1bkFmdGVyU3RhcnRpbmdQdXNoU2VydmljZShGdW5j
dGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCit7CisgICAgaWYgKCFtX3B1c2hTZXJ2aWNlU3RhcnRl
ZCkgeworICAgICAgICBtX3BlbmRpbmdQdXNoU2VydmljZUZ1bmN0aW9ucy5hcHBlbmQoV1RGTW92
ZShmdW5jdGlvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZ1bmN0aW9uKCk7Cit9
CisKIHZvaWQgRGFlbW9uOjpicm9hZGNhc3REZWJ1Z01lc3NhZ2UoSlNDOjpNZXNzYWdlTGV2ZWwg
bWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9u
YXJ5ID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0
ciwgMCkpOwpAQCAtMzI1LDYgKzM4Myw5IEBAIHZvaWQgRGFlbW9uOjpkZWNvZGVBbmRIYW5kbGVN
ZXNzYWdlKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgTWVzc2FnZVR5cGUgbWVzCiAgICAg
Y2FzZSBNZXNzYWdlVHlwZTo6SW5qZWN0UHVzaE1lc3NhZ2VGb3JUZXN0aW5nOgogICAgICAgICBo
YW5kbGVXZWJQdXNoRE1lc3NhZ2VXaXRoUmVwbHk8TWVzc2FnZUluZm86OmluamVjdFB1c2hNZXNz
YWdlRm9yVGVzdGluZz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUo
cmVwbHlTZW5kZXIpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZXNzYWdlVHlwZTo6SW5q
ZWN0RW5jcnlwdGVkUHVzaE1lc3NhZ2VGb3JUZXN0aW5nOgorICAgICAgICBoYW5kbGVXZWJQdXNo
RE1lc3NhZ2VXaXRoUmVwbHk8TWVzc2FnZUluZm86OmluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdl
Rm9yVGVzdGluZz4oY2xpZW50Q29ubmVjdGlvbiwgZW5jb2RlZE1lc3NhZ2UsIFdURk1vdmUocmVw
bHlTZW5kZXIpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6R2V0UGVu
ZGluZ1B1c2hNZXNzYWdlczoKICAgICAgICAgaGFuZGxlV2ViUHVzaERNZXNzYWdlV2l0aFJlcGx5
PE1lc3NhZ2VJbmZvOjpnZXRQZW5kaW5nUHVzaE1lc3NhZ2VzPihjbGllbnRDb25uZWN0aW9uLCBl
bmNvZGVkTWVzc2FnZSwgV1RGTW92ZShyZXBseVNlbmRlcikpOwogICAgICAgICBicmVhazsKQEAg
LTQzMSw2ICs0OTIsNDYgQEAgdm9pZCBEYWVtb246OmluamVjdFB1c2hNZXNzYWdlRm9yVGVzdGlu
ZyhDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBQdXMKICAgICByZXBseVNlbmRl
cih0cnVlKTsKIH0KIAordm9pZCBEYWVtb246OmluamVjdEVuY3J5cHRlZFB1c2hNZXNzYWdlRm9y
VGVzdGluZyhDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgcmVwbHlTZW5kZXIpCit7CisgICAg
aWYgKCFjb25uZWN0aW9uLT5ob3N0QXBwSGFzUHVzaEluamVjdEVudGl0bGVtZW50KCkpIHsKKyAg
ICAgICAgY29ubmVjdGlvbi0+YnJvYWRjYXN0RGVidWdNZXNzYWdlKCJBdHRlbXB0aW5nIHRvIGlu
amVjdCBhIHB1c2ggbWVzc2FnZSBmcm9tIGFuIHVuZW50aXRsZWQgcHJvY2VzcyIpOworICAgICAg
ICByZXBseVNlbmRlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBydW5B
ZnRlclN0YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIG1lc3NhZ2UgPSBtZXNzYWdlLCByZXBseVNl
bmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1f
cHVzaFNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJlcGx5U2VuZGVyKGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gYnl0ZXMgPSBtZXNzYWdlLnV0
ZjgoKTsKKyAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gZGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEg
YWxsb2NdIGluaXRXaXRoQnl0ZXM6Ynl0ZXMuZGF0YSgpIGxlbmd0aDogYnl0ZXMubGVuZ3RoKCld
KTsKKworICAgICAgICBpZCBvYmogPSBbTlNKU09OU2VyaWFsaXphdGlvbiBKU09OT2JqZWN0V2l0
aERhdGE6ZGF0YS5nZXQoKSBvcHRpb25zOjAgZXJyb3I6bnVsbHB0cl07CisgICAgICAgIGlmICgh
b2JqIHx8ICFbb2JqIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKSB7CisgICAg
ICAgICAgICByZXBseVNlbmRlcihmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgTlNMb2coQCJnb3Qgb2JqOiAlQCIsIG9iaik7CisKKyAgICAgICAgbV9wdXNo
U2VydmljZS0+ZGlkUmVjZWl2ZVB1c2hNZXNzYWdlKG9ialtAInRvcGljIl0sIG9ialtAInVzZXJJ
bmZvIl0sIFtyZXBseVNlbmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgcmVwbHlTZW5kZXIodHJ1ZSk7CisgICAgICAgIH0pOworICAgIH0pOworfQor
Cit2b2lkIERhZW1vbjo6aGFuZGxlSW5jb21pbmdQdXNoKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgV2ViS2l0OjpXZWJQdXNoTWVzc2FnZSYmIG1lc3NhZ2UpCit7CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3B1c2hNZXNzYWdlcy5lbnN1cmUoYnVuZGxlSWRlbnRpZmllciwgW10gewor
ICAgICAgICByZXR1cm4gVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+IHsgfTsKKyAgICB9
KTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChXVEZNb3ZlKG1lc3NhZ2Up
KTsKKworICAgIG5vdGlmeUNsaWVudFB1c2hNZXNzYWdlSXNBdmFpbGFibGUoYnVuZGxlSWRlbnRp
Zmllcik7Cit9CisKIHZvaWQgRGFlbW9uOjpub3RpZnlDbGllbnRQdXNoTWVzc2FnZUlzQXZhaWxh
YmxlKGNvbnN0IFN0cmluZyYgY2xpZW50Q29kZVNpZ25pbmdJZGVudGlmaWVyKQogewogI2lmIFBM
QVRGT1JNKE1BQykKQEAgLTQ2Miw2ICs1NjMsOSBAQCB2b2lkIERhZW1vbjo6Z2V0UGVuZGluZ1B1
c2hNZXNzYWdlcyhDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb21wbGV0aW9uSGFuZAog
CiAgICAgVmVjdG9yPFdlYktpdDo6V2ViUHVzaE1lc3NhZ2U+IHJlc3VsdE1lc3NhZ2VzOwogCisg
ICAgaWYgKGF1dG8gaXRlcmF0b3IgPSBtX3B1c2hNZXNzYWdlcy5maW5kKGhvc3RBcHBDb2RlU2ln
bmluZ0lkZW50aWZpZXIpOyBpdGVyYXRvciAhPSBtX3B1c2hNZXNzYWdlcy5lbmQoKSkKKyAgICAg
ICAgc3RkOjpzd2FwKHJlc3VsdE1lc3NhZ2VzLCBpdGVyYXRvci0+dmFsdWUpOworCiAgICAgYXV0
byBpdGVyYXRvciA9IG1fdGVzdGluZ1B1c2hNZXNzYWdlcy5maW5kKGhvc3RBcHBDb2RlU2lnbmlu
Z0lkZW50aWZpZXIpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX3Rlc3RpbmdQdXNoTWVzc2FnZXMu
ZW5kKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBtZXNzYWdlIDogaXRlcmF0b3ItPnZhbHVlKSB7
CkBAIC00NzYsMjUgKzU4MCw1MCBAQCB2b2lkIERhZW1vbjo6Z2V0UGVuZGluZ1B1c2hNZXNzYWdl
cyhDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb21wbGV0aW9uSGFuZAogICAgIHJlcGx5
U2VuZGVyKFdURk1vdmUocmVzdWx0TWVzc2FnZXMpKTsKIH0KIAotdm9pZCBEYWVtb246OnN1YnNj
cmliZVRvUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJM
JiBzY29wZVVSTCwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBhcHBsaWNhdGlvblNlcnZlcktleSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDxXZWJDb3JlOjpQdXNoU3Vic2Ny
aXB0aW9uRGF0YSwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKK3Zv
aWQgRGFlbW9uOjpzdWJzY3JpYmVUb1B1c2hTZXJ2aWNlKENsaWVudENvbm5lY3Rpb24qIGNvbm5l
Y3Rpb24sIGNvbnN0IFVSTCYgc2NvcGVVUkwsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFwaWRQ
dWJsaWNLZXksIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8V2ViQ29yZTo6
UHVzaFN1YnNjcmlwdGlvbkRhdGEsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlT
ZW5kZXIpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKGFwcGxpY2F0aW9uU2VydmVyS2V5KTsKLSAgICBy
ZXBseVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29y
ZTo6Tm90QWxsb3dlZEVycm9yLCAiTGFjayBwZXJtaXNzaW9uIl9zIH0pKTsKKyAgICBydW5BZnRl
clN0YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIGJ1bmRsZUlkZW50aWZpZXIgPSBjb25uZWN0aW9u
LT5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCksIHNjb3BlID0gc2NvcGVVUkwuc3RyaW5n
KCksIHZhcGlkUHVibGljS2V5LCByZXBseVNlbmRlciA9IFdURk1vdmUocmVwbHlTZW5kZXIpXSgp
IG11dGFibGUgeworICAgICAgICBpZiAoIW1fcHVzaFNlcnZpY2UpIHsKKyAgICAgICAgICAgIHJl
cGx5U2VuZGVyKG1ha2VVbmV4cGVjdGVkKFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGEgeyBXZWJDb3Jl
OjpJbnZhbGlkU3RhdGVFcnJvciwgIlB1c2ggc2VydmljZSBpbml0aWFsaXphdGlvbiBmYWlsZWQi
X3MgfSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9wdXNo
U2VydmljZS0+c3Vic2NyaWJlKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCB2YXBpZFB1YmxpY0tl
eSwgV1RGTW92ZShyZXBseVNlbmRlcikpOworICAgIH0pOwogfQogCi12b2lkIERhZW1vbjo6dW5z
dWJzY3JpYmVGcm9tUHVzaFNlcnZpY2UoQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29u
c3QgVVJMJiBzY29wZVVSTCwgV2ViQ29yZTo6UHVzaFN1YnNjcmlwdGlvbklkZW50aWZpZXIgcHVz
aFN1YnNjcmlwdGlvbklkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhw
ZWN0ZWQ8Ym9vbCwgV2ViQ29yZTo6RXhjZXB0aW9uRGF0YT4mKT4mJiByZXBseVNlbmRlcikKK3Zv
aWQgRGFlbW9uOjp1bnN1YnNjcmliZUZyb21QdXNoU2VydmljZShDbGllbnRDb25uZWN0aW9uKiBj
b25uZWN0aW9uLCBjb25zdCBVUkwmIHNjb3BlVVJMLCBXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9u
SWRlbnRpZmllciBzdWJzY3JpcHRpb25JZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IEV4cGVjdGVkPGJvb2wsIFdlYkNvcmU6OkV4Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlT
ZW5kZXIpCiB7Ci0gICAgcmVwbHlTZW5kZXIoZmFsc2UpOworICAgIHJ1bkFmdGVyU3RhcnRpbmdQ
dXNoU2VydmljZShbdGhpcywgYnVuZGxlSWRlbnRpZmllciA9IGNvbm5lY3Rpb24tPmhvc3RBcHBD
b2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgc2NvcGUgPSBzY29wZVVSTC5zdHJpbmcoKSwgc3Vic2Ny
aXB0aW9uSWRlbnRpZmllciwgcmVwbHlTZW5kZXIgPSBXVEZNb3ZlKHJlcGx5U2VuZGVyKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3B1c2hTZXJ2aWNlKSB7CisgICAgICAgICAgICByZXBs
eVNlbmRlcihtYWtlVW5leHBlY3RlZChXZWJDb3JlOjpFeGNlcHRpb25EYXRhIHsgV2ViQ29yZTo6
SW52YWxpZFN0YXRlRXJyb3IsICJQdXNoIHNlcnZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIl9z
IH0pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fcHVzaFNl
cnZpY2UtPnVuc3Vic2NyaWJlKGJ1bmRsZUlkZW50aWZpZXIsIHNjb3BlLCBzdWJzY3JpcHRpb25J
ZGVudGlmaWVyLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisgICAgfSk7CiB9CiAKIHZvaWQgRGFl
bW9uOjpnZXRQdXNoU3Vic2NyaXB0aW9uKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNv
bnN0IFVSTCYgc2NvcGVVUkwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRXhwZWN0ZWQ8
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4sIFdlYkNvcmU6OkV4
Y2VwdGlvbkRhdGE+Jik+JiYgcmVwbHlTZW5kZXIpCiB7Ci0gICAgcmVwbHlTZW5kZXIoc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpQdXNoU3Vic2NyaXB0aW9uRGF0YT4geyB9KTsKKyAgICBydW5BZnRl
clN0YXJ0aW5nUHVzaFNlcnZpY2UoW3RoaXMsIGJ1bmRsZUlkZW50aWZpZXIgPSBjb25uZWN0aW9u
LT5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCksIHNjb3BlID0gc2NvcGVVUkwuc3RyaW5n
KCksIHJlcGx5U2VuZGVyID0gV1RGTW92ZShyZXBseVNlbmRlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgIGlmICghbV9wdXNoU2VydmljZSkgeworICAgICAgICAgICAgcmVwbHlTZW5kZXIobWFrZVVu
ZXhwZWN0ZWQoV2ViQ29yZTo6RXhjZXB0aW9uRGF0YSB7IFdlYkNvcmU6OkludmFsaWRTdGF0ZUVy
cm9yLCAiUHVzaCBzZXJ2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCJfcyB9KSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3B1c2hTZXJ2aWNlLT5nZXRTdWJz
Y3JpcHRpb24oYnVuZGxlSWRlbnRpZmllciwgc2NvcGUsIFdURk1vdmUocmVwbHlTZW5kZXIpKTsK
KyAgICB9KTsKIH0KIAogdm9pZCBEYWVtb246OmdldFB1c2hQZXJtaXNzaW9uU3RhdGUoQ2xpZW50
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3QgVVJMJiBzY29wZVVSTCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChjb25zdCBFeHBlY3RlZDx1aW50OF90LCBXZWJDb3JlOjpFeGNlcHRpb25EYXRh
PiYpPiYmIHJlcGx5U2VuZGVyKQogeworICAgIC8vIEZJWE1FCisjaWYgSEFWRShBUFBMRV9QVVNI
X1NFUlZJQ0VfVVJMX1RPS0VOX1NVUFBPUlQpCisgICAgcmVwbHlTZW5kZXIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oV2ViQ29yZTo6UHVzaFBlcm1pc3Npb25TdGF0ZTo6R3JhbnRlZCkpOworI2Vsc2UK
ICAgICByZXBseVNlbmRlcihzdGF0aWNfY2FzdDx1aW50OF90PihXZWJDb3JlOjpQdXNoUGVybWlz
c2lvblN0YXRlOjpEZW5pZWQpKTsKKyNlbmRpZgogfQogCiBDbGllbnRDb25uZWN0aW9uKiBEYWVt
b246OnRvQ2xpZW50Q29ubmVjdGlvbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmggYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLmgKaW5kZXggYmJlYjk2OGRlN2E3
NTlkZGYyNzZmYzFiYTY3ZDI4YjY2NmE0ODY0MC4uZDNjMTdlNjVkYTNhZWM1MjQ0YWI5MTYxM2Jh
YzNjZjZlOWVhYTI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNo
RGFlbW9uTWFpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbk1h
aW4uaApAQCAtMjcsNiArMjcsNiBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotaW50IFdlYlB1
c2hEYWVtb25NYWluKGludCwgY29uc3QgY2hhcioqKTsKK2ludCBXZWJQdXNoRGFlbW9uTWFpbihp
bnQsIGNoYXIqKik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2Vi
cHVzaGQvV2ViUHVzaERhZW1vbk1haW4ubW0KaW5kZXggMmE2OGUxOGZhMjAxNTA2NjIwZDFjMzgx
NzQ0MTFlYjBhYTJiZGM1OS4uODkyOGQ4ZmM5NDBmYWVmODFhODM0ZTMwOTQ1YzM1NjA3MzI3YWFj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uTWFpbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb25NYWluLm1tCkBAIC0z
MCwyNCArMzAsMjEgQEAKICNpbXBvcnQgIkRhZW1vbkRlY29kZXIuaCIKICNpbXBvcnQgIkRhZW1v
bkVuY29kZXIuaCIKICNpbXBvcnQgIkRhZW1vblV0aWxpdGllcy5oIgorI2ltcG9ydCAiTG9nSW5p
dGlhbGl6YXRpb24uaCIKICNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKICNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2dJbml0aWFsaXphdGlvbi5o
PgorI2ltcG9ydCA8Z2V0b3B0Lmg+CisjaW1wb3J0IDx3dGYvTG9nSW5pdGlhbGl6YXRpb24uaD4K
ICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9YUENT
UEkuaD4KIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxzZXJ2ZXJzL2Jv
b3RzdHJhcC5oPgotI2Vsc2UKLSNpbXBvcnQgPG1hY2gvc3RkX3R5cGVzLmg+Ci1leHRlcm4gIkMi
IHsKLWV4dGVybiBrZXJuX3JldHVybl90IGJvb3RzdHJhcF9jaGVja19pbihtYWNoX3BvcnRfdCBi
b290c3RyYXBQb3J0LCBjb25zdCBjaGFyICpzZXJ2aWNlTmFtZSwgbWFjaF9wb3J0X3QqKTsKLX0K
LSNlbmRpZgotCiB1c2luZyBXZWJLaXQ6OkRhZW1vbjo6RW5jb2RlZE1lc3NhZ2U7CiB1c2luZyBX
ZWJQdXNoRDo6RGFlbW9uOwogCi1zdGF0aWMgY29uc3QgY2hhciAqaW5jb21pbmdQdXNoU2Vydmlj
ZU5hbWUgPSAiY29tLmFwcGxlLmFwcy53ZWJraXQud2VicHVzaGQuaW5jb21pbmctcHVzaCI7Citz
dGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGVudGl0bGVtZW50TmFtZSA9ICJjb20uYXBwbGUucHJp
dmF0ZS53ZWJraXQud2VicHVzaCJfczsKK3N0YXRpYyBjb25zdCBBU0NJSUxpdGVyYWwgZGVmYXVs
dE1hY2hTZXJ2aWNlTmFtZSA9ICJjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnNlcnZpY2UiX3M7
CitzdGF0aWMgY29uc3QgQVNDSUlMaXRlcmFsIGRlZmF1bHRJbmNvbWluZ1B1c2hTZXJ2aWNlTmFt
ZSA9ICJjb20uYXBwbGUuYXBzLndlYmtpdC53ZWJwdXNoZC5pbmNvbWluZy1wdXNoIl9zOwogCiBu
YW1lc3BhY2UgV2ViUHVzaEQgewogCkBAIC03NCwyMyArNzEsNTUgQEAgdXNpbmcgV2ViUHVzaEQ6
OmNvbm5lY3Rpb25SZW1vdmVkOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotaW50IFdlYlB1c2hE
YWVtb25NYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKK2ludCBXZWJQdXNoRGFlbW9u
TWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgaWYgKGFyZ2MgIT0gMyB8fCBzdHJj
bXAoYXJndlsxXSwgIi0tbWFjaFNlcnZpY2VOYW1lIikpIHsKLSAgICAgICAgTlNMb2coQCJ1c2Fn
ZTogd2VicHVzaGQgLS1tYWNoU2VydmljZU5hbWUgPG5hbWU+Iik7Ci0gICAgICAgIHJldHVybiAt
MTsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogbWFjaFNlcnZpY2VOYW1lID0gYXJndlsyXTsKLQog
ICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBXZWJLaXQ6OnN0YXJ0TGlzdGVuaW5nRm9y
TWFjaFNlcnZpY2VDb25uZWN0aW9ucyhtYWNoU2VydmljZU5hbWUsICJjb20uYXBwbGUucHJpdmF0
ZS53ZWJraXQud2VicHVzaCIsIGNvbm5lY3Rpb25BZGRlZCwgY29ubmVjdGlvblJlbW92ZWQsIGNv
bm5lY3Rpb25FdmVudEhhbmRsZXIpOwotCi0gICAgICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIG9u
Y2Ugd2UgYWN0dWFsbHkgc3RhcnQgdXNpbmcgQVBTQ29ubmVjdGlvbi4KLSAgICAgICAgbWFjaF9w
b3J0X3QgaW5jb21pbmdNZXNzYWdlUG9ydDsKLSAgICAgICAgaWYgKGJvb3RzdHJhcF9jaGVja19p
bihib290c3RyYXBfcG9ydCwgaW5jb21pbmdQdXNoU2VydmljZU5hbWUsICZpbmNvbWluZ01lc3Nh
Z2VQb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCi0gICAgICAgICAgICBOU0xvZyhAIkNvdWxkbid0IHJl
Z2lzdGVyIGZvciBpbmNvbWluZyBwdXNoIGxhdW5jaCBwb3J0LiIpOwotICAgICAgICAKICAgICAg
ICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOworCisjaWYgIUxPR19ESVNBQkxFRCB8fCAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgV1RGOjpsb2dDaGFubmVscygpLmluaXRpYWxp
emVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIFdlYkNvcmU6OmxvZ0NoYW5uZWxz
KCkuaW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgV2ViS2l0Ojps
b2dDaGFubmVscygpLmluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KCk7CisjZW5kaWYg
Ly8gIUxPR19ESVNBQkxFRCB8fCAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKworICAgICAgICBzdGF0
aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgICAgICAgICB7ICJtYWNoU2Vydmlj
ZU5hbWUiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ20nIH0sCisgICAgICAgICAgICB7ICJpbmNv
bWluZ1B1c2hTZXJ2aWNlTmFtZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAncCcgfSwKKyAgICAg
ICAgICAgIHsgInVzZU1vY2tQdXNoU2VydmljZSIsIG5vX2FyZ3VtZW50LCAwLCAnZicgfQorICAg
ICAgICB9OworCisgICAgICAgIGNvbnN0IGNoYXIqIG1hY2hTZXJ2aWNlTmFtZSA9IGRlZmF1bHRN
YWNoU2VydmljZU5hbWU7CisgICAgICAgIGNvbnN0IGNoYXIqIGluY29taW5nUHVzaFNlcnZpY2VO
YW1lID0gZGVmYXVsdEluY29taW5nUHVzaFNlcnZpY2VOYW1lOworICAgICAgICBib29sIHVzZU1v
Y2tQdXNoU2VydmljZSA9IGZhbHNlOworCisgICAgICAgIGludCBjOworICAgICAgICBpbnQgb3B0
aW9uSW5kZXg7CisgICAgICAgIHdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIi
LCBvcHRpb25zLCAmb3B0aW9uSW5kZXgpKSAhPSAtMSkgeworICAgICAgICAgICAgc3dpdGNoIChj
KSB7CisgICAgICAgICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgICAgICBtYWNoU2VydmljZU5h
bWUgPSBvcHRhcmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdw
JzoKKyAgICAgICAgICAgICAgICBpbmNvbWluZ1B1c2hTZXJ2aWNlTmFtZSA9IG9wdGFyZzsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAg
ICAgIHVzZU1vY2tQdXNoU2VydmljZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5r
bm93biBvcHRpb246ICVjXG4iLCBvcHRvcHQpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBXZWJLaXQ6OnN0YXJ0TGlzdGVuaW5n
Rm9yTWFjaFNlcnZpY2VDb25uZWN0aW9ucyhtYWNoU2VydmljZU5hbWUsIGVudGl0bGVtZW50TmFt
ZSwgY29ubmVjdGlvbkFkZGVkLCBjb25uZWN0aW9uUmVtb3ZlZCwgY29ubmVjdGlvbkV2ZW50SGFu
ZGxlcik7CisKKyAgICAgICAgaWYgKHVzZU1vY2tQdXNoU2VydmljZSkKKyAgICAgICAgICAgIDo6
V2ViUHVzaEQ6OkRhZW1vbjo6c2luZ2xldG9uKCkuc3RhcnRNb2NrUHVzaFNlcnZpY2UoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgbGlicmFyeVBhdGggPSBOU1NlYXJjaFBh
dGhGb3JEaXJlY3Rvcmllc0luRG9tYWlucyhOU0xpYnJhcnlEaXJlY3RvcnksIE5TVXNlckRvbWFp
bk1hc2ssIFlFUylbMF07CisgICAgICAgICAgICBTdHJpbmcgcHVzaERhdGFiYXNlUGF0aCA9IEZp
bGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHMobGlicmFyeVBhdGgsIHsgIldlYktp
dCIsICJXZWJQdXNoIiwgIlB1c2hEYXRhYmFzZS5kYiIgfSk7CisgICAgICAgICAgICA6OldlYlB1
c2hEOjpEYWVtb246OnNpbmdsZXRvbigpLnN0YXJ0UHVzaFNlcnZpY2UoaW5jb21pbmdQdXNoU2Vy
dmljZU5hbWUsIHB1c2hEYXRhYmFzZVBhdGgpOworICAgICAgICB9CiAgICAgfQogICAgIENGUnVu
TG9vcFJ1bigpOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9jb20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdCBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QKaW5kZXggZjcxZTU5
YTQwN2YzZTNhODkwODAwYWUzZjQxZTA4NTVlNTBhN2IyYS4uYjI1YWJmZjVhOGU0YmRiOGYxOTJi
OWYwNWU1ODQ3Mzk1ZDM0MTU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9j
b20uYXBwbGUud2Via2l0LndlYnB1c2hkLm1hYy5wbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL2NvbS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0CkBAIC0xOSw3ICsxOSw3
IEBACiAJPHN0cmluZz5BZGFwdGl2ZTwvc3RyaW5nPgogCTxrZXk+UHJvZ3JhbUFyZ3VtZW50czwv
a2V5PgogCTxhcnJheT4KLQkJPHN0cmluZz4vU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJL
aXQuZnJhbWV3b3JrL0RhZW1vbnMvd2VicHVzaGQ8L3N0cmluZz4KKwkJPHN0cmluZz4vU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRGFlbW9ucy93
ZWJwdXNoZDwvc3RyaW5nPgogCQk8c3RyaW5nPi0tbWFjaFNlcnZpY2VOYW1lPC9zdHJpbmc+CiAJ
CTxzdHJpbmc+Y29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5zZXJ2aWNlPC9zdHJpbmc+CiAJPC9h
cnJheT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvd2VicHVzaGQuY3BwIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKaW5kZXggZmQwNGU0MDQ1ODU5OGVj
ODczOWFjMGYzZTlhOGI4ZjNmYmNhMWViOC4uNTljZWYwZDk4NDMwNTU2NWFlYWQxOGMyMTIyYWQz
ZGZmZTE1OTYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC93ZWJwdXNoZC5jcHAKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tNYWluLmg+CiAjaW5jbHVkZSA8b3MvYXZhaWxhYmls
aXR5Lmg+CiAKLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiogYXJndikKK2ludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICBXS1dlYlB1c2hEYWVtb25NYWluKGFyZ2Ms
IGFyZ3YpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDk1OWFjNjUxOTk5YzkyNDIwOWY5ZjdhMWM5NjdjZTY0NmZiN2RmMmEuLjUzNDBmM2Nk
YWYxYWI0YTk4YzM2ZDlmZWYzMzQ5ODU3YjVmZWYwOGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMi0wMS0yOCAg
QmVuIE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgUHVzaFNlcnZpY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTg1NworCisg
ICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4KKworICAgICAgICAgLSBNb2RpZmVkIHRo
ZSBleGlzdGluZyBpbmplY3RlZCBwdXNoIHRlc3QgdG8gaW5qZWN0IGRpZmZlcmVudCB0eXBlcyBv
ZiByZWFsIHB1c2ggb2JqZWN0cworICAgICAgICAgICBmcm9tIEFQUyAoYW4gZW1wdHkgcHVzaCwg
YW4gYWVzZ2NtLWVuY3J5cHRlZCBwdXNoLCBhbmQgYW4gYWVzMTI4Z2NtLWVuY3J5cHRlZCBwdXNo
KS4KKyAgICAgICAgIC0gQWRkIGEgZmV3IGJhc2ljIHRlc3QgY2FzZXMgZm9yIHN1YnNjcmliaW5n
IGFuZCB1bnN1YnNjcmliaW5nIGZyb20gcHVzaC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKC1bTm90aWZpY2F0
aW9uU2NyaXB0TWVzc2FnZUhhbmRsZXIgc2V0TWVzc2FnZUhhbmRsZXI6XSk6CisgICAgICAgICgt
W05vdGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyIHVzZXJDb250ZW50Q29udHJvbGxlcjpk
aWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RX
ZWJQdXNoRGFlbW9uUExpc3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y3JlYXRlTWVzc2Fn
ZURpY3Rpb25hcnkpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2VuZE1lc3NhZ2VUb0RhZW1v
bik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpzZW5kTWVzc2FnZVRvRGFlbW9uV2FpdGluZ0Zv
clJlcGx5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnNlbmRDb25maWd1cmF0aW9uV2l0aEF1
ZGl0VG9rZW4pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpmdW5jdGlvbik6IERlbGV0ZWQuCisKIDIwMjItMDItMDUgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBUaHJlYWQgc3VzcGVuZCBhbmQgcmVz
dW1lIHNob3VsZCB0YWtlIGEgZ2xvYmFsIGxvY2sgdG8gYXZvaWQgZGVhZGxvY2sKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5t
bQppbmRleCA2ZDkyY2U5Nzg2YWY4MWM3ODRiMTI0NDQxOWU2ZGU2MjgwM2NlODIwLi5iN2IzNGI2
Y2FhNTQ3YmUzMmEzNzYyOGNjZjFhY2RlZWM2ZjVkNjU5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCkBAIC0zNSwx
MyArMzUsMTggQEAKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViUHVzaERhZW1vbkNv
bnN0YW50cy5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0V4cGVyaW1lbnRhbEZlYXR1cmUuaD4KICNp
bXBvcnQgPFdlYktpdC9fV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbi5oPgogI2ltcG9y
dCA8bWFjaC9tYWNoX2luaXQuaD4KICNpbXBvcnQgPG1hY2gvdGFzay5oPgorI2ltcG9ydCA8d3Rm
L0Jsb2NrUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykgfHwgUExBVEZPUk0oSU9TKQogCit1c2luZyBXZWJLaXQ6OldlYlB1c2hEOjpNZXNzYWdl
VHlwZTsKKwogc3RhdGljIGJvb2wgYWxlcnRSZWNlaXZlZCA9IGZhbHNlOwogQGludGVyZmFjZSBO
b3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdhdGUgOiBOU09iamVjdDxXS1VJRGVsZWdhdGVQcml2
YXRlPgogQGVuZApAQCAtNjEsNiArNjYsMjYgQEAgc3RhdGljIGJvb2wgYWxlcnRSZWNlaXZlZCA9
IGZhbHNlOwogCiBAZW5kCiAKK0BpbnRlcmZhY2UgTm90aWZpY2F0aW9uU2NyaXB0TWVzc2FnZUhh
bmRsZXIgOiBOU09iamVjdDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPiB7CisgICAgQmxvY2tQdHI8
dm9pZChpZCk+IF9tZXNzYWdlSGFuZGxlcjsKK30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5v
dGlmaWNhdGlvblNjcmlwdE1lc3NhZ2VIYW5kbGVyCisKKy0gKHZvaWQpc2V0TWVzc2FnZUhhbmRs
ZXI6KHZvaWQgKF4pKGlkKSloYW5kbGVyCit7CisgICAgX21lc3NhZ2VIYW5kbGVyID0gaGFuZGxl
cjsKK30KKworLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250
cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihX
S1NjcmlwdE1lc3NhZ2UgKiltZXNzYWdlCit7CisgICAgaWYgKF9tZXNzYWdlSGFuZGxlcikKKyAg
ICAgICAgX21lc3NhZ2VIYW5kbGVyKG1lc3NhZ2UuYm9keSk7Cit9CisKK0BlbmQKKwogbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgewogCiBzdGF0aWMgUmV0YWluUHRyPE5TVVJMPiB0ZXN0V2ViUHVz
aERhZW1vbkxvY2F0aW9uKCkKQEAgLTc5LDcgKzEwNCw4IEBAIHN0YXRpYyBOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgaWQ+ICp0ZXN0V2ViUHVzaERhZW1vblBMaXN0KE5TVVJMICpzdG9yYWdlTG9j
YXRpCiAgICAgICAgIEAiUHJvZ3JhbUFyZ3VtZW50cyIgOiBAWwogICAgICAgICAgICAgdGVzdFdl
YlB1c2hEYWVtb25Mb2NhdGlvbigpLmdldCgpLnBhdGgsCiAgICAgICAgICAgICBAIi0tbWFjaFNl
cnZpY2VOYW1lIiwKLSAgICAgICAgICAgIEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5z
ZXJ2aWNlIgorICAgICAgICAgICAgQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZp
Y2UiLAorICAgICAgICAgICAgQCItLXVzZU1vY2tQdXNoU2VydmljZSIKICAgICAgICAgXQogICAg
IH07CiB9CkBAIC0xMzUsMjQgKzE2MSwyNCBAQCBzdGF0aWMgdm9pZCBjbGVhblVwVGVzdFdlYlB1
c2hEKE5TVVJMICp0ZW1wRGlyKQogICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKIH0KIAotc3RhdGlj
IFJldGFpblB0cjx4cGNfb2JqZWN0X3Q+IGNyZWF0ZU1lc3NhZ2VEaWN0aW9uYXJ5KHVpbnQ4X3Qg
bWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVzc2FnZSkKK3N0YXRpYyBSZXRh
aW5QdHI8eHBjX29iamVjdF90PiBjcmVhdGVNZXNzYWdlRGljdGlvbmFyeShNZXNzYWdlVHlwZSBt
ZXNzYWdlVHlwZSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtZXNzYWdlKQogewogICAgIGF1dG8g
ZGljdGlvbmFyeSA9IGFkb3B0TlMoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxw
dHIsIDApKTsKICAgICB4cGNfZGljdGlvbmFyeV9zZXRfdWludDY0KGRpY3Rpb25hcnkuZ2V0KCks
ICJwcm90b2NvbCB2ZXJzaW9uIiwgMSk7Ci0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X3VpbnQ2NChk
aWN0aW9uYXJ5LmdldCgpLCAibWVzc2FnZSB0eXBlIiwgbWVzc2FnZVR5cGUpOworICAgIHhwY19k
aWN0aW9uYXJ5X3NldF91aW50NjQoZGljdGlvbmFyeS5nZXQoKSwgIm1lc3NhZ2UgdHlwZSIsIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihtZXNzYWdlVHlwZSkpOwogICAgIHhwY19kaWN0aW9uYXJ5X3Nl
dF9kYXRhKGRpY3Rpb25hcnkuZ2V0KCksICJlbmNvZGVkIG1lc3NhZ2UiLCBtZXNzYWdlLmRhdGEo
KSwgbWVzc2FnZS5zaXplKCkpOwogICAgIHJldHVybiBXVEZNb3ZlKGRpY3Rpb25hcnkpOwogfQog
CiAvLyBVc2VzIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gdG8gdGhlIGRhZW1vbiBmb3IgYSBvbmUt
b2ZmIG1lc3NhZ2UKLXZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbih4cGNfY29ubmVjdGlvbl90IGNv
bm5lY3Rpb24sIHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbWVz
c2FnZSkKK3ZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbih4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rp
b24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3Nh
Z2UpCiB7CiAgICAgYXV0byBkaWN0aW9uYXJ5ID0gY3JlYXRlTWVzc2FnZURpY3Rpb25hcnkobWVz
c2FnZVR5cGUsIG1lc3NhZ2UpOwogICAgIHhwY19jb25uZWN0aW9uX3NlbmRfbWVzc2FnZShjb25u
ZWN0aW9uLCBkaWN0aW9uYXJ5LmdldCgpKTsKIH0KIAogLy8gVXNlcyBhbiBleGlzdGluZyBjb25u
ZWN0aW9uIHRvIHRoZSBkYWVtb24gZm9yIGEgb25lLW9mZiBtZXNzYWdlLCB3YWl0aW5nIGZvciB0
aGUgcmVwbHkKLXZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh4cGNfY29u
bmVjdGlvbl90IGNvbm5lY3Rpb24sIHVpbnQ4X3QgbWVzc2FnZVR5cGUsIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgbWVzc2FnZSkKK3ZvaWQgc2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBs
eSh4cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlLCBj
b25zdCBWZWN0b3I8dWludDhfdD4mIG1lc3NhZ2UpCiB7CiAgICAgYXV0byBkaWN0aW9uYXJ5ID0g
Y3JlYXRlTWVzc2FnZURpY3Rpb25hcnkobWVzc2FnZVR5cGUsIG1lc3NhZ2UpOwogCkBAIC0xODEs
NyArMjA3LDcgQEAgc3RhdGljIHZvaWQgc2VuZENvbmZpZ3VyYXRpb25XaXRoQXVkaXRUb2tlbih4
cGNfY29ubmVjdGlvbl90IGNvbm5lY3Rpb24pCiAgICAgICAgIGVuY29kZWRNZXNzYWdlWzFdID0g
MTsKICAgICAgICAgZW5jb2RlZE1lc3NhZ2VbMl0gPSAzMjsKICAgICAgICAgbWVtY3B5KCZlbmNv
ZGVkTWVzc2FnZVsxMF0sICZ0b2tlbiwgc2l6ZW9mKHRva2VuKSk7Ci0gICAgICAgIHNlbmRNZXNz
YWdlVG9EYWVtb24oY29ubmVjdGlvbiwgNiwgZW5jb2RlZE1lc3NhZ2UpOworICAgICAgICBzZW5k
TWVzc2FnZVRvRGFlbW9uKGNvbm5lY3Rpb24sIE1lc3NhZ2VUeXBlOjpVcGRhdGVDb25uZWN0aW9u
Q29uZmlndXJhdGlvbiwgZW5jb2RlZE1lc3NhZ2UpOwogICAgIH0KIH0KIApAQCAtMjUyLDcgKzI3
OCw3IEBAIFRFU1QoV2ViUHVzaEQsIEJhc2ljQ29tbXVuaWNhdGlvbikKICAgICAgICAgYXV0byBk
aWN0aW9uYXJ5ID0gYWRvcHROUyh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0
ciwgMCkpOwogICAgICAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZE1lc3NhZ2UoMSk7CiAgICAg
ICAgIGVuY29kZWRNZXNzYWdlWzBdID0gMTsKLSAgICAgICAgc2VuZE1lc3NhZ2VUb0RhZW1vbihj
b25uZWN0aW9uLmdldCgpLCA1LCBlbmNvZGVkTWVzc2FnZSk7CisgICAgICAgIHNlbmRNZXNzYWdl
VG9EYWVtb24oY29ubmVjdGlvbi5nZXQoKSwgTWVzc2FnZVR5cGU6OlNldERlYnVnTW9kZUlzRW5h
YmxlZCwgZW5jb2RlZE1lc3NhZ2UpOwogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOwogICAgIH0KIApAQCAtMzYxLDU0ICszODcsNiBAQCBURVNUKFdlYlB1c2hELCBQZXJt
aXNzaW9uTWFuYWdlbWVudCkKICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3Rvcnkp
OwogfQogCi1zdGF0aWMgY29uc3QgY2hhciogbWFpblNXQnl0ZXMgPSBSIlNXUkVTT1VSQ0UoCi08
c2NyaXB0PgotZnVuY3Rpb24gbG9nKG1zZykKLXsKLSAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VI
YW5kbGVycy5zdy5wb3N0TWVzc2FnZShtc2cpOwotfQotCi1jb25zdCBjaGFubmVsID0gbmV3IE1l
c3NhZ2VDaGFubmVsKCk7Ci1jaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IChldmVudCkgPT4gbG9n
KGV2ZW50LmRhdGEpOwotCi1uYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignL3N3Lmpz
JykudGhlbigocmVnaXN0cmF0aW9uKSA9PiB7Ci0gICAgaWYgKHJlZ2lzdHJhdGlvbi5hY3RpdmUp
IHsKLSAgICAgICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7cG9ydDogY2hhbm5l
bC5wb3J0Mn0sIFtjaGFubmVsLnBvcnQyXSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
d29ya2VyID0gcmVnaXN0cmF0aW9uLmluc3RhbGxpbmc7Ci0gICAgd29ya2VyLmFkZEV2ZW50TGlz
dGVuZXIoJ3N0YXRlY2hhbmdlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICh3b3JrZXIuc3Rh
dGUgPT0gJ2FjdGl2YXRlZCcpCi0gICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe3BvcnQ6
IGNoYW5uZWwucG9ydDJ9LCBbY2hhbm5lbC5wb3J0Ml0pOwotICAgIH0pOwotfSkuY2F0Y2goZnVu
Y3Rpb24oZXJyb3IpIHsKLSAgICBsb2coIlJlZ2lzdHJhdGlvbiBmYWlsZWQgd2l0aDogIiArIGVy
cm9yKTsKLX0pOwotPC9zY3JpcHQ+Ci0pU1dSRVNPVVJDRSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFy
KiBzY3JpcHRCeXRlcyA9IFIiU1dSRVNPVVJDRSgKLWxldCBwb3J0Owotc2VsZi5hZGRFdmVudExp
c3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7Ci0gICAgcG9ydCA9IGV2ZW50LmRhdGEucG9y
dDsKLSAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWFkeSIpOwotfSk7Ci1zZWxmLmFkZEV2ZW50TGlz
dGVuZXIoInB1c2giLCAoZXZlbnQpID0+IHsKLSAgICB0cnkgewotICAgICAgICBpZiAoIWV2ZW50
LmRhdGEpIHsKLSAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiBudWxsIGRh
dGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1
ZSA9IGV2ZW50LmRhdGEudGV4dCgpOwotICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZl
ZDogIiArIHZhbHVlKTsKLSAgICAgICAgaWYgKHZhbHVlICE9ICdTd2VldCBQb3RhdG9lcycpCi0g
ICAgICAgICAgICBldmVudC53YWl0VW50aWwoUHJvbWlzZS5yZWplY3QoJ0kgd2FudCBzd2VldCBw
b3RhdG9lcycpKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIHBvcnQucG9zdE1lc3NhZ2Uo
IkdvdCBleGNlcHRpb24gIiArIGUpOwotICAgIH0KLX0pOwotKVNXUkVTT1VSQ0UiOwotCiBzdGF0
aWMgdm9pZCBjbGVhcldlYnNpdGVEYXRhU3RvcmUoV0tXZWJzaXRlRGF0YVN0b3JlICpzdG9yZSkK
IHsKICAgICBfX2Jsb2NrIGJvb2wgY2xlYXJlZFN0b3JlID0gZmFsc2U7CkBAIC00MTgsNzYgKzM5
NiwzMTUgQEAgc3RhdGljIHZvaWQgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFT
dG9yZSAqc3RvcmUpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjbGVhcmVkU3RvcmUp
OwogfQogCi1URVNUKFdlYlB1c2hELCBIYW5kbGVJbmplY3RlZFB1c2gpCi17Ci0gICAgW1dLV2Vi
c2l0ZURhdGFTdG9yZSBfYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zXTsKK2Ns
YXNzIFdlYlB1c2hEVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworcHJvdGVjdGVkOgor
ICAgIFdlYlB1c2hEVGVzdCgpCisgICAgeworICAgICAgICBbV0tXZWJzaXRlRGF0YVN0b3JlIF9h
bGxvd1dlYnNpdGVEYXRhUmVjb3Jkc0ZvckFsbE9yaWdpbnNdOwogCi0gICAgTlNVUkwgKnRlbXBE
aXJlY3RvcnkgPSBzZXRVcFRlc3RXZWJQdXNoRCgpOworICAgICAgICBtX3RlbXBEaXJlY3Rvcnkg
PSByZXRhaW5QdHIoc2V0VXBUZXN0V2ViUHVzaEQoKSk7CiAKLSAgICBhdXRvIGRhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBu
ZXddKTsKLSAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLndlYlB1c2hNYWNoU2Vydmlj
ZU5hbWUgPSBAIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVtb24uc2VydmljZSI7Ci0gICAgZGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoRGFlbW9uVXNlc01vY2tCdW5kbGVzRm9y
VGVzdGluZyA9IFlFUzsKLSAgICBhdXRvIGRhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVE
YXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJh
dGlvbi5nZXQoKV0pOworICAgICAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKKyAgICAgICAgZGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFjaFNlcnZpY2VOYW1lID0gQCJvcmcu
d2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOworICAgICAgICBkYXRhU3RvcmVDb25m
aWd1cmF0aW9uLmdldCgpLndlYlB1c2hEYWVtb25Vc2VzTW9ja0J1bmRsZXNGb3JUZXN0aW5nID0g
WUVTOworICAgICAgICBtX2RhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUg
YWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQo
KV0pOwogCi0gICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLSAgICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgPSBkYXRhU3RvcmUuZ2V0KCk7Ci0gICAgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFtj
b25maWd1cmF0aW9uIHdlYnNpdGVEYXRhU3RvcmVdKTsKKyAgICAgICAgbV9jb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICAg
ICAgbV9jb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBtX2RhdGFTdG9yZS5n
ZXQoKTsKKyAgICAgICAgY2xlYXJXZWJzaXRlRGF0YVN0b3JlKFttX2NvbmZpZ3VyYXRpb24gd2Vi
c2l0ZURhdGFTdG9yZV0pOwogCi0gICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMg
X3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllFU107Ci0gICAgZm9yIChfV0tFeHBlcmltZW50YWxG
ZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZlcmVuY2VzIF9leHBlcmltZW50YWxGZWF0dXJlc10p
IHsKLSAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90
aWZpY2F0aW9uc0VuYWJsZWQiXSkKLSAgICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJl
bmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgICAgIFttX2Nv
bmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllF
U107CisgICAgICAgIGZvciAoX1dLRXhwZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQ
cmVmZXJlbmNlcyBfZXhwZXJpbWVudGFsRmVhdHVyZXNdKSB7CisgICAgICAgICAgICBpZiAoW2Zl
YXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1aWx0SW5Ob3RpZmljYXRpb25zRW5hYmxlZCJd
KQorICAgICAgICAgICAgICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5h
YmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtmZWF0
dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJQdXNoQVBJRW5hYmxlZCJdKQorICAgICAgICAgICAg
ICAgIFtbbV9jb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVh
dHVyZTpmZWF0dXJlXTsKKyAgICAgICAgfQorCisgICAgICAgIG1fdGVzdE1lc3NhZ2VIYW5kbGVy
ID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICBb
W21fY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VI
YW5kbGVyOm1fdGVzdE1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0Il07CisKKyAgICAg
ICAgbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tOb3RpZmljYXRpb25T
Y3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgICAgICBbW21fY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1fbm90
aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIuZ2V0KCkgbmFtZTpAIm5vdGUiXTsKICAgICB9CiAKLSAg
ICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RNZXNzYWdlSGFuZGxlciBhbGxv
Y10gaW5pdF0pOwotICAgIFtbY29uZmlndXJhdGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFk
ZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm1lc3NhZ2VIYW5kbGVyLmdldCgpIG5hbWU6QCJzdyJdOwot
ICAgIF9fYmxvY2sgYm9vbCBkb25lID0gZmFsc2U7Ci0gICAgW21lc3NhZ2VIYW5kbGVyIGFkZE1l
c3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRsZXI6XnsKLSAgICAgICAgZG9uZSA9IHRydWU7CisgICAg
dm9pZCBsb2FkUmVxdWVzdChjb25zdCBjaGFyKiBodG1sU291cmNlLCBjb25zdCBjaGFyKiBzZXJ2
aWNlV29ya2VyU2NyaXB0U291cmNlKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0YW50cyA9IFIiU1JDKAorICAgICAgICAgICAgY29uc3QgVkFMSURfU0VSVkVSX0tFWSA9
ICJCQTFIeHp5aTFSVU0xYjV3anhzbjduR3hBc3p3MnU2MW0xNjRpM01yQUl4SEY2WUs1aDRTRFlp
Yy1kUnVVX1JDUENmQTVhcTlvalN3azVZMkVtQ2xCUHMiOworICAgICAgICAgICAgY29uc3QgVkFM
SURfU0VSVkVSX0tFWV9USEFUX0NBVVNFU19JTkpFQ1RFRF9GQUlMVVJFID0gIkJFQXhhVU1vMXM4
dGpPUnhKZm5TU3ZXaFliNHU1MWtnMWhXVDJzXzlncFY3WnhhcjFwRl8yQlE4QW5jdUFkUzJCb0xo
TjRxYXh6QnkyQ3dIRThCQnpXZyI7CisgICAgICAgIClTUkMiOworICAgICAgICBtX3NlcnZlci5y
ZXNldChuZXcgVGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcih7CisgICAgICAgICAgICB7ICIvIiwg
eyBodG1sU291cmNlIH0gfSwKKyAgICAgICAgICAgIHsgIi9jb25zdGFudHMuanMiLCB7IHsgeyAi
Q29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgY29uc3RhbnRzIH0g
fSwKKyAgICAgICAgICAgIHsgIi9zdy5qcyIsIHsgeyB7ICJDb250ZW50LVR5cGUiLCAiYXBwbGlj
YXRpb24vamF2YXNjcmlwdCIgfSB9LCBzZXJ2aWNlV29ya2VyU2NyaXB0U291cmNlIH0gfQorICAg
ICAgICB9LCBUZXN0V2ViS2l0QVBJOjpIVFRQU2VydmVyOjpQcm90b2NvbDo6SHR0cCkpOworCisg
ICAgICAgIG1fd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjptX2NvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKKyAgICAgICAgW21fd2ViVmlldyBsb2FkUmVxdWVzdDptX3NlcnZlci0+cmVx
dWVzdCgpXTsKKyAgICB9CisKKyAgICB+V2ViUHVzaERUZXN0KCkKKyAgICB7CisgICAgICAgIGNs
ZWFuVXBUZXN0V2ViUHVzaEQobV90ZW1wRGlyZWN0b3J5LmdldCgpKTsKKyAgICB9CisKKyAgICBS
ZXRhaW5QdHI8TlNVUkw+IG1fdGVtcERpcmVjdG9yeTsKKyAgICBSZXRhaW5QdHI8V0tXZWJzaXRl
RGF0YVN0b3JlPiBtX2RhdGFTdG9yZTsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJh
dGlvbj4gbV9jb25maWd1cmF0aW9uOworICAgIFJldGFpblB0cjxUZXN0TWVzc2FnZUhhbmRsZXI+
IG1fdGVzdE1lc3NhZ2VIYW5kbGVyOworICAgIFJldGFpblB0cjxOb3RpZmljYXRpb25TY3JpcHRN
ZXNzYWdlSGFuZGxlcj4gbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlcjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGVzdFdlYktpdEFQSTo6SFRUUFNlcnZlcj4gbV9zZXJ2ZXI7CisgICAgUmV0YWlu
UHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OworfTsKKworY2xhc3MgV2ViUHVzaERJbmplY3RlZFB1
c2hUZXN0IDogcHVibGljIFdlYlB1c2hEVGVzdCB7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW5U
ZXN0KE5TU3RyaW5nICpleHBlY3RlZE1lc3NhZ2UsIE5TRGljdGlvbmFyeSAqcHVzaFVzZXJJbmZv
KTsKK307CisKK3ZvaWQgV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0OjpydW5UZXN0KE5TU3RyaW5n
ICpleHBlY3RlZE1lc3NhZ2UsIE5TRGljdGlvbmFyeSAqcHVzaFVzZXJJbmZvKQoreworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBodG1sU291cmNlID0gUiJTV1JFU09VUkNFKAorICAgIDxzY3JpcHQg
c3JjPSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIGZ1bmN0aW9u
IGxvZyhtc2cpCisgICAgeworICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50
ZXN0LnBvc3RNZXNzYWdlKG1zZyk7CisgICAgfQorCisgICAgY29uc3QgY2hhbm5lbCA9IG5ldyBN
ZXNzYWdlQ2hhbm5lbCgpOworICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gKGV2ZW50KSA9
PiBsb2coZXZlbnQuZGF0YSk7CisKKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3Rl
cignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlv
biA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAgICBsZXQgc3Vi
c2NyaXB0aW9uID0gYXdhaXQgcmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7Cisg
ICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICBhcHBsaWNhdGlv
blNlcnZlcktleTogVkFMSURfU0VSVkVSX0tFWQorICAgICAgICB9KTsKKyAgICAgICAgcmVnaXN0
cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7cG9ydDogY2hhbm5lbC5wb3J0Mn0sIFtjaGFubmVs
LnBvcnQyXSk7CisgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgbG9nKCJS
ZWdpc3RyYXRpb24gZmFpbGVkIHdpdGg6ICIgKyBlcnJvcik7CisgICAgfSk7CisgICAgPC9zY3Jp
cHQ+CisgICAgKVNXUkVTT1VSQ0UiOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlcnZpY2VX
b3JrZXJTb3VyY2UgPSBSIlNXUkVTT1VSQ0UoCisgICAgbGV0IHBvcnQ7CisgICAgc2VsZi5hZGRF
dmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7CisgICAgICAgIHBvcnQgPSBldmVu
dC5kYXRhLnBvcnQ7CisgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlYWR5Iik7CisgICAgfSk7
CisgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJwdXNoIiwgKGV2ZW50KSA9PiB7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICBpZiAoIWV2ZW50LmRhdGEpIHsKKyAgICAgICAgICAgICAgICBw
b3J0LnBvc3RNZXNzYWdlKCJSZWNlaXZlZDogbnVsbCBkYXRhIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC5k
YXRhLnRleHQoKTsKKyAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoIlJlY2VpdmVkOiAiICsg
dmFsdWUpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBwb3J0LnBvc3RNZXNz
YWdlKCJFcnJvcjogIiArIGUpOworICAgICAgICB9CisgICAgfSk7CisgICAgKVNXUkVTT1VSQ0Ui
OworCisgICAgX19ibG9jayBib29sIHJlYWR5ID0gZmFsc2U7CisgICAgW21fdGVzdE1lc3NhZ2VI
YW5kbGVyIGFkZE1lc3NhZ2U6QCJSZWFkeSIgd2l0aEhhbmRsZXI6XnsKKyAgICAgICAgcmVhZHkg
PSB0cnVlOwogICAgIH1dOwotICAgIFttZXNzYWdlSGFuZGxlciBhZGRNZXNzYWdlOkAiUmVjZWl2
ZWQ6IEhlbGxvIFdvcmxkIiB3aXRoSGFuZGxlcjpeewotICAgICAgICBkb25lID0gdHJ1ZTsKKwor
ICAgIF9fYmxvY2sgYm9vbCBnb3RFeHBlY3RlZE1lc3NhZ2UgPSBmYWxzZTsKKyAgICBbbV90ZXN0
TWVzc2FnZUhhbmRsZXIgYWRkTWVzc2FnZTpleHBlY3RlZE1lc3NhZ2Ugd2l0aEhhbmRsZXI6XnsK
KyAgICAgICAgZ290RXhwZWN0ZWRNZXNzYWdlID0gdHJ1ZTsKICAgICB9XTsKIAotICAgIFRlc3RX
ZWJLaXRBUEk6OkhUVFBTZXJ2ZXIgc2VydmVyKHsKLSAgICAgICAgeyAiLyIsIHsgbWFpblNXQnl0
ZXMgfSB9LAotICAgICAgICB7ICIvc3cuanMiLCB7IHsgeyAiQ29udGVudC1UeXBlIiwgImFwcGxp
Y2F0aW9uL2phdmFzY3JpcHQiIH0gfSwgc2NyaXB0Qnl0ZXMgfSB9Ci0gICAgfSwgVGVzdFdlYktp
dEFQSTo6SFRUUFNlcnZlcjo6UHJvdG9jb2w6Okh0dHApOworICAgIGxvYWRSZXF1ZXN0KGh0bWxT
b3VyY2UsIHNlcnZpY2VXb3JrZXJTb3VyY2UpOwogCi0gICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKLSAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpzZXJ2ZXIucmVxdWVzdCgpXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJnJlYWR5KTsKIAotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Ci0gICAg
ZG9uZSA9IGZhbHNlOworICAgIFN0cmluZyBidW5kbGVJZGVudGlmaWVyID0gImNvbS5hcHBsZS5X
ZWJLaXQuVGVzdFdlYktpdEFQSSJfczsKKyAgICBTdHJpbmcgc2NvcGUgPSBtX3NlcnZlci0+cmVx
dWVzdCgpLlVSTC5hYnNvbHV0ZVN0cmluZzsKKyAgICBTdHJpbmcgdG9waWMgPSBidW5kbGVJZGVu
dGlmaWVyICsgIiAiX3MgKyBzY29wZTsKIAotICAgIC8vIEluamVjdCBwdXNoIG1lc3NhZ2UKLSAg
ICBhdXRvIGVuY29kZWRNZXNzYWdlID0gZW5jb2RlU3RyaW5nKCJjb20uYXBwbGUuV2ViS2l0LlRl
c3RXZWJLaXRBUEkiKTsKLSAgICBlbmNvZGVkTWVzc2FnZS5hcHBlbmRWZWN0b3IoZW5jb2RlU3Ry
aW5nKHNlcnZlci5yZXF1ZXN0KCkuVVJMLmFic29sdXRlU3RyaW5nKSk7Ci0gICAgZW5jb2RlZE1l
c3NhZ2UuYXBwZW5kVmVjdG9yKGVuY29kZVN0cmluZygiSGVsbG8gV29ybGQiKSk7CisgICAgaWQg
b2JqID0gQHsKKyAgICAgICAgQCJ0b3BpYyI6IChOU1N0cmluZyAqKXRvcGljLAorICAgICAgICBA
InVzZXJJbmZvIjogcHVzaFVzZXJJbmZvCisgICAgfTsKKyAgICBOU0RhdGEgKmRhdGEgPSBbTlNK
U09OU2VyaWFsaXphdGlvbiBkYXRhV2l0aEpTT05PYmplY3Q6b2JqIG9wdGlvbnM6MCBlcnJvcjpu
dWxscHRyXTsKKworICAgIFN0cmluZyBtZXNzYWdlIHsgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhciAq
PihkYXRhLmJ5dGVzKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGEubGVuZ3RoKSB9OworICAg
IGF1dG8gZW5jb2RlZE1lc3NhZ2UgPSBlbmNvZGVTdHJpbmcoV1RGTW92ZShtZXNzYWdlKSk7CiAK
ICAgICBhdXRvIHV0aWxpdHlDb25uZWN0aW9uID0gY3JlYXRlQW5kQ29uZmlndXJlQ29ubmVjdGlv
blRvU2VydmljZSgib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIik7Ci0gICAg
c2VuZE1lc3NhZ2VUb0RhZW1vbldhaXRpbmdGb3JSZXBseSh1dGlsaXR5Q29ubmVjdGlvbi5nZXQo
KSwgNywgZW5jb2RlZE1lc3NhZ2UpOworICAgIHNlbmRNZXNzYWdlVG9EYWVtb25XYWl0aW5nRm9y
UmVwbHkodXRpbGl0eUNvbm5lY3Rpb24uZ2V0KCksIE1lc3NhZ2VUeXBlOjpJbmplY3RFbmNyeXB0
ZWRQdXNoTWVzc2FnZUZvclRlc3RpbmcsIGVuY29kZWRNZXNzYWdlKTsKIAogICAgIC8vIEZldGNo
IHB1c2ggbWVzc2FnZXMKKyAgICBfX2Jsb2NrIGJvb2wgZ290TWVzc2FnZXMgPSBmYWxzZTsKICAg
ICBfX2Jsb2NrIFJldGFpblB0cjxOU0FycmF5PE5TRGljdGlvbmFyeSAqPj4gbWVzc2FnZXM7Ci0g
ICAgW2RhdGFTdG9yZSBfZ2V0UGVuZGluZ1B1c2hNZXNzYWdlczpeKE5TQXJyYXk8TlNEaWN0aW9u
YXJ5ICo+ICpyYXdNZXNzYWdlcykgeworICAgIFttX2RhdGFTdG9yZSBfZ2V0UGVuZGluZ1B1c2hN
ZXNzYWdlczpeKE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICpyYXdNZXNzYWdlcykgewogICAgICAg
ICBtZXNzYWdlcyA9IHJhd01lc3NhZ2VzOwotICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAg
Z290TWVzc2FnZXMgPSB0cnVlOwogICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZSk7Ci0gICAgZG9uZSA9IGZhbHNlOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZ290TWVzc2FnZXMpOwogCiAgICAgRVhQRUNUX0VRKFttZXNzYWdlcyBjb3VudF0sIDF1KTsK
IAogICAgIC8vIEhhbmRsZSBwdXNoIG1lc3NhZ2UKICAgICBfX2Jsb2NrIGJvb2wgcHVzaE1lc3Nh
Z2VQcm9jZXNzZWQgPSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9wcm9jZXNzUHVzaE1lc3NhZ2U6
W21lc3NhZ2VzIGZpcnN0T2JqZWN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKGJvb2wgcmVzdWx0KSB7
CisgICAgW21fZGF0YVN0b3JlIF9wcm9jZXNzUHVzaE1lc3NhZ2U6W21lc3NhZ2VzIGZpcnN0T2Jq
ZWN0XSBjb21wbGV0aW9uSGFuZGxlcjpeKGJvb2wgcmVzdWx0KSB7CiAgICAgICAgIHB1c2hNZXNz
YWdlUHJvY2Vzc2VkID0gdHJ1ZTsKICAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmRvbmUpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ290RXhwZWN0ZWRNZXNz
YWdlKTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnB1c2hNZXNzYWdlUHJvY2Vzc2Vk
KTsKK30KIAotICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7CitURVNUX0Yo
V2ViUHVzaERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEVtcHR5UHVzaCkKK3sKKyAg
ICBydW5UZXN0KEAiUmVjZWl2ZWQ6IG51bGwgZGF0YSIsIEB7IH0pOworfQorCitURVNUX0YoV2Vi
UHVzaERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEFFU0dDTVB1c2gpCit7CisgICAg
cnVuVGVzdChAIlJlY2VpdmVkOiB0ZXN0IGFlc2djbSBwYXlsb2FkIiwgQHsKKyAgICAgICAgQCJj
b250ZW50X2VuY29kaW5nIjogQCJhZXNnY20iLAorICAgICAgICBAImFzX3B1YmxpY2tleSI6IEAi
QkMtQWdZTWhxbXphbUg3X0F1bTBZdklkOEZWMS11bWdId2VKTmU2WFExSU1BbTNFMjlsb1dYcVRS
bmRpYnhIMjdrSktXY0lieXltdW5kT0RNZlZ4X1VNIiwKKyAgICAgICAgQCJhc19zYWx0IjogQCJ0
a1BUNXhEZU4wbEFrU2M2bFpVa05nIiwKKyAgICAgICAgQCJwYXlsb2FkIjogQCJvL3U0eXZjWEkx
bmFwK3p5SU9CYldYZExxajFxSEcyY1grS1ZoQWRCUWoxR1ZBdDdsUT09IgorICAgIH0pOworfQor
CitURVNUX0YoV2ViUHVzaERJbmplY3RlZFB1c2hUZXN0LCBIYW5kbGVJbmplY3RlZEFFUzEyOEdD
TVB1c2gpCit7CisgICAgLy8gRnJvbSBleGFtcGxlIGluIFJGQzgyOTEgU2VjdGlvbiA1LgorICAg
IFN0cmluZyBwYXlsb2FkQmFzZTY0VVJMID0gIkRHdjZyYTFubFlnRENTMUZSbmJ6bHdBQUVBQkJC
UDR6OUtzTjZuR1JUYlZZSV9jN1ZKU1BRVEJ0a2djeTI3bWxtbE1vWklJZ0RsbDZlM3ZDWUxvY0lu
bVlXQW1TNlRsekFDOHdFcUtLNlBCcnUzamw3QV95bDk1YlFwdTZjVlBUcEs0TXFna2YxQ1h6dExW
QlN0MktzM29ad2J1d1hQWExXeW91QldMVldHTldRZXhTZ1N4c2pfUXVsY3k0YS1mTiJfczsKKyAg
ICBTdHJpbmcgcGF5bG9hZEJhc2U2NCA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJhc2U2NFVSTERl
Y29kZShwYXlsb2FkQmFzZTY0VVJMKS52YWx1ZSgpKTsKKworICAgIHJ1blRlc3QoQCJSZWNlaXZl
ZDogV2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24iLCBAeworICAgICAg
ICBAImNvbnRlbnRfZW5jb2RpbmciOiBAImFlczEyOGdjbSIsCisgICAgICAgIEAicGF5bG9hZCI6
IChOU1N0cmluZyAqKXBheWxvYWRCYXNlNjQKKyAgICB9KTsKK30KKworVEVTVF9GKFdlYlB1c2hE
VGVzdCwgU3Vic2NyaWJlVGVzdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc291cmNlID0g
UiJIVE1MKAorICAgIDxzY3JpcHQgc3JjPSIvY29uc3RhbnRzLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0PgorICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKCcvc3cuanMnKS50
aGVuKGFzeW5jICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2
aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVhZHk7CisgICAgICAgIGxldCByZXN1bHQgPSBudWxsOwor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHJlZ2lz
dHJhdGlvbi5wdXNoTWFuYWdlci5zdWJzY3JpYmUoeworICAgICAgICAgICAgICAgIHVzZXJWaXNp
YmxlT25seTogdHJ1ZSwKKyAgICAgICAgICAgICAgICBhcHBsaWNhdGlvblNlcnZlcktleTogVkFM
SURfU0VSVkVSX0tFWQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXN1bHQgPSBzdWJz
Y3JpcHRpb24udG9KU09OKCk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9ICJFcnJvcjogIiArIGU7CisgICAgICAgIH0KKyAgICAgICAgd2luZG93LndlYmtpdC5t
ZXNzYWdlSGFuZGxlcnMubm90ZS5wb3N0TWVzc2FnZShyZXN1bHQpOworICAgIH0pOworICAgIDwv
c2NyaXB0PgorICAgIClIVE1MIjsKKworICAgIF9fYmxvY2sgUmV0YWluUHRyPGlkPiBvYmogPSBu
aWw7CisgICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbbV9ub3RpZmljYXRpb25N
ZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxlcjpeKGlkIG1lc3NhZ2UpIHsKKyAgICAgICAg
b2JqID0gbWVzc2FnZTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisKKyAgICBsb2Fk
UmVxdWVzdChzb3VyY2UsICIiKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUp
OworCisgICAgQVNTRVJUX1RSVUUoW29iaiBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xh
c3NdXSk7CisKKyAgICBOU0RpY3Rpb25hcnkgKnN1YnNjcmlwdGlvbiA9IG9iai5nZXQoKTsKKyAg
ICBBU1NFUlRfVFJVRShbc3Vic2NyaXB0aW9uW0AiZW5kcG9pbnQiXSBoYXNQcmVmaXg6QCJodHRw
czovLyJdKTsKKyAgICBBU1NFUlRfVFJVRShbc3Vic2NyaXB0aW9uW0Aia2V5cyJdIGlzS2luZE9m
Q2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11dKTsKKworICAgIC8vIFNoYXJlZCBhdXRoIHNlY3Jl
dCBzaG91bGQgYmUgMTYgYnl0ZXMgKDIyIGJ5dGVzIGluIHVucGFkZGVkIGJhc2U2NHVybCkuCisg
ICAgQVNTRVJUX0VRKFtzdWJzY3JpcHRpb25bQCJrZXlzIl1bQCJhdXRoIl0gbGVuZ3RoXSwgMjJ1
KTsKKworICAgIC8vIENsaWVudCBwdWJsaWMga2V5IHNob3VsZCBiZSA2NSBieXRlcyAoODcgYnl0
ZXMgaW4gdW5wYWRkZWQgYmFzZTY0dXJsKS4KKyAgICBBU1NFUlRfRVEoW3N1YnNjcmlwdGlvbltA
ImtleXMiXVtAInAyNTZkaCJdIGxlbmd0aF0sIDg3dSk7Cit9CisKK1RFU1RfRihXZWJQdXNoRFRl
c3QsIFN1YnNjcmliZUZhaWx1cmVUZXN0KQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzb3Vy
Y2UgPSBSIkhUTUwoCisgICAgPHNjcmlwdCBzcmM9Ii9jb25zdGFudHMuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQ+CisgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5q
cycpLnRoZW4oYXN5bmMgKCkgPT4geworICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBhd2Fp
dCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWFkeTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG51
bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gYXdhaXQg
cmVnaXN0cmF0aW9uLnB1c2hNYW5hZ2VyLnN1YnNjcmliZSh7CisgICAgICAgICAgICAgICAgdXNl
clZpc2libGVPbmx5OiB0cnVlLAorICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uU2VydmVyS2V5
OiBWQUxJRF9TRVJWRVJfS0VZX1RIQVRfQ0FVU0VTX0lOSkVDVEVEX0ZBSUxVUkUKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgcmVzdWx0ID0gc3Vic2NyaXB0aW9uLnRvSlNPTigpOworICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXN1bHQgPSAiRXJyb3I6ICIgKyBlOwor
ICAgICAgICB9CisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLm5vdGUucG9z
dE1lc3NhZ2UocmVzdWx0KTsKKyAgICB9KTsKKyAgICA8L3NjcmlwdD4KKyAgICApSFRNTCI7CisK
KyAgICBfX2Jsb2NrIFJldGFpblB0cjxpZD4gb2JqID0gbmlsOworICAgIF9fYmxvY2sgYm9vbCBk
b25lID0gZmFsc2U7CisgICAgW21fbm90aWZpY2F0aW9uTWVzc2FnZUhhbmRsZXIgc2V0TWVzc2Fn
ZUhhbmRsZXI6XihpZCBtZXNzYWdlKSB7CisgICAgICAgIG9iaiA9IG1lc3NhZ2U7CisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgIH1dOworCisgICAgbG9hZFJlcXVlc3Qoc291cmNlLCAiIik7Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIC8vIFNwZWMgc2F5cyB0
aGF0IGFuIGVycm9yIGluIHRoZSBwdXNoIHNlcnZpY2Ugc2hvdWxkIGJlIGFuIEFib3J0RXJyb3Iu
CisgICAgQVNTRVJUX1RSVUUoW29iaiBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKTsK
KyAgICBBU1NFUlRfVFJVRShbb2JqIGhhc1ByZWZpeDpAIkVycm9yOiBBYm9ydEVycm9yIl0pOwor
fQorCitURVNUX0YoV2ViUHVzaERUZXN0LCBVbnN1YnNjcmliZVRlc3QpCit7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHNvdXJjZSA9IFIiSFRNTCgKKyAgICA8c2NyaXB0IHNyYz0iL2NvbnN0YW50
cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtl
ci5yZWdpc3RlcignL3N3LmpzJykudGhlbihhc3luYyAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJl
Z2lzdHJhdGlvbiA9IGF3YWl0IG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlYWR5OworICAgICAg
ICBsZXQgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxldCBzdWJz
Y3JpcHRpb24gPSBhd2FpdCByZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsKKyAg
ICAgICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsCisgICAgICAgICAgICAgICAgYXBw
bGljYXRpb25TZXJ2ZXJLZXk6IFZBTElEX1NFUlZFUl9LRVkKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgbGV0IHJlc3VsdDEgPSBhd2FpdCBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsK
KyAgICAgICAgICAgIGxldCByZXN1bHQyID0gYXdhaXQgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJl
KCk7CisgICAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0MSwgcmVzdWx0Ml07CisgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICJFcnJvcjogIiArIGU7CisgICAgICAg
IH0KKyAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMubm90ZS5wb3N0TWVzc2Fn
ZShyZXN1bHQpOworICAgIH0pOworICAgIDwvc2NyaXB0PgorICAgIClIVE1MIjsKKworICAgIF9f
YmxvY2sgUmV0YWluUHRyPGlkPiBvYmogPSBuaWw7CisgICAgX19ibG9jayBib29sIGRvbmUgPSBm
YWxzZTsKKyAgICBbbV9ub3RpZmljYXRpb25NZXNzYWdlSGFuZGxlciBzZXRNZXNzYWdlSGFuZGxl
cjpeKGlkIG1lc3NhZ2UpIHsKKyAgICAgICAgb2JqID0gbWVzc2FnZTsKKyAgICAgICAgZG9uZSA9
IHRydWU7CisgICAgfV07CisKKyAgICBsb2FkUmVxdWVzdChzb3VyY2UsICIiKTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgLy8gRmlyc3QgdW5zdWJzY3JpYmUg
c2hvdWxkIHN1Y2NlZWQuIFNlY29uZCBvbmUgc2hvdWxkIGZhaWwgc2luY2UgdGhlIGZpcnN0IG9u
ZSByZW1vdmVkIHRoZSByZWNvcmQgZnJvbSB0aGUgZGF0YWJhc2UuCisgICAgaWQgZXhwZWN0ZWQg
PSBAW0AoMSksIEAoMCldOworICAgIEFTU0VSVF9UUlVFKFtvYmogaXNFcXVhbDpleHBlY3RlZF0p
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>