<?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>233045</bug_id>
          
          <creation_ts>2021-11-12 08:26:25 -0800</creation_ts>
          <short_desc>Rename ProcessLauncherMac.mm to ProcessLauncherCocoa.mm</short_desc>
          <delta_ts>2021-11-12 12:38:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=233001</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1814455</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-11-12 08:26:25 -0800</bug_when>
    <thetext>Rename ProcessLauncherMac.mm to ProcessLauncherDarwin.mm since this implementation is used by both macOS and iOS. I chose the Darwin naming (as opposed to the Cocoa one) because the implementation only relies on libXPC and Mach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814456</commentid>
    <comment_count>1</comment_count>
      <attachid>444070</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-11-12 08:27:41 -0800</bug_when>
    <thetext>Created attachment 444070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814469</commentid>
    <comment_count>2</comment_count>
      <attachid>444070</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-12 08:39:27 -0800</bug_when>
    <thetext>Comment on attachment 444070
Patch

Thank you for fixing this confusing naming. r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814497</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-12 09:52:32 -0800</bug_when>
    <thetext>Committed r285729 (244188@main): &lt;https://commits.webkit.org/244188@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 444070.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814498</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-12 09:53:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/85347107&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814520</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-12 10:51:38 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #0)
&gt; Rename ProcessLauncherMac.mm to ProcessLauncherDarwin.mm since this
&gt; implementation is used by both macOS and iOS. I chose the Darwin naming (as
&gt; opposed to the Cocoa one) because the implementation only relies on libXPC
&gt; and Mach.

But still &quot;.mm&quot;? Seems like that relies on Objective-C, which we normally don’t require on non-Cocoa platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814524</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-11-12 10:56:03 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; (In reply to Chris Dumez from comment #0)
&gt; &gt; Rename ProcessLauncherMac.mm to ProcessLauncherDarwin.mm since this
&gt; &gt; implementation is used by both macOS and iOS. I chose the Darwin naming (as
&gt; &gt; opposed to the Cocoa one) because the implementation only relies on libXPC
&gt; &gt; and Mach.
&gt; 
&gt; But still &quot;.mm&quot;? Seems like that relies on Objective-C, which we normally
&gt; don’t require on non-Cocoa platforms.

Oh, I didn&apos;t realize we wanted cpp for Darwin files. I&apos;ll check if I can make it a cpp (or use Cocoa.mm naming).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814529</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-11-12 11:19:23 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Darin Adler from comment #5)
&gt; &gt; (In reply to Chris Dumez from comment #0)
&gt; &gt; &gt; Rename ProcessLauncherMac.mm to ProcessLauncherDarwin.mm since this
&gt; &gt; &gt; implementation is used by both macOS and iOS. I chose the Darwin naming (as
&gt; &gt; &gt; opposed to the Cocoa one) because the implementation only relies on libXPC
&gt; &gt; &gt; and Mach.
&gt; &gt; 
&gt; &gt; But still &quot;.mm&quot;? Seems like that relies on Objective-C, which we normally
&gt; &gt; don’t require on non-Cocoa platforms.
&gt; 
&gt; Oh, I didn&apos;t realize we wanted cpp for Darwin files. I&apos;ll check if I can
&gt; make it a cpp (or use Cocoa.mm naming).

Hmm, looks like I may need to use Cocoa.mm because of this line:
bool isWebKitDevelopmentBuild = ![[[[NSBundle bundleWithIdentifier:@&quot;com.apple.WebKit&quot;] bundlePath] stringByDeletingLastPathComponent] hasPrefix:systemDirectoryPath()];</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814530</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-11-12 11:20:09 -0800</bug_when>
    <thetext>Makes sense. Certainly CFBundle and NSBundle are not part of Darwin. Anyway, no need for me to be super-nitpick-y about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814536</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-11-12 11:26:06 -0800</bug_when>
    <thetext>Reopening for rename to Cocoa.mm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814537</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-11-12 11:26:19 -0800</bug_when>
    <thetext>Reopening for rename to Cocoa.mm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814538</commentid>
    <comment_count>11</comment_count>
      <attachid>444085</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-11-12 11:28:50 -0800</bug_when>
    <thetext>Created attachment 444085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814540</commentid>
    <comment_count>12</comment_count>
      <attachid>444085</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2021-11-12 11:31:12 -0800</bug_when>
    <thetext>Comment on attachment 444085
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1814563</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-12 12:38:19 -0800</bug_when>
    <thetext>Committed r285737 (244196@main): &lt;https://commits.webkit.org/244196@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 444085.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444070</attachid>
            <date>2021-11-12 08:27:41 -0800</date>
            <delta_ts>2021-11-12 11:28:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233045-20211112082740.patch</filename>
            <type>text/plain</type>
            <size>38635</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ0NTBkYjVjMzY1NzQ0NTBh
Y2UxYjE0ZTFjOGFmOGEwMDI1YjFhMGYuLjkxZTc2NGViOGI3Mzk0Y2MwMzJjODIwMjM4ODBiNWE0
NTJjMzg3YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMTEtMTIgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgUHJvY2Vzc0xhdW5jaGVy
TWFjLm1tIHRvIFByb2Nlc3NMYXVuY2hlckRhcndpbi5tbQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMDQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFByb2Nlc3NMYXVuY2hlck1hYy5tbSB0
byBQcm9jZXNzTGF1bmNoZXJEYXJ3aW4ubW0gc2luY2UgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB1
c2VkIGJ5IGJvdGggbWFjT1MgYW5kIGlPUy4KKyAgICAgICAgSSBjaG9zZSB0aGUgRGFyd2luIG5h
bWluZyAoYXMgb3Bwb3NlZCB0byB0aGUgQ29jb2Egb25lKSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRh
dGlvbiBvbmx5IHJlbGllcyBvbiBsaWJYUEMgYW5kIG1hY2guCisKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9kYXJ3aW4vUHJvY2Vzc0xh
dW5jaGVyRGFyd2luLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1
bmNoZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1hYy5tbS4KKyAgICAgICAgKFdlYktpdDo6c2Vydmlj
ZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpzaG91bGRMZWFrQm9vc3QpOgorICAgICAgICAoV2Vi
S2l0OjpzeXN0ZW1EaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5j
aGVyOjpsYXVuY2hQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjp0
ZXJtaW5hdGVQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpwbGF0
Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRlcm1p
bmF0ZVhQQ0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0Ojp0ZXJtaW5hdGVXaXRoUmVhc29u
KToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMS0x
MS0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdCBp
cyB1bmFibGUgdG8gcmVjb3ZlciBpZiBhIFdlYlByb2Nlc3MgZ2V0cyB0ZXJtaW5hdGVkIHdoaWxl
IGl0IGlzIGxhdW5jaGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGEzMTUyZmMwMjk5ZDk2
NzRmOTFkZTg4ZmY1NTI2MGFjMDJlYjdlNzUuLjg5ZjViYWUwMmIzNzFjZjZkNDgyMjAwNDU1Zjk2
MTExYzFiNmIyMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTUxMSw3ICs1MTEsNyBAQCBV
SVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJlY3QubW0KIFVJUHJvY2Vzcy9pb3MvV0tVU0RQ
cmV2aWV3Vmlldy5tbQogVUlQcm9jZXNzL2lvcy9XS1dlYkV2ZW50Lm1tCiAKLVVJUHJvY2Vzcy9M
YXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCitVSVByb2Nlc3MvTGF1bmNoZXIvZGFy
d2luL1Byb2Nlc3NMYXVuY2hlckRhcndpbi5tbQogCiBVSVByb2Nlc3MvbWFjL0NvcnJlY3Rpb25Q
YW5lbC5tbQogVUlQcm9jZXNzL21hYy9EaXNwbGF5TGluay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2Rhcndpbi9Qcm9jZXNzTGF1bmNoZXJEYXJ3aW4u
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9kYXJ3aW4vUHJvY2Vzc0xhdW5j
aGVyRGFyd2luLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiOGQzOGM1M2VkYWM4M2RkYzA2NDUxNjhiY2UzNDY0
ODdiZjMwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVu
Y2hlci9kYXJ3aW4vUHJvY2Vzc0xhdW5jaGVyRGFyd2luLm1tCkBAIC0wLDAgKzEsMzU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlByb2Nlc3NMYXVu
Y2hlci5oIgorCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJSZWFzb25TUEkuaCIKKyNp
bXBvcnQgIldlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9S
dW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KKyNpbXBvcnQgPGNydF9leHRlcm5zLmg+CisjaW1w
b3J0IDxtYWNoLW8vZHlsZC5oPgorI2ltcG9ydCA8bWFjaC9tYWNoX2Vycm9yLmg+CisjaW1wb3J0
IDxtYWNoL21hY2hpbmUuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvU2VydmVyc1NQSS5oPgor
I2ltcG9ydCA8c3Bhd24uaD4KKyNpbXBvcnQgPHN5cy9wYXJhbS5oPgorI2ltcG9ydCA8c3lzL3N0
YXQuaD4KKyNpbXBvcnQgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisjaW1wb3J0IDx3dGYvUnVuTG9v
cC5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW1wb3J0IDx3dGYvY29jb2EvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuaD4K
KyNpbXBvcnQgPHd0Zi9zcGkvY2YvQ0ZCdW5kbGVTUEkuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvZGFy
d2luL1hQQ1NQSS5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjaW1wb3J0ICJDb2RlU2ln
bmluZy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgY2hh
ciogc2VydmljZU5hbWUoY29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVu
Y2hPcHRpb25zKQoreworICAgIHN3aXRjaCAobGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSkgewor
ICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6V2ViOgorICAgICAgICByZXR1
cm4gbGF1bmNoT3B0aW9ucy5ub25WYWxpZEluamVjdGVkQ29kZUFsbG93ZWQgPyAiY29tLmFwcGxl
LldlYktpdC5XZWJDb250ZW50LkRldmVsb3BtZW50IiA6ICJjb20uYXBwbGUuV2ViS2l0LldlYkNv
bnRlbnQiOworICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazoK
KyAgICAgICAgcmV0dXJuICJjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtpbmciOworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKyAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OkdQ
VToKKyAgICAgICAgcmV0dXJuICJjb20uYXBwbGUuV2ViS2l0LkdQVSI7CisjZW5kaWYKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKQorICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6
V2ViQXV0aG46CisgICAgICAgIHJldHVybiAiY29tLmFwcGxlLldlYktpdC5XZWJBdXRobiI7Cisj
ZW5kaWYKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIHNob3VsZExlYWtCb29zdChjb25zdCBQcm9j
ZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMpCit7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBVTlVTRURfUEFSQU0obGF1bmNoT3B0aW9ucyk7CisjaWYgSEFW
RShSVU5OSU5HQk9BUkRfV0VCS0lUX1BSSU9SSVRZX1NVUFBPUlQpCisgICAgLy8gT24gaU9TLCB3
ZSBkb24ndCBuZWVkIHRvIGxlYWsgYSBib29zdCBtZXNzYWdlIHdoZW4gUnVubmluZ0JvYXJkIHBy
b2Nlc3MgYXNzZXJ0aW9ucyBnaXZlIHVzIHRoZQorICAgIC8vIHJpZ2h0IHByaW9yaXRpZXMuCisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgcnVubmluZ0JvYXJkSGFuZGxlc1ByaW9yaXRpZXMgPSBpc0Zl
YXR1cmVGbGFnRW5hYmxlZCgiUkJfZnVsbF9tYW5hZ2VfV0tfamV0c2FtIl9zKTsKKyAgICByZXR1
cm4gIXJ1bm5pbmdCb2FyZEhhbmRsZXNQcmlvcml0aWVzOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1
ZTsKKyNlbmRpZiAvLyBIQVZFKFJVTk5JTkdCT0FSRF9XRUJLSVRfUFJJT1JJVFlfU1VQUE9SVCkK
KyNlbHNlCisgICAgLy8gT24gTWFjLCBsZWFrIGEgYm9vc3Qgb250byB0aGUgTmV0d29ya1Byb2Nl
c3MsIEdQVVByb2Nlc3MsIGFuZCBXZWJBdXRoblByb2Nlc3MuCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorICAgIGlmIChsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVuY2hl
cjo6UHJvY2Vzc1R5cGU6OkdQVSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyNpZiBF
TkFCTEUoV0VCX0FVVEhOKQorICAgIGlmIChsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID09IFBy
b2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OldlYkF1dGhuKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyNlbmRpZgorICAgIHJldHVybiBsYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID09IFByb2Nl
c3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms7CisjZW5kaWYKK30KKworc3RhdGljIE5T
U3RyaW5nICpzeXN0ZW1EaXJlY3RvcnlQYXRoKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UmV0YWluUHRyPE5TU3RyaW5nPj4gcGF0aCA9IGFkb3B0TlMoW157CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWV9TSU1VTEFUT1IpCisgICAgICAgIGNoYXIgKnNpbXVsYXRvclJvb3QgPSBnZXRl
bnYoIlNJTVVMQVRPUl9ST09UIik7CisgICAgICAgIHJldHVybiBzaW11bGF0b3JSb290ID8gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcy9TeXN0ZW0vIiwgc2ltdWxhdG9yUm9vdF0gOiBA
Ii9TeXN0ZW0vIjsKKyNlbHNlCisgICAgICAgIHJldHVybiBAIi9TeXN0ZW0vIjsKKyNlbmRpZgor
ICAgIH0oKSBjb3B5XSk7CisKKyAgICByZXR1cm4gcGF0aC5nZXQoKS5nZXQoKTsKK30KKwordm9p
ZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQoreworICAgIEFTU0VSVCghbV94cGND
b25uZWN0aW9uKTsKKworICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgaWYgKCFtX2xhdW5jaE9w
dGlvbnMuY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyLmlzTnVsbCgpKQor
ICAgICAgICBuYW1lID0gbV9sYXVuY2hPcHRpb25zLmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllci5kYXRhKCk7CisgICAgZWxzZQorICAgICAgICBuYW1lID0gc2VydmljZU5h
bWUobV9sYXVuY2hPcHRpb25zKTsKKworICAgIG1feHBjQ29ubmVjdGlvbiA9IGFkb3B0T1NPYmpl
Y3QoeHBjX2Nvbm5lY3Rpb25fY3JlYXRlKG5hbWUsIG51bGxwdHIpKTsKKworICAgIHV1aWRfdCB1
dWlkOworICAgIHV1aWRfZ2VuZXJhdGUodXVpZCk7CisgICAgeHBjX2Nvbm5lY3Rpb25fc2V0X29u
ZXNob3RfaW5zdGFuY2UobV94cGNDb25uZWN0aW9uLmdldCgpLCB1dWlkKTsKKworICAgIC8vIElu
aGVyaXQgVUkgcHJvY2VzcyBsb2NhbGl6YXRpb24uIEl0IGNhbiBiZSBkaWZmZXJlbnQgZnJvbSBj
aGlsZCBwcm9jZXNzIGRlZmF1bHQgbG9jYWxpemF0aW9uOgorICAgIC8vIDEuIFdoZW4gdGhlIGFw
cGxpY2F0aW9uIGFuZCBzeXN0ZW0gZnJhbWV3b3JrcyBzaW1wbHkgaGF2ZSBkaWZmZXJlbnQgbG9j
YWxpemVkIHJlc291cmNlcyBhdmFpbGFibGUsIHdlIHNob3VsZCBtYXRjaCB0aGUgYXBwbGljYXRp
b24uCisgICAgLy8gMS4xLiBBbiBpbXBvcnRhbnQgY2FzZSBpcyBXZWJLaXRUZXN0UnVubmVyLCB3
aGVyZSB3ZSBzaG91bGQgdXNlIEVuZ2xpc2ggbG9jYWxpemF0aW9ucyBmb3IgYWxsIHN5c3RlbSBm
cmFtZXdvcmtzLgorICAgIC8vIDIuIFdoZW4gQXBwbGVMYW5ndWFnZXMgaXMgcGFzc2VkIGFzIGNv
bW1hbmQgbGluZSBhcmd1bWVudCBmb3IgVUkgcHJvY2Vzcywgb3Igc2V0IGluIGl0cyBwcmVmZXJl
bmNlcywgd2Ugc2hvdWxkIHJlc3BlY3QgaXQgaW4gY2hpbGQgcHJvY2Vzc2VzLgorICAgIGF1dG8g
aW5pdGlhbGl6YXRpb25NZXNzYWdlID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVh
dGUobnVsbHB0ciwgbnVsbHB0ciwgMCkpOworICAgIF9DRkJ1bmRsZVNldHVwWFBDQm9vdHN0cmFw
KGluaXRpYWxpemF0aW9uTWVzc2FnZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICAvLyBDbGllbnRzIHRoYXQgc2V0IHRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBleHBs
aWNpdGx5IGRvIG5vdCBoYXZlIHRoZSB2YWx1ZXMgYXV0b21hdGljYWxseSBmb3J3YXJkZWQgYnkg
bGlieHBjLgorICAgIGF1dG8gY29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMgPSBhZG9wdE9T
T2JqZWN0KHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShudWxscHRyLCBudWxscHRyLCAwKSk7CisgICAg
aWYgKGNvbnN0IGNoYXIqIGVudmlyb25tZW50SE9NRSA9IGdldGVudigiSE9NRSIpKQorICAgICAg
ICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVz
LmdldCgpLCAiSE9NRSIsIGVudmlyb25tZW50SE9NRSk7CisgICAgaWYgKGNvbnN0IGNoYXIqIGVu
dmlyb25tZW50Q0ZGSVhFRF9VU0VSX0hPTUUgPSBnZXRlbnYoIkNGRklYRURfVVNFUl9IT01FIikp
CisgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoY29udGFpbmVyRW52aXJvbm1lbnRW
YXJpYWJsZXMuZ2V0KCksICJDRkZJWEVEX1VTRVJfSE9NRSIsIGVudmlyb25tZW50Q0ZGSVhFRF9V
U0VSX0hPTUUpOworICAgIGlmIChjb25zdCBjaGFyKiBlbnZpcm9ubWVudFRNUERJUiA9IGdldGVu
digiVE1QRElSIikpCisgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoY29udGFpbmVy
RW52aXJvbm1lbnRWYXJpYWJsZXMuZ2V0KCksICJUTVBESVIiLCBlbnZpcm9ubWVudFRNUERJUik7
CisgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3ZhbHVlKGluaXRpYWxpemF0aW9uTWVzc2FnZS5nZXQo
KSwgIkNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzIiwgY29udGFpbmVyRW52aXJvbm1lbnRW
YXJpYWJsZXMuZ2V0KCkpOworI2VuZGlmCisKKyAgICBhdXRvIGxhbmd1YWdlc0l0ZXJhdG9yID0g
bV9sYXVuY2hPcHRpb25zLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmZpbmQoIk92ZXJyaWRlTGFu
Z3VhZ2VzIik7CisgICAgaWYgKGxhbmd1YWdlc0l0ZXJhdG9yICE9IG1fbGF1bmNoT3B0aW9ucy5l
eHRyYUluaXRpYWxpemF0aW9uRGF0YS5lbmQoKSkgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
TGFuZ3VhZ2UsIHN0cmVhbSA8PCAiUHJvY2VzcyBMYXVuY2hlciBpcyBjb3B5aW5nIE92ZXJyaWRl
TGFuZ3VhZ2VzIGludG8gaW5pdGlhbGl6YXRpb24gbWVzc2FnZTogIiA8PCBsYW5ndWFnZXNJdGVy
YXRvci0+dmFsdWUpOworICAgICAgICBhdXRvIGxhbmd1YWdlcyA9IGFkb3B0T1NPYmplY3QoeHBj
X2FycmF5X2NyZWF0ZShudWxscHRyLCAwKSk7CisgICAgICAgIGZvciAoYXV0byYgbGFuZ3VhZ2Ug
OiBsYW5ndWFnZXNJdGVyYXRvci0+dmFsdWUuc3BsaXQoJywnKSkKKyAgICAgICAgICAgIHhwY19h
cnJheV9zZXRfc3RyaW5nKGxhbmd1YWdlcy5nZXQoKSwgWFBDX0FSUkFZX0FQUEVORCwgbGFuZ3Vh
Z2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF92YWx1ZShpbml0
aWFsaXphdGlvbk1lc3NhZ2UuZ2V0KCksICJPdmVycmlkZUxhbmd1YWdlcyIsIGxhbmd1YWdlcy5n
ZXQoKSk7CisgICAgfQorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHhwY19kaWN0aW9uYXJ5X3Nl
dF9zdHJpbmcoaW5pdGlhbGl6YXRpb25NZXNzYWdlLmdldCgpLCAiV2ViS2l0QnVuZGxlVmVyc2lv
biIsIFtbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViS2l0Il0u
aW5mb0RpY3Rpb25hcnlbKF9fYnJpZGdlIE5TU3RyaW5nICopa0NGQnVuZGxlVmVyc2lvbktleV0g
VVRGOFN0cmluZ10pOworI2VuZGlmCisgICAgeHBjX2Nvbm5lY3Rpb25fc2V0X2Jvb3RzdHJhcCht
X3hwY0Nvbm5lY3Rpb24uZ2V0KCksIGluaXRpYWxpemF0aW9uTWVzc2FnZS5nZXQoKSk7CisKKyAg
ICBpZiAoc2hvdWxkTGVha0Jvb3N0KG1fbGF1bmNoT3B0aW9ucykpIHsKKyAgICAgICAgYXV0byBw
cmVCb290c3RyYXBNZXNzYWdlID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUo
bnVsbHB0ciwgbnVsbHB0ciwgMCkpOworICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5n
KHByZUJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJtZXNzYWdlLW5hbWUiLCAicHJlLWJvb3RzdHJh
cCIpOworICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UobV94cGNDb25uZWN0aW9u
LmdldCgpLCBwcmVCb290c3RyYXBNZXNzYWdlLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBDcmVh
dGUgdGhlIGxpc3RlbmluZyBwb3J0LgorICAgIG1hY2hfcG9ydF90IGxpc3RlbmluZ1BvcnQgPSBN
QUNIX1BPUlRfTlVMTDsKKyAgICBhdXRvIGtyID0gbWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFz
a19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmbGlzdGVuaW5nUG9ydCk7CisgICAg
aWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBh
bGxvY2F0ZSBtYWNoIHBvcnQsIGVycm9yICV4OiAlcyIsIGtyLCBtYWNoX2Vycm9yX3N0cmluZyhr
cikpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIC8vIEluc2VydCBhIHNlbmQgcmln
aHQgc28gd2UgY2FuIHNlbmQgdG8gaXQuCisgICAgbWFjaF9wb3J0X2luc2VydF9yaWdodChtYWNo
X3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0LCBsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBF
X01BS0VfU0VORCk7CisKKyAgICBtYWNoX3BvcnRfdCBwcmV2aW91c05vdGlmaWNhdGlvblBvcnQg
PSBNQUNIX1BPUlRfTlVMTDsKKyAgICBhdXRvIG1jID0gbWFjaF9wb3J0X3JlcXVlc3Rfbm90aWZp
Y2F0aW9uKG1hY2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTk9USUZZX05PX1NF
TkRFUlMsIDAsIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EX09OQ0UsICZw
cmV2aW91c05vdGlmaWNhdGlvblBvcnQpOworICAgIEFTU0VSVCghcHJldmlvdXNOb3RpZmljYXRp
b25Qb3J0KTsKKyAgICBBU1NFUlQobWMgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICBpZiAobWMgIT0g
S0VSTl9TVUNDRVNTKSB7CisgICAgICAgIC8vIElmIG1hY2hfcG9ydF9yZXF1ZXN0X25vdGlmaWNh
dGlvbiBmYWlscywgJ3ByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCcgd2lsbCBiZSB1bmluaXRpYWxp
emVkLgorICAgICAgICBMT0dfRVJST1IoIm1hY2hfcG9ydF9yZXF1ZXN0X25vdGlmaWNhdGlvbiBm
YWlsZWQ6ICgleCkgJXMiLCBtYywgbWFjaF9lcnJvcl9zdHJpbmcobWMpKTsKKyAgICB9CisKKyAg
ICBTdHJpbmcgY2xpZW50SWRlbnRpZmllcjsKKyNpZiBQTEFURk9STShNQUMpCisgICAgY2xpZW50
SWRlbnRpZmllciA9IGNvZGVTaWduaW5nSWRlbnRpZmllckZvckN1cnJlbnRQcm9jZXNzKCk7Cisj
ZW5kaWYKKyAgICBpZiAoY2xpZW50SWRlbnRpZmllci5pc051bGwoKSkKKyAgICAgICAgY2xpZW50
SWRlbnRpZmllciA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07CisK
KyAgICAvLyBGSVhNRTogU3dpdGNoIHRvIHhwY19jb25uZWN0aW9uX3NldF9ib290c3RyYXAgb25j
ZSBpdCdzIGF2YWlsYWJsZSBldmVyeXdoZXJlIHdlIG5lZWQuCisgICAgYXV0byBib290c3RyYXBN
ZXNzYWdlID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVs
bHB0ciwgMCkpOworCisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIGlmIChtX2NsaWVudC0+
c2hvdWxkQ29uZmlndXJlSlNDRm9yVGVzdGluZygpKQorICAgICAgICAgICAgeHBjX2RpY3Rpb25h
cnlfc2V0X2Jvb2woYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImNvbmZpZ3VyZS1qc2MtZm9yLXRl
c3RpbmciLCB0cnVlKTsKKyAgICAgICAgaWYgKCFtX2NsaWVudC0+aXNKSVRFbmFibGVkKCkpCisg
ICAgICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfYm9vbChib290c3RyYXBNZXNzYWdlLmdldCgp
LCAiZGlzYWJsZS1qaXQiLCB0cnVlKTsKKyAgICAgICAgaWYgKG1fY2xpZW50LT5zaG91bGRFbmFi
bGVTaGFyZWRBcnJheUJ1ZmZlcigpKQorICAgICAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X2Jv
b2woYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImVuYWJsZS1zaGFyZWQtYXJyYXktYnVmZmVyIiwg
dHJ1ZSk7CisgICAgICAgIGlmIChtX2NsaWVudC0+c2hvdWxkRW5hYmxlQ2FwdGl2ZVBvcnRhbE1v
ZGUoKSkKKyAgICAgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9ib29sKGJvb3RzdHJhcE1lc3Nh
Z2UuZ2V0KCksICJlbmFibGUtY2FwdGl2ZS1wb3J0YWwtbW9kZSIsIHRydWUpOworICAgIH0KKwor
ICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgIm1l
c3NhZ2UtbmFtZSIsICJib290c3RyYXAiKTsKKworICAgIHhwY19kaWN0aW9uYXJ5X3NldF9tYWNo
X3NlbmQoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgInNlcnZlci1wb3J0IiwgbGlzdGVuaW5nUG9y
dCk7CisKKyAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0
KCksICJjbGllbnQtaWRlbnRpZmllciIsICFjbGllbnRJZGVudGlmaWVyLmlzRW1wdHkoKSA/IGNs
aWVudElkZW50aWZpZXIudXRmOCgpLmRhdGEoKSA6ICpfTlNHZXRQcm9nbmFtZSgpKTsKKyAgICB4
cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJjbGllbnQt
YnVuZGxlLWlkZW50aWZpZXIiLCBXZWJDb3JlOjphcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGJvb3RzdHJh
cE1lc3NhZ2UuZ2V0KCksICJjbGllbnQtc2RrLXZlcnNpb24iLCBTdHJpbmc6Om51bWJlcihhcHBs
aWNhdGlvblNES1ZlcnNpb24oKSkudXRmOCgpLmRhdGEoKSk7CisgICAgeHBjX2RpY3Rpb25hcnlf
c2V0X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAicHJvY2Vzcy1pZGVudGlmaWVyIiwg
U3RyaW5nOjpudW1iZXIobV9sYXVuY2hPcHRpb25zLnByb2Nlc3NJZGVudGlmaWVyLnRvVUludDY0
KCkpLnV0ZjgoKS5kYXRhKCkpOworICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0
cmFwTWVzc2FnZS5nZXQoKSwgInVpLXByb2Nlc3MtbmFtZSIsIFtbW05TUHJvY2Vzc0luZm8gcHJv
Y2Vzc0luZm9dIHByb2Nlc3NOYW1lXSBVVEY4U3RyaW5nXSk7CisgICAgeHBjX2RpY3Rpb25hcnlf
c2V0X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAic2VydmljZS1uYW1lIiwgbmFtZSk7
CisKKyAgICBib29sIGlzV2ViS2l0RGV2ZWxvcG1lbnRCdWlsZCA9ICFbW1tbTlNCdW5kbGUgYnVu
ZGxlV2l0aElkZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViS2l0Il0gYnVuZGxlUGF0aF0gc3RyaW5n
QnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XSBoYXNQcmVmaXg6c3lzdGVtRGlyZWN0b3J5UGF0
aCgpXTsKKyAgICBpZiAoaXNXZWJLaXREZXZlbG9wbWVudEJ1aWxkKSB7CisgICAgICAgIHhwY19k
aWN0aW9uYXJ5X3NldF9mZChib290c3RyYXBNZXNzYWdlLmdldCgpLCAic3Rkb3V0IiwgU1RET1VU
X0ZJTEVOTyk7CisgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9mZChib290c3RyYXBNZXNzYWdl
LmdldCgpLCAic3RkZXJyIiwgU1RERVJSX0ZJTEVOTyk7CisgICAgfQorCisgICAgYXV0byBleHRy
YUluaXRpYWxpemF0aW9uRGF0YSA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRl
KG51bGxwdHIsIG51bGxwdHIsIDApKTsKKworICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQ
YWlyIDogbV9sYXVuY2hPcHRpb25zLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhKQorICAgICAgICB4
cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGV4dHJhSW5pdGlhbGl6YXRpb25EYXRhLmdldCgpLCBr
ZXlWYWx1ZVBhaXIua2V5LnV0ZjgoKS5kYXRhKCksIGtleVZhbHVlUGFpci52YWx1ZS51dGY4KCku
ZGF0YSgpKTsKKworICAgIHhwY19kaWN0aW9uYXJ5X3NldF92YWx1ZShib290c3RyYXBNZXNzYWdl
LmdldCgpLCAiZXh0cmEtaW5pdGlhbGl6YXRpb24tZGF0YSIsIGV4dHJhSW5pdGlhbGl6YXRpb25E
YXRhLmdldCgpKTsKKworICAgIGF1dG8gZXJyb3JIYW5kbGVySW1wbCA9IFt3ZWFrUHJvY2Vzc0xh
dW5jaGVyID0gV2Vha1B0ciB7ICp0aGlzIH0sIGxpc3RlbmluZ1BvcnRdICh4cGNfb2JqZWN0X3Qg
ZXZlbnQpIHsKKyAgICAgICAgQVNTRVJUKCFldmVudCB8fCB4cGNfZ2V0X3R5cGUoZXZlbnQpID09
IFhQQ19UWVBFX0VSUk9SKTsKKworICAgICAgICBhdXRvIHByb2Nlc3NMYXVuY2hlciA9IHdlYWtQ
cm9jZXNzTGF1bmNoZXIuZ2V0KCk7CisgICAgICAgIGlmICghcHJvY2Vzc0xhdW5jaGVyKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghcHJvY2Vzc0xhdW5jaGVyLT5pc0xhdW5j
aGluZygpKQorICAgICAgICAgICAgcmV0dXJuOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAg
ICAgbWFjaF9wb3J0X3VyZWZzX3Qgc2VuZFJpZ2h0Q291bnQgPSAwOworICAgICAgICBtYWNoX3Bv
cnRfZ2V0X3JlZnMobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgTUFDSF9QT1JUX1JJ
R0hUX1NFTkQsICZzZW5kUmlnaHRDb3VudCk7CisgICAgICAgIEFTU0VSVChzZW5kUmlnaHRDb3Vu
dCA+PSAxKTsKKyNlbmRpZgorCisgICAgICAgIC8vIFdlIGZhaWxlZCB0byBsYXVuY2guIFJlbGVh
c2UgdGhlIHNlbmQgcmlnaHQuCisgICAgICAgIGRlYWxsb2NhdGVTZW5kUmlnaHRTYWZlbHkobGlz
dGVuaW5nUG9ydCk7CisKKyAgICAgICAgLy8gQW5kIHRoZSByZWNlaXZlIHJpZ2h0LgorICAgICAg
ICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgTUFD
SF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKKworICAgICAgICBpZiAocHJvY2Vzc0xhdW5jaGVy
LT5tX3hwY0Nvbm5lY3Rpb24pCisgICAgICAgICAgICB4cGNfY29ubmVjdGlvbl9jYW5jZWwocHJv
Y2Vzc0xhdW5jaGVyLT5tX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpOworICAgICAgICBwcm9jZXNzTGF1
bmNoZXItPm1feHBjQ29ubmVjdGlvbiA9IG51bGxwdHI7CisKKyAgICAgICAgcHJvY2Vzc0xhdW5j
aGVyLT5kaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzKDAsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRp
ZmllcigpKTsKKyAgICB9OworCisgICAgYXV0byBldmVudEhhbmRsZXIgPSBbZXJyb3JIYW5kbGVy
SW1wbCA9IFdURk1vdmUoZXJyb3JIYW5kbGVySW1wbCksIGV2ZW50SGFuZGxlciA9IG1fY2xpZW50
LT54cGNFdmVudEhhbmRsZXIoKV0gKHhwY19vYmplY3RfdCBldmVudCkgbXV0YWJsZSB7CisKKyAg
ICAgICAgaWYgKCFldmVudCB8fCB4cGNfZ2V0X3R5cGUoZXZlbnQpID09IFhQQ19UWVBFX0VSUk9S
KSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2Vycm9ySGFuZGxlcklt
cGwgPSBXVEZNb3ZlKGVycm9ySGFuZGxlckltcGwpLCBldmVudCA9IE9TT2JqZWN0UHRyKGV2ZW50
KV0geworICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlckltcGwoZXZlbnQuZ2V0KCkpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZXZlbnRIYW5kbGVyKSB7CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W2V2ZW50SGFuZGxlciA9IGV2ZW50SGFuZGxlciwgZXZlbnQgPSBPU09iamVjdFB0cihldmVudCld
IHsKKyAgICAgICAgICAgICAgICBldmVudEhhbmRsZXItPmhhbmRsZVhQQ0V2ZW50KGV2ZW50Lmdl
dCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKworICAgIHhwY19jb25u
ZWN0aW9uX3NldF9ldmVudF9oYW5kbGVyKG1feHBjQ29ubmVjdGlvbi5nZXQoKSwgZXZlbnRIYW5k
bGVyKTsKKworICAgIHhwY19jb25uZWN0aW9uX3Jlc3VtZShtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkp
OworCisgICAgaWYgKFVOTElLRUxZKG1fbGF1bmNoT3B0aW9ucy5zaG91bGRNYWtlUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKSkgeworICAgICAgICBldmVudEhhbmRsZXIobnVsbHB0cik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZWYoKTsKKyAgICB4cGNfY29ubmVjdGlvbl9z
ZW5kX21lc3NhZ2Vfd2l0aF9yZXBseShtX3hwY0Nvbm5lY3Rpb24uZ2V0KCksIGJvb3RzdHJhcE1l
c3NhZ2UuZ2V0KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF4oeHBjX29iamVjdF90IHJl
cGx5KSB7CisgICAgICAgIC8vIEVycm9ycyBhcmUgaGFuZGxlZCBpbiB0aGUgZXZlbnQgaGFuZGxl
ci4KKyAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoaXMgYmxvY2sgdG8gYmUgY2FsbGVk
IGFmdGVyIHRoZSBlcnJvciBldmVudCBoYW5kbGVyLCBpbiB3aGljaCBjYXNlIHdlJ3JlIG5vIGxv
bmdlcgorICAgICAgICAvLyBsYXVuY2hpbmcgYW5kIHdlIGFscmVhZHkgdG9vayBjYXJlIG9mIGNs
ZWFuaW5nIHRoaW5ncyB1cC4KKyAgICAgICAgaWYgKGlzTGF1bmNoaW5nKCkgJiYgeHBjX2dldF90
eXBlKHJlcGx5KSAhPSBYUENfVFlQRV9FUlJPUikgeworICAgICAgICAgICAgQVNTRVJUKHhwY19n
ZXRfdHlwZShyZXBseSkgPT0gWFBDX1RZUEVfRElDVElPTkFSWSk7CisgICAgICAgICAgICBBU1NF
UlQoIXN0cmNtcCh4cGNfZGljdGlvbmFyeV9nZXRfc3RyaW5nKHJlcGx5LCAibWVzc2FnZS1uYW1l
IiksICJwcm9jZXNzLWZpbmlzaGVkLWxhdW5jaGluZyIpKTsKKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgICAgICAgICBtYWNoX3BvcnRfdXJlZnNfdCBzZW5kUmlnaHRDb3VudCA9IDA7CisgICAg
ICAgICAgICBtYWNoX3BvcnRfZ2V0X3JlZnMobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9y
dCwgTUFDSF9QT1JUX1JJR0hUX1NFTkQsICZzZW5kUmlnaHRDb3VudCk7CisgICAgICAgICAgICBB
U1NFUlQoc2VuZFJpZ2h0Q291bnQgPj0gMSk7CisjZW5kaWYKKworICAgICAgICAgICAgZGVhbGxv
Y2F0ZVNlbmRSaWdodFNhZmVseShsaXN0ZW5pbmdQb3J0KTsKKworICAgICAgICAgICAgaWYgKCFt
X3hwY0Nvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyB3YXMgdGVy
bWluYXRlZC4KKyAgICAgICAgICAgICAgICBkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzKDAsIElQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBwcm9jZXNzIGhhcyBmaW5pc2hlZCBs
YXVuY2hpbmcsIGdyYWIgdGhlIHBpZCBmcm9tIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAgICAg
cGlkX3QgcHJvY2Vzc0lkZW50aWZpZXIgPSB4cGNfY29ubmVjdGlvbl9nZXRfcGlkKG1feHBjQ29u
bmVjdGlvbi5nZXQoKSk7CisKKyAgICAgICAgICAgIGRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3Mo
cHJvY2Vzc0lkZW50aWZpZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcihsaXN0ZW5pbmdQ
b3J0LCBtX3hwY0Nvbm5lY3Rpb24pKTsKKyAgICAgICAgICAgIG1feHBjQ29ubmVjdGlvbiA9IG51
bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBkZXJlZigpOworICAgIH0pOworfQorCit2b2lk
IFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCit7CisgICAgaWYgKG1faXNMYXVu
Y2hpbmcpIHsKKyAgICAgICAgdGVybWluYXRlWFBDQ29ubmVjdGlvbigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX3Byb2Nlc3NJZGVudGlmaWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBraWxsKG1fcHJvY2Vzc0lkZW50aWZpZXIsIFNJR0tJTEwpOworICAgIG1fcHJv
Y2Vzc0lkZW50aWZpZXIgPSAwOworfQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1J
bnZhbGlkYXRlKCkKK3sKKyAgICB0ZXJtaW5hdGVYUENDb25uZWN0aW9uKCk7Cit9CisKK3ZvaWQg
UHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVYUENDb25uZWN0aW9uKCkKK3sKKyAgICBpZiAoIW1f
eHBjQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgeHBjX2Nvbm5lY3Rpb25fY2Fu
Y2VsKG1feHBjQ29ubmVjdGlvbi5nZXQoKSk7CisgICAgdGVybWluYXRlV2l0aFJlYXNvbihtX3hw
Y0Nvbm5lY3Rpb24uZ2V0KCksIFdlYktpdDo6UmVhc29uQ29kZTo6SW52YWxpZGF0aW9uLCAiUHJv
Y2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUiKTsKKyAgICBtX3hwY0Nvbm5lY3Rpb24g
PSBudWxscHRyOworfQorCit2b2lkIHRlcm1pbmF0ZVdpdGhSZWFzb24oeHBjX2Nvbm5lY3Rpb25f
dCBjb25uZWN0aW9uLCBSZWFzb25Db2RlLCBjb25zdCBjaGFyKikKK3sKKyAgICBBTExPV19ERVBS
RUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgorICAgIHhwY19jb25uZWN0aW9uX2tpbGwoY29ubmVj
dGlvbiwgU0lHS0lMTCk7CisgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDgyNmRiYmE5YzlkMTBkY2FmMjU4MTRlNDg4NDkxZTAyYzQzMmYy
Y2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1hYy5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJj
b25maWcuaCIKLSNpbXBvcnQgIlByb2Nlc3NMYXVuY2hlci5oIgotCi0jaW1wb3J0ICJMb2dnaW5n
LmgiCi0jaW1wb3J0ICJSZWFzb25TUEkuaCIKLSNpbXBvcnQgIldlYlByZWZlcmVuY2VzRGVmYXVs
dFZhbHVlcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4K
LSNpbXBvcnQgPGNydF9leHRlcm5zLmg+Ci0jaW1wb3J0IDxtYWNoLW8vZHlsZC5oPgotI2ltcG9y
dCA8bWFjaC9tYWNoX2Vycm9yLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hpbmUuaD4KLSNpbXBvcnQg
PHBhbC9zcGkvY29jb2EvU2VydmVyc1NQSS5oPgotI2ltcG9ydCA8c3Bhd24uaD4KLSNpbXBvcnQg
PHN5cy9wYXJhbS5oPgotI2ltcG9ydCA8c3lzL3N0YXQuaD4KLSNpbXBvcnQgPHd0Zi9NYWNoU2Vu
ZFJpZ2h0Lmg+Ci0jaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5r
aW5nLmg+Ci0jaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW1wb3J0IDx3dGYvY29jb2EvUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EuaD4KLSNpbXBvcnQgPHd0Zi9zcGkvY2YvQ0ZCdW5k
bGVTUEkuaD4KLSNpbXBvcnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgotI2ltcG9ydCA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQ
TEFURk9STShNQUMpCi0jaW1wb3J0ICJDb2RlU2lnbmluZy5oIgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1zdGF0aWMgY29uc3QgY2hhciogc2VydmljZU5hbWUoY29uc3QgUHJvY2Vz
c0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zKQotewotICAgIHN3aXRjaCAo
bGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSkgewotICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQ
cm9jZXNzVHlwZTo6V2ViOgotICAgICAgICByZXR1cm4gbGF1bmNoT3B0aW9ucy5ub25WYWxpZElu
amVjdGVkQ29kZUFsbG93ZWQgPyAiY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LkRldmVsb3Bt
ZW50IiA6ICJjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQiOwotICAgIGNhc2UgUHJvY2Vzc0xh
dW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazoKLSAgICAgICAgcmV0dXJuICJjb20uYXBwbGUu
V2ViS2l0Lk5ldHdvcmtpbmciOwotI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICBjYXNlIFBy
b2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OkdQVToKLSAgICAgICAgcmV0dXJuICJjb20uYXBw
bGUuV2ViS2l0LkdQVSI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX0FVVEhOKQotICAgIGNhc2Ug
UHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6V2ViQXV0aG46Ci0gICAgICAgIHJldHVybiAi
Y29tLmFwcGxlLldlYktpdC5XZWJBdXRobiI7Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXN0YXRpYyBi
b29sIHNob3VsZExlYWtCb29zdChjb25zdCBQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMm
IGxhdW5jaE9wdGlvbnMpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBVTlVTRURf
UEFSQU0obGF1bmNoT3B0aW9ucyk7Ci0jaWYgSEFWRShSVU5OSU5HQk9BUkRfV0VCS0lUX1BSSU9S
SVRZX1NVUFBPUlQpCi0gICAgLy8gT24gaU9TLCB3ZSBkb24ndCBuZWVkIHRvIGxlYWsgYSBib29z
dCBtZXNzYWdlIHdoZW4gUnVubmluZ0JvYXJkIHByb2Nlc3MgYXNzZXJ0aW9ucyBnaXZlIHVzIHRo
ZQotICAgIC8vIHJpZ2h0IHByaW9yaXRpZXMuCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgcnVubmlu
Z0JvYXJkSGFuZGxlc1ByaW9yaXRpZXMgPSBpc0ZlYXR1cmVGbGFnRW5hYmxlZCgiUkJfZnVsbF9t
YW5hZ2VfV0tfamV0c2FtIl9zKTsKLSAgICByZXR1cm4gIXJ1bm5pbmdCb2FyZEhhbmRsZXNQcmlv
cml0aWVzOwotI2Vsc2UKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZiAvLyBIQVZFKFJVTk5JTkdC
T0FSRF9XRUJLSVRfUFJJT1JJVFlfU1VQUE9SVCkKLSNlbHNlCi0gICAgLy8gT24gTWFjLCBsZWFr
IGEgYm9vc3Qgb250byB0aGUgTmV0d29ya1Byb2Nlc3MsIEdQVVByb2Nlc3MsIGFuZCBXZWJBdXRo
blByb2Nlc3MuCi0jaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQotICAgIGlmIChsYXVuY2hPcHRpb25z
LnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OkdQVSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX0FVVEhOKQotICAgIGlmIChs
YXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6
OldlYkF1dGhuKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotICAgIHJldHVybiBsYXVu
Y2hPcHRpb25zLnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Ok5l
dHdvcms7Ci0jZW5kaWYKLX0KLQotc3RhdGljIE5TU3RyaW5nICpzeXN0ZW1EaXJlY3RvcnlQYXRo
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TU3RyaW5nPj4gcGF0
aCA9IGFkb3B0TlMoW157Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCi0gICAg
ICAgIGNoYXIgKnNpbXVsYXRvclJvb3QgPSBnZXRlbnYoIlNJTVVMQVRPUl9ST09UIik7Ci0gICAg
ICAgIHJldHVybiBzaW11bGF0b3JSb290ID8gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
cy9TeXN0ZW0vIiwgc2ltdWxhdG9yUm9vdF0gOiBAIi9TeXN0ZW0vIjsKLSNlbHNlCi0gICAgICAg
IHJldHVybiBAIi9TeXN0ZW0vIjsKLSNlbmRpZgotICAgIH0oKSBjb3B5XSk7Ci0KLSAgICByZXR1
cm4gcGF0aC5nZXQoKS5nZXQoKTsKLX0KLQotdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MoKQotewotICAgIEFTU0VSVCghbV94cGNDb25uZWN0aW9uKTsKLQotICAgIGNvbnN0IGNo
YXIqIG5hbWU7Ci0gICAgaWYgKCFtX2xhdW5jaE9wdGlvbnMuY3VzdG9tV2ViQ29udGVudFNlcnZp
Y2VCdW5kbGVJZGVudGlmaWVyLmlzTnVsbCgpKQotICAgICAgICBuYW1lID0gbV9sYXVuY2hPcHRp
b25zLmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllci5kYXRhKCk7Ci0gICAg
ZWxzZQotICAgICAgICBuYW1lID0gc2VydmljZU5hbWUobV9sYXVuY2hPcHRpb25zKTsKLQotICAg
IG1feHBjQ29ubmVjdGlvbiA9IGFkb3B0T1NPYmplY3QoeHBjX2Nvbm5lY3Rpb25fY3JlYXRlKG5h
bWUsIG51bGxwdHIpKTsKLQotICAgIHV1aWRfdCB1dWlkOwotICAgIHV1aWRfZ2VuZXJhdGUodXVp
ZCk7Ci0gICAgeHBjX2Nvbm5lY3Rpb25fc2V0X29uZXNob3RfaW5zdGFuY2UobV94cGNDb25uZWN0
aW9uLmdldCgpLCB1dWlkKTsKLQotICAgIC8vIEluaGVyaXQgVUkgcHJvY2VzcyBsb2NhbGl6YXRp
b24uIEl0IGNhbiBiZSBkaWZmZXJlbnQgZnJvbSBjaGlsZCBwcm9jZXNzIGRlZmF1bHQgbG9jYWxp
emF0aW9uOgotICAgIC8vIDEuIFdoZW4gdGhlIGFwcGxpY2F0aW9uIGFuZCBzeXN0ZW0gZnJhbWV3
b3JrcyBzaW1wbHkgaGF2ZSBkaWZmZXJlbnQgbG9jYWxpemVkIHJlc291cmNlcyBhdmFpbGFibGUs
IHdlIHNob3VsZCBtYXRjaCB0aGUgYXBwbGljYXRpb24uCi0gICAgLy8gMS4xLiBBbiBpbXBvcnRh
bnQgY2FzZSBpcyBXZWJLaXRUZXN0UnVubmVyLCB3aGVyZSB3ZSBzaG91bGQgdXNlIEVuZ2xpc2gg
bG9jYWxpemF0aW9ucyBmb3IgYWxsIHN5c3RlbSBmcmFtZXdvcmtzLgotICAgIC8vIDIuIFdoZW4g
QXBwbGVMYW5ndWFnZXMgaXMgcGFzc2VkIGFzIGNvbW1hbmQgbGluZSBhcmd1bWVudCBmb3IgVUkg
cHJvY2Vzcywgb3Igc2V0IGluIGl0cyBwcmVmZXJlbmNlcywgd2Ugc2hvdWxkIHJlc3BlY3QgaXQg
aW4gY2hpbGQgcHJvY2Vzc2VzLgotICAgIGF1dG8gaW5pdGlhbGl6YXRpb25NZXNzYWdlID0gYWRv
cHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0ciwgMCkpOwot
ICAgIF9DRkJ1bmRsZVNldHVwWFBDQm9vdHN0cmFwKGluaXRpYWxpemF0aW9uTWVzc2FnZS5nZXQo
KSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBDbGllbnRzIHRoYXQgc2V0IHRo
ZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBleHBsaWNpdGx5IGRvIG5vdCBoYXZlIHRoZSB2YWx1
ZXMgYXV0b21hdGljYWxseSBmb3J3YXJkZWQgYnkgbGlieHBjLgotICAgIGF1dG8gY29udGFpbmVy
RW52aXJvbm1lbnRWYXJpYWJsZXMgPSBhZG9wdE9TT2JqZWN0KHhwY19kaWN0aW9uYXJ5X2NyZWF0
ZShudWxscHRyLCBudWxscHRyLCAwKSk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGVudmlyb25tZW50
SE9NRSA9IGdldGVudigiSE9NRSIpKQotICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5n
KGNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzLmdldCgpLCAiSE9NRSIsIGVudmlyb25tZW50
SE9NRSk7Ci0gICAgaWYgKGNvbnN0IGNoYXIqIGVudmlyb25tZW50Q0ZGSVhFRF9VU0VSX0hPTUUg
PSBnZXRlbnYoIkNGRklYRURfVVNFUl9IT01FIikpCi0gICAgICAgIHhwY19kaWN0aW9uYXJ5X3Nl
dF9zdHJpbmcoY29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMuZ2V0KCksICJDRkZJWEVEX1VT
RVJfSE9NRSIsIGVudmlyb25tZW50Q0ZGSVhFRF9VU0VSX0hPTUUpOwotICAgIGlmIChjb25zdCBj
aGFyKiBlbnZpcm9ubWVudFRNUERJUiA9IGdldGVudigiVE1QRElSIikpCi0gICAgICAgIHhwY19k
aWN0aW9uYXJ5X3NldF9zdHJpbmcoY29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMuZ2V0KCks
ICJUTVBESVIiLCBlbnZpcm9ubWVudFRNUERJUik7Ci0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X3Zh
bHVlKGluaXRpYWxpemF0aW9uTWVzc2FnZS5nZXQoKSwgIkNvbnRhaW5lckVudmlyb25tZW50VmFy
aWFibGVzIiwgY29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMuZ2V0KCkpOwotI2VuZGlmCi0K
LSAgICBhdXRvIGxhbmd1YWdlc0l0ZXJhdG9yID0gbV9sYXVuY2hPcHRpb25zLmV4dHJhSW5pdGlh
bGl6YXRpb25EYXRhLmZpbmQoIk92ZXJyaWRlTGFuZ3VhZ2VzIik7Ci0gICAgaWYgKGxhbmd1YWdl
c0l0ZXJhdG9yICE9IG1fbGF1bmNoT3B0aW9ucy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5lbmQo
KSkgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oTGFuZ3VhZ2UsIHN0cmVhbSA8PCAiUHJvY2Vz
cyBMYXVuY2hlciBpcyBjb3B5aW5nIE92ZXJyaWRlTGFuZ3VhZ2VzIGludG8gaW5pdGlhbGl6YXRp
b24gbWVzc2FnZTogIiA8PCBsYW5ndWFnZXNJdGVyYXRvci0+dmFsdWUpOwotICAgICAgICBhdXRv
IGxhbmd1YWdlcyA9IGFkb3B0T1NPYmplY3QoeHBjX2FycmF5X2NyZWF0ZShudWxscHRyLCAwKSk7
Ci0gICAgICAgIGZvciAoYXV0byYgbGFuZ3VhZ2UgOiBsYW5ndWFnZXNJdGVyYXRvci0+dmFsdWUu
c3BsaXQoJywnKSkKLSAgICAgICAgICAgIHhwY19hcnJheV9zZXRfc3RyaW5nKGxhbmd1YWdlcy5n
ZXQoKSwgWFBDX0FSUkFZX0FQUEVORCwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
IHhwY19kaWN0aW9uYXJ5X3NldF92YWx1ZShpbml0aWFsaXphdGlvbk1lc3NhZ2UuZ2V0KCksICJP
dmVycmlkZUxhbmd1YWdlcyIsIGxhbmd1YWdlcy5nZXQoKSk7Ci0gICAgfQotCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoaW5pdGlhbGl6YXRpb25NZXNz
YWdlLmdldCgpLCAiV2ViS2l0QnVuZGxlVmVyc2lvbiIsIFtbTlNCdW5kbGUgYnVuZGxlV2l0aElk
ZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViS2l0Il0uaW5mb0RpY3Rpb25hcnlbKF9fYnJpZGdlIE5T
U3RyaW5nICopa0NGQnVuZGxlVmVyc2lvbktleV0gVVRGOFN0cmluZ10pOwotI2VuZGlmCi0gICAg
eHBjX2Nvbm5lY3Rpb25fc2V0X2Jvb3RzdHJhcChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCksIGluaXRp
YWxpemF0aW9uTWVzc2FnZS5nZXQoKSk7Ci0KLSAgICBpZiAoc2hvdWxkTGVha0Jvb3N0KG1fbGF1
bmNoT3B0aW9ucykpIHsKLSAgICAgICAgYXV0byBwcmVCb290c3RyYXBNZXNzYWdlID0gYWRvcHRP
U09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0ciwgMCkpOwotICAg
ICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKHByZUJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCks
ICJtZXNzYWdlLW5hbWUiLCAicHJlLWJvb3RzdHJhcCIpOwotICAgICAgICB4cGNfY29ubmVjdGlv
bl9zZW5kX21lc3NhZ2UobV94cGNDb25uZWN0aW9uLmdldCgpLCBwcmVCb290c3RyYXBNZXNzYWdl
LmdldCgpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ3JlYXRlIHRoZSBsaXN0ZW5pbmcgcG9ydC4K
LSAgICBtYWNoX3BvcnRfdCBsaXN0ZW5pbmdQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgYXV0
byBrciA9IG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklH
SFRfUkVDRUlWRSwgJmxpc3RlbmluZ1BvcnQpOwotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1Mp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgbWFjaCBwb3J0LCBlcnJv
ciAleDogJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpKTsKLSAgICAgICAgQ1JBU0goKTsK
LSAgICB9Ci0KLSAgICAvLyBJbnNlcnQgYSBzZW5kIHJpZ2h0IHNvIHdlIGNhbiBzZW5kIHRvIGl0
LgotICAgIG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5n
UG9ydCwgbGlzdGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOwotCi0gICAgbWFj
aF9wb3J0X3QgcHJldmlvdXNOb3RpZmljYXRpb25Qb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAg
YXV0byBtYyA9IG1hY2hfcG9ydF9yZXF1ZXN0X25vdGlmaWNhdGlvbihtYWNoX3Rhc2tfc2VsZigp
LCBsaXN0ZW5pbmdQb3J0LCBNQUNIX05PVElGWV9OT19TRU5ERVJTLCAwLCBsaXN0ZW5pbmdQb3J0
LCBNQUNIX01TR19UWVBFX01BS0VfU0VORF9PTkNFLCAmcHJldmlvdXNOb3RpZmljYXRpb25Qb3J0
KTsKLSAgICBBU1NFUlQoIXByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCk7Ci0gICAgQVNTRVJUKG1j
ID09IEtFUk5fU1VDQ0VTUyk7Ci0gICAgaWYgKG1jICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAg
ICAvLyBJZiBtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbHMsICdwcmV2aW91c05v
dGlmaWNhdGlvblBvcnQnIHdpbGwgYmUgdW5pbml0aWFsaXplZC4KLSAgICAgICAgTE9HX0VSUk9S
KCJtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbGVkOiAoJXgpICVzIiwgbWMsIG1h
Y2hfZXJyb3Jfc3RyaW5nKG1jKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGNsaWVudElkZW50aWZp
ZXI7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGNsaWVudElkZW50aWZpZXIgPSBjb2RlU2lnbmlu
Z0lkZW50aWZpZXJGb3JDdXJyZW50UHJvY2VzcygpOwotI2VuZGlmCi0gICAgaWYgKGNsaWVudElk
ZW50aWZpZXIuaXNOdWxsKCkpCi0gICAgICAgIGNsaWVudElkZW50aWZpZXIgPSBbW05TQnVuZGxl
IG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOwotCi0gICAgLy8gRklYTUU6IFN3aXRjaCB0
byB4cGNfY29ubmVjdGlvbl9zZXRfYm9vdHN0cmFwIG9uY2UgaXQncyBhdmFpbGFibGUgZXZlcnl3
aGVyZSB3ZSBuZWVkLgotICAgIGF1dG8gYm9vdHN0cmFwTWVzc2FnZSA9IGFkb3B0T1NPYmplY3Qo
eHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKLSAgICAKLSAgICBp
ZiAobV9jbGllbnQpIHsKLSAgICAgICAgaWYgKG1fY2xpZW50LT5zaG91bGRDb25maWd1cmVKU0NG
b3JUZXN0aW5nKCkpCi0gICAgICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfYm9vbChib290c3Ry
YXBNZXNzYWdlLmdldCgpLCAiY29uZmlndXJlLWpzYy1mb3ItdGVzdGluZyIsIHRydWUpOwotICAg
ICAgICBpZiAoIW1fY2xpZW50LT5pc0pJVEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHhwY19kaWN0
aW9uYXJ5X3NldF9ib29sKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJkaXNhYmxlLWppdCIsIHRy
dWUpOwotICAgICAgICBpZiAobV9jbGllbnQtPnNob3VsZEVuYWJsZVNoYXJlZEFycmF5QnVmZmVy
KCkpCi0gICAgICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfYm9vbChib290c3RyYXBNZXNzYWdl
LmdldCgpLCAiZW5hYmxlLXNoYXJlZC1hcnJheS1idWZmZXIiLCB0cnVlKTsKLSAgICAgICAgaWYg
KG1fY2xpZW50LT5zaG91bGRFbmFibGVDYXB0aXZlUG9ydGFsTW9kZSgpKQotICAgICAgICAgICAg
eHBjX2RpY3Rpb25hcnlfc2V0X2Jvb2woYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImVuYWJsZS1j
YXB0aXZlLXBvcnRhbC1tb2RlIiwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgeHBjX2RpY3Rpb25hcnlf
c2V0X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAibWVzc2FnZS1uYW1lIiwgImJvb3Rz
dHJhcCIpOwotCi0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X21hY2hfc2VuZChib290c3RyYXBNZXNz
YWdlLmdldCgpLCAic2VydmVyLXBvcnQiLCBsaXN0ZW5pbmdQb3J0KTsKLQotICAgIHhwY19kaWN0
aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImNsaWVudC1pZGVudGlm
aWVyIiwgIWNsaWVudElkZW50aWZpZXIuaXNFbXB0eSgpID8gY2xpZW50SWRlbnRpZmllci51dGY4
KCkuZGF0YSgpIDogKl9OU0dldFByb2duYW1lKCkpOwotICAgIHhwY19kaWN0aW9uYXJ5X3NldF9z
dHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImNsaWVudC1idW5kbGUtaWRlbnRpZmllciIs
IFdlYkNvcmU6OmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImNs
aWVudC1zZGstdmVyc2lvbiIsIFN0cmluZzo6bnVtYmVyKGFwcGxpY2F0aW9uU0RLVmVyc2lvbigp
KS51dGY4KCkuZGF0YSgpKTsKLSAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGJvb3RzdHJh
cE1lc3NhZ2UuZ2V0KCksICJwcm9jZXNzLWlkZW50aWZpZXIiLCBTdHJpbmc6Om51bWJlcihtX2xh
dW5jaE9wdGlvbnMucHJvY2Vzc0lkZW50aWZpZXIudG9VSW50NjQoKSkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAi
dWktcHJvY2Vzcy1uYW1lIiwgW1tbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gcHJvY2Vzc05h
bWVdIFVURjhTdHJpbmddKTsKLSAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGJvb3RzdHJh
cE1lc3NhZ2UuZ2V0KCksICJzZXJ2aWNlLW5hbWUiLCBuYW1lKTsKLQotICAgIGJvb2wgaXNXZWJL
aXREZXZlbG9wbWVudEJ1aWxkID0gIVtbW1tOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpA
ImNvbS5hcHBsZS5XZWJLaXQiXSBidW5kbGVQYXRoXSBzdHJpbmdCeURlbGV0aW5nTGFzdFBhdGhD
b21wb25lbnRdIGhhc1ByZWZpeDpzeXN0ZW1EaXJlY3RvcnlQYXRoKCldOwotICAgIGlmIChpc1dl
YktpdERldmVsb3BtZW50QnVpbGQpIHsKLSAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X2ZkKGJv
b3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJzdGRvdXQiLCBTVERPVVRfRklMRU5PKTsKLSAgICAgICAg
eHBjX2RpY3Rpb25hcnlfc2V0X2ZkKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJzdGRlcnIiLCBT
VERFUlJfRklMRU5PKTsKLSAgICB9Ci0KLSAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25EYXRh
ID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0ciwg
MCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX2xhdW5jaE9wdGlv
bnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEpCi0gICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9z
dHJpbmcoZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZ2V0KCksIGtleVZhbHVlUGFpci5rZXkudXRm
OCgpLmRhdGEoKSwga2V5VmFsdWVQYWlyLnZhbHVlLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgeHBj
X2RpY3Rpb25hcnlfc2V0X3ZhbHVlKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJleHRyYS1pbml0
aWFsaXphdGlvbi1kYXRhIiwgZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZ2V0KCkpOwotCi0gICAg
YXV0byBlcnJvckhhbmRsZXJJbXBsID0gW3dlYWtQcm9jZXNzTGF1bmNoZXIgPSBXZWFrUHRyIHsg
KnRoaXMgfSwgbGlzdGVuaW5nUG9ydF0gKHhwY19vYmplY3RfdCBldmVudCkgewotICAgICAgICBB
U1NFUlQoIWV2ZW50IHx8IHhwY19nZXRfdHlwZShldmVudCkgPT0gWFBDX1RZUEVfRVJST1IpOwot
ICAgICAgICAKLSAgICAgICAgYXV0byBwcm9jZXNzTGF1bmNoZXIgPSB3ZWFrUHJvY2Vzc0xhdW5j
aGVyLmdldCgpOwotICAgICAgICBpZiAoIXByb2Nlc3NMYXVuY2hlcikKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAoIXByb2Nlc3NMYXVuY2hlci0+aXNMYXVuY2hpbmcoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgIG1hY2hfcG9y
dF91cmVmc190IHNlbmRSaWdodENvdW50ID0gMDsKLSAgICAgICAgbWFjaF9wb3J0X2dldF9yZWZz
KG1hY2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIE1BQ0hfUE9SVF9SSUdIVF9TRU5ELCAm
c2VuZFJpZ2h0Q291bnQpOwotICAgICAgICBBU1NFUlQoc2VuZFJpZ2h0Q291bnQgPj0gMSk7Ci0j
ZW5kaWYKLQotICAgICAgICAvLyBXZSBmYWlsZWQgdG8gbGF1bmNoLiBSZWxlYXNlIHRoZSBzZW5k
IHJpZ2h0LgotICAgICAgICBkZWFsbG9jYXRlU2VuZFJpZ2h0U2FmZWx5KGxpc3RlbmluZ1BvcnQp
OwotCi0gICAgICAgIC8vIEFuZCB0aGUgcmVjZWl2ZSByaWdodC4KLSAgICAgICAgbWFjaF9wb3J0
X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIE1BQ0hfUE9SVF9SSUdI
VF9SRUNFSVZFLCAtMSk7Ci0KLSAgICAgICAgaWYgKHByb2Nlc3NMYXVuY2hlci0+bV94cGNDb25u
ZWN0aW9uKQotICAgICAgICAgICAgeHBjX2Nvbm5lY3Rpb25fY2FuY2VsKHByb2Nlc3NMYXVuY2hl
ci0+bV94cGNDb25uZWN0aW9uLmdldCgpKTsKLSAgICAgICAgcHJvY2Vzc0xhdW5jaGVyLT5tX3hw
Y0Nvbm5lY3Rpb24gPSBudWxscHRyOwotCi0gICAgICAgIHByb2Nlc3NMYXVuY2hlci0+ZGlkRmlu
aXNoTGF1bmNoaW5nUHJvY2VzcygwLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIoKSk7Ci0g
ICAgfTsKLQotICAgIGF1dG8gZXZlbnRIYW5kbGVyID0gW2Vycm9ySGFuZGxlckltcGwgPSBXVEZN
b3ZlKGVycm9ySGFuZGxlckltcGwpLCBldmVudEhhbmRsZXIgPSBtX2NsaWVudC0+eHBjRXZlbnRI
YW5kbGVyKCldICh4cGNfb2JqZWN0X3QgZXZlbnQpIG11dGFibGUgewotCi0gICAgICAgIGlmICgh
ZXZlbnQgfHwgeHBjX2dldF90eXBlKGV2ZW50KSA9PSBYUENfVFlQRV9FUlJPUikgewotICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtlcnJvckhhbmRsZXJJbXBsID0gV1RGTW92
ZShlcnJvckhhbmRsZXJJbXBsKSwgZXZlbnQgPSBPU09iamVjdFB0cihldmVudCldIHsKLSAgICAg
ICAgICAgICAgICBlcnJvckhhbmRsZXJJbXBsKGV2ZW50LmdldCgpKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV2ZW50SGFu
ZGxlcikgewotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtldmVudEhhbmRs
ZXIgPSBldmVudEhhbmRsZXIsIGV2ZW50ID0gT1NPYmplY3RQdHIoZXZlbnQpXSB7Ci0gICAgICAg
ICAgICAgICAgZXZlbnRIYW5kbGVyLT5oYW5kbGVYUENFdmVudChldmVudC5nZXQoKSk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB4cGNfY29ubmVjdGlvbl9zZXRf
ZXZlbnRfaGFuZGxlcihtX3hwY0Nvbm5lY3Rpb24uZ2V0KCksIGV2ZW50SGFuZGxlcik7Ci0KLSAg
ICB4cGNfY29ubmVjdGlvbl9yZXN1bWUobV94cGNDb25uZWN0aW9uLmdldCgpKTsKLQotICAgIGlm
IChVTkxJS0VMWShtX2xhdW5jaE9wdGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZykpIHsKLSAgICAgICAgZXZlbnRIYW5kbGVyKG51bGxwdHIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgcmVmKCk7Ci0gICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdl
X3dpdGhfcmVwbHkobV94cGNDb25uZWN0aW9uLmdldCgpLCBib290c3RyYXBNZXNzYWdlLmdldCgp
LCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeKHhwY19vYmplY3RfdCByZXBseSkgewotICAg
ICAgICAvLyBFcnJvcnMgYXJlIGhhbmRsZWQgaW4gdGhlIGV2ZW50IGhhbmRsZXIuCi0gICAgICAg
IC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGlzIGJsb2NrIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUg
ZXJyb3IgZXZlbnQgaGFuZGxlciwgaW4gd2hpY2ggY2FzZSB3ZSdyZSBubyBsb25nZXIKLSAgICAg
ICAgLy8gbGF1bmNoaW5nIGFuZCB3ZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiBjbGVhbmluZyB0aGlu
Z3MgdXAuCi0gICAgICAgIGlmIChpc0xhdW5jaGluZygpICYmIHhwY19nZXRfdHlwZShyZXBseSkg
IT0gWFBDX1RZUEVfRVJST1IpIHsKLSAgICAgICAgICAgIEFTU0VSVCh4cGNfZ2V0X3R5cGUocmVw
bHkpID09IFhQQ19UWVBFX0RJQ1RJT05BUlkpOwotICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAo
eHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhyZXBseSwgIm1lc3NhZ2UtbmFtZSIpLCAicHJvY2Vz
cy1maW5pc2hlZC1sYXVuY2hpbmciKSk7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICAg
ICAgbWFjaF9wb3J0X3VyZWZzX3Qgc2VuZFJpZ2h0Q291bnQgPSAwOwotICAgICAgICAgICAgbWFj
aF9wb3J0X2dldF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIE1BQ0hfUE9S
VF9SSUdIVF9TRU5ELCAmc2VuZFJpZ2h0Q291bnQpOwotICAgICAgICAgICAgQVNTRVJUKHNlbmRS
aWdodENvdW50ID49IDEpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIGRlYWxsb2NhdGVTZW5kUmln
aHRTYWZlbHkobGlzdGVuaW5nUG9ydCk7Ci0KLSAgICAgICAgICAgIGlmICghbV94cGNDb25uZWN0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQuCi0g
ICAgICAgICAgICAgICAgZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcygwLCBJUEM6OkNvbm5lY3Rp
b246OklkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBUaGUgcHJvY2VzcyBoYXMgZmluaXNoZWQgbGF1bmNoaW5nLCBn
cmFiIHRoZSBwaWQgZnJvbSB0aGUgY29ubmVjdGlvbi4KLSAgICAgICAgICAgIHBpZF90IHByb2Nl
c3NJZGVudGlmaWVyID0geHBjX2Nvbm5lY3Rpb25fZ2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0
KCkpOwotCi0gICAgICAgICAgICBkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzKHByb2Nlc3NJZGVu
dGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIobGlzdGVuaW5nUG9ydCwgbV94cGND
b25uZWN0aW9uKSk7Ci0gICAgICAgICAgICBtX3hwY0Nvbm5lY3Rpb24gPSBudWxscHRyOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZGVyZWYoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBQcm9jZXNzTGF1
bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQotewotICAgIGlmIChtX2lzTGF1bmNoaW5nKSB7Ci0g
ICAgICAgIHRlcm1pbmF0ZVhQQ0Nvbm5lY3Rpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9wcm9jZXNzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGtpbGwobV9wcm9jZXNzSWRlbnRpZmllciwgU0lHS0lMTCk7Ci0gICAgbV9wcm9jZXNzSWRl
bnRpZmllciA9IDA7Ci19Ci0gICAgCi12b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZh
bGlkYXRlKCkKLXsKLSAgICB0ZXJtaW5hdGVYUENDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQgUHJv
Y2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVYUENDb25uZWN0aW9uKCkKLXsKLSAgICBpZiAoIW1feHBj
Q29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgeHBjX2Nvbm5lY3Rpb25fY2FuY2Vs
KG1feHBjQ29ubmVjdGlvbi5nZXQoKSk7Ci0gICAgdGVybWluYXRlV2l0aFJlYXNvbihtX3hwY0Nv
bm5lY3Rpb24uZ2V0KCksIFdlYktpdDo6UmVhc29uQ29kZTo6SW52YWxpZGF0aW9uLCAiUHJvY2Vz
c0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUiKTsKLSAgICBtX3hwY0Nvbm5lY3Rpb24gPSBu
dWxscHRyOwotfQotCi12b2lkIHRlcm1pbmF0ZVdpdGhSZWFzb24oeHBjX2Nvbm5lY3Rpb25fdCBj
b25uZWN0aW9uLCBSZWFzb25Db2RlLCBjb25zdCBjaGFyKikKLXsKLSAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIHhwY19jb25uZWN0aW9uX2tpbGwoY29ubmVjdGlv
biwgU0lHS0lMTCk7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDUxM2UyODhlZmZiNDY5OTAzMGRlM2Q5M2ExMjU5MTZj
NjMzYmVhNi4uNjgyNjdkZTFjMzc5NGQ2MzU2MjgxZDM4NDgzNGNlZTgzYmNjZDgzMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNzg4
LDYgKzM3ODgsNyBAQAogCQk0NjgwOUE3QjIzRDkyMjUzMDBDMjk3RDAgLyogV2ViQ29va2llQ2Fj
aGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29va2llQ2Fj
aGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjgzNTY5QTIxRTgxQ0M3MDA2
RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvdmlzaW9uYWxQYWdlUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDY4MzU2OUIyMUU4MUNDNzAwNkUyN0EzIC8qIFByb3Zpc2lvbmFsUGFnZVByb3h5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3Zpc2lvbmFsUGFnZVBy
b3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDY5REU4MDIyNzNFQ0M1RDAw
OTMwMjc2IC8qIFByb2Nlc3NMYXVuY2hlckRhcndpbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFByb2Nlc3NMYXVuY2hlckRhcndpbi5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDZBMkI2MDYxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tncm91bmRQ
cm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBCYWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkEyQjYwNzFFNTY3NUEyMDBDM0RFREEgLyogQmFj
a2dyb3VuZFByb2Nlc3NSZXNwb25zaXZlbmVzc1RpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkFDNTMyNDI1REVEODFFMDAzQjU3RUMgLyogR1BV
UHJvY2Vzc0Nvbm5lY3Rpb25QYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVByb2Nlc3ND
b25uZWN0aW9uUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTE4
Nyw3ICs1MTg4LDYgQEAKIAkJQkMxMTFCMEExMTJGNUU0RjAwMzM3QkFCIC8qIFdlYkZyYW1lUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRnJhbWVQcm94
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTExQjBCMTEyRjVFNEYwMDMz
N0JBQiAvKiBXZWJQYWdlUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBXZWJQYWdlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzEx
MUIwRDExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3NQcm94eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUJDMTExQjFCMTEyRjVGRTYwMDMzN0JBQiAvKiBQcm9jZXNzTGF1
bmNoZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm9j
ZXNzTGF1bmNoZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTExQjVC
MTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViRXZlbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMTExQjVDMTEyRjYyOTgwMDMzN0JBQiAvKiBXZWJFdmVudEZhY3RvcnkubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudEZhY3RvcnkubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTRERjc1MTIwQjVCNzkwMDgyNkMwQyAv
KiBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTg0MTcsNiArODQxNywxNCBAQAogCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNDY5REU4MDEyNzNFQ0M1RDAwOTMwMjc2IC8qIGRh
cndpbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNDY5
REU4MDIyNzNFQ0M1RDAwOTMwMjc2IC8qIFByb2Nlc3NMYXVuY2hlckRhcndpbi5tbSAqLywKKwkJ
CSk7CisJCQlwYXRoID0gZGFyd2luOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJNEE0MTBGNDExOUFGN0IyNzAwMkVCQUI1IC8qIE1lZGlhU3RyZWFtICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEwNDI2LDIxICsxMDQzNCwxMyBAQAog
CQlCQzExMUIxODExMkY1RkI0MDAzMzdCQUIgLyogTGF1bmNoZXIgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUJDMTExQjE5MTEyRjVGQzUwMDMzN0JBQiAv
KiBtYWMgKi8sCisJCQkJNDY5REU4MDEyNzNFQ0M1RDAwOTMwMjc2IC8qIGRhcndpbiAqLywKIAkJ
CQkxQUUxMTdGNTExREJCMzA5MDA5ODE2MTUgLyogUHJvY2Vzc0xhdW5jaGVyLmNwcCAqLywKIAkJ
CQlCQzFBN0M1NzExMzZFMTlDMDBGQjcxNjcgLyogUHJvY2Vzc0xhdW5jaGVyLmggKi8sCiAJCQkp
OwogCQkJcGF0aCA9IExhdW5jaGVyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
LQkJQkMxMTFCMTkxMTJGNUZDNTAwMzM3QkFCIC8qIG1hYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkMxMTFCMUIxMTJGNUZFNjAwMzM3QkFCIC8qIFBy
b2Nlc3NMYXVuY2hlck1hYy5tbSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbWFjOwotCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJQkMxMTFCNDcxMTJGNjE2OTAwMzM3QkFCIC8qIG1h
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444085</attachid>
            <date>2021-11-12 11:28:50 -0800</date>
            <delta_ts>2021-11-12 12:38:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233045-20211112112849.patch</filename>
            <type>text/plain</type>
            <size>37122</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRjMjcyMTkwZmNiNDM0YTUy
OTMwNDg4NGRmMTk5NDcyNzZlMjVhYTcuLmNlMmYzZThiZGRjMDZhYzU3NjcwZjFiYmI2ZTA1NmVh
NjU4MmVhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjEtMTEtMTIgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgUHJvY2Vzc0xhdW5jaGVy
TWFjLm1tIHRvIFByb2Nlc3NMYXVuY2hlckNvY29hLm1tCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMwNDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzg1MzQ3MTA3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEZvbGxvdy11cCB0byByMjg1NzI5IHRvIHJlbmFtZSB0byBQcm9jZXNzTGF1bmNoZXJDb2Nv
YS5tbSBpbnN0ZWFkIG9mIFByb2Nlc3NMYXVuY2hlckRhcndpbi5tbQorICAgICAgICBnaXZlbiB0
aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB1c2luZyBOU0J1bmRsZS4KKworICAgICAgICAqIFNv
dXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL2NvY29hL1Byb2Nl
c3NMYXVuY2hlckNvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TGF1bmNoZXIvZGFyd2luL1Byb2Nlc3NMYXVuY2hlckRhcndpbi5tbS4KKyAgICAgICAgKFdlYktp
dDo6c2VydmljZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpzaG91bGRMZWFrQm9vc3QpOgorICAg
ICAgICAoV2ViS2l0OjpzeXN0ZW1EaXJlY3RvcnlQYXRoKToKKyAgICAgICAgKFdlYktpdDo6UHJv
Y2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xh
dW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UHJvY2Vzc0xhdW5j
aGVyOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNo
ZXI6OnRlcm1pbmF0ZVhQQ0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0Ojp0ZXJtaW5hdGVX
aXRoUmVhc29uKToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KwogMjAyMS0xMS0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IERpc2FibGUgTWF0aE1MIHdoZW4gaW4gQ2FwdGl2ZSBQb3J0YWwgTW9kZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CmluZGV4IDg5ZjViYWUwMmIzNzFjZjZkNDgyMjAwNDU1Zjk2MTExYzFiNmIyMjIuLmNh
OGQyMzk1ZmE5ZGYxMThmOWNlMGJhMWQyM2Q3ZjM4ZDdhMjIxYTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQKQEAgLTUxMSw3ICs1MTEsNyBAQCBVSVByb2Nlc3MvaW9zL1dLVGV4dFNlbGVjdGlvblJl
Y3QubW0KIFVJUHJvY2Vzcy9pb3MvV0tVU0RQcmV2aWV3Vmlldy5tbQogVUlQcm9jZXNzL2lvcy9X
S1dlYkV2ZW50Lm1tCiAKLVVJUHJvY2Vzcy9MYXVuY2hlci9kYXJ3aW4vUHJvY2Vzc0xhdW5jaGVy
RGFyd2luLm1tCitVSVByb2Nlc3MvTGF1bmNoZXIvY29jb2EvUHJvY2Vzc0xhdW5jaGVyQ29jb2Eu
bW0KIAogVUlQcm9jZXNzL21hYy9Db3JyZWN0aW9uUGFuZWwubW0KIFVJUHJvY2Vzcy9tYWMvRGlz
cGxheUxpbmsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hl
ci9jb2NvYS9Qcm9jZXNzTGF1bmNoZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0xhdW5jaGVyL2NvY29hL1Byb2Nlc3NMYXVuY2hlckNvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiOGQz
OGM1M2VkYWM4M2RkYzA2NDUxNjhiY2UzNDY0ODdiZjMwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9jb2NvYS9Qcm9jZXNzTGF1bmNoZXJDb2Nv
YS5tbQpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJQcm9jZXNzTGF1bmNoZXIuaCIKKworI2ltcG9ydCAiTG9nZ2luZy5oIgor
I2ltcG9ydCAiUmVhc29uU1BJLmgiCisjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1
ZXMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CisjaW1w
b3J0IDxjcnRfZXh0ZXJucy5oPgorI2ltcG9ydCA8bWFjaC1vL2R5bGQuaD4KKyNpbXBvcnQgPG1h
Y2gvbWFjaF9lcnJvci5oPgorI2ltcG9ydCA8bWFjaC9tYWNoaW5lLmg+CisjaW1wb3J0IDxwYWwv
c3BpL2NvY29hL1NlcnZlcnNTUEkuaD4KKyNpbXBvcnQgPHNwYXduLmg+CisjaW1wb3J0IDxzeXMv
cGFyYW0uaD4KKyNpbXBvcnQgPHN5cy9zdGF0Lmg+CisjaW1wb3J0IDx3dGYvTWFjaFNlbmRSaWdo
dC5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5o
PgorI2ltcG9ydCA8d3RmL1RocmVhZGluZy5oPgorI2ltcG9ydCA8d3RmL2NvY29hL1J1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrc0NvY29hLmg+CisjaW1wb3J0IDx3dGYvc3BpL2NmL0NGQnVuZGxlU1BJ
Lmg+CisjaW1wb3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZP
Uk0oTUFDKQorI2ltcG9ydCAiQ29kZVNpZ25pbmcuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lKGNvbnN0IFByb2Nlc3NMYXVu
Y2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKK3sKKyAgICBzd2l0Y2ggKGxhdW5j
aE9wdGlvbnMucHJvY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vz
c1R5cGU6OldlYjoKKyAgICAgICAgcmV0dXJuIGxhdW5jaE9wdGlvbnMubm9uVmFsaWRJbmplY3Rl
ZENvZGVBbGxvd2VkID8gImNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5EZXZlbG9wbWVudCIg
OiAiY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50IjsKKyAgICBjYXNlIFByb2Nlc3NMYXVuY2hl
cjo6UHJvY2Vzc1R5cGU6Ok5ldHdvcms6CisgICAgICAgIHJldHVybiAiY29tLmFwcGxlLldlYktp
dC5OZXR3b3JraW5nIjsKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgY2FzZSBQcm9jZXNz
TGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpHUFU6CisgICAgICAgIHJldHVybiAiY29tLmFwcGxlLldl
YktpdC5HUFUiOworI2VuZGlmCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBjYXNlIFByb2Nl
c3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OldlYkF1dGhuOgorICAgICAgICByZXR1cm4gImNvbS5h
cHBsZS5XZWJLaXQuV2ViQXV0aG4iOworI2VuZGlmCisgICAgfQorfQorCitzdGF0aWMgYm9vbCBz
aG91bGRMZWFrQm9vc3QoY29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVu
Y2hPcHRpb25zKQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgVU5VU0VEX1BBUkFN
KGxhdW5jaE9wdGlvbnMpOworI2lmIEhBVkUoUlVOTklOR0JPQVJEX1dFQktJVF9QUklPUklUWV9T
VVBQT1JUKQorICAgIC8vIE9uIGlPUywgd2UgZG9uJ3QgbmVlZCB0byBsZWFrIGEgYm9vc3QgbWVz
c2FnZSB3aGVuIFJ1bm5pbmdCb2FyZCBwcm9jZXNzIGFzc2VydGlvbnMgZ2l2ZSB1cyB0aGUKKyAg
ICAvLyByaWdodCBwcmlvcml0aWVzLgorICAgIHN0YXRpYyBjb25zdCBib29sIHJ1bm5pbmdCb2Fy
ZEhhbmRsZXNQcmlvcml0aWVzID0gaXNGZWF0dXJlRmxhZ0VuYWJsZWQoIlJCX2Z1bGxfbWFuYWdl
X1dLX2pldHNhbSJfcyk7CisgICAgcmV0dXJuICFydW5uaW5nQm9hcmRIYW5kbGVzUHJpb3JpdGll
czsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYgLy8gSEFWRShSVU5OSU5HQk9BUkRf
V0VCS0lUX1BSSU9SSVRZX1NVUFBPUlQpCisjZWxzZQorICAgIC8vIE9uIE1hYywgbGVhayBhIGJv
b3N0IG9udG8gdGhlIE5ldHdvcmtQcm9jZXNzLCBHUFVQcm9jZXNzLCBhbmQgV2ViQXV0aG5Qcm9j
ZXNzLgorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBpZiAobGF1bmNoT3B0aW9ucy5wcm9j
ZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpHUFUpCisgICAgICAgIHJl
dHVybiB0cnVlOworI2VuZGlmCisjaWYgRU5BQkxFKFdFQl9BVVRITikKKyAgICBpZiAobGF1bmNo
T3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpXZWJB
dXRobikKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKyAgICByZXR1cm4gbGF1bmNoT3B0
aW9ucy5wcm9jZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3Jr
OworI2VuZGlmCit9CisKK3N0YXRpYyBOU1N0cmluZyAqc3lzdGVtRGlyZWN0b3J5UGF0aCgpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU1N0cmluZz4+IHBhdGggPSBh
ZG9wdE5TKFteeworI2lmIFBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQorICAgICAgICBj
aGFyICpzaW11bGF0b3JSb290ID0gZ2V0ZW52KCJTSU1VTEFUT1JfUk9PVCIpOworICAgICAgICBy
ZXR1cm4gc2ltdWxhdG9yUm9vdCA/IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMvU3lz
dGVtLyIsIHNpbXVsYXRvclJvb3RdIDogQCIvU3lzdGVtLyI7CisjZWxzZQorICAgICAgICByZXR1
cm4gQCIvU3lzdGVtLyI7CisjZW5kaWYKKyAgICB9KCkgY29weV0pOworCisgICAgcmV0dXJuIHBh
dGguZ2V0KCkuZ2V0KCk7Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNz
KCkKK3sKKyAgICBBU1NFUlQoIW1feHBjQ29ubmVjdGlvbik7CisKKyAgICBjb25zdCBjaGFyKiBu
YW1lOworICAgIGlmICghbV9sYXVuY2hPcHRpb25zLmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVu
ZGxlSWRlbnRpZmllci5pc051bGwoKSkKKyAgICAgICAgbmFtZSA9IG1fbGF1bmNoT3B0aW9ucy5j
dXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIuZGF0YSgpOworICAgIGVsc2UK
KyAgICAgICAgbmFtZSA9IHNlcnZpY2VOYW1lKG1fbGF1bmNoT3B0aW9ucyk7CisKKyAgICBtX3hw
Y0Nvbm5lY3Rpb24gPSBhZG9wdE9TT2JqZWN0KHhwY19jb25uZWN0aW9uX2NyZWF0ZShuYW1lLCBu
dWxscHRyKSk7CisKKyAgICB1dWlkX3QgdXVpZDsKKyAgICB1dWlkX2dlbmVyYXRlKHV1aWQpOwor
ICAgIHhwY19jb25uZWN0aW9uX3NldF9vbmVzaG90X2luc3RhbmNlKG1feHBjQ29ubmVjdGlvbi5n
ZXQoKSwgdXVpZCk7CisKKyAgICAvLyBJbmhlcml0IFVJIHByb2Nlc3MgbG9jYWxpemF0aW9uLiBJ
dCBjYW4gYmUgZGlmZmVyZW50IGZyb20gY2hpbGQgcHJvY2VzcyBkZWZhdWx0IGxvY2FsaXphdGlv
bjoKKyAgICAvLyAxLiBXaGVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgc3lzdGVtIGZyYW1ld29ya3Mg
c2ltcGx5IGhhdmUgZGlmZmVyZW50IGxvY2FsaXplZCByZXNvdXJjZXMgYXZhaWxhYmxlLCB3ZSBz
aG91bGQgbWF0Y2ggdGhlIGFwcGxpY2F0aW9uLgorICAgIC8vIDEuMS4gQW4gaW1wb3J0YW50IGNh
c2UgaXMgV2ViS2l0VGVzdFJ1bm5lciwgd2hlcmUgd2Ugc2hvdWxkIHVzZSBFbmdsaXNoIGxvY2Fs
aXphdGlvbnMgZm9yIGFsbCBzeXN0ZW0gZnJhbWV3b3Jrcy4KKyAgICAvLyAyLiBXaGVuIEFwcGxl
TGFuZ3VhZ2VzIGlzIHBhc3NlZCBhcyBjb21tYW5kIGxpbmUgYXJndW1lbnQgZm9yIFVJIHByb2Nl
c3MsIG9yIHNldCBpbiBpdHMgcHJlZmVyZW5jZXMsIHdlIHNob3VsZCByZXNwZWN0IGl0IGluIGNo
aWxkIHByb2Nlc3Nlcy4KKyAgICBhdXRvIGluaXRpYWxpemF0aW9uTWVzc2FnZSA9IGFkb3B0T1NP
YmplY3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKKyAgICBf
Q0ZCdW5kbGVTZXR1cFhQQ0Jvb3RzdHJhcChpbml0aWFsaXphdGlvbk1lc3NhZ2UuZ2V0KCkpOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gQ2xpZW50cyB0aGF0IHNldCB0aGVzZSBl
bnZpcm9ubWVudCB2YXJpYWJsZXMgZXhwbGljaXRseSBkbyBub3QgaGF2ZSB0aGUgdmFsdWVzIGF1
dG9tYXRpY2FsbHkgZm9yd2FyZGVkIGJ5IGxpYnhwYy4KKyAgICBhdXRvIGNvbnRhaW5lckVudmly
b25tZW50VmFyaWFibGVzID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVs
bHB0ciwgbnVsbHB0ciwgMCkpOworICAgIGlmIChjb25zdCBjaGFyKiBlbnZpcm9ubWVudEhPTUUg
PSBnZXRlbnYoIkhPTUUiKSkKKyAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhjb250
YWluZXJFbnZpcm9ubWVudFZhcmlhYmxlcy5nZXQoKSwgIkhPTUUiLCBlbnZpcm9ubWVudEhPTUUp
OworICAgIGlmIChjb25zdCBjaGFyKiBlbnZpcm9ubWVudENGRklYRURfVVNFUl9IT01FID0gZ2V0
ZW52KCJDRkZJWEVEX1VTRVJfSE9NRSIpKQorICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3Ry
aW5nKGNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzLmdldCgpLCAiQ0ZGSVhFRF9VU0VSX0hP
TUUiLCBlbnZpcm9ubWVudENGRklYRURfVVNFUl9IT01FKTsKKyAgICBpZiAoY29uc3QgY2hhciog
ZW52aXJvbm1lbnRUTVBESVIgPSBnZXRlbnYoIlRNUERJUiIpKQorICAgICAgICB4cGNfZGljdGlv
bmFyeV9zZXRfc3RyaW5nKGNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzLmdldCgpLCAiVE1Q
RElSIiwgZW52aXJvbm1lbnRUTVBESVIpOworICAgIHhwY19kaWN0aW9uYXJ5X3NldF92YWx1ZShp
bml0aWFsaXphdGlvbk1lc3NhZ2UuZ2V0KCksICJDb250YWluZXJFbnZpcm9ubWVudFZhcmlhYmxl
cyIsIGNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzLmdldCgpKTsKKyNlbmRpZgorCisgICAg
YXV0byBsYW5ndWFnZXNJdGVyYXRvciA9IG1fbGF1bmNoT3B0aW9ucy5leHRyYUluaXRpYWxpemF0
aW9uRGF0YS5maW5kKCJPdmVycmlkZUxhbmd1YWdlcyIpOworICAgIGlmIChsYW5ndWFnZXNJdGVy
YXRvciAhPSBtX2xhdW5jaE9wdGlvbnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZW5kKCkpIHsK
KyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKExhbmd1YWdlLCBzdHJlYW0gPDwgIlByb2Nlc3MgTGF1
bmNoZXIgaXMgY29weWluZyBPdmVycmlkZUxhbmd1YWdlcyBpbnRvIGluaXRpYWxpemF0aW9uIG1l
c3NhZ2U6ICIgPDwgbGFuZ3VhZ2VzSXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgYXV0byBsYW5n
dWFnZXMgPSBhZG9wdE9TT2JqZWN0KHhwY19hcnJheV9jcmVhdGUobnVsbHB0ciwgMCkpOworICAg
ICAgICBmb3IgKGF1dG8mIGxhbmd1YWdlIDogbGFuZ3VhZ2VzSXRlcmF0b3ItPnZhbHVlLnNwbGl0
KCcsJykpCisgICAgICAgICAgICB4cGNfYXJyYXlfc2V0X3N0cmluZyhsYW5ndWFnZXMuZ2V0KCks
IFhQQ19BUlJBWV9BUFBFTkQsIGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB4cGNf
ZGljdGlvbmFyeV9zZXRfdmFsdWUoaW5pdGlhbGl6YXRpb25NZXNzYWdlLmdldCgpLCAiT3ZlcnJp
ZGVMYW5ndWFnZXMiLCBsYW5ndWFnZXMuZ2V0KCkpOworICAgIH0KKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGluaXRpYWxpemF0aW9uTWVzc2FnZS5n
ZXQoKSwgIldlYktpdEJ1bmRsZVZlcnNpb24iLCBbW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlm
aWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmluZm9EaWN0aW9uYXJ5WyhfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDRkJ1bmRsZVZlcnNpb25LZXldIFVURjhTdHJpbmddKTsKKyNlbmRpZgorICAgIHhwY19j
b25uZWN0aW9uX3NldF9ib290c3RyYXAobV94cGNDb25uZWN0aW9uLmdldCgpLCBpbml0aWFsaXph
dGlvbk1lc3NhZ2UuZ2V0KCkpOworCisgICAgaWYgKHNob3VsZExlYWtCb29zdChtX2xhdW5jaE9w
dGlvbnMpKSB7CisgICAgICAgIGF1dG8gcHJlQm9vdHN0cmFwTWVzc2FnZSA9IGFkb3B0T1NPYmpl
Y3QoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKKyAgICAgICAg
eHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhwcmVCb290c3RyYXBNZXNzYWdlLmdldCgpLCAibWVz
c2FnZS1uYW1lIiwgInByZS1ib290c3RyYXAiKTsKKyAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2Vu
ZF9tZXNzYWdlKG1feHBjQ29ubmVjdGlvbi5nZXQoKSwgcHJlQm9vdHN0cmFwTWVzc2FnZS5nZXQo
KSk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlIHRoZSBsaXN0ZW5pbmcgcG9ydC4KKyAgICBtYWNo
X3BvcnRfdCBsaXN0ZW5pbmdQb3J0ID0gTUFDSF9QT1JUX05VTEw7CisgICAgYXV0byBrciA9IG1h
Y2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlW
RSwgJmxpc3RlbmluZ1BvcnQpOworICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgbWFjaCBwb3J0LCBlcnJvciAleDogJXMi
LCBrciwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisK
KyAgICAvLyBJbnNlcnQgYSBzZW5kIHJpZ2h0IHNvIHdlIGNhbiBzZW5kIHRvIGl0LgorICAgIG1h
Y2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlz
dGVuaW5nUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOworCisgICAgbWFjaF9wb3J0X3Qg
cHJldmlvdXNOb3RpZmljYXRpb25Qb3J0ID0gTUFDSF9QT1JUX05VTEw7CisgICAgYXV0byBtYyA9
IG1hY2hfcG9ydF9yZXF1ZXN0X25vdGlmaWNhdGlvbihtYWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5p
bmdQb3J0LCBNQUNIX05PVElGWV9OT19TRU5ERVJTLCAwLCBsaXN0ZW5pbmdQb3J0LCBNQUNIX01T
R19UWVBFX01BS0VfU0VORF9PTkNFLCAmcHJldmlvdXNOb3RpZmljYXRpb25Qb3J0KTsKKyAgICBB
U1NFUlQoIXByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCk7CisgICAgQVNTRVJUKG1jID09IEtFUk5f
U1VDQ0VTUyk7CisgICAgaWYgKG1jICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAvLyBJZiBt
YWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbHMsICdwcmV2aW91c05vdGlmaWNhdGlv
blBvcnQnIHdpbGwgYmUgdW5pbml0aWFsaXplZC4KKyAgICAgICAgTE9HX0VSUk9SKCJtYWNoX3Bv
cnRfcmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbGVkOiAoJXgpICVzIiwgbWMsIG1hY2hfZXJyb3Jf
c3RyaW5nKG1jKSk7CisgICAgfQorCisgICAgU3RyaW5nIGNsaWVudElkZW50aWZpZXI7CisjaWYg
UExBVEZPUk0oTUFDKQorICAgIGNsaWVudElkZW50aWZpZXIgPSBjb2RlU2lnbmluZ0lkZW50aWZp
ZXJGb3JDdXJyZW50UHJvY2VzcygpOworI2VuZGlmCisgICAgaWYgKGNsaWVudElkZW50aWZpZXIu
aXNOdWxsKCkpCisgICAgICAgIGNsaWVudElkZW50aWZpZXIgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIGJ1bmRsZUlkZW50aWZpZXJdOworCisgICAgLy8gRklYTUU6IFN3aXRjaCB0byB4cGNfY29u
bmVjdGlvbl9zZXRfYm9vdHN0cmFwIG9uY2UgaXQncyBhdmFpbGFibGUgZXZlcnl3aGVyZSB3ZSBu
ZWVkLgorICAgIGF1dG8gYm9vdHN0cmFwTWVzc2FnZSA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rp
b25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKKworICAgIGlmIChtX2NsaWVudCkg
eworICAgICAgICBpZiAobV9jbGllbnQtPnNob3VsZENvbmZpZ3VyZUpTQ0ZvclRlc3RpbmcoKSkK
KyAgICAgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9ib29sKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0
KCksICJjb25maWd1cmUtanNjLWZvci10ZXN0aW5nIiwgdHJ1ZSk7CisgICAgICAgIGlmICghbV9j
bGllbnQtPmlzSklURW5hYmxlZCgpKQorICAgICAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X2Jv
b2woYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImRpc2FibGUtaml0IiwgdHJ1ZSk7CisgICAgICAg
IGlmIChtX2NsaWVudC0+c2hvdWxkRW5hYmxlU2hhcmVkQXJyYXlCdWZmZXIoKSkKKyAgICAgICAg
ICAgIHhwY19kaWN0aW9uYXJ5X3NldF9ib29sKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJlbmFi
bGUtc2hhcmVkLWFycmF5LWJ1ZmZlciIsIHRydWUpOworICAgICAgICBpZiAobV9jbGllbnQtPnNo
b3VsZEVuYWJsZUNhcHRpdmVQb3J0YWxNb2RlKCkpCisgICAgICAgICAgICB4cGNfZGljdGlvbmFy
eV9zZXRfYm9vbChib290c3RyYXBNZXNzYWdlLmdldCgpLCAiZW5hYmxlLWNhcHRpdmUtcG9ydGFs
LW1vZGUiLCB0cnVlKTsKKyAgICB9CisKKyAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGJv
b3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJtZXNzYWdlLW5hbWUiLCAiYm9vdHN0cmFwIik7CisKKyAg
ICB4cGNfZGljdGlvbmFyeV9zZXRfbWFjaF9zZW5kKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJz
ZXJ2ZXItcG9ydCIsIGxpc3RlbmluZ1BvcnQpOworCisgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0
cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAiY2xpZW50LWlkZW50aWZpZXIiLCAhY2xpZW50
SWRlbnRpZmllci5pc0VtcHR5KCkgPyBjbGllbnRJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkgOiAq
X05TR2V0UHJvZ25hbWUoKSk7CisgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhib290c3Ry
YXBNZXNzYWdlLmdldCgpLCAiY2xpZW50LWJ1bmRsZS1pZGVudGlmaWVyIiwgV2ViQ29yZTo6YXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7CisgICAgeHBjX2RpY3Rp
b25hcnlfc2V0X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAiY2xpZW50LXNkay12ZXJz
aW9uIiwgU3RyaW5nOjpudW1iZXIoYXBwbGljYXRpb25TREtWZXJzaW9uKCkpLnV0ZjgoKS5kYXRh
KCkpOworICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQo
KSwgInByb2Nlc3MtaWRlbnRpZmllciIsIFN0cmluZzo6bnVtYmVyKG1fbGF1bmNoT3B0aW9ucy5w
cm9jZXNzSWRlbnRpZmllci50b1VJbnQ2NCgpKS51dGY4KCkuZGF0YSgpKTsKKyAgICB4cGNfZGlj
dGlvbmFyeV9zZXRfc3RyaW5nKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJ1aS1wcm9jZXNzLW5h
bWUiLCBbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9jZXNzTmFtZV0gVVRGOFN0cmlu
Z10pOworICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQo
KSwgInNlcnZpY2UtbmFtZSIsIG5hbWUpOworCisgICAgYm9vbCBpc1dlYktpdERldmVsb3BtZW50
QnVpbGQgPSAhW1tbW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
YktpdCJdIGJ1bmRsZVBhdGhdIHN0cmluZ0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF0gaGFz
UHJlZml4OnN5c3RlbURpcmVjdG9yeVBhdGgoKV07CisgICAgaWYgKGlzV2ViS2l0RGV2ZWxvcG1l
bnRCdWlsZCkgeworICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfZmQoYm9vdHN0cmFwTWVzc2Fn
ZS5nZXQoKSwgInN0ZG91dCIsIFNURE9VVF9GSUxFTk8pOworICAgICAgICB4cGNfZGljdGlvbmFy
eV9zZXRfZmQoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgInN0ZGVyciIsIFNUREVSUl9GSUxFTk8p
OworICAgIH0KKworICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkRhdGEgPSBhZG9wdE9TT2Jq
ZWN0KHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShudWxscHRyLCBudWxscHRyLCAwKSk7CisKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1fbGF1bmNoT3B0aW9ucy5leHRyYUluaXRp
YWxpemF0aW9uRGF0YSkKKyAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhleHRyYUlu
aXRpYWxpemF0aW9uRGF0YS5nZXQoKSwga2V5VmFsdWVQYWlyLmtleS51dGY4KCkuZGF0YSgpLCBr
ZXlWYWx1ZVBhaXIudmFsdWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICB4cGNfZGljdGlvbmFyeV9z
ZXRfdmFsdWUoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImV4dHJhLWluaXRpYWxpemF0aW9uLWRh
dGEiLCBleHRyYUluaXRpYWxpemF0aW9uRGF0YS5nZXQoKSk7CisKKyAgICBhdXRvIGVycm9ySGFu
ZGxlckltcGwgPSBbd2Vha1Byb2Nlc3NMYXVuY2hlciA9IFdlYWtQdHIgeyAqdGhpcyB9LCBsaXN0
ZW5pbmdQb3J0XSAoeHBjX29iamVjdF90IGV2ZW50KSB7CisgICAgICAgIEFTU0VSVCghZXZlbnQg
fHwgeHBjX2dldF90eXBlKGV2ZW50KSA9PSBYUENfVFlQRV9FUlJPUik7CisKKyAgICAgICAgYXV0
byBwcm9jZXNzTGF1bmNoZXIgPSB3ZWFrUHJvY2Vzc0xhdW5jaGVyLmdldCgpOworICAgICAgICBp
ZiAoIXByb2Nlc3NMYXVuY2hlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
IXByb2Nlc3NMYXVuY2hlci0+aXNMYXVuY2hpbmcoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
I2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIG1hY2hfcG9ydF91cmVmc190IHNlbmRSaWdodENv
dW50ID0gMDsKKyAgICAgICAgbWFjaF9wb3J0X2dldF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGxp
c3RlbmluZ1BvcnQsIE1BQ0hfUE9SVF9SSUdIVF9TRU5ELCAmc2VuZFJpZ2h0Q291bnQpOworICAg
ICAgICBBU1NFUlQoc2VuZFJpZ2h0Q291bnQgPj0gMSk7CisjZW5kaWYKKworICAgICAgICAvLyBX
ZSBmYWlsZWQgdG8gbGF1bmNoLiBSZWxlYXNlIHRoZSBzZW5kIHJpZ2h0LgorICAgICAgICBkZWFs
bG9jYXRlU2VuZFJpZ2h0U2FmZWx5KGxpc3RlbmluZ1BvcnQpOworCisgICAgICAgIC8vIEFuZCB0
aGUgcmVjZWl2ZSByaWdodC4KKyAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19z
ZWxmKCksIGxpc3RlbmluZ1BvcnQsIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAtMSk7CisKKyAg
ICAgICAgaWYgKHByb2Nlc3NMYXVuY2hlci0+bV94cGNDb25uZWN0aW9uKQorICAgICAgICAgICAg
eHBjX2Nvbm5lY3Rpb25fY2FuY2VsKHByb2Nlc3NMYXVuY2hlci0+bV94cGNDb25uZWN0aW9uLmdl
dCgpKTsKKyAgICAgICAgcHJvY2Vzc0xhdW5jaGVyLT5tX3hwY0Nvbm5lY3Rpb24gPSBudWxscHRy
OworCisgICAgICAgIHByb2Nlc3NMYXVuY2hlci0+ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2Vzcygw
LCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIoKSk7CisgICAgfTsKKworICAgIGF1dG8gZXZl
bnRIYW5kbGVyID0gW2Vycm9ySGFuZGxlckltcGwgPSBXVEZNb3ZlKGVycm9ySGFuZGxlckltcGwp
LCBldmVudEhhbmRsZXIgPSBtX2NsaWVudC0+eHBjRXZlbnRIYW5kbGVyKCldICh4cGNfb2JqZWN0
X3QgZXZlbnQpIG11dGFibGUgeworCisgICAgICAgIGlmICghZXZlbnQgfHwgeHBjX2dldF90eXBl
KGV2ZW50KSA9PSBYUENfVFlQRV9FUlJPUikgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtlcnJvckhhbmRsZXJJbXBsID0gV1RGTW92ZShlcnJvckhhbmRsZXJJbXBsKSwg
ZXZlbnQgPSBPU09iamVjdFB0cihldmVudCldIHsKKyAgICAgICAgICAgICAgICBlcnJvckhhbmRs
ZXJJbXBsKGV2ZW50LmdldCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGV2ZW50SGFuZGxlcikgeworICAgICAgICAgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtldmVudEhhbmRsZXIgPSBldmVudEhhbmRsZXIsIGV2
ZW50ID0gT1NPYmplY3RQdHIoZXZlbnQpXSB7CisgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVy
LT5oYW5kbGVYUENFdmVudChldmVudC5nZXQoKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB4cGNfY29ubmVjdGlvbl9zZXRfZXZlbnRfaGFuZGxlcihtX3hwY0Nv
bm5lY3Rpb24uZ2V0KCksIGV2ZW50SGFuZGxlcik7CisKKyAgICB4cGNfY29ubmVjdGlvbl9yZXN1
bWUobV94cGNDb25uZWN0aW9uLmdldCgpKTsKKworICAgIGlmIChVTkxJS0VMWShtX2xhdW5jaE9w
dGlvbnMuc2hvdWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZykpIHsKKyAgICAgICAg
ZXZlbnRIYW5kbGVyKG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVm
KCk7CisgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlX3dpdGhfcmVwbHkobV94cGNDb25u
ZWN0aW9uLmdldCgpLCBib290c3RyYXBNZXNzYWdlLmdldCgpLCBkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBeKHhwY19vYmplY3RfdCByZXBseSkgeworICAgICAgICAvLyBFcnJvcnMgYXJlIGhh
bmRsZWQgaW4gdGhlIGV2ZW50IGhhbmRsZXIuCisgICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZv
ciB0aGlzIGJsb2NrIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgZXJyb3IgZXZlbnQgaGFuZGxlciwg
aW4gd2hpY2ggY2FzZSB3ZSdyZSBubyBsb25nZXIKKyAgICAgICAgLy8gbGF1bmNoaW5nIGFuZCB3
ZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiBjbGVhbmluZyB0aGluZ3MgdXAuCisgICAgICAgIGlmIChp
c0xhdW5jaGluZygpICYmIHhwY19nZXRfdHlwZShyZXBseSkgIT0gWFBDX1RZUEVfRVJST1IpIHsK
KyAgICAgICAgICAgIEFTU0VSVCh4cGNfZ2V0X3R5cGUocmVwbHkpID09IFhQQ19UWVBFX0RJQ1RJ
T05BUlkpOworICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoeHBjX2RpY3Rpb25hcnlfZ2V0X3N0
cmluZyhyZXBseSwgIm1lc3NhZ2UtbmFtZSIpLCAicHJvY2Vzcy1maW5pc2hlZC1sYXVuY2hpbmci
KSk7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgbWFjaF9wb3J0X3VyZWZzX3Qg
c2VuZFJpZ2h0Q291bnQgPSAwOworICAgICAgICAgICAgbWFjaF9wb3J0X2dldF9yZWZzKG1hY2hf
dGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIE1BQ0hfUE9SVF9SSUdIVF9TRU5ELCAmc2VuZFJp
Z2h0Q291bnQpOworICAgICAgICAgICAgQVNTRVJUKHNlbmRSaWdodENvdW50ID49IDEpOworI2Vu
ZGlmCisKKyAgICAgICAgICAgIGRlYWxsb2NhdGVTZW5kUmlnaHRTYWZlbHkobGlzdGVuaW5nUG9y
dCk7CisKKyAgICAgICAgICAgIGlmICghbV94cGNDb25uZWN0aW9uKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhlIHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQuCisgICAgICAgICAgICAgICAgZGlkRmlu
aXNoTGF1bmNoaW5nUHJvY2VzcygwLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBU
aGUgcHJvY2VzcyBoYXMgZmluaXNoZWQgbGF1bmNoaW5nLCBncmFiIHRoZSBwaWQgZnJvbSB0aGUg
Y29ubmVjdGlvbi4KKyAgICAgICAgICAgIHBpZF90IHByb2Nlc3NJZGVudGlmaWVyID0geHBjX2Nv
bm5lY3Rpb25fZ2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpOworCisgICAgICAgICAgICBk
aWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzKHByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rp
b246OklkZW50aWZpZXIobGlzdGVuaW5nUG9ydCwgbV94cGNDb25uZWN0aW9uKSk7CisgICAgICAg
ICAgICBtX3hwY0Nvbm5lY3Rpb24gPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgZGVy
ZWYoKTsKKyAgICB9KTsKK30KKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nl
c3MoKQoreworICAgIGlmIChtX2lzTGF1bmNoaW5nKSB7CisgICAgICAgIHRlcm1pbmF0ZVhQQ0Nv
bm5lY3Rpb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9wcm9jZXNz
SWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAga2lsbChtX3Byb2Nlc3NJZGVudGlm
aWVyLCBTSUdLSUxMKTsKKyAgICBtX3Byb2Nlc3NJZGVudGlmaWVyID0gMDsKK30KKwordm9pZCBQ
cm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgdGVybWluYXRlWFBD
Q29ubmVjdGlvbigpOworfQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlWFBDQ29u
bmVjdGlvbigpCit7CisgICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIHhwY19jb25uZWN0aW9uX2NhbmNlbChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpOworICAg
IHRlcm1pbmF0ZVdpdGhSZWFzb24obV94cGNDb25uZWN0aW9uLmdldCgpLCBXZWJLaXQ6OlJlYXNv
bkNvZGU6OkludmFsaWRhdGlvbiwgIlByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRl
Iik7CisgICAgbV94cGNDb25uZWN0aW9uID0gbnVsbHB0cjsKK30KKwordm9pZCB0ZXJtaW5hdGVX
aXRoUmVhc29uKHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgUmVhc29uQ29kZSwgY29uc3Qg
Y2hhciopCit7CisgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KKyAgICB4
cGNfY29ubmVjdGlvbl9raWxsKGNvbm5lY3Rpb24sIFNJR0tJTEwpOworICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2Rhcndpbi9Qcm9jZXNzTGF1
bmNoZXJEYXJ3aW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9kYXJ3aW4v
UHJvY2Vzc0xhdW5jaGVyRGFyd2luLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
YjhkMzhjNTNlZGFjODNkZGMwNjQ1MTY4YmNlMzQ2NDg3YmYzMDY0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xh
dW5jaGVyL2Rhcndpbi9Qcm9jZXNzTGF1bmNoZXJEYXJ3aW4ubW0KKysrIC9kZXYvbnVsbApAQCAt
MSwzNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJQcm9jZXNzTGF1bmNoZXIuaCIKLQotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAi
UmVhc29uU1BJLmgiCi0jaW1wb3J0ICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXMuaCIKLSNp
bXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+Ci0jaW1wb3J0IDxjcnRf
ZXh0ZXJucy5oPgotI2ltcG9ydCA8bWFjaC1vL2R5bGQuaD4KLSNpbXBvcnQgPG1hY2gvbWFjaF9l
cnJvci5oPgotI2ltcG9ydCA8bWFjaC9tYWNoaW5lLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29h
L1NlcnZlcnNTUEkuaD4KLSNpbXBvcnQgPHNwYXduLmg+Ci0jaW1wb3J0IDxzeXMvcGFyYW0uaD4K
LSNpbXBvcnQgPHN5cy9zdGF0Lmg+Ci0jaW1wb3J0IDx3dGYvTWFjaFNlbmRSaWdodC5oPgotI2lt
cG9ydCA8d3RmL1J1bkxvb3AuaD4KLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotI2ltcG9y
dCA8d3RmL1RocmVhZGluZy5oPgotI2ltcG9ydCA8d3RmL2NvY29hL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrc0NvY29hLmg+Ci0jaW1wb3J0IDx3dGYvc3BpL2NmL0NGQnVuZGxlU1BJLmg+Ci0jaW1w
b3J0IDx3dGYvc3BpL2Rhcndpbi9YUENTUEkuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQot
I2ltcG9ydCAiQ29kZVNpZ25pbmcuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
c3RhdGljIGNvbnN0IGNoYXIqIHNlcnZpY2VOYW1lKGNvbnN0IFByb2Nlc3NMYXVuY2hlcjo6TGF1
bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKLXsKLSAgICBzd2l0Y2ggKGxhdW5jaE9wdGlvbnMu
cHJvY2Vzc1R5cGUpIHsKLSAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6Oldl
YjoKLSAgICAgICAgcmV0dXJuIGxhdW5jaE9wdGlvbnMubm9uVmFsaWRJbmplY3RlZENvZGVBbGxv
d2VkID8gImNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudC5EZXZlbG9wbWVudCIgOiAiY29tLmFw
cGxlLldlYktpdC5XZWJDb250ZW50IjsKLSAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vz
c1R5cGU6Ok5ldHdvcms6Ci0gICAgICAgIHJldHVybiAiY29tLmFwcGxlLldlYktpdC5OZXR3b3Jr
aW5nIjsKLSNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCi0gICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6
OlByb2Nlc3NUeXBlOjpHUFU6Ci0gICAgICAgIHJldHVybiAiY29tLmFwcGxlLldlYktpdC5HUFUi
OwotI2VuZGlmCi0jaWYgRU5BQkxFKFdFQl9BVVRITikKLSAgICBjYXNlIFByb2Nlc3NMYXVuY2hl
cjo6UHJvY2Vzc1R5cGU6OldlYkF1dGhuOgotICAgICAgICByZXR1cm4gImNvbS5hcHBsZS5XZWJL
aXQuV2ViQXV0aG4iOwotI2VuZGlmCi0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRMZWFr
Qm9vc3QoY29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25z
KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgVU5VU0VEX1BBUkFNKGxhdW5jaE9w
dGlvbnMpOwotI2lmIEhBVkUoUlVOTklOR0JPQVJEX1dFQktJVF9QUklPUklUWV9TVVBQT1JUKQot
ICAgIC8vIE9uIGlPUywgd2UgZG9uJ3QgbmVlZCB0byBsZWFrIGEgYm9vc3QgbWVzc2FnZSB3aGVu
IFJ1bm5pbmdCb2FyZCBwcm9jZXNzIGFzc2VydGlvbnMgZ2l2ZSB1cyB0aGUKLSAgICAvLyByaWdo
dCBwcmlvcml0aWVzLgotICAgIHN0YXRpYyBjb25zdCBib29sIHJ1bm5pbmdCb2FyZEhhbmRsZXNQ
cmlvcml0aWVzID0gaXNGZWF0dXJlRmxhZ0VuYWJsZWQoIlJCX2Z1bGxfbWFuYWdlX1dLX2pldHNh
bSJfcyk7Ci0gICAgcmV0dXJuICFydW5uaW5nQm9hcmRIYW5kbGVzUHJpb3JpdGllczsKLSNlbHNl
Ci0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYgLy8gSEFWRShSVU5OSU5HQk9BUkRfV0VCS0lUX1BS
SU9SSVRZX1NVUFBPUlQpCi0jZWxzZQotICAgIC8vIE9uIE1hYywgbGVhayBhIGJvb3N0IG9udG8g
dGhlIE5ldHdvcmtQcm9jZXNzLCBHUFVQcm9jZXNzLCBhbmQgV2ViQXV0aG5Qcm9jZXNzLgotI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKLSAgICBpZiAobGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9
PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpHUFUpCi0gICAgICAgIHJldHVybiB0cnVl
OwotI2VuZGlmCi0jaWYgRU5BQkxFKFdFQl9BVVRITikKLSAgICBpZiAobGF1bmNoT3B0aW9ucy5w
cm9jZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpXZWJBdXRobikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLSAgICByZXR1cm4gbGF1bmNoT3B0aW9ucy5wcm9j
ZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOwotI2VuZGlm
Ci19Ci0KLXN0YXRpYyBOU1N0cmluZyAqc3lzdGVtRGlyZWN0b3J5UGF0aCgpCi17Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU1N0cmluZz4+IHBhdGggPSBhZG9wdE5TKFte
ewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFlfU0lNVUxBVE9SKQotICAgICAgICBjaGFyICpzaW11
bGF0b3JSb290ID0gZ2V0ZW52KCJTSU1VTEFUT1JfUk9PVCIpOwotICAgICAgICByZXR1cm4gc2lt
dWxhdG9yUm9vdCA/IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMvU3lzdGVtLyIsIHNp
bXVsYXRvclJvb3RdIDogQCIvU3lzdGVtLyI7Ci0jZWxzZQotICAgICAgICByZXR1cm4gQCIvU3lz
dGVtLyI7Ci0jZW5kaWYKLSAgICB9KCkgY29weV0pOwotCi0gICAgcmV0dXJuIHBhdGguZ2V0KCku
Z2V0KCk7Ci19Ci0KLXZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKLXsKLSAg
ICBBU1NFUlQoIW1feHBjQ29ubmVjdGlvbik7Ci0KLSAgICBjb25zdCBjaGFyKiBuYW1lOwotICAg
IGlmICghbV9sYXVuY2hPcHRpb25zLmN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRp
Zmllci5pc051bGwoKSkKLSAgICAgICAgbmFtZSA9IG1fbGF1bmNoT3B0aW9ucy5jdXN0b21XZWJD
b250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIuZGF0YSgpOwotICAgIGVsc2UKLSAgICAgICAg
bmFtZSA9IHNlcnZpY2VOYW1lKG1fbGF1bmNoT3B0aW9ucyk7Ci0KLSAgICBtX3hwY0Nvbm5lY3Rp
b24gPSBhZG9wdE9TT2JqZWN0KHhwY19jb25uZWN0aW9uX2NyZWF0ZShuYW1lLCBudWxscHRyKSk7
Ci0KLSAgICB1dWlkX3QgdXVpZDsKLSAgICB1dWlkX2dlbmVyYXRlKHV1aWQpOwotICAgIHhwY19j
b25uZWN0aW9uX3NldF9vbmVzaG90X2luc3RhbmNlKG1feHBjQ29ubmVjdGlvbi5nZXQoKSwgdXVp
ZCk7Ci0KLSAgICAvLyBJbmhlcml0IFVJIHByb2Nlc3MgbG9jYWxpemF0aW9uLiBJdCBjYW4gYmUg
ZGlmZmVyZW50IGZyb20gY2hpbGQgcHJvY2VzcyBkZWZhdWx0IGxvY2FsaXphdGlvbjoKLSAgICAv
LyAxLiBXaGVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgc3lzdGVtIGZyYW1ld29ya3Mgc2ltcGx5IGhh
dmUgZGlmZmVyZW50IGxvY2FsaXplZCByZXNvdXJjZXMgYXZhaWxhYmxlLCB3ZSBzaG91bGQgbWF0
Y2ggdGhlIGFwcGxpY2F0aW9uLgotICAgIC8vIDEuMS4gQW4gaW1wb3J0YW50IGNhc2UgaXMgV2Vi
S2l0VGVzdFJ1bm5lciwgd2hlcmUgd2Ugc2hvdWxkIHVzZSBFbmdsaXNoIGxvY2FsaXphdGlvbnMg
Zm9yIGFsbCBzeXN0ZW0gZnJhbWV3b3Jrcy4KLSAgICAvLyAyLiBXaGVuIEFwcGxlTGFuZ3VhZ2Vz
IGlzIHBhc3NlZCBhcyBjb21tYW5kIGxpbmUgYXJndW1lbnQgZm9yIFVJIHByb2Nlc3MsIG9yIHNl
dCBpbiBpdHMgcHJlZmVyZW5jZXMsIHdlIHNob3VsZCByZXNwZWN0IGl0IGluIGNoaWxkIHByb2Nl
c3Nlcy4KLSAgICBhdXRvIGluaXRpYWxpemF0aW9uTWVzc2FnZSA9IGFkb3B0T1NPYmplY3QoeHBj
X2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKLSAgICBfQ0ZCdW5kbGVT
ZXR1cFhQQ0Jvb3RzdHJhcChpbml0aWFsaXphdGlvbk1lc3NhZ2UuZ2V0KCkpOwotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgLy8gQ2xpZW50cyB0aGF0IHNldCB0aGVzZSBlbnZpcm9ubWVu
dCB2YXJpYWJsZXMgZXhwbGljaXRseSBkbyBub3QgaGF2ZSB0aGUgdmFsdWVzIGF1dG9tYXRpY2Fs
bHkgZm9yd2FyZGVkIGJ5IGxpYnhwYy4KLSAgICBhdXRvIGNvbnRhaW5lckVudmlyb25tZW50VmFy
aWFibGVzID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVs
bHB0ciwgMCkpOwotICAgIGlmIChjb25zdCBjaGFyKiBlbnZpcm9ubWVudEhPTUUgPSBnZXRlbnYo
IkhPTUUiKSkKLSAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhjb250YWluZXJFbnZp
cm9ubWVudFZhcmlhYmxlcy5nZXQoKSwgIkhPTUUiLCBlbnZpcm9ubWVudEhPTUUpOwotICAgIGlm
IChjb25zdCBjaGFyKiBlbnZpcm9ubWVudENGRklYRURfVVNFUl9IT01FID0gZ2V0ZW52KCJDRkZJ
WEVEX1VTRVJfSE9NRSIpKQotICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGNvbnRh
aW5lckVudmlyb25tZW50VmFyaWFibGVzLmdldCgpLCAiQ0ZGSVhFRF9VU0VSX0hPTUUiLCBlbnZp
cm9ubWVudENGRklYRURfVVNFUl9IT01FKTsKLSAgICBpZiAoY29uc3QgY2hhciogZW52aXJvbm1l
bnRUTVBESVIgPSBnZXRlbnYoIlRNUERJUiIpKQotICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRf
c3RyaW5nKGNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzLmdldCgpLCAiVE1QRElSIiwgZW52
aXJvbm1lbnRUTVBESVIpOwotICAgIHhwY19kaWN0aW9uYXJ5X3NldF92YWx1ZShpbml0aWFsaXph
dGlvbk1lc3NhZ2UuZ2V0KCksICJDb250YWluZXJFbnZpcm9ubWVudFZhcmlhYmxlcyIsIGNvbnRh
aW5lckVudmlyb25tZW50VmFyaWFibGVzLmdldCgpKTsKLSNlbmRpZgotCi0gICAgYXV0byBsYW5n
dWFnZXNJdGVyYXRvciA9IG1fbGF1bmNoT3B0aW9ucy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5m
aW5kKCJPdmVycmlkZUxhbmd1YWdlcyIpOwotICAgIGlmIChsYW5ndWFnZXNJdGVyYXRvciAhPSBt
X2xhdW5jaE9wdGlvbnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEuZW5kKCkpIHsKLSAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKExhbmd1YWdlLCBzdHJlYW0gPDwgIlByb2Nlc3MgTGF1bmNoZXIgaXMg
Y29weWluZyBPdmVycmlkZUxhbmd1YWdlcyBpbnRvIGluaXRpYWxpemF0aW9uIG1lc3NhZ2U6ICIg
PDwgbGFuZ3VhZ2VzSXRlcmF0b3ItPnZhbHVlKTsKLSAgICAgICAgYXV0byBsYW5ndWFnZXMgPSBh
ZG9wdE9TT2JqZWN0KHhwY19hcnJheV9jcmVhdGUobnVsbHB0ciwgMCkpOwotICAgICAgICBmb3Ig
KGF1dG8mIGxhbmd1YWdlIDogbGFuZ3VhZ2VzSXRlcmF0b3ItPnZhbHVlLnNwbGl0KCcsJykpCi0g
ICAgICAgICAgICB4cGNfYXJyYXlfc2V0X3N0cmluZyhsYW5ndWFnZXMuZ2V0KCksIFhQQ19BUlJB
WV9BUFBFTkQsIGxhbmd1YWdlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICB4cGNfZGljdGlvbmFy
eV9zZXRfdmFsdWUoaW5pdGlhbGl6YXRpb25NZXNzYWdlLmdldCgpLCAiT3ZlcnJpZGVMYW5ndWFn
ZXMiLCBsYW5ndWFnZXMuZ2V0KCkpOwotICAgIH0KLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB4
cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGluaXRpYWxpemF0aW9uTWVzc2FnZS5nZXQoKSwgIldl
YktpdEJ1bmRsZVZlcnNpb24iLCBbW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29t
LmFwcGxlLldlYktpdCJdLmluZm9EaWN0aW9uYXJ5WyhfX2JyaWRnZSBOU1N0cmluZyAqKWtDRkJ1
bmRsZVZlcnNpb25LZXldIFVURjhTdHJpbmddKTsKLSNlbmRpZgotICAgIHhwY19jb25uZWN0aW9u
X3NldF9ib290c3RyYXAobV94cGNDb25uZWN0aW9uLmdldCgpLCBpbml0aWFsaXphdGlvbk1lc3Nh
Z2UuZ2V0KCkpOwotCi0gICAgaWYgKHNob3VsZExlYWtCb29zdChtX2xhdW5jaE9wdGlvbnMpKSB7
Ci0gICAgICAgIGF1dG8gcHJlQm9vdHN0cmFwTWVzc2FnZSA9IGFkb3B0T1NPYmplY3QoeHBjX2Rp
Y3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKLSAgICAgICAgeHBjX2RpY3Rp
b25hcnlfc2V0X3N0cmluZyhwcmVCb290c3RyYXBNZXNzYWdlLmdldCgpLCAibWVzc2FnZS1uYW1l
IiwgInByZS1ib290c3RyYXAiKTsKLSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdl
KG1feHBjQ29ubmVjdGlvbi5nZXQoKSwgcHJlQm9vdHN0cmFwTWVzc2FnZS5nZXQoKSk7Ci0gICAg
fQotCi0gICAgLy8gQ3JlYXRlIHRoZSBsaXN0ZW5pbmcgcG9ydC4KLSAgICBtYWNoX3BvcnRfdCBs
aXN0ZW5pbmdQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgYXV0byBrciA9IG1hY2hfcG9ydF9h
bGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmxpc3Rl
bmluZ1BvcnQpOwotICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgbWFjaCBwb3J0LCBlcnJvciAleDogJXMiLCBrciwgbWFj
aF9lcnJvcl9zdHJpbmcoa3IpKTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0KLSAgICAvLyBJ
bnNlcnQgYSBzZW5kIHJpZ2h0IHNvIHdlIGNhbiBzZW5kIHRvIGl0LgotICAgIG1hY2hfcG9ydF9p
bnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlzdGVuaW5nUG9y
dCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOwotCi0gICAgbWFjaF9wb3J0X3QgcHJldmlvdXNO
b3RpZmljYXRpb25Qb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgYXV0byBtYyA9IG1hY2hfcG9y
dF9yZXF1ZXN0X25vdGlmaWNhdGlvbihtYWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0LCBN
QUNIX05PVElGWV9OT19TRU5ERVJTLCAwLCBsaXN0ZW5pbmdQb3J0LCBNQUNIX01TR19UWVBFX01B
S0VfU0VORF9PTkNFLCAmcHJldmlvdXNOb3RpZmljYXRpb25Qb3J0KTsKLSAgICBBU1NFUlQoIXBy
ZXZpb3VzTm90aWZpY2F0aW9uUG9ydCk7Ci0gICAgQVNTRVJUKG1jID09IEtFUk5fU1VDQ0VTUyk7
Ci0gICAgaWYgKG1jICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICAvLyBJZiBtYWNoX3BvcnRf
cmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbHMsICdwcmV2aW91c05vdGlmaWNhdGlvblBvcnQnIHdp
bGwgYmUgdW5pbml0aWFsaXplZC4KLSAgICAgICAgTE9HX0VSUk9SKCJtYWNoX3BvcnRfcmVxdWVz
dF9ub3RpZmljYXRpb24gZmFpbGVkOiAoJXgpICVzIiwgbWMsIG1hY2hfZXJyb3Jfc3RyaW5nKG1j
KSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGNsaWVudElkZW50aWZpZXI7Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIGNsaWVudElkZW50aWZpZXIgPSBjb2RlU2lnbmluZ0lkZW50aWZpZXJGb3JDdXJy
ZW50UHJvY2VzcygpOwotI2VuZGlmCi0gICAgaWYgKGNsaWVudElkZW50aWZpZXIuaXNOdWxsKCkp
Ci0gICAgICAgIGNsaWVudElkZW50aWZpZXIgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRs
ZUlkZW50aWZpZXJdOwotCi0gICAgLy8gRklYTUU6IFN3aXRjaCB0byB4cGNfY29ubmVjdGlvbl9z
ZXRfYm9vdHN0cmFwIG9uY2UgaXQncyBhdmFpbGFibGUgZXZlcnl3aGVyZSB3ZSBuZWVkLgotICAg
IGF1dG8gYm9vdHN0cmFwTWVzc2FnZSA9IGFkb3B0T1NPYmplY3QoeHBjX2RpY3Rpb25hcnlfY3Jl
YXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKLQotICAgIGlmIChtX2NsaWVudCkgewotICAgICAg
ICBpZiAobV9jbGllbnQtPnNob3VsZENvbmZpZ3VyZUpTQ0ZvclRlc3RpbmcoKSkKLSAgICAgICAg
ICAgIHhwY19kaWN0aW9uYXJ5X3NldF9ib29sKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJjb25m
aWd1cmUtanNjLWZvci10ZXN0aW5nIiwgdHJ1ZSk7Ci0gICAgICAgIGlmICghbV9jbGllbnQtPmlz
SklURW5hYmxlZCgpKQotICAgICAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X2Jvb2woYm9vdHN0
cmFwTWVzc2FnZS5nZXQoKSwgImRpc2FibGUtaml0IiwgdHJ1ZSk7Ci0gICAgICAgIGlmIChtX2Ns
aWVudC0+c2hvdWxkRW5hYmxlU2hhcmVkQXJyYXlCdWZmZXIoKSkKLSAgICAgICAgICAgIHhwY19k
aWN0aW9uYXJ5X3NldF9ib29sKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJlbmFibGUtc2hhcmVk
LWFycmF5LWJ1ZmZlciIsIHRydWUpOwotICAgICAgICBpZiAobV9jbGllbnQtPnNob3VsZEVuYWJs
ZUNhcHRpdmVQb3J0YWxNb2RlKCkpCi0gICAgICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfYm9v
bChib290c3RyYXBNZXNzYWdlLmdldCgpLCAiZW5hYmxlLWNhcHRpdmUtcG9ydGFsLW1vZGUiLCB0
cnVlKTsKLSAgICB9Ci0KLSAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGJvb3RzdHJhcE1l
c3NhZ2UuZ2V0KCksICJtZXNzYWdlLW5hbWUiLCAiYm9vdHN0cmFwIik7Ci0KLSAgICB4cGNfZGlj
dGlvbmFyeV9zZXRfbWFjaF9zZW5kKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJzZXJ2ZXItcG9y
dCIsIGxpc3RlbmluZ1BvcnQpOwotCi0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhib290
c3RyYXBNZXNzYWdlLmdldCgpLCAiY2xpZW50LWlkZW50aWZpZXIiLCAhY2xpZW50SWRlbnRpZmll
ci5pc0VtcHR5KCkgPyBjbGllbnRJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkgOiAqX05TR2V0UHJv
Z25hbWUoKSk7Ci0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhib290c3RyYXBNZXNzYWdl
LmdldCgpLCAiY2xpZW50LWJ1bmRsZS1pZGVudGlmaWVyIiwgV2ViQ29yZTo6YXBwbGljYXRpb25C
dW5kbGVJZGVudGlmaWVyKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgeHBjX2RpY3Rpb25hcnlfc2V0
X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAiY2xpZW50LXNkay12ZXJzaW9uIiwgU3Ry
aW5nOjpudW1iZXIoYXBwbGljYXRpb25TREtWZXJzaW9uKCkpLnV0ZjgoKS5kYXRhKCkpOwotICAg
IHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgInByb2Nl
c3MtaWRlbnRpZmllciIsIFN0cmluZzo6bnVtYmVyKG1fbGF1bmNoT3B0aW9ucy5wcm9jZXNzSWRl
bnRpZmllci50b1VJbnQ2NCgpKS51dGY4KCkuZGF0YSgpKTsKLSAgICB4cGNfZGljdGlvbmFyeV9z
ZXRfc3RyaW5nKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJ1aS1wcm9jZXNzLW5hbWUiLCBbW1tO
U1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9jZXNzTmFtZV0gVVRGOFN0cmluZ10pOwotICAg
IHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgInNlcnZp
Y2UtbmFtZSIsIG5hbWUpOwotCi0gICAgYm9vbCBpc1dlYktpdERldmVsb3BtZW50QnVpbGQgPSAh
W1tbW05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdIGJ1
bmRsZVBhdGhdIHN0cmluZ0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF0gaGFzUHJlZml4OnN5
c3RlbURpcmVjdG9yeVBhdGgoKV07Ci0gICAgaWYgKGlzV2ViS2l0RGV2ZWxvcG1lbnRCdWlsZCkg
ewotICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfZmQoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwg
InN0ZG91dCIsIFNURE9VVF9GSUxFTk8pOwotICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfZmQo
Ym9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgInN0ZGVyciIsIFNUREVSUl9GSUxFTk8pOwotICAgIH0K
LQotICAgIGF1dG8gZXh0cmFJbml0aWFsaXphdGlvbkRhdGEgPSBhZG9wdE9TT2JqZWN0KHhwY19k
aWN0aW9uYXJ5X2NyZWF0ZShudWxscHRyLCBudWxscHRyLCAwKSk7Ci0KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGtleVZhbHVlUGFpciA6IG1fbGF1bmNoT3B0aW9ucy5leHRyYUluaXRpYWxpemF0aW9u
RGF0YSkKLSAgICAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhleHRyYUluaXRpYWxpemF0
aW9uRGF0YS5nZXQoKSwga2V5VmFsdWVQYWlyLmtleS51dGY4KCkuZGF0YSgpLCBrZXlWYWx1ZVBh
aXIudmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICB4cGNfZGljdGlvbmFyeV9zZXRfdmFsdWUo
Ym9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImV4dHJhLWluaXRpYWxpemF0aW9uLWRhdGEiLCBleHRy
YUluaXRpYWxpemF0aW9uRGF0YS5nZXQoKSk7Ci0KLSAgICBhdXRvIGVycm9ySGFuZGxlckltcGwg
PSBbd2Vha1Byb2Nlc3NMYXVuY2hlciA9IFdlYWtQdHIgeyAqdGhpcyB9LCBsaXN0ZW5pbmdQb3J0
XSAoeHBjX29iamVjdF90IGV2ZW50KSB7Ci0gICAgICAgIEFTU0VSVCghZXZlbnQgfHwgeHBjX2dl
dF90eXBlKGV2ZW50KSA9PSBYUENfVFlQRV9FUlJPUik7Ci0KLSAgICAgICAgYXV0byBwcm9jZXNz
TGF1bmNoZXIgPSB3ZWFrUHJvY2Vzc0xhdW5jaGVyLmdldCgpOwotICAgICAgICBpZiAoIXByb2Nl
c3NMYXVuY2hlcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXByb2Nlc3NM
YXVuY2hlci0+aXNMYXVuY2hpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgICAgIG1hY2hfcG9ydF91cmVmc190IHNlbmRSaWdodENvdW50ID0gMDsK
LSAgICAgICAgbWFjaF9wb3J0X2dldF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1Bv
cnQsIE1BQ0hfUE9SVF9SSUdIVF9TRU5ELCAmc2VuZFJpZ2h0Q291bnQpOwotICAgICAgICBBU1NF
UlQoc2VuZFJpZ2h0Q291bnQgPj0gMSk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBXZSBmYWlsZWQg
dG8gbGF1bmNoLiBSZWxlYXNlIHRoZSBzZW5kIHJpZ2h0LgotICAgICAgICBkZWFsbG9jYXRlU2Vu
ZFJpZ2h0U2FmZWx5KGxpc3RlbmluZ1BvcnQpOwotCi0gICAgICAgIC8vIEFuZCB0aGUgcmVjZWl2
ZSByaWdodC4KLSAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIGxp
c3RlbmluZ1BvcnQsIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAtMSk7Ci0KLSAgICAgICAgaWYg
KHByb2Nlc3NMYXVuY2hlci0+bV94cGNDb25uZWN0aW9uKQotICAgICAgICAgICAgeHBjX2Nvbm5l
Y3Rpb25fY2FuY2VsKHByb2Nlc3NMYXVuY2hlci0+bV94cGNDb25uZWN0aW9uLmdldCgpKTsKLSAg
ICAgICAgcHJvY2Vzc0xhdW5jaGVyLT5tX3hwY0Nvbm5lY3Rpb24gPSBudWxscHRyOwotCi0gICAg
ICAgIHByb2Nlc3NMYXVuY2hlci0+ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2VzcygwLCBJUEM6OkNv
bm5lY3Rpb246OklkZW50aWZpZXIoKSk7Ci0gICAgfTsKLQotICAgIGF1dG8gZXZlbnRIYW5kbGVy
ID0gW2Vycm9ySGFuZGxlckltcGwgPSBXVEZNb3ZlKGVycm9ySGFuZGxlckltcGwpLCBldmVudEhh
bmRsZXIgPSBtX2NsaWVudC0+eHBjRXZlbnRIYW5kbGVyKCldICh4cGNfb2JqZWN0X3QgZXZlbnQp
IG11dGFibGUgewotCi0gICAgICAgIGlmICghZXZlbnQgfHwgeHBjX2dldF90eXBlKGV2ZW50KSA9
PSBYUENfVFlQRV9FUlJPUikgewotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtlcnJvckhhbmRsZXJJbXBsID0gV1RGTW92ZShlcnJvckhhbmRsZXJJbXBsKSwgZXZlbnQgPSBP
U09iamVjdFB0cihldmVudCldIHsKLSAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXJJbXBsKGV2
ZW50LmdldCgpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGV2ZW50SGFuZGxlcikgewotICAgICAgICAgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtldmVudEhhbmRsZXIgPSBldmVudEhhbmRsZXIsIGV2ZW50ID0gT1NP
YmplY3RQdHIoZXZlbnQpXSB7Ci0gICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLT5oYW5kbGVY
UENFdmVudChldmVudC5nZXQoKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICB4cGNfY29ubmVjdGlvbl9zZXRfZXZlbnRfaGFuZGxlcihtX3hwY0Nvbm5lY3Rpb24u
Z2V0KCksIGV2ZW50SGFuZGxlcik7Ci0KLSAgICB4cGNfY29ubmVjdGlvbl9yZXN1bWUobV94cGND
b25uZWN0aW9uLmdldCgpKTsKLQotICAgIGlmIChVTkxJS0VMWShtX2xhdW5jaE9wdGlvbnMuc2hv
dWxkTWFrZVByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZykpIHsKLSAgICAgICAgZXZlbnRIYW5k
bGVyKG51bGxwdHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVmKCk7Ci0gICAg
eHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlX3dpdGhfcmVwbHkobV94cGNDb25uZWN0aW9uLmdl
dCgpLCBib290c3RyYXBNZXNzYWdlLmdldCgpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBe
KHhwY19vYmplY3RfdCByZXBseSkgewotICAgICAgICAvLyBFcnJvcnMgYXJlIGhhbmRsZWQgaW4g
dGhlIGV2ZW50IGhhbmRsZXIuCi0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGlzIGJs
b2NrIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgZXJyb3IgZXZlbnQgaGFuZGxlciwgaW4gd2hpY2gg
Y2FzZSB3ZSdyZSBubyBsb25nZXIKLSAgICAgICAgLy8gbGF1bmNoaW5nIGFuZCB3ZSBhbHJlYWR5
IHRvb2sgY2FyZSBvZiBjbGVhbmluZyB0aGluZ3MgdXAuCi0gICAgICAgIGlmIChpc0xhdW5jaGlu
ZygpICYmIHhwY19nZXRfdHlwZShyZXBseSkgIT0gWFBDX1RZUEVfRVJST1IpIHsKLSAgICAgICAg
ICAgIEFTU0VSVCh4cGNfZ2V0X3R5cGUocmVwbHkpID09IFhQQ19UWVBFX0RJQ1RJT05BUlkpOwot
ICAgICAgICAgICAgQVNTRVJUKCFzdHJjbXAoeHBjX2RpY3Rpb25hcnlfZ2V0X3N0cmluZyhyZXBs
eSwgIm1lc3NhZ2UtbmFtZSIpLCAicHJvY2Vzcy1maW5pc2hlZC1sYXVuY2hpbmciKSk7Ci0KLSNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICAgICAgbWFjaF9wb3J0X3VyZWZzX3Qgc2VuZFJpZ2h0
Q291bnQgPSAwOwotICAgICAgICAgICAgbWFjaF9wb3J0X2dldF9yZWZzKG1hY2hfdGFza19zZWxm
KCksIGxpc3RlbmluZ1BvcnQsIE1BQ0hfUE9SVF9SSUdIVF9TRU5ELCAmc2VuZFJpZ2h0Q291bnQp
OwotICAgICAgICAgICAgQVNTRVJUKHNlbmRSaWdodENvdW50ID49IDEpOwotI2VuZGlmCi0KLSAg
ICAgICAgICAgIGRlYWxsb2NhdGVTZW5kUmlnaHRTYWZlbHkobGlzdGVuaW5nUG9ydCk7Ci0KLSAg
ICAgICAgICAgIGlmICghbV94cGNDb25uZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhl
IHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQuCi0gICAgICAgICAgICAgICAgZGlkRmluaXNoTGF1bmNo
aW5nUHJvY2VzcygwLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIoKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUaGUgcHJvY2Vz
cyBoYXMgZmluaXNoZWQgbGF1bmNoaW5nLCBncmFiIHRoZSBwaWQgZnJvbSB0aGUgY29ubmVjdGlv
bi4KLSAgICAgICAgICAgIHBpZF90IHByb2Nlc3NJZGVudGlmaWVyID0geHBjX2Nvbm5lY3Rpb25f
Z2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpOwotCi0gICAgICAgICAgICBkaWRGaW5pc2hM
YXVuY2hpbmdQcm9jZXNzKHByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIobGlzdGVuaW5nUG9ydCwgbV94cGNDb25uZWN0aW9uKSk7Ci0gICAgICAgICAgICBtX3hw
Y0Nvbm5lY3Rpb24gPSBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVyZWYoKTsKLSAg
ICB9KTsKLX0KLQotdm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQotewot
ICAgIGlmIChtX2lzTGF1bmNoaW5nKSB7Ci0gICAgICAgIHRlcm1pbmF0ZVhQQ0Nvbm5lY3Rpb24o
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9wcm9jZXNzSWRlbnRpZmll
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAga2lsbChtX3Byb2Nlc3NJZGVudGlmaWVyLCBTSUdL
SUxMKTsKLSAgICBtX3Byb2Nlc3NJZGVudGlmaWVyID0gMDsKLX0KLQotdm9pZCBQcm9jZXNzTGF1
bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgdGVybWluYXRlWFBDQ29ubmVjdGlv
bigpOwotfQotCi12b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlWFBDQ29ubmVjdGlvbigp
Ci17Ci0gICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHhw
Y19jb25uZWN0aW9uX2NhbmNlbChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpOwotICAgIHRlcm1pbmF0
ZVdpdGhSZWFzb24obV94cGNDb25uZWN0aW9uLmdldCgpLCBXZWJLaXQ6OlJlYXNvbkNvZGU6Oklu
dmFsaWRhdGlvbiwgIlByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlIik7Ci0gICAg
bV94cGNDb25uZWN0aW9uID0gbnVsbHB0cjsKLX0KLQotdm9pZCB0ZXJtaW5hdGVXaXRoUmVhc29u
KHhwY19jb25uZWN0aW9uX3QgY29ubmVjdGlvbiwgUmVhc29uQ29kZSwgY29uc3QgY2hhciopCi17
Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICB4cGNfY29ubmVj
dGlvbl9raWxsKGNvbm5lY3Rpb24sIFNJR0tJTEwpOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY4MjY3ZGUxYzM3OTRk
NjM1NjI4MWQzODQ4MzRjZWU4M2JjY2Q4MzAuLmEyZmNkZWUzOGMzZTMzYmJjNTA1MDlhNTVkN2M4
MTBlMTQzNWE1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMzc4OCw3ICszNzg4LDcgQEAKIAkJNDY4MDlBN0IyM0Q5MjI1MzAwQzI5
N0QwIC8qIFdlYkNvb2tpZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYkNvb2tpZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDY4MzU2OUEyMUU4MUNDNzAwNkUyN0EzIC8qIFByb3Zpc2lvbmFsUGFnZVByb3h5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3Zpc2lvbmFsUGFnZVByb3h5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODM1NjlCMjFFODFDQzcwMDZFMjdBMyAvKiBQcm92
aXNpb25hbFBhZ2VQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcm92aXNpb25hbFBhZ2VQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTQ2OURFODAyMjczRUNDNUQwMDkzMDI3NiAvKiBQcm9jZXNzTGF1bmNoZXJEYXJ3aW4ubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm9jZXNzTGF1bmNoZXJEYXJ3
aW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ2OURFODAyMjczRUNDNUQwMDkz
MDI3NiAvKiBQcm9jZXNzTGF1bmNoZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFByb2Nlc3NMYXVuY2hlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NkEyQjYwNjFFNTY3NUEyMDBDM0RFREEgLyogQmFja2dyb3VuZFByb2Nl
c3NSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEJhY2tncm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2QTJCNjA3MUU1Njc1QTIwMEMzREVEQSAvKiBCYWNrZ3Jv
dW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFja2dyb3VuZFByb2Nlc3NSZXNwb25zaXZlbmVzc1RpbWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2QUM1MzI0MjVERUQ4MUUwMDNCNTdFQyAvKiBHUFVQcm9j
ZXNzQ29ubmVjdGlvblBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb25QYXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NDE3LDEy
ICs4NDE3LDEyIEBACiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwogCQl9OwotCQk0NjlERTgwMTI3M0VDQzVEMDA5MzAyNzYgLyogZGFyd2luICovID0geworCQk0
NjlERTgwMTI3M0VDQzVEMDA5MzAyNzYgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTQ2OURFODAyMjczRUNDNUQwMDkzMDI3NiAvKiBQcm9j
ZXNzTGF1bmNoZXJEYXJ3aW4ubW0gKi8sCisJCQkJNDY5REU4MDIyNzNFQ0M1RDAwOTMwMjc2IC8q
IFByb2Nlc3NMYXVuY2hlckNvY29hLm1tICovLAogCQkJKTsKLQkJCXBhdGggPSBkYXJ3aW47CisJ
CQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwogCQk0QTQx
MEY0MTE5QUY3QjI3MDAyRUJBQjUgLyogTWVkaWFTdHJlYW0gKi8gPSB7CkBAIC0xMDQzNCw3ICsx
MDQzNCw3IEBACiAJCUJDMTExQjE4MTEyRjVGQjQwMDMzN0JBQiAvKiBMYXVuY2hlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNDY5REU4MDEyNzNFQ0M1
RDAwOTMwMjc2IC8qIGRhcndpbiAqLywKKwkJCQk0NjlERTgwMTI3M0VDQzVEMDA5MzAyNzYgLyog
Y29jb2EgKi8sCiAJCQkJMUFFMTE3RjUxMURCQjMwOTAwOTgxNjE1IC8qIFByb2Nlc3NMYXVuY2hl
ci5jcHAgKi8sCiAJCQkJQkMxQTdDNTcxMTM2RTE5QzAwRkI3MTY3IC8qIFByb2Nlc3NMYXVuY2hl
ci5oICovLAogCQkJKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>