<?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>155951</bug_id>
          
          <creation_ts>2016-03-28 12:46:50 -0700</creation_ts>
          <short_desc>Modern IDB: Remove abstract base classes for all IDB DOM classes</short_desc>
          <delta_ts>2016-03-28 15:49:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>Safari 9</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1178489</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-28 12:46:50 -0700</bug_when>
    <thetext>Modern IDB: Remove abstract base classes for all IDB DOM classes

Not needed anymore since we&apos;ve removed Legacy IDB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178494</commentid>
    <comment_count>1</comment_count>
      <attachid>275039</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-28 13:01:39 -0700</bug_when>
    <thetext>Created attachment 275039
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178495</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-28 13:03:20 -0700</bug_when>
    <thetext>Attachment 275039 did not pass style-queue:


ERROR: Source/WebCore/Modules/indexeddb/IDBTransaction.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/indexeddb/IDBCursor.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/indexeddb/IDBRequest.cpp:288:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 46 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178500</commentid>
    <comment_count>3</comment_count>
      <attachid>275039</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-28 13:15:23 -0700</bug_when>
    <thetext>Comment on attachment 275039
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/IDBAny.cpp:48
&gt; +    , m_database(adoptRef(&amp;database.leakRef()))

WTFMove

&gt; Source/WebCore/Modules/indexeddb/IDBFactory.h:-53
&gt; -    // FIXME: getDatabaseNames is no longer a web-facing API, and should be removed from IDBFactory.
&gt; -    // The Web Inspector currently uses this to enumerate the list of databases, but is more complicated as a result.
&gt; -    // We should provide a simpler API to the Web Inspector then remove getDatabaseNames.

Is this still true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178509</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-28 13:25:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 275039 [details]
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBFactory.h:-53
&gt; &gt; -    // FIXME: getDatabaseNames is no longer a web-facing API, and should be removed from IDBFactory.
&gt; &gt; -    // The Web Inspector currently uses this to enumerate the list of databases, but is more complicated as a result.
&gt; &gt; -    // We should provide a simpler API to the Web Inspector then remove getDatabaseNames.
&gt; 
&gt; Is this still true?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178521</commentid>
    <comment_count>5</comment_count>
      <attachid>275039</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-03-28 13:56:55 -0700</bug_when>
    <thetext>Comment on attachment 275039
Patch v1

Then we should keep the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178536</commentid>
    <comment_count>6</comment_count>
      <attachid>275051</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-28 14:21:11 -0700</bug_when>
    <thetext>Created attachment 275051
Patch for landing v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178538</commentid>
    <comment_count>7</comment_count>
      <attachid>275052</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-03-28 14:23:20 -0700</bug_when>
    <thetext>Created attachment 275052
Patch for landing v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178567</commentid>
    <comment_count>8</comment_count>
      <attachid>275052</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-28 15:49:05 -0700</bug_when>
    <thetext>Comment on attachment 275052
Patch for landing v2

Clearing flags on attachment: 275052

Committed r198762: &lt;http://trac.webkit.org/changeset/198762&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178568</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-28 15:49:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275039</attachid>
            <date>2016-03-28 13:01:39 -0700</date>
            <delta_ts>2016-03-28 14:21:11 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>448343</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YzA5NjNkLi4xZDRiNmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkz
IEBACisyMDE2LTAzLTI4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb2Rlcm4gSURCOiBSZW1vdmUgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGZvciBhbGwgSURC
IERPTSBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU1OTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVmYWN0b3IgLSBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93SW5kZXhlZERhdGFiYXNlOjppbmRleGVkREIpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkFueS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OklEQkFu
eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6On5JREJBbnkpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQW55OjppZGJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OmRvbVN0
cmluZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjppZGJDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQW55OjppZGJDdXJzb3JXaXRoVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQW55OjppZGJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6aWRiSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjppZGJPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJBbnk6OmlkYlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkFueTo6c2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjppbnRlZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkFueTo6a2V5UGF0aCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJBbnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJB
bnk6OmNyZWF0ZVVuZGVmaW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OnR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQW55Ojp+SURCQW55KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQkFueTo6aXNMZWdhY3kpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OklEQkN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3I6On5JREJDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yOjpzb3VyY2VzRGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmVmZmVj
dGl2ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6dHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpkaXJlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ3Vyc29yOjprZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpw
cmltYXJ5S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjphZHZhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3I6OnVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3I6OnNldEdldFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmFjdGl2
ZURPTU9iamVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjYW5TdXNwZW5k
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6aGFz
UGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZGVjcmVtZW50
T3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjppbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvcjo6c2V0UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3I6OmNsZWFyUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjppc0tleUN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3I6On5JREJDdXJzb3IpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6aXNNb2Rlcm5DdXJzb3IpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ3Vyc29yOjpoYXNQZW5kaW5nQWN0aXZpdHkpOiBEZWxldGVkLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3JXaXRoVmFsdWU6OklEQkN1cnNvcldpdGhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3JXaXRoVmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yV2l0aFZhbHVlOjp+SURCQ3Vyc29yV2l0aFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpJREJE
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2U6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Om9iamVj
dFN0b3JlTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2U6OmFjdGl2ZURPTU9iamVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6
OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnN0YXJ0VmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpk
aWRTdGFydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp3aWxs
Q29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZENv
bW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp3aWxsQWJv
cnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlkQWJvcnRU
cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlkQ29tbWl0T3JB
Ym9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpmaXJlVmVy
c2lvbkNoYW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkaXNwYXRj
aEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkaWRDcmVhdGVJbmRleElu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZERlbGV0ZUluZGV4SW5mbyk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlOjppbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
OjpkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjpzZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojppc0Nsb3NpbmdPckNsb3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6fklE
QkRhdGFiYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFRocm93U2VjdXJpdHlFeGNlcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkZhY3Rvcnk6OklEQkZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9y
eTo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5OjpvcGVu
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6Om9wZW5JbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5OjpjbXApOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6On5JREJGYWN0b3J5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6SURCSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6
On5JREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6YWN0aXZlRE9NT2JqZWN0
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50
U3VzcGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6aGFzUGVuZGluZ0FjdGl2
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpuYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkluZGV4OjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6
a2V5UGF0aEFueSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6a2V5UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleDo6dW5pcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4OjptdWx0aUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpjb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJJbmRleDo6ZG9Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3Blbktl
eUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkluZGV4Ojpkb0dldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpkb0dldEtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6bWFya0FzRGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6cmVmKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpkZXJlZik6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4OjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vy
c29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjppbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkluZGV4Ojptb2Rlcm5PYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6aXNEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojp+SURCSW5kZXgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmlzTW9kZXJuKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpJREJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6fklEQk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjphY3RpdmVET01PYmplY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmU6OmtleVBhdGhBbnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmtleVBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlOjphdXRvSW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpwdXRGb3JDdXJzb3JVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
ZG9EZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb0NvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjptYXJrQXNEZWxldGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpyb2xsYmFja0luZm9Gb3JWZXJzaW9uQ2hhbmdlQWJvcnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aXNEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjppbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
Ojptb2Rlcm5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
fklEQk9iamVjdFN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlOjppc01vZGVybik6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
T3BlbkRCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0Ojpj
cmVhdGVEZWxldGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6
OmNyZWF0ZU9wZW5SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6
OklEQk9wZW5EQlJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6
fklEQk9wZW5EQlJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6
b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0Ojp2ZXJzaW9uQ2hh
bmdlVHJhbnNhY3Rpb25EaWRGaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVx
dWVzdDo6ZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxl
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6b25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0QmxvY2tlZCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT3BlbkRCUmVxdWVzdDo6ZGF0YWJhc2VJZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OnZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
T3BlbkRCUmVxdWVzdDo6fklEQk9wZW5EQlJlcXVlc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmNyZWF0ZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmNyZWF0ZUdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3Q6On5JREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjplcnJvckNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dHJhbnNhY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6c291cmNlSW5kZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OnJlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJSZXF1ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjphY3RpdmVET01PYmplY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3Q6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6
OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6
cmVxdWVzdENvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvbkVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6cmVzb3VyY2VJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6
OmNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6bW9kZXJuUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnBlbmRpbmdDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVxdWVzdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6aXNPcGVuREJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6On5JREJSZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3RDb21wbGV0aW9uRXZlbnQ6OklEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQ6OmNyZWF0ZSk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bjo6SURCVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246On5J
REJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6bW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OnNlcnZlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6YWJvcnRE
dWVUb0ZhaWxlZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnRy
YW5zaXRpb25lZFRvRmluaXNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6YWJvcnRPblNlcnZl
ckFuZENhbmNlbFJlcXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjph
Y3RpdmVET01PYmplY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpj
YW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmlzQWN0
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjppc0ZpbmlzaGVkT3JGaW5p
c2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFkZFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlbW92ZVJlcXVlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnNjaGVkdWxlT3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlvblRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25UaW1lckZpcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246OmNvbW1pdE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpmaW5pc2hBYm9ydE9yQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpkaWRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6
bm90aWZ5RGlkQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZEFi
b3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRDb21taXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmZpcmVPbkNvbXBsZXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmNyZWF0ZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmRpZENyZWF0ZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpkb1JlcXVlc3RPcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6aXRlcmF0ZUN1cnNvck9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6cmVxdWVzdEdldEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6
cmVxdWVzdEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpn
ZXRSZWNvcmRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlk
R2V0UmVjb3JkT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJl
cXVlc3RDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdERlbGV0
ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3Jk
T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZVJl
Y29yZE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
Q2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y2xl
YXJPYmplY3RTdG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpkaWRDbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6cHV0T3JBZGRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bjo6ZGlkUHV0T3JBZGRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bjo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb246OmRpZERlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpkZWxldGVJbmRleE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpvcGVyYXRpb25EaWRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZXN0YWJsaXNoT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmFjdGl2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpk
ZWFjdGl2YXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OmRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpvcmlnaW5hbERhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6aXNWZXJzaW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjppc1JlYWRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpp
c0ZpbmlzaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zYWN0aW9uQWN0aXZhdG9yOjpUcmFu
c2FjdGlvbkFjdGl2YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2FjdGlvbkFjdGl2YXRv
cjo6flRyYW5zYWN0aW9uQWN0aXZhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjp+SURCVHJhbnNhY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJWZXJz
aW9uQ2hhbmdlRXZlbnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6Om5ld1ZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCVmVyc2lvbkNoYW5nZUV2ZW50OjpldmVudEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmg6CisgICAgICAgIChpc1R5cGUp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9u
VG9TZXJ2ZXIuY3BwOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25u
ZWN0aW9uVG9TZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
Q3Vyc29ySW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkN1cnNvckltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvcldpdGhWYWx1ZUltcGwuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJh
c2VJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkZhY3RvcnlJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCRmFjdG9yeUltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1
ZXN0SW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBs
Lmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNp
b25DaGFuZ2VFdmVudEltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmg6IFJlbW92ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcDoKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaDoK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCQ3Vyc29ySW5mby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JJbmZvOjpvYmplY3RTdG9yZUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JJbmZvOjpJREJDdXJzb3JJbmZvKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCQ3Vyc29ySW5mby5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1
ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXF1ZXN0RGF0YS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVzb3Vy
Y2VJZGVudGlmaWVyOjpJREJSZXNvdXJjZUlkZW50aWZpZXIpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcDoKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmg6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCQ3Vyc29y
Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJD
dXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCSW5k
ZXhDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJJbmRleDo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJPYmplY3RTdG9yZTo6dmlzaXRBZGRpdGlv
bmFsQ2hpbGRyZW4pOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHA6CisKIDIwMTYtMDMtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgog
CiAgICAgICAgIFNvZnRlbiBwdXNoL3JlcGxhY2VTdGF0ZSBmcmVxdWVuY3kgcmVzdHJpY3Rpb25z
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93
SW5kZXhlZERhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0RP
TVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAKaW5kZXggZjViYzZhOC4uODdkNjI2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5k
b3dJbmRleGVkRGF0YWJhc2UuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUltcGwuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAKQEAgLTEx
Miw3ICsxMTIsNyBAQCBJREJGYWN0b3J5KiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2U6OmluZGV4
ZWREQigpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX2lkYkZhY3Rvcnkp
Ci0gICAgICAgIG1faWRiRmFjdG9yeSA9IElEQkNsaWVudDo6SURCRmFjdG9yeTo6Y3JlYXRlKHBh
Z2UtPmlkYkNvbm5lY3Rpb24oKSk7CisgICAgICAgIG1faWRiRmFjdG9yeSA9IElEQkZhY3Rvcnk6
OmNyZWF0ZShwYWdlLT5pZGJDb25uZWN0aW9uKCkpOwogCiAgICAgcmV0dXJuIG1faWRiRmFjdG9y
eS5nZXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkFueS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3Bw
CmluZGV4IDRiMjg2YjYuLjNmZmZlOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQW55LmNwcApAQCAtMjgsMTAgKzI4LDEyOSBAQAogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSURC
Q3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJ
REJGYWN0b3J5LmgiCisjaW5jbHVkZSAiSURCSW5kZXguaCIKKyNpbmNsdWRlICJJREJPYmplY3RT
dG9yZS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSURCQW55OjpJREJBbnkoKQorSURCQW55OjpJREJBbnkoSURCQW55OjpUeXBlIHR5cGUp
CisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KKworSURCQW55OjpJREJBbnkoUmVmPElEQkRhdGFi
YXNlPiYmIGRhdGFiYXNlKQorICAgIDogbV90eXBlKElEQkFueTo6VHlwZTo6SURCRGF0YWJhc2Up
CisgICAgLCBtX2RhdGFiYXNlKGFkb3B0UmVmKCZkYXRhYmFzZS5sZWFrUmVmKCkpKQoreworfQor
CitJREJBbnk6OklEQkFueShSZWY8SURCT2JqZWN0U3RvcmU+JiYgb2JqZWN0U3RvcmUpCisgICAg
OiBtX3R5cGUoSURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSkKKyAgICAsIG1fb2JqZWN0U3Rv
cmUoV1RGTW92ZShvYmplY3RTdG9yZSkpCit7Cit9CisKK0lEQkFueTo6SURCQW55KFJlZjxJREJJ
bmRleD4mJiBpbmRleCkKKyAgICA6IG1fdHlwZShJREJBbnk6OlR5cGU6OklEQkluZGV4KQorICAg
ICwgbV9pbmRleChXVEZNb3ZlKGluZGV4KSkKK3sKK30KKworSURCQW55OjpJREJBbnkoUmVmPElE
QkN1cnNvcj4mJiBjdXJzb3IpCit7CisgICAgaWYgKGN1cnNvci0+aXNLZXlDdXJzb3IoKSkgewor
ICAgICAgICBtX3R5cGUgPSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcjsKKyAgICAgICAgbV9jdXJz
b3IgPSBXVEZNb3ZlKGN1cnNvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV90eXBlID0gSURC
QW55OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFsdWU7CisgICAgICAgIG1fY3Vyc29yV2l0aFZhbHVl
ID0gc3RhdGljX2Nhc3Q8SURCQ3Vyc29yV2l0aFZhbHVlKj4oJmN1cnNvci5nZXQoKSk7CisgICAg
fQorfQorCitJREJBbnk6OklEQkFueShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorICAgIDog
bV90eXBlKElEQkFueTo6VHlwZTo6S2V5UGF0aCkKKyAgICAsIG1faWRiS2V5UGF0aChrZXlQYXRo
KQoreworfQorCitJREJBbnk6OklEQkFueShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
dmFsdWUpCisgICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpTY3JpcHRWYWx1ZSkKKyAgICAsIG1f
c2NyaXB0VmFsdWUodmFsdWUpCit7Cit9CisKK0lEQkFueTo6fklEQkFueSgpCit7Cit9CisKK1Jl
ZlB0cjxJREJEYXRhYmFzZT4gSURCQW55OjppZGJEYXRhYmFzZSgpCit7CisgICAgQVNTRVJUKG1f
dHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNlKTsKKyAgICByZXR1cm4gbV9kYXRhYmFz
ZS5nZXQoKTsKK30KKworUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkFueTo6ZG9tU3RyaW5nTGlz
dCgpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JlZlB0cjxJREJDdXJzb3I+IElEQkFu
eTo6aWRiQ3Vyc29yKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURC
Q3Vyc29yIHx8IG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSk7Cisg
ICAgcmV0dXJuIG1fY3Vyc29yID8gbV9jdXJzb3IuZ2V0KCkgOiBtX2N1cnNvcldpdGhWYWx1ZS5n
ZXQoKTsKK30KKworUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gSURCQW55OjppZGJDdXJzb3JX
aXRoVmFsdWUoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJDdXJz
b3JXaXRoVmFsdWUpOworICAgIHJldHVybiBtX2N1cnNvcldpdGhWYWx1ZS5nZXQoKTsKK30KKwor
UmVmUHRyPElEQkZhY3Rvcnk+IElEQkFueTo6aWRiRmFjdG9yeSgpCit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK1JlZlB0cjxJREJJbmRleD4gSURCQW55OjppZGJJbmRleCgpCit7CisgICAg
QVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkluZGV4KTsKKyAgICByZXR1cm4gbV9p
bmRleC5nZXQoKTsKK30KKworUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJBbnk6OmlkYk9iamVj
dFN0b3JlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCT2JqZWN0
U3RvcmUpOworICAgIHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOworfQorCitSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IElEQkFueTo6aWRiVHJhbnNhY3Rpb24oKQoreworICAgIHJldHVybiBudWxs
cHRyOworfQorCitjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURCQW55OjpzY3JpcHRW
YWx1ZSgpCit7CisgICAgcmV0dXJuIG1fc2NyaXB0VmFsdWU7Cit9CisKK2ludDY0X3QgSURCQW55
OjppbnRlZ2VyKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlZ2VyOworfQorCitjb25zdCBTdHJpbmcm
IElEQkFueTo6c3RyaW5nKCkKK3sKKyAgICByZXR1cm4gbV9zdHJpbmc7Cit9CisKK2NvbnN0IElE
QktleVBhdGgmIElEQkFueTo6a2V5UGF0aCgpCiB7CisgICAgcmV0dXJuIG1faWRiS2V5UGF0aDsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJBbnkuaAppbmRleCA1YjhiZGI5Li45ZjFjNzk1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaApAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCQW55X2gKLSNkZWZpbmUg
SURCQW55X2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
QEAgLTMyLDggKzMxLDYgQEAKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRl
IDxiaW5kaW5ncy9TY3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDEzICs0MCw0NyBAQCBjbGFzcyBJREJDdXJz
b3JXaXRoVmFsdWU7CiBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIElEQkZhY3Rvcnk7CiBjbGFz
cyBJREJJbmRleDsKLWNsYXNzIElEQktleVBhdGg7CiBjbGFzcyBJREJPYmplY3RTdG9yZTsKIGNs
YXNzIElEQlRyYW5zYWN0aW9uOwogCiBjbGFzcyBJREJBbnkgOiBwdWJsaWMgU2NyaXB0V3JhcHBh
YmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJBbnk+IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5J
REJBbnkoKSB7IH0KKyAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3JlYXRlKFJlZjxJREJEYXRh
YmFzZT4mJiBkYXRhYmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURC
QW55KFdURk1vdmUoZGF0YWJhc2UpKSk7CisgICAgfQorCisgICAgc3RhdGljIFJlZjxJREJBbnk+
IGNyZWF0ZShSZWY8SURCT2JqZWN0U3RvcmU+JiYgb2JqZWN0U3RvcmUpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJBbnkoV1RGTW92ZShvYmplY3RTdG9yZSkpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgUmVmPElEQkFueT4gY3JlYXRlKFJlZjxJREJJbmRleD4mJiBpbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkFueShXVEZNb3ZlKGlu
ZGV4KSkpOworICAgIH0KKworICAgIHN0YXRpYyBSZWZQdHI8SURCQW55PiBjcmVhdGUoUmVmPElE
QkN1cnNvcj4mJiBjdXJzb3IpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElE
QkFueShXVEZNb3ZlKGN1cnNvcikpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmUHRyPElEQkFu
eT4gY3JlYXRlKGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IElEQkFueShrZXlQYXRoKSk7CisgICAgfQorCisgICAgc3RhdGljIFJl
ZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueSh2YWx1ZSkpOworICAg
IH0KKworICAgIHN0YXRpYyBSZWZQdHI8SURCQW55PiBjcmVhdGVVbmRlZmluZWQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoSURCQW55OjpUeXBlOjpVbmRlZmlu
ZWQpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5JREJBbnkoKTsKIAogICAgIGVudW0gY2xhc3Mg
VHlwZSB7CiAgICAgICAgIFVuZGVmaW5lZCA9IDAsCkBAIC02OCwzMCArOTksNDIgQEAgcHVibGlj
OgogICAgICAgICBLZXlQYXRoLAogICAgIH07CiAKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSBoYWNrIHRvIGFsbG93IGNhc3RzIGluIFdlYkluc3BlY3RvciBjb2RlIHdoaWxlIE1v
ZGVybiBJREIgYW5kIExlZ2FjeSBJREIgbGl2ZSBzaWRlLWJ5LXNpZGUuCi0gICAgLy8gSXQgc2hv
dWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9uIGlzIHJlbW92ZWQg
YXMgcGFydCBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MTE3
Ci0gICAgdmlydHVhbCBib29sIGlzTGVnYWN5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQot
ICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURC
Q3Vyc29yPiBpZGJDdXJzb3IoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCQ3Vyc29yV2l0
aFZhbHVlPiBpZGJDdXJzb3JXaXRoVmFsdWUoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURC
RGF0YWJhc2U+IGlkYkRhdGFiYXNlKCkgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQkZhY3Rv
cnk+IGlkYkZhY3RvcnkoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCSW5kZXg+IGlkYklu
ZGV4KCkgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJPYmplY3RT
dG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNh
Y3Rpb24oKSA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
c2NyaXB0VmFsdWUoKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGludGVnZXIoKSA9IDA7Ci0g
ICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHN0cmluZygpID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0
IElEQktleVBhdGgmIGtleVBhdGgoKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBJREJBbnkoKTsK
KyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCgpOworICAgIFJlZlB0cjxJREJDdXJzb3I+IGlkYkN1
cnNvcigpOworICAgIFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGlkYkN1cnNvcldpdGhWYWx1
ZSgpOworICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UoKTsKKyAgICBSZWZQdHI8
SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpOworICAgIFJlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgo
KTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7CisgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbigpOworICAgIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSgpOworICAgIGludDY0X3QgaW50ZWdlcigpOwor
ICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCk7CisgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCgpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IElEQkFueShJREJBbnk6OlR5cGUpOworICAg
IGV4cGxpY2l0IElEQkFueShSZWY8SURCRGF0YWJhc2U+JiYpOworICAgIGV4cGxpY2l0IElEQkFu
eShSZWY8SURCT2JqZWN0U3RvcmU+JiYpOworICAgIGV4cGxpY2l0IElEQkFueShSZWY8SURCSW5k
ZXg+JiYpOworICAgIGV4cGxpY2l0IElEQkFueShSZWY8SURCQ3Vyc29yPiYmKTsKKyAgICBleHBs
aWNpdCBJREJBbnkoY29uc3QgSURCS2V5UGF0aCYpOworICAgIGV4cGxpY2l0IElEQkFueShjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworCisgICAgSURCQW55OjpUeXBlIG1fdHlwZSB7
IElEQkFueTo6VHlwZTo6VW5kZWZpbmVkIH07CisgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2Rh
dGFiYXNlOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKKyAgICBS
ZWZQdHI8SURCSW5kZXg+IG1faW5kZXg7CisgICAgUmVmUHRyPElEQkN1cnNvcj4gbV9jdXJzb3I7
CisgICAgUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gbV9jdXJzb3JXaXRoVmFsdWU7CisKKyAg
ICBjb25zdCBJREJLZXlQYXRoIG1faWRiS2V5UGF0aDsKKyAgICBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSBtX3NjcmlwdFZhbHVlOworICAgIGNvbnN0IFN0cmluZyBtX3N0cmluZzsKKyAg
ICBjb25zdCBpbnQ2NF90IG1faW50ZWdlciB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8g
SURCQW55X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwCmluZGV4IDAzNjYxZTIuLjliZjhmYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtMjgsMTUgKzI4LDIwIEBACiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJHZXRSZXN1
bHQuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUu
aCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCQ3Vyc29yOjpJREJDdXJzb3Io
KQotewotfQotCiBjb25zdCBBdG9taWNTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgp
CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gbmV4dCgibmV4dCIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwpAQCAtOTcsNiArMTAyLDM0OCBA
QCBjb25zdCBBdG9taWNTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9uVG9TdHJpbmcoSW5kZXhl
ZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZQogICAgIH0KIH0KIAorUmVmPElEQkN1cnNvcj4gSURC
Q3Vyc29yOjpjcmVhdGUoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJJbmRleCYgaW5k
ZXgsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCQ3Vyc29yKHRyYW5zYWN0aW9uLCBpbmRleCwgaW5mbykpOworfQorCitJREJDdXJzb3I6
OklEQkN1cnNvcihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlJiBv
YmplY3RTdG9yZSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKKyAgICA6IEFjdGl2ZURPTU9i
amVjdCh0cmFuc2FjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2luZm8o
aW5mbykKKyAgICAsIG1fc291cmNlKElEQkFueTo6Y3JlYXRlKG9iamVjdFN0b3JlKS5sZWFrUmVm
KCkpCisgICAgLCBtX29iamVjdFN0b3JlKCZvYmplY3RTdG9yZSkKK3sKKyAgICBzdXNwZW5kSWZO
ZWVkZWQoKTsKK30KKworSURCQ3Vyc29yOjpJREJDdXJzb3IoSURCVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCisgICAg
OiBBY3RpdmVET01PYmplY3QodHJhbnNhY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQor
ICAgICwgbV9pbmZvKGluZm8pCisgICAgLCBtX3NvdXJjZShJREJBbnk6OmNyZWF0ZShpbmRleCku
bGVha1JlZigpKQorICAgICwgbV9pbmRleCgmaW5kZXgpCit7CisgICAgc3VzcGVuZElmTmVlZGVk
KCk7Cit9CisKK0lEQkN1cnNvcjo6fklEQkN1cnNvcigpCit7Cit9CisKK2Jvb2wgSURCQ3Vyc29y
Ojpzb3VyY2VzRGVsZXRlZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fb2JqZWN0U3RvcmUpCisgICAg
ICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5pc0RlbGV0ZWQoKTsKKworICAgIEFTU0VSVChtX2lu
ZGV4KTsKKyAgICByZXR1cm4gbV9pbmRleC0+aXNEZWxldGVkKCkgfHwgbV9pbmRleC0+bW9kZXJu
T2JqZWN0U3RvcmUoKS5pc0RlbGV0ZWQoKTsKK30KKworSURCT2JqZWN0U3RvcmUmIElEQkN1cnNv
cjo6ZWZmZWN0aXZlT2JqZWN0U3RvcmUoKSBjb25zdAoreworICAgIGlmIChtX29iamVjdFN0b3Jl
KQorICAgICAgICByZXR1cm4gKm1fb2JqZWN0U3RvcmU7CisKKyAgICBBU1NFUlQobV9pbmRleCk7
CisgICAgcmV0dXJuIG1faW5kZXgtPm1vZGVybk9iamVjdFN0b3JlKCk7Cit9CisKK0lEQlRyYW5z
YWN0aW9uJiBJREJDdXJzb3I6OnRyYW5zYWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZWZm
ZWN0aXZlT2JqZWN0U3RvcmUoKS5tb2Rlcm5UcmFuc2FjdGlvbigpOworfQorCitjb25zdCBTdHJp
bmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSURCQ3Vyc29y
OjpkaXJlY3Rpb25Ub1N0cmluZyhtX2luZm8uY3Vyc29yRGlyZWN0aW9uKCkpOworfQorCitjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURCQ3Vyc29yOjprZXkoKSBjb25zdAoreworICAg
IHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50S2V5OworfQorCitjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgSURCQ3Vyc29yOjpwcmltYXJ5S2V5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlLZXk7Cit9CisKK2NvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBJREJDdXJzb3I6OnZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZXBy
ZWNhdGVkQ3VycmVudFZhbHVlOworfQorCitJREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkKK3sK
KyAgICByZXR1cm4gJm1fc291cmNlLmdldCgpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVx
dWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjp1cGRhdGUiKTsKKworICAgIGlmIChzb3VyY2Vz
RGVsZXRlZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52
YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNl
IG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCF0cmFuc2FjdGlvbigpLmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlv
bkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgdHJhbnNhY3Rpb24gaXMg
aW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIGlmICh0cmFuc2FjdGlvbigpLmlzUmVhZE9ubHkoKSkgeworICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7CisgICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJz
b3InOiBUaGUgcmVjb3JkIG1heSBub3QgYmUgdXBkYXRlZCBpbnNpZGUgYSByZWFkLW9ubHkgdHJh
bnNhY3Rpb24uIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICgh
bV9nb3RWYWx1ZSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWlu
ZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoaXNLZXlDdXJzb3IoKSkgeworICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBv
biAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBhIGtleSBjdXJzb3IuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8mIG9iamVjdFN0b3JlID0gZWZmZWN0aXZl
T2JqZWN0U3RvcmUoKTsKKyAgICBhdXRvJiBrZXlQYXRoID0gb2JqZWN0U3RvcmUuaW5mbygpLmtl
eVBhdGgoKTsKKyAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGguaXNOdWxs
KCk7CisgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtl
eVBhdGhLZXkgPSBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhl
YywgdmFsdWUsIGtleVBhdGgpOworICAgICAgICBJREJLZXlEYXRhIGtleVBhdGhLZXlEYXRhKGtl
eVBhdGhLZXkuZ2V0KCkpOworICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwga2V5UGF0aEtleURh
dGEgIT0gbV9jdXJyZW50UHJpbWFyeUtleURhdGEpIHsKKyAgICAgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6
IFRoZSBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIG9mIHRoaXMgY3Vyc29yIHVzZXMgaW4tbGluZSBr
ZXlzIGFuZCBldmFsdWF0aW5nIHRoZSBrZXkgcGF0aCBvZiB0aGUgdmFsdWUgcGFyYW1ldGVyIHJl
c3VsdHMgaW4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgY3Vyc29yJ3MgZWZmZWN0aXZlIGtl
eS4iKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisg
ICAgYXV0byByZXF1ZXN0ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5wdXRGb3JDdXJzb3JVcGRh
dGUoZXhlYywgdmFsdWUuanNWYWx1ZSgpLCBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5q
c1ZhbHVlKCksIGVjKTsKKyAgICBpZiAoZWMuY29kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBBU1NFUlQocmVxdWVzdCk7CisgICAgcmVxdWVzdC0+c2V0U291cmNlKCp0aGlzKTsK
KyAgICArK21fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7CisKKyAgICByZXR1cm4gcmVxdWVzdDsK
K30KKwordm9pZCBJREJDdXJzb3I6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29y
OjphZHZhbmNlIik7CisKKyAgICBpZiAoIW1fcmVxdWVzdCkgeworICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgZWMuY29kZSA9IFR5cGVF
cnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2FkdmFuY2UnIG9uICdJREJDdXJzb3InOiBBIGNvdW50IGFyZ3VtZW50IHdpdGggdmFsdWUg
MCAoemVybykgd2FzIHN1cHBsaWVkLCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpIHsKKyAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FkdmFuY2Un
IG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qg
c3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghdHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2YW5jZScgb24gJ0lE
QkN1cnNvcic6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9nb3RWYWx1ZSkgeworICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2YW5jZScg
b24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQgb3IgaGFzIGl0ZXJh
dGVkIHBhc3QgaXRzIGVuZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZ290
VmFsdWUgPSBmYWxzZTsKKworICAgIHVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IoSURCS2V5RGF0YSgp
LCBjb3VudCk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIGNv
bnRpbnVlRnVuY3Rpb24oSURCS2V5RGF0YSgpLCBlYyk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yOjpj
b250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykKK3sKKyAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKKyAg
ICBSZWZQdHI8SURCS2V5PiBrZXk7CisgICAgaWYgKCFrZXlWYWx1ZS5qc1ZhbHVlKCkuaXNVbmRl
ZmluZWQoKSkKKyAgICAgICAga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRl
LCBrZXlWYWx1ZSk7CisKKyAgICBjb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSwgZWMpOworfQor
Cit2b2lkIElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRhJiBrZXks
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QkN1cnNvcjo6Y29udGludWVGdW5jdGlvbiAodG8ga2V5ICVzKSIsIGtleS5sb2dnaW5nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAoIW1fcmVxdWVzdCkgeworICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpIHsKKyAgICAgICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlJyBv
biAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0
b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURC
Q3Vyc29yJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2dvdFZhbHVlKSB7CisgICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAg
IGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZScg
b24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQgb3IgaGFzIGl0ZXJh
dGVkIHBhc3QgaXRzIGVuZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
a2V5LmlzTnVsbCgpICYmICFrZXkuaXNWYWxpZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChtX2luZm8uaXNEaXJlY3Rpb25Gb3J3YXJkKCkpIHsKKyAgICAgICAgaWYgKCFr
ZXkuaXNOdWxsKCkgJiYga2V5LmNvbXBhcmUobV9jdXJyZW50S2V5RGF0YSkgPD0gMCkgeworICAg
ICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAg
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29u
dGludWUnIG9uICdJREJDdXJzb3InOiBUaGUgcGFyYW1ldGVyIGlzIGxlc3MgdGhhbiBvciBlcXVh
bCB0byB0aGlzIGN1cnNvcidzIHBvc2l0aW9uLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5jb21wYXJlKG1fY3Vy
cmVudEtleURhdGEpID49IDApIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBwYXJhbWV0ZXIgaXMg
Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgY3Vyc29yJ3MgcG9zaXRpb24uIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2dvdFZhbHVlID0gZmFsc2U7CisKKyAgICB1bmNo
ZWNrZWRJdGVyYXRlQ3Vyc29yKGtleSwgMCk7Cit9CisKK3ZvaWQgSURCQ3Vyc29yOjp1bmNoZWNr
ZWRJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQktleURhdGEmIGtleSwgdW5zaWduZWQgbG9uZyBjb3Vu
dCkKK3sKKyAgICArK21fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7CisKKyAgICBtX3JlcXVlc3Qt
PndpbGxJdGVyYXRlQ3Vyc29yKCp0aGlzKTsKKyAgICB0cmFuc2FjdGlvbigpLml0ZXJhdGVDdXJz
b3IoKnRoaXMsIGtleSwgY291bnQpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4g
SURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uIik7CisKKyAgICBpZiAoc291cmNlc0RlbGV0ZWQoKSkg
eworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVy
cm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3Rp
dmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGlmICghdHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVy
cm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9y
IGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAo
dHJhbnNhY3Rpb24oKS5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHJl
Y29yZCBtYXkgbm90IGJlIGRlbGV0ZWQgaW5zaWRlIGEgcmVhZC1vbmx5IHRyYW5zYWN0aW9uLiIp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIW1fZ290VmFsdWUp
IHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQg
b3IgaGFzIGl0ZXJhdGVkIHBhc3QgaXRzIGVuZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKGlzS2V5Q3Vyc29yKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNv
cic6IFRoZSBjdXJzb3IgaXMgYSBrZXkgY3Vyc29yLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3QgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLm1v
ZGVybkRlbGV0ZShjb250ZXh0LCBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5qc1ZhbHVl
KCksIGVjKTsKKyAgICBpZiAoZWMuY29kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBBU1NFUlQocmVxdWVzdCk7CisgICAgcmVxdWVzdC0+c2V0U291cmNlKCp0aGlzKTsKKyAgICAr
K21fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwor
dm9pZCBJREJDdXJzb3I6OnNldEdldFJlc3VsdChJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJ
REJHZXRSZXN1bHQmIGdldFJlc3VsdCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29y
OjpzZXRHZXRSZXN1bHQgLSBjdXJyZW50IGtleSAlcyIsIGdldFJlc3VsdC5rZXlEYXRhKCkubG9n
Z2luZ1N0cmluZygpLnN1YnN0cmluZygwLCAxMDApLnV0ZjgoKS5kYXRhKCkpOworCisgICAgYXV0
byogY29udGV4dCA9IHJlcXVlc3Quc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFnZXRSZXN1bHQuaXNEZWZpbmVk
KCkpIHsKKyAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudEtleSA9IHsgfTsKKyAgICAgICAgbV9j
dXJyZW50S2V5RGF0YSA9IHsgfTsKKyAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlL
ZXkgPSB7IH07CisgICAgICAgIG1fY3VycmVudFByaW1hcnlLZXlEYXRhID0geyB9OworICAgICAg
ICBtX2RlcHJlY2F0ZWRDdXJyZW50VmFsdWUgPSB7IH07CisKKyAgICAgICAgbV9nb3RWYWx1ZSA9
IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kZXByZWNhdGVkQ3VycmVu
dEtleSA9IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKGNvbnRleHQsIGdldFJlc3VsdC5rZXlEYXRh
KCkpOworICAgIG1fY3VycmVudEtleURhdGEgPSBnZXRSZXN1bHQua2V5RGF0YSgpOworICAgIG1f
ZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5ID0gaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoY29u
dGV4dCwgZ2V0UmVzdWx0LnByaW1hcnlLZXlEYXRhKCkpOworICAgIG1fY3VycmVudFByaW1hcnlL
ZXlEYXRhID0gZ2V0UmVzdWx0LnByaW1hcnlLZXlEYXRhKCk7CisKKyAgICBpZiAoaXNLZXlDdXJz
b3IoKSkKKyAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0geyB9OworICAgIGVsc2UK
KyAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURh
dGEoKmNvbnRleHQsIGdldFJlc3VsdC52YWx1ZUJ1ZmZlcigpKTsKKworICAgIG1fZ290VmFsdWUg
PSB0cnVlOworfQorCitjb25zdCBjaGFyKiBJREJDdXJzb3I6OmFjdGl2ZURPTU9iamVjdE5hbWUo
KSBjb25zdAoreworICAgIHJldHVybiAiSURCQ3Vyc29yIjsKK30KKworYm9vbCBJREJDdXJzb3I6
OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBJREJDdXJzb3I6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7Cit9CisKK3ZvaWQgSURCQ3Vy
c29yOjpkZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpCit7CisgICAgQVNTRVJUKG1f
b3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQpOworICAgIC0tbV9vdXRzdGFuZGluZ1JlcXVlc3RDb3Vu
dDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5oCmluZGV4IDI0ZDNhOTMuLjg0ZjhiOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC0yMywzMSArMjMsMjcgQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIElEQkN1cnNvcl9oCi0jZGVmaW5l
IElEQkN1cnNvcl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNp
bmNsdWRlICJJbmRleGVkREIuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNs
dWRlIDxiaW5kaW5ncy9TY3JpcHRWYWx1ZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKyNpbmNsdWRl
ICJJREJDdXJzb3JJbmZvLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRE9NUmVx
dWVzdFN0YXRlOwogY2xhc3MgSURCQW55OwotY2xhc3MgSURCQ2FsbGJhY2tzOwotY2xhc3MgSURC
UmVxdWVzdDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBJREJHZXRSZXN1
bHQ7CitjbGFzcyBJREJJbmRleDsKK2NsYXNzIElEQk9iamVjdFN0b3JlOworY2xhc3MgSURCVHJh
bnNhY3Rpb247CiAKLXN0cnVjdCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2U7Ci0KLWNsYXNzIElE
QkN1cnNvciA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPElEQkN1
cnNvcj4geworY2xhc3MgSURCQ3Vyc29yIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGlj
IFJlZkNvdW50ZWQ8SURCQ3Vyc29yPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxJREJDdXJzb3I+IGNyZWF0ZShJREJUcmFuc2FjdGlvbiYsIElEQklu
ZGV4JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOworCiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0
cmluZyYgZGlyZWN0aW9uTmV4dCgpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGRp
cmVjdGlvbk5leHRVbmlxdWUoKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJl
Y3Rpb25QcmV2KCk7CkBAIC01NSwzOSArNTEsNzMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIHN0cmluZ1RvRGlyZWN0aW9uKGNvbnN0IFN0cmluZyYg
bW9kZVN0cmluZywgRXhjZXB0aW9uQ29kZSYpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJp
bmcmIGRpcmVjdGlvblRvU3RyaW5nKEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIG1vZGUpOwot
Ci0gICAgdmlydHVhbCB+SURCQ3Vyc29yKCkgeyB9CisgICAgCisgICAgdmlydHVhbCB+SURCQ3Vy
c29yKCk7CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElETAotICAgIHZpcnR1YWwgY29uc3QgU3Ry
aW5nJiBkaXJlY3Rpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHByaW1hcnlLZXkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBJREJBbnkqIHNvdXJjZSgpID0gMDsKKyAgICBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbigp
IGNvbnN0OworICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXkoKSBjb25zdDsK
KyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgcHJpbWFyeUtleSgpIGNvbnN0Owor
ICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSgpIGNvbnN0OworICAgIElE
QkFueSogc291cmNlKCk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gdXBkYXRl
KEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKTsKKyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJik7CisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICB2b2lkIGNvbnRp
bnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJS
ZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWR2YW5j
ZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7CisgICAgdm9p
ZCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleURhdGEmLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhhdCBtZXRob2Qg
KHRha2luZyBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgcG9pbnRlciBhbmQgbm90IGEgcmVmZXJl
bmNlKQotICAgIC8vIGJ1dCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCB3YW50cyB0byBjYWxsIGl0
IHdpdGggYSBudWxsIGNvbnRleHQuIAotICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7
Ci0gICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMg
b3ZlcmxvYWQgaXMgdW5uZWVkZWQuCi0gICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIHsg
Y29udGludWVGdW5jdGlvbigmY29udGV4dCwgZWMpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRp
bnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOworICAgIGNvbnN0IElEQkN1cnNv
ckluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KIAotICAgIHZpcnR1YWwgYm9v
bCBpc0tleUN1cnNvcigpIGNvbnN0ID0gMDsKKyAgICB2b2lkIHNldFJlcXVlc3QoSURCUmVxdWVz
dCYgcmVxdWVzdCkgeyBtX3JlcXVlc3QgPSAmcmVxdWVzdDsgfQorICAgIHZvaWQgY2xlYXJSZXF1
ZXN0KCkgeyBtX3JlcXVlc3QgPSBudWxscHRyOyB9CisgICAgSURCUmVxdWVzdCogcmVxdWVzdCgp
IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQogCi0gICAgdmlydHVhbCBib29sIGlzTW9kZXJuQ3Vyc29y
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldEdldFJlc3VsdChJREJSZXF1
ZXN0JiwgY29uc3QgSURCR2V0UmVzdWx0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNL
ZXlDdXJzb3IoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGRlY3JlbWVudE91
dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QuCisgICAg
Y29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0OworICAgIGJvb2wgY2FuU3Vz
cGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0OworICAgIGJvb2wgaGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBJREJDdXJzb3IoKTsKKyAgICBJREJD
dXJzb3IoSURCVHJhbnNhY3Rpb24mLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQkN1cnNvcklu
Zm8mKTsKKyAgICBJREJDdXJzb3IoSURCVHJhbnNhY3Rpb24mLCBJREJJbmRleCYsIGNvbnN0IElE
QkN1cnNvckluZm8mKTsKKworcHJpdmF0ZToKKyAgICAvLyBDdXJzb3JzIGFyZSBjcmVhdGVkIHdp
dGggYW4gb3V0c3RhbmRpbmcgaXRlcmF0aW9uIHJlcXVlc3QuCisgICAgdW5zaWduZWQgbV9vdXRz
dGFuZGluZ1JlcXVlc3RDb3VudCB7IDEgfTsKKworICAgIElEQkN1cnNvckluZm8gbV9pbmZvOwor
ICAgIFJlZjxJREJBbnk+IG1fc291cmNlOworICAgIElEQk9iamVjdFN0b3JlKiBtX29iamVjdFN0
b3JlIHsgbnVsbHB0ciB9OworICAgIElEQkluZGV4KiBtX2luZGV4IHsgbnVsbHB0ciB9OworICAg
IElEQlJlcXVlc3QqIG1fcmVxdWVzdDsKKworICAgIGJvb2wgc291cmNlc0RlbGV0ZWQoKSBjb25z
dDsKKyAgICBJREJPYmplY3RTdG9yZSYgZWZmZWN0aXZlT2JqZWN0U3RvcmUoKSBjb25zdDsKKyAg
ICBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24oKSBjb25zdDsKKworICAgIHZvaWQgdW5jaGVj
a2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJLZXlEYXRhJiwgdW5zaWduZWQgbG9uZyBjb3VudCk7
CisKKyAgICBib29sIG1fZ290VmFsdWUgeyBmYWxzZSB9OworCisgICAgSURCS2V5RGF0YSBtX2N1
cnJlbnRLZXlEYXRhOworICAgIElEQktleURhdGEgbV9jdXJyZW50UHJpbWFyeUtleURhdGE7CisK
KyAgICAvLyBGSVhNRTogV2hlbiBkaXRjaGluZyBMZWdhY3kgSURCIGFuZCBjb21iaW5pbmcgdGhp
cyBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSBhYnN0cmFjdCBJREJDdXJzb3IsCisgICAgLy8gdGhl
c2UgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbWVtYmVycyBzaG91bGQgYmUgSlNWYWx1ZXMgaW5z
dGVhZC4KKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RlcHJlY2F0ZWRDdXJyZW50S2V5
OworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5
S2V5OworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGVwcmVjYXRlZEN1cnJlbnRWYWx1
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCi0KLSNlbmRpZiAvLyBJ
REJDdXJzb3JfaAorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5j
cHAKaW5kZXggNWNlNDczOC4uMTRhNmNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCkBAIC0zMCw3ICszMCwy
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vy
c29yV2l0aFZhbHVlKCkKK1JlZjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1
ZTo6Y3JlYXRlKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmUmIG9i
amVjdFN0b3JlLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IElEQkN1cnNvcldpdGhWYWx1ZSh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUsIGlu
Zm8pKTsKK30KKworUmVmPElEQkN1cnNvcldpdGhWYWx1ZT4gSURCQ3Vyc29yV2l0aFZhbHVlOjpj
cmVhdGUoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0
IElEQkN1cnNvckluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vy
c29yV2l0aFZhbHVlKHRyYW5zYWN0aW9uLCBpbmRleCwgaW5mbykpOworfQorCitJREJDdXJzb3JX
aXRoVmFsdWU6OklEQkN1cnNvcldpdGhWYWx1ZShJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykK
KyAgICA6IElEQkN1cnNvcih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUsIGluZm8pCit7Cit9CisK
K0lEQkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZhbHVlKElEQlRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQor
ICAgIDogSURCQ3Vyc29yKHRyYW5zYWN0aW9uLCBpbmRleCwgaW5mbykKK3sKK30KKworSURCQ3Vy
c29yV2l0aFZhbHVlOjp+SURCQ3Vyc29yV2l0aFZhbHVlKCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaAppbmRl
eCA1Zjk5MDkwLi5mMTAwZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaApAQCAtMjMsOCArMjMsNyBAQAogICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCQ3Vyc29yV2l0
aFZhbHVlX2gKLSNkZWZpbmUgSURCQ3Vyc29yV2l0aFZhbHVlX2gKKyNwcmFnbWEgb25jZQogCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKQEAgLTM0LDE0ICszMywxOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkN1cnNvcldpdGhWYWx1ZSA6IHB1YmxpYyBJREJDdXJz
b3IgewogcHVibGljOgotICAgIHZpcnR1YWwgfklEQkN1cnNvcldpdGhWYWx1ZSgpIHsgfQorICAg
IHN0YXRpYyBSZWY8SURCQ3Vyc29yV2l0aFZhbHVlPiBjcmVhdGUoSURCVHJhbnNhY3Rpb24mLCBJ
REJPYmplY3RTdG9yZSYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKKyAgICBzdGF0aWMgUmVmPElE
QkN1cnNvcldpdGhWYWx1ZT4gY3JlYXRlKElEQlRyYW5zYWN0aW9uJiwgSURCSW5kZXgmLCBjb25z
dCBJREJDdXJzb3JJbmZvJik7CiAKLXByb3RlY3RlZDoKLSAgICBJREJDdXJzb3JXaXRoVmFsdWUo
KTsKKyAgICB2aXJ0dWFsIH5JREJDdXJzb3JXaXRoVmFsdWUoKTsKKworICAgIGJvb2wgaXNLZXlD
dXJzb3IoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIElE
QkN1cnNvcldpdGhWYWx1ZShJREJUcmFuc2FjdGlvbiYsIElEQk9iamVjdFN0b3JlJiwgY29uc3Qg
SURCQ3Vyc29ySW5mbyYpOworICAgIElEQkN1cnNvcldpdGhWYWx1ZShJREJUcmFuc2FjdGlvbiYs
IElEQkluZGV4JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYKLQotI2VuZGlmIC8vIExlZ2FjeUN1cnNvcldpdGhWYWx1ZV9oCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggMmQ2NDc5Zi4uYTI5ZGYwMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNw
cApAQCAtMjgsMTEgKzI4LDQwMSBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAK
KyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgorI2lu
Y2x1ZGUgIklEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdC5oIgorI2luY2x1ZGUgIklEQlJl
c3VsdERhdGEuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIklEQlZl
cnNpb25DaGFuZ2VFdmVudC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCRGF0YWJh
c2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBB
Y3RpdmVET01PYmplY3QoY29udGV4dCkKK1JlZjxJREJEYXRhYmFzZT4gSURCRGF0YWJhc2U6OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJEYXRhYmFzZShjb250ZXh0LCBjb25u
ZWN0aW9uLCByZXN1bHREYXRhKSk7Cit9CisKK0lEQkRhdGFiYXNlOjpJREJEYXRhYmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgY29ubmVjdGlvbiwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKKyAgICA6
IFdlYkNvcmU6OkFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKKyAgICAsIG1fc2VydmVyQ29ubmVj
dGlvbihjb25uZWN0aW9uKQorICAgICwgbV9pbmZvKHJlc3VsdERhdGEuZGF0YWJhc2VJbmZvKCkp
CisgICAgLCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIocmVzdWx0RGF0YS5kYXRhYmFz
ZUNvbm5lY3Rpb25JZGVudGlmaWVyKCkpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFi
YXNlOjpJREJEYXRhYmFzZSAtIENyZWF0aW5nIGRhdGFiYXNlICVzIHdpdGggdmVyc2lvbiAlIiBQ
Ukl1NjQgIiBjb25uZWN0aW9uICUiIFBSSXU2NCwgbV9pbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgp
LCBtX2luZm8udmVyc2lvbigpLCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOworICAg
IHN1c3BlbmRJZk5lZWRlZCgpOworICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworICAg
IG1fc2VydmVyQ29ubmVjdGlvbi0+cmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMpOwor
fQorCitJREJEYXRhYmFzZTo6fklEQkRhdGFiYXNlKCkKK3sKKyAgICBtX3NlcnZlckNvbm5lY3Rp
b24tPnVucmVnaXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMpOworfQorCitib29sIElEQkRh
dGFiYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9jbG9z
ZWRJblNlcnZlcjsKK30KKworY29uc3QgU3RyaW5nIElEQkRhdGFiYXNlOjpuYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9pbmZvLm5hbWUoKTsKK30KKwordWludDY0X3QgSURCRGF0YWJhc2U6
OnZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2luZm8udmVyc2lvbigpOworfQorCitS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCRGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25z
dAoreworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKCk7CisgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLm9iamVjdFN0
b3JlTmFtZXMoKSkKKyAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOworICAg
IG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKKyAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsK
K30KKworUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiwgY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gSURCRGF0YWJh
c2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
IGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUiKTsKKworICAgIEFTU0VSVCghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgbV92ZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKTsKKworICAgIGlmICghbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0
YWJhc2UnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFu
c2FjdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCFt
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1faW5mby5oYXNPYmplY3RTdG9y
ZShuYW1lKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0
cmFpbnRFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBBbiBvYmplY3Qg
c3RvcmUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgYWxyZWFkeSBleGlzdHMuIik7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICgha2V5UGF0aC5pc051bGwoKSAmJiAh
a2V5UGF0aC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpTeW50YXhFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUg
a2V5UGF0aCBvcHRpb24gaXMgbm90IGEgdmFsaWQga2V5IHBhdGguIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIGlmIChhdXRvSW5jcmVtZW50ICYmICFrZXlQYXRoLmlz
TnVsbCgpKSB7CisgICAgICAgIGlmICgoa2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQ
YXRoVHlwZTo6U3RyaW5nICYmIGtleVBhdGguc3RyaW5nKCkuaXNFbXB0eSgpKSB8fCBrZXlQYXRo
LnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpBcnJheSkgeworICAgICAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7CisgICAg
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3Jl
YXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBhdXRvSW5jcmVtZW50IG9wdGlv
biB3YXMgc2V0IGJ1dCB0aGUga2V5UGF0aCBvcHRpb24gd2FzIGVtcHR5IG9yIGFuIGFycmF5LiIp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBJbnN0YWxsIHRoZSBuZXcgT2JqZWN0U3RvcmUgaW50byB0aGUgY29ubmVjdGlvbidzIG1ldGFk
YXRhLgorICAgIElEQk9iamVjdFN0b3JlSW5mbyBpbmZvID0gbV9pbmZvLmNyZWF0ZU5ld09iamVj
dFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOworCisgICAgLy8gQ3JlYXRlIHRo
ZSBhY3R1YWwgSURCT2JqZWN0U3RvcmUgZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdoaWNoIGFsc28g
c2NoZWR1bGVzIHRoZSBvcGVyYXRpb24gc2VydmVyIHNpZGUuCisgICAgUmVmPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5jcmVhdGVPYmpl
Y3RTdG9yZShpbmZvKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoJm9iamVjdFN0b3JlLmxlYWtSZWYo
KSk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRy
YW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
b2JqZWN0U3RvcmVzLCBjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp0cmFuc2Fj
dGlvbiIpOworCisgICAgaWYgKG1fY2xvc2VQZW5kaW5nKSB7CisgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lE
QkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG9iamVjdFN0b3Jlcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNj
ZXNzRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIHN0b3JlTmFtZXMgcGFy
YW1ldGVyIHdhcyBlbXB0eS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSA9IElEQlRyYW5zYWN0aW9uOjpzdHJp
bmdUb01vZGUobW9kZVN0cmluZywgZWMuY29kZSk7CisgICAgaWYgKGVjLmNvZGUpIHsKKyAgICAg
ICAgZWMubWVzc2FnZSA9IG1ha2VTdHJpbmcoQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBtb2RlIHByb3ZpZGVkICgnIiks
IG1vZGVTdHJpbmcsIEFTQ0lJTGl0ZXJhbCgiJykgaXMgbm90IG9uZSBvZiAncmVhZG9ubHknIG9y
ICdyZWFkd3JpdGUnLiIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
aWYgKG1vZGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5ICYmIG1vZGUg
IT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRXcml0ZSkgeworICAgICAgICBlYy5j
b2RlID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBp
ZiAobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uLT5pc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRh
YmFzZSc6IEEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24gaXMgcnVubmluZy4iKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZU5h
bWUgOiBvYmplY3RTdG9yZXMpIHsKKyAgICAgICAgaWYgKG1faW5mby5oYXNPYmplY3RTdG9yZShv
YmplY3RTdG9yZU5hbWUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURC
RGF0YWJhc2UnOiBPbmUgb2YgdGhlIHNwZWNpZmllZCBvYmplY3Qgc3RvcmVzIHdhcyBub3QgZm91
bmQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gaW5mbyA9
IElEQlRyYW5zYWN0aW9uSW5mbzo6Y2xpZW50VHJhbnNhY3Rpb24obV9zZXJ2ZXJDb25uZWN0aW9u
LmdldCgpLCBvYmplY3RTdG9yZXMsIG1vZGUpOworICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvKTsKKworICAgIExPRyhJbmRleGVkREIsICJJ
REJEYXRhYmFzZTo6dHJhbnNhY3Rpb24gLSBBZGRlZCBhY3RpdmUgdHJhbnNhY3Rpb24gJXMiLCBp
bmZvLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBt
X2FjdGl2ZVRyYW5zYWN0aW9ucy5zZXQoaW5mby5pZGVudGlmaWVyKCksICZ0cmFuc2FjdGlvbi5n
ZXQoKSk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoJnRyYW5zYWN0aW9uLmxlYWtSZWYoKSk7Cit9
CisKK1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmUsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZXMoMSk7CisgICAgb2JqZWN0U3RvcmVz
WzBdID0gb2JqZWN0U3RvcmU7CisgICAgcmV0dXJuIHRyYW5zYWN0aW9uKGNvbnRleHQsIG9iamVj
dFN0b3JlcywgbW9kZSwgZWMpOworfQorCit2b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVj
dFN0b3JlIik7CisKKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Cisg
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxl
dGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGlzIG5vdCBydW5u
aW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7
CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2luZm8uaGFz
T2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRh
dGFiYXNlJzogVGhlIHNwZWNpZmllZCBvYmplY3Qgc3RvcmUgd2FzIG5vdCBmb3VuZC4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5mby5kZWxldGVPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZU5hbWUpOworICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5kZWxldGVPYmpl
Y3RTdG9yZShvYmplY3RTdG9yZU5hbWUpOworfQorCit2b2lkIElEQkRhdGFiYXNlOjpjbG9zZSgp
Cit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpjbG9zZSAtICUiIFBSSXU2NCwg
bV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKworICAgIG1fY2xvc2VQZW5kaW5nID0g
dHJ1ZTsKKyAgICBtYXliZUNsb3NlSW5TZXJ2ZXIoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6
bWF5YmVDbG9zZUluU2VydmVyKCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6
Om1heWJlQ2xvc2VJblNlcnZlciAtICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVu
dGlmaWVyKTsKKworICAgIGlmIChtX2Nsb3NlZEluU2VydmVyKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyAzLjMuOSBEYXRhYmFzZSBjbG9zaW5nIHN0ZXBzCisgICAgLy8gV2FpdCBmb3IgYWxs
IHRyYW5zYWN0aW9ucyBjcmVhdGVkIHVzaW5nIHRoaXMgY29ubmVjdGlvbiB0byBjb21wbGV0ZS4K
KyAgICAvLyBPbmNlIHRoZXkgYXJlIGNvbXBsZXRlLCB0aGlzIGNvbm5lY3Rpb24gaXMgY2xvc2Vk
LgorICAgIGlmICghbV9hY3RpdmVUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2Nsb3NlZEluU2VydmVyID0gdHJ1ZTsKKyAgICBtX3NlcnZlckNvbm5lY3Rp
b24tPmRhdGFiYXNlQ29ubmVjdGlvbkNsb3NlZCgqdGhpcyk7Cit9CisKK2NvbnN0IGNoYXIqIElE
QkRhdGFiYXNlOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIklE
QkRhdGFiYXNlIjsKK30KKworYm9vbCBJREJEYXRhYmFzZTo6Y2FuU3VzcGVuZEZvckRvY3VtZW50
U3VzcGVuc2lvbigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgdmFsdWUgd2lsbCBzb21l
dGltZXMgYmUgZmFsc2Ugd2hlbiBkYXRhYmFzZSBvcGVyYXRpb25zIGFyZSBhY3R1YWxseSBpbiBw
cm9ncmVzcy4KKyAgICAvLyBTdWNoIGRhdGFiYXNlIG9wZXJhdGlvbnMgZG8gbm90IHlldCBleGlz
dC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6c3RvcCgpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpzdG9wIC0gJSIgUFJJdTY0LCBtX2RhdGFi
YXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOworCisgICAgVmVjdG9yPElEQlJlc291cmNlSWRlbnRp
Zmllcj4gdHJhbnNhY3Rpb25JZGVudGlmaWVyczsKKyAgICB0cmFuc2FjdGlvbklkZW50aWZpZXJz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9hY3RpdmVUcmFuc2FjdGlvbnMuc2l6ZSgpKTsKKwor
ICAgIGZvciAoYXV0byYgaWQgOiBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5rZXlzKCkpCisgICAgICAg
IHRyYW5zYWN0aW9uSWRlbnRpZmllcnMudW5jaGVja2VkQXBwZW5kKGlkKTsKKworICAgIGZvciAo
YXV0byYgaWQgOiB0cmFuc2FjdGlvbklkZW50aWZpZXJzKSB7CisgICAgICAgIElEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiA9IG1fYWN0aXZlVHJhbnNhY3Rpb25zLmdldChpZCk7CisgICAgICAg
IGlmICh0cmFuc2FjdGlvbikKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5zdG9wKCk7CisgICAg
fQorCisgICAgY2xvc2UoKTsKK30KKworUmVmPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6
c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBp
bmZvLCBJREJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJEYXRhYmFzZTo6c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJXMiLCBpbmZvLmlkZW50
aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBBU1NFUlQoIW1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKKyAgICBBU1NFUlQoaW5mby5tb2RlKCkgPT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOworICAgIEFTU0VSVCghbV9j
bG9zZVBlbmRpbmcpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworCisg
ICAgUmVmPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoKnRoaXMsIGluZm8sIHJlcXVlc3QpOworICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
ID0gJnRyYW5zYWN0aW9uLmdldCgpOworCisgICAgbV9hY3RpdmVUcmFuc2FjdGlvbnMuc2V0KHRy
YW5zYWN0aW9uLT5pbmZvKCkuaWRlbnRpZmllcigpLCAmdHJhbnNhY3Rpb24uZ2V0KCkpOworCisg
ICAgcmV0dXJuIHRyYW5zYWN0aW9uOworfQorCit2b2lkIElEQkRhdGFiYXNlOjpkaWRTdGFydFRy
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBMT0coSW5kZXhl
ZERCLCAiSURCRGF0YWJhc2U6OmRpZFN0YXJ0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5p
bmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBB
U1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKTsKKworICAgIC8vIEl0IGlzIHBvc3Np
YmxlIGZvciB0aGUgY2xpZW50IHRvIGhhdmUgYWJvcnRlZCBhIHRyYW5zYWN0aW9uIGJlZm9yZSB0
aGUgc2VydmVyIHJlcGxpZXMgYmFjayB0aGF0IGl0IGhhcyBzdGFydGVkLgorICAgIGlmIChtX2Fi
b3J0aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5zZXQodHJh
bnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uKTsKK30KKwordm9pZCBJ
REJEYXRhYmFzZTo6d2lsbENvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OndpbGxDb21taXRUcmFu
c2FjdGlvbiAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgYXV0byByZWZUcmFuc2FjdGlvbiA9IG1fYWN0aXZl
VHJhbnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSk7CisgICAg
QVNTRVJUKHJlZlRyYW5zYWN0aW9uKTsKKyAgICBtX2NvbW1pdHRpbmdUcmFuc2FjdGlvbnMuc2V0
KHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIFdURk1vdmUocmVmVHJhbnNhY3Rpb24p
KTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24oSURCVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6
ZGlkQ29tbWl0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmIChtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24pCisgICAgICAgIG1faW5mby5zZXRWZXJzaW9u
KHRyYW5zYWN0aW9uLmluZm8oKS5uZXdWZXJzaW9uKCkpOworCisgICAgZGlkQ29tbWl0T3JBYm9y
dFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6d2lsbEFi
b3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIExPRyhJ
bmRleGVkREIsICJJREJEYXRhYmFzZTo6d2lsbEFib3J0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KworICAgIGF1dG8gcmVmVHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5zYWN0aW9ucy50YWtlKHRy
YW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOworICAgIGlmICghcmVmVHJhbnNhY3Rpb24p
CisgICAgICAgIHJlZlRyYW5zYWN0aW9uID0gbV9jb21taXR0aW5nVHJhbnNhY3Rpb25zLnRha2Uo
dHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSk7CisKKyAgICBBU1NFUlQocmVmVHJhbnNh
Y3Rpb24pOworICAgIG1fYWJvcnRpbmdUcmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCksIFdURk1vdmUocmVmVHJhbnNhY3Rpb24pKTsKKworICAgIGlmICh0cmFu
c2FjdGlvbi5pc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24u
b3JpZ2luYWxEYXRhYmFzZUluZm8oKSk7CisgICAgICAgIG1faW5mbyA9ICp0cmFuc2FjdGlvbi5v
cmlnaW5hbERhdGFiYXNlSW5mbygpOworICAgICAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7Cisg
ICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlOjpkaWRBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6
OmRpZEFib3J0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICh0cmFuc2FjdGlvbi5p
c1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24ub3JpZ2luYWxE
YXRhYmFzZUluZm8oKSk7CisgICAgICAgIEFTU0VSVChtX2luZm8udmVyc2lvbigpID09IHRyYW5z
YWN0aW9uLm9yaWdpbmFsRGF0YWJhc2VJbmZvKCktPnZlcnNpb24oKSk7CisgICAgICAgIG1fY2xv
c2VQZW5kaW5nID0gdHJ1ZTsKKyAgICAgICAgbWF5YmVDbG9zZUluU2VydmVyKCk7CisgICAgfQor
CisgICAgZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZENv
bW1pdE9yQWJvcnRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uID09ICZ0cmFuc2FjdGlvbikKKyAgICAgICAgbV92ZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24gPSBudWxscHRyOworCisjaWZuZGVmIE5EQkVCVUcKKyAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CisgICAgaWYgKG1fYWN0aXZlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKQorICAgICAgICArK2NvdW50OworICAgIGlmIChtX2Nv
bW1pdHRpbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZp
ZXIoKSkpCisgICAgICAgICsrY291bnQ7CisgICAgaWYgKG1fYWJvcnRpbmdUcmFuc2FjdGlvbnMu
Y29udGFpbnModHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpCisgICAgICAgICsrY291
bnQ7CisKKyAgICBBU1NFUlQoY291bnQgPT0gMSk7CisjZW5kaWYKKworICAgIG1fYWN0aXZlVHJh
bnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKKyAgICBt
X2NvbW1pdHRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlm
aWVyKCkpOworICAgIG1fYWJvcnRpbmdUcmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLmlu
Zm8oKS5pZGVudGlmaWVyKCkpOworCisgICAgaWYgKG1fY2xvc2VQZW5kaW5nKQorICAgICAgICBt
YXliZUNsb3NlSW5TZXJ2ZXIoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6ZmlyZVZlcnNpb25D
aGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVy
LCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKQoreworICAgIHVpbnQ2NF90IGN1cnJlbnRWZXJz
aW9uID0gbV9pbmZvLnZlcnNpb24oKTsKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6
OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQgLSBjdXJyZW50IHZlcnNpb24gJSIgUFJJdTY0ICIsIHJl
cXVlc3RlZCB2ZXJzaW9uICUiIFBSSXU2NCAiLCBjb25uZWN0aW9uICUiIFBSSXU2NCwgY3VycmVu
dFZlcnNpb24sIHJlcXVlc3RlZFZlcnNpb24sIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmll
cik7CisKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2Nsb3NlUGVuZGlu
ZykgeworICAgICAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVu
dChtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIHJlcXVlc3RJZGVudGlmaWVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZjxFdmVudD4gZXZlbnQgPSBJREJWZXJzaW9u
Q2hhbmdlRXZlbnQ6OmNyZWF0ZShyZXF1ZXN0SWRlbnRpZmllciwgY3VycmVudFZlcnNpb24sIHJl
cXVlc3RlZFZlcnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpOworICAgIGV2
ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVu
dFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKK30KKworYm9vbCBJREJEYXRh
YmFzZTo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCit7CisgICAgTE9HKEluZGV4ZWREQiwg
IklEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50ICglIiBQUkl1NjQgIikiLCBtX2RhdGFiYXNlQ29u
bmVjdGlvbklkZW50aWZpZXIpOworCisgICAgYm9vbCByZXN1bHQgPSBFdmVudFRhcmdldFdpdGhJ
bmxpbmVEYXRhOjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKKworICAgIGlmIChldmVudC5pc1ZlcnNp
b25DaGFuZ2VFdmVudCgpICYmIGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudmVyc2lvbmNo
YW5nZUV2ZW50KQorICAgICAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZGlkRmlyZVZlcnNpb25DaGFu
Z2VFdmVudChtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIsIGRvd25jYXN0PElEQlZlcnNp
b25DaGFuZ2VFdmVudD4oZXZlbnQpLnJlcXVlc3RJZGVudGlmaWVyKCkpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0
IElEQkluZGV4SW5mbyYgaW5mbykKK3sKKyAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1faW5mby5p
bmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsK
KyAgICBBU1NFUlQob2JqZWN0U3RvcmUpOworICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0lu
ZGV4KGluZm8pOworfQorCit2b2lkIElEQkRhdGFiYXNlOjpkaWREZWxldGVJbmRleEluZm8oY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvKQogeworICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9pbmZv
LmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkp
OworICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CisgICAgb2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4
KGluZm8ubmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggZjg0NzZkOC4uZWQw
YTZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5oCkBAIC0yMyw1NCArMjMsMTAxIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBJREJEYXRhYmFzZV9oCi0jZGVmaW5lIElEQkRhdGFiYXNlX2gK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVk
ZSAiRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJn
ZXQuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uLmgiCi0jaW5jbHVkZSAiSW5kZXhlZERCLmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
LmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCisjaW5jbHVkZSAiSURCRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUluZm8uaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1zdHJ1Y3QgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlOworY2xhc3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIElEQk9iamVjdFN0
b3JlOworY2xhc3MgSURCT3BlbkRCUmVxdWVzdDsKK2NsYXNzIElEQlJlc3VsdERhdGE7CitjbGFz
cyBJREJUcmFuc2FjdGlvbjsKK2NsYXNzIElEQlRyYW5zYWN0aW9uSW5mbzsKIAogY2xhc3MgSURC
RGF0YWJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZT4sIHB1YmxpYyBFdmVudFRh
cmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5JREJEYXRhYmFzZSgpIHsgfQorICAgIHN0YXRpYyBSZWY8SURCRGF0YWJhc2U+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9u
VG9TZXJ2ZXImLCBjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICB2aXJ0dWFsIH5JREJEYXRh
YmFzZSgpOwogCi0gICAgLy8gSW1wbGVtZW50IHRoZSBJREwKLSAgICB2aXJ0dWFsIGNvbnN0IFN0
cmluZyBuYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdWludDY0X3QgdmVyc2lvbigpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5h
bWVzKCkgY29uc3QgPSAwOworICAgIC8vIElEQkRhdGFiYXNlIElETAorICAgIGNvbnN0IFN0cmlu
ZyBuYW1lKCkgY29uc3Q7CisgICAgdWludDY0X3QgdmVyc2lvbigpIGNvbnN0OworICAgIFJlZlB0
cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IFJlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwot
ICAgIHZpcnR1YWwgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJUcmFu
c2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1vZGUs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOworICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0
aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwor
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG1vZGUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIHZvaWQgZGVsZXRlT2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAg
ICB2b2lkIGNsb3NlKCk7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIEV2ZW50VGFyZ2V0SW50
ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSURCRGF0
YWJhc2VFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KKyAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQWN0aXZl
RE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKyAgICB2b2lkIHJlZkV2ZW50
VGFyZ2V0KCkgZmluYWwgeyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6cmVmKCk7IH0KKyAgICB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+Ojpk
ZXJlZigpOyB9CiAKICAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6cmVmOwogICAg
IHVzaW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpkZXJlZjsKIAotcHJvdGVjdGVkOgotICAg
IElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBjb25zdCBjaGFyKiBh
Y3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBjYW5TdXNwZW5kRm9y
RG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7
CisKKyAgICBjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2lu
Zm87IH0KKyAgICB1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyOyB9CisKKyAgICBSZWY8SURC
VHJhbnNhY3Rpb24+IHN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5z
YWN0aW9uSW5mbyYsIElEQk9wZW5EQlJlcXVlc3QmKTsKKyAgICB2b2lkIGRpZFN0YXJ0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKKworICAgIHZvaWQgd2lsbENvbW1pdFRyYW5zYWN0aW9u
KElEQlRyYW5zYWN0aW9uJik7CisgICAgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihJREJUcmFu
c2FjdGlvbiYpOworICAgIHZvaWQgd2lsbEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24m
KTsKKyAgICB2b2lkIGRpZEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKKworICAg
IHZvaWQgZmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKKworICAgIElE
QkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBzZXJ2ZXJDb25uZWN0aW9uKCkgeyByZXR1
cm4gbV9zZXJ2ZXJDb25uZWN0aW9uLmdldCgpOyB9CisKKyAgICB2b2lkIGRpZENyZWF0ZUluZGV4
SW5mbyhjb25zdCBJREJJbmRleEluZm8mKTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4SW5mbyhj
b25zdCBJREJJbmRleEluZm8mKTsKKworICAgIGJvb2wgaXNDbG9zaW5nT3JDbG9zZWQoKSBjb25z
dCB7IHJldHVybiBtX2Nsb3NlUGVuZGluZyB8fCBtX2Nsb3NlZEluU2VydmVyOyB9CisKKyAgICBi
b29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5hbDsKKworICAgIGJvb2wgaGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgSURCRGF0YWJhc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiwgY29u
c3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgdm9pZCBkaWRDb21taXRPckFib3J0VHJhbnNhY3Rp
b24oSURCVHJhbnNhY3Rpb24mKTsKKworICAgIHZvaWQgbWF5YmVDbG9zZUluU2VydmVyKCk7CisK
KyAgICBSZWY8SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IG1fc2VydmVyQ29ubmVj
dGlvbjsKKyAgICBJREJEYXRhYmFzZUluZm8gbV9pbmZvOworICAgIHVpbnQ2NF90IG1fZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllciB7IDAgfTsKKworICAgIGJvb2wgbV9jbG9zZVBlbmRpbmcg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9jbG9zZWRJblNlcnZlciB7IGZhbHNlIH07CisKKyAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uOworICAgIEhh
c2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+PiBtX2Fj
dGl2ZVRyYW5zYWN0aW9uczsKKyAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVm
UHRyPElEQlRyYW5zYWN0aW9uPj4gbV9jb21taXR0aW5nVHJhbnNhY3Rpb25zOworICAgIEhhc2hN
YXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+PiBtX2Fib3J0
aW5nVHJhbnNhY3Rpb25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYK
LQotI2VuZGlmIC8vIElEQkRhdGFiYXNlX2gKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5j
cHAKaW5kZXggN2E5Zjk5NS4uMzY4ZWMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKQEAgLTI4LDEwICsyOCwxNDEgQEAKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCRmFjdG9yeTo6SURCRmFjdG9yeSgpCitzdGF0
aWMgYm9vbCBzaG91bGRUaHJvd1NlY3VyaXR5RXhjZXB0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpCit7CisgICAgQVNTRVJUKGlzPERvY3VtZW50Pihjb250ZXh0KSB8fCBjb250
ZXh0LmlzV29ya2VyR2xvYmFsU2NvcGUoKSk7CisgICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0
KSkgeworICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29u
dGV4dCk7CisgICAgICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoIWRvY3VtZW50LnBhZ2UoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmICghY29udGV4dC5zZWN1cml0eU9yaWdpbigpLT5jYW5B
Y2Nlc3NEYXRhYmFzZShjb250ZXh0LnRvcE9yaWdpbigpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1JlZjxJREJGYWN0b3J5PiBJREJGYWN0b3J5Ojpj
cmVhdGUoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24pCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCRmFjdG9yeShjb25uZWN0aW9uKSk7Cit9CisKK0lE
QkZhY3Rvcnk6OklEQkZhY3RvcnkoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNv
bm5lY3Rpb24pCisgICAgOiBtX2Nvbm5lY3Rpb25Ub1NlcnZlcihjb25uZWN0aW9uKQoreworfQor
CitSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkZhY3Rvcnk6Om9wZW4iKTsKKyAgICAK
KyAgICByZXR1cm4gb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIDAsIGVjKS5yZWxlYXNlKCk7
Cit9CisKK1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQgbG9u
ZyBsb25nIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhJbmRleGVkREIs
ICJJREJGYWN0b3J5OjpvcGVuIik7CisgICAgCisgICAgaWYgKCF2ZXJzaW9uKSB7CisgICAgICAg
IGVjID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGVjKS5yZWxlYXNlKCk7
Cit9CisKK1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNp
Z25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG5h
bWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGlmIChzaG91bGRUaHJvd1NlY3VyaXR5RXhjZXB0aW9uKGNv
bnRleHQpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBBU1NFUlQoY29udGV4dC5zZWN1cml0eU9yaWdpbigpKTsKKyAg
ICBBU1NFUlQoY29udGV4dC50b3BPcmlnaW4oKSk7CisgICAgSURCRGF0YWJhc2VJZGVudGlmaWVy
IGRhdGFiYXNlSWRlbnRpZmllcihuYW1lLCAqY29udGV4dC5zZWN1cml0eU9yaWdpbigpLCAqY29u
dGV4dC50b3BPcmlnaW4oKSk7CisgICAgaWYgKCFkYXRhYmFzZUlkZW50aWZpZXIuaXNWYWxpZCgp
KSB7CisgICAgICAgIGVjID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBhdXRvIHJlcXVlc3QgPSBJREJPcGVuREJSZXF1ZXN0OjpjcmVhdGVPcGVuUmVx
dWVzdChtX2Nvbm5lY3Rpb25Ub1NlcnZlci5nZXQoKSwgY29udGV4dCwgZGF0YWJhc2VJZGVudGlm
aWVyLCB2ZXJzaW9uKTsKKyAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+b3BlbkRhdGFiYXNlKHJl
cXVlc3QuZ2V0KCkpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCZyZXF1ZXN0LmxlYWtSZWYoKSk7
Cit9CisKK1JlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJGYWN0b3J5OjpkZWxl
dGVEYXRhYmFzZSAtICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmIChuYW1lLmlz
TnVsbCgpKSB7CisgICAgICAgIGVjID0gVHlwZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgCisgICAgaWYgKHNob3VsZFRocm93U2VjdXJpdHlFeGNlcHRpb24oY29u
dGV4dCkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIEFTU0VSVChjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCkpOworICAg
IEFTU0VSVChjb250ZXh0LnRvcE9yaWdpbigpKTsKKyAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIg
ZGF0YWJhc2VJZGVudGlmaWVyKG5hbWUsICpjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCksICpjb250
ZXh0LnRvcE9yaWdpbigpKTsKKyAgICBpZiAoIWRhdGFiYXNlSWRlbnRpZmllci5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGF1dG8gcmVxdWVzdCA9IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0ZURlbGV0ZVJl
cXVlc3QobV9jb25uZWN0aW9uVG9TZXJ2ZXIuZ2V0KCksIGNvbnRleHQsIGRhdGFiYXNlSWRlbnRp
Zmllcik7CisgICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXItPmRlbGV0ZURhdGFiYXNlKHJlcXVlc3Qu
Z2V0KCkpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCZyZXF1ZXN0LmxlYWtSZWYoKSk7Cit9CisK
K3Nob3J0IElEQkZhY3Rvcnk6OmNtcChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgZmlyc3RWYWx1ZSwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIHNlY29uZFZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVj
KQoreworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOworICAgIFJl
ZlB0cjxJREJLZXk+IGZpcnN0ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBm
aXJzdFZhbHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiBzZWNvbmQgPSBzY3JpcHRWYWx1ZVRvSURC
S2V5KCZyZXF1ZXN0U3RhdGUsIHNlY29uZFZhbHVlKTsKKworICAgIEFTU0VSVChmaXJzdCk7Cisg
ICAgQVNTRVJUKHNlY29uZCk7CisKKyAgICBpZiAoIWZpcnN0LT5pc1ZhbGlkKCkgfHwgIXNlY29u
ZC0+aXNWYWxpZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
ZXhlY3V0ZSAnY21wJyBvbiAnSURCRmFjdG9yeSc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFs
aWQga2V5LiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2hvcnQ+KGZpcnN0LT5jb21wYXJlKHNlY29uZC5nZXQoKSkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5LmgKaW5kZXggNDRhNWNjMi4uNTk4MGQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaApAQCAtMjMsNDggKzIzLDM2IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJREJGYWN0b3J5X2gK
LSNkZWZpbmUgSURCRmFjdG9yeV9oCi0KLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQktleTsKLWNsYXNzIElEQktleVJhbmdlOwotY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQotc3RydWN0IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZTsKKyNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCIKKyNpbmNsdWRlICJJREJGYWN0
b3J5LmgiCisjaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdC5oIgogCi10eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOworbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJGYWN0b3J5IDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewogcHVibGljOgotICAgIHZpcnR1YWwgfklEQkZh
Y3RvcnkoKSB7IH0KKyAgICBzdGF0aWMgUmVmPElEQkZhY3Rvcnk+IGNyZWF0ZShJREJDbGllbnQ6
OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYpOwogCi0gICAgLy8gRklYTUU6IGdldERhdGFiYXNlTmFt
ZXMgaXMgbm8gbG9uZ2VyIGEgd2ViLWZhY2luZyBBUEksIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBm
cm9tIElEQkZhY3RvcnkuCi0gICAgLy8gVGhlIFdlYiBJbnNwZWN0b3IgY3VycmVudGx5IHVzZXMg
dGhpcyB0byBlbnVtZXJhdGUgdGhlIGxpc3Qgb2YgZGF0YWJhc2VzLCBidXQgaXMgbW9yZSBjb21w
bGljYXRlZCBhcyBhIHJlc3VsdC4KLSAgICAvLyBXZSBzaG91bGQgcHJvdmlkZSBhIHNpbXBsZXIg
QVBJIHRvIHRoZSBXZWIgSW5zcGVjdG9yIHRoZW4gcmVtb3ZlIGdldERhdGFiYXNlTmFtZXMuCi0g
ICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29k
ZSYpOwogCi0gICAgdmlydHVhbCBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAw
OwotICAgIHZpcnR1YWwgUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIHZlcnNp
b24sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCT3BlbkRCUmVx
dWVzdD4gZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKKyAgICBSZWZQdHI8SURCT3BlbkRCUmVxdWVz
dD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIHZl
cnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gZGVs
ZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpOwogCi0gICAgdmlydHVhbCBzaG9ydCBjbXAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdCwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNlY29uZCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikg
PSAwOworICAgIHNob3J0IGNtcChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
c2Vjb25kLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKIAotcHJvdGVjdGVkOgotICAgIElE
QkZhY3RvcnkoKTsKK3ByaXZhdGU6CisgICAgSURCRmFjdG9yeShJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Ub1NlcnZlciYpOworICAgIAorICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVu
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgdW5z
aWduZWQgbG9uZyBsb25nIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAKKyAgICBSZWY8
SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IG1fY29ubmVjdGlvblRvU2VydmVyOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkZh
Y3RvcnlfaAorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IGEyYjRlMmIuLmM2NDcz
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAK
QEAgLTI4LDEwICsyOCwzMTMgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisj
aW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCisjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVk
ZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvci5oIgorI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2VEYXRhLmgi
CisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotSURCSW5kZXg6OklEQkluZGV4KCkKK0lEQkluZGV4OjpJREJJbmRl
eChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8sIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSkKKyAgICA6IEFjdGl2ZURPTU9iamVjdCgm
Y29udGV4dCkKKyAgICAsIG1faW5mbyhpbmZvKQorICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RT
dG9yZSkKK3sKKyAgICBzdXNwZW5kSWZOZWVkZWQoKTsKK30KKworSURCSW5kZXg6On5JREJJbmRl
eCgpCit7Cit9CisKK2NvbnN0IGNoYXIqIElEQkluZGV4OjphY3RpdmVET01PYmplY3ROYW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIklEQkluZGV4IjsKK30KKworYm9vbCBJREJJbmRleDo6Y2Fu
U3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIElEQkluZGV4OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLmlzRmluaXNoZWQoKTsK
K30KKworY29uc3QgU3RyaW5nJiBJREJJbmRleDo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW5mby5uYW1lKCk7Cit9CisKK1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCSW5kZXg6Om9i
amVjdFN0b3JlKCkKK3sKKyAgICByZXR1cm4gJm1fb2JqZWN0U3RvcmU7Cit9CisKK1JlZlB0cjxJ
REJBbnk+IElEQkluZGV4OjprZXlQYXRoQW55KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSURCQW55
OjpjcmVhdGUobV9pbmZvLmtleVBhdGgoKSk7Cit9CisKK2NvbnN0IElEQktleVBhdGgmIElEQklu
ZGV4OjprZXlQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmZvLmtleVBhdGgoKTsKK30K
KworYm9vbCBJREJJbmRleDo6dW5pcXVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmZvLnVu
aXF1ZSgpOworfQorCitib29sIElEQkluZGV4OjptdWx0aUVudHJ5KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pbmZvLm11bHRpRW50cnkoKTsKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQklu
ZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJh
bmdlKiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpvcGVuQ3Vy
c29yIik7CisKKyAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkp
IHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0
b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIGlmICghbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLmlzQWN0aXZlKCkp
IHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbklu
YWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMg
aW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6
c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYy5jb2RlKTsKKyAgICBpZiAoZWMu
Y29kZSkgeworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGRpcmVjdGlvbiBwcm92aWRlZCAo
J2ludmFsaWQtZGlyZWN0aW9uJykgaXMgbm90IG9uZSBvZiAnbmV4dCcsICduZXh0dW5pcXVlJywg
J3ByZXYnLCBvciAncHJldnVuaXF1ZScuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIElEQktleVJhbmdlRGF0YSByYW5nZURhdGEgPSByYW5nZTsKKyAgICBpZiAocmFu
Z2VEYXRhLmxvd2VyS2V5LmlzTnVsbCgpKQorICAgICAgICByYW5nZURhdGEubG93ZXJLZXkgPSBJ
REJLZXlEYXRhOjptaW5pbXVtKCk7CisgICAgaWYgKHJhbmdlRGF0YS51cHBlcktleS5pc051bGwo
KSkKKyAgICAgICAgcmFuZ2VEYXRhLnVwcGVyS2V5ID0gSURCS2V5RGF0YTo6bWF4aW11bSgpOwor
CisgICAgYXV0byBpbmZvID0gSURCQ3Vyc29ySW5mbzo6aW5kZXhDdXJzb3IobV9vYmplY3RTdG9y
ZS5tb2Rlcm5UcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCks
IG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlRGF0YSwgZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1
cnNvclR5cGU6OktleUFuZFZhbHVlKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZS5tb2Rlcm5U
cmFuc2FjdGlvbigpLnJlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsICp0aGlzLCBpbmZvKTsKK30K
KworUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbkN1cnNvciIpOworICAgIFJlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVj
LmNvZGUpOworICAgIGlmIChlYy5jb2RlKSB7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UuZ2V0KCks
IGRpcmVjdGlvbiwgZWMpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIpOworCisgICAg
cmV0dXJuIGRvQ291bnQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsK
K30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIpOworCisg
ICAgcmV0dXJuIGRvQ291bnQoY29udGV4dCwgcmFuZ2UgPyBJREJLZXlSYW5nZURhdGEocmFuZ2Up
IDogSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsKK30KKworUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
IGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Y291bnQiKTsKKworICAgIERP
TVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOworICAgIFJlZlB0cjxJREJLZXk+
IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBp
ZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJ
REJJbmRleCc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gZG9Db3VudChjb250ZXh0LCBJREJL
ZXlSYW5nZURhdGEoaWRiS2V5LmdldCgpKSwgZWMpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4g
SURCSW5kZXg6OmRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sK
KyAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpIHsKKyAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAg
ICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50
JyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBk
ZWxldGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIXJh
bmdlLmlzVmFsaWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byYg
dHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6
IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlcXVlc3RDb3Vu
dChjb250ZXh0LCAqdGhpcywgcmFuZ2UpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5k
ZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5
UmFuZ2UqIHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6Om9wZW5L
ZXlDdXJzb3IiKTsKKworICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0
ZWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRT
dGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
ZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBv
YmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKCFtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuaXNB
Y3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5z
YWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5LZXlDdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSB0cmFu
c2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uID0g
SURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJlY3Rpb25TdHJpbmcsIGVjLmNvZGUpOwor
ICAgIGlmIChlYy5jb2RlKSB7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdvcGVuS2V5Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgZGlyZWN0
aW9uIHByb3ZpZGVkICgnaW52YWxpZC1kaXJlY3Rpb24nKSBpcyBub3Qgb25lIG9mICduZXh0Jywg
J25leHR1bmlxdWUnLCAncHJldicsIG9yICdwcmV2dW5pcXVlJy4iKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBpbmZvID0gSURCQ3Vyc29ySW5mbzo6aW5kZXhD
dXJzb3IobV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLmlu
Zm8oKS5pZGVudGlmaWVyKCksIG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlLCBkaXJlY3Rpb24s
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3Rv
cmUubW9kZXJuVHJhbnNhY3Rpb24oKS5yZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCAqdGhpcywg
aW5mbyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6Om9wZW5LZXlDdXJzb3Ii
KTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHko
Y29udGV4dCwga2V5LCBlYy5jb2RlKTsKKyAgICBpZiAoZWMuY29kZSkgeworICAgICAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicg
b24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gb3BlbktleUN1cnNvcihjb250
ZXh0LCBrZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uLCBlYyk7Cit9CisKK1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktl
eVJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCSW5kZXg6OmdldCIpOworCisgICAgcmV0dXJuIGRvR2V0KGNvbnRleHQs
IElEQktleVJhbmdlRGF0YShyYW5nZSksIGVjKTsKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldCIpOworCisgICAgRE9NUmVxdWVzdFN0
YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0g
c2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIGlmICghaWRiS2V5
IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsKKyAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXQnIG9uICdJREJJbmRleCc6IFRo
ZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICByZXR1cm4gZG9HZXQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlk
YktleS5nZXQoKSksIGVjKTsKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IHJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIGlmIChtX2RlbGV0
ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCSW5kZXgnOiBU
aGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAocmFuZ2UuaXNOdWxsKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvJiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0
U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlv
bkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdnZXQnIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFj
dGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlcXVlc3RHZXRWYWx1ZShjb250ZXh0LCAqdGhpcywgcmFu
Z2UpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXRLZXki
KTsKKworICAgIHJldHVybiBkb0dldEtleShjb250ZXh0LCBJREJLZXlSYW5nZURhdGEocmFuZ2Up
LCBlYyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwg
IklEQkluZGV4OjpnZXRLZXkiKTsKKworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUo
JmNvbnRleHQpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJL
ZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUo
KSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBUaGUgcGFyYW1ldGVyIGlz
IG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIGRvR2V0S2V5KGNvbnRleHQsIElEQktleVJhbmdlRGF0YShpZGJLZXkuZ2V0KCkp
LCBlYyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6ZG9HZXRLZXkoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBpZiAobV9kZWxldGVkIHx8IG1f
b2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQkluZGV4JzogVGhlIGlu
ZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKHJhbmdlLmlzTnVsbCkgeworICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3Jl
Lm1vZGVyblRyYW5zYWN0aW9uKCk7CisgICAgaWYgKCF0cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7
CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
ZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3Rp
dmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0R2V0S2V5KGNvbnRleHQsICp0aGlzLCByYW5nZSk7
Cit9CisKK3ZvaWQgSURCSW5kZXg6Om1hcmtBc0RlbGV0ZWQoKQoreworICAgIEFTU0VSVCghbV9k
ZWxldGVkKTsKKyAgICBtX2RlbGV0ZWQgPSB0cnVlOworfQorCit2b2lkIElEQkluZGV4OjpyZWYo
KQoreworICAgIG1fb2JqZWN0U3RvcmUucmVmKCk7Cit9CisKK3ZvaWQgSURCSW5kZXg6OmRlcmVm
KCkKIHsKKyAgICBtX29iamVjdFN0b3JlLmRlcmVmKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCmluZGV4
IDg1MTBkNGMuLjQ0OGQ3OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXguaApAQCAtMjMsNzMgKzIzLDkwIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJREJJbmRleF9oCi0jZGVmaW5lIElEQkluZGV4X2gK
KyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVkZSAiSURCRGF0
YWJhc2UuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIK
LSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgIklEQkluZGV4LmgiCiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIK
KyNpbmNsdWRlICJJREJJbmRleEluZm8uaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5j
bHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBJREJBbnk7CitjbGFzcyBJREJLZXlSYW5nZTsKIGNsYXNzIElEQk9iamVjdFN0b3JlOwor
c3RydWN0IElEQktleVJhbmdlRGF0YTsKIAotY2xhc3MgSURCSW5kZXggeworY2xhc3MgSURCSW5k
ZXggOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJJ
bmRleCgpIHsgfQorICAgIElEQkluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJ
REJJbmRleEluZm8mLCBJREJPYmplY3RTdG9yZSYpOworCisgICAgdmlydHVhbCB+SURCSW5kZXgo
KTsKIAogICAgIC8vIEltcGxlbWVudCB0aGUgSURMCi0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcm
IG5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9i
amVjdFN0b3JlKCkgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVuaXF1ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5
UmFuZ2UqLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRy
PElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSos
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJS
ZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotCi0gICAg
dmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVm
UHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElE
QktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwg
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29y
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIGNvbnN0IFN0cmluZyYgZGly
ZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24s
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElE
QlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVz
dD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IFJlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktl
eVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVm
UHRyPElEQlJlcXVlc3Q+IGdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAw
OwotCi0gICAgdmlydHVhbCBib29sIGlzTW9kZXJuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LQotICAgIC8vIFdlIHVzZSBvdXIgb3duIHJlZi9kZXJlZiBmdW5jdGlvbiBiZWNhdXNlIExlZ2Fj
eSBJREIgYW5kIE1vZGVybiBJREIgaGF2ZSB2ZXJ5IGRpZmZlcmVudAotICAgIC8vIGxpZmV0aW1l
IG1hbmFnZW1lbnQgb2YgdGhlaXIgaW5kZXhlcy4KLSAgICAvLyBUaGlzIHdpbGwgZ28gYXdheSBv
bmNlIExlZ2FjeSBJREIgaXMgZHJvcHBlZC4KLSAgICB2aXJ0dWFsIHZvaWQgcmVmKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIElEQkluZGV4
KCk7CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Q7CisgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBvYmplY3RTdG9yZSgpOworICAgIFJlZlB0cjxJREJBbnk+IGtleVBhdGhBbnkoKSBj
b25zdDsKKyAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3Q7CisgICAgYm9vbCB1
bmlxdWUoKSBjb25zdDsKKyAgICBib29sIG11bHRpRW50cnkoKSBjb25zdDsKKworICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4
dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9CisgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
SURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSB7IHJl
dHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5l
eHQoKSwgZWMpOyB9CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250
ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAgICBSZWZQdHI8
SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFu
Z2UqLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7
CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGly
ZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKworICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisKKyAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSB7IHJldHVybiBvcGVuS2V5
Q3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsg
fQorICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURC
Q3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQorICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIHsg
cmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5l
eHQoKSwgZWMpOyB9CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24s
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVu
S2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJik7CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktl
eVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IGdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisKKyAgICBjb25zdCBJ
REJJbmRleEluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKworICAgIElEQk9i
amVjdFN0b3JlJiBtb2Rlcm5PYmplY3RTdG9yZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0K
KworICAgIHZvaWQgbWFya0FzRGVsZXRlZCgpOworICAgIGJvb2wgaXNEZWxldGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWxldGVkOyB9CisKKyAgICB2b2lkIHJlZigpOworICAgIHZvaWQgZGVyZWYo
KTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZG9Db3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGRvR2V0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZG9HZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwor
CisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0OworICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigp
IGNvbnN0OworICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CisKKyAgICBJREJJ
bmRleEluZm8gbV9pbmZvOworCisgICAgYm9vbCBtX2RlbGV0ZWQgeyBmYWxzZSB9OworCisgICAg
Ly8gSURCSW5kZXggb2JqZWN0cyBhcmUgYWx3YXlzIG93bmVkIGJ5IHRoZWlyIHJlZmVyZW5jaW5n
IElEQk9iamVjdFN0b3JlLgorICAgIC8vIEluZGV4ZXMgd2lsbCBuZXZlciBvdXRsaXZlIE9iamVj
dFN0b3JlcyBzbyBpdHMgb2theSB0byBrZWVwIGEgcmF3IEMrKyByZWZlcmVuY2UgaGVyZS4KKyAg
ICBJREJPYmplY3RTdG9yZSYgbV9vYmplY3RTdG9yZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJJbmRleF9oCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggNGEwNjQxNS4uNWIwMDM5ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApA
QCAtMjgsMTAgKzI4LDYzMiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNp
bmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisj
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvci5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKKyNpbmNsdWRlICJJREJFcnJvci5oIgorI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVk
ZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2VEYXRhLmgiCisjaW5jbHVkZSAiSURC
UmVxdWVzdC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiSW5kZXhl
ZERCLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1JREJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUoKQorUmVmPElEQk9iamVjdFN0b3JlPiBJ
REJPYmplY3RTdG9yZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQk9iamVjdFN0b3JlKGNvbnRleHQsIGlu
Zm8sIHRyYW5zYWN0aW9uKSk7Cit9CisKK0lEQk9iamVjdFN0b3JlOjpJREJPYmplY3RTdG9yZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8m
IGluZm8sIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKKyAgICA6IEFjdGl2ZURPTU9iamVj
dCgmY29udGV4dCkKKyAgICAsIG1faW5mbyhpbmZvKQorICAgICwgbV9vcmlnaW5hbEluZm8oaW5m
bykKKyAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCit7CisgICAgc3VzcGVuZElmTmVl
ZGVkKCk7Cit9CisKK0lEQk9iamVjdFN0b3JlOjp+SURCT2JqZWN0U3RvcmUoKQoreworfQorCitj
b25zdCBjaGFyKiBJREJPYmplY3RTdG9yZTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICJJREJPYmplY3RTdG9yZSI7Cit9CisKK2Jvb2wgSURCT2JqZWN0U3RvcmU6
OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBJREJPYmplY3RTdG9yZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fdHJhbnNhY3Rpb24tPmlzRmluaXNoZWQoKTsKK30KKworY29u
c3QgU3RyaW5nIElEQk9iamVjdFN0b3JlOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bmZvLm5hbWUoKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQkFueT4gSURCT2JqZWN0U3RvcmU6
OmtleVBhdGhBbnkoKSBjb25zdAoreworICAgIHJldHVybiBJREJBbnk6OmNyZWF0ZShtX2luZm8u
a2V5UGF0aCgpKTsKK30KKworY29uc3QgSURCS2V5UGF0aCBJREJPYmplY3RTdG9yZTo6a2V5UGF0
aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5mby5rZXlQYXRoKCk7Cit9CisKK1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0Cit7CisgICAg
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUo
KTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8uaW5kZXhOYW1lcygpKQorICAgICAgICBp
bmRleE5hbWVzLT5hcHBlbmQobmFtZSk7CisgICAgaW5kZXhOYW1lcy0+c29ydCgpOworCisgICAg
cmV0dXJuIGluZGV4TmFtZXM7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4g
SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKCkKK3sKKyAgICByZXR1cm4gJm1fdHJhbnNhY3Rp
b24uZ2V0KCk7Cit9CisKK2Jvb2wgSURCT2JqZWN0U3RvcmU6OmF1dG9JbmNyZW1lbnQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2luZm8uYXV0b0luY3JlbWVudCgpOworfQorCitSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAg
ICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51
bGxwdHIpLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlS
YW5nZSoga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgcmV0
dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4
dCgpLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQor
eworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rp
b25OZXh0KCksIGVjKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktl
eVJhbmdlKiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3Jl
OjpvcGVuQ3Vyc29yIik7CisKKyAgICBpZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+
aXNBY3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRy
YW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJPYmplY3RTdG9yZSc6IFRo
ZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0
aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJlY3Rpb25TdHJpbmcsIGVjLmNv
ZGUpOworICAgIGlmIChlYy5jb2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gaW5mbyA9IElEQkN1cnNvckluZm86Om9iamVjdFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rpb24u
Z2V0KCksIG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlLCBkaXJlY3Rpb24pOworICAgIFJlZjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFuc2FjdGlvbi0+cmVxdWVzdE9wZW5DdXJzb3IoY29u
dGV4dCwgKnRoaXMsIGluZm8pOworICAgIHJldHVybiBXVEZNb3ZlKHJlcXVlc3QpOworfQorCitS
ZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCit7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdl
Ojpvbmx5KGNvbnRleHQsIGtleSwgZWMuY29kZSk7CisgICAgaWYgKGVjLmNvZGUpIHsKKyAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJz
b3InIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5
LiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gb3BlbkN1cnNvcihj
b250ZXh0LCBrZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0
b3JlOjpnZXQiKTsKKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2dldCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZl
IG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBp
ZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdnZXQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3Rv
cmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7CisgICAgUmVmUHRy
PElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkp
OworICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQp
IHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Cisg
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXQn
IG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWY8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RHZXRSZWNvcmQoY29udGV4dCwgKnRoaXMs
IGlkYktleS5nZXQoKSk7CisgICAgcmV0dXJuIFdURk1vdmUocmVxdWVzdCk7Cit9CisKK1JlZlB0
cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6Omdl
dCIpOworCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9kZWxldGVkKSB7Cisg
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7
CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdn
ZXQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRl
ZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSURCS2V5UmFuZ2VE
YXRhIGtleVJhbmdlRGF0YShrZXlSYW5nZSk7CisgICAgaWYgKCFrZXlSYW5nZURhdGEuaXNWYWxp
ZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9y
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWY8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RHZXRSZWNvcmQoY29udGV4dCwgKnRoaXMs
IGtleVJhbmdlRGF0YSk7CisgICAgcmV0dXJuIFdURk1vdmUocmVxdWVzdCk7Cit9CisKK1JlZlB0
cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVj
KQoreworICAgIHJldHVybiBwdXRPckFkZChzdGF0ZSwgdmFsdWUsIG51bGxwdHIsIEluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpOb092ZXJ3cml0ZSwgSW5saW5lS2V5Q2hlY2s6
OlBlcmZvcm0sIGVjKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAg
IFJlZlB0cjxJREJLZXk+IGlkYktleTsKKyAgICBpZiAoIWtleS5pc1VuZGVmaW5lZCgpKQorICAg
ICAgICBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGV4ZWNTdGF0ZSwga2V5KTsKKyAgICBy
ZXR1cm4gcHV0T3JBZGQoZXhlY1N0YXRlLCB2YWx1ZSwgaWRiS2V5LCBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVyd3JpdGUsIElubGluZUtleUNoZWNrOjpQZXJmb3Jt
LCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXk7CisgICAgaWYgKCFrZXkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgaWRi
S2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShleGVjU3RhdGUsIGtleSk7CisgICAgcmV0dXJuIHB1
dE9yQWRkKGV4ZWNTdGF0ZSwgdmFsdWUsIGlkYktleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZSwgSW5saW5lS2V5Q2hlY2s6OlBlcmZvcm0sIGVjKTsKK30K
KworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCit7CisgICAgcmV0dXJuIHB1dE9yQWRkKHN0YXRlLCB2YWx1ZSwgbnVsbHB0ciwg
SW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3cml0ZSwgSW5saW5lS2V5
Q2hlY2s6OlBlcmZvcm0sIGVjKTsKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpwdXRGb3JDdXJzb3JVcGRhdGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
Cit7CisgICAgcmV0dXJuIHB1dE9yQWRkKHN0YXRlLCB2YWx1ZSwgc2NyaXB0VmFsdWVUb0lEQktl
eShzdGF0ZSwga2V5KSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok92ZXJ3
cml0ZUZvckN1cnNvciwgSW5saW5lS2V5Q2hlY2s6OkRvTm90UGVyZm9ybSwgZWMpOworfQorCitS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8SURCS2V5PiBrZXksIEluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIElubGluZUtleUNoZWNr
IGlubGluZUtleUNoZWNrLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExP
RyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQiKTsKKworICAgIC8vIFRoZSBJ
REIgc3BlYyBmb3Igc2V2ZXJhbCBJREJPYmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRy
YW5zYWN0aW9uIHJlbGF0ZWQgZXhjZXB0aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKKyAgICAvLyB0
aGUgZXhjZXB0aW9uIGZvciBhbiBvYmplY3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4KKyAgICAvLyBI
b3dldmVyLCBhIGhhbmRmdWwgb2YgVzNDIElEQiB0ZXN0cyBleHBlY3QgdGhlIGRlbGV0ZWQgZXhj
ZXB0aW9uIGV2ZW4gdGhvdWdoIHRoZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZSBleGNlcHRpb24gYWxz
byBhcHBsaWVzLgorICAgIC8vIEFkZGl0aW9uYWxseSwgQ2hyb21lIGFuZCBFZGdlIGFncmVlIHdp
dGggdGhlIHRlc3QsIGFzIGRvZXMgTGVnYWN5IElEQiBpbiBXZWJLaXQuCisgICAgLy8gVW50aWwg
dGhpcyBpcyBzb3J0ZWQgb3V0LCB3ZSdsbCBhZ3JlZSB3aXRoIHRoZSB0ZXN0IGFuZCB0aGUgbWFq
b3JpdHkgc2hhcmUgYnJvd3NlcnMuCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElE
Qk9iamVjdFN0b3JlOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNB
Y3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5z
YWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIHRyYW5zYWN0
aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UmVhZE9ubHlFcnJvcjsKKyAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJ
REJPYmplY3RTdG9yZTogVGhlIHRyYW5zYWN0aW9uIGlzIHJlYWQtb25seS4iKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRl
LCB2YWx1ZSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgICAgIC8vIENsZWFyIHRoZSBET00gZXhjZXB0aW9uIGZyb20gdGhlIHNlcmlhbGl6
ZXIgc28gd2UgY2FuIGdpdmUgYSBtb3JlIHRhcmdldGVkIGV4Y2VwdGlvbi4KKyAgICAgICAgc3Rh
dGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRhdGFDbG9uZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBBbiBvYmplY3Qg
Y291bGQgbm90IGJlIGNsb25lZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZS0+aGFzQmxvYlVSTHMoKSkgeworICAgICAgICAvLyBG
SVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBzdXBwb3J0CisgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUNsb25lRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3Rv
cmU6IEJsb2JVUkxzIGFyZSBub3QgeWV0IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgaWYgKGtleSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURC
T2JqZWN0U3RvcmU6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29sIHVzZXNJbmxpbmVLZXlzID0gIW1f
aW5mby5rZXlQYXRoKCkuaXNOdWxsKCk7CisgICAgYm9vbCB1c2VzS2V5R2VuZXJhdG9yID0gYXV0
b0luY3JlbWVudCgpOworICAgIGlmICh1c2VzSW5saW5lS2V5cyAmJiBpbmxpbmVLZXlDaGVjayA9
PSBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSkgeworICAgICAgICBpZiAoa2V5KSB7CisgICAgICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4g
YW4gSURCT2JqZWN0U3RvcmU6IFRoZSBvYmplY3Qgc3RvcmUgdXNlcyBpbi1saW5lIGtleXMgYW5k
IHRoZSBrZXkgcGFyYW1ldGVyIHdhcyBwcm92aWRlZC4iKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9
IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChzdGF0ZSwgdmFsdWUs
IG1faW5mby5rZXlQYXRoKCkpOworICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5UGF0aEtl
eS0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKKyAgICAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEV2YWx1YXRpbmcgdGhl
IG9iamVjdCBzdG9yZSdzIGtleSBwYXRoIHlpZWxkZWQgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIHZh
bGlkIGtleS4iKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFrZXlQYXRoS2V5KSB7CisgICAgICAgICAgICBpZiAodXNlc0tleUdlbmVyYXRv
cikgeworICAgICAgICAgICAgICAgIGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVl
KHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
YXRhRXJyb3I7CisgICAgICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogRXZhbHVhdGluZyB0aGUg
b2JqZWN0IHN0b3JlJ3Mga2V5IHBhdGggZGlkIG5vdCB5aWVsZCBhIHZhbHVlLiIpOworICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGtleVBhdGhLZXkpIHsKKyAgICAgICAgICAgIEFTU0VSVCgha2V5KTsKKyAgICAg
ICAgICAgIGtleSA9IGtleVBhdGhLZXk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCF1c2Vz
S2V5R2VuZXJhdG9yICYmICFrZXkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRoZSBvYmplY3Qgc3Rv
cmUgdXNlcyBvdXQtb2YtbGluZSBrZXlzIGFuZCBoYXMgbm8ga2V5IGdlbmVyYXRvciBhbmQgdGhl
IGtleSBwYXJhbWV0ZXIgd2FzIG5vdCBwcm92aWRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgYXV0byBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dEZy
b21FeGVjU3RhdGUoJnN0YXRlKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3I7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFuc2Fj
dGlvbi0+cmVxdWVzdFB1dE9yQWRkKCpjb250ZXh0LCAqdGhpcywga2V5LmdldCgpLCAqc2VyaWFs
aXplZFZhbHVlLCBvdmVyd3JpdGVNb2RlKTsKKyAgICByZXR1cm4gYWRvcHRSZWYocmVxdWVzdC5s
ZWFrUmVmKCkpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktl
eVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBy
ZXR1cm4gZG9EZWxldGUoY29udGV4dCwga2V5UmFuZ2UsIGVjKTsKK30KKworUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkb0RlbGV0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYg
ZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlv
biIpOworCisgICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZlcmFsIElEQk9iamVjdFN0b3JlIG1l
dGhvZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBleGNlcHRpb25zIHNob3VsZCBm
aXJlIGJlZm9yZQorICAgIC8vIHRoZSBleGNlcHRpb24gZm9yIGFuIG9iamVjdCBzdG9yZSBiZWlu
ZyBkZWxldGVkLgorICAgIC8vIEhvd2V2ZXIsIGEgaGFuZGZ1bCBvZiBXM0MgSURCIHRlc3RzIGV4
cGVjdCB0aGUgZGVsZXRlZCBleGNlcHRpb24gZXZlbiB0aG91Z2ggdGhlIHRyYW5zYWN0aW9uIGlu
YWN0aXZlIGV4Y2VwdGlvbiBhbHNvIGFwcGxpZXMuCisgICAgLy8gQWRkaXRpb25hbGx5LCBDaHJv
bWUgYW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUgdGVzdCwgYXMgZG9lcyBMZWdhY3kgSURCIGluIFdl
YktpdC4KKyAgICAvLyBVbnRpbCB0aGlzIGlzIHNvcnRlZCBvdXQsIHdlJ2xsIGFncmVlIHdpdGgg
dGhlIHRlc3QgYW5kIHRoZSBtYWpvcml0eSBzaGFyZSBicm93c2Vycy4KKyAgICBpZiAobV9kZWxl
dGVkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0
YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFz
IGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
aWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURC
T2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX3RyYW5zYWN0aW9u
LT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpSZWFkT25seUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rp
b24gaXMgcmVhZC1vbmx5LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBJREJLZXlSYW5nZURhdGEga2V5UmFuZ2VEYXRhKGtleVJhbmdlKTsKKyAgICBpZiAoIWtleVJh
bmdlRGF0YS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBwYXJhbWV0ZXIg
aXMgbm90IGEgdmFsaWQga2V5IHJhbmdlLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJhbnNhY3Rpb24tPnJlcXVl
c3REZWxldGVSZWNvcmQoY29udGV4dCwgKnRoaXMsIGtleVJhbmdlRGF0YSk7CisgICAgcmV0dXJu
IFdURk1vdmUocmVxdWVzdCk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKK3sKKyAgICByZXR1cm4gbW9kZXJuRGVsZXRlKGNvbnRleHQsIGtleS5qc1Zh
bHVlKCksIGVjKTsKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjptb2Rl
cm5EZWxldGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSlNDOjpKU1ZhbHVlIGtl
eSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBET01SZXF1ZXN0U3RhdGUg
cmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3Jp
cHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAgaWYgKCFpZGJLZXkgfHwg
aWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgeworICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIHJldHVybiBkb0RlbGV0ZShjb250ZXh0LCAmSURCS2V5UmFu
Z2U6OmNyZWF0ZShpZGJLZXkuZ2V0KCkpLmdldCgpLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmNsZWFyIik7CisKKyAgICAvLyBUaGUgSURCIHNwZWMg
Zm9yIHNldmVyYWwgSURCT2JqZWN0U3RvcmUgbWV0aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlv
biByZWxhdGVkIGV4Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVmb3JlCisgICAgLy8gdGhlIGV4Y2Vw
dGlvbiBmb3IgYW4gb2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0ZWQuCisgICAgLy8gSG93ZXZlciwg
YSBoYW5kZnVsIG9mIFczQyBJREIgdGVzdHMgZXhwZWN0IHRoZSBkZWxldGVkIGV4Y2VwdGlvbiBl
dmVuIHRob3VnaCB0aGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUgZXhjZXB0aW9uIGFsc28gYXBwbGll
cy4KKyAgICAvLyBBZGRpdGlvbmFsbHksIENocm9tZSBhbmQgRWRnZSBhZ3JlZSB3aXRoIHRoZSB0
ZXN0LCBhcyBkb2VzIExlZ2FjeSBJREIgaW4gV2ViS2l0LgorICAgIC8vIFVudGlsIHRoaXMgaXMg
c29ydGVkIG91dCwgd2UnbGwgYWdyZWUgd2l0aCB0aGUgdGVzdCBhbmQgdGhlIG1ham9yaXR5IHNo
YXJlIGJyb3dzZXJzLgorICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NsZWFyJyBvbiAnSURCT2JqZWN0
U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUo
KSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9u
SW5hY3RpdmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2NsZWFyJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24g
aXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOworICAgICAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY2xlYXInIG9uICdJREJP
YmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyByZWFkLW9ubHkuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90
cmFuc2FjdGlvbi0+cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUoY29udGV4dCwgKnRoaXMpOworICAg
IHJldHVybiBhZG9wdFJlZihyZXF1ZXN0LmxlYWtSZWYoKSk7Cit9CisKK1JlZlB0cjxXZWJDb3Jl
OjpJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJv
b2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
Cit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAg
IGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRl
eCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVk
LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNh
Y3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIGRhdGFiYXNlIGlzIG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNh
Y3Rpb24uIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV90
cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgaWYgKCFrZXlQYXRoLmlzVmFsaWQoKSkgeworICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlN5bnRheEVycm9yOworICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJ
REJPYmplY3RTdG9yZSc6IFRoZSBrZXlQYXRoIGFyZ3VtZW50IGNvbnRhaW5zIGFuIGludmFsaWQg
a2V5IHBhdGguIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChu
YW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBUeXBlRXJyb3I7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2luZm8uaGFzSW5kZXgobmFtZSkpIHsK
KyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3I7
CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdj
cmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogQW4gaW5kZXggd2l0aCB0aGUgc3BlY2lm
aWVkIG5hbWUgYWxyZWFkeSBleGlzdHMuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGlmIChrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpB
cnJheSAmJiBtdWx0aUVudHJ5KSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6
IFRoZSBrZXlQYXRoIGFyZ3VtZW50IHdhcyBhbiBhcnJheSBhbmQgdGhlIG11bHRpRW50cnkgb3B0
aW9uIGlzIHRydWUuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8v
IEluc3RhbGwgdGhlIG5ldyBJbmRleCBpbnRvIHRoZSBPYmplY3RTdG9yZSdzIGluZm8uCisgICAg
SURCSW5kZXhJbmZvIGluZm8gPSBtX2luZm8uY3JlYXRlTmV3SW5kZXgobmFtZSwga2V5UGF0aCwg
dW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmRpZENy
ZWF0ZUluZGV4SW5mbyhpbmZvKTsKKworICAgIC8vIENyZWF0ZSB0aGUgYWN0dWFsIElEQk9iamVj
dFN0b3JlIGZyb20gdGhlIHRyYW5zYWN0aW9uLCB3aGljaCBhbHNvIHNjaGVkdWxlcyB0aGUgb3Bl
cmF0aW9uIHNlcnZlciBzaWRlLgorICAgIGF1dG8gaW5kZXggPSBtX3RyYW5zYWN0aW9uLT5jcmVh
dGVJbmRleCgqdGhpcywgaW5mbyk7CisgICAgUmVmUHRyPElEQkluZGV4PiByZWZJbmRleCA9IGlu
ZGV4LmdldCgpOworCisgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExv
Y2spOworICAgIG1fcmVmZXJlbmNlZEluZGV4ZXMuc2V0KG5hbWUsIFdURk1vdmUoaW5kZXgpKTsK
KworICAgIHJldHVybiBXVEZNb3ZlKHJlZkluZGV4KTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklE
QkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9i
amVjdFN0b3JlOjppbmRleCIpOworCisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAg
ICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5kZXgn
IG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4i
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fdHJhbnNhY3Rp
b24tPmlzRmluaXNoZWRPckZpbmlzaGluZygpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdpbmRleCcgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9j
ayk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVmZXJlbmNlZEluZGV4ZXMuZmluZChpbmRleE5h
bWUpOworICAgIGlmIChpdGVyYXRvciAhPSBtX3JlZmVyZW5jZWRJbmRleGVzLmVuZCgpKQorICAg
ICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmdldCgpOworCisgICAgYXV0byogaW5mbyA9IG1f
aW5mby5pbmZvRm9yRXhpc3RpbmdJbmRleChpbmRleE5hbWUpOworICAgIGlmICghaW5mbykgewor
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7Cisg
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdpbmRl
eCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHNwZWNpZmllZCBpbmRleCB3YXMgbm90IGZvdW5k
LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGluZGV4ID0g
c3RkOjptYWtlX3VuaXF1ZTxJREJJbmRleD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKmlu
Zm8sICp0aGlzKTsKKyAgICBSZWZQdHI8SURCSW5kZXg+IHJlZkluZGV4ID0gaW5kZXguZ2V0KCk7
CisgICAgbV9yZWZlcmVuY2VkSW5kZXhlcy5zZXQoaW5kZXhOYW1lLCBXVEZNb3ZlKGluZGV4KSk7
CisKKyAgICByZXR1cm4gcmVmSW5kZXg7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4ICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4
JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlz
VmVyc2lvbkNoYW5nZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhl
IGRhdGFiYXNlIGlzIG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0
aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2Fj
dGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRy
YW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX2luZm8uaGFzSW5kZXgobmFtZSkpIHsKKyAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOworICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlSW5kZXgnIG9uICdJ
REJPYmplY3RTdG9yZSc6IFRoZSBzcGVjaWZpZWQgaW5kZXggd2FzIG5vdCBmb3VuZC4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGluZm8gPSBtX2luZm8uaW5mb0ZvckV4
aXN0aW5nSW5kZXgobmFtZSk7CisgICAgQVNTRVJUKGluZm8pOworICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuZGlkRGVsZXRlSW5kZXhJbmZvKCppbmZvKTsKKworICAgIG1faW5mby5kZWxl
dGVJbmRleChuYW1lKTsKKworICAgIHsKKyAgICAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3Jl
ZmVyZW5jZWRJbmRleExvY2spOworICAgICAgICBpZiAoYXV0byBpbmRleCA9IG1fcmVmZXJlbmNl
ZEluZGV4ZXMudGFrZShuYW1lKSkgeworICAgICAgICAgICAgaW5kZXgtPm1hcmtBc0RlbGV0ZWQo
KTsKKyAgICAgICAgICAgIG1fZGVsZXRlZEluZGV4ZXMuYWRkKFdURk1vdmUoaW5kZXgpKTsKKyAg
ICAgICAgfQorCisgICAgfQorCisgICAgbV90cmFuc2FjdGlvbi0+ZGVsZXRlSW5kZXgobV9pbmZv
LmlkZW50aWZpZXIoKSwgbmFtZSk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2Jq
ZWN0U3RvcmU6OmNvdW50Iik7CisKKyAgICByZXR1cm4gZG9Db3VudChjb250ZXh0LCBJREJLZXlS
YW5nZURhdGE6OmFsbEtleXMoKSwgZWMpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjb3VudCIp
OworCisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7CisgICAgUmVm
UHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBr
ZXkpOworICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFs
aWQpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7
CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdj
b3VudCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBr
ZXkuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBkb0Nv
dW50KGNvbnRleHQsIElEQktleVJhbmdlRGF0YShpZGJLZXkuZ2V0KCkpLCBlYyk7Cit9CisKK1Jl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6
Y291bnQiKTsKKworICAgIHJldHVybiBkb0NvdW50KGNvbnRleHQsIHJhbmdlID8gSURCS2V5UmFu
Z2VEYXRhKHJhbmdlKSA6IElEQktleVJhbmdlRGF0YTo6YWxsS2V5cygpLCBlYyk7Cit9CisKK1Jl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZG9Db3VudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIC8vIFRoZSBJREIgc3BlYyBmb3Ig
c2V2ZXJhbCBJREJPYmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRyYW5zYWN0aW9uIHJl
bGF0ZWQgZXhjZXB0aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKKyAgICAvLyB0aGUgZXhjZXB0aW9u
IGZvciBhbiBvYmplY3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4KKyAgICAvLyBIb3dldmVyLCBhIGhh
bmRmdWwgb2YgVzNDIElEQiB0ZXN0cyBleHBlY3QgdGhlIGRlbGV0ZWQgZXhjZXB0aW9uIGV2ZW4g
dGhvdWdoIHRoZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZSBleGNlcHRpb24gYWxzbyBhcHBsaWVzLgor
ICAgIC8vIEFkZGl0aW9uYWxseSwgQ2hyb21lIGFuZCBFZGdlIGFncmVlIHdpdGggdGhlIHRlc3Qs
IGFzIGRvZXMgTGVnYWN5IElEQiBpbiBXZWJLaXQuCisgICAgLy8gVW50aWwgdGhpcyBpcyBzb3J0
ZWQgb3V0LCB3ZSdsbCBhZ3JlZSB3aXRoIHRoZSB0ZXN0IGFuZCB0aGUgbWFqb3JpdHkgc2hhcmUg
YnJvd3NlcnMuCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7
CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
ZXhlY3V0ZSAnY291bnQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBp
bmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKCFyYW5nZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIHJldHVybiBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0Q291bnQoY29udGV4dCwgKnRoaXMs
IHJhbmdlKTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZTo6bWFya0FzRGVsZXRlZCgpCit7Cisg
ICAgbV9kZWxldGVkID0gdHJ1ZTsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZTo6cm9sbGJhY2tJ
bmZvRm9yVmVyc2lvbkNoYW5nZUFib3J0KCkKK3sKKyAgICBtX2luZm8gPSBtX29yaWdpbmFsSW5m
bzsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhKU0M6
OlNsb3RWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogeworICAgIExvY2tlcjxMb2NrPiBsb2NrZXIo
bV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKKyAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9yZWZlcmVu
Y2VkSW5kZXhlcy52YWx1ZXMoKSkKKyAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KGluZGV4
LmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggMDNkZWQ0Mi4uMWI3
Y2Q4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCkBAIC0yMyw4MyArMjMsMTA2IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJREJPYmplY3RTdG9yZV9oCi0jZGVmaW5lIElEQk9i
amVjdFN0b3JlX2gKLQotI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCi1uYW1lc3BhY2UgRGVwcmVjYXRlZCB7Ci1jbGFzcyBTY3JpcHRWYWx1ZTsKLX0KLQotbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU1ZhbHVlOwotfQorI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5jbHVkZSAi
SURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZUluZm8uaCIKKyNpbmNs
dWRlICJJbmRleGVkREIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBET01TdHJp
bmdMaXN0OwogY2xhc3MgSURCQW55OwogY2xhc3MgSURCSW5kZXg7Ci1jbGFzcyBJREJLZXlQYXRo
OworY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UmFuZ2U7CiBjbGFzcyBJREJSZXF1ZXN0Owog
Y2xhc3MgSURCVHJhbnNhY3Rpb247Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Oworc3Ry
dWN0IElEQktleVJhbmdlRGF0YTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmUgOiBwdWJsaWMgUmVm
Q291bnRlZDxJREJPYmplY3RTdG9yZT4geworY2xhc3MgSURCT2JqZWN0U3RvcmUgOiBwdWJsaWMg
UmVmQ291bnRlZDxJREJPYmplY3RTdG9yZT4sIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVi
bGljOgotICAgIHZpcnR1YWwgfklEQk9iamVjdFN0b3JlKCkgeyB9CisgICAgc3RhdGljIFJlZjxJ
REJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mLCBJREJUcmFuc2FjdGlvbiYpOworCisgICAgfklEQk9iamVjdFN0b3Jl
KCk7CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElEQk9iamVjdFN0b3JlIElETAotICAgIHZpcnR1
YWwgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURC
QW55PiBrZXlQYXRoQW55KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgSURCS2V5UGF0
aCBrZXlQYXRoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IGluZGV4TmFtZXMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IHRyYW5zYWN0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhdXRvSW5jcmVtZW50KCkg
Y29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0g
ICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBJREJLZXlSYW5nZSosIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
ID0gMDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZGVs
ZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+
IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAg
dmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElE
QkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotCi0gICAgdmlydHVhbCBSZWZQdHI8SURC
SW5kZXg+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElE
QlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNb2Rlcm4o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCT2JqZWN0U3Rv
cmUoKTsKKyAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIFJlZlB0cjxJREJBbnk+
IGtleVBhdGhBbnkoKSBjb25zdDsKKyAgICBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25z
dDsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0OworICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKTsKKyAgICBib29sIGF1dG9JbmNyZW1l
bnQoKSBjb25zdDsKKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5
UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJh
bmdlKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
OworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRp
cmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJl
cXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAg
UmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJJbmRleD4g
Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICB2b2lkIGRlbGV0ZUlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAg
UmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
Jik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKTsKKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBwdXRGb3JDdXJzb3JVcGRhdGUoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBtb2Rlcm5EZWxldGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpOworCisgICAgdm9pZCBtYXJrQXNEZWxldGVkKCk7CisgICAgYm9vbCBpc0RlbGV0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KKworICAgIGNvbnN0IElEQk9iamVjdFN0
b3JlSW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCisgICAgLy8gRklYTUU6
IEFmdGVyIHJlbW92aW5nIExlZ2FjeUlEQiBhbmQgZm9sZGluZyBhYnN0cmFjdC9pbXBsZW1lbnRh
dGlvbiBjbGFzc2VzIHRvZ2V0aGVyLAorICAgIC8vIHRoaXMgd2lsbCBubyBsb25nZXIgYmUgbmVj
ZXNzYXJ5LgorICAgIElEQlRyYW5zYWN0aW9uJiBtb2Rlcm5UcmFuc2FjdGlvbigpIHsgcmV0dXJu
IG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KKworICAgIHZvaWQgcm9sbGJhY2tJbmZvRm9yVmVyc2lv
bkNoYW5nZUFib3J0KCk7CisKKyAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpT
bG90VmlzaXRvciYpIGNvbnN0OworCitwcml2YXRlOgorICAgIElEQk9iamVjdFN0b3JlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBJREJUcmFuc2Fj
dGlvbiYpOworCisgICAgZW51bSBjbGFzcyBJbmxpbmVLZXlDaGVjayB7CisgICAgICAgIFBlcmZv
cm0sCisgICAgICAgIERvTm90UGVyZm9ybSwKKyAgICB9OworCisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHB1dE9yQWRkKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBSZWZQdHI8SURCS2V5
PiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIElubGluZUtleUNoZWNrLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gZG9Db3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGRv
RGVsZXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpOworCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgY29uc3QgY2hh
ciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0OworICAgIGJvb2wgY2FuU3VzcGVuZEZvckRv
Y3VtZW50U3VzcGVuc2lvbigpIGNvbnN0OworICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7CisKKyAgICBJREJPYmplY3RTdG9yZUluZm8gbV9pbmZvOworICAgIElEQk9iamVjdFN0
b3JlSW5mbyBtX29yaWdpbmFsSW5mbzsKKyAgICBSZWY8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNh
Y3Rpb247CisKKyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07CisKKyAgICBtdXRhYmxlIExv
Y2sgbV9yZWZlcmVuY2VkSW5kZXhMb2NrOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1
ZV9wdHI8SURCSW5kZXg+PiBtX3JlZmVyZW5jZWRJbmRleGVzOworICAgIEhhc2hTZXQ8c3RkOjp1
bmlxdWVfcHRyPElEQkluZGV4Pj4gbV9kZWxldGVkSW5kZXhlczsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJPYmplY3RTdG9yZV9oCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCmluZGV4IDgyY2UxNzkuLjY3
NGM0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9w
ZW5EQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuY3BwCkBAIC0yOCwxMSArMjgsMTgzIEBACiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURC
RXJyb3IuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVk
ZSAiSURCUmVzdWx0RGF0YS5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVk
ZSAiSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUlEQk9wZW5EQlJlcXVlc3Q6OklEQk9wZW5EQlJlcXVlc3QoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKLSAgICA6IElEQlJlcXVlc3QoY29udGV4dCkK
K1JlZjxJREJPcGVuREJSZXF1ZXN0PiBJREJPcGVuREJSZXF1ZXN0OjpjcmVhdGVEZWxldGVSZXF1
ZXN0KElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGRh
dGFiYXNlSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2VJZGVudGlmaWVyLmlzVmFs
aWQoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCT3BlbkRCUmVxdWVzdChjb25uZWN0
aW9uLCBjb250ZXh0LCBkYXRhYmFzZUlkZW50aWZpZXIsIDAsIEluZGV4ZWREQjo6UmVxdWVzdFR5
cGU6OkRlbGV0ZSkpOworfQorCitSZWY8SURCT3BlbkRCUmVxdWVzdD4gSURCT3BlbkRCUmVxdWVz
dDo6Y3JlYXRlT3BlblJlcXVlc3QoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNv
bm5lY3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgZGF0YWJhc2VJZGVudGlmaWVyLCB1aW50NjRfdCB2ZXJzaW9uKQorewor
ICAgIEFTU0VSVChkYXRhYmFzZUlkZW50aWZpZXIuaXNWYWxpZCgpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBJREJPcGVuREJSZXF1ZXN0KGNvbm5lY3Rpb24sIGNvbnRleHQsIGRhdGFiYXNl
SWRlbnRpZmllciwgdmVyc2lvbiwgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZTo6T3BlbikpOworfQor
ICAgIAorSURCT3BlbkRCUmVxdWVzdDo6SURCT3BlbkRCUmVxdWVzdChJREJDbGllbnQ6OklEQkNv
bm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZpZXIsIHVp
bnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6UmVxdWVzdFR5cGUgcmVxdWVzdFR5cGUpCisgICAg
OiBJREJSZXF1ZXN0KGNvbm5lY3Rpb24sIGNvbnRleHQpCisgICAgLCBtX2RhdGFiYXNlSWRlbnRp
ZmllcihkYXRhYmFzZUlkZW50aWZpZXIpCisgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKK3sKKyAg
ICBtX3JlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7Cit9CisKK0lEQk9wZW5EQlJlcXVlc3Q6On5J
REJPcGVuREJSZXF1ZXN0KCkKK3sKK30KKwordm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvbkVycm9y
KGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCit7CisgICAgbV9kb21FcnJvciA9IERPTUVycm9y
OjpjcmVhdGUoZGF0YS5lcnJvcigpLm5hbWUoKSk7CisgICAgZW5xdWV1ZUV2ZW50KElEQlJlcXVl
c3RDb21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwg
dHJ1ZSwgKnRoaXMpKTsKK30KKwordm9pZCBJREJPcGVuREJSZXF1ZXN0Ojp2ZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb25EaWRGaW5pc2goKQoreworICAgIC8vIDMuMy43ICJ2ZXJzaW9uY2hhbmdlIiB0
cmFuc2FjdGlvbiBzdGVwcworICAgIC8vIFdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVk
LCBhZnRlciBmaXJpbmcgY29tcGxldGUvYWJvcnQgb24gdGhlIHRyYW5zYWN0aW9uLCBpbW1lZGlh
dGVseSBzZXQgcmVxdWVzdCdzIHRyYW5zYWN0aW9uIHByb3BlcnR5IHRvIG51bGwuCisgICAgbV9z
aG91bGRFeHBvc2VUcmFuc2FjdGlvblRvRE9NID0gZmFsc2U7Cit9CisKK3ZvaWQgSURCT3BlbkRC
UmVxdWVzdDo6ZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQoKQoreworICAgIExP
RyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpmaXJlU3VjY2Vzc0FmdGVyVmVyc2lvbkNo
YW5nZUNvbW1pdCgpIik7CisKKyAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOworICAg
IEFTU0VSVChtX3Jlc3VsdCk7CisgICAgQVNTRVJUKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55
OjpUeXBlOjpJREJEYXRhYmFzZSk7CisgICAgbV90cmFuc2FjdGlvbi0+YWRkUmVxdWVzdCgqdGhp
cyk7CisKKyAgICBhdXRvIGV2ZW50ID0gSURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSwgKnRoaXMpOworICAgIG1f
b3BlbkRhdGFiYXNlU3VjY2Vzc0V2ZW50ID0gJmV2ZW50LmdldCgpOworCisgICAgZW5xdWV1ZUV2
ZW50KFdURk1vdmUoZXZlbnQpKTsKK30KKwordm9pZCBJREJPcGVuREJSZXF1ZXN0OjpmaXJlRXJy
b3JBZnRlclZlcnNpb25DaGFuZ2VDb21wbGV0aW9uKCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAi
SURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigp
Iik7CisKKyAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOworCisgICAgSURCRXJyb3Ig
aWRiRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpOworICAgIG1fZG9tRXJy
b3IgPSBET01FcnJvcjo6Y3JlYXRlKGlkYkVycm9yLm5hbWUoKSk7CisgICAgbV9yZXN1bHQgPSBJ
REJBbnk6OmNyZWF0ZVVuZGVmaW5lZCgpOworCisgICAgbV90cmFuc2FjdGlvbi0+YWRkUmVxdWVz
dCgqdGhpcyk7CisgICAgZW5xdWV1ZUV2ZW50KElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSwgKnRoaXMpKTsKK30KKwor
Ym9vbCBJREJPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKK3sKKyAg
ICBib29sIHJlc3VsdCA9IElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOworCisgICAg
aWYgKG1fdHJhbnNhY3Rpb24gJiYgbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkgJiYg
KGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC50eXBlKCkg
PT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkpCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRpZEZpbmlzaEhhbmRsaW5nVmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uKCptX3RyYW5zYWN0aW9uKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uU3Vj
Y2VzcygpIik7CisKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmPElEQkRhdGFiYXNlPiBkYXRhYmFzZSA9IElEQkRhdGFiYXNlOjpj
cmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY29ubmVjdGlvbigpLCByZXN1bHREYXRh
KTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUoZGF0YWJhc2UpKTsKKyAg
ICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKKworICAgIGVucXVl
dWVFdmVudChJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1
Y2Nlc3NFdmVudCwgZmFsc2UsIGZhbHNlLCAqdGhpcykpOworfQorCit2b2lkIElEQk9wZW5EQlJl
cXVlc3Q6Om9uVXBncmFkZU5lZWRlZChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQor
eworICAgIFJlZjxJREJEYXRhYmFzZT4gZGF0YWJhc2UgPSBJREJEYXRhYmFzZTo6Y3JlYXRlKCpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNvbm5lY3Rpb24oKSwgcmVzdWx0RGF0YSk7CisgICAg
UmVmPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IGRhdGFiYXNlLT5zdGFydFZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbihyZXN1bHREYXRhLnRyYW5zYWN0aW9uSW5mbygpLCAqdGhpcyk7CisK
KyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPmluZm8oKS5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+b3Jp
Z2luYWxEYXRhYmFzZUluZm8oKSk7CisKKyAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0gdHJhbnNh
Y3Rpb24tPm9yaWdpbmFsRGF0YWJhc2VJbmZvKCktPnZlcnNpb24oKTsKKyAgICB1aW50NjRfdCBu
ZXdWZXJzaW9uID0gdHJhbnNhY3Rpb24tPmluZm8oKS5uZXdWZXJzaW9uKCk7CisKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKCkgLSBjdXJyZW50
IHZlcnNpb24gaXMgJSIgUFJJdTY0ICIsIG5ldyBpcyAlIiBQUkl1NjQsIG9sZFZlcnNpb24sIG5l
d1ZlcnNpb24pOworCisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKGRhdGFi
YXNlKSk7CisgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7Cisg
ICAgbV90cmFuc2FjdGlvbiA9IGFkb3B0UmVmKCZ0cmFuc2FjdGlvbi5sZWFrUmVmKCkpOworICAg
IG1fdHJhbnNhY3Rpb24tPmFkZFJlcXVlc3QoKnRoaXMpOworCisgICAgZW5xdWV1ZUV2ZW50KElE
QlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50
TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpKTsKK30KKwordm9pZCBJREJPcGVuREJSZXF1ZXN0
OjpvbkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQoreworICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSByZXN1bHREYXRhLmRhdGFiYXNlSW5mbygp
LnZlcnNpb24oKTsKKworICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpvbkRl
bGV0ZURhdGFiYXNlU3VjY2VzcygpIC0gY3VycmVudCB2ZXJzaW9uIGlzICUiIFBSSXU2NCwgb2xk
VmVyc2lvbik7CisKKyAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9u
ZTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlVW5kZWZpbmVkKCk7CisKKyAgICBlbnF1
ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgMCwgZXZl
bnROYW1lcygpLnN1Y2Nlc3NFdmVudCkpOworfQorCit2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnJl
cXVlc3RDb21wbGV0ZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgZGF0YSkKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZCIpOworCisgICAgLy8g
SWYgYW4gT3BlbiByZXF1ZXN0IHdhcyBjb21wbGV0ZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFzIG5hdmln
YXRlZCwgbGVhdmluZyB0aGlzIHJlcXVlc3QKKyAgICAvLyB3aXRoIGEgc3RvcHBlZCBzY3JpcHQg
ZXhlY3V0aW9uIGNvbnRleHQsIHdlIG5lZWQgdG8gbWVzc2FnZSBiYWNrIHRvIHRoZSBzZXJ2ZXIg
c28gaXQKKyAgICAvLyBkb2Vzbid0IGhhbmcgd2FpdGluZyBvbiBhIGRhdGFiYXNlIGNvbm5lY3Rp
b24gb3IgdHJhbnNhY3Rpb24gdGhhdCB3aWxsIG5ldmVyIGV4aXN0LgorICAgIGlmIChtX2NvbnRl
eHRTdG9wcGVkKSB7CisgICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBJREJSZXN1bHRUeXBlOjpPcGVuRGF0YWJhc2VTdWNjZXNzOgorICAgICAgICAgICAgY29ubmVj
dGlvbigpLmFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQoZGF0YS5kYXRhYmFzZUNvbm5lY3Rpb25J
ZGVudGlmaWVyKCksIElEQlJlc291cmNlSWRlbnRpZmllcjo6ZW1wdHlWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElEQlJlc3VsdFR5cGU6Ok9wZW5EYXRhYmFzZVVw
Z3JhZGVOZWVkZWQ6CisgICAgICAgICAgICBjb25uZWN0aW9uKCkuYWJvcnRPcGVuQW5kVXBncmFk
ZU5lZWRlZChkYXRhLmRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIoKSwgZGF0YS50cmFuc2Fj
dGlvbkluZm8oKS5pZGVudGlmaWVyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKGRhdGEudHlwZSgpKSB7CisgICAgY2FzZSBJREJSZXN1bHRU
eXBlOjpFcnJvcjoKKyAgICAgICAgb25FcnJvcihkYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJREJSZXN1bHRUeXBlOjpPcGVuRGF0YWJhc2VTdWNjZXNzOgorICAgICAgICBvblN1Y2Nl
c3MoZGF0YSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6T3BlbkRh
dGFiYXNlVXBncmFkZU5lZWRlZDoKKyAgICAgICAgb25VcGdyYWRlTmVlZGVkKGRhdGEpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIElEQlJlc3VsdFR5cGU6OkRlbGV0ZURhdGFiYXNlU3VjY2Vz
czoKKyAgICAgICAgb25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MoZGF0YSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCit2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RCbG9ja2VkKHVpbnQ2NF90
IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCiB7CisgICAgTE9HKEluZGV4ZWREQiwg
IklEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RCbG9ja2VkIik7CisgICAgZW5xdWV1ZUV2ZW50KElE
QlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50
TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5o
CmluZGV4IDAwYWRkYzAuLjFkY2Q3ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmgKQEAgLTIzLDI2ICsyMyw1OCBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCT3BlbkRC
UmVxdWVzdF9oCi0jZGVmaW5lIElEQk9wZW5EQlJlcXVlc3RfaAorI3ByYWdtYSBvbmNlCiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTUVycm9yLmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgot
I2luY2x1ZGUgIkluZGV4ZWREQi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEV2
ZW50OworY2xhc3MgSURCRGF0YWJhc2VJZGVudGlmaWVyOworY2xhc3MgSURCUmVzdWx0RGF0YTsK
K2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKK25hbWVzcGFjZSBJREJDbGllbnQgewor
Y2xhc3MgSURCQ29ubmVjdGlvblRvU2VydmVyOworfQorCiBjbGFzcyBJREJPcGVuREJSZXF1ZXN0
IDogcHVibGljIElEQlJlcXVlc3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfklEQk9wZW5EQlJl
cXVlc3QoKSB7IH0KKyAgICBzdGF0aWMgUmVmPElEQk9wZW5EQlJlcXVlc3Q+IGNyZWF0ZURlbGV0
ZVJlcXVlc3QoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJik7CisgICAgc3RhdGljIFJl
ZjxJREJPcGVuREJSZXF1ZXN0PiBjcmVhdGVPcGVuUmVxdWVzdChJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImLCB1aW50NjRfdCB2ZXJzaW9uKTsKKworICAgIH5JREJPcGVuREJSZXF1ZXN0
KCkgZmluYWw7CisgICAgCisgICAgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFz
ZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlSWRlbnRpZmllcjsgfQorICAg
IHVpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKworICAgIHZv
aWQgcmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1bHREYXRhJik7CisgICAgdm9pZCByZXF1
ZXN0QmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKTsKKwor
ICAgIHZvaWQgdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlkRmluaXNoKCk7CisgICAgdm9pZCBm
aXJlU3VjY2Vzc0FmdGVyVmVyc2lvbkNoYW5nZUNvbW1pdCgpOworICAgIHZvaWQgZmlyZUVycm9y
QWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgSURCT3Bl
bkRCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisgICAgYm9vbCBkaXNwYXRjaEV2
ZW50KEV2ZW50JikgZmluYWw7CisKK3ByaXZhdGU6CisgICAgSURCT3BlbkRCUmVxdWVzdChJREJD
bGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCB1aW50NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6
OlJlcXVlc3RUeXBlKTsKKworICAgIHZvaWQgb25FcnJvcihjb25zdCBJREJSZXN1bHREYXRhJik7
CisgICAgdm9pZCBvblN1Y2Nlc3MoY29uc3QgSURCUmVzdWx0RGF0YSYpOworICAgIHZvaWQgb25V
cGdyYWRlTmVlZGVkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIG9uRGVsZXRlRGF0
YWJhc2VTdWNjZXNzKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIGJvb2wgaXNPcGVuREJS
ZXF1ZXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgSURCRGF0YWJh
c2VJZGVudGlmaWVyIG1fZGF0YWJhc2VJZGVudGlmaWVyOworICAgIHVpbnQ2NF90IG1fdmVyc2lv
biB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCT3BlbkRCUmVxdWVzdF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDAx
MmYzNjkuLmI5MTVhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuY3BwCkBAIC0yOCwxMSArMjgsNDA4IEBACiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTUVycm9yLmgiCisjaW5jbHVkZSAiRE9NUmVxdWVz
dFN0YXRlLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCisj
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkN1cnNvci5oIgor
I2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJREJLZXlEYXRh
LmgiCisjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVGhyZWFkU2FmZURh
dGFCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1JREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQpCitSZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgSURC
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElE
QlJlcXVlc3QoY29udGV4dCwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7Cit9CisKK1JlZjxJ
REJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgSURCQ3Vyc29yJiBjdXJzb3IsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIGN1cnNvciwgdHJh
bnNhY3Rpb24pKTsKK30KKworUmVmPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZUNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlJl
cXVlc3QoY29udGV4dCwgaW5kZXgsIHRyYW5zYWN0aW9uKSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0
PiBJREJSZXF1ZXN0OjpjcmVhdGVHZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
SURCSW5kZXgmIGluZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZXF1ZXN0ZWRSZWNv
cmRUeXBlLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSURCUmVxdWVzdChjb250ZXh0LCBpbmRleCwgcmVxdWVzdGVkUmVjb3JkVHlwZSwg
dHJhbnNhY3Rpb24pKTsKK30KKworSURCUmVxdWVzdDo6SURCUmVxdWVzdChJREJDbGllbnQ6OklE
QkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkKKyAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKKyAgICAsIG1fY29ubmVj
dGlvbihjb25uZWN0aW9uKQorICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIoY29ubmVjdGlvbikK
K3sKKyAgICBzdXNwZW5kSWZOZWVkZWQoKTsKK30KKworSURCUmVxdWVzdDo6SURCUmVxdWVzdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3Rv
cmUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKICAgICA6IEFjdGl2ZURPTU9iamVjdCgm
Y29udGV4dCkKKyAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQorICAgICwgbV9jb25u
ZWN0aW9uKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKKyAgICAsIG1fcmVzb3VyY2VJ
ZGVudGlmaWVyKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKKyAgICAsIG1fc291cmNl
KElEQkFueTo6Y3JlYXRlKG9iamVjdFN0b3JlKSkKK3sKKyAgICBzdXNwZW5kSWZOZWVkZWQoKTsK
K30KKworSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBJREJDdXJzb3ImIGN1cnNvciwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQorICAg
IDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNh
Y3Rpb24pCisgICAgLCBtX2Nvbm5lY3Rpb24odHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlvbigp
KQorICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlv
bigpKQorICAgICwgbV9zb3VyY2UoY3Vyc29yLnNvdXJjZSgpKQorICAgICwgbV9wZW5kaW5nQ3Vy
c29yKCZjdXJzb3IpCit7CisgICAgc3VzcGVuZElmTmVlZGVkKCk7CisKKyAgICBjdXJzb3Iuc2V0
UmVxdWVzdCgqdGhpcyk7Cit9CisKK0lEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCisgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCisgICAgLCBtX3RyYW5z
YWN0aW9uKCZ0cmFuc2FjdGlvbikKKyAgICAsIG1fY29ubmVjdGlvbih0cmFuc2FjdGlvbi5zZXJ2
ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5z
ZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3NvdXJjZShJREJBbnk6OmNyZWF0ZShpbmRleCkp
Cit7CisgICAgc3VzcGVuZElmTmVlZGVkKCk7Cit9CisKK0lEQlJlcXVlc3Q6OklEQlJlcXVlc3Qo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBJbmRleGVk
REI6OkluZGV4UmVjb3JkVHlwZSByZXF1ZXN0ZWRSZWNvcmRUeXBlLCBJREJUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24pCisgICAgOiBJREJSZXF1ZXN0KGNvbnRleHQsIGluZGV4LCB0cmFuc2FjdGlv
bikKK3sKKyAgICBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSA9IHJlcXVlc3RlZFJlY29yZFR5
cGU7Cit9CisKK0lEQlJlcXVlc3Q6On5JREJSZXF1ZXN0KCkKK3sKKyAgICBpZiAobV9yZXN1bHQp
IHsKKyAgICAgICAgYXV0byB0eXBlID0gbV9yZXN1bHQtPnR5cGUoKTsKKyAgICAgICAgaWYgKHR5
cGUgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3IgfHwgdHlwZSA9PSBJREJBbnk6OlR5cGU6OklE
QkN1cnNvcldpdGhWYWx1ZSkKKyAgICAgICAgICAgIG1fcmVzdWx0LT5pZGJDdXJzb3IoKS0+Y2xl
YXJSZXF1ZXN0KCk7CisgICAgfQorfQorCitSZWZQdHI8V2ViQ29yZTo6SURCQW55PiBJREJSZXF1
ZXN0OjpyZXN1bHQoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgY29uc3QKK3sKKyAgICBp
ZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKQorICAgICAgICBy
ZXR1cm4gbV9yZXN1bHQ7CisKKyAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOworICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byByZWFkIHRoZSAncmVzdWx0JyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVl
c3QgaGFzIG5vdCBmaW5pc2hlZC4iKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordW5zaWdu
ZWQgc2hvcnQgSURCUmVxdWVzdDo6ZXJyb3JDb2RlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdAogewor
ICAgIHJldHVybiAwOworfQorCitSZWZQdHI8RE9NRXJyb3I+IElEQlJlcXVlc3Q6OmVycm9yKEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVhZHlTdGF0
ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSkKKyAgICAgICAgcmV0dXJuIG1fZG9tRXJy
b3I7CisKKyAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVy
cm9yOworICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byByZWFkIHRoZSAn
ZXJyb3InIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVlc3QnOiBUaGUgcmVxdWVzdCBoYXMgbm90IGZp
bmlzaGVkLiIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURC
QW55PiBJREJSZXF1ZXN0Ojpzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3NvdXJjZTsK
K30KKwordm9pZCBJREJSZXF1ZXN0OjpzZXRTb3VyY2UoSURCQ3Vyc29yJiBjdXJzb3IpCit7Cisg
ICAgQVNTRVJUKCFtX2N1cnNvclJlcXVlc3ROb3RpZmllcik7CisKKyAgICBtX3NvdXJjZSA9IElE
QkFueTo6Y3JlYXRlKGN1cnNvcik7CisgICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPFNjb3BlR3VhcmQ+KFt0aGlzXSgpIHsKKyAgICAgICAgQVNTRVJUKG1fc291
cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3IgfHwgbV9zb3VyY2UtPnR5cGUo
KSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSk7CisgICAgICAgIG1fc291cmNl
LT5pZGJDdXJzb3IoKS0+ZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQoKTsKKyAgICB9
KTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpzZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbik7
CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLmlzVmVyc2lvbkNoYW5nZSgpKTsKKyAgICBBU1NFUlQo
IXRyYW5zYWN0aW9uLmlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKKworICAgIG1fdHJhbnNhY3Rp
b24gPSAmdHJhbnNhY3Rpb247Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4g
SURCUmVxdWVzdDo6dHJhbnNhY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3Nob3VsZEV4
cG9zZVRyYW5zYWN0aW9uVG9ET00gPyBtX3RyYW5zYWN0aW9uIDogbnVsbHB0cjsKK30KKworY29u
c3QgU3RyaW5nJiBJREJSZXF1ZXN0OjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAgICBzdGF0aWMg
V1RGOjpOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBlbmRpbmdTdHJpbmcoInBlbmRpbmciKTsKKyAg
ICBzdGF0aWMgV1RGOjpOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGRvbmVTdHJpbmcoImRvbmUiKTsK
KworICAgIHN3aXRjaCAobV9yZWFkeVN0YXRlKSB7CisgICAgY2FzZSBJREJSZXF1ZXN0UmVhZHlT
dGF0ZTo6UGVuZGluZzoKKyAgICAgICAgcmV0dXJuIHBlbmRpbmdTdHJpbmc7CisgICAgY2FzZSBJ
REJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZToKKyAgICAgICAgcmV0dXJuIGRvbmVTdHJpbmc7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisKK3VpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllcigp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQk9iamVjdFN0b3JlKSB7Cisg
ICAgICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9zb3VyY2UtPmlkYk9iamVjdFN0b3JlKCkuZ2V0
KCk7CisgICAgICAgIGlmICghb2JqZWN0U3RvcmUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLT5pbmZvKCkuaWRlbnRpZmllcigpOworICAgIH0KKwor
ICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCSW5kZXgpIHsKKyAg
ICAgICAgYXV0byogaW5kZXggPSBtX3NvdXJjZS0+aWRiSW5kZXgoKS5nZXQoKTsKKyAgICAgICAg
aWYgKCFpbmRleCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gaW5kZXgt
PmluZm8oKS5vYmplY3RTdG9yZUlkZW50aWZpZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKwordWludDY0X3QgSURCUmVxdWVzdDo6c291cmNlSW5kZXhJZGVudGlmaWVyKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9zb3Vy
Y2UtPnR5cGUoKSAhPSBJREJBbnk6OlR5cGU6OklEQkluZGV4KQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoIW1fc291cmNlLT5pZGJJbmRleCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX3NvdXJjZS0+aWRiSW5kZXgoKS0+aW5mbygpLmlkZW50aWZpZXIoKTsKK30KKwor
SW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNv
cmRUeXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9zb3VyY2UpOworICAgIEFTU0VSVChtX3Nv
dXJjZS0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCSW5kZXgpOworCisgICAgcmV0dXJuIG1f
cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlOworfQorCitFdmVudFRhcmdldEludGVyZmFjZSBJREJS
ZXF1ZXN0OjpldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElEQlJl
cXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7Cit9CisKK2NvbnN0IGNoYXIqIElEQlJlcXVl
c3Q6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiSURCUmVxdWVz
dCI7Cit9CisKK2Jvb2wgSURCUmVxdWVzdDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElEQlJlcXVlc3Q6Omhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGFzUGVuZGluZ0FjdGl2
aXR5OworfQorCit2b2lkIElEQlJlcXVlc3Q6OnN0b3AoKQoreworICAgIEFTU0VSVCghbV9jb250
ZXh0U3RvcHBlZCk7CisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Cit9CisKK3ZvaWQgSURC
UmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKK3sKKyAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2NvbnRleHRTdG9wcGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7Cit9CisK
K2Jvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCit7CisgICAgTE9H
KEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQgLSAlcyAoJXApIiwgZXZlbnQu
dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRoaXMpOworCisgICAgQVNTRVJUKG1faGFz
UGVuZGluZ0FjdGl2aXR5KTsKKyAgICBBU1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOworCisgICAg
aWYgKGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQorICAgICAgICBt
X3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKKworICAgIFZlY3RvcjxS
ZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOworICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOwor
CisgICAgaWYgKCZldmVudCA9PSBtX29wZW5EYXRhYmFzZVN1Y2Nlc3NFdmVudCkKKyAgICAgICAg
bV9vcGVuRGF0YWJhc2VTdWNjZXNzRXZlbnQgPSBudWxscHRyOworICAgIGVsc2UgaWYgKG1fdHJh
bnNhY3Rpb24gJiYgIW1fdHJhbnNhY3Rpb24tPmlzRmluaXNoZWQoKSkgeworICAgICAgICAgICAg
dGFyZ2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbik7CisgICAgICAgICAgICB0YXJnZXRzLmFwcGVu
ZChtX3RyYW5zYWN0aW9uLT5kYigpKTsKKyAgICB9CisKKyAgICBtX2hhc1BlbmRpbmdBY3Rpdml0
eSA9IGZhbHNlOworCisgICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIgPSBudWxscHRyOworCisg
ICAgYm9vbCBkb250UHJldmVudERlZmF1bHQ7CisgICAgeworICAgICAgICBUcmFuc2FjdGlvbkFj
dGl2YXRvciBhY3RpdmF0b3IobV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAgIGRvbnRQcmV2
ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMp
OworICAgIH0KKworICAgIC8vIElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goKSBtaWdodCBo
YXZlIHNldCB0aGUgcGVuZGluZyBhY3Rpdml0eSBmbGFnIGJhY2sgdG8gdHJ1ZSwgc3VnZ2VzdGlu
ZyB0aGUgcmVxdWVzdCB3aWxsIGJlIHJldXNlZC4KKyAgICAvLyBXZSBtaWdodCBhbHNvIHJlLXVz
ZSB0aGUgcmVxdWVzdCBpZiB0aGlzIGV2ZW50IHdhcyB0aGUgdXBncmFkZW5lZWRlZCBldmVudCBm
b3IgYW4gSURCT3BlbkRCUmVxdWVzdC4KKyAgICBpZiAoIW1faGFzUGVuZGluZ0FjdGl2aXR5KQor
ICAgICAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGlzT3BlbkRCUmVxdWVzdCgpICYmIChldmVu
dC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCBldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCk7CisKKyAgICAvLyBUaGUgcmVxdWVzdCBz
aG91bGQgb25seSByZW1haW4gaW4gdGhlIHRyYW5zYWN0aW9uJ3MgcmVxdWVzdCBsaXN0IGlmIGl0
IHJlcHJlc2VudHMgYSBwZW5kaW5nIGN1cnNvciBvcGVyYXRpb24sIG9yIHRoaXMgaXMgYW4gb3Bl
biByZXF1ZXN0IHRoYXQgd2FzIGJsb2NrZWQuCisgICAgaWYgKG1fdHJhbnNhY3Rpb24gJiYgIW1f
cGVuZGluZ0N1cnNvciAmJiBldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVu
dCkKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlUmVxdWVzdCgqdGhpcyk7CisKKyAgICBp
ZiAoZG9udFByZXZlbnREZWZhdWx0ICYmIGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJy
b3JFdmVudCAmJiBtX3RyYW5zYWN0aW9uICYmICFtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkT3JG
aW5pc2hpbmcoKSkgeworICAgICAgICBBU1NFUlQobV9kb21FcnJvcik7CisgICAgICAgIG1fdHJh
bnNhY3Rpb24tPmFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0KCptX2RvbUVycm9yKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZG9udFByZXZlbnREZWZhdWx0OworfQorCit2b2lkIElEQlJlcXVlc3Q6OnVu
Y2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyIik7CisKKyAgICBpZiAo
bV90cmFuc2FjdGlvbiAmJiBtX2lkYkVycm9yLmNvZGUoKSAhPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6QWJvcnRFcnJvcikKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnREdWVUb0ZhaWxlZFJl
cXVlc3QoRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1l
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSkpOworfQorCit2b2lkIElEQlJlcXVl
c3Q6OnNldFJlc3VsdChjb25zdCBJREJLZXlEYXRhKiBrZXlEYXRhKQoreworICAgIGlmICgha2V5
RGF0YSkgeworICAgICAgICBtX3Jlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGlkYktleURhdGFUb1Nj
cmlwdFZhbHVlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKmtleURhdGEpOworICAgIG1fcmVz
dWx0ID0gSURCQW55OjpjcmVhdGUoV1RGTW92ZSh2YWx1ZSkpOworfQorCit2b2lkIElEQlJlcXVl
c3Q6OnNldFJlc3VsdCh1aW50NjRfdCBudW1iZXIpCit7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCksIEpTQzo6SlNWYWx1
ZShudW1iZXIpKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVk
Q2xvbmUoY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUiKTsKKwor
ICAgIGF1dG8gY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZh
bHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoKmNvbnRleHQsIHZhbHVlRGF0YSk7CisgICAg
bV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKHZhbHVlKSk7Cit9CisKK3ZvaWQgSURC
UmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQoKQoreworICAgIG1fcmVzdWx0ID0gSURCQW55
OjpjcmVhdGVVbmRlZmluZWQoKTsKK30KKworSURCQ3Vyc29yKiBJREJSZXF1ZXN0OjpyZXN1bHRD
dXJzb3IoKQoreworICAgIGlmICghbV9yZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yIHx8IG1f
cmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpCisgICAg
ICAgIHJldHVybiBtX3Jlc3VsdC0+aWRiQ3Vyc29yKCkuZ2V0KCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6d2lsbEl0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJiBj
dXJzb3IpCit7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0
ZTo6RG9uZSk7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVCghbV9wZW5kaW5nQ3Vyc29yKTsKKyAgICBB
U1NFUlQoJmN1cnNvciA9PSByZXN1bHRDdXJzb3IoKSk7CisgICAgQVNTRVJUKCFtX2N1cnNvclJl
cXVlc3ROb3RpZmllcik7CisKKyAgICBtX3BlbmRpbmdDdXJzb3IgPSAmY3Vyc29yOworICAgIG1f
aGFzUGVuZGluZ0FjdGl2aXR5ID0gdHJ1ZTsKKyAgICBtX3Jlc3VsdCA9IG51bGxwdHI7CisgICAg
bV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmc7CisgICAgbV9kb21F
cnJvciA9IG51bGxwdHI7CisgICAgbV9pZGJFcnJvciA9IHsgfTsKKworICAgIG1fY3Vyc29yUmVx
dWVzdE5vdGlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxTY29wZUd1YXJkPihbdGhpc10oKSB7Cisg
ICAgICAgIG1fcGVuZGluZ0N1cnNvci0+ZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQo
KTsKKyAgICB9KTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpkaWRPcGVuT3JJdGVyYXRlQ3Vyc29y
KGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgQVNTRVJUKG1fcGVuZGlu
Z0N1cnNvcik7CisgICAgbV9yZXN1bHQgPSBudWxscHRyOworCisgICAgaWYgKHJlc3VsdERhdGEu
dHlwZSgpID09IElEQlJlc3VsdFR5cGU6Okl0ZXJhdGVDdXJzb3JTdWNjZXNzIHx8IHJlc3VsdERh
dGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6Ok9wZW5DdXJzb3JTdWNjZXNzKSB7CisgICAgICAg
IG1fcGVuZGluZ0N1cnNvci0+c2V0R2V0UmVzdWx0KCp0aGlzLCByZXN1bHREYXRhLmdldFJlc3Vs
dCgpKTsKKyAgICAgICAgaWYgKHJlc3VsdERhdGEuZ2V0UmVzdWx0KCkuaXNEZWZpbmVkKCkpCisg
ICAgICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKCptX3BlbmRpbmdDdXJzb3IpOwor
ICAgIH0KKworICAgIG1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyID0gbnVsbHB0cjsKKyAgICBtX3Bl
bmRpbmdDdXJzb3IgPSBudWxscHRyOworCisgICAgcmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRh
KTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3Vs
dERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5
U3RhdGU6OkRvbmU7CisKKyAgICBtX2lkYkVycm9yID0gcmVzdWx0RGF0YS5lcnJvcigpOworICAg
IGlmICghbV9pZGJFcnJvci5pc051bGwoKSkKKyAgICAgICAgb25FcnJvcigpOworICAgIGVsc2UK
KyAgICAgICAgb25TdWNjZXNzKCk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6b25FcnJvcigpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6Om9uRXJyb3IiKTsKKworICAgIEFTU0VS
VCghbV9pZGJFcnJvci5pc051bGwoKSk7CisgICAgbV9kb21FcnJvciA9IERPTUVycm9yOjpjcmVh
dGUobV9pZGJFcnJvci5uYW1lKCkpOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVz
dDo6b25TdWNjZXNzKCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6b25TdWNj
ZXNzIik7CisKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3Vj
Y2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IDVh
ZmJmNjEuLmUxOTAyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmgKQEAgLTIzLDU0ICsyMywxNDQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIElEQlJlcXVlc3RfaAotI2RlZmluZSBJREJSZXF1
ZXN0X2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01FcnJvci5oIgotI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50
TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIklEQkFueS5o
IgotI2luY2x1ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgor
I2luY2x1ZGUgIklEQlJlc291cmNlSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uLmgiCisjaW5jbHVkZSAiU2NvcGVHdWFyZC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCVHJhbnNhY3Rpb247CitjbGFz
cyBFdmVudDsKK2NsYXNzIElEQkFueTsKK2NsYXNzIElEQkN1cnNvcjsKK2NsYXNzIElEQkluZGV4
OworY2xhc3MgSURCS2V5RGF0YTsKK2NsYXNzIElEQk9iamVjdFN0b3JlOworY2xhc3MgSURCUmVz
dWx0RGF0YTsKK2NsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCi1zdHJ1Y3QgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlOworbmFtZXNwYWNlIElEQkNsaWVudCB7CitjbGFzcyBJREJDb25uZWN0
aW9uVG9TZXJ2ZXI7Cit9CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CituYW1lc3BhY2Ug
SW5kZXhlZERCIHsKK2VudW0gY2xhc3MgSW5kZXhSZWNvcmRUeXBlOworfQogCiAvLyBEZWZpbmVk
IGluIHRoZSBJREwKIGVudW0gY2xhc3MgSURCUmVxdWVzdFJlYWR5U3RhdGUgewogICAgIFBlbmRp
bmcgPSAxLAogICAgIERvbmUgPSAyLAotICAgIERlcHJlY2F0ZWRFYXJseURlYXRoID0gMywgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxMTcgLSBS
ZW1vdmUgdGhpcyB3aGVuIHJlbW92aW5nIExlZ2FjeUlEQgogfTsKIAotY2xhc3MgSURCUmVxdWVz
dCA6IHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2Jq
ZWN0IHsKK2NsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0
YSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD4g
ewogcHVibGljOgotICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKSB7IH0KKyAgICBzdGF0aWMgUmVm
PElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3Rv
cmUmLCBJREJUcmFuc2FjdGlvbiYpOworICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJDdXJzb3ImLCBJREJUcmFuc2FjdGlvbiYpOwor
ICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIElEQkluZGV4JiwgSURCVHJhbnNhY3Rpb24mKTsKKyAgICBzdGF0aWMgUmVmPElEQlJl
cXVlc3Q+IGNyZWF0ZUdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRl
eGVkREI6OkluZGV4UmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24mKTsKIAotICAgIHZpcnR1YWwg
UmVmUHRyPElEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGVycm9yQ29kZShFeGNlcHRpb25Db2RlJikg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPERPTUVycm9yPiBlcnJvcihFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCQW55PiBz
b3VyY2UoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uKCkgY29uc3QgPSAwOworICAgIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
cmVzb3VyY2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZUlkZW50aWZpZXI7
IH0KIAotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiByZWFkeVN0YXRlKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKKworICAgIFJlZlB0cjxJREJBbnk+IHJlc3VsdChF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBlcnJv
ckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIFJlZlB0cjxET01FcnJvcj4gZXJyb3Io
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgY29uc3Q7CisgICAgUmVmUHRyPElEQkFueT4gc291
cmNlKCkgY29uc3Q7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNv
bnN0OworICAgIGNvbnN0IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgdWludDY0
X3Qgc291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdWludDY0X3Qgc291
cmNlSW5kZXhJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5
cGUgcmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKCkgY29uc3Q7CisKKyAgICAvLyBFdmVudFRhcmdl
dAorICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOyB9CisKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+OjpyZWY7
CisgICAgdXNpbmcgUmVmQ291bnRlZDxJREJSZXF1ZXN0Pjo6ZGVyZWY7CisKKyAgICB2b2lkIGVu
cXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYp
IG92ZXJyaWRlOworCisgICAgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5l
Y3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0KKworICAgIHZvaWQgcmVxdWVzdENvbXBs
ZXRlZChjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICB2b2lkIHNldFJlc3VsdChjb25zdCBJ
REJLZXlEYXRhKik7CisgICAgdm9pZCBzZXRSZXN1bHQodWludDY0X3QpOworICAgIHZvaWQgc2V0
UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImKTsKKyAg
ICB2b2lkIHNldFJlc3VsdFRvVW5kZWZpbmVkKCk7CisKKyAgICBJREJBbnkqIG1vZGVyblJlc3Vs
dCgpIHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9CisKKyAgICB2b2lkIHdpbGxJdGVyYXRlQ3Vy
c29yKElEQkN1cnNvciYpOworICAgIHZvaWQgZGlkT3Blbk9ySXRlcmF0ZUN1cnNvcihjb25zdCBJ
REJSZXN1bHREYXRhJik7CisKKyAgICBjb25zdCBJREJDdXJzb3IqIHBlbmRpbmdDdXJzb3IoKSBj
b25zdCB7IHJldHVybiBtX3BlbmRpbmdDdXJzb3IuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0U291
cmNlKElEQkN1cnNvciYpOworICAgIHZvaWQgc2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElE
QlRyYW5zYWN0aW9uJik7CisKKyAgICBJbmRleGVkREI6OlJlcXVlc3RUeXBlIHJlcXVlc3RUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0VHlwZTsgfQorCisgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0LgorICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc3Rv
cCgpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6Ci0gICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0Jik7CisgICAgSURCUmVxdWVzdChJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZl
ciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIElEQlRyYW5zYWN0aW9uJik7CisgICAgSURC
UmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCQ3Vyc29yJiwgSURCVHJhbnNhY3Rp
b24mKTsKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYs
IElEQlRyYW5zYWN0aW9uJik7CisgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCSW5kZXgmLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24m
KTsKKworICAgIC8vIEV2ZW50VGFyZ2V0LgorICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBmaW5h
bCB7IFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46OnJlZigpOyB9CisgICAgdm9pZCBkZXJlZkV2ZW50
VGFyZ2V0KCkgZmluYWwgeyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+OjpkZXJlZigpOyB9CisgICAg
dm9pZCB1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkgZmluYWw7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNPcGVuREJSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IElEQlJlcXVlc3RSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZSB7IElEQlJlcXVlc3RSZWFkeVN0YXRl
OjpQZW5kaW5nIH07CisgICAgUmVmUHRyPElEQkFueT4gbV9yZXN1bHQ7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworICAgIGJvb2wgbV9zaG91bGRFeHBvc2VUcmFu
c2FjdGlvblRvRE9NIHsgdHJ1ZSB9OworICAgIFJlZlB0cjxET01FcnJvcj4gbV9kb21FcnJvcjsK
KyAgICBJREJFcnJvciBtX2lkYkVycm9yOworICAgIEluZGV4ZWREQjo6UmVxdWVzdFR5cGUgbV9y
ZXF1ZXN0VHlwZSA9IHsgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZTo6T3RoZXIgfTsKKyAgICBib29s
IG1fY29udGV4dFN0b3BwZWQgeyBmYWxzZSB9OworCisgICAgRXZlbnQqIG1fb3BlbkRhdGFiYXNl
U3VjY2Vzc0V2ZW50IHsgbnVsbHB0ciB9OworCitwcml2YXRlOgorICAgIHZvaWQgb25FcnJvcigp
OworICAgIHZvaWQgb25TdWNjZXNzKCk7CisKKyAgICBJREJDdXJzb3IqIHJlc3VsdEN1cnNvcigp
OworCisgICAgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIG1fY29ubmVjdGlvbjsK
KyAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9yZXNvdXJjZUlkZW50aWZpZXI7CisgICAgUmVm
UHRyPElEQkFueT4gbV9zb3VyY2U7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eSB7IHRy
dWUgfTsKKyAgICBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBtX3JlcXVlc3RlZEluZGV4UmVj
b3JkVHlwZTsKKworICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fcGVuZGluZ0N1cnNvcjsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxTY29wZUd1YXJkPiBtX2N1cnNvclJlcXVlc3ROb3RpZmllcjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jZW5kaWYgLy8gTGVnYWN5UmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0aW9uRXZl
bnQuY3BwCmluZGV4IDBiZWM2ZTMuLjEwMGE0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQu
Y3BwCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCUmVxdWVz
dENvbXBsZXRpb25FdmVudDo6SURCUmVxdWVzdENvbXBsZXRpb25FdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIElEQkNsaWVudDo6
SURCUmVxdWVzdCYgcmVxdWVzdCkKK0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQ6OklEQlJlcXVl
c3RDb21wbGV0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJs
ZSwgYm9vbCBjYW5jZWxhYmxlLCBJREJSZXF1ZXN0JiByZXF1ZXN0KQogICAgIDogRXZlbnQodHlw
ZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKQogICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Q29t
cGxldGlvbkV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0Q29tcGxldGlvbkV2ZW50LmgKaW5kZXggMGQ0MGUyNC4uN2ZhOTk0MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdENvbXBsZXRpb25FdmVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3RDb21w
bGV0aW9uRXZlbnQuaApAQCAtMjksMjEgKzI5LDIxIEBACiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKICNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3RJbXBsLmgi
CisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQgOiBwdWJsaWMgRXZlbnQgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIElEQkNsaWVudDo6SURCUmVxdWVzdCYgcmVxdWVz
dCkKKyAgICBzdGF0aWMgUmVmPEV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
LCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBJREJSZXF1ZXN0JiByZXF1ZXN0KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCUmVxdWVzdENvbXBsZXRpb25F
dmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIHJlcXVlc3QpKTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgSURCUmVxdWVzdENvbXBsZXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIElEQkNsaWVudDo6SURCUmVx
dWVzdCYpOworICAgIElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBJREJSZXF1ZXN0Jik7CiAK
LSAgICBSZWY8SURCQ2xpZW50OjpJREJSZXF1ZXN0PiBtX3JlcXVlc3Q7CisgICAgUmVmPElEQlJl
cXVlc3Q+IG1fcmVxdWVzdDsKIH07CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDI1OWZiZjAuLmY1MGUzMTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5jcHAKQEAgLTI4LDE2ICsyOCwyOCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRE9NRXJyb3IuaCIKKyNp
bmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJJREJD
dXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRXJyb3IuaCIKKyNpbmNsdWRlICJJ
REJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJREJLZXlEYXRhLmgiCisjaW5jbHVkZSAi
SURCS2V5UmFuZ2VEYXRhLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRl
ICJJREJPcGVuREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUg
IklEQlJlc3VsdERhdGEuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIlRyYW5zYWN0aW9uT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBBY3RpdmVET01PYmpl
Y3QoY29udGV4dCkKLXsKLX0KLQogY29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6
bW9kZVJlYWRPbmx5KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5n
PiByZWFkb25seSgicmVhZG9ubHkiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKQEAgLTk3LDYgKzEwOSw4NTggQEAgY29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlv
bjo6bW9kZVRvU3RyaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUKICAgICByZXR1
cm4gSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkT25seSgpOwogfQogCitSZWY8SURCVHJhbnNhY3Rp
b24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBJ
REJUcmFuc2FjdGlvbkluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURC
VHJhbnNhY3Rpb24oZGF0YWJhc2UsIGluZm8sIG51bGxwdHIpKTsKK30KKworUmVmPElEQlRyYW5z
YWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKElEQkRhdGFiYXNlJiBkYXRhYmFzZSwgY29u
c3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvLCBJREJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlRyYW5zYWN0aW9uKGRhdGFiYXNlLCBpbmZv
LCAmcmVxdWVzdCkpOworfQorCitJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oSURCRGF0
YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8sIElEQk9wZW5E
QlJlcXVlc3QqIHJlcXVlc3QpCisgICAgOiBXZWJDb3JlOjpBY3RpdmVET01PYmplY3QoZGF0YWJh
c2Uuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkK
KyAgICAsIG1faW5mbyhpbmZvKQorICAgICwgbV9vcGVyYXRpb25UaW1lcigqdGhpcywgJklEQlRy
YW5zYWN0aW9uOjpvcGVyYXRpb25UaW1lckZpcmVkKQorICAgICwgbV9vcGVuREJSZXF1ZXN0KHJl
cXVlc3QpCisKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OklEQlRyYW5z
YWN0aW9uIC0gJXMiLCBtX2luZm8ubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CisKKyAgICBpZiAobV9pbmZvLm1vZGUoKSA9
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgeworICAgICAgICBB
U1NFUlQobV9vcGVuREJSZXF1ZXN0KTsKKyAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT5zZXRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24oKnRoaXMpOworICAgICAgICBtX3N0YXJ0ZWRPblNlcnZlciA9
IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYWN0aXZhdGUoKTsKKworICAgICAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IHNlbGY7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpOworICAgICAgICB2bS53aGVuSWRsZShbc2VsZiwgdGhpc10oKSB7
CisgICAgICAgICAgICBkZWFjdGl2YXRlKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGVzdGFi
bGlzaE9uU2VydmVyKCk7CisgICAgfQorCisgICAgc3VzcGVuZElmTmVlZGVkKCk7Cit9CisKK0lE
QlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rpb24oKQoreworfQorCitjb25zdCBTdHJpbmcmIElE
QlRyYW5zYWN0aW9uOjptb2RlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1faW5mby5tb2RlKCkp
IHsKKyAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seToKKyAgICAg
ICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uOjptb2RlUmVhZE9ubHkoKTsKKyAgICBjYXNlIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkV3JpdGU6CisgICAgICAgIHJldHVybiBJREJUcmFu
c2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgpOworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGU6OlZlcnNpb25DaGFuZ2U6CisgICAgICAgIHJldHVybiBJREJUcmFuc2FjdGlvbjo6bW9k
ZVZlcnNpb25DaGFuZ2UoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitXZWJDb3JlOjpJREJEYXRhYmFzZSogSURCVHJhbnNhY3Rpb246OmRiKCkKK3sK
KyAgICByZXR1cm4gJm1fZGF0YWJhc2UuZ2V0KCk7Cit9CisKK0lEQkNsaWVudDo6SURCQ29ubmVj
dGlvblRvU2VydmVyJiBJREJUcmFuc2FjdGlvbjo6c2VydmVyQ29ubmVjdGlvbigpCit7CisgICAg
cmV0dXJuIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKTsKK30KKworUmVmUHRyPERPTUVy
cm9yPiBJREJUcmFuc2FjdGlvbjo6ZXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2RvbUVy
cm9yOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9u
OjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlIik7CisKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkp
IHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ29iamVjdFN0b3JlJyBvbiAnSURCVHJhbnNhY3Rpb24nOiBUaGUgdHJhbnNhY3Rpb24gZmlu
aXNoZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuZmluZChvYmplY3RTdG9yZU5hbWUpOwor
ICAgIGlmIChpdGVyYXRvciAhPSBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuZW5kKCkpCisgICAg
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7CisKKyAgICBib29sIGZvdW5kID0gZmFsc2U7Cisg
ICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1faW5mby5vYmplY3RTdG9yZXMoKSkgeworICAg
ICAgICBpZiAob2JqZWN0U3RvcmUgPT0gb2JqZWN0U3RvcmVOYW1lKSB7CisgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGF1dG8qIGluZm8gPSBtX2RhdGFiYXNlLT5pbmZvKCkuaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmVOYW1lKTsKKyAgICBpZiAoIWluZm8pIHsKKyAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0U3RvcmUnIG9uICdJREJU
cmFuc2FjdGlvbic6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdhcyBub3QgZm91bmQuIik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIC8vIFZlcnNpb24gY2hhbmdl
IHRyYW5zYWN0aW9ucyBhcmUgc2NvcGVkIHRvIGV2ZXJ5IG9iamVjdCBzdG9yZSBpbiB0aGUgZGF0
YWJhc2UuCisgICAgaWYgKCFpbmZvIHx8ICghZm91bmQgJiYgIWlzVmVyc2lvbkNoYW5nZSgpKSkg
eworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7
CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdv
YmplY3RTdG9yZScgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHNwZWNpZmllZCBvYmplY3Qgc3Rv
cmUgd2FzIG5vdCBmb3VuZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgYXV0byBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgKmluZm8sICp0aGlzKTsKKyAgICBtX3JlZmVyZW5jZWRPYmplY3RTdG9y
ZXMuc2V0KG9iamVjdFN0b3JlTmFtZSwgJm9iamVjdFN0b3JlLmdldCgpKTsKKworICAgIHJldHVy
biBhZG9wdFJlZigmb2JqZWN0U3RvcmUubGVha1JlZigpKTsKK30KKworCit2b2lkIElEQlRyYW5z
YWN0aW9uOjphYm9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01FcnJvciYgZXJyb3IpCit7CisgICAg
TE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjphYm9ydER1ZVRvRmFpbGVkUmVxdWVzdCIp
OworICAgIGlmIChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9kb21FcnJvciA9ICZlcnJvcjsKKyAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7
CisgICAgYWJvcnQoZWMpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjp0cmFuc2l0aW9uZWRU
b0ZpbmlzaGluZyhJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgQVNT
RVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CisgICAgbV9zdGF0ZSA9IHN0YXRlOworICAg
IEFTU0VSVChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CisgICAgbV9yZWZlcmVuY2VkT2JqZWN0
U3RvcmVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmFib3J0KEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjphYm9ydCIpOworCisgICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Cisg
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhYm9y
dCcgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZp
bmlzaGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kYXRhYmFzZS0+d2ls
bEFib3J0VHJhbnNhY3Rpb24oKnRoaXMpOworCisgICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7
CisgICAgICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9y
ZXMudmFsdWVzKCkpCisgICAgICAgICAgICBvYmplY3RTdG9yZS0+cm9sbGJhY2tJbmZvRm9yVmVy
c2lvbkNoYW5nZUFib3J0KCk7CisgICAgfQorCisgICAgdHJhbnNpdGlvbmVkVG9GaW5pc2hpbmco
SW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBYm9ydGluZyk7CisgICAgCisgICAgbV9hYm9y
dFF1ZXVlLnN3YXAobV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlKTsKKworICAgIGF1dG8gb3Bl
cmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgbnVs
bHB0ciwgJklEQlRyYW5zYWN0aW9uOjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMpOwor
ICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Cit9CisKK3ZvaWQgSURC
VHJhbnNhY3Rpb246OmFib3J0T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0cyhJREJDbGllbnQ6OlRy
YW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMiKTsKKworICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuaXNFbXB0eSgpKTsKKworICAgIHNlcnZl
ckNvbm5lY3Rpb24oKS5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKKworICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uT3BlcmF0aW9uTWFwLmNvbnRhaW5zKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsK
KyAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnJlbW92ZShvcGVyYXRpb24uaWRlbnRpZmll
cigpKTsKKworICAgIElEQkVycm9yIGVycm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yKTsKKyAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1fYWJvcnRRdWV1ZSkKKyAgICAgICAg
b3BlcmF0aW9uLT5jb21wbGV0ZWQoSURCUmVzdWx0RGF0YTo6ZXJyb3Iob3BlcmF0aW9uLT5pZGVu
dGlmaWVyKCksIGVycm9yKSk7CisKKyAgICAvLyBTaW5jZSB3ZSdyZSBhYm9ydGluZywgaXQgc2hv
dWxkIGJlIGltcG9zc2libGUgdG8gaGF2ZSBxdWV1ZWQgYW55IGZ1cnRoZXIgb3BlcmF0aW9ucy4K
KyAgICBBU1NFUlQobV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlLmlzRW1wdHkoKSk7Cit9CisK
K2NvbnN0IGNoYXIqIElEQlRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIklEQlRyYW5zYWN0aW9uIjsKK30KKworYm9vbCBJREJUcmFuc2FjdGlv
bjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIElEQlRyYW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBj
b25zdAoreworICAgIHJldHVybiAhbV9jb250ZXh0U3RvcHBlZCAmJiBtX3N0YXRlICE9IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b246OnN0b3AoKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6c3RvcCIp
OworCisgICAgLy8gSURCRGF0YWJhc2U6OnN0b3AoKSBjYWxscyBJREJUcmFuc2FjdGlvbjo6c3Rv
cCgpIGZvciBlYWNoIG9mIGl0cyBhY3RpdmUgdHJhbnNhY3Rpb25zLgorICAgIC8vIFNpbmNlIHRo
ZSBvcmRlciBvZiBjYWxsaW5nIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpIGlzIHJhbmRvbSwgd2Ug
bWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gc3RvcHBlZC4KKyAgICBpZiAobV9jb250ZXh0U3RvcHBl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CisKKyAg
ICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKKyAgICBhYm9ydChlYyk7Cit9CisKK2Jvb2wgSURC
VHJhbnNhY3Rpb246OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2ZTsKK30KKworYm9vbCBJREJUcmFuc2Fj
dGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0
ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkNvbW1pdHRpbmcKKyAgICAgICAgfHwg
bV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFib3J0aW5nCisgICAgICAg
IHx8IG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsKK30K
Kwordm9pZCBJREJUcmFuc2FjdGlvbjo6YWRkUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQor
eworICAgIG1fb3BlblJlcXVlc3RzLmFkZCgmcmVxdWVzdCk7Cit9CisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb246OnJlbW92ZVJlcXVlc3QoSURCUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQo
bV9vcGVuUmVxdWVzdHMuY29udGFpbnMoJnJlcXVlc3QpKTsKKyAgICBtX29wZW5SZXF1ZXN0cy5y
ZW1vdmUoJnJlcXVlc3QpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJh
dGlvbihSZWZQdHI8SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4mJiBvcGVyYXRpb24p
Cit7CisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmNvbnRhaW5zKG9wZXJh
dGlvbi0+aWRlbnRpZmllcigpKSk7CisKKyAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUu
YXBwZW5kKG9wZXJhdGlvbik7CisgICAgbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5zZXQob3Bl
cmF0aW9uLT5pZGVudGlmaWVyKCksIFdURk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICBzY2hlZHVs
ZU9wZXJhdGlvblRpbWVyKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OnNjaGVkdWxlT3Bl
cmF0aW9uVGltZXIoKQoreworICAgIGlmICghbV9vcGVyYXRpb25UaW1lci5pc0FjdGl2ZSgpKQor
ICAgICAgICBtX29wZXJhdGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbjo6b3BlcmF0aW9uVGltZXJGaXJlZCgpCit7CisgICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25UaW1lckZpcmVkICglcCkiLCB0aGlzKTsKKworICAg
IGlmICghbV9zdGFydGVkT25TZXJ2ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV90
cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIG9wZXJh
dGlvbiA9IG1fdHJhbnNhY3Rpb25PcGVyYXRpb25RdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAg
b3BlcmF0aW9uLT5wZXJmb3JtKCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5pc0VtcHR5KCkgfHwgIW1fb3BlblJlcXVlc3Rz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpc0ZpbmlzaGVkT3JGaW5p
c2hpbmcoKSkKKyAgICAgICAgY29tbWl0KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmNv
bW1pdCgpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXQiKTsK
KworICAgIEFTU0VSVCghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpOworCisgICAgdHJhbnNpdGlv
bmVkVG9GaW5pc2hpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpDb21taXR0aW5nKTsK
KyAgICBtX2RhdGFiYXNlLT53aWxsQ29tbWl0VHJhbnNhY3Rpb24oKnRoaXMpOworCisgICAgYXV0
byBvcGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlz
LCBudWxscHRyLCAmSURCVHJhbnNhY3Rpb246OmNvbW1pdE9uU2VydmVyKTsKKyAgICBzY2hlZHVs
ZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
Ojpjb21taXRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRp
b24pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZl
ciIpOworICAgIHNlcnZlckNvbm5lY3Rpb24oKS5jb21taXRUcmFuc2FjdGlvbigqdGhpcyk7CisK
KyAgICBBU1NFUlQobV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5jb250YWlucyhvcGVyYXRpb24u
aWRlbnRpZmllcigpKSk7CisgICAgbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5yZW1vdmUob3Bl
cmF0aW9uLmlkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmZpbmlzaEFi
b3J0T3JDb21taXQoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25TdGF0ZTo6RmluaXNoZWQpOworICAgIG1fc3RhdGUgPSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uU3RhdGU6OkZpbmlzaGVkOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRTdGFydChj
b25zdCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpkaWRTdGFydCIpOworCisgICAgbV9kYXRhYmFzZS0+ZGlkU3RhcnRUcmFuc2FjdGlvbigq
dGhpcyk7CisKKyAgICBtX3N0YXJ0ZWRPblNlcnZlciA9IHRydWU7CisKKyAgICAvLyBJdCdzIHBv
c3NpYmxlIHRoZSB0cmFuc2FjdGlvbiBmYWlsZWQgdG8gc3RhcnQgb24gdGhlIHNlcnZlci4KKyAg
ICAvLyBUaGF0IGVxdWF0ZXMgdG8gYW4gYWJvcnQuCisgICAgaWYgKCFlcnJvci5pc051bGwoKSkg
eworICAgICAgICBkaWRBYm9ydChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om5v
dGlmeURpZEFib3J0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3sKKyAgICBtX2RhdGFiYXNlLT5k
aWRBYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKKyAgICBtX2lkYkVycm9yID0gZXJyb3I7CisgICAg
ZmlyZU9uQWJvcnQoKTsKKworICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAgICBB
U1NFUlQobV9vcGVuREJSZXF1ZXN0KTsKKyAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT5maXJlRXJy
b3JBZnRlclZlcnNpb25DaGFuZ2VDb21wbGV0aW9uKCk7CisgICAgfQorfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uOjpkaWRBYm9ydChjb25zdCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRBYm9ydCIpOworCisgICAgaWYgKG1fc3RhdGUg
PT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbm90aWZ5RGlkQWJvcnQoZXJyb3IpOworCisgICAgZmluaXNoQWJvcnRPckNvbW1p
dCgpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDb21taXQoY29uc3QgSURCRXJyb3Im
IGVycm9yKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkQ29tbWl0
Iik7CisKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6
OkNvbW1pdHRpbmcpOworCisgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgIG1fZGF0
YWJhc2UtPmRpZENvbW1pdFRyYW5zYWN0aW9uKCp0aGlzKTsKKyAgICAgICAgZmlyZU9uQ29tcGxl
dGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2RhdGFiYXNlLT53aWxsQWJvcnRUcmFuc2Fj
dGlvbigqdGhpcyk7CisgICAgICAgIG5vdGlmeURpZEFib3J0KGVycm9yKTsKKyAgICB9CisKKyAg
ICBmaW5pc2hBYm9ydE9yQ29tbWl0KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmZpcmVP
bkNvbXBsZXRlKCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmZpcmVP
bkNvbXBsZXRlIik7CisgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmNvbXBsZXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
OjpmaXJlT25BYm9ydCgpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpm
aXJlT25BYm9ydCIpOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxzZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpl
bnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQoreworICAgIEFTU0VSVChtX3N0YXRlICE9
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQpOworCisgICAgaWYgKCFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgfHwgbV9jb250ZXh0U3RvcHBlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOworfQorCiti
b29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKK3sKKyAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQiKTsKKworICAgIEFT
U0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIEFTU0VSVCghbV9jb250ZXh0U3Rv
cHBlZCk7CisgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOworICAgIEFTU0VSVChl
dmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKKworICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRU
YXJnZXQ+PiB0YXJnZXRzOworICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOworICAgIHRhcmdldHMu
YXBwZW5kKGRiKCkpOworCisgICAgYm9vbCByZXN1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsKKworICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgewor
ICAgICAgICBBU1NFUlQobV9vcGVuREJSZXF1ZXN0KTsKKyAgICAgICAgbV9vcGVuREJSZXF1ZXN0
LT52ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb25EaWRGaW5pc2goKTsKKworICAgICAgICBpZiAoZXZl
bnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50KSB7CisgICAgICAgICAgICBp
ZiAobV9kYXRhYmFzZS0+aXNDbG9zaW5nT3JDbG9zZWQoKSkKKyAgICAgICAgICAgICAgICBtX29w
ZW5EQlJlcXVlc3QtPmZpcmVFcnJvckFmdGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX29wZW5EQlJlcXVlc3QtPmZpcmVTdWNj
ZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tbWl0KCk7CisgICAgICAgIH0KKworICAgICAgICBtX29w
ZW5EQlJlcXVlc3QgPSBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1JlZjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgQVNTRVJUKGlzVmVyc2lvbkNo
YW5nZSgpKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIFJl
ZjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKCpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGluZm8sICp0aGlzKTsKKyAgICBtX3JlZmVyZW5jZWRP
YmplY3RTdG9yZXMuc2V0KGluZm8ubmFtZSgpLCAmb2JqZWN0U3RvcmUuZ2V0KCkpOworCisgICAg
YXV0byBvcGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0
aGlzLCAmSURCVHJhbnNhY3Rpb246OmRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIsICZJREJU
cmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlciwgaW5mbyk7CisgICAgc2NoZWR1
bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKKworICAgIHJldHVybiBvYmplY3RTdG9y
ZTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihJ
REJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYgaW5mbykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKKworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFu
Z2UoKSk7CisKKyAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0
U3RvcmUob3BlcmF0aW9uLCBpbmZvKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQ3Jl
YXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0U3Rv
cmVPblNlcnZlciIpOworCisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHREYXRhLCByZXN1bHREYXRh
LnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpDcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MgfHwgcmVz
dWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8SURCSW5kZXg+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleChJREJPYmplY3RTdG9y
ZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4Iik7CisgICAgQVNTRVJUKGlzVmVy
c2lvbkNoYW5nZSgpKTsKKworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50Ojpj
cmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgJklEQlRyYW5zYWN0aW9uOjpkaWRDcmVh
dGVJbmRleE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4T25TZXJ2ZXIsIGlu
Zm8pOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJREJJbmRleD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgaW5mbywgb2JqZWN0U3RvcmUpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJ
bmRleE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwg
Y29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlSW5kZXhPblNlcnZlciIpOworCisgICAgQVNTRVJUKGlzVmVyc2lvbkNo
YW5nZSgpKTsKKworICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5jcmVhdGVJbmRl
eChvcGVyYXRpb24sIGluZm8pOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVJ
bmRleE9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9H
KEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVJbmRleE9uU2VydmVyIik7CisK
KyAgICBpZiAocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6Q3JlYXRlSW5kZXhT
dWNjZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocmVzdWx0RGF0YS50eXBlKCkg
PT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpOworCisgICAgLy8gVGhpcyBvcGVyYXRpb24gbWlnaHQg
aGF2ZSBmYWlsZWQgYmVjYXVzZSB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBhYm9ydGluZy4K
KyAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFib3J0aW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdGhlcndpc2UsIGZhaWx1cmUgdG8gY3JlYXRl
IGFuIGluZGV4IGZvcmNlZCBhYm9ydGlvbiBvZiB0aGUgdHJhbnNhY3Rpb24uCisgICAgYWJvcnRE
dWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Z2V0RXJyb3JOYW1lKHJlc3VsdERhdGEuZXJyb3IoKS5jb2RlKCkpKSk7Cit9CisKK1JlZjxJREJS
ZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJD
dXJzb3JJbmZvJiBpbmZvKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
cmVxdWVzdE9wZW5DdXJzb3IiKTsKKworICAgIHJldHVybiBkb1JlcXVlc3RPcGVuQ3Vyc29yKGNv
bnRleHQsIElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKCp0aGlzLCBvYmplY3RTdG9yZSwgaW5m
bykpOworfQorCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29u
c3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yIik7CisKKyAgICBpZiAoaW5mby5jdXJzb3JUeXBlKCkg
PT0gSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5KQorICAgICAgICByZXR1cm4gZG9SZXF1
ZXN0T3BlbkN1cnNvcihjb250ZXh0LCBJREJDdXJzb3I6OmNyZWF0ZSgqdGhpcywgaW5kZXgsIGlu
Zm8pKTsKKworICAgIHJldHVybiBkb1JlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsIElEQkN1cnNv
cldpdGhWYWx1ZTo6Y3JlYXRlKCp0aGlzLCBpbmRleCwgaW5mbykpOworfQorCitSZWY8SURCUmVx
dWVzdD4gSURCVHJhbnNhY3Rpb246OmRvUmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCit7CisgICAgQVNTRVJU
KGlzQWN0aXZlKCkpOworCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgY3Vyc29yLmdldCgpLCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChy
ZXF1ZXN0LmdldCgpKTsKKworICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVU
cmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9u
OjpkaWRPcGVuQ3Vyc29yT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6b3BlbkN1cnNvck9uU2Vy
dmVyLCBjdXJzb3ItPmluZm8oKSk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVy
YXRpb24pKTsKKworICAgIHJldHVybiByZXF1ZXN0OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
OjpvcGVuQ3Vyc29yT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3Bl
cmF0aW9uLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQoreworICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6b3BlbkN1cnNvck9uU2VydmVyIik7CisKKyAgICBtX2RhdGFiYXNl
LT5zZXJ2ZXJDb25uZWN0aW9uKCkub3BlbkN1cnNvcihvcGVyYXRpb24sIGluZm8pOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRPcGVuQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhl
ZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZlciIpOworCisgICAgcmVx
dWVzdC5kaWRPcGVuT3JJdGVyYXRlQ3Vyc29yKHJlc3VsdERhdGEpOworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYgY3Vyc29yLCBjb25zdCBJREJLZXlE
YXRhJiBrZXksIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yIik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwor
ICAgIEFTU0VSVChjdXJzb3IucmVxdWVzdCgpKTsKKworICAgIGFkZFJlcXVlc3QoKmN1cnNvci5y
ZXF1ZXN0KCkpOworCisgICAgYXV0byBvcGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5z
YWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAqY3Vyc29yLnJlcXVlc3QoKSwgJklEQlRyYW5zYWN0aW9u
OjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNv
ck9uU2VydmVyLCBrZXksIGNvdW50KTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9w
ZXJhdGlvbikpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yT25TZXJ2
ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJL
ZXlEYXRhJiBrZXksIGNvbnN0IHVuc2lnbmVkIGxvbmcmIGNvdW50KQoreworICAgIExPRyhJbmRl
eGVkREIsICJJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2VydmVyIik7CisKKyAgICBz
ZXJ2ZXJDb25uZWN0aW9uKCkuaXRlcmF0ZUN1cnNvcihvcGVyYXRpb24sIGtleSwgY291bnQpOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoSURCUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlciIp
OworCisgICAgcmVxdWVzdC5kaWRPcGVuT3JJdGVyYXRlQ3Vyc29yKHJlc3VsdERhdGEpOworfQor
CitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQiKTsKKyAgICBBU1NFUlQoaXNBY3Rp
dmUoKSk7CisgICAgQVNTRVJUKCFrZXlSYW5nZURhdGEuaXNOdWxsKTsKKworICAgIFJlZjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3Jl
LCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKKworICAgIGF1dG8gb3Bl
cmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVx
dWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlciwgJklEQlRy
YW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlciwga2V5UmFuZ2VEYXRhKTsKKyAgICBzY2hlZHVs
ZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9
CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiByYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OnJlcXVlc3RHZXRWYWx1ZSIpOworICAgIHJldHVybiByZXF1ZXN0SW5kZXhSZWNvcmQoY29udGV4
dCwgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpWYWx1ZSwgcmFuZ2UpOworfQor
CitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRLZXkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIHJhbmdlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVx
dWVzdEdldFZhbHVlIik7CisgICAgcmV0dXJuIHJlcXVlc3RJbmRleFJlY29yZChjb250ZXh0LCBp
bmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGU6OktleSwgcmFuZ2UpOworfQorCitSZWY8
SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RJbmRleFJlY29yZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhS
ZWNvcmRUeXBlIHR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSZyYW5nZSkKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1ZSIpOworICAgIEFTU0VS
VChpc0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQoIXJhbmdlLmlzTnVsbCk7CisKKyAgICBSZWY8SURC
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZUdldChjb250ZXh0LCBpbmRleCwg
dHlwZSwgKnRoaXMpOworICAgIGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CisKKyAgICBhdXRv
IG9wZXJhdGlvbiA9IElEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMs
IHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIsICZJ
REJUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2ZXIsIHJhbmdlKTsKKyAgICBzY2hlZHVsZU9w
ZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNh
Y3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5n
ZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2Vy
dmVyIik7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0UmVjb3JkKG9wZXJhdGlvbiwga2V5
UmFuZ2UpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcihJ
REJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIi
KTsKKworICAgIGlmIChyZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcikg
eworICAgICAgICByZXF1ZXN0LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVz
dWx0VHlwZTo6R2V0UmVjb3JkU3VjY2Vzcyk7CisKKyAgICBjb25zdCBJREJHZXRSZXN1bHQmIHJl
c3VsdCA9IHJlc3VsdERhdGEuZ2V0UmVzdWx0KCk7CisKKyAgICBpZiAocmVxdWVzdC5zb3VyY2VJ
bmRleElkZW50aWZpZXIoKSAmJiByZXF1ZXN0LnJlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSgpID09
IEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpLZXkpIHsKKyAgICAgICAgaWYgKCFyZXN1bHQu
a2V5RGF0YSgpLmlzTnVsbCgpKQorICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXN1bHQoJnJlc3Vs
dC5rZXlEYXRhKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldFJlc3Vs
dFRvVW5kZWZpbmVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJlc3VsdERhdGEuZ2V0
UmVzdWx0KCkudmFsdWVCdWZmZXIoKS5kYXRhKCkpCisgICAgICAgICAgICByZXF1ZXN0LnNldFJl
c3VsdFRvU3RydWN0dXJlZENsb25lKHJlc3VsdERhdGEuZ2V0UmVzdWx0KCkudmFsdWVCdWZmZXIo
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmlu
ZWQoKTsKKyAgICB9CisKKyAgICByZXF1ZXN0LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7
Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudCAoSURCT2JqZWN0U3RvcmUpIik7CisgICAgQVNTRVJU
KGlzQWN0aXZlKCkpOworICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsKKworICAgIFJlZjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3Jl
LCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKKworICAgIHNjaGVkdWxl
T3BlcmF0aW9uKElEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJl
cXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlciwgJklEQlRy
YW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVyLCByYW5nZSkpOworCisgICAgcmV0dXJuIHJlcXVl
c3Q7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiByYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RDb3VudCAoSURCSW5kZXgpIik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwor
ICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlQ291bnQoY29udGV4dCwgaW5kZXgsICp0aGlzKTsKKyAgICBh
ZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOworCisgICAgc2NoZWR1bGVPcGVyYXRpb24oSURCQ2xp
ZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklE
QlRyYW5zYWN0aW9uOjpkaWRHZXRDb3VudE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldENv
dW50T25TZXJ2ZXIsIHJhbmdlKSk7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCBJ
REJUcmFuc2FjdGlvbjo6Z2V0Q291bnRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVyIik7CisK
KyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0Q291bnQob3BlcmF0aW9uLCBrZXlSYW5nZSk7Cit9
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIoSURCUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIiKTsKKworICAgIHJl
cXVlc3Quc2V0UmVzdWx0KHJlc3VsdERhdGEucmVzdWx0SW50ZWdlcigpKTsKKyAgICByZXF1ZXN0
LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdERlbGV0ZVJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYgcmFuZ2UpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
RGVsZXRlUmVjb3JkIik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVCghcmFu
Z2UuaXNOdWxsKTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChyZXF1
ZXN0LmdldCgpKTsKKworICAgIHNjaGVkdWxlT3BlcmF0aW9uKElEQkNsaWVudDo6Y3JlYXRlVHJh
bnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6
ZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25T
ZXJ2ZXIsIHJhbmdlKSk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb246OmRlbGV0ZVJlY29yZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRp
b24mIG9wZXJhdGlvbiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKK3sKKyAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZE9uU2VydmVyIik7CisK
KyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRlUmVjb3JkKG9wZXJhdGlvbiwga2V5UmFuZ2Up
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlcihJREJS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIi
KTsKKworICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKKyAgICByZXF1ZXN0LnJl
cXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFu
c2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlKQoreworICAgIExPRyhJbmRleGVk
REIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUiKTsKKyAgICBBU1NF
UlQoaXNBY3RpdmUoKSk7CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBvYmplY3RTdG9yZSwgKnRoaXMpOworICAgIGFkZFJlcXVlc3Qo
cmVxdWVzdC5nZXQoKSk7CisKKyAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIgPSBv
YmplY3RTdG9yZS5pbmZvKCkuaWRlbnRpZmllcigpOworICAgIGF1dG8gb3BlcmF0aW9uID0gSURC
Q2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwg
JklEQlRyYW5zYWN0aW9uOjpkaWRDbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIsICZJREJUcmFuc2Fj
dGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9uU2VydmVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwor
ICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICByZXR1cm4g
cmVxdWVzdDsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9uU2Vy
dmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgdWlu
dDY0X3QmIG9iamVjdFN0b3JlSWRlbnRpZmllcikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OmNsZWFyT2JqZWN0U3RvcmVPblNlcnZlciIpOworCisgICAgc2VydmVyQ29u
bmVjdGlvbigpLmNsZWFyT2JqZWN0U3RvcmUob3BlcmF0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDbGVhck9iamVjdFN0b3JlT25TZXJ2
ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZENsZWFyT2JqZWN0U3Rv
cmVPblNlcnZlciIpOworCisgICAgcmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOworICAg
IHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKK30KKworUmVmPElEQlJlcXVl
c3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBJREJLZXkqIGtleSwgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0
ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RQdXRPckFkZCIpOworICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKKyAgICBBU1NF
UlQoIWlzUmVhZE9ubHkoKSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZm8oKS5hdXRvSW5j
cmVtZW50KCkgfHwga2V5KTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CisgICAgYWRkUmVxdWVz
dChyZXF1ZXN0LmdldCgpKTsKKworICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVh
dGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0
aW9uOjpkaWRQdXRPckFkZE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2
ZXIsIGtleSwgJnZhbHVlLCBvdmVyd3JpdGVNb2RlKTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihX
VEZNb3ZlKG9wZXJhdGlvbikpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQgSURC
VHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJh
dGlvbiYgb3BlcmF0aW9uLCBSZWZQdHI8SURCS2V5PiBrZXksIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHZhbHVlLCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSYgb3ZlcndyaXRlTW9kZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OnB1dE9yQWRkT25TZXJ2ZXIiKTsKKworICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKKworICAg
IHNlcnZlckNvbm5lY3Rpb24oKS5wdXRPckFkZChvcGVyYXRpb24sIGtleSwgdmFsdWUsIG92ZXJ3
cml0ZU1vZGUpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVy
KElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVy
Iik7CisKKyAgICByZXF1ZXN0LnNldFJlc3VsdChyZXN1bHREYXRhLnJlc3VsdEtleSgpKTsKKyAg
ICByZXF1ZXN0LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7Cit9CisKK3ZvaWQgSURCVHJh
bnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3Rv
cmUiKTsKKworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisKKyAgICBpZiAoYXV0byBv
YmplY3RTdG9yZSA9IG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy50YWtlKG9iamVjdFN0b3JlTmFt
ZSkpCisgICAgICAgIG9iamVjdFN0b3JlLT5tYXJrQXNEZWxldGVkKCk7CisKKyAgICBhdXRvIG9w
ZXJhdGlvbiA9IElEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICZJ
REJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlciwgJklEQlRyYW5zYWN0
aW9uOjpkZWxldGVPYmplY3RTdG9yZU9uU2VydmVyLCBvYmplY3RTdG9yZU5hbWUpOworICAgIHNj
aGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2
ZXIiKTsKKyAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgc2VydmVyQ29ubmVj
dGlvbigpLmRlbGV0ZU9iamVjdFN0b3JlKG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVOYW1lKTsKK30K
Kwordm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25z
dCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJU
cmFuc2FjdGlvbjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlciIpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzdWx0RGF0YSwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RGVs
ZXRlT2JqZWN0U3RvcmVTdWNjZXNzIHx8IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5
cGU6OkVycm9yKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgodWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4Iik7CisKKyAgICBB
U1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgYXV0byBvcGVyYXRpb24gPSBJREJDbGll
bnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAmSURCVHJhbnNhY3Rpb246OmRp
ZERlbGV0ZUluZGV4T25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZl
ciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOworICAgIHNjaGVkdWxlT3BlcmF0
aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0
ZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9u
LCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZUlu
ZGV4T25TZXJ2ZXIiKTsKKyAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgc2Vy
dmVyQ29ubmVjdGlvbigpLmRlbGV0ZUluZGV4KG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCBpbmRleE5hbWUpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRl
eE9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyIik7CisgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHREYXRhLCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRU
eXBlOjpEZWxldGVJbmRleFN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0
VHlwZTo6RXJyb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25EaWRDb21w
bGV0ZShJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCit7CisgICAg
QVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuZ2V0KG9wZXJhdGlvbi5pZGVudGlmaWVy
KCkpID09ICZvcGVyYXRpb24pOworICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAucmVtb3Zl
KG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpOworCisgICAgc2NoZWR1bGVPcGVyYXRpb25UaW1lcigp
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjplc3RhYmxpc2hPblNlcnZlcigpCit7CisgICAg
TE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjplc3RhYmxpc2hPblNlcnZlciIpOworCisg
ICAgc2VydmVyQ29ubmVjdGlvbigpLmVzdGFibGlzaFRyYW5zYWN0aW9uKCp0aGlzKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbjo6YWN0aXZhdGUoKQoreworICAgIGlmIChpc0ZpbmlzaGVkT3JG
aW5pc2hpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6QWN0aXZlOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkZWFj
dGl2YXRlKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3Rh
dGU6OkFjdGl2ZSkKKyAgICAgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0
ZTo6SW5hY3RpdmU7CisKKyAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgK
aW5kZXggOWU5YTBlOC4uZTIyMzEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCkBAIC0yMywzMyArMjMsNDEgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9u
X2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25faAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VJbmZvLmgiCisjaW5jbHVk
ZSAiSURCRXJyb3IuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbkluZm8uaCIKICNpbmNsdWRlICJJbmRleGVkREIuaCIKLSNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERP
TUVycm9yOwogY2xhc3MgSURCQ3Vyc29yOworY2xhc3MgSURCQ3Vyc29ySW5mbzsKIGNsYXNzIElE
QkRhdGFiYXNlOwotY2xhc3MgSURCRGF0YWJhc2VFcnJvcjsKK2NsYXNzIElEQkluZGV4OworY2xh
c3MgSURCSW5kZXhJbmZvOworY2xhc3MgSURCS2V5RGF0YTsKIGNsYXNzIElEQk9iamVjdFN0b3Jl
OworY2xhc3MgSURCT2JqZWN0U3RvcmVJbmZvOwogY2xhc3MgSURCT3BlbkRCUmVxdWVzdDsKK2Ns
YXNzIElEQlJlc3VsdERhdGE7CitzdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhOwogCi1zdHJ1Y3QgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlOworbmFtZXNwYWNlIElEQkNsaWVudCB7CitjbGFzcyBUcmFu
c2FjdGlvbk9wZXJhdGlvbjsKK30KIAogY2xhc3MgSURCVHJhbnNhY3Rpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxJREJUcmFuc2FjdGlvbj4sIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRh
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJUcmFu
c2FjdGlvbigpIHsgfQotCiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZVJlYWRP
bmx5KCk7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZVJlYWRXcml0ZSgpOwog
ICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG1vZGVWZXJzaW9uQ2hhbmdlKCk7CkBAIC01
OSwyMiArNjcsMTg0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUgc3RyaW5nVG9Nb2RlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2RlVG9TdHJpbmcoSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGUpOwogCi0gICAgLy8gSW1wbGVtZW50IHRoZSBJREJUcmFuc2FjdGlvbiBJREwKLSAg
ICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIElE
QkRhdGFiYXNlKiBkYigpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxET01FcnJvcj4gZXJyb3Io
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBhYm9ydChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Cisg
ICAgc3RhdGljIFJlZjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKElEQkRhdGFiYXNlJiwgY29uc3Qg
SURCVHJhbnNhY3Rpb25JbmZvJik7CisgICAgc3RhdGljIFJlZjxJREJUcmFuc2FjdGlvbj4gY3Jl
YXRlKElEQkRhdGFiYXNlJiwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiwgSURCT3BlbkRCUmVx
dWVzdCYpOworCisgICAgfklEQlRyYW5zYWN0aW9uKCkgZmluYWw7CisKKyAgICAvLyBJREJUcmFu
c2FjdGlvbiBJREwKKyAgICBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25zdDsKKyAgICBXZWJDb3Jl
OjpJREJEYXRhYmFzZSogZGIoKTsKKyAgICBSZWZQdHI8RE9NRXJyb3I+IGVycm9yKCkgY29uc3Q7
CisgICAgUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIHZvaWQgYWJvcnQo
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisKKyAgICBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIElEQlRyYW5zYWN0aW9u
RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9i
amVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CisgICAgdm9pZCByZWZFdmVudFRhcmdl
dCgpIGZpbmFsIHsgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbj46OnJlZigpOyB9CisgICAgdm9p
ZCBkZXJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPjo6
ZGVyZWYoKTsgfQorICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OworICAgIGJv
b2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIGZpbmFsOwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxJ
REJUcmFuc2FjdGlvbj46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9u
Pjo6ZGVyZWY7CiAKLXByb3RlY3RlZDoKLSAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0Kik7CisgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBzdG9wKCkgZmluYWw7CisKKyAgICBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8o
KSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKyAgICBJREJEYXRhYmFzZSYgZGF0YWJhc2UoKSB7
IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CisgICAgY29uc3QgSURCRGF0YWJhc2UmIGRhdGFi
YXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQorICAgIElEQkRhdGFiYXNl
SW5mbyogb3JpZ2luYWxEYXRhYmFzZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm8ub3JpZ2lu
YWxEYXRhYmFzZUluZm8oKTsgfQorCisgICAgdm9pZCBkaWRTdGFydChjb25zdCBJREJFcnJvciYp
OworICAgIHZvaWQgZGlkQWJvcnQoY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRpZENvbW1p
dChjb25zdCBJREJFcnJvciYpOworCisgICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX2luZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJz
aW9uQ2hhbmdlOyB9CisgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9pbmZv
Lm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHk7IH0KKyAgICBi
b29sIGlzQWN0aXZlKCkgY29uc3Q7CisKKyAgICBSZWY8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJJbmRleElu
Zm8mKTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgSURCS2V5KiwgU2VyaWFsaXplZFNjcmlwdFZh
bHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIFJlZjxJREJS
ZXF1ZXN0PiByZXF1ZXN0R2V0UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmpl
Y3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0RGVsZXRlUmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9y
ZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0
Q2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUm
KTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdENvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIFJlZjxJ
REJSZXF1ZXN0PiByZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4
JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RH
ZXRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEdldEtleShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICBS
ZWY8SURCUmVxdWVzdD4gcmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOworICAgIFJlZjxJREJSZXF1
ZXN0PiByZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgm
LCBjb25zdCBJREJDdXJzb3JJbmZvJik7CisgICAgdm9pZCBpdGVyYXRlQ3Vyc29yKElEQkN1cnNv
ciYsIGNvbnN0IElEQktleURhdGEmLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKworICAgIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpOworICAgIHZv
aWQgZGVsZXRlSW5kZXgodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGluZGV4TmFtZSk7CisKKyAgICB2b2lkIGFkZFJlcXVlc3QoSURCUmVxdWVzdCYpOworICAg
IHZvaWQgcmVtb3ZlUmVxdWVzdChJREJSZXF1ZXN0Jik7CisKKyAgICB2b2lkIGFib3J0RHVlVG9G
YWlsZWRSZXF1ZXN0KERPTUVycm9yJik7CisKKyAgICBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25U
b1NlcnZlciYgc2VydmVyQ29ubmVjdGlvbigpOworCisgICAgdm9pZCBhY3RpdmF0ZSgpOworICAg
IHZvaWQgZGVhY3RpdmF0ZSgpOworCisgICAgdm9pZCBvcGVyYXRpb25EaWRDb21wbGV0ZShJREJD
bGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJik7CisKKyAgICBib29sIGlzRmluaXNoZWRPckZp
bmlzaGluZygpIGNvbnN0OworICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsgfQorCitwcml2
YXRlOgorICAgIElEQlRyYW5zYWN0aW9uKElEQkRhdGFiYXNlJiwgY29uc3QgSURCVHJhbnNhY3Rp
b25JbmZvJiwgSURCT3BlbkRCUmVxdWVzdCopOworCisgICAgdm9pZCBjb21taXQoKTsKKworICAg
IHZvaWQgbm90aWZ5RGlkQWJvcnQoY29uc3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGZpbmlzaEFi
b3J0T3JDb21taXQoKTsKKworICAgIHZvaWQgc2NoZWR1bGVPcGVyYXRpb24oUmVmUHRyPElEQkNs
aWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24+JiYpOworICAgIHZvaWQgb3BlcmF0aW9uVGltZXJG
aXJlZCgpOworCisgICAgdm9pZCBmaXJlT25Db21wbGV0ZSgpOworICAgIHZvaWQgZmlyZU9uQWJv
cnQoKTsKKyAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOworCisgICAgUmVmPElE
QlJlcXVlc3Q+IHJlcXVlc3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURC
SW5kZXgmLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
Jik7CisKKyAgICB2b2lkIGNvbW1pdE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVy
YXRpb24mKTsKKyAgICB2b2lkIGFib3J0T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0cyhJREJDbGll
bnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJik7CisKKyAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3Jl
T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYpOworICAgIHZvaWQgZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25z
dCBJREJSZXN1bHREYXRhJik7CisKKyAgICB2b2lkIGNyZWF0ZUluZGV4T25TZXJ2ZXIoSURCQ2xp
ZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQkluZGV4SW5mbyYpOworICAgIHZv
aWQgZGlkQ3JlYXRlSW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICB2
b2lkIGNsZWFyT2JqZWN0U3RvcmVPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uJiwgY29uc3QgdWludDY0X3QmIG9iamVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgdm9pZCBk
aWRDbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJlc3VsdERh
dGEmKTsKKworICAgIHZvaWQgcHV0T3JBZGRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9u
T3BlcmF0aW9uJiwgUmVmUHRyPElEQktleT4sIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
LCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSYpOworICAgIHZvaWQg
ZGlkUHV0T3JBZGRPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwor
CisgICAgdm9pZCBnZXRSZWNvcmRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBkaWRHZXRSZWNvcmRPblNl
cnZlcihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgdm9pZCBnZXRD
b3VudE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmKTsKKyAgICB2b2lkIGRpZEdldENvdW50T25TZXJ2ZXIoSURCUmVxdWVzdCYs
IGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgZGVsZXRlUmVjb3JkT25TZXJ2ZXIo
SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYp
OworICAgIHZvaWQgZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElE
QlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihJREJD
bGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUpOworICAgIHZvaWQgZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1
bHREYXRhJik7CisKKyAgICB2b2lkIGRlbGV0ZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFu
c2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4T25TZXJ2
ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgUmVmPElEQlJlcXVlc3Q+IGRvUmVxdWVz
dE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZjxJREJDdXJzb3I+JiYpOwor
ICAgIHZvaWQgb3BlbkN1cnNvck9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRp
b24mLCBjb25zdCBJREJDdXJzb3JJbmZvJik7CisgICAgdm9pZCBkaWRPcGVuQ3Vyc29yT25TZXJ2
ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgaXRlcmF0
ZUN1cnNvck9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJ
REJLZXlEYXRhJiwgY29uc3QgdW5zaWduZWQgbG9uZyYgY291bnQpOworICAgIHZvaWQgZGlkSXRl
cmF0ZUN1cnNvck9uU2VydmVyKElEQlJlcXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRhJik7CisK
KyAgICB2b2lkIHRyYW5zaXRpb25lZFRvRmluaXNoaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZSk7CisKKyAgICB2b2lkIGVzdGFibGlzaE9uU2VydmVyKCk7CisKKyAgICB2b2lkIHNjaGVk
dWxlT3BlcmF0aW9uVGltZXIoKTsKKworICAgIFJlZjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsK
KyAgICBJREJUcmFuc2FjdGlvbkluZm8gbV9pbmZvOworCisgICAgSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblN0YXRlIG1fc3RhdGUgeyBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkluYWN0aXZl
IH07CisgICAgYm9vbCBtX3N0YXJ0ZWRPblNlcnZlciB7IGZhbHNlIH07CisKKyAgICBJREJFcnJv
ciBtX2lkYkVycm9yOworICAgIFJlZlB0cjxET01FcnJvcj4gbV9kb21FcnJvcjsKKworICAgIFRp
bWVyIG1fb3BlcmF0aW9uVGltZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVyPiBtX2FjdGl2
YXRpb25UaW1lcjsKKworICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBtX29wZW5EQlJlcXVl
c3Q7CisKKyAgICBEZXF1ZTxSZWZQdHI8SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4+
IG1fdHJhbnNhY3Rpb25PcGVyYXRpb25RdWV1ZTsKKyAgICBEZXF1ZTxSZWZQdHI8SURCQ2xpZW50
OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4+IG1fYWJvcnRRdWV1ZTsKKyAgICBIYXNoTWFwPElEQlJl
c291cmNlSWRlbnRpZmllciwgUmVmUHRyPElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24+
PiBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxJREJPYmplY3RTdG9yZT4+IG1fcmVmZXJlbmNlZE9iamVjdFN0b3JlczsKKworICAgIEhhc2hT
ZXQ8UmVmUHRyPElEQlJlcXVlc3Q+PiBtX29wZW5SZXF1ZXN0czsKKworICAgIGJvb2wgbV9jb250
ZXh0U3RvcHBlZCB7IGZhbHNlIH07Cit9OworCitjbGFzcyBUcmFuc2FjdGlvbkFjdGl2YXRvciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVHJhbnNhY3Rpb25BY3RpdmF0b3IpOworcHVibGlj
OgorICAgIFRyYW5zYWN0aW9uQWN0aXZhdG9yKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
KyAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KG1fdHJhbnNhY3Rpb24pCisgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5hY3RpdmF0ZSgpOwor
ICAgIH0KKworICAgIH5UcmFuc2FjdGlvbkFjdGl2YXRvcigpCisgICAgeworICAgICAgICBpZiAo
bV90cmFuc2FjdGlvbikKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRlYWN0aXZhdGUoKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgSURCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3Bw
CmluZGV4IGZlNmI1NmUuLjMzZjA4NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcApAQCAtMjgsMjEg
KzI4LDI2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmgiCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJzaW9uQ2hh
bmdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQorSURCVmVyc2lvbkNoYW5nZUV2ZW50
OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1
ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogICAgIDogRXZlbnQobmFtZSwgZmFsc2UgLypjYW5C
dWJibGUqLywgZmFsc2UgLypjYW5jZWxhYmxlKi8pCisgICAgLCBtX3JlcXVlc3RJZGVudGlmaWVy
KHJlcXVlc3RJZGVudGlmaWVyKQorICAgICwgbV9vbGRWZXJzaW9uKG9sZFZlcnNpb24pCisgICAg
LCBtX25ld1ZlcnNpb24obmV3VmVyc2lvbikKK3sKK30KKworT3B0aW9uYWw8dWludDY0X3Q+IElE
QlZlcnNpb25DaGFuZ2VFdmVudDo6bmV3VmVyc2lvbigpIGNvbnN0CiB7CisgICAgaWYgKCFtX25l
d1ZlcnNpb24pCisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIHJldHVybiBtX25ld1ZlcnNp
b247CiB9CiAKLVJlZjxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+IElEQlZlcnNpb25DaGFuZ2VFdmVu
dDo6Y3JlYXRlKCkKK0V2ZW50SW50ZXJmYWNlIElEQlZlcnNpb25DaGFuZ2VFdmVudDo6ZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGNhbGxlZCBvbmx5IGJ5
IGRvY3VtZW50LmNyZWF0ZUV2ZW50LiBJIGRvbid0IHNlZSBob3cgaXQncyB2YWx1YWJsZSB0byBj
cmVhdGUgYW4gZXZlbnQgd2l0aAotICAgIC8vIHJlYWQtb25seSBvbGRWZXJzaW9uIGF0dHJpYnV0
ZSBvZiAwIGFuZCBuZXdWZXJzaW9uIG9mIG51bGw7IHByZXNlcnZpbmcgdGhhdCBiZWhhdmlvciBm
b3Igbm93LgotICAgIHJldHVybiBJREJDbGllbnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3Jl
YXRlKDAsIDAsIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpOworICAgIHJldHVybiBJ
REJWZXJzaW9uQ2hhbmdlRXZlbnRJbnRlcmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJW
ZXJzaW9uQ2hhbmdlRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlZlcnNpb25DaGFuZ2VFdmVudC5oCmluZGV4IDVkMTQ5M2MuLjYzYzU3MmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VF
dmVudC5oCkBAIC0yMywyOSArMjMsNDkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIElEQlZlcnNpb25DaGFuZ2VFdmVudF9oCi0jZGVmaW5lIElE
QlZlcnNpb25DaGFuZ2VFdmVudF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJJREJSZXNvdXJjZUlk
ZW50aWZpZXIuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgeworY2xh
c3MgSURCVmVyc2lvbkNoYW5nZUV2ZW50IGZpbmFsIDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKCk7CisgICAgc3Rh
dGljIFJlZjxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+IGNyZWF0ZSh1aW50NjRfdCBvbGRWZXJzaW9u
LCB1aW50NjRfdCBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlZlcnNpb25DaGFuZ2VFdmVudChJ
REJSZXNvdXJjZUlkZW50aWZpZXI6OmVtcHR5VmFsdWUoKSwgb2xkVmVyc2lvbiwgbmV3VmVyc2lv
biwgZXZlbnRUeXBlKSk7CisgICAgfQogCi0gICAgdmlydHVhbCB1aW50NjRfdCBvbGRWZXJzaW9u
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgT3B0aW9uYWw8dWludDY0X3Q+IG5ld1ZlcnNpb24o
KSBjb25zdCA9IDA7CisgICAgc3RhdGljIFJlZjxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+IGNyZWF0
ZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRf
dCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlZlcnNpb25D
aGFuZ2VFdmVudChyZXF1ZXN0SWRlbnRpZmllciwgb2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZl
bnRUeXBlKSk7CisgICAgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgSURCVmVyc2lvbkNo
YW5nZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CisgICAgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVz
dElkZW50aWZpZXI7IH0KKworICAgIGJvb2wgaXNWZXJzaW9uQ2hhbmdlRXZlbnQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB1aW50NjRfdCBvbGRWZXJzaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9vbGRWZXJzaW9uOyB9CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IG5ld1ZlcnNp
b24oKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJREJWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVy
c2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUp
OworCisgICAgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKKworICAgIElE
QlJlc291cmNlSWRlbnRpZmllciBtX3JlcXVlc3RJZGVudGlmaWVyOworICAgIHVpbnQ2NF90IG1f
b2xkVmVyc2lvbjsKKyAgICB1aW50NjRfdCBtX25ld1ZlcnNpb247CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KQor
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpFdmVudCYgZXZlbnQpIHsgcmV0
dXJuIGV2ZW50LmlzVmVyc2lvbkNoYW5nZUV2ZW50KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKIAotI2VuZGlmIC8vIElEQlZlcnNpb25DaGFuZ2VFdmVudF9oCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDg2ZGUwMTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCQW55
SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJB
bnkuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JJbXBsLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeS5o
IgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFj
ZSBJREJDbGllbnQgewotCi1JREJBbnk6OklEQkFueShJREJBbnk6OlR5cGUgdHlwZSkKLSAgICA6
IG1fdHlwZSh0eXBlKQotewotfQotCi1JREJBbnk6OklEQkFueShSZWY8SURCRGF0YWJhc2U+JiYg
ZGF0YWJhc2UpCi0gICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSkKLSAgICAs
IG1fZGF0YWJhc2UoYWRvcHRSZWYoJmRhdGFiYXNlLmxlYWtSZWYoKSkpCi17Ci19Ci0KLUlEQkFu
eTo6SURCQW55KFJlZjxJREJPYmplY3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKLSAgICA6IG1fdHlw
ZShJREJBbnk6OlR5cGU6OklEQk9iamVjdFN0b3JlKQotICAgICwgbV9vYmplY3RTdG9yZShXVEZN
b3ZlKG9iamVjdFN0b3JlKSkKLXsKLX0KLQotSURCQW55OjpJREJBbnkoUmVmPElEQkluZGV4PiYm
IGluZGV4KQotICAgIDogbV90eXBlKElEQkFueTo6VHlwZTo6SURCSW5kZXgpCi0gICAgLCBtX2lu
ZGV4KFdURk1vdmUoaW5kZXgpKQotewotfQotCi1JREJBbnk6OklEQkFueShSZWY8SURCQ3Vyc29y
PiYmIGN1cnNvcikKLXsKLSAgICBpZiAoY3Vyc29yLT5pc0tleUN1cnNvcigpKSB7Ci0gICAgICAg
IG1fdHlwZSA9IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yOwotICAgICAgICBtX2N1cnNvciA9IFdU
Rk1vdmUoY3Vyc29yKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3R5cGUgPSBJREJBbnk6OlR5
cGU6OklEQkN1cnNvcldpdGhWYWx1ZTsKLSAgICAgICAgbV9jdXJzb3JXaXRoVmFsdWUgPSBXVEZN
b3ZlKGN1cnNvcik7Ci0gICAgfQotfQotCi1JREJBbnk6OklEQkFueShjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoKQotICAgIDogbV90eXBlKElEQkFueTo6VHlwZTo6S2V5UGF0aCkKLSAgICAsIG1f
aWRiS2V5UGF0aChrZXlQYXRoKQotewotfQotCi1JREJBbnk6OklEQkFueShjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUpCi0gICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpTY3Jp
cHRWYWx1ZSkKLSAgICAsIG1fc2NyaXB0VmFsdWUodmFsdWUpCi17Ci19Ci0KLUlEQkFueTo6fklE
QkFueSgpCi17Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZT4gSURCQW55OjppZGJE
YXRhYmFzZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFi
YXNlKTsKLSAgICByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6
OkRPTVN0cmluZ0xpc3Q+IElEQkFueTo6ZG9tU3RyaW5nTGlzdCgpCi17Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJDdXJzb3I+IElEQkFueTo6aWRiQ3Vyc29y
KCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yIHx8IG1f
dHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSk7Ci0gICAgcmV0dXJuIG1f
Y3Vyc29yLmdldCgpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCQ3Vyc29yV2l0aFZhbHVlPiBJ
REJBbnk6OmlkYkN1cnNvcldpdGhWYWx1ZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJB
bnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSk7Ci0gICAgcmV0dXJuIG1fY3Vyc29yV2l0aFZh
bHVlLmdldCgpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCRmFjdG9yeT4gSURCQW55OjppZGJG
YWN0b3J5KCkKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklE
QkluZGV4PiBJREJBbnk6OmlkYkluZGV4KCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkFu
eTo6VHlwZTo6SURCSW5kZXgpOwotICAgIHJldHVybiBtX2luZGV4LmdldCgpOwotfQotCi1SZWZQ
dHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IElEQkFueTo6aWRiT2JqZWN0U3RvcmUoKQotewot
ICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSk7Ci0gICAg
cmV0dXJuIG1fb2JqZWN0U3RvcmUuZ2V0KCk7Ci19Ci0KLUlEQk9iamVjdFN0b3JlKiBJREJBbnk6
Om1vZGVybklEQk9iamVjdFN0b3JlKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6
VHlwZTo6SURCT2JqZWN0U3RvcmUpOwotICAgIHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOwot
fQotCi1JREJJbmRleCogSURCQW55Ojptb2Rlcm5JREJJbmRleCgpCi17Ci0gICAgQVNTRVJUKG1f
dHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkluZGV4KTsKLSAgICByZXR1cm4gbV9pbmRleC5nZXQo
KTsKLX0KLQotSURCQ3Vyc29yKiBJREJBbnk6Om1vZGVybklEQkN1cnNvcigpCi17Ci0gICAgQVNT
RVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvciB8fCBtX3R5cGUgPT0gSURCQW55
OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpOwotICAgIGlmIChtX3R5cGUgPT0gSURCQW55OjpU
eXBlOjpJREJDdXJzb3IpCi0gICAgICAgIHJldHVybiBtX2N1cnNvci5nZXQoKTsKLSAgICByZXR1
cm4gbV9jdXJzb3JXaXRoVmFsdWUuZ2V0KCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbj4gSURCQW55OjppZGJUcmFuc2FjdGlvbigpCi17Ci0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJBbnk6OnNjcmlwdFZhbHVl
KCkKLXsKLSAgICByZXR1cm4gbV9zY3JpcHRWYWx1ZTsKLX0KLQotaW50NjRfdCBJREJBbnk6Omlu
dGVnZXIoKQotewotICAgIHJldHVybiBtX2ludGVnZXI7Ci19Ci0KLWNvbnN0IFN0cmluZyYgSURC
QW55OjpzdHJpbmcoKQotewotICAgIHJldHVybiBtX3N0cmluZzsKLX0KLQotY29uc3QgSURCS2V5
UGF0aCYgSURCQW55OjprZXlQYXRoKCkKLXsKLSAgICByZXR1cm4gbV9pZGJLZXlQYXRoOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNlYzM5ZGIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJBbnlJbXBsX2gKLSNkZWZpbmUgSURCQW55
SW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkFu
eS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlSW1wbC5oIgotI2luY2x1ZGUgIklEQkluZGV4SW1w
bC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotY2xhc3MgSURCQW55IDogcHVibGljIFdlYkNv
cmU6OklEQkFueSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShS
ZWY8SURCRGF0YWJhc2U+JiYgZGF0YWJhc2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQkFueShXVEZNb3ZlKGRhdGFiYXNlKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBS
ZWY8SURCQW55PiBjcmVhdGUoUmVmPElEQk9iamVjdFN0b3JlPiYmIG9iamVjdFN0b3JlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQW55KFdURk1vdmUob2JqZWN0U3Rv
cmUpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxJREJBbnk+IGNyZWF0ZShSZWY8SURCSW5k
ZXg+JiYgaW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJBbnko
V1RGTW92ZShpbmRleCkpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3Jl
YXRlKFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJREJBbnkoV1RGTW92ZShjdXJzb3IpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJl
ZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoa2V5UGF0aCkpOwotICAgIH0KLQotICAg
IHN0YXRpYyBSZWZQdHI8SURCQW55PiBjcmVhdGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkodmFs
dWUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3JlYXRlVW5kZWZpbmVk
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KElEQkFueTo6VHlw
ZTo6VW5kZWZpbmVkKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+SURCQW55KCk7Ci0KLSAgICBU
eXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBSZWZQdHI8V2Vi
Q29yZTo6RE9NU3RyaW5nTGlzdD4gZG9tU3RyaW5nTGlzdCgpIGZpbmFsOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpJREJDdXJzb3I+IGlkYkN1cnNvcigpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3Jl
OjpJREJDdXJzb3JXaXRoVmFsdWU+IGlkYkN1cnNvcldpdGhWYWx1ZSgpIGZpbmFsOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZT4gaWRiRGF0YWJhc2UoKSBmaW5hbDsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgpIGZpbmFsOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpJREJJbmRleD4gaWRiSW5kZXgoKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCkgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbigpIGZpbmFsOwotICAgIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSgpIGZpbmFsOwotICAgIGludDY0X3Qg
aW50ZWdlcigpIGZpbmFsOwotICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgZmluYWw7Ci0gICAg
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIGZpbmFsOwotCi0gICAgSURCT2JqZWN0U3RvcmUq
IG1vZGVybklEQk9iamVjdFN0b3JlKCk7Ci0gICAgSURCSW5kZXgqIG1vZGVybklEQkluZGV4KCk7
Ci0gICAgSURCQ3Vyc29yKiBtb2Rlcm5JREJDdXJzb3IoKTsKLQotcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBJREJBbnkoSURCQW55OjpUeXBlKTsKLSAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQkRh
dGFiYXNlPiYmKTsKLSAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQk9iamVjdFN0b3JlPiYmKTsK
LSAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQkluZGV4PiYmKTsKLSAgICBleHBsaWNpdCBJREJB
bnkoUmVmPElEQkN1cnNvcj4mJik7Ci0gICAgZXhwbGljaXQgSURCQW55KGNvbnN0IElEQktleVBh
dGgmKTsKLSAgICBleHBsaWNpdCBJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
KTsKLQotICAgIElEQkFueTo6VHlwZSBtX3R5cGUgeyBJREJBbnk6OlR5cGU6OlVuZGVmaW5lZCB9
OwotICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQkluZGV4PiBtX2luZGV4Owot
ICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fY3Vyc29yOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1f
Y3Vyc29yV2l0aFZhbHVlOwotCi0gICAgY29uc3QgSURCS2V5UGF0aCBtX2lkYktleVBhdGg7Ci0g
ICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9zY3JpcHRWYWx1ZTsKLSAgICBjb25z
dCBTdHJpbmcgbV9zdHJpbmc7Ci0gICAgY29uc3QgaW50NjRfdCBtX2ludGVnZXIgeyAwIH07Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQkFueUltcGxf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAppbmRleCBkZDU4NTlkLi41YmNlZDNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
Q29ubmVjdGlvblRvU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcApAQCAtMjgsOCArMjgsOSBAQAog
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5o
IgogI2luY2x1ZGUgIklEQktleVJhbmdlRGF0YS5oIgotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVl
c3RJbXBsLmgiCisjaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklEQlJl
cXVlc3REYXRhLmgiCiAjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAppbmRleCA5MjI5YmQ1Li4yMTYwOGJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
Q29ubmVjdGlvblRvU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oCkBAIC0zOSwxNSArMzksMTUgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCQ3Vyc29ySW5mbzsKK2NsYXNzIElEQkRhdGFi
YXNlOwogY2xhc3MgSURCRXJyb3I7CiBjbGFzcyBJREJPYmplY3RTdG9yZUluZm87CitjbGFzcyBJ
REJPcGVuREJSZXF1ZXN0OwogY2xhc3MgSURCUmVzdWx0RGF0YTsKK2NsYXNzIElEQlRyYW5zYWN0
aW9uOwogCiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIAotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFz
cyBJREJPcGVuREJSZXF1ZXN0OwotY2xhc3MgSURCVHJhbnNhY3Rpb247CiBjbGFzcyBUcmFuc2Fj
dGlvbk9wZXJhdGlvbjsKIAogY2xhc3MgSURCQ29ubmVjdGlvblRvU2VydmVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8SURCQ29ubmVjdGlvblRvU2VydmVyPiB7CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJp
dmF0ZToKIAogICAgIFJlZjxJREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZT4gbV9kZWxlZ2F0
ZTsKIAotICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCQ2xpZW50
OjpJREJPcGVuREJSZXF1ZXN0Pj4gbV9vcGVuREJSZXF1ZXN0TWFwOworICAgIEhhc2hNYXA8SURC
UmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4+IG1fb3BlbkRCUmVx
dWVzdE1hcDsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBJREJEYXRhYmFzZSo+IG1fZGF0YWJhc2VD
b25uZWN0aW9uTWFwOwogICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+PiBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CiAgICAgSGFzaE1hcDxJREJS
ZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4+IG1fY29tbWl0dGluZ1Ry
YW5zYWN0aW9uczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDdXJzb3JJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDdXJzb3JJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWM1ZTRkNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCQ3Vyc29ySW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JJ
bXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVJl
cXVlc3RTdGF0ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJJREJC
aW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNp
bmNsdWRlICJJREJHZXRSZXN1bHQuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3Bh
Y2UgSURCQ2xpZW50IHsKLQotUmVmPElEQkN1cnNvcj4gSURCQ3Vyc29yOjpjcmVhdGUoSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQkN1cnNvcklu
Zm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yKHRyYW5zYWN0
aW9uLCBpbmRleCwgaW5mbykpOwotfQotCi1JREJDdXJzb3I6OklEQkN1cnNvcihJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURC
Q3Vyc29ySW5mbyYgaW5mbykKLSAgICA6IEFjdGl2ZURPTU9iamVjdCh0cmFuc2FjdGlvbi5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBtX2luZm8oaW5mbykKLSAgICAsIG1fc291cmNl
KElEQkFueTo6Y3JlYXRlKG9iamVjdFN0b3JlKS5sZWFrUmVmKCkpCi0gICAgLCBtX29iamVjdFN0
b3JlKCZvYmplY3RTdG9yZSkKLXsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKLX0KLQotSURCQ3Vy
c29yOjpJREJDdXJzb3IoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJJbmRleCYgaW5k
ZXgsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCi0gICAgOiBBY3RpdmVET01PYmplY3QodHJh
bnNhY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwgbV9pbmZvKGluZm8pCi0g
ICAgLCBtX3NvdXJjZShJREJBbnk6OmNyZWF0ZShpbmRleCkubGVha1JlZigpKQotICAgICwgbV9p
bmRleCgmaW5kZXgpCi17Ci0gICAgc3VzcGVuZElmTmVlZGVkKCk7Ci19Ci0KLUlEQkN1cnNvcjo6
fklEQkN1cnNvcigpCi17Ci19Ci0KLWJvb2wgSURCQ3Vyc29yOjpzb3VyY2VzRGVsZXRlZCgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fb2JqZWN0U3RvcmUpCi0gICAgICAgIHJldHVybiBtX29iamVjdFN0
b3JlLT5pc0RlbGV0ZWQoKTsKLQotICAgIEFTU0VSVChtX2luZGV4KTsKLSAgICByZXR1cm4gbV9p
bmRleC0+aXNEZWxldGVkKCkgfHwgbV9pbmRleC0+bW9kZXJuT2JqZWN0U3RvcmUoKS5pc0RlbGV0
ZWQoKTsKLX0KLQotSURCT2JqZWN0U3RvcmUmIElEQkN1cnNvcjo6ZWZmZWN0aXZlT2JqZWN0U3Rv
cmUoKSBjb25zdAotewotICAgIGlmIChtX29iamVjdFN0b3JlKQotICAgICAgICByZXR1cm4gKm1f
b2JqZWN0U3RvcmU7Ci0KLSAgICBBU1NFUlQobV9pbmRleCk7Ci0gICAgcmV0dXJuIG1faW5kZXgt
Pm1vZGVybk9iamVjdFN0b3JlKCk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uJiBJREJDdXJzb3I6OnRy
YW5zYWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5t
b2Rlcm5UcmFuc2FjdGlvbigpOwotfQotCi1jb25zdCBTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURCQ3Vyc29yOjpkaXJlY3Rpb25Ub1N0cmluZyht
X2luZm8uY3Vyc29yRGlyZWN0aW9uKCkpOwotfQotCi1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgSURCQ3Vyc29yOjprZXkoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlcHJlY2F0ZWRD
dXJyZW50S2V5OwotfQotCi1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURCQ3Vyc29y
OjpwcmltYXJ5S2V5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZXByZWNhdGVkQ3VycmVudFBy
aW1hcnlLZXk7Ci19Ci0KLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6
OnZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlOwot
fQotCi1JREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkKLXsKLSAgICByZXR1cm4gJm1fc291cmNl
LmdldCgpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRh
dGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURC
Q3Vyc29yOjp1cGRhdGUiKTsKLQotICAgIGlmIChzb3VyY2VzRGVsZXRlZCgpKSB7Ci0gICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUn
IG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qg
c3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKCF0cmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUn
IG9uICdJREJDdXJzb3InOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQu
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICh0cmFuc2FjdGlv
bigpLmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlJlYWRPbmx5RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgcmVjb3JkIG1heSBu
b3QgYmUgdXBkYXRlZCBpbnNpZGUgYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24uIik7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV9nb3RWYWx1ZSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAg
ICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRl
JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMgaXRl
cmF0ZWQgcGFzdCBpdHMgZW5kLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBpZiAoaXNLZXlDdXJzb3IoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1
cnNvciBpcyBhIGtleSBjdXJzb3IuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIGF1dG8mIG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLSAgICBh
dXRvJiBrZXlQYXRoID0gb2JqZWN0U3RvcmUuaW5mbygpLmtleVBhdGgoKTsKLSAgICBjb25zdCBi
b29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGguaXNOdWxsKCk7Ci0gICAgaWYgKHVzZXNJbkxp
bmVLZXlzKSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBtYXliZUNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGtleVBhdGgpOwot
ICAgICAgICBJREJLZXlEYXRhIGtleVBhdGhLZXlEYXRhKGtleVBhdGhLZXkuZ2V0KCkpOwotICAg
ICAgICBpZiAoIWtleVBhdGhLZXkgfHwga2V5UGF0aEtleURhdGEgIT0gbV9jdXJyZW50UHJpbWFy
eUtleURhdGEpIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
RGF0YUVycm9yOwotICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBlZmZlY3RpdmUgb2JqZWN0
IHN0b3JlIG9mIHRoaXMgY3Vyc29yIHVzZXMgaW4tbGluZSBrZXlzIGFuZCBldmFsdWF0aW5nIHRo
ZSBrZXkgcGF0aCBvZiB0aGUgdmFsdWUgcGFyYW1ldGVyIHJlc3VsdHMgaW4gYSBkaWZmZXJlbnQg
dmFsdWUgdGhhbiB0aGUgY3Vyc29yJ3MgZWZmZWN0aXZlIGtleS4iKTsKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byByZXF1ZXN0ID0gZWZm
ZWN0aXZlT2JqZWN0U3RvcmUoKS5wdXRGb3JDdXJzb3JVcGRhdGUoZXhlYywgdmFsdWUuanNWYWx1
ZSgpLCBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5qc1ZhbHVlKCksIGVjKTsKLSAgICBp
ZiAoZWMuY29kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQocmVxdWVz
dCk7Ci0gICAgcmVxdWVzdC0+c2V0U291cmNlKCp0aGlzKTsKLSAgICArK21fb3V0c3RhbmRpbmdS
ZXF1ZXN0Q291bnQ7Ci0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotdm9pZCBJREJDdXJzb3I6
OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjphZHZhbmNlIik7Ci0KLSAgICBp
ZiAoIW1fcmVxdWVzdCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlm
ICghY291bnQpIHsKLSAgICAgICAgZWMuY29kZSA9IFR5cGVFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FkdmFuY2UnIG9uICdJREJD
dXJzb3InOiBBIGNvdW50IGFyZ3VtZW50IHdpdGggdmFsdWUgMCAoemVybykgd2FzIHN1cHBsaWVk
LCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FkdmFuY2UnIG9uICdJREJDdXJzb3InOiBUaGUg
Y3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRl
ZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdHJhbnNhY3Rpb24oKS5p
c0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2YW5jZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFuc2Fj
dGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9nb3RWYWx1ZSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2YW5jZScgb24gJ0lEQkN1cnNvcic6IFRoZSBj
dXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQgb3IgaGFzIGl0ZXJhdGVkIHBhc3QgaXRzIGVuZC4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKLQotICAg
IHVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IoSURCS2V5RGF0YSgpLCBjb3VudCk7Ci19Ci0KLXZvaWQg
SURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgaWYgKCFjb250ZXh0KSB7
Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb250aW51ZUZ1bmN0aW9uKElEQktl
eURhdGEoKSwgZWMpOwotfQotCi12b2lkIElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5VmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgRE9NUmVx
dWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5
OwotICAgIGlmICgha2V5VmFsdWUuanNWYWx1ZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGtl
eSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOwotCi0gICAg
Y29udGludWVGdW5jdGlvbihrZXkuZ2V0KCksIGVjKTsKLX0KLQotdm9pZCBJREJDdXJzb3I6OmNv
bnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5RGF0YSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJDdXJzb3I6OmNvbnRpbnVlRnVu
Y3Rpb24gKHRvIGtleSAlcykiLCBrZXkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
Ci0gICAgaWYgKCFtX3JlcXVlc3QpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChzb3VyY2VzRGVsZXRlZCgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBj
dXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVk
LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF0cmFuc2FjdGlvbigpLmlz
QWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFuc2Fj
dGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9nb3RWYWx1ZSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUg
Y3Vyc29yIGlzIGJlaW5nIGl0ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWtleS5pc051bGwoKSAmJiAha2V5
LmlzVmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRh
dGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2
YWxpZCBrZXkuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9pbmZvLmlz
RGlyZWN0aW9uRm9yd2FyZCgpKSB7Ci0gICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5j
b21wYXJlKG1fY3VycmVudEtleURhdGEpIDw9IDApIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29y
JzogVGhlIHBhcmFtZXRlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBjdXJzb3IncyBw
b3NpdGlvbi4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAoIWtleS5pc051bGwoKSAmJiBrZXkuY29tcGFyZShtX2N1cnJlbnRLZXlEYXRhKSA+PSAwKSB7
Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAg
ICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGlu
dWUnIG9uICdJREJDdXJzb3InOiBUaGUgcGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVh
bCB0byB0aGlzIGN1cnNvcidzIHBvc2l0aW9uLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgbV9nb3RWYWx1ZSA9IGZhbHNlOwotCi0gICAgdW5jaGVja2VkSXRlcmF0ZUN1cnNvcihr
ZXksIDApOwotfQotCi12b2lkIElEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25z
dCBJREJLZXlEYXRhJiBrZXksIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0gICAgKyttX291dHN0
YW5kaW5nUmVxdWVzdENvdW50OwotCi0gICAgbV9yZXF1ZXN0LT53aWxsSXRlcmF0ZUN1cnNvcigq
dGhpcyk7Ci0gICAgdHJhbnNhY3Rpb24oKS5pdGVyYXRlQ3Vyc29yKCp0aGlzLCBrZXksIGNvdW50
KTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVu
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjpkZWxldGVGdW5j
dGlvbiIpOwotCi0gICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1
cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMg
YmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBp
ZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1
cnNvcic6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKHRyYW5zYWN0aW9uKCkuaXNSZWFk
T25seSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UmVhZE9u
bHlFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSByZWNvcmQgbWF5IG5vdCBiZSBkZWxl
dGVkIGluc2lkZSBhIHJlYWQtb25seSB0cmFuc2FjdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX2dvdFZhbHVlKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJD
dXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5nIGl0ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0
IGl0cyBlbmQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChp
c0tleUN1cnNvcigpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGEg
a2V5IGN1cnNvci4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0
byByZXF1ZXN0ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5tb2Rlcm5EZWxldGUoY29udGV4dCwg
bV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlLZXkuanNWYWx1ZSgpLCBlYyk7Ci0gICAgaWYgKGVj
LmNvZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJUKHJlcXVlc3QpOwot
ICAgIHJlcXVlc3QtPnNldFNvdXJjZSgqdGhpcyk7Ci0gICAgKyttX291dHN0YW5kaW5nUmVxdWVz
dENvdW50OwotCi0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpzZXRH
ZXRSZXN1bHQoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCR2V0UmVzdWx0JiBnZXRSZXN1
bHQpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6c2V0R2V0UmVzdWx0IC0gY3Vy
cmVudCBrZXkgJXMiLCBnZXRSZXN1bHQua2V5RGF0YSgpLmxvZ2dpbmdTdHJpbmcoKS5zdWJzdHJp
bmcoMCwgMTAwKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGF1dG8qIGNvbnRleHQgPSByZXF1ZXN0
LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghZ2V0UmVzdWx0LmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgIG1fZGVw
cmVjYXRlZEN1cnJlbnRLZXkgPSB7IH07Ci0gICAgICAgIG1fY3VycmVudEtleURhdGEgPSB7IH07
Ci0gICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5ID0geyB9OwotICAgICAgICBt
X2N1cnJlbnRQcmltYXJ5S2V5RGF0YSA9IHsgfTsKLSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVu
dFZhbHVlID0geyB9OwotCi0gICAgICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRLZXkgPSBpZGJLZXlEYXRhVG9T
Y3JpcHRWYWx1ZShjb250ZXh0LCBnZXRSZXN1bHQua2V5RGF0YSgpKTsKLSAgICBtX2N1cnJlbnRL
ZXlEYXRhID0gZ2V0UmVzdWx0LmtleURhdGEoKTsKLSAgICBtX2RlcHJlY2F0ZWRDdXJyZW50UHJp
bWFyeUtleSA9IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKGNvbnRleHQsIGdldFJlc3VsdC5wcmlt
YXJ5S2V5RGF0YSgpKTsKLSAgICBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YSA9IGdldFJlc3VsdC5w
cmltYXJ5S2V5RGF0YSgpOwotCi0gICAgaWYgKGlzS2V5Q3Vyc29yKCkpCi0gICAgICAgIG1fZGVw
cmVjYXRlZEN1cnJlbnRWYWx1ZSA9IHsgfTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGVwcmVjYXRl
ZEN1cnJlbnRWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKCpjb250ZXh0LCBnZXRSZXN1
bHQudmFsdWVCdWZmZXIoKSk7Ci0KLSAgICBtX2dvdFZhbHVlID0gdHJ1ZTsKLX0KLQotY29uc3Qg
Y2hhciogSURCQ3Vyc29yOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gIklEQkN1cnNvciI7Ci19Ci0KLWJvb2wgSURCQ3Vyc29yOjpjYW5TdXNwZW5kRm9yRG9jdW1l
bnRTdXNwZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSURC
Q3Vyc29yOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX291dHN0
YW5kaW5nUmVxdWVzdENvdW50OwotfQotCi12b2lkIElEQkN1cnNvcjo6ZGVjcmVtZW50T3V0c3Rh
bmRpbmdSZXF1ZXN0Q291bnQoKQotewotICAgIEFTU0VSVChtX291dHN0YW5kaW5nUmVxdWVzdENv
dW50KTsKLSAgICAtLW1fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29ySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkN1cnNvckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZDM1YzkxNS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCQ3Vyc29ySW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkN1cnNvckltcGxfaAotI2RlZmluZSBJREJDdXJz
b3JJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURC
QW55SW1wbC5oIgotI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKLSNpbmNsdWRlICJJREJDdXJz
b3JXaXRoVmFsdWUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJHZXRSZXN1
bHQ7Ci0KLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1jbGFzcyBJREJJbmRleDsKLWNsYXNzIElE
Qk9iamVjdFN0b3JlOwotY2xhc3MgSURCVHJhbnNhY3Rpb247Ci0KLWNsYXNzIElEQkN1cnNvciA6
IHB1YmxpYyBXZWJDb3JlOjpJREJDdXJzb3JXaXRoVmFsdWUsIHB1YmxpYyBBY3RpdmVET01PYmpl
Y3QgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCQ3Vyc29yPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb24mLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKLQotICAgIHZpcnR1YWwg
fklEQkN1cnNvcigpOwotCi0gICAgLy8gSW1wbGVtZW50IHRoZSBJREwKLSAgICBjb25zdCBTdHJp
bmcmIGRpcmVjdGlvbigpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBrZXkoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgcHJpbWFyeUtleSgpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiB2YWx1ZSgpIGNvbnN0IGZpbmFsOwotICAgIElEQkFueSogc291cmNlKCkgZmlu
YWw7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gdXBkYXRlKEpTQzo6RXhlY1N0
YXRlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KSBmaW5hbDsKLSAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgZmluYWw7Ci0gICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICB2b2lk
IGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwot
ICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0KLSAgICB2
b2lkIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5RGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpOwotCi0gICAgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0
dXJuIG1faW5mbzsgfQotCi0gICAgdm9pZCBzZXRSZXF1ZXN0KElEQlJlcXVlc3QmIHJlcXVlc3Qp
IHsgbV9yZXF1ZXN0ID0gJnJlcXVlc3Q7IH0KLSAgICB2b2lkIGNsZWFyUmVxdWVzdCgpIHsgbV9y
ZXF1ZXN0ID0gbnVsbHB0cjsgfQotICAgIElEQlJlcXVlc3QqIHJlcXVlc3QoKSB7IHJldHVybiBt
X3JlcXVlc3Q7IH0KLQotICAgIHZvaWQgc2V0R2V0UmVzdWx0KElEQlJlcXVlc3QmLCBjb25zdCBJ
REJHZXRSZXN1bHQmKTsKLQotICAgIGJvb2wgaXNLZXlDdXJzb3IoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBpc01vZGVybkN1cnNvcigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIHZvaWQgZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291
bnQoKTsKLQotcHJvdGVjdGVkOgotICAgIElEQkN1cnNvcihJREJUcmFuc2FjdGlvbiYsIElEQk9i
amVjdFN0b3JlJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwotICAgIElEQkN1cnNvcihJREJUcmFu
c2FjdGlvbiYsIElEQkluZGV4JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwotCi1wcml2YXRlOgot
ICAgIC8vIEFjdGl2ZURPTU9iamVjdC4KLSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3RO
YW1lKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5z
aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBm
aW5hbDsKLQotICAgIC8vIEN1cnNvcnMgYXJlIGNyZWF0ZWQgd2l0aCBhbiBvdXRzdGFuZGluZyBp
dGVyYXRpb24gcmVxdWVzdC4KLSAgICB1bnNpZ25lZCBtX291dHN0YW5kaW5nUmVxdWVzdENvdW50
IHsgMSB9OwotCi0gICAgSURCQ3Vyc29ySW5mbyBtX2luZm87Ci0gICAgUmVmPElEQkFueT4gbV9z
b3VyY2U7Ci0gICAgSURCT2JqZWN0U3RvcmUqIG1fb2JqZWN0U3RvcmUgeyBudWxscHRyIH07Ci0g
ICAgSURCSW5kZXgqIG1faW5kZXggeyBudWxscHRyIH07Ci0gICAgSURCUmVxdWVzdCogbV9yZXF1
ZXN0OwotCi0gICAgYm9vbCBzb3VyY2VzRGVsZXRlZCgpIGNvbnN0OwotICAgIElEQk9iamVjdFN0
b3JlJiBlZmZlY3RpdmVPYmplY3RTdG9yZSgpIGNvbnN0OwotICAgIElEQlRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbigpIGNvbnN0OwotCi0gICAgdm9pZCB1bmNoZWNrZWRJdGVyYXRlQ3Vyc29yKGNv
bnN0IElEQktleURhdGEmLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotICAgIGJvb2wgbV9nb3RW
YWx1ZSB7IGZhbHNlIH07Ci0KLSAgICBJREJLZXlEYXRhIG1fY3VycmVudEtleURhdGE7Ci0gICAg
SURCS2V5RGF0YSBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YTsKLQotICAgIC8vIEZJWE1FOiBXaGVu
IGRpdGNoaW5nIExlZ2FjeSBJREIgYW5kIGNvbWJpbmluZyB0aGlzIGltcGxlbWVudGF0aW9uIHdp
dGggdGhlIGFic3RyYWN0IElEQkN1cnNvciwKLSAgICAvLyB0aGVzZSBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSBtZW1iZXJzIHNob3VsZCBiZSBKU1ZhbHVlcyBpbnN0ZWFkLgotICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIG1fZGVwcmVjYXRlZEN1cnJlbnRLZXk7Ci0gICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgbV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlLZXk7Ci0gICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSURCQ2xpZW50Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJDdXJzb3JJbXBsX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JXaXRo
VmFsdWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJDdXJzb3JXaXRoVmFsdWVJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZWVlZGIyYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkN1
cnNvcldpdGhWYWx1ZUltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotUmVmPElEQkN1cnNv
cldpdGhWYWx1ZT4gSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoSURCVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQkN1cnNvcklu
Zm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yV2l0aFZhbHVl
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSwgaW5mbykpOwotfQotCi1SZWY8SURCQ3Vyc29yV2l0
aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJDdXJzb3JXaXRoVmFsdWUodHJhbnNhY3Rpb24sIGlu
ZGV4LCBpbmZvKSk7Ci19Ci0KLUlEQkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZhbHVl
KElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3Jl
LCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQotICAgIDogSURCQ3Vyc29yKHRyYW5zYWN0aW9u
LCBvYmplY3RTdG9yZSwgaW5mbykKLXsKLX0KLQotSURCQ3Vyc29yV2l0aFZhbHVlOjpJREJDdXJz
b3JXaXRoVmFsdWUoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJJbmRleCYgaW5kZXgs
IGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCi0gICAgOiBJREJDdXJzb3IodHJhbnNhY3Rpb24s
IGluZGV4LCBpbmZvKQotewotfQotCi1JREJDdXJzb3JXaXRoVmFsdWU6On5JREJDdXJzb3JXaXRo
VmFsdWUoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvcldpdGhW
YWx1ZUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJD
dXJzb3JXaXRoVmFsdWVJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYjg0
MWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkN1cnNvcldpdGhWYWx1ZUltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkN1cnNvcldpdGhWYWx1ZUltcGxfaAotI2RlZmluZSBJ
REJDdXJzb3JXaXRoVmFsdWVJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSAiSURCQ3Vyc29ySW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1l
c3BhY2UgSURCQ2xpZW50IHsKLQotY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlIDogcHVibGljIElE
QkN1cnNvciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJDdXJzb3JXaXRoVmFsdWU+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbiYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCQ3Vyc29ySW5m
byYpOwotICAgIHN0YXRpYyBSZWY8SURCQ3Vyc29yV2l0aFZhbHVlPiBjcmVhdGUoSURCVHJhbnNh
Y3Rpb24mLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKLQotICAgIHZpcnR1YWwg
fklEQkN1cnNvcldpdGhWYWx1ZSgpOwotCi0gICAgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgSURCQ3Vyc29yV2l0aFZhbHVl
KElEQlRyYW5zYWN0aW9uJiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7
Ci0gICAgSURCQ3Vyc29yV2l0aFZhbHVlKElEQlRyYW5zYWN0aW9uJiwgSURCSW5kZXgmLCBjb25z
dCBJREJDdXJzb3JJbmZvJik7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
I2VuZGlmIC8vIElEQkN1cnNvcldpdGhWYWx1ZUltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5NDRlZC4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiSURCQ29u
bmVjdGlvblRvU2VydmVyLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNp
bmNsdWRlICJJREJPcGVuREJSZXF1ZXN0SW1wbC5oIgotI2luY2x1ZGUgIklEQlJlc3VsdERhdGEu
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkltcGwuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9u
Q2hhbmdlRXZlbnRJbXBsLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElE
QkNsaWVudCB7Ci0KLVJlZjxJREJEYXRhYmFzZT4gSURCRGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rp
b24sIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSURCRGF0YWJhc2UoY29udGV4dCwgY29ubmVjdGlvbiwgcmVzdWx0RGF0YSkpOwot
fQotCi1JREJEYXRhYmFzZTo6SURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgSURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uLCBjb25zdCBJREJSZXN1bHRE
YXRhJiByZXN1bHREYXRhKQotICAgIDogV2ViQ29yZTo6SURCRGF0YWJhc2UoJmNvbnRleHQpCi0g
ICAgLCBtX3NlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbikKLSAgICAsIG1faW5mbyhyZXN1bHRE
YXRhLmRhdGFiYXNlSW5mbygpKQotICAgICwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVy
KHJlc3VsdERhdGEuZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcigpKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJEYXRhYmFzZTo6SURCRGF0YWJhc2UgLSBDcmVhdGluZyBkYXRhYmFzZSAl
cyB3aXRoIHZlcnNpb24gJSIgUFJJdTY0ICIgY29ubmVjdGlvbiAlIiBQUkl1NjQsIG1faW5mby5u
YW1lKCkudXRmOCgpLmRhdGEoKSwgbV9pbmZvLnZlcnNpb24oKSwgbV9kYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyKTsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZWxheEFkb3B0aW9u
UmVxdWlyZW1lbnQoKTsKLSAgICBtX3NlcnZlckNvbm5lY3Rpb24tPnJlZ2lzdGVyRGF0YWJhc2VD
b25uZWN0aW9uKCp0aGlzKTsKLX0KLQotSURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSgpCi17Ci0g
ICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT51bnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0aGlz
KTsKLX0KLQotYm9vbCBJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIW1fY2xvc2VkSW5TZXJ2ZXI7Ci19Ci0KLWNvbnN0IFN0cmluZyBJREJEYXRh
YmFzZTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5mby5uYW1lKCk7Ci19Ci0KLXVp
bnQ2NF90IElEQkRhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZv
LnZlcnNpb24oKTsKLX0KLQotUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmpl
Y3RTdG9yZU5hbWVzKCkgY29uc3QKLXsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0
U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbmFt
ZSA6IG1faW5mby5vYmplY3RTdG9yZU5hbWVzKCkpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMt
PmFwcGVuZChuYW1lKTsKLSAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0KCk7Ci0gICAgcmV0dXJu
IG9iamVjdFN0b3JlTmFtZXM7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4g
SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYsIGNvbnN0IERpY3Rp
b25hcnkmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKQotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJh
c2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0KLSAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uIHx8IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2Uo
KSk7Ci0KLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAg
IGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmpl
Y3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGlzIG5vdCBydW5uaW5nIGEg
dmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkp
IHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbklu
YWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICht
X2luZm8uaGFzT2JqZWN0U3RvcmUobmFtZSkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRh
dGFiYXNlJzogQW4gb2JqZWN0IHN0b3JlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkg
ZXhpc3RzLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIWtl
eVBhdGguaXNOdWxsKCkgJiYgIWtleVBhdGguaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24g
J0lEQkRhdGFiYXNlJzogVGhlIGtleVBhdGggb3B0aW9uIGlzIG5vdCBhIHZhbGlkIGtleSBwYXRo
LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoYXV0b0luY3Jl
bWVudCAmJiAha2V5UGF0aC5pc051bGwoKSkgewotICAgICAgICBpZiAoKGtleVBhdGgudHlwZSgp
ID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OlN0cmluZyAmJiBrZXlQYXRoLnN0cmluZygpLmlz
RW1wdHkoKSkgfHwga2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6QXJy
YXkpIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxp
ZEFjY2Vzc0Vycm9yOwotICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUg
YXV0b0luY3JlbWVudCBvcHRpb24gd2FzIHNldCBidXQgdGhlIGtleVBhdGggb3B0aW9uIHdhcyBl
bXB0eSBvciBhbiBhcnJheS4iKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gSW5zdGFsbCB0aGUgbmV3IE9iamVjdFN0b3JlIGludG8gdGhl
IGNvbm5lY3Rpb24ncyBtZXRhZGF0YS4KLSAgICBJREJPYmplY3RTdG9yZUluZm8gaW5mbyA9IG1f
aW5mby5jcmVhdGVOZXdPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsK
LQotICAgIC8vIENyZWF0ZSB0aGUgYWN0dWFsIElEQk9iamVjdFN0b3JlIGZyb20gdGhlIHRyYW5z
YWN0aW9uLCB3aGljaCBhbHNvIHNjaGVkdWxlcyB0aGUgb3BlcmF0aW9uIHNlcnZlciBzaWRlLgot
ICAgIFJlZjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbi0+Y3JlYXRlT2JqZWN0U3RvcmUoaW5mbyk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCZv
YmplY3RTdG9yZS5sZWFrUmVmKCkpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rp
b24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlcywgY29uc3QgU3RyaW5nJiBtb2RlU3RyaW5n
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJ
REJEYXRhYmFzZTo6dHJhbnNhY3Rpb24iKTsKLQotICAgIGlmIChtX2Nsb3NlUGVuZGluZykgewot
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9y
OwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
dHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlz
IGNsb3NpbmcuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChv
YmplY3RTdG9yZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6
IFRoZSBzdG9yZU5hbWVzIHBhcmFtZXRlciB3YXMgZW1wdHkuIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUgPSBJ
REJUcmFuc2FjdGlvbjo6c3RyaW5nVG9Nb2RlKG1vZGVTdHJpbmcsIGVjLmNvZGUpOwotICAgIGlm
IChlYy5jb2RlKSB7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUg
bW9kZSBwcm92aWRlZCAoJyIpLCBtb2RlU3RyaW5nLCBBU0NJSUxpdGVyYWwoIicpIGlzIG5vdCBv
bmUgb2YgJ3JlYWRvbmx5JyBvciAncmVhZHdyaXRlJy4iKSk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIGlmIChtb2RlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2Rl
OjpSZWFkT25seSAmJiBtb2RlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkV3Jp
dGUpIHsKLSAgICAgICAgZWMuY29kZSA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uICYmICFtX3Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpIHsKLSAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAg
ICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5z
YWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBBIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGlz
IHJ1bm5pbmcuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGZvciAo
YXV0byYgb2JqZWN0U3RvcmVOYW1lIDogb2JqZWN0U3RvcmVzKSB7Ci0gICAgICAgIGlmIChtX2lu
Zm8uaGFzT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7
Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd0
cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogT25lIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0
IHN0b3JlcyB3YXMgbm90IGZvdW5kLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBhdXRvIGluZm8gPSBJREJUcmFuc2FjdGlvbkluZm86OmNsaWVudFRyYW5zYWN0aW9u
KG1fc2VydmVyQ29ubmVjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmVzLCBtb2RlKTsKLSAgICBhdXRv
IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZSgqdGhpcywgaW5mbyk7Ci0KLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uIC0gQWRkZWQgYWN0aXZl
IHRyYW5zYWN0aW9uICVzIiwgaW5mby5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotCi0gICAgbV9hY3RpdmVUcmFuc2FjdGlvbnMuc2V0KGluZm8uaWRlbnRpZmll
cigpLCAmdHJhbnNhY3Rpb24uZ2V0KCkpOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKCZ0cmFuc2Fj
dGlvbi5sZWFrUmVmKCkpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElE
QkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG9iamVjdFN0b3JlLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gb2JqZWN0U3RvcmVzKDEp
OwotICAgIG9iamVjdFN0b3Jlc1swXSA9IG9iamVjdFN0b3JlOwotICAgIHJldHVybiB0cmFuc2Fj
dGlvbihjb250ZXh0LCBvYmplY3RTdG9yZXMsIG1vZGUsIGVjKTsKLX0KLQotdm9pZCBJREJEYXRh
YmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRh
dGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSIpOwotCi0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbikgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnZGVsZXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBk
YXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghbV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSkpIHsKLSAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlT2Jq
ZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdh
cyBub3QgZm91bmQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2luZm8uZGVs
ZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTsKLSAgICBtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbi0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZTo6Y2xvc2UoKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6
Y2xvc2UgLSAlIiBQUkl1NjQsIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7Ci0KLSAg
ICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7Ci0gICAgbWF5YmVDbG9zZUluU2VydmVyKCk7Ci19Ci0K
LXZvaWQgSURCRGF0YWJhc2U6Om1heWJlQ2xvc2VJblNlcnZlcigpCi17Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2ZXIgLSAlIiBQUkl1NjQsIG1fZGF0
YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7Ci0KLSAgICBpZiAobV9jbG9zZWRJblNlcnZlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gMy4zLjkgRGF0YWJhc2UgY2xvc2luZyBzdGVwcwot
ICAgIC8vIFdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbnMgY3JlYXRlZCB1c2luZyB0aGlzIGNvbm5l
Y3Rpb24gdG8gY29tcGxldGUuCi0gICAgLy8gT25jZSB0aGV5IGFyZSBjb21wbGV0ZSwgdGhpcyBj
b25uZWN0aW9uIGlzIGNsb3NlZC4KLSAgICBpZiAoIW1fYWN0aXZlVHJhbnNhY3Rpb25zLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbG9zZWRJblNlcnZlciA9IHRydWU7Ci0g
ICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5kYXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOwot
fQotCi1jb25zdCBjaGFyKiBJREJEYXRhYmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICJJREJEYXRhYmFzZSI7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2U6OmNh
blN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBU
aGlzIHZhbHVlIHdpbGwgc29tZXRpbWVzIGJlIGZhbHNlIHdoZW4gZGF0YWJhc2Ugb3BlcmF0aW9u
cyBhcmUgYWN0dWFsbHkgaW4gcHJvZ3Jlc3MuCi0gICAgLy8gU3VjaCBkYXRhYmFzZSBvcGVyYXRp
b25zIGRvIG5vdCB5ZXQgZXhpc3QuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2U6OnN0b3AoKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6c3RvcCAt
ICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKLQotICAgIFZlY3Rv
cjxJREJSZXNvdXJjZUlkZW50aWZpZXI+IHRyYW5zYWN0aW9uSWRlbnRpZmllcnM7Ci0gICAgdHJh
bnNhY3Rpb25JZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYWN0aXZlVHJhbnNh
Y3Rpb25zLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogbV9hY3RpdmVUcmFuc2FjdGlv
bnMua2V5cygpKQotICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVu
ZChpZCk7Ci0KLSAgICBmb3IgKGF1dG8mIGlkIDogdHJhbnNhY3Rpb25JZGVudGlmaWVycykgewot
ICAgICAgICBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5zYWN0aW9u
cy5nZXQoaWQpOwotICAgICAgICBpZiAodHJhbnNhY3Rpb24pCi0gICAgICAgICAgICB0cmFuc2Fj
dGlvbi0+c3RvcCgpOwotICAgIH0KLQotICAgIGNsb3NlKCk7Ci19Ci0KLVJlZjxJREJUcmFuc2Fj
dGlvbj4gSURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElE
QlRyYW5zYWN0aW9uSW5mbyYgaW5mbywgSURCT3BlbkRCUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uICVzIiwgaW5mby5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotCi0gICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgQVNTRVJU
KGluZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdl
KTsKLSAgICBBU1NFUlQoIW1fY2xvc2VQZW5kaW5nKTsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKLQotICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJ
REJUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvLCByZXF1ZXN0KTsKLSAgICBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiA9ICZ0cmFuc2FjdGlvbi5nZXQoKTsKLQotICAgIG1fYWN0aXZl
VHJhbnNhY3Rpb25zLnNldCh0cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5z
YWN0aW9uLmdldCgpKTsKLQotICAgIHJldHVybiB0cmFuc2FjdGlvbjsKLX0KLQotdm9pZCBJREJE
YXRhYmFzZTo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24p
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5zYWN0aW9u
ICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0K
LSAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGNsaWVudCB0byBoYXZlIGFib3J0ZWQgYSB0
cmFuc2FjdGlvbiBiZWZvcmUgdGhlIHNlcnZlciByZXBsaWVzIGJhY2sgdGhhdCBpdCBoYXMgc3Rh
cnRlZC4KLSAgICBpZiAobV9hYm9ydGluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlv
bi5pbmZvKCkuaWRlbnRpZmllcigpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hY3RpdmVU
cmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksICZ0cmFuc2Fj
dGlvbik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OndpbGxDb21taXRUcmFuc2FjdGlvbihJREJU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFi
YXNlOjp3aWxsQ29tbWl0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRp
ZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGF1dG8gcmVmVHJh
bnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uLmluZm8oKS5p
ZGVudGlmaWVyKCkpOwotICAgIEFTU0VSVChyZWZUcmFuc2FjdGlvbik7Ci0gICAgbV9jb21taXR0
aW5nVHJhbnNhY3Rpb25zLnNldCh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBXVEZN
b3ZlKHJlZlRyYW5zYWN0aW9uKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmRpZENvbW1pdFRy
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCRGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rpb24u
aW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAg
ICBpZiAobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPT0gJnRyYW5zYWN0aW9uKQotICAgICAg
ICBtX2luZm8uc2V0VmVyc2lvbih0cmFuc2FjdGlvbi5pbmZvKCkubmV3VmVyc2lvbigpKTsKLQot
ICAgIGRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2U6OndpbGxBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbikKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OndpbGxBYm9ydFRyYW5z
YWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBhdXRvIHJlZlRyYW5zYWN0aW9uID0gbV9hY3RpdmVU
cmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKLSAgICBp
ZiAoIXJlZlRyYW5zYWN0aW9uKQotICAgICAgICByZWZUcmFuc2FjdGlvbiA9IG1fY29tbWl0dGlu
Z1RyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOwotCi0g
ICAgQVNTRVJUKHJlZlRyYW5zYWN0aW9uKTsKLSAgICBtX2Fib3J0aW5nVHJhbnNhY3Rpb25zLnNl
dCh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBXVEZNb3ZlKHJlZlRyYW5zYWN0aW9u
KSk7Ci0KLSAgICBpZiAodHJhbnNhY3Rpb24uaXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAg
QVNTRVJUKHRyYW5zYWN0aW9uLm9yaWdpbmFsRGF0YWJhc2VJbmZvKCkpOwotICAgICAgICBtX2lu
Zm8gPSAqdHJhbnNhY3Rpb24ub3JpZ2luYWxEYXRhYmFzZUluZm8oKTsKLSAgICAgICAgbV9jbG9z
ZVBlbmRpbmcgPSB0cnVlOwotICAgIH0KLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6ZGlkQWJvcnRU
cmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRBYm9ydFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rpb24u
aW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAg
ICBpZiAodHJhbnNhY3Rpb24uaXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAgQVNTRVJUKHRy
YW5zYWN0aW9uLm9yaWdpbmFsRGF0YWJhc2VJbmZvKCkpOwotICAgICAgICBBU1NFUlQobV9pbmZv
LnZlcnNpb24oKSA9PSB0cmFuc2FjdGlvbi5vcmlnaW5hbERhdGFiYXNlSW5mbygpLT52ZXJzaW9u
KCkpOwotICAgICAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7Ci0gICAgICAgIG1heWJlQ2xvc2VJ
blNlcnZlcigpOwotICAgIH0KLQotICAgIGRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbih0cmFu
c2FjdGlvbik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmRpZENvbW1pdE9yQWJvcnRUcmFuc2Fj
dGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQkRhdGFiYXNlOjpkaWRDb21taXRPckFib3J0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlv
bi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQot
ICAgIGlmIChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24pCi0gICAg
ICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKLQotI2lmbmRlZiBOREJF
QlVHCi0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGlmIChtX2FjdGl2ZVRyYW5zYWN0aW9u
cy5jb250YWlucyh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSkKLSAgICAgICAgKytj
b3VudDsKLSAgICBpZiAobV9jb21taXR0aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKQotICAgICAgICArK2NvdW50OwotICAgIGlmIChtX2Fi
b3J0aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCkpKQotICAgICAgICArK2NvdW50OwotCi0gICAgQVNTRVJUKGNvdW50ID09IDEpOwotI2VuZGlm
Ci0KLSAgICBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24uaW5mbygpLmlk
ZW50aWZpZXIoKSk7Ci0gICAgbV9jb21taXR0aW5nVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKLSAgICBtX2Fib3J0aW5nVHJhbnNhY3Rpb25zLnJl
bW92ZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKLQotICAgIGlmIChtX2Nsb3Nl
UGVuZGluZykKLSAgICAgICAgbWF5YmVDbG9zZUluU2VydmVyKCk7Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2U6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKLXsKLSAgICB1
aW50NjRfdCBjdXJyZW50VmVyc2lvbiA9IG1faW5mby52ZXJzaW9uKCk7Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50IC0gY3VycmVudCB2ZXJz
aW9uICUiIFBSSXU2NCAiLCByZXF1ZXN0ZWQgdmVyc2lvbiAlIiBQUkl1NjQgIiwgY29ubmVjdGlv
biAlIiBQUkl1NjQsIGN1cnJlbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uLCBtX2RhdGFiYXNl
Q29ubmVjdGlvbklkZW50aWZpZXIpOwotCi0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgfHwgbV9jbG9zZVBlbmRpbmcpIHsKLSAgICAgICAgc2VydmVyQ29ubmVjdGlvbigpLmRpZEZp
cmVWZXJzaW9uQ2hhbmdlRXZlbnQobV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCByZXF1
ZXN0SWRlbnRpZmllcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWY8RXZlbnQ+
IGV2ZW50ID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUocmVxdWVzdElkZW50aWZpZXIs
IGN1cnJlbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uLCBldmVudE5hbWVzKCkudmVyc2lvbmNo
YW5nZUV2ZW50KTsKLSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7
Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCAoJSIgUFJJdTY0
ICIpIiwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKLQotICAgIGJvb2wgcmVzdWx0
ID0gV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwotCi0gICAgaWYg
KGV2ZW50LmlzVmVyc2lvbkNoYW5nZUV2ZW50KCkgJiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFt
ZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpCi0gICAgICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kaWRG
aXJlVmVyc2lvbkNoYW5nZUV2ZW50KG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgZG93
bmNhc3Q8SURCVmVyc2lvbkNoYW5nZUV2ZW50PihldmVudCkucmVxdWVzdElkZW50aWZpZXIoKSk7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpkaWRDcmVhdGVJ
bmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQotewotICAgIGF1dG8qIG9iamVjdFN0
b3JlID0gbV9pbmZvLmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKCkpOwotICAgIEFTU0VSVChvYmplY3RTdG9yZSk7Ci0gICAgb2JqZWN0U3RvcmUt
PmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmRpZERlbGV0
ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCi17Ci0gICAgYXV0byogb2JqZWN0
U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9y
ZUlkZW50aWZpZXIoKSk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKLSAgICBvYmplY3RTdG9y
ZS0+ZGVsZXRlSW5kZXgoaW5mby5uYW1lKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGll
bnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkRhdGFiYXNlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQkRhdGFiYXNlSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4
Y2FmY2I0Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJEYXRhYmFzZUltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUltcGxfaAotI2RlZmluZSBJREJEYXRhYmFz
ZUltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJD
b25uZWN0aW9uVG9TZXJ2ZXIuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUg
IklEQkRhdGFiYXNlSW5mby5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlJl
c3VsdERhdGE7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsKLWNsYXNzIElEQlRyYW5zYWN0aW9uSW5m
bzsKLQotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uOwotCi1j
bGFzcyBJREJEYXRhYmFzZSA6IHB1YmxpYyBXZWJDb3JlOjpJREJEYXRhYmFzZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxJREJEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAg
ICB2aXJ0dWFsIH5JREJEYXRhYmFzZSgpOwotCi0gICAgLy8gSURCRGF0YWJhc2UgSURMCi0gICAg
Y29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdCBmaW5hbDsKLSAgICB1aW50NjRfdCB2ZXJzaW9uKCkg
Y29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMo
KSBjb25zdCBmaW5hbDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gY3Jl
YXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
IGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3Ry
aW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8
V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpIGZpbmFsOwotICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICB2b2lkIGNsb3Nl
KCkgZmluYWw7Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNl
IGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSURCRGF0YWJhc2VF
dmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2Jq
ZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLSAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0
KCkgZmluYWwgeyByZWYoKTsgfQotICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFsIHsg
ZGVyZWYoKTsgfQotCi0gICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0
IGZpbmFsOwotICAgIHZvaWQgc3RvcCgpIGZpbmFsOwotCi0gICAgY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9Ci0gICAgdWludDY0X3QgZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllcjsgfQotCi0gICAgUmVmPElEQlRyYW5zYWN0aW9uPiBzdGFydFZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mLCBJREJPcGVuREJSZXF1
ZXN0Jik7Ci0gICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7Ci0K
LSAgICB2b2lkIHdpbGxDb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOwotICAgIHZv
aWQgZGlkQ29tbWl0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKLSAgICB2b2lkIHdpbGxB
Ym9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7Ci0gICAgdm9pZCBkaWRBYm9ydFRyYW5z
YWN0aW9uKElEQlRyYW5zYWN0aW9uJik7Ci0KLSAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZl
bnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0
X3QgcmVxdWVzdGVkVmVyc2lvbik7Ci0KLSAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIHNlcnZl
ckNvbm5lY3Rpb24oKSB7IHJldHVybiBtX3NlcnZlckNvbm5lY3Rpb24uZ2V0KCk7IH0KLQotICAg
IHZvaWQgZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYpOwotICAgIHZvaWQg
ZGlkRGVsZXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYpOwotCi0gICAgYm9vbCBpc0Ns
b3NpbmdPckNsb3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VQZW5kaW5nIHx8IG1fY2xvc2Vk
SW5TZXJ2ZXI7IH0KLQotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIGZpbmFsOwotCi1w
cml2YXRlOgotICAgIElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJDb25u
ZWN0aW9uVG9TZXJ2ZXImLCBjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAgICB2b2lkIGRpZENv
bW1pdE9yQWJvcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOwotCi0gICAgdm9pZCBtYXli
ZUNsb3NlSW5TZXJ2ZXIoKTsKLQotICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICBSZWY8SURCQ29ubmVjdGlvblRvU2VydmVyPiBtX3NlcnZlckNvbm5lY3Rp
b247Ci0gICAgSURCRGF0YWJhc2VJbmZvIG1faW5mbzsKLSAgICB1aW50NjRfdCBtX2RhdGFiYXNl
Q29ubmVjdGlvbklkZW50aWZpZXIgeyAwIH07Ci0KLSAgICBib29sIG1fY2xvc2VQZW5kaW5nIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fY2xvc2VkSW5TZXJ2ZXIgeyBmYWxzZSB9OwotCi0gICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKLSAgICBIYXNo
TWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRyPElEQlRyYW5zYWN0aW9uPj4gbV9hY3Rp
dmVUcmFuc2FjdGlvbnM7Ci0gICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4+IG1fY29tbWl0dGluZ1RyYW5zYWN0aW9uczsKLSAgICBIYXNoTWFw
PElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRyPElEQlRyYW5zYWN0aW9uPj4gbV9hYm9ydGlu
Z1RyYW5zYWN0aW9uczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5k
aWYgLy8gSURCRGF0YWJhc2VJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRmFjdG9yeUltcGwuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1M2JlMjJkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJREJGYWN0b3J5SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSURCT3BlbkRC
UmVxdWVzdEltcGwuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgot
I2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1zdGF0aWMgYm9vbCBzaG91bGRUaHJvd1NlY3Vy
aXR5RXhjZXB0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgQVNT
RVJUKGlzPERvY3VtZW50Pihjb250ZXh0KSB8fCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2NvcGUo
KSk7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkgewotICAgICAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7Ci0gICAgICAgIGlmICghZG9j
dW1lbnQuZnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWRv
Y3VtZW50LnBhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
ICghY29udGV4dC5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LnRv
cE9yaWdpbigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLVJlZjxJREJGYWN0b3J5PiBJREJGYWN0b3J5OjpjcmVhdGUoSURCQ29ubmVjdGlvblRvU2Vy
dmVyJiBjb25uZWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkZhY3Rvcnko
Y29ubmVjdGlvbikpOwotfQotCi1JREJGYWN0b3J5OjpJREJGYWN0b3J5KElEQkNvbm5lY3Rpb25U
b1NlcnZlciYgY29ubmVjdGlvbikKLSAgICA6IG1fY29ubmVjdGlvblRvU2VydmVyKGNvbm5lY3Rp
b24pCi17Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXRE
YXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlJikKLXsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQk9wZW5EQlJlcXVl
c3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCRmFjdG9yeTo6b3BlbiIpOwotICAgIAotICAgIHJldHVybiBvcGVuSW50ZXJuYWwoY29u
dGV4dCwgbmFtZSwgMCwgZWMpLnJlbGVhc2UoKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQk9w
ZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkZhY3Rvcnk6Om9wZW4i
KTsKLSAgICAKLSAgICBpZiAoIXZlcnNpb24pIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBvcGVuSW50ZXJuYWwo
Y29udGV4dCwgbmFtZSwgdmVyc2lvbiwgZWMpLnJlbGVhc2UoKTsKLX0KLQotUmVmUHRyPElEQk9w
ZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJz
aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAobmFtZS5pc051bGwoKSkgewotICAg
ICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgaWYgKHNob3VsZFRocm93U2VjdXJpdHlFeGNlcHRpb24oY29udGV4dCkpIHsKLSAgICAgICAg
ZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IEFTU0VSVChjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCkpOwotICAgIEFTU0VSVChjb250ZXh0LnRv
cE9yaWdpbigpKTsKLSAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgZGF0YWJhc2VJZGVudGlmaWVy
KG5hbWUsICpjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCksICpjb250ZXh0LnRvcE9yaWdpbigpKTsK
LSAgICBpZiAoIWRhdGFiYXNlSWRlbnRpZmllci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZWMgPSBU
eXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gcmVx
dWVzdCA9IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0ZU9wZW5SZXF1ZXN0KG1fY29ubmVjdGlvblRv
U2VydmVyLmdldCgpLCBjb250ZXh0LCBkYXRhYmFzZUlkZW50aWZpZXIsIHZlcnNpb24pOwotICAg
IG1fY29ubmVjdGlvblRvU2VydmVyLT5vcGVuRGF0YWJhc2UocmVxdWVzdC5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gYWRvcHRSZWYoJnJlcXVlc3QubGVha1JlZigpKTsKLX0KLQotUmVmUHRyPFdlYkNv
cmU6OklEQk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNl
IC0gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsK
LSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LSAgICAKLSAgICBpZiAoc2hvdWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0KSkgewot
ICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgQVNTRVJUKGNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgQVNTRVJUKGNv
bnRleHQudG9wT3JpZ2luKCkpOwotICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBkYXRhYmFzZUlk
ZW50aWZpZXIobmFtZSwgKmNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKmNvbnRleHQudG9wT3Jp
Z2luKCkpOwotICAgIGlmICghZGF0YWJhc2VJZGVudGlmaWVyLmlzVmFsaWQoKSkgewotICAgICAg
ICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
YXV0byByZXF1ZXN0ID0gSURCT3BlbkRCUmVxdWVzdDo6Y3JlYXRlRGVsZXRlUmVxdWVzdChtX2Nv
bm5lY3Rpb25Ub1NlcnZlci5nZXQoKSwgY29udGV4dCwgZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAg
ICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+ZGVsZXRlRGF0YWJhc2UocmVxdWVzdC5nZXQoKSk7Ci0K
LSAgICByZXR1cm4gYWRvcHRSZWYoJnJlcXVlc3QubGVha1JlZigpKTsKLX0KLQotc2hvcnQgSURC
RmFjdG9yeTo6Y21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdFZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgc2Vjb25kVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAg
RE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktl
eT4gZmlyc3QgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGZpcnN0VmFsdWUp
OwotICAgIFJlZlB0cjxJREJLZXk+IHNlY29uZCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVl
c3RTdGF0ZSwgc2Vjb25kVmFsdWUpOwotCi0gICAgQVNTRVJUKGZpcnN0KTsKLSAgICBBU1NFUlQo
c2Vjb25kKTsKLQotICAgIGlmICghZmlyc3QtPmlzVmFsaWQoKSB8fCAhc2Vjb25kLT5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7
Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdj
bXAnIG9uICdJREJGYWN0b3J5JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9y
dD4oZmlyc3QtPmNvbXBhcmUoc2Vjb25kLmdldCgpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElE
QkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCRmFjdG9yeUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4NDA3NDIxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJGYWN0b3J5SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSURCRmFjdG9yeUltcGxfaAotI2RlZmluZSBJREJGYWN0b3J5
SW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkNv
bm5lY3Rpb25Ub1NlcnZlci5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLWNsYXNzIElEQk9wZW5EQlJlcXVl
c3Q7Ci0KLWNsYXNzIElEQkZhY3RvcnkgOiBwdWJsaWMgV2ViQ29yZTo6SURCRmFjdG9yeSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJGYWN0b3J5PiBjcmVhdGUoSURCQ29ubmVjdGlvblRv
U2VydmVyJik7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VO
YW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZSYpIGZpbmFsOwotCi0g
ICAgUmVmUHRyPFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpIGZpbmFsOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBF
eGNlcHRpb25Db2RlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQk9wZW5EQlJlcXVl
c3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSBmaW5hbDsKLQotICAgIHNob3J0IGNtcChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0LCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2Vjb25kLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmKSBmaW5hbDsKLQotcHJpdmF0ZToKLSAgICBJREJGYWN0b3J5KElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYpOwotICAgIAotICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQgbG9u
ZyBsb25nIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAKLSAgICBSZWY8SURCQ29ubmVj
dGlvblRvU2VydmVyPiBtX2Nvbm5lY3Rpb25Ub1NlcnZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCRmFjdG9yeUltcGxfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y2ZThkZi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIklEQkluZGV4SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLSNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKLSNpbmNsdWRlICJJREJB
bnlJbXBsLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIklE
QkN1cnNvckltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIklEQktleVJhbmdlRGF0YS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW1wbC5oIgot
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLUlEQkluZGV4OjpJ
REJJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJJbmRleElu
Zm8mIGluZm8sIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSkKLSAgICA6IEFjdGl2ZURPTU9i
amVjdCgmY29udGV4dCkKLSAgICAsIG1faW5mbyhpbmZvKQotICAgICwgbV9vYmplY3RTdG9yZShv
YmplY3RTdG9yZSkKLXsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKLX0KLQotSURCSW5kZXg6On5J
REJJbmRleCgpCi17Ci19Ci0KLWNvbnN0IGNoYXIqIElEQkluZGV4OjphY3RpdmVET01PYmplY3RO
YW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIklEQkluZGV4IjsKLX0KLQotYm9vbCBJREJJbmRl
eDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIElEQkluZGV4OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAot
ewotICAgIHJldHVybiAhbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLmlzRmluaXNo
ZWQoKTsKLX0KLQotY29uc3QgU3RyaW5nJiBJREJJbmRleDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1faW5mby5uYW1lKCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZT4gSURCSW5kZXg6Om9iamVjdFN0b3JlKCkKLXsKLSAgICByZXR1cm4gJm1fb2JqZWN0U3RvcmU7
Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IElEQkluZGV4OjprZXlQYXRoQW55KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURCQW55OjpjcmVhdGUobV9pbmZvLmtleVBhdGgoKSk7Ci19Ci0K
LWNvbnN0IElEQktleVBhdGgmIElEQkluZGV4OjprZXlQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9pbmZvLmtleVBhdGgoKTsKLX0KLQotYm9vbCBJREJJbmRleDo6dW5pcXVlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9pbmZvLnVuaXF1ZSgpOwotfQotCi1ib29sIElEQkluZGV4OjptdWx0
aUVudHJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLm11bHRpRW50cnkoKTsKLX0KLQot
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiByYW5nZSwgY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAg
TE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpvcGVuQ3Vyc29yIik7Ci0KLSAgICBpZiAobV9kZWxl
dGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJ
bmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV9vYmplY3RTdG9y
ZS5tb2Rlcm5UcmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBv
biAnSURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0
aW9uU3RyaW5nLCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkgewotICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lE
QkluZGV4JzogVGhlIGRpcmVjdGlvbiBwcm92aWRlZCAoJ2ludmFsaWQtZGlyZWN0aW9uJykgaXMg
bm90IG9uZSBvZiAnbmV4dCcsICduZXh0dW5pcXVlJywgJ3ByZXYnLCBvciAncHJldnVuaXF1ZScu
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIElEQktleVJhbmdlRGF0
YSByYW5nZURhdGEgPSByYW5nZTsKLSAgICBpZiAocmFuZ2VEYXRhLmxvd2VyS2V5LmlzTnVsbCgp
KQotICAgICAgICByYW5nZURhdGEubG93ZXJLZXkgPSBJREJLZXlEYXRhOjptaW5pbXVtKCk7Ci0g
ICAgaWYgKHJhbmdlRGF0YS51cHBlcktleS5pc051bGwoKSkKLSAgICAgICAgcmFuZ2VEYXRhLnVw
cGVyS2V5ID0gSURCS2V5RGF0YTo6bWF4aW11bSgpOwotCi0gICAgYXV0byBpbmZvID0gSURCQ3Vy
c29ySW5mbzo6aW5kZXhDdXJzb3IobV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLCBt
X29iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCksIG1faW5mby5pZGVudGlmaWVyKCksIHJh
bmdlRGF0YSwgZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlKTsK
LSAgICByZXR1cm4gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLnJlcXVlc3RPcGVu
Q3Vyc29yKGNvbnRleHQsICp0aGlzLCBpbmZvKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJl
cXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGly
ZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVk
REIsICJJREJJbmRleDo6b3BlbkN1cnNvciIpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjLmNvZGUpOwotICAgIGlm
IChlYy5jb2RlKSB7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgcGFyYW1ldGVyIGlzIG5v
dCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbiwgZWMp
OwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIpOwotCi0gICAgcmV0dXJu
IGRvQ291bnQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsKLX0KLQot
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIpOwot
Ci0gICAgcmV0dXJuIGRvQ291bnQoY29udGV4dCwgcmFuZ2UgPyBJREJLZXlSYW5nZURhdGEocmFu
Z2UpIDogSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Y291bnQi
KTsKLQotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJl
ZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwg
a2V5KTsKLSAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZh
bGlkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9y
OwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
Y291bnQnIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG9Db3VudChj
b250ZXh0LCBJREJLZXlSYW5nZURhdGEoaWRiS2V5LmdldCgpKSwgZWMpOwotfQotCi1SZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUu
aXNEZWxldGVkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9i
amVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBpZiAoIXJhbmdlLmlzVmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLm1vZGVyblRy
YW5zYWN0aW9uKCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7Ci0gICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9y
OwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
Y291bnQnIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5p
c2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
YW5zYWN0aW9uLnJlcXVlc3RDb3VudChjb250ZXh0LCAqdGhpcywgcmFuZ2UpOwotfQotCi1SZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdlLCBjb25zdCBTdHJpbmcm
IGRpcmVjdGlvblN0cmluZywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IiKTsKLQotICAgIGlmIChtX2Rl
bGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewotICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24g
J0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRl
ZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX29iamVj
dFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5LZXlD
dXJzb3InIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5p
c2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlv
bihkaXJlY3Rpb25TdHJpbmcsIGVjLmNvZGUpOwotICAgIGlmIChlYy5jb2RlKSB7Ci0gICAgICAg
IGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuS2V5Q3Vy
c29yJyBvbiAnSURCSW5kZXgnOiBUaGUgZGlyZWN0aW9uIHByb3ZpZGVkICgnaW52YWxpZC1kaXJl
Y3Rpb24nKSBpcyBub3Qgb25lIG9mICduZXh0JywgJ25leHR1bmlxdWUnLCAncHJldicsIG9yICdw
cmV2dW5pcXVlJy4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0
byBpbmZvID0gSURCQ3Vyc29ySW5mbzo6aW5kZXhDdXJzb3IobV9vYmplY3RTdG9yZS5tb2Rlcm5U
cmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCksIG1faW5mby5p
ZGVudGlmaWVyKCksIHJhbmdlLCBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5
T25seSk7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5yZXF1
ZXN0T3BlbkN1cnNvcihjb250ZXh0LCAqdGhpcywgaW5mbyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBT
dHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IiKTsKLSAgICBSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYy5j
b2RlKTsKLSAgICBpZiAoZWMuY29kZSkgewotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhl
IHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLSAgICByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5nZXQo
KSwgZGlyZWN0aW9uLCBlYyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJ
bmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiBy
YW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCSW5kZXg6OmdldCIpOwotCi0gICAgcmV0dXJuIGRvR2V0KGNvbnRleHQsIElEQktleVJh
bmdlRGF0YShyYW5nZSksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElE
QkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldCIpOwotCi0gICAgRE9NUmVxdWVzdFN0
YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0g
c2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOwotICAgIGlmICghaWRiS2V5
IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsKLSAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXQnIG9uICdJREJJbmRleCc6IFRo
ZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG9HZXQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlk
YktleS5nZXQoKSksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQklu
ZGV4Ojpkb0dldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlS
YW5nZURhdGEmIHJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIGlm
IChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewotICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURC
SW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAocmFuZ2UuaXNOdWxs
KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvJiB0cmFuc2FjdGlvbiA9
IG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9u
LmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
cmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVy
YWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXQnIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlv
biBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlcXVlc3RHZXRWYWx1ZShjb250ZXh0LCAq
dGhpcywgcmFuZ2UpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6
OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFu
Z2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQkluZGV4OjpnZXRLZXkiKTsKLQotICAgIHJldHVybiBkb0dldEtleShjb250ZXh0LCBJREJL
ZXlSYW5nZURhdGEocmFuZ2UpLCBlYyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYg
ZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXRLZXkiKTsKLQotICAgIERP
TVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+
IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKLSAgICBp
ZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7Ci0gICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAn
SURCSW5kZXgnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRvR2V0S2V5KGNvbnRleHQsIElE
QktleVJhbmdlRGF0YShpZGJLZXkuZ2V0KCkpLCBlYyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJ
REJSZXF1ZXN0PiBJREJJbmRleDo6ZG9HZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJiBlYykKLXsKLSAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVk
KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3Rh
dGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2dldEtleScgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3Rv
cmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgaWYgKHJhbmdlLmlzTnVsbCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgYXV0byYgdHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCk7
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAn
SURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiB0cmFuc2FjdGlvbi5y
ZXF1ZXN0R2V0S2V5KGNvbnRleHQsICp0aGlzLCByYW5nZSk7Ci19Ci0KLXZvaWQgSURCSW5kZXg6
Om1hcmtBc0RlbGV0ZWQoKQotewotICAgIEFTU0VSVCghbV9kZWxldGVkKTsKLSAgICBtX2RlbGV0
ZWQgPSB0cnVlOwotfQotCi12b2lkIElEQkluZGV4OjpyZWYoKQotewotICAgIG1fb2JqZWN0U3Rv
cmUucmVmKCk7Ci19Ci0KLXZvaWQgSURCSW5kZXg6OmRlcmVmKCkKLXsKLSAgICBtX29iamVjdFN0
b3JlLmRlcmVmKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBs
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMjQyNWUuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQklu
ZGV4SW1wbF9oCi0jZGVmaW5lIElEQkluZGV4SW1wbF9oCi0KLSNpbmNsdWRlICJJREJJbmRleC5o
IgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKLSNpbmNsdWRlICJJREJJbmRleEluZm8uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhOwotCi1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQot
Y2xhc3MgSURCT2JqZWN0U3RvcmU7Ci0KLWNsYXNzIElEQkluZGV4IDogcHVibGljIFdlYkNvcmU6
OklEQkluZGV4LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBJREJJbmRl
eChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCSW5kZXhJbmZvJiwgSURCT2JqZWN0
U3RvcmUmKTsKLQotICAgIHZpcnR1YWwgfklEQkluZGV4KCk7Ci0KLSAgICAvLyBJbXBsZW1lbnQg
dGhlIElETAotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoKSBmaW5hbDsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3Qg
SURCS2V5UGF0aCYga2V5UGF0aCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdW5pcXVlKCkgY29u
c3QgZmluYWw7Ci0gICAgYm9vbCBtdWx0aUVudHJ5KCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSBmaW5hbCB7IHJldHVybiBv
cGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVj
KTsgfQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykgZmluYWwgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBr
ZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQotICAgIFJlZlB0cjxX
ZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpIGZpbmFsIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJ
REJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdl
KiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZp
bmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25z
dCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0K
LSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFu
Z2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFs
OwotCi0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykg
ZmluYWwgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlS
YW5nZSo+KG51bGxwdHIpLCBlYyk7IH0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4g
b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5n
ZSoga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIGZpbmFsIHsgcmV0dXJu
IG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4
dCgpLCBlYyk7IH0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbktleUN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSBmaW5hbCB7IHJldHVy
biBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCks
IGVjKTsgfQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24s
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURC
UmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpIGZpbmFsOwotCi0gICAgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmZvOyB9Ci0KLSAgICBJREJPYmplY3RTdG9yZSYgbW9kZXJuT2JqZWN0U3RvcmUo
KSB7IHJldHVybiBtX29iamVjdFN0b3JlOyB9Ci0KLSAgICB2b2lkIG1hcmtBc0RlbGV0ZWQoKTsK
LSAgICBib29sIGlzRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQotCi0gICAg
Ym9vbCBpc01vZGVybigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZv
aWQgcmVmKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZXJlZigpIG92ZXJyaWRlOwotCi1wcml2YXRl
OgotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0NvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZG9HZXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0dldEtleShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJik7Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICBjb25zdCBjaGFyKiBh
Y3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBjYW5TdXNwZW5kRm9y
RG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdCBmaW5hbDsKLQotICAgIElEQkluZGV4SW5mbyBtX2luZm87Ci0KLSAgICBi
b29sIG1fZGVsZXRlZCB7IGZhbHNlIH07Ci0KLSAgICAvLyBJREJJbmRleCBvYmplY3RzIGFyZSBh
bHdheXMgb3duZWQgYnkgdGhlaXIgcmVmZXJlbmNpbmcgSURCT2JqZWN0U3RvcmUuCi0gICAgLy8g
SW5kZXhlcyB3aWxsIG5ldmVyIG91dGxpdmUgT2JqZWN0U3RvcmVzIHNvIGl0cyBva2F5IHRvIGtl
ZXAgYSByYXcgQysrIHJlZmVyZW5jZSBoZXJlLgotICAgIElEQk9iamVjdFN0b3JlJiBtX29iamVj
dFN0b3JlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50Ci19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJ
REJJbmRleEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZmEwYzg3Ni4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDY2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIklEQk9iamVjdFN0b3JlSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5n
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29ySW1wbC5oIgotI2luY2x1ZGUgIklEQkRh
dGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRXJyb3IuaCIKLSNpbmNsdWRlICJJREJJ
bmRleEltcGwuaCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZURh
dGEuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0SW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uSW1wbC5oIgotI2luY2x1ZGUgIkluZGV4ZWREQi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
LSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1SZWY8
SURCT2JqZWN0U3RvcmU+IElEQk9iamVjdFN0b3JlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCT2JqZWN0
U3RvcmUoY29udGV4dCwgaW5mbywgdHJhbnNhY3Rpb24pKTsKLX0KLQotSURCT2JqZWN0U3RvcmU6
OklEQk9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElE
Qk9iamVjdFN0b3JlSW5mbyYgaW5mbywgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotICAg
IDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQotICAgICwgbV9pbmZvKGluZm8pCi0gICAgLCBt
X29yaWdpbmFsSW5mbyhpbmZvKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLXsK
LSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKLX0KLQotSURCT2JqZWN0U3RvcmU6On5JREJPYmplY3RT
dG9yZSgpCi17Ci19Ci0KLWNvbnN0IGNoYXIqIElEQk9iamVjdFN0b3JlOjphY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIklEQk9iamVjdFN0b3JlIjsKLX0KLQotYm9v
bCBJREJPYmplY3RTdG9yZTo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElEQk9iamVjdFN0b3JlOjpoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV90cmFuc2FjdGlvbi0+aXNGaW5p
c2hlZCgpOwotfQotCi1jb25zdCBTdHJpbmcgSURCT2JqZWN0U3RvcmU6Om5hbWUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2luZm8ubmFtZSgpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCQW55
PiBJREJPYmplY3RTdG9yZTo6a2V5UGF0aEFueSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEQkFu
eTo6Y3JlYXRlKG1faW5mby5rZXlQYXRoKCkpOwotfQotCi1jb25zdCBJREJLZXlQYXRoIElEQk9i
amVjdFN0b3JlOjprZXlQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLmtleVBhdGgo
KTsKLX0KLQotUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVz
KCkgY29uc3QKLXsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0
cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5mby5pbmRleE5h
bWVzKCkpCi0gICAgICAgIGluZGV4TmFtZXMtPmFwcGVuZChuYW1lKTsKLSAgICBpbmRleE5hbWVz
LT5zb3J0KCk7Ci0KLSAgICByZXR1cm4gaW5kZXhOYW1lczsKLX0KLQotUmVmUHRyPFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uPiBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb24oKQotewotICAgIHJl
dHVybiAmbV90cmFuc2FjdGlvbi5nZXQoKTsKLX0KLQotYm9vbCBJREJPYmplY3RTdG9yZTo6YXV0
b0luY3JlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5mby5hdXRvSW5jcmVtZW50KCk7
Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0
PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykKLXsKLSAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vy
c29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJ
REJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0
cmluZywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IiKTsKLQotICAgIGlmIChtX2RlbGV0ZWQpIHsK
LSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J29wZW5DdXJzb3InIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJl
ZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lE
Qk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJREJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVj
dGlvblN0cmluZywgZWMuY29kZSk7Ci0gICAgaWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byBpbmZvID0gSURCQ3Vyc29ySW5mbzo6b2JqZWN0U3RvcmVDdXJz
b3IobV90cmFuc2FjdGlvbi5nZXQoKSwgbV9pbmZvLmlkZW50aWZpZXIoKSwgcmFuZ2UsIGRpcmVj
dGlvbik7Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1
ZXN0T3BlbkN1cnNvcihjb250ZXh0LCAqdGhpcywgaW5mbyk7Ci0gICAgcmV0dXJuIFdURk1vdmUo
cmVxdWVzdCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBpZiAo
ZWMuY29kZSkgewotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
ZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBp
cyBub3QgYSB2YWxpZCBrZXkuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJl
dHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24sIGVjKTsK
LX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCT2JqZWN0U3RvcmU6OmdldCIpOwotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5p
c0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNh
Y3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250
ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZy
ZXF1ZXN0U3RhdGUsIGtleSk7Ci0gICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0g
S2V5VHlwZTo6SW52YWxpZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBu
b3QgYSB2YWxpZCBrZXkuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFuc2FjdGlvbi0+cmVxdWVzdEdldFJlY29y
ZChjb250ZXh0LCAqdGhpcywgaWRiS2V5LmdldCgpKTsKLSAgICByZXR1cm4gV1RGTW92ZShyZXF1
ZXN0KTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpn
ZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdl
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJ
REJPYmplY3RTdG9yZTo6Z2V0Iik7Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlv
bkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlm
IChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9y
ZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBJREJLZXlSYW5nZURhdGEga2V5UmFuZ2VEYXRhKGtleVJhbmdlKTsKLSAgICBpZiAoIWtl
eVJhbmdlRGF0YS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFuc2FjdGlvbi0+cmVxdWVzdEdldFJlY29y
ZChjb250ZXh0LCAqdGhpcywga2V5UmFuZ2VEYXRhKTsKLSAgICByZXR1cm4gV1RGTW92ZShyZXF1
ZXN0KTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjph
ZGQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgcmV0dXJuIHB1dE9yQWRkKHN0YXRlLCB2YWx1ZSwg
bnVsbHB0ciwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRl
LCBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5OwotICAgIGlmICgha2V5Lmlz
VW5kZWZpbmVkKCkpCi0gICAgICAgIGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoZXhlY1N0
YXRlLCBrZXkpOwotICAgIHJldHVybiBwdXRPckFkZChleGVjU3RhdGUsIHZhbHVlLCBpZGJLZXks
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpOb092ZXJ3cml0ZSwgSW5saW5l
S2V5Q2hlY2s6OlBlcmZvcm0sIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpwdXQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVj
KQotewotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleTsKLSAgICBpZiAoIWtleS5pc1VuZGVmaW5l
ZCgpKQotICAgICAgICBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGV4ZWNTdGF0ZSwga2V5
KTsKLSAgICByZXR1cm4gcHV0T3JBZGQoZXhlY1N0YXRlLCB2YWx1ZSwgaWRiS2V5LCBJbmRleGVk
REI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlLCBJbmxpbmVLZXlDaGVjazo6
UGVyZm9ybSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICByZXR1cm4gcHV0T3JBZGQoc3RhdGUs
IHZhbHVlLCBudWxscHRyLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3Zl
cndyaXRlLCBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dEZvckN1cnNvclVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICByZXR1cm4gcHV0T3JBZGQoc3RhdGUsIHZhbHVlLCBz
Y3JpcHRWYWx1ZVRvSURCS2V5KHN0YXRlLCBrZXkpLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yLCBJbmxpbmVLZXlDaGVjazo6RG9Ob3RQZXJm
b3JtLCBlYyk7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3JB
ZGQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFJlZlB0cjxJREJL
ZXk+IGtleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9k
ZSwgSW5saW5lS2V5Q2hlY2sgaW5saW5lS2V5Q2hlY2ssIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpwdXRPckFkZCIp
OwotCi0gICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZlcmFsIElEQk9iamVjdFN0b3JlIG1ldGhv
ZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBleGNlcHRpb25zIHNob3VsZCBmaXJl
IGJlZm9yZQotICAgIC8vIHRoZSBleGNlcHRpb24gZm9yIGFuIG9iamVjdCBzdG9yZSBiZWluZyBk
ZWxldGVkLgotICAgIC8vIEhvd2V2ZXIsIGEgaGFuZGZ1bCBvZiBXM0MgSURCIHRlc3RzIGV4cGVj
dCB0aGUgZGVsZXRlZCBleGNlcHRpb24gZXZlbiB0aG91Z2ggdGhlIHRyYW5zYWN0aW9uIGluYWN0
aXZlIGV4Y2VwdGlvbiBhbHNvIGFwcGxpZXMuCi0gICAgLy8gQWRkaXRpb25hbGx5LCBDaHJvbWUg
YW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUgdGVzdCwgYXMgZG9lcyBMZWdhY3kgSURCIGluIFdlYktp
dC4KLSAgICAvLyBVbnRpbCB0aGlzIGlzIHNvcnRlZCBvdXQsIHdlJ2xsIGFncmVlIHdpdGggdGhl
IHRlc3QgYW5kIHRoZSBtYWpvcml0eSBzaGFyZSBicm93c2Vycy4KLSAgICBpZiAobV9kZWxldGVk
KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRl
RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9y
ZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4g
ZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFt
X3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0
b3JlOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRP
bmx5KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25s
eUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3Rv
cmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBUaGUgdHJhbnNhY3Rpb24gaXMgcmVhZC1v
bmx5LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZSgmc3RhdGUsIHZhbHVlLCBudWxscHRyLCBudWxscHRyKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgLy8gQ2xlYXIgdGhlIERPTSBleGNlcHRpb24g
ZnJvbSB0aGUgc2VyaWFsaXplciBzbyB3ZSBjYW4gZ2l2ZSBhIG1vcmUgdGFyZ2V0ZWQgZXhjZXB0
aW9uLgotICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigpOwotCi0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUNsb25lRXJyb3I7Ci0gICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0
U3RvcmU6IEFuIG9iamVjdCBjb3VsZCBub3QgYmUgY2xvbmVkLiIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoc2VyaWFsaXplZFZhbHVlLT5oYXNCbG9iVVJMcygp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKLSAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKLSAg
ICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBp
biBhbiBJREJPYmplY3RTdG9yZTogQmxvYlVSTHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5ICYmICFrZXktPmlz
VmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFF
cnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3Jl
IHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxp
ZCBrZXkuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGJvb2wgdXNl
c0lubGluZUtleXMgPSAhbV9pbmZvLmtleVBhdGgoKS5pc051bGwoKTsKLSAgICBib29sIHVzZXNL
ZXlHZW5lcmF0b3IgPSBhdXRvSW5jcmVtZW50KCk7Ci0gICAgaWYgKHVzZXNJbmxpbmVLZXlzICYm
IGlubGluZUtleUNoZWNrID09IElubGluZUtleUNoZWNrOjpQZXJmb3JtKSB7Ci0gICAgICAgIGlm
IChrZXkpIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0
YUVycm9yOwotICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIG9iamVjdCBzdG9yZSB1c2Vz
IGluLWxpbmUga2V5cyBhbmQgdGhlIGtleSBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkLiIpOwotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8SURC
S2V5PiBrZXlQYXRoS2V5ID0gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQ
YXRoKHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgoKSk7Ci0gICAgICAgIGlmIChrZXlQYXRo
S2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9y
ZTogRXZhbHVhdGluZyB0aGUgb2JqZWN0IHN0b3JlJ3Mga2V5IHBhdGggeWllbGRlZCBhIHZhbHVl
IHRoYXQgaXMgbm90IGEgdmFsaWQga2V5LiIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIGlm
ICh1c2VzS2V5R2VuZXJhdG9yKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYW5JbmplY3RJREJL
ZXlJbnRvU2NyaXB0VmFsdWUoc3RhdGUsIHZhbHVlLCBtX2luZm8ua2V5UGF0aCgpKSkgewotICAg
ICAgICAgICAgICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJv
cjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3Jl
OiBFdmFsdWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUncyBrZXkgcGF0aCBkaWQgbm90IHlpZWxkIGEg
dmFsdWUuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2V5UGF0aEtleSkgewotICAgICAgICAgICAgQVNT
RVJUKCFrZXkpOwotICAgICAgICAgICAga2V5ID0ga2V5UGF0aEtleTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoIXVzZXNLZXlHZW5lcmF0b3IgJiYgIWtleSkgewotICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9y
ZTogVGhlIG9iamVjdCBzdG9yZSB1c2VzIG91dC1vZi1saW5lIGtleXMgYW5kIGhhcyBubyBrZXkg
Z2VuZXJhdG9yIGFuZCB0aGUga2V5IHBhcmFtZXRlciB3YXMgbm90IHByb3ZpZGVkLiIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUpOwotICAgIGlmICghY29udGV4dCkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvcjsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0UHV0T3JBZGQoKmNvbnRleHQsICp0aGlzLCBr
ZXkuZ2V0KCksICpzZXJpYWxpemVkVmFsdWUsIG92ZXJ3cml0ZU1vZGUpOwotICAgIHJldHVybiBh
ZG9wdFJlZihyZXF1ZXN0LmxlYWtSZWYoKSk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmIGVjKQotewotICAgIHJldHVybiBkb0RlbGV0ZShjb250ZXh0LCBrZXlSYW5nZSwgZWMpOwot
fQotCi1SZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRvRGVsZXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3Rv
cmU6OmRlbGV0ZUZ1bmN0aW9uIik7Ci0KLSAgICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVyYWwg
SURCT2JqZWN0U3RvcmUgbWV0aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVkIGV4
Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVmb3JlCi0gICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3IgYW4g
b2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0ZWQuCi0gICAgLy8gSG93ZXZlciwgYSBoYW5kZnVsIG9m
IFczQyBJREIgdGVzdHMgZXhwZWN0IHRoZSBkZWxldGVkIGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0
aGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUgZXhjZXB0aW9uIGFsc28gYXBwbGllcy4KLSAgICAvLyBB
ZGRpdGlvbmFsbHksIENocm9tZSBhbmQgRWRnZSBhZ3JlZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2Vz
IExlZ2FjeSBJREIgaW4gV2ViS2l0LgotICAgIC8vIFVudGlsIHRoaXMgaXMgc29ydGVkIG91dCwg
d2UnbGwgYWdyZWUgd2l0aCB0aGUgdGVzdCBhbmQgdGhlIG1ham9yaXR5IHNoYXJlIGJyb3dzZXJz
LgotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhl
IG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJy
b3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2
ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
aWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyByZWFkLW9ubHkuIik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIElEQktleVJhbmdlRGF0YSBrZXlSYW5nZURhdGEoa2V5UmFuZ2Up
OwotICAgIGlmICgha2V5UmFuZ2VEYXRhLmlzVmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkgcmFuZ2UuIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90
cmFuc2FjdGlvbi0+cmVxdWVzdERlbGV0ZVJlY29yZChjb250ZXh0LCAqdGhpcywga2V5UmFuZ2VE
YXRhKTsKLSAgICByZXR1cm4gV1RGTW92ZShyZXF1ZXN0KTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIHJldHVybiBtb2Rlcm5EZWxldGUo
Y29udGV4dCwga2V5LmpzVmFsdWUoKSwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAg
IERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJL
ZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKLSAg
ICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7Ci0g
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBv
biAnSURCT2JqZWN0U3RvcmUnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRvRGVsZXRlKGNv
bnRleHQsICZJREJLZXlSYW5nZTo6Y3JlYXRlKGlkYktleS5nZXQoKSkuZ2V0KCksIGVjKTsKLX0K
LQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVhcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVj
KQotewotICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Y2xlYXIiKTsKLQotICAg
IC8vIFRoZSBJREIgc3BlYyBmb3Igc2V2ZXJhbCBJREJPYmplY3RTdG9yZSBtZXRob2RzIHN0YXRl
cyB0aGF0IHRyYW5zYWN0aW9uIHJlbGF0ZWQgZXhjZXB0aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUK
LSAgICAvLyB0aGUgZXhjZXB0aW9uIGZvciBhbiBvYmplY3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4K
LSAgICAvLyBIb3dldmVyLCBhIGhhbmRmdWwgb2YgVzNDIElEQiB0ZXN0cyBleHBlY3QgdGhlIGRl
bGV0ZWQgZXhjZXB0aW9uIGV2ZW4gdGhvdWdoIHRoZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZSBleGNl
cHRpb24gYWxzbyBhcHBsaWVzLgotICAgIC8vIEFkZGl0aW9uYWxseSwgQ2hyb21lIGFuZCBFZGdl
IGFncmVlIHdpdGggdGhlIHRlc3QsIGFzIGRvZXMgTGVnYWN5IElEQiBpbiBXZWJLaXQuCi0gICAg
Ly8gVW50aWwgdGhpcyBpcyBzb3J0ZWQgb3V0LCB3ZSdsbCBhZ3JlZSB3aXRoIHRoZSB0ZXN0IGFu
ZCB0aGUgbWFqb3JpdHkgc2hhcmUgYnJvd3NlcnMuCi0gICAgaWYgKG1fZGVsZXRlZCkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwot
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY2xl
YXInIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRl
ZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5z
YWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY2xlYXInIG9uICdJREJPYmplY3RTdG9yZSc6
IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHko
KSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJy
b3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdjbGVhcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIHJlYWQtb25s
eS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0Q2xlYXJPYmplY3RTdG9yZShjb250
ZXh0LCAqdGhpcyk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHJlcXVlc3QubGVha1JlZigpKTsKLX0K
LQotUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6
OmNyZWF0ZUluZGV4ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChtX2RlbGV0
ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3Rh
dGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3Jl
IGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4
JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJz
aW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIWtleVBhdGguaXNWYWxpZCgp
KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7
Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdj
cmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgY29u
dGFpbnMgYW4gaW52YWxpZCBrZXkgcGF0aC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IFR5cGVF
cnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1faW5mby5o
YXNJbmRleChuYW1lKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkNvbnN0cmFpbnRFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBBbiBpbmRl
eCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWRE
Qjo6S2V5UGF0aFR5cGU6OkFycmF5ICYmIG11bHRpRW50cnkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7Ci0gICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgd2FzIGFuIGFycmF5IGFuZCB0
aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMgdHJ1ZS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgLy8gSW5zdGFsbCB0aGUgbmV3IEluZGV4IGludG8gdGhlIE9iamVjdFN0
b3JlJ3MgaW5mby4KLSAgICBJREJJbmRleEluZm8gaW5mbyA9IG1faW5mby5jcmVhdGVOZXdJbmRl
eChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnkpOwotICAgIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuZGlkQ3JlYXRlSW5kZXhJbmZvKGluZm8pOwotCi0gICAgLy8gQ3JlYXRlIHRo
ZSBhY3R1YWwgSURCT2JqZWN0U3RvcmUgZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdoaWNoIGFsc28g
c2NoZWR1bGVzIHRoZSBvcGVyYXRpb24gc2VydmVyIHNpZGUuCi0gICAgYXV0byBpbmRleCA9IG1f
dHJhbnNhY3Rpb24tPmNyZWF0ZUluZGV4KCp0aGlzLCBpbmZvKTsKLSAgICBSZWZQdHI8SURCSW5k
ZXg+IHJlZkluZGV4ID0gaW5kZXguZ2V0KCk7Ci0KLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1f
cmVmZXJlbmNlZEluZGV4TG9jayk7Ci0gICAgbV9yZWZlcmVuY2VkSW5kZXhlcy5zZXQobmFtZSwg
V1RGTW92ZShpbmRleCkpOwotCi0gICAgcmV0dXJuIFdURk1vdmUocmVmSW5kZXgpOwotfQotCi1S
ZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJp
bmcmIGluZGV4TmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0co
SW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmluZGV4Iik7Ci0KLSAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobV9k
ZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxp
ZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdpbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBpZiAobV90cmFuc2FjdGlvbi0+aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpIHsKLSAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBv
biAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQuIik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9y
ZWZlcmVuY2VkSW5kZXhMb2NrKTsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZlcmVuY2VkSW5k
ZXhlcy5maW5kKGluZGV4TmFtZSk7Ci0gICAgaWYgKGl0ZXJhdG9yICE9IG1fcmVmZXJlbmNlZElu
ZGV4ZXMuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci0KLSAg
ICBhdXRvKiBpbmZvID0gbV9pbmZvLmluZm9Gb3JFeGlzdGluZ0luZGV4KGluZGV4TmFtZSk7Ci0g
ICAgaWYgKCFpbmZvKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tm90Rm91bmRFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGlu
ZGV4IHdhcyBub3QgZm91bmQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIGF1dG8gaW5kZXggPSBzdGQ6Om1ha2VfdW5pcXVlPElEQkluZGV4Pigqc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLCAqaW5mbywgKnRoaXMpOwotICAgIFJlZlB0cjxJREJJbmRleD4gcmVmSW5k
ZXggPSBpbmRleC5nZXQoKTsKLSAgICBtX3JlZmVyZW5jZWRJbmRleGVzLnNldChpbmRleE5hbWUs
IFdURk1vdmUoaW5kZXgpKTsKLQotICAgIHJldHVybiByZWZJbmRleDsKLX0KLQotdm9pZCBJREJP
YmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6
ZGVsZXRlSW5kZXggJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKG1fZGVsZXRl
ZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0
ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnZGVsZXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUg
aGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURC
T2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5n
ZSB0cmFuc2FjdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV90
cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURCT2Jq
ZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1faW5mby5oYXNJbmRleChuYW1lKSkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7
Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdk
ZWxldGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHNwZWNpZmllZCBpbmRleCB3YXMg
bm90IGZvdW5kLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogaW5mbyA9
IG1faW5mby5pbmZvRm9yRXhpc3RpbmdJbmRleChuYW1lKTsKLSAgICBBU1NFUlQoaW5mbyk7Ci0g
ICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5kaWREZWxldGVJbmRleEluZm8oKmluZm8pOwot
Ci0gICAgbV9pbmZvLmRlbGV0ZUluZGV4KG5hbWUpOwotCi0gICAgewotICAgICAgICBMb2NrZXI8
TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7Ci0gICAgICAgIGlmIChhdXRvIGlu
ZGV4ID0gbV9yZWZlcmVuY2VkSW5kZXhlcy50YWtlKG5hbWUpKSB7Ci0gICAgICAgICAgICBpbmRl
eC0+bWFya0FzRGVsZXRlZCgpOwotICAgICAgICAgICAgbV9kZWxldGVkSW5kZXhlcy5hZGQoV1RG
TW92ZShpbmRleCkpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5k
ZWxldGVJbmRleChtX2luZm8uaWRlbnRpZmllcigpLCBuYW1lKTsKLX0KLQotUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Y291bnQiKTsKLQotICAgIHJldHVybiBkb0NvdW50
KGNvbnRleHQsIElEQktleVJhbmdlRGF0YTo6YWxsS2V5cygpLCBlYyk7Ci19Ci0KLVJlZlB0cjxX
ZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT2Jq
ZWN0U3RvcmU6OmNvdW50Iik7Ci0KLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZj
b250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5
KCZyZXF1ZXN0U3RhdGUsIGtleSk7Ci0gICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkg
PT0gS2V5VHlwZTo6SW52YWxpZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgcGFyYW1ldGVy
IGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGRvQ291bnQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQo
KSksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFu
Z2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQk9iamVjdFN0b3JlOjpjb3VudCIpOwotCi0gICAgcmV0dXJuIGRvQ291bnQoY29udGV4dCwg
cmFuZ2UgPyBJREJLZXlSYW5nZURhdGEocmFuZ2UpIDogSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlz
KCksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
Ojpkb0NvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgLy8g
VGhlIElEQiBzcGVjIGZvciBzZXZlcmFsIElEQk9iamVjdFN0b3JlIG1ldGhvZHMgc3RhdGVzIHRo
YXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBleGNlcHRpb25zIHNob3VsZCBmaXJlIGJlZm9yZQotICAg
IC8vIHRoZSBleGNlcHRpb24gZm9yIGFuIG9iamVjdCBzdG9yZSBiZWluZyBkZWxldGVkLgotICAg
IC8vIEhvd2V2ZXIsIGEgaGFuZGZ1bCBvZiBXM0MgSURCIHRlc3RzIGV4cGVjdCB0aGUgZGVsZXRl
ZCBleGNlcHRpb24gZXZlbiB0aG91Z2ggdGhlIHRyYW5zYWN0aW9uIGluYWN0aXZlIGV4Y2VwdGlv
biBhbHNvIGFwcGxpZXMuCi0gICAgLy8gQWRkaXRpb25hbGx5LCBDaHJvbWUgYW5kIEVkZ2UgYWdy
ZWUgd2l0aCB0aGUgdGVzdCwgYXMgZG9lcyBMZWdhY3kgSURCIGluIFdlYktpdC4KLSAgICAvLyBV
bnRpbCB0aGlzIGlzIHNvcnRlZCBvdXQsIHdlJ2xsIGFncmVlIHdpdGggdGhlIHRlc3QgYW5kIHRo
ZSBtYWpvcml0eSBzaGFyZSBicm93c2Vycy4KLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcg
b24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rp
b24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhl
IHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIXJhbmdlLmlzVmFsaWQoKSkgewotICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RDb3Vu
dChjb250ZXh0LCAqdGhpcywgcmFuZ2UpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlOjptYXJr
QXNEZWxldGVkKCkKLXsKLSAgICBtX2RlbGV0ZWQgPSB0cnVlOwotfQotCi12b2lkIElEQk9iamVj
dFN0b3JlOjpyb2xsYmFja0luZm9Gb3JWZXJzaW9uQ2hhbmdlQWJvcnQoKQotewotICAgIG1faW5m
byA9IG1fb3JpZ2luYWxJbmZvOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVy
ZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci17Ci0gICAgTG9j
a2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExvY2spOwotICAgIGZvciAoYXV0byYg
aW5kZXggOiBtX3JlZmVyZW5jZWRJbmRleGVzLnZhbHVlcygpKQotICAgICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQK
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQk9iamVjdFN0b3JlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAzMDZiMTUwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJPYmplY3RTdG9yZUltcGxfaAotI2RlZmluZSBJ
REJPYmplY3RTdG9yZUltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJJREJJbmRleEltcGwuaCIKLSNp
bmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW5mby5o
IgotI2luY2x1ZGUgIkluZGV4ZWREQi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IElEQktleTsKLQotc3RydWN0IElEQktleVJhbmdlRGF0YTsKLQotbmFtZXNwYWNlIElEQkNsaWVu
dCB7Ci0KLWNsYXNzIElEQlJlcXVlc3Q7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsKLQotY2xhc3Mg
SURCT2JqZWN0U3RvcmUgOiBwdWJsaWMgV2ViQ29yZTo6SURCT2JqZWN0U3RvcmUsIHB1YmxpYyBB
Y3RpdmVET01PYmplY3QgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT2JqZWN0U3RvcmU+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZv
JiwgSURCVHJhbnNhY3Rpb24mKTsKLQotICAgIH5JREJPYmplY3RTdG9yZSgpIGZpbmFsOwotCi0g
ICAgLy8gSW1wbGVtZW50IHRoZSBJREJPYmplY3RTdG9yZSBJREwKLSAgICBjb25zdCBTdHJpbmcg
bmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IGtleVBhdGhB
bnkoKSBjb25zdCBmaW5hbDsKLSAgICBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25zdCBm
aW5hbDsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0IGZpbmFs
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBmaW5h
bDsKLSAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZlB0cjxX
ZWJDb3JlOjpJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJS
ZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVu
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJh
bmdlKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
IGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBj
b25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGdldChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gYWRkKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gcHV0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBm
aW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29s
IG11bHRpRW50cnksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpJREJJbmRleD4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+
IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLQotICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiBwdXRGb3JDdXJzb3JVcGRhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiBtb2Rlcm5EZWxldGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotCi0gICAgdm9p
ZCBtYXJrQXNEZWxldGVkKCk7Ci0gICAgYm9vbCBpc0RlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBt
X2RlbGV0ZWQ7IH0KLQotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbygpIGNvbnN0
IHsgcmV0dXJuIG1faW5mbzsgfQotCi0gICAgLy8gRklYTUU6IEFmdGVyIHJlbW92aW5nIExlZ2Fj
eUlEQiBhbmQgZm9sZGluZyBhYnN0cmFjdC9pbXBsZW1lbnRhdGlvbiBjbGFzc2VzIHRvZ2V0aGVy
LAotICAgIC8vIHRoaXMgd2lsbCBubyBsb25nZXIgYmUgbmVjZXNzYXJ5LgotICAgIElEQlRyYW5z
YWN0aW9uJiBtb2Rlcm5UcmFuc2FjdGlvbigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7
IH0KLQotICAgIHZvaWQgcm9sbGJhY2tJbmZvRm9yVmVyc2lvbkNoYW5nZUFib3J0KCk7Ci0KLSAg
ICBib29sIGlzTW9kZXJuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
dm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBJREJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgSURCVHJhbnNhY3Rpb24mKTsKLQotICAgIGVudW0gY2xh
c3MgSW5saW5lS2V5Q2hlY2sgewotICAgICAgICBQZXJmb3JtLAotICAgICAgICBEb05vdFBlcmZv
cm0sCi0gICAgfTsKLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBwdXRPckFkZChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPElEQktleT4sIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjaywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
Jik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRvQ291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBkb0RlbGV0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKLQotICAg
IC8vIEFjdGl2ZURPTU9iamVjdAotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUo
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24o
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFs
OwotCi0gICAgSURCT2JqZWN0U3RvcmVJbmZvIG1faW5mbzsKLSAgICBJREJPYmplY3RTdG9yZUlu
Zm8gbV9vcmlnaW5hbEluZm87Ci0gICAgUmVmPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9u
OwotCi0gICAgYm9vbCBtX2RlbGV0ZWQgeyBmYWxzZSB9OwotCi0gICAgbXV0YWJsZSBMb2NrIG1f
cmVmZXJlbmNlZEluZGV4TG9jazsKLSAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRy
PElEQkluZGV4Pj4gbV9yZWZlcmVuY2VkSW5kZXhlczsKLSAgICBIYXNoU2V0PHN0ZDo6dW5pcXVl
X3B0cjxJREJJbmRleD4+IG1fZGVsZXRlZEluZGV4ZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJ
REJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlSW1wbF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT3BlbkRCUmVxdWVz
dEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9w
ZW5EQlJlcXVlc3RJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNmNDBm
YS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCT3BlbkRCUmVxdWVzdEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCT3BlbkRCUmVx
dWVzdEltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAi
SURCRGF0YWJhc2VJbXBsLmgiCi0jaW5jbHVkZSAiSURCRXJyb3IuaCIKLSNpbmNsdWRlICJJREJS
ZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgotI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VF
dmVudEltcGwuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1SZWY8SURCT3BlbkRCUmVxdWVzdD4gSURCT3BlbkRC
UmVxdWVzdDo6Y3JlYXRlRGVsZXRlUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5l
Y3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYgZGF0YWJhc2VJZGVudGlmaWVyKQotewotICAgIEFTU0VSVChkYXRhYmFzZUlk
ZW50aWZpZXIuaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJPcGVuREJS
ZXF1ZXN0KGNvbm5lY3Rpb24sIGNvbnRleHQsIGRhdGFiYXNlSWRlbnRpZmllciwgMCwgSW5kZXhl
ZERCOjpSZXF1ZXN0VHlwZTo6RGVsZXRlKSk7Ci19Ci0KLVJlZjxJREJPcGVuREJSZXF1ZXN0PiBJ
REJPcGVuREJSZXF1ZXN0OjpjcmVhdGVPcGVuUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXIm
IGNvbm5lY3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYgZGF0YWJhc2VJZGVudGlmaWVyLCB1aW50NjRfdCB2ZXJzaW9uKQot
ewotICAgIEFTU0VSVChkYXRhYmFzZUlkZW50aWZpZXIuaXNWYWxpZCgpKTsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBJREJPcGVuREJSZXF1ZXN0KGNvbm5lY3Rpb24sIGNvbnRleHQsIGRhdGFi
YXNlSWRlbnRpZmllciwgdmVyc2lvbiwgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZTo6T3BlbikpOwot
fQotICAgIAotSURCT3BlbkRCUmVxdWVzdDo6SURCT3BlbkRCUmVxdWVzdChJREJDb25uZWN0aW9u
VG9TZXJ2ZXImIGNvbm5lY3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgZGF0YWJhc2VJZGVudGlmaWVyLCB1aW50NjRfdCB2
ZXJzaW9uLCBJbmRleGVkREI6OlJlcXVlc3RUeXBlIHJlcXVlc3RUeXBlKQotICAgIDogSURCUmVx
dWVzdChjb25uZWN0aW9uLCBjb250ZXh0KQotICAgICwgbV9kYXRhYmFzZUlkZW50aWZpZXIoZGF0
YWJhc2VJZGVudGlmaWVyKQotICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCi17Ci0gICAgbV9yZXF1
ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOwotfQotCi1JREJPcGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRC
UmVxdWVzdCgpCi17Ci19Ci0KLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25FcnJvcihjb25zdCBJ
REJSZXN1bHREYXRhJiBkYXRhKQotewotICAgIG1fZG9tRXJyb3IgPSBET01FcnJvcjo6Y3JlYXRl
KGRhdGEuZXJyb3IoKS5uYW1lKCkpOwotICAgIGVucXVldWVFdmVudChJREJSZXF1ZXN0Q29tcGxl
dGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUsICp0
aGlzKSk7Ci19Ci0KLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6dmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uRGlkRmluaXNoKCkKLXsKLSAgICAvLyAzLjMuNyAidmVyc2lvbmNoYW5nZSIgdHJhbnNhY3Rp
b24gc3RlcHMKLSAgICAvLyBXaGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgYWZ0ZXIg
ZmlyaW5nIGNvbXBsZXRlL2Fib3J0IG9uIHRoZSB0cmFuc2FjdGlvbiwgaW1tZWRpYXRlbHkgc2V0
IHJlcXVlc3QncyB0cmFuc2FjdGlvbiBwcm9wZXJ0eSB0byBudWxsLgotICAgIG1fc2hvdWxkRXhw
b3NlVHJhbnNhY3Rpb25Ub0RPTSA9IGZhbHNlOwotfQotCi12b2lkIElEQk9wZW5EQlJlcXVlc3Q6
OmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tbWl0KCkKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6ZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21t
aXQoKSIpOwotCi0gICAgQVNTRVJUKGhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKLSAgICBBU1NFUlQo
bV9yZXN1bHQpOwotICAgIEFTU0VSVChtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6
SURCRGF0YWJhc2UpOwotICAgIG1fdHJhbnNhY3Rpb24tPmFkZFJlcXVlc3QoKnRoaXMpOwotCi0g
ICAgYXV0byBldmVudCA9IElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UsICp0aGlzKTsKLSAgICBtX29wZW5EYXRh
YmFzZVN1Y2Nlc3NFdmVudCA9ICZldmVudC5nZXQoKTsKLQotICAgIGVucXVldWVFdmVudChXVEZN
b3ZlKGV2ZW50KSk7Ci19Ci0KLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJW
ZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5E
QlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKSIpOwotCi0g
ICAgQVNTRVJUKGhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKLQotICAgIElEQkVycm9yIGlkYkVycm9y
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKTsKLSAgICBtX2RvbUVycm9yID0gRE9N
RXJyb3I6OmNyZWF0ZShpZGJFcnJvci5uYW1lKCkpOwotICAgIG1fcmVzdWx0ID0gSURCQW55Ojpj
cmVhdGVVbmRlZmluZWQoKTsKLQotICAgIG1fdHJhbnNhY3Rpb24tPmFkZFJlcXVlc3QoKnRoaXMp
OwotICAgIGVucXVldWVFdmVudChJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUsICp0aGlzKSk7Ci19Ci0KLWJvb2wgSURC
T3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCi17Ci0gICAgYm9vbCBy
ZXN1bHQgPSBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKLQotICAgIGlmIChtX3Ry
YW5zYWN0aW9uICYmIG1fdHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpICYmIChldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS5zdWNjZXNzRXZlbnQpKQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kaWRGaW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbigqbV90cmFuc2FjdGlvbik7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIElE
Qk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRh
KQotewotICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpvblN1Y2Nlc3MoKSIp
OwotCi0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlZjxJREJEYXRhYmFzZT4gZGF0YWJhc2UgPSBJREJEYXRhYmFzZTo6Y3JlYXRlKCpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNvbm5lY3Rpb24oKSwgcmVzdWx0RGF0YSk7Ci0gICAg
bV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKGRhdGFiYXNlKSk7Ci0gICAgbV9yZWFk
eVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7Ci0KLSAgICBlbnF1ZXVlRXZlbnQo
SURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZl
bnQsIGZhbHNlLCBmYWxzZSwgKnRoaXMpKTsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0Ojpv
blVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBS
ZWY8SURCRGF0YWJhc2U+IGRhdGFiYXNlID0gSURCRGF0YWJhc2U6OmNyZWF0ZSgqc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBjb25uZWN0aW9uKCksIHJlc3VsdERhdGEpOwotICAgIFJlZjxJREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBkYXRhYmFzZS0+c3RhcnRWZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24ocmVzdWx0RGF0YS50cmFuc2FjdGlvbkluZm8oKSwgKnRoaXMpOwotCi0gICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5pbmZvKCkubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlOjpWZXJzaW9uQ2hhbmdlKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm9yaWdpbmFsRGF0
YWJhc2VJbmZvKCkpOwotCi0gICAgdWludDY0X3Qgb2xkVmVyc2lvbiA9IHRyYW5zYWN0aW9uLT5v
cmlnaW5hbERhdGFiYXNlSW5mbygpLT52ZXJzaW9uKCk7Ci0gICAgdWludDY0X3QgbmV3VmVyc2lv
biA9IHRyYW5zYWN0aW9uLT5pbmZvKCkubmV3VmVyc2lvbigpOwotCi0gICAgTE9HKEluZGV4ZWRE
QiwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZCgpIC0gY3VycmVudCB2ZXJzaW9u
IGlzICUiIFBSSXU2NCAiLCBuZXcgaXMgJSIgUFJJdTY0LCBvbGRWZXJzaW9uLCBuZXdWZXJzaW9u
KTsKLQotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoV1RGTW92ZShkYXRhYmFzZSkpOwot
ICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lOwotICAgIG1fdHJh
bnNhY3Rpb24gPSBhZG9wdFJlZigmdHJhbnNhY3Rpb24ubGVha1JlZigpKTsKLSAgICBtX3RyYW5z
YWN0aW9uLT5hZGRSZXF1ZXN0KCp0aGlzKTsKLQotICAgIGVucXVldWVFdmVudChJREJWZXJzaW9u
Q2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCku
dXBncmFkZW5lZWRlZEV2ZW50KSk7Ci19Ci0KLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25EZWxl
dGVEYXRhYmFzZVN1Y2Nlc3MoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAg
ICB1aW50NjRfdCBvbGRWZXJzaW9uID0gcmVzdWx0RGF0YS5kYXRhYmFzZUluZm8oKS52ZXJzaW9u
KCk7Ci0KLSAgICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6b25EZWxldGVEYXRh
YmFzZVN1Y2Nlc3MoKSAtIGN1cnJlbnQgdmVyc2lvbiBpcyAlIiBQUkl1NjQsIG9sZFZlcnNpb24p
OwotCi0gICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7Ci0gICAg
bV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZVVuZGVmaW5lZCgpOwotCi0gICAgZW5xdWV1ZUV2ZW50
KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIDAsIGV2ZW50TmFtZXMo
KS5zdWNjZXNzRXZlbnQpKTsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0Q29t
cGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQiKTsKLQotICAgIC8vIElmIGFuIE9w
ZW4gcmVxdWVzdCB3YXMgY29tcGxldGVkIGFmdGVyIHRoZSBwYWdlIGhhcyBuYXZpZ2F0ZWQsIGxl
YXZpbmcgdGhpcyByZXF1ZXN0Ci0gICAgLy8gd2l0aCBhIHN0b3BwZWQgc2NyaXB0IGV4ZWN1dGlv
biBjb250ZXh0LCB3ZSBuZWVkIHRvIG1lc3NhZ2UgYmFjayB0byB0aGUgc2VydmVyIHNvIGl0Ci0g
ICAgLy8gZG9lc24ndCBoYW5nIHdhaXRpbmcgb24gYSBkYXRhYmFzZSBjb25uZWN0aW9uIG9yIHRy
YW5zYWN0aW9uIHRoYXQgd2lsbCBuZXZlciBleGlzdC4KLSAgICBpZiAobV9jb250ZXh0U3RvcHBl
ZCkgewotICAgICAgICBzd2l0Y2ggKGRhdGEudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSURCUmVz
dWx0VHlwZTo6T3BlbkRhdGFiYXNlU3VjY2VzczoKLSAgICAgICAgICAgIGNvbm5lY3Rpb24oKS5h
Ym9ydE9wZW5BbmRVcGdyYWRlTmVlZGVkKGRhdGEuZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmll
cigpLCBJREJSZXNvdXJjZUlkZW50aWZpZXI6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJREJSZXN1bHRUeXBlOjpPcGVuRGF0YWJhc2VVcGdyYWRlTmVl
ZGVkOgotICAgICAgICAgICAgY29ubmVjdGlvbigpLmFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQo
ZGF0YS5kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKCksIGRhdGEudHJhbnNhY3Rpb25JbmZv
KCkuaWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc3dpdGNoIChkYXRhLnR5cGUoKSkgewotICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6RXJy
b3I6Ci0gICAgICAgIG9uRXJyb3IoZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURC
UmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNlU3VjY2VzczoKLSAgICAgICAgb25TdWNjZXNzKGRhdGEp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEQlJlc3VsdFR5cGU6Ok9wZW5EYXRhYmFzZVVw
Z3JhZGVOZWVkZWQ6Ci0gICAgICAgIG9uVXBncmFkZU5lZWRlZChkYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJREJSZXN1bHRUeXBlOjpEZWxldGVEYXRhYmFzZVN1Y2Nlc3M6Ci0gICAg
ICAgIG9uRGVsZXRlRGF0YWJhc2VTdWNjZXNzKGRhdGEpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0QmxvY2tlZCh1aW50NjRfdCBvbGRWZXJz
aW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJPcGVu
REJSZXF1ZXN0OjpyZXF1ZXN0QmxvY2tlZCIpOwotICAgIGVucXVldWVFdmVudChJREJWZXJzaW9u
Q2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCku
YmxvY2tlZEV2ZW50KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT3BlbkRC
UmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJPcGVuREJSZXF1ZXN0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTgw
NGMxLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJPcGVuREJSZXF1ZXN0SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSURCT3BlbkRCUmVxdWVzdEltcGxfaAotI2RlZmluZSBJREJP
cGVuREJSZXF1ZXN0SW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2lu
Y2x1ZGUgIkRPTUVycm9yLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCi0j
aW5jbHVkZSAiSURCUmVxdWVzdEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJREJEYXRhYmFzZUlkZW50aWZpZXI7Ci0KLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1jbGFz
cyBJREJDb25uZWN0aW9uVG9TZXJ2ZXI7Ci0KLWNsYXNzIElEQk9wZW5EQlJlcXVlc3QgOiBwdWJs
aWMgSURCUmVxdWVzdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVuREJSZXF1ZXN0
PiBjcmVhdGVEZWxldGVSZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICBzdGF0aWMg
UmVmPElEQk9wZW5EQlJlcXVlc3Q+IGNyZWF0ZU9wZW5SZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImLCB1aW50NjRfdCB2ZXJzaW9uKTsKLQotICAgIH5JREJPcGVuREJSZXF1ZXN0KCkgZmluYWw7
Ci0gICAgCi0gICAgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlSWRlbnRpZmllcjsgfQotICAgIHVpbnQ2NF90
IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KLQotICAgIHZvaWQgcmVxdWVz
dENvbXBsZXRlZChjb25zdCBJREJSZXN1bHREYXRhJik7Ci0gICAgdm9pZCByZXF1ZXN0QmxvY2tl
ZCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKTsKLQotICAgIHZvaWQg
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlkRmluaXNoKCk7Ci0gICAgdm9pZCBmaXJlU3VjY2Vz
c0FmdGVyVmVyc2lvbkNoYW5nZUNvbW1pdCgpOwotICAgIHZvaWQgZmlyZUVycm9yQWZ0ZXJWZXJz
aW9uQ2hhbmdlQ29tcGxldGlvbigpOwotCi0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikg
ZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgSURCT3BlbkRCUmVxdWVzdChJREJDb25uZWN0aW9uVG9T
ZXJ2ZXImLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlm
aWVyJiwgdWludDY0X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZSk7Ci0KLSAgICB2
b2lkIG9uRXJyb3IoY29uc3QgSURCUmVzdWx0RGF0YSYpOwotICAgIHZvaWQgb25TdWNjZXNzKGNv
bnN0IElEQlJlc3VsdERhdGEmKTsKLSAgICB2b2lkIG9uVXBncmFkZU5lZWRlZChjb25zdCBJREJS
ZXN1bHREYXRhJik7Ci0gICAgdm9pZCBvbkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJS
ZXN1bHREYXRhJik7Ci0KLSAgICBib29sIGlzT3BlbkRCUmVxdWVzdCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2RhdGFiYXNl
SWRlbnRpZmllcjsKLSAgICB1aW50NjRfdCBtX3ZlcnNpb24geyAwIH07Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQk9wZW5EQlJlcXVlc3RJbXBsX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJS
ZXF1ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCUmVxdWVzdEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDJhNzQy
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJSZXF1ZXN0SW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0SW1wbC5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJET01SZXF1ZXN0U3Rh
dGUuaCIKLSNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxp
dGllcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUg
IklEQktleURhdGEuaCIKLSNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJU
aHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotUmVmPElEQlJl
cXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
bikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIG9iamVj
dFN0b3JlLCB0cmFuc2FjdGlvbikpOwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkN1cnNvciYgY3Vyc29y
LCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCUmVxdWVzdChjb250ZXh0LCBjdXJzb3IsIHRyYW5zYWN0aW9uKSk7Ci19Ci0KLVJlZjxJ
REJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGVDb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIGluZGV4LCB0
cmFuc2FjdGlvbikpOwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlR2V0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUgcmVxdWVzdGVkUmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlJlcXVlc3QoY29u
dGV4dCwgaW5kZXgsIHJlcXVlc3RlZFJlY29yZFR5cGUsIHRyYW5zYWN0aW9uKSk7Ci19Ci0KLUlE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoSURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQotICAgIDogSURCT3BlbkRCUmVxdWVzdChj
b250ZXh0KQotICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCi0gICAgLCBtX3Jlc291cmNl
SWRlbnRpZmllcihjb25uZWN0aW9uKQotewotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwotfQotCi1J
REJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
Qk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQot
ICAgIDogSURCT3BlbkRCUmVxdWVzdChjb250ZXh0KQotICAgICwgbV90cmFuc2FjdGlvbigmdHJh
bnNhY3Rpb24pCi0gICAgLCBtX2Nvbm5lY3Rpb24odHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlv
bigpKQotICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNhY3Rpb24uc2VydmVyQ29ubmVj
dGlvbigpKQotICAgICwgbV9zb3VyY2UoSURCQW55OjpjcmVhdGUob2JqZWN0U3RvcmUpKQotewot
ICAgIHN1c3BlbmRJZk5lZWRlZCgpOwotfQotCi1JREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkN1cnNvciYgY3Vyc29yLCBJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24pCi0gICAgOiBJREJPcGVuREJSZXF1ZXN0KGNvbnRleHQpCi0gICAg
LCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKLSAgICAsIG1fY29ubmVjdGlvbih0cmFuc2Fj
dGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCi0gICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFu
c2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCi0gICAgLCBtX3NvdXJjZShjdXJzb3Iuc291cmNl
KCkpCi0gICAgLCBtX3BlbmRpbmdDdXJzb3IoJmN1cnNvcikKLXsKLSAgICBzdXNwZW5kSWZOZWVk
ZWQoKTsKLQotICAgIGN1cnNvci5zZXRSZXF1ZXN0KCp0aGlzKTsKLX0KLQotSURCUmVxdWVzdDo6
SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5k
ZXgsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLSAgICA6IElEQk9wZW5EQlJlcXVlc3Qo
Y29udGV4dCkKLSAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQotICAgICwgbV9jb25u
ZWN0aW9uKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKLSAgICAsIG1fcmVzb3VyY2VJ
ZGVudGlmaWVyKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKLSAgICAsIG1fc291cmNl
KElEQkFueTo6Y3JlYXRlKGluZGV4KSkKLXsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKLX0KLQot
SURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJ
REJJbmRleCYgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlcXVlc3RlZFJlY29y
ZFR5cGUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLSAgICA6IElEQlJlcXVlc3QoY29u
dGV4dCwgaW5kZXgsIHRyYW5zYWN0aW9uKQotewotICAgIG1fcmVxdWVzdGVkSW5kZXhSZWNvcmRU
eXBlID0gcmVxdWVzdGVkUmVjb3JkVHlwZTsKLX0KLQotSURCUmVxdWVzdDo6fklEQlJlcXVlc3Qo
KQotewotICAgIGlmIChtX3Jlc3VsdCkgewotICAgICAgICBhdXRvIHR5cGUgPSBtX3Jlc3VsdC0+
dHlwZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvciB8fCB0
eXBlID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlKQotICAgICAgICAgICAgbV9y
ZXN1bHQtPm1vZGVybklEQkN1cnNvcigpLT5jbGVhclJlcXVlc3QoKTsKLSAgICB9Ci19Ci0KLVJl
ZlB0cjxXZWJDb3JlOjpJREJBbnk+IElEQlJlcXVlc3Q6OnJlc3VsdChFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVz
dFJlYWR5U3RhdGU6OkRvbmUpCi0gICAgICAgIHJldHVybiBtX3Jlc3VsdDsKLQotICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHJlYWQgdGhlICdyZXN1bHQnIHByb3BlcnR5
IGZyb20gJ0lEQlJlcXVlc3QnOiBUaGUgcmVxdWVzdCBoYXMgbm90IGZpbmlzaGVkLiIpOwotICAg
IHJldHVybiBudWxscHRyOwotfQotCi11bnNpZ25lZCBzaG9ydCBJREJSZXF1ZXN0OjplcnJvckNv
ZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVJlZlB0cjxE
T01FcnJvcj4gSURCUmVxdWVzdDo6ZXJyb3IoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykg
Y29uc3QKLXsKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpE
b25lKQotICAgICAgICByZXR1cm4gbV9kb21FcnJvcjsKLQotICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHJlYWQgdGhlICdlcnJvcicgcHJvcGVydHkgZnJvbSAnSURCUmVx
dWVzdCc6IFRoZSByZXF1ZXN0IGhhcyBub3QgZmluaXNoZWQuIik7Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IElEQlJlcXVlc3Q6OnNvdXJjZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc291cmNlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldFNv
dXJjZShJREJDdXJzb3ImIGN1cnNvcikKLXsKLSAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5v
dGlmaWVyKTsKLQotICAgIG1fc291cmNlID0gSURCQW55OjpjcmVhdGUoY3Vyc29yKTsKLSAgICBt
X2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVHdWFyZD4oW3Ro
aXNdKCkgewotICAgICAgICBBU1NFUlQobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6
OklEQkN1cnNvciB8fCBtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29y
V2l0aFZhbHVlKTsKLSAgICAgICAgbV9zb3VyY2UtPm1vZGVybklEQkN1cnNvcigpLT5kZWNyZW1l
bnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOwotICAgIH0pOwotfQotCi12b2lkIElEQlJlcXVl
c3Q6OnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24pCi17Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rp
b24uaXNWZXJzaW9uQ2hhbmdlKCkpOwotICAgIEFTU0VSVCghdHJhbnNhY3Rpb24uaXNGaW5pc2hl
ZE9yRmluaXNoaW5nKCkpOwotCi0gICAgbV90cmFuc2FjdGlvbiA9ICZ0cmFuc2FjdGlvbjsKLX0K
LQotUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJSZXF1ZXN0Ojp0cmFuc2FjdGlv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hvdWxkRXhwb3NlVHJhbnNhY3Rpb25Ub0RPTSA/
IG1fdHJhbnNhY3Rpb24gOiBudWxscHRyOwotfQotCi1jb25zdCBTdHJpbmcmIElEQlJlcXVlc3Q6
OnJlYWR5U3RhdGUoKSBjb25zdAotewotICAgIHN0YXRpYyBXVEY6Ok5ldmVyRGVzdHJveWVkPFN0
cmluZz4gcGVuZGluZ1N0cmluZygicGVuZGluZyIpOwotICAgIHN0YXRpYyBXVEY6Ok5ldmVyRGVz
dHJveWVkPFN0cmluZz4gZG9uZVN0cmluZygiZG9uZSIpOwotCi0gICAgc3dpdGNoIChtX3JlYWR5
U3RhdGUpIHsKLSAgICBjYXNlIElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nOgotICAgICAg
ICByZXR1cm4gcGVuZGluZ1N0cmluZzsKLSAgICBjYXNlIElEQlJlcXVlc3RSZWFkeVN0YXRlOjpE
b25lOgotICAgICAgICByZXR1cm4gZG9uZVN0cmluZzsKLSAgICBkZWZhdWx0OgotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdWludDY0X3QgSURCUmVx
dWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
c291cmNlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpID09
IElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3RvcmUpIHsKLSAgICAgICAgYXV0byogb2JqZWN0U3Rv
cmUgPSBtX3NvdXJjZS0+bW9kZXJuSURCT2JqZWN0U3RvcmUoKTsKLSAgICAgICAgaWYgKCFvYmpl
Y3RTdG9yZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gb2JqZWN0U3Rv
cmUtPmluZm8oKS5pZGVudGlmaWVyKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fc291cmNlLT50eXBl
KCkgPT0gSURCQW55OjpUeXBlOjpJREJJbmRleCkgewotICAgICAgICBhdXRvKiBpbmRleCA9IG1f
c291cmNlLT5tb2Rlcm5JREJJbmRleCgpOwotICAgICAgICBpZiAoIWluZGV4KQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVybiBpbmRleC0+aW5mbygpLm9iamVjdFN0b3JlSWRl
bnRpZmllcigpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi11aW50NjRfdCBJREJSZXF1
ZXN0Ojpzb3VyY2VJbmRleElkZW50aWZpZXIoKSBjb25zdAotewotICAgIGlmICghbV9zb3VyY2Up
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpICE9IElEQkFueTo6
VHlwZTo6SURCSW5kZXgpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghbV9zb3VyY2UtPm1v
ZGVybklEQkluZGV4KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fc291cmNl
LT5tb2Rlcm5JREJJbmRleCgpLT5pbmZvKCkuaWRlbnRpZmllcigpOwotfQotCi1JbmRleGVkREI6
OkluZGV4UmVjb3JkVHlwZSBJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUoKSBj
b25zdAotewotICAgIEFTU0VSVChtX3NvdXJjZSk7Ci0gICAgQVNTRVJUKG1fc291cmNlLT50eXBl
KCkgPT0gSURCQW55OjpUeXBlOjpJREJJbmRleCk7Ci0KLSAgICByZXR1cm4gbV9yZXF1ZXN0ZWRJ
bmRleFJlY29yZFR5cGU7Ci19Ci0KLUV2ZW50VGFyZ2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2
ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50
VGFyZ2V0SW50ZXJmYWNlVHlwZTsKLX0KLQotY29uc3QgY2hhciogSURCUmVxdWVzdDo6YWN0aXZl
RE9NT2JqZWN0TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJJREJSZXF1ZXN0IjsKLX0KLQot
Ym9vbCBJREJSZXF1ZXN0OjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHk7Ci19Ci0K
LXZvaWQgSURCUmVxdWVzdDo6c3RvcCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVk
KTsKLSAgICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0Ojpl
bnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQotewotICAgIGlmICghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIHx8IG1fY29udGV4dFN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5l
dmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKLX0KLQotYm9vbCBJREJS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCAtICVzICglcCkiLCBldmVudC50eXBlKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgdGhpcyk7Ci0KLSAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0
aXZpdHkpOwotICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7Ci0KLSAgICBpZiAoZXZlbnQu
dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCi0gICAgICAgIG1fcmVhZHlTdGF0
ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lOwotCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVu
dFRhcmdldD4+IHRhcmdldHM7Ci0gICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7Ci0KLSAgICBpZiAo
JmV2ZW50ID09IG1fb3BlbkRhdGFiYXNlU3VjY2Vzc0V2ZW50KQotICAgICAgICBtX29wZW5EYXRh
YmFzZVN1Y2Nlc3NFdmVudCA9IG51bGxwdHI7Ci0gICAgZWxzZSBpZiAobV90cmFuc2FjdGlvbiAm
JiAhbV90cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpKSB7Ci0gICAgICAgICAgICB0YXJnZXRzLmFw
cGVuZChtX3RyYW5zYWN0aW9uKTsKLSAgICAgICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJhbnNh
Y3Rpb24tPmRiKCkpOwotICAgIH0KLQotICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7
Ci0KLSAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IG51bGxwdHI7Ci0KLSAgICBib29sIGRv
bnRQcmV2ZW50RGVmYXVsdDsKLSAgICB7Ci0gICAgICAgIFRyYW5zYWN0aW9uQWN0aXZhdG9yIGFj
dGl2YXRvcihtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgZG9udFByZXZlbnREZWZhdWx0
ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudCwgdGFyZ2V0cyk7Ci0gICAgfQot
Ci0gICAgLy8gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaCgpIG1pZ2h0IGhhdmUgc2V0IHRo
ZSBwZW5kaW5nIGFjdGl2aXR5IGZsYWcgYmFjayB0byB0cnVlLCBzdWdnZXN0aW5nIHRoZSByZXF1
ZXN0IHdpbGwgYmUgcmV1c2VkLgotICAgIC8vIFdlIG1pZ2h0IGFsc28gcmUtdXNlIHRoZSByZXF1
ZXN0IGlmIHRoaXMgZXZlbnQgd2FzIHRoZSB1cGdyYWRlbmVlZGVkIGV2ZW50IGZvciBhbiBJREJP
cGVuREJSZXF1ZXN0LgotICAgIGlmICghbV9oYXNQZW5kaW5nQWN0aXZpdHkpCi0gICAgICAgIG1f
aGFzUGVuZGluZ0FjdGl2aXR5ID0gaXNPcGVuREJSZXF1ZXN0KCkgJiYgKGV2ZW50LnR5cGUoKSA9
PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYmxvY2tlZEV2ZW50KTsKLQotICAgIC8vIFRoZSByZXF1ZXN0IHNob3VsZCBvbmx5
IHJlbWFpbiBpbiB0aGUgdHJhbnNhY3Rpb24ncyByZXF1ZXN0IGxpc3QgaWYgaXQgcmVwcmVzZW50
cyBhIHBlbmRpbmcgY3Vyc29yIG9wZXJhdGlvbiwgb3IgdGhpcyBpcyBhbiBvcGVuIHJlcXVlc3Qg
dGhhdCB3YXMgYmxvY2tlZC4KLSAgICBpZiAobV90cmFuc2FjdGlvbiAmJiAhbV9wZW5kaW5nQ3Vy
c29yICYmIGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQotICAgICAg
ICBtX3RyYW5zYWN0aW9uLT5yZW1vdmVSZXF1ZXN0KCp0aGlzKTsKLQotICAgIGlmIChkb250UHJl
dmVudERlZmF1bHQgJiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYm
IG1fdHJhbnNhY3Rpb24gJiYgIW1fdHJhbnNhY3Rpb24tPmlzRmluaXNoZWRPckZpbmlzaGluZygp
KSB7Ci0gICAgICAgIEFTU0VSVChtX2RvbUVycm9yKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+
YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoKm1fZG9tRXJyb3IpOwotICAgIH0KLQotICAgIHJldHVy
biBkb250UHJldmVudERlZmF1bHQ7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6dW5jYXVnaHRFeGNl
cHRpb25JbkV2ZW50SGFuZGxlcigpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6
OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIiKTsKLQotICAgIGlmIChtX3RyYW5zYWN0
aW9uICYmIG1faWRiRXJyb3IuY29kZSgpICE9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yKQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01F
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IpKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVz
dWx0KGNvbnN0IElEQktleURhdGEqIGtleURhdGEpCi17Ci0gICAgaWYgKCFrZXlEYXRhKSB7Ci0g
ICAgICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqa2V5RGF0YSk7Ci0gICAgbV9yZXN1bHQgPSBJREJB
bnk6OmNyZWF0ZShXVEZNb3ZlKHZhbHVlKSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVz
dWx0KHVpbnQ2NF90IG51bWJlcikKLXsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0oKSwgSlNDOjpKU1ZhbHVlKG51bWJlcikp
KTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZSIpOwotCi0gICAgYXV0byBj
b250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNl
cmlhbGl6ZUlEQlZhbHVlRGF0YSgqY29udGV4dCwgdmFsdWVEYXRhKTsKLSAgICBtX3Jlc3VsdCA9
IElEQkFueTo6Y3JlYXRlKFdURk1vdmUodmFsdWUpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0Ojpz
ZXRSZXN1bHRUb1VuZGVmaW5lZCgpCi17Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZVVu
ZGVmaW5lZCgpOwotfQotCi1JREJDdXJzb3IqIElEQlJlcXVlc3Q6OnJlc3VsdEN1cnNvcigpCi17
Ci0gICAgaWYgKCFtX3Jlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKG1f
cmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3IgfHwgbV9yZXN1bHQtPnR5
cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSkKLSAgICAgICAgcmV0dXJu
IG1fcmVzdWx0LT5tb2Rlcm5JREJDdXJzb3IoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
dm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0ZUN1cnNvcihJREJDdXJzb3ImIGN1cnNvcikKLXsK
LSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKTsK
LSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQobV90cmFu
c2FjdGlvbik7Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOwotICAgIEFTU0VSVCgmY3Vy
c29yID09IHJlc3VsdEN1cnNvcigpKTsKLSAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlm
aWVyKTsKLQotICAgIG1fcGVuZGluZ0N1cnNvciA9ICZjdXJzb3I7Ci0gICAgbV9oYXNQZW5kaW5n
QWN0aXZpdHkgPSB0cnVlOwotICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3JlYWR5U3Rh
dGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZzsKLSAgICBtX2RvbUVycm9yID0gbnVs
bHB0cjsKLSAgICBtX2lkYkVycm9yID0geyB9OwotCi0gICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZp
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNjb3BlR3VhcmQ+KFt0aGlzXSgpIHsKLSAgICAgICAgbV9w
ZW5kaW5nQ3Vyc29yLT5kZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOwotICAgIH0p
OwotfQotCi12b2lkIElEQlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IoY29uc3QgSURC
UmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBBU1NFUlQobV9wZW5kaW5nQ3Vyc29yKTsK
LSAgICBtX3Jlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICBpZiAocmVzdWx0RGF0YS50eXBlKCkgPT0g
SURCUmVzdWx0VHlwZTo6SXRlcmF0ZUN1cnNvclN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkg
PT0gSURCUmVzdWx0VHlwZTo6T3BlbkN1cnNvclN1Y2Nlc3MpIHsKLSAgICAgICAgbV9wZW5kaW5n
Q3Vyc29yLT5zZXRHZXRSZXN1bHQoKnRoaXMsIHJlc3VsdERhdGEuZ2V0UmVzdWx0KCkpOwotICAg
ICAgICBpZiAocmVzdWx0RGF0YS5nZXRSZXN1bHQoKS5pc0RlZmluZWQoKSkKLSAgICAgICAgICAg
IG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoKm1fcGVuZGluZ0N1cnNvcik7Ci0gICAgfQotCi0g
ICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIgPSBudWxscHRyOwotICAgIG1fcGVuZGluZ0N1cnNv
ciA9IG51bGxwdHI7Ci0KLSAgICByZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOwotfQotCi12
b2lkIElEQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVz
dWx0RGF0YSkKLXsKLSAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9u
ZTsKLQotICAgIG1faWRiRXJyb3IgPSByZXN1bHREYXRhLmVycm9yKCk7Ci0gICAgaWYgKCFtX2lk
YkVycm9yLmlzTnVsbCgpKQotICAgICAgICBvbkVycm9yKCk7Ci0gICAgZWxzZQotICAgICAgICBv
blN1Y2Nlc3MoKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvbkVycm9yKCkKLXsKLSAgICBMT0co
SW5kZXhlZERCLCAiSURCUmVxdWVzdDo6b25FcnJvciIpOwotCi0gICAgQVNTRVJUKCFtX2lkYkVy
cm9yLmlzTnVsbCgpKTsKLSAgICBtX2RvbUVycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShtX2lkYkVy
cm9yLm5hbWUoKSk7Ci0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmVycm9yRXZlbnQsIHRydWUsIHRydWUpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nl
c3MoKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MiKTsKLQot
ICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQs
IGZhbHNlLCBmYWxzZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVl
c3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVx
dWVzdEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1OTEzYy4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVz
dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJREJSZXF1ZXN0SW1wbF9oCi0jZGVmaW5lIElEQlJlcXVlc3RJbXBsX2gKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQW55SW1wbC5oIgotI2luY2x1
ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJSZXNvdXJjZUlkZW50aWZpZXIu
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkltcGwuaCIKLSNpbmNsdWRlICJTY29wZUd1YXJk
LmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBFdmVudDsKLWNsYXNzIElEQktleURhdGE7Ci1jbGFzcyBJREJSZXN1bHREYXRhOwot
Y2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7Ci0KLW5hbWVzcGFjZSBJbmRleGVkREIgewotZW51
bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7Ci19Ci0KLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1j
bGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2ZXI7Ci0KLWNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMg
V2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdCwgcHVibGljIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD4g
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIElEQlRyYW5zYWN0aW9uJik7Ci0gICAgc3Rh
dGljIFJlZjxJREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkN1
cnNvciYsIElEQlRyYW5zYWN0aW9uJik7Ci0gICAgc3RhdGljIFJlZjxJREJSZXF1ZXN0PiBjcmVh
dGVDb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJREJUcmFuc2FjdGlv
biYpOwotICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlR2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJREJUcmFu
c2FjdGlvbiYpOwotCi0gICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXNvdXJjZUlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlSWRlbnRpZmllcjsgfQotCi0gICAg
fklEQlJlcXVlc3QoKSBvdmVycmlkZTsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IHJl
c3VsdChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBjb25zdCBvdmVycmlkZTsKLSAgICB1bnNp
Z25lZCBzaG9ydCBlcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFJlZlB0cjxET01FcnJvcj4gZXJyb3IoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQkFueT4gc291cmNlKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGNvbnN0IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgdWludDY0X3Qgc291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29u
c3Q7Ci0gICAgdWludDY0X3Qgc291cmNlSW5kZXhJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgSW5k
ZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKCkgY29uc3Q7
Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURP
TU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9Ci0KLSAgICB1c2luZyBSZWZDb3Vu
dGVkPElEQlJlcXVlc3Q+OjpyZWY7Ci0gICAgdXNpbmcgUmVmQ291bnRlZDxJREJSZXF1ZXN0Pjo6
ZGVyZWY7Ci0KLSAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwotICAgIGJvb2wg
ZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgSURCQ29ubmVjdGlvblRvU2Vy
dmVyJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uOyB9Ci0KLSAgICB2b2lkIHJl
cXVlc3RDb21wbGV0ZWQoY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBzZXRSZXN1
bHQoY29uc3QgSURCS2V5RGF0YSopOwotICAgIHZvaWQgc2V0UmVzdWx0KHVpbnQ2NF90KTsKLSAg
ICB2b2lkIHNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVm
ZmVyJik7Ci0gICAgdm9pZCBzZXRSZXN1bHRUb1VuZGVmaW5lZCgpOwotCi0gICAgSURCQW55KiBt
b2Rlcm5SZXN1bHQoKSB7IHJldHVybiBtX3Jlc3VsdC5nZXQoKTsgfQotCi0gICAgdm9pZCB3aWxs
SXRlcmF0ZUN1cnNvcihJREJDdXJzb3ImKTsKLSAgICB2b2lkIGRpZE9wZW5Pckl0ZXJhdGVDdXJz
b3IoY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgY29uc3QgSURCQ3Vyc29yKiBwZW5kaW5n
Q3Vyc29yKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nQ3Vyc29yLmdldCgpOyB9Ci0KLSAgICB2
b2lkIHNldFNvdXJjZShJREJDdXJzb3ImKTsKLSAgICB2b2lkIHNldFZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOwotCi0gICAgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZSBy
ZXF1ZXN0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdFR5cGU7IH0KLQotcHJvdGVjdGVk
OgotICAgIElEQlJlcXVlc3QoSURCQ29ubmVjdGlvblRvU2VydmVyJiwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYpOwotICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9i
amVjdFN0b3JlJiwgSURCVHJhbnNhY3Rpb24mKTsKLSAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBJREJDdXJzb3ImLCBJREJUcmFuc2FjdGlvbiYpOwotICAgIElEQlJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgSURCVHJhbnNhY3Rpb24mKTsK
LSAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4
ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJREJUcmFuc2FjdGlvbiYpOwotCi0gICAgLy8gQWN0aXZl
RE9NT2JqZWN0LgotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBm
aW5hbDsKLSAgICBib29sIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBm
aW5hbDsKLSAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFsOwotICAgIHZv
aWQgc3RvcCgpIGZpbmFsOwotCi0gICAgLy8gRXZlbnRUYXJnZXQuCi0gICAgdm9pZCByZWZFdmVu
dFRhcmdldCgpIGZpbmFsIHsgUmVmQ291bnRlZDxJREJSZXF1ZXN0Pjo6cmVmKCk7IH0KLSAgICB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46OmRl
cmVmKCk7IH0KLSAgICB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKSBmaW5h
bDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc09wZW5EQlJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgSURCUmVxdWVzdFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlIHsgSURCUmVx
dWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcgfTsKLSAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsK
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0gICAgYm9vbCBtX3No
b3VsZEV4cG9zZVRyYW5zYWN0aW9uVG9ET00geyB0cnVlIH07Ci0gICAgUmVmUHRyPERPTUVycm9y
PiBtX2RvbUVycm9yOwotICAgIElEQkVycm9yIG1faWRiRXJyb3I7Ci0gICAgSW5kZXhlZERCOjpS
ZXF1ZXN0VHlwZSBtX3JlcXVlc3RUeXBlID0geyBJbmRleGVkREI6OlJlcXVlc3RUeXBlOjpPdGhl
ciB9OwotICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZCB7IGZhbHNlIH07Ci0KLSAgICBFdmVudCog
bV9vcGVuRGF0YWJhc2VTdWNjZXNzRXZlbnQgeyBudWxscHRyIH07Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBvbkVycm9yKCk7Ci0gICAgdm9pZCBvblN1Y2Nlc3MoKTsKLQotICAgIElEQkN1cnNvciog
cmVzdWx0Q3Vyc29yKCk7Ci0KLSAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIG1fY29ubmVjdGlv
bjsKLSAgICBJREJSZXNvdXJjZUlkZW50aWZpZXIgbV9yZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAg
UmVmUHRyPElEQkFueT4gbV9zb3VyY2U7Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eSB7
IHRydWUgfTsKLSAgICBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBtX3JlcXVlc3RlZEluZGV4
UmVjb3JkVHlwZTsKLQotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fcGVuZGluZ0N1cnNvcjsKLQot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTY29wZUd1YXJkPiBtX2N1cnNvclJlcXVlc3ROb3RpZmllcjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCUmVxdWVz
dEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjY0Y2NmOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDkwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlICJET01FcnJvci5oIgotI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRl
ICJJREJDdXJzb3JXaXRoVmFsdWVJbXBsLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUltcGwuaCIKLSNpbmNsdWRlICJJREJFcnJvci5o
IgotI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIklEQktleURhdGEu
aCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZURhdGEuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9y
ZS5oIgotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3RJbXBsLmgiCi0jaW5jbHVkZSAiSURCUmVx
dWVzdEltcGwuaCIKLSNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCi0jaW5jbHVkZSAiSlNET01X
aW5kb3dCYXNlLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJUcmFuc2FjdGlvbk9wZXJhdGlvbi5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotUmVmPElEQlRyYW5zYWN0
aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKElEQkRhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3Qg
SURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElE
QlRyYW5zYWN0aW9uKGRhdGFiYXNlLCBpbmZvLCBudWxscHRyKSk7Ci19Ci0KLVJlZjxJREJUcmFu
c2FjdGlvbj4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShJREJEYXRhYmFzZSYgZGF0YWJhc2UsIGNv
bnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbywgSURCT3BlbkRCUmVxdWVzdCYgcmVxdWVzdCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbihkYXRhYmFzZSwgaW5m
bywgJnJlcXVlc3QpKTsKLX0KLQotSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKElEQkRh
dGFiYXNlJiBkYXRhYmFzZSwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvLCBJREJPcGVu
REJSZXF1ZXN0KiByZXF1ZXN0KQotICAgIDogV2ViQ29yZTo6SURCVHJhbnNhY3Rpb24oZGF0YWJh
c2Uuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkK
LSAgICAsIG1faW5mbyhpbmZvKQotICAgICwgbV9vcGVyYXRpb25UaW1lcigqdGhpcywgJklEQlRy
YW5zYWN0aW9uOjpvcGVyYXRpb25UaW1lckZpcmVkKQotICAgICwgbV9vcGVuREJSZXF1ZXN0KHJl
cXVlc3QpCi0KLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OklEQlRyYW5z
YWN0aW9uIC0gJXMiLCBtX2luZm8ubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0g
ICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0KLSAgICBpZiAobV9pbmZvLm1vZGUoKSA9
PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgewotICAgICAgICBB
U1NFUlQobV9vcGVuREJSZXF1ZXN0KTsKLSAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT5zZXRWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24oKnRoaXMpOwotICAgICAgICBtX3N0YXJ0ZWRPblNlcnZlciA9
IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYWN0aXZhdGUoKTsKLQotICAgICAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IHNlbGY7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5k
b3dCYXNlOjpjb21tb25WTSgpOwotICAgICAgICB2bS53aGVuSWRsZShbc2VsZiwgdGhpc10oKSB7
Ci0gICAgICAgICAgICBkZWFjdGl2YXRlKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGVzdGFi
bGlzaE9uU2VydmVyKCk7Ci0gICAgfQotCi0gICAgc3VzcGVuZElmTmVlZGVkKCk7Ci19Ci0KLUlE
QlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rpb24oKQotewotfQotCi1jb25zdCBTdHJpbmcmIElE
QlRyYW5zYWN0aW9uOjptb2RlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1faW5mby5tb2RlKCkp
IHsKLSAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seToKLSAgICAg
ICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uOjptb2RlUmVhZE9ubHkoKTsKLSAgICBjYXNlIEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkV3JpdGU6Ci0gICAgICAgIHJldHVybiBJREJUcmFu
c2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgpOwotICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGU6OlZlcnNpb25DaGFuZ2U6Ci0gICAgICAgIHJldHVybiBJREJUcmFuc2FjdGlvbjo6bW9k
ZVZlcnNpb25DaGFuZ2UoKTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi1XZWJDb3JlOjpJREJEYXRhYmFzZSogSURCVHJhbnNhY3Rpb246OmRiKCkKLXsK
LSAgICByZXR1cm4gJm1fZGF0YWJhc2UuZ2V0KCk7Ci19Ci0KLUlEQkNvbm5lY3Rpb25Ub1NlcnZl
ciYgSURCVHJhbnNhY3Rpb246OnNlcnZlckNvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBtX2Rh
dGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCk7Ci19Ci0KLVJlZlB0cjxET01FcnJvcj4gSURCVHJh
bnNhY3Rpb246OmVycm9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kb21FcnJvcjsKLX0KLQot
UmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9y
ZSIpOwotCi0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKSB7Ci0gICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvYmplY3RT
dG9yZScgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHRyYW5zYWN0aW9uIGZpbmlzaGVkLiIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9y
ZWZlcmVuY2VkT2JqZWN0U3RvcmVzLmZpbmQob2JqZWN0U3RvcmVOYW1lKTsKLSAgICBpZiAoaXRl
cmF0b3IgIT0gbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLmVuZCgpKQotICAgICAgICByZXR1cm4g
aXRlcmF0b3ItPnZhbHVlOwotCi0gICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGZvciAoYXV0
byYgb2JqZWN0U3RvcmUgOiBtX2luZm8ub2JqZWN0U3RvcmVzKCkpIHsKLSAgICAgICAgaWYgKG9i
amVjdFN0b3JlID09IG9iamVjdFN0b3JlTmFtZSkgewotICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvKiBpbmZv
ID0gbV9kYXRhYmFzZS0+aW5mbygpLmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0
b3JlTmFtZSk7Ci0gICAgaWYgKCFpbmZvKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29iamVjdFN0b3JlJyBvbiAnSURCVHJhbnNhY3Rpb24n
OiBUaGUgc3BlY2lmaWVkIG9iamVjdCBzdG9yZSB3YXMgbm90IGZvdW5kLiIpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlv
bnMgYXJlIHNjb3BlZCB0byBldmVyeSBvYmplY3Qgc3RvcmUgaW4gdGhlIGRhdGFiYXNlLgotICAg
IGlmICghaW5mbyB8fCAoIWZvdW5kICYmICFpc1ZlcnNpb25DaGFuZ2UoKSkpIHsKLSAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0U3RvcmUn
IG9uICdJREJUcmFuc2FjdGlvbic6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdhcyBub3Qg
Zm91bmQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gb2Jq
ZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksICppbmZvLCAqdGhpcyk7Ci0gICAgbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnNldChvYmpl
Y3RTdG9yZU5hbWUsICZvYmplY3RTdG9yZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYo
Jm9iamVjdFN0b3JlLmxlYWtSZWYoKSk7Ci19Ci0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJv
cnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXJyb3ImIGVycm9yKQotewotICAgIExPRyhJbmRleGVk
REIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QiKTsKLSAgICBpZiAo
aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZG9tRXJy
b3IgPSAmZXJyb3I7Ci0gICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwotICAgIGFib3J0
KGVjKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6dHJhbnNpdGlvbmVkVG9GaW5pc2hpbmco
SW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlIHN0YXRlKQotewotICAgIEFTU0VSVCghaXNGaW5p
c2hlZE9yRmluaXNoaW5nKCkpOwotICAgIG1fc3RhdGUgPSBzdGF0ZTsKLSAgICBBU1NFUlQoaXNG
aW5pc2hlZE9yRmluaXNoaW5nKCkpOwotICAgIG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy5jbGVh
cigpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydChFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnQi
KTsKLQotICAgIGlmIChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkgewotICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWJvcnQnIG9uICdJREJU
cmFuc2FjdGlvbic6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZGF0YWJhc2UtPndpbGxBYm9ydFRyYW5z
YWN0aW9uKCp0aGlzKTsKLQotICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgewotICAgICAgICBm
b3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVlcygp
KQotICAgICAgICAgICAgb2JqZWN0U3RvcmUtPnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VB
Ym9ydCgpOwotICAgIH0KLQotICAgIHRyYW5zaXRpb25lZFRvRmluaXNoaW5nKEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6QWJvcnRpbmcpOwotICAgIAotICAgIG1fYWJvcnRRdWV1ZS5zd2Fw
KG1fdHJhbnNhY3Rpb25PcGVyYXRpb25RdWV1ZSk7Ci0KLSAgICBhdXRvIG9wZXJhdGlvbiA9IGNy
ZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCBudWxscHRyLCAmSURCVHJhbnNhY3Rpb246
OmFib3J0T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0cyk7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24o
V1RGTW92ZShvcGVyYXRpb24pKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnRPblNl
cnZlckFuZENhbmNlbFJlcXVlc3RzKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCi17
Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjphYm9ydE9uU2VydmVyQW5kQ2Fu
Y2VsUmVxdWVzdHMiKTsKLQotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUu
aXNFbXB0eSgpKTsKLQotICAgIHNlcnZlckNvbm5lY3Rpb24oKS5hYm9ydFRyYW5zYWN0aW9uKCp0
aGlzKTsKLQotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmNvbnRhaW5zKG9w
ZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsKLSAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnJl
bW92ZShvcGVyYXRpb24uaWRlbnRpZmllcigpKTsKLQotICAgIElEQkVycm9yIGVycm9yKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKTsKLSAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6
IG1fYWJvcnRRdWV1ZSkKLSAgICAgICAgb3BlcmF0aW9uLT5jb21wbGV0ZWQoSURCUmVzdWx0RGF0
YTo6ZXJyb3Iob3BlcmF0aW9uLT5pZGVudGlmaWVyKCksIGVycm9yKSk7Ci0KLSAgICAvLyBTaW5j
ZSB3ZSdyZSBhYm9ydGluZywgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gaGF2ZSBxdWV1ZWQg
YW55IGZ1cnRoZXIgb3BlcmF0aW9ucy4KLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbk9wZXJhdGlv
blF1ZXVlLmlzRW1wdHkoKSk7Ci19Ci0KLWNvbnN0IGNoYXIqIElEQlRyYW5zYWN0aW9uOjphY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIklEQlRyYW5zYWN0aW9uIjsK
LX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lv
bigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9u
OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9jb250ZXh0U3Rv
cHBlZCAmJiBtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7
Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnN0b3AoKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6c3RvcCIpOwotCi0gICAgLy8gSURCRGF0YWJhc2U6OnN0b3AoKSBj
YWxscyBJREJUcmFuc2FjdGlvbjo6c3RvcCgpIGZvciBlYWNoIG9mIGl0cyBhY3RpdmUgdHJhbnNh
Y3Rpb25zLgotICAgIC8vIFNpbmNlIHRoZSBvcmRlciBvZiBjYWxsaW5nIEFjdGl2ZURPTU9iamVj
dDo6c3RvcCgpIGlzIHJhbmRvbSwgd2UgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gc3RvcHBlZC4K
LSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0U3RvcHBlZCA9IHRydWU7Ci0KLSAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKLSAgICBh
Ym9ydChlYyk7Ci19Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2
ZTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6
OkNvbW1pdHRpbmcKLSAgICAgICAgfHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
U3RhdGU6OkFib3J0aW5nCi0gICAgICAgIHx8IG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblN0YXRlOjpGaW5pc2hlZDsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWRkUmVxdWVz
dChJREJSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIG1fb3BlblJlcXVlc3RzLmFkZCgmcmVxdWVz
dCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnJlbW92ZVJlcXVlc3QoSURCUmVxdWVzdCYg
cmVxdWVzdCkKLXsKLSAgICBBU1NFUlQobV9vcGVuUmVxdWVzdHMuY29udGFpbnMoJnJlcXVlc3Qp
KTsKLSAgICBtX29wZW5SZXF1ZXN0cy5yZW1vdmUoJnJlcXVlc3QpOwotfQotCi12b2lkIElEQlRy
YW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlvbihSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+
JiYgb3BlcmF0aW9uKQotewotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5j
b250YWlucyhvcGVyYXRpb24tPmlkZW50aWZpZXIoKSkpOwotCi0gICAgbV90cmFuc2FjdGlvbk9w
ZXJhdGlvblF1ZXVlLmFwcGVuZChvcGVyYXRpb24pOwotICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRp
b25NYXAuc2V0KG9wZXJhdGlvbi0+aWRlbnRpZmllcigpLCBXVEZNb3ZlKG9wZXJhdGlvbikpOwot
Ci0gICAgc2NoZWR1bGVPcGVyYXRpb25UaW1lcigpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
OjpzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCkKLXsKLSAgICBpZiAoIW1fb3BlcmF0aW9uVGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgbV9vcGVyYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVyRmlyZWQoKQotewotICAgIExP
RyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6b3BlcmF0aW9uVGltZXJGaXJlZCAoJXApIiwg
dGhpcyk7Ci0KLSAgICBpZiAoIW1fc3RhcnRlZE9uU2VydmVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fdHJhbnNhY3Rpb25PcGVyYXRpb25RdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgYXV0byBvcGVyYXRpb24gPSBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUudGFrZUZpcnN0
KCk7Ci0gICAgICAgIG9wZXJhdGlvbi0+cGVyZm9ybSgpOwotCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuaXNFbXB0eSgpIHx8ICFt
X29wZW5SZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghaXNG
aW5pc2hlZE9yRmluaXNoaW5nKCkpCi0gICAgICAgIGNvbW1pdCgpOwotfQotCi12b2lkIElEQlRy
YW5zYWN0aW9uOjpjb21taXQoKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6Y29tbWl0Iik7Ci0KLSAgICBBU1NFUlQoIWlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKLQot
ICAgIHRyYW5zaXRpb25lZFRvRmluaXNoaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6
Q29tbWl0dGluZyk7Ci0gICAgbV9kYXRhYmFzZS0+d2lsbENvbW1pdFRyYW5zYWN0aW9uKCp0aGlz
KTsKLQotICAgIGF1dG8gb3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRo
aXMsIG51bGxwdHIsICZJREJUcmFuc2FjdGlvbjo6Y29tbWl0T25TZXJ2ZXIpOwotICAgIHNjaGVk
dWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b246OmNvbW1pdE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCi17Ci0g
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlciIpOwotICAg
IHNlcnZlckNvbm5lY3Rpb24oKS5jb21taXRUcmFuc2FjdGlvbigqdGhpcyk7Ci0KLSAgICBBU1NF
UlQobV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5jb250YWlucyhvcGVyYXRpb24uaWRlbnRpZmll
cigpKSk7Ci0gICAgbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5yZW1vdmUob3BlcmF0aW9uLmlk
ZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmZpbmlzaEFib3J0T3JDb21t
aXQoKQotewotICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0
ZTo6RmluaXNoZWQpOwotICAgIG1fc3RhdGUgPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6
OkZpbmlzaGVkOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRTdGFydChjb25zdCBJREJF
cnJvciYgZXJyb3IpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRT
dGFydCIpOwotCi0gICAgbV9kYXRhYmFzZS0+ZGlkU3RhcnRUcmFuc2FjdGlvbigqdGhpcyk7Ci0K
LSAgICBtX3N0YXJ0ZWRPblNlcnZlciA9IHRydWU7Ci0KLSAgICAvLyBJdCdzIHBvc3NpYmxlIHRo
ZSB0cmFuc2FjdGlvbiBmYWlsZWQgdG8gc3RhcnQgb24gdGhlIHNlcnZlci4KLSAgICAvLyBUaGF0
IGVxdWF0ZXMgdG8gYW4gYWJvcnQuCi0gICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAg
ICBkaWRBYm9ydChlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzY2hlZHVs
ZU9wZXJhdGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om5vdGlmeURpZEFi
b3J0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKLXsKLSAgICBtX2RhdGFiYXNlLT5kaWRBYm9ydFRy
YW5zYWN0aW9uKCp0aGlzKTsKLSAgICBtX2lkYkVycm9yID0gZXJyb3I7Ci0gICAgZmlyZU9uQWJv
cnQoKTsKLQotICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgewotICAgICAgICBBU1NFUlQobV9v
cGVuREJSZXF1ZXN0KTsKLSAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT5maXJlRXJyb3JBZnRlclZl
cnNpb25DaGFuZ2VDb21wbGV0aW9uKCk7Ci0gICAgfQotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
OjpkaWRBYm9ydChjb25zdCBJREJFcnJvciYgZXJyb3IpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpkaWRBYm9ydCIpOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bm90aWZ5RGlkQWJvcnQoZXJyb3IpOwotCi0gICAgZmluaXNoQWJvcnRPckNvbW1pdCgpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDb21taXQoY29uc3QgSURCRXJyb3ImIGVycm9yKQot
ewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkQ29tbWl0Iik7Ci0KLSAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkNvbW1pdHRp
bmcpOwotCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPmRp
ZENvbW1pdFRyYW5zYWN0aW9uKCp0aGlzKTsKLSAgICAgICAgZmlyZU9uQ29tcGxldGUoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBtX2RhdGFiYXNlLT53aWxsQWJvcnRUcmFuc2FjdGlvbigqdGhp
cyk7Ci0gICAgICAgIG5vdGlmeURpZEFib3J0KGVycm9yKTsKLSAgICB9Ci0KLSAgICBmaW5pc2hB
Ym9ydE9yQ29tbWl0KCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmZpcmVPbkNvbXBsZXRl
KCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmZpcmVPbkNvbXBsZXRl
Iik7Ci0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBsZXRl
RXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpmaXJlT25B
Ym9ydCgpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9y
dCIpOwotICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50LCB0cnVlLCBmYWxzZSkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZl
bnQoUmVmPEV2ZW50PiYmIGV2ZW50KQotewotICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQpOwotCi0gICAgaWYgKCFzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgfHwgbV9jb250ZXh0U3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2
ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOwotfQotCi1ib29sIElEQlRy
YW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQiKTsKLQotICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7Ci0g
ICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwotICAgIEFTU0VSVChldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50
TmFtZXMoKS5hYm9ydEV2ZW50KTsKLQotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0
YXJnZXRzOwotICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOwotICAgIHRhcmdldHMuYXBwZW5kKGRi
KCkpOwotCi0gICAgYm9vbCByZXN1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2
ZW50LCB0YXJnZXRzKTsKLQotICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgewotICAgICAgICBB
U1NFUlQobV9vcGVuREJSZXF1ZXN0KTsKLSAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT52ZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb25EaWRGaW5pc2goKTsKLQotICAgICAgICBpZiAoZXZlbnQudHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50KSB7Ci0gICAgICAgICAgICBpZiAobV9kYXRh
YmFzZS0+aXNDbG9zaW5nT3JDbG9zZWQoKSkKLSAgICAgICAgICAgICAgICBtX29wZW5EQlJlcXVl
c3QtPmZpcmVFcnJvckFmdGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX29wZW5EQlJlcXVlc3QtPmZpcmVTdWNjZXNzQWZ0ZXJW
ZXJzaW9uQ2hhbmdlQ29tbWl0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX29wZW5EQlJlcXVl
c3QgPSBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZjxJREJP
YmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQk9i
amVjdFN0b3JlSW5mbyYgaW5mbykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0gICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsK
LSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLQotICAgIFJlZjxJREJPYmpl
Y3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKCpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIGluZm8sICp0aGlzKTsKLSAgICBtX3JlZmVyZW5jZWRPYmplY3RTdG9y
ZXMuc2V0KGluZm8ubmFtZSgpLCAmb2JqZWN0U3RvcmUuZ2V0KCkpOwotCi0gICAgYXV0byBvcGVy
YXRpb24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgJklEQlRyYW5zYWN0aW9u
OjpkaWRDcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9i
amVjdFN0b3JlT25TZXJ2ZXIsIGluZm8pOwotICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUo
b3BlcmF0aW9uKSk7Ci0KLSAgICByZXR1cm4gb2JqZWN0U3RvcmU7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24m
IG9wZXJhdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlciIpOwot
Ci0gICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLQotICAgIG1fZGF0YWJhc2UtPnNlcnZl
ckNvbm5lY3Rpb24oKS5jcmVhdGVPYmplY3RTdG9yZShvcGVyYXRpb24sIGluZm8pOwotfQotCi12
b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKGNvbnN0IElE
QlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpkaWRDcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyIik7Ci0KLSAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkNyZWF0
ZU9iamVjdFN0b3JlU3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBl
OjpFcnJvcik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4gSURCVHJhbnNhY3Rpb246
OmNyZWF0ZUluZGV4KElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCSW5kZXhJ
bmZvJiBpbmZvKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRl
SW5kZXgiKTsKLSAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwotCi0gICAgaWYgKCFzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0
byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgJklEQlRyYW5z
YWN0aW9uOjpkaWRDcmVhdGVJbmRleE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmNyZWF0ZUlu
ZGV4T25TZXJ2ZXIsIGluZm8pOwotICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0
aW9uKSk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJREJJbmRleD4oKnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgaW5mbywgb2JqZWN0U3RvcmUpOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uOjpjcmVhdGVJbmRleE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRp
b24sIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4T25TZXJ2ZXIiKTsKLQotICAgIEFTU0VSVChpc1ZlcnNp
b25DaGFuZ2UoKSk7Ci0KLSAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRl
SW5kZXgob3BlcmF0aW9uLCBpbmZvKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQ3Jl
YXRlSW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlciIp
OwotCi0gICAgaWYgKHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkNyZWF0ZUlu
ZGV4U3VjY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHJlc3VsdERhdGEudHlw
ZSgpID09IElEQlJlc3VsdFR5cGU6OkVycm9yKTsKLQotICAgIC8vIFRoaXMgb3BlcmF0aW9uIG1p
Z2h0IGhhdmUgZmFpbGVkIGJlY2F1c2UgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgYWJvcnRp
bmcuCi0gICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBYm9y
dGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3RoZXJ3aXNlLCBmYWlsdXJlIHRvIGNy
ZWF0ZSBhbiBpbmRleCBmb3JjZWQgYWJvcnRpb24gb2YgdGhlIHRyYW5zYWN0aW9uLgotICAgIGFi
b3J0RHVlVG9GYWlsZWRSZXF1ZXN0KERPTUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OmdldEVycm9yTmFtZShyZXN1bHREYXRhLmVycm9yKCkuY29kZSgpKSkpOwotfQotCi1SZWY8
SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3Qg
SURCQ3Vyc29ySW5mbyYgaW5mbykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RPcGVuQ3Vyc29yIik7Ci0KLSAgICByZXR1cm4gZG9SZXF1ZXN0T3BlbkN1cnNv
cihjb250ZXh0LCBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZSgqdGhpcywgb2JqZWN0U3RvcmUs
IGluZm8pKTsKLX0KLQotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgs
IGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRy
YW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvciIpOwotCi0gICAgaWYgKGluZm8uY3Vyc29yVHlw
ZSgpID09IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSkKLSAgICAgICAgcmV0dXJuIGRv
UmVxdWVzdE9wZW5DdXJzb3IoY29udGV4dCwgSURCQ3Vyc29yOjpjcmVhdGUoKnRoaXMsIGluZGV4
LCBpbmZvKSk7Ci0KLSAgICByZXR1cm4gZG9SZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCBJREJD
dXJzb3JXaXRoVmFsdWU6OmNyZWF0ZSgqdGhpcywgaW5kZXgsIGluZm8pKTsKLX0KLQotUmVmPElE
QlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpkb1JlcXVlc3RPcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQotewotICAgIEFT
U0VSVChpc0FjdGl2ZSgpKTsKLQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIGN1cnNvci5nZXQoKSwgKnRoaXMpOwotICAgIGFkZFJlcXVl
c3QocmVxdWVzdC5nZXQoKSk7Ci0KLSAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0
aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZE9w
ZW5DdXJzb3JPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIsIGN1
cnNvci0+aW5mbygpKTsKLSAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikp
OwotCi0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om9wZW5D
dXJzb3JPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJD
dXJzb3JJbmZvJiBpbmZvKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
b3BlbkN1cnNvck9uU2VydmVyIik7Ci0KLSAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9u
KCkub3BlbkN1cnNvcihvcGVyYXRpb24sIGluZm8pOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
OjpkaWRPcGVuQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVz
dWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmRpZE9wZW5DdXJzb3JPblNlcnZlciIpOwotCi0gICAgcmVxdWVzdC5kaWRPcGVuT3JJdGVy
YXRlQ3Vyc29yKHJlc3VsdERhdGEpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjppdGVyYXRl
Q3Vyc29yKElEQkN1cnNvciYgY3Vyc29yLCBjb25zdCBJREJLZXlEYXRhJiBrZXksIHVuc2lnbmVk
IGxvbmcgY291bnQpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjppdGVy
YXRlQ3Vyc29yIik7Ci0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVChjdXJzb3Iu
cmVxdWVzdCgpKTsKLQotICAgIGFkZFJlcXVlc3QoKmN1cnNvci5yZXF1ZXN0KCkpOwotCi0gICAg
YXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgKmN1cnNv
ci5yZXF1ZXN0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkSXRlcmF0ZUN1cnNvck9uU2VydmVyLCAm
SURCVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3JPblNlcnZlciwga2V5LCBjb3VudCk7Ci0gICAg
c2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVy
YXRpb24sIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgdW5zaWduZWQgbG9uZyYgY291bnQp
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yT25T
ZXJ2ZXIiKTsKLQotICAgIHNlcnZlckNvbm5lY3Rpb24oKS5pdGVyYXRlQ3Vyc29yKG9wZXJhdGlv
biwga2V5LCBjb3VudCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEl0ZXJhdGVDdXJz
b3JPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1
bHREYXRhKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkSXRlcmF0
ZUN1cnNvck9uU2VydmVyIik7Ci0KLSAgICByZXF1ZXN0LmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3Io
cmVzdWx0RGF0YSk7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVz
dEdldFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9y
ZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCIpOwot
ICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIWtleVJhbmdlRGF0YS5pc051bGwp
OwotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKLSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkp
OwotCi0gICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhp
cywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlciwg
JklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlciwga2V5UmFuZ2VEYXRhKTsKLSAgICBz
Y2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOwotCi0gICAgcmV0dXJuIHJlcXVl
c3Q7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OnJlcXVlc3RHZXRWYWx1ZSIpOwotICAgIHJldHVybiByZXF1ZXN0SW5kZXhSZWNvcmQo
Y29udGV4dCwgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlOjpWYWx1ZSwgcmFuZ2Up
OwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRLZXkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJL
ZXlSYW5nZURhdGEmIHJhbmdlKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6cmVxdWVzdEdldFZhbHVlIik7Ci0gICAgcmV0dXJuIHJlcXVlc3RJbmRleFJlY29yZChjb250
ZXh0LCBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGU6OktleSwgcmFuZ2UpOwotfQot
Ci1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RJbmRleFJlY29yZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIEluZGV4ZWREQjo6
SW5kZXhSZWNvcmRUeXBlIHR5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSZyYW5nZSkKLXsKLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1ZSIpOwotICAg
IEFTU0VSVChpc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIXJhbmdlLmlzTnVsbCk7Ci0KLSAgICBS
ZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZUdldChjb250ZXh0LCBp
bmRleCwgdHlwZSwgKnRoaXMpOwotICAgIGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci0KLSAg
ICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1
ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyLCAmSURCVHJh
bnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyLCByYW5nZSk7Ci0gICAgc2NoZWR1bGVPcGVyYXRp
b24oV1RGTW92ZShvcGVyYXRpb24pKTsKLQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi12b2lk
IElEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYg
b3BlcmF0aW9uLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2ZXIiKTsKLQotICAgIHNl
cnZlckNvbm5lY3Rpb24oKS5nZXRSZWNvcmQob3BlcmF0aW9uLCBrZXlSYW5nZSk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWRE
QiwgIklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlciIpOwotCi0gICAgaWYgKHJl
c3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkVycm9yKSB7Ci0gICAgICAgIHJlcXVl
c3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChyZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpHZXRSZWNv
cmRTdWNjZXNzKTsKLQotICAgIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0ID0gcmVzdWx0RGF0
YS5nZXRSZXN1bHQoKTsKLQotICAgIGlmIChyZXF1ZXN0LnNvdXJjZUluZGV4SWRlbnRpZmllcigp
ICYmIHJlcXVlc3QucmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKCkgPT0gSW5kZXhlZERCOjpJbmRl
eFJlY29yZFR5cGU6OktleSkgewotICAgICAgICBpZiAoIXJlc3VsdC5rZXlEYXRhKCkuaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXF1ZXN0LnNldFJlc3VsdCgmcmVzdWx0LmtleURhdGEoKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVzdWx0RGF0YS5nZXRSZXN1bHQoKS52YWx1ZUJ1
ZmZlcigpLmRhdGEoKSkKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9TdHJ1Y3R1cmVk
Q2xvbmUocmVzdWx0RGF0YS5nZXRSZXN1bHQoKS52YWx1ZUJ1ZmZlcigpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOwotICAgIH0KLQot
ICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKLX0KLQotUmVmPElEQlJl
cXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIHJhbmdlKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVx
dWVzdENvdW50IChJREJPYmplY3RTdG9yZSkiKTsKLSAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0g
ICAgQVNTRVJUKCFyYW5nZS5pc051bGwpOwotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKLSAgICBh
ZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotCi0gICAgc2NoZWR1bGVPcGVyYXRpb24oY3JlYXRl
VHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlv
bjo6ZGlkR2V0Q291bnRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVy
LCByYW5nZSkpOwotCi0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKLXsKLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudCAoSURCSW5kZXgp
Iik7Ci0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsK
LQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlQ291bnQo
Y29udGV4dCwgaW5kZXgsICp0aGlzKTsKLSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwot
Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMs
IHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlciwgJklE
QlRyYW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVyLCByYW5nZSkpOwotCi0gICAgcmV0dXJuIHJl
cXVlc3Q7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIoVHJhbnNh
Y3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5n
ZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2
ZXIiKTsKLQotICAgIHNlcnZlckNvbm5lY3Rpb24oKS5nZXRDb3VudChvcGVyYXRpb24sIGtleVJh
bmdlKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlcihJREJS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlciIpOwot
Ci0gICAgcmVxdWVzdC5zZXRSZXN1bHQocmVzdWx0RGF0YS5yZXN1bHRJbnRlZ2VyKCkpOwotICAg
IHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKLX0KLQotUmVmPElEQlJlcXVl
c3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0RGVsZXRlUmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiByYW5nZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OnJlcXVlc3REZWxldGVSZWNvcmQiKTsKLSAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAgQVNT
RVJUKCFyYW5nZS5pc051bGwpOwotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKLSAgICBhZGRSZXF1
ZXN0KHJlcXVlc3QuZ2V0KCkpOwotCi0gICAgc2NoZWR1bGVPcGVyYXRpb24oY3JlYXRlVHJhbnNh
Y3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlk
RGVsZXRlUmVjb3JkT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2
ZXIsIHJhbmdlKSk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b246OmRlbGV0ZVJlY29yZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24s
IGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmRPblNlcnZlciIpOwotCi0gICAgc2VydmVyQ29u
bmVjdGlvbigpLmRlbGV0ZVJlY29yZChvcGVyYXRpb24sIGtleVJhbmdlKTsKLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVz
dCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZVJlY29yZE9uU2VydmVyIik7Ci0KLSAgICByZXF1
ZXN0LnNldFJlc3VsdFRvVW5kZWZpbmVkKCk7Ci0gICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxldGVk
KHJlc3VsdERhdGEpOwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVl
c3RDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9i
amVjdFN0b3JlJiBvYmplY3RTdG9yZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OnJlcXVlc3RDbGVhck9iamVjdFN0b3JlIik7Ci0gICAgQVNTRVJUKGlzQWN0aXZlKCkp
OwotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKLSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkp
OwotCi0gICAgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUuaW5m
bygpLmlkZW50aWZpZXIoKTsKLSAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9u
T3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZENsZWFy
T2JqZWN0U3RvcmVPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlT25T
ZXJ2ZXIsIG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oV1RG
TW92ZShvcGVyYXRpb24pKTsKLQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi12b2lkIElEQlRy
YW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24m
IG9wZXJhdGlvbiwgY29uc3QgdWludDY0X3QmIG9iamVjdFN0b3JlSWRlbnRpZmllcikKLXsKLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNsZWFyT2JqZWN0U3RvcmVPblNlcnZl
ciIpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLmNsZWFyT2JqZWN0U3RvcmUob3BlcmF0aW9u
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRD
bGVhck9iamVjdFN0b3JlT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVz
dWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZlciIpOwotCi0gICAgcmVxdWVzdC5zZXRSZXN1
bHRUb1VuZGVmaW5lZCgpOwotICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRh
KTsKLX0KLQotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0
b3JlLCBJREJLZXkqIGtleSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgSW5kZXhlZERC
OjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKLXsKLSAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZCIpOwotICAgIEFTU0VSVChp
c0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIWlzUmVhZE9ubHkoKSk7Ci0gICAgQVNTRVJUKG9iamVj
dFN0b3JlLmluZm8oKS5hdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKLQotICAgIFJlZjxJREJSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAq
dGhpcyk7Ci0gICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKLQotICAgIGF1dG8gb3BlcmF0
aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJ
REJUcmFuc2FjdGlvbjo6ZGlkUHV0T3JBZGRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpwdXRP
ckFkZE9uU2VydmVyLCBrZXksICZ2YWx1ZSwgb3ZlcndyaXRlTW9kZSk7Ci0gICAgc2NoZWR1bGVP
cGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKLQotICAgIHJldHVybiByZXF1ZXN0OwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0
aW9uJiBvcGVyYXRpb24sIFJlZlB0cjxJREJLZXk+IGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2Rl
JiBvdmVyd3JpdGVNb2RlKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
cHV0T3JBZGRPblNlcnZlciIpOwotCi0gICAgQVNTRVJUKCFpc1JlYWRPbmx5KCkpOwotCi0gICAg
c2VydmVyQ29ubmVjdGlvbigpLnB1dE9yQWRkKG9wZXJhdGlvbiwga2V5LCB2YWx1ZSwgb3Zlcndy
aXRlTW9kZSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIo
SURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIi
KTsKLQotICAgIHJlcXVlc3Quc2V0UmVzdWx0KHJlc3VsdERhdGEucmVzdWx0S2V5KCkpOwotICAg
IHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUp
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9y
ZSIpOwotCi0gICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLQotICAgIGlmIChhdXRvIG9i
amVjdFN0b3JlID0gbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnRha2Uob2JqZWN0U3RvcmVOYW1l
KSkKLSAgICAgICAgb2JqZWN0U3RvcmUtPm1hcmtBc0RlbGV0ZWQoKTsKLQotICAgIGF1dG8gb3Bl
cmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICZJREJUcmFuc2FjdGlv
bjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpkZWxldGVP
YmplY3RTdG9yZU9uU2VydmVyLCBvYmplY3RTdG9yZU5hbWUpOwotICAgIHNjaGVkdWxlT3BlcmF0
aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29u
c3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRy
YW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZU9uU2VydmVyIik7Ci0gICAgQVNTRVJUKGlzVmVy
c2lvbkNoYW5nZSgpKTsKLQotICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kZWxldGVPYmplY3RTdG9y
ZShvcGVyYXRpb24sIG9iamVjdFN0b3JlTmFtZSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246
OmRpZERlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0
RGF0YSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZU9i
amVjdFN0b3JlT25TZXJ2ZXIiKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3Vs
dERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkRlbGV0ZU9iamVjdFN0b3JlU3VjY2VzcyB8
fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7Ci19Ci0KLXZvaWQg
SURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4KHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRy
YW5zYWN0aW9uOjpkZWxldGVJbmRleCIpOwotCi0gICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgp
KTsKLQotICAgIGF1dG8gb3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRo
aXMsICZJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhPblNlcnZlciwgJklEQlRyYW5zYWN0
aW9uOjpkZWxldGVJbmRleE9uU2VydmVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFt
ZSk7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlv
biYgb3BlcmF0aW9uLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIGluZGV4TmFtZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmRlbGV0ZUluZGV4T25TZXJ2ZXIiKTsKLSAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkp
OwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZUluZGV4KG9wZXJhdGlvbiwgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpk
aWREZWxldGVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCi17
Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2Vy
dmVyIik7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1bHREYXRhLCByZXN1bHREYXRhLnR5cGUoKSA9
PSBJREJSZXN1bHRUeXBlOjpEZWxldGVJbmRleFN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkg
PT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVy
YXRpb25EaWRDb21wbGV0ZShUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uKQotewotICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmdldChvcGVyYXRpb24uaWRlbnRpZmll
cigpKSA9PSAmb3BlcmF0aW9uKTsKLSAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnJlbW92
ZShvcGVyYXRpb24uaWRlbnRpZmllcigpKTsKLQotICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIo
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZXN0YWJsaXNoT25TZXJ2ZXIoKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZXN0YWJsaXNoT25TZXJ2ZXIiKTsKLQot
ICAgIHNlcnZlckNvbm5lY3Rpb24oKS5lc3RhYmxpc2hUcmFuc2FjdGlvbigqdGhpcyk7Ci19Ci0K
LXZvaWQgSURCVHJhbnNhY3Rpb246OmFjdGl2YXRlKCkKLXsKLSAgICBpZiAoaXNGaW5pc2hlZE9y
RmluaXNoaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUgPSBJbmRleGVkREI6
OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2ZTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVh
Y3RpdmF0ZSgpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0
YXRlOjpBY3RpdmUpCi0gICAgICAgIG1fc3RhdGUgPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3Rh
dGU6OkluYWN0aXZlOwotCi0gICAgc2NoZWR1bGVPcGVyYXRpb25UaW1lcigpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjU0ODFhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgL2Rl
di9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2Fj
dGlvbkltcGxfaAotI2RlZmluZSBJREJUcmFuc2FjdGlvbkltcGxfaAotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUluZm8uaCIKLSNpbmNsdWRl
ICJJREJFcnJvci5oIgotI2luY2x1ZGUgIklEQkluZGV4SW1wbC5oIgotI2luY2x1ZGUgIklEQk9i
amVjdFN0b3JlSW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25JbmZvLmgiCi0jaW5jbHVkZSAiSW5kZXhlZERCLmgiCi0jaW5jbHVkZSAi
VGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkN1cnNvckluZm87Ci1jbGFzcyBJ
REJJbmRleEluZm87Ci1jbGFzcyBJREJLZXlEYXRhOwotY2xhc3MgSURCT2JqZWN0U3RvcmVJbmZv
OwotY2xhc3MgSURCUmVzdWx0RGF0YTsKLQotc3RydWN0IElEQktleVJhbmdlRGF0YTsKLQotbmFt
ZXNwYWNlIElEQkNsaWVudCB7Ci0KLWNsYXNzIElEQkN1cnNvcjsKLWNsYXNzIElEQkRhdGFiYXNl
OwotY2xhc3MgSURCSW5kZXg7Ci1jbGFzcyBJREJPcGVuREJSZXF1ZXN0OwotY2xhc3MgVHJhbnNh
Y3Rpb25PcGVyYXRpb247Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uIDogcHVibGljIFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9u
PiBjcmVhdGUoSURCRGF0YWJhc2UmLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICBz
dGF0aWMgUmVmPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoSURCRGF0YWJhc2UmLCBjb25zdCBJREJU
cmFuc2FjdGlvbkluZm8mLCBJREJPcGVuREJSZXF1ZXN0Jik7Ci0KLSAgICB+SURCVHJhbnNhY3Rp
b24oKSBmaW5hbDsKLQotICAgIC8vIElEQlRyYW5zYWN0aW9uIElETAotICAgIGNvbnN0IFN0cmlu
ZyYgbW9kZSgpIGNvbnN0IGZpbmFsOwotICAgIFdlYkNvcmU6OklEQkRhdGFiYXNlKiBkYigpIGZp
bmFsOwotICAgIFJlZlB0cjxET01FcnJvcj4gZXJyb3IoKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgdm9pZCBhYm9ydChFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLQotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNl
IGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gSURCVHJhbnNhY3Rp
b25FdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9N
T2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLSAgICB2b2lkIHJlZkV2ZW50VGFy
Z2V0KCkgZmluYWwgeyByZWYoKTsgfQotICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFs
IHsgZGVyZWYoKTsgfQotICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAg
IGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIGZpbmFsOwotCi0gICAgY29uc3QgY2hhciogYWN0
aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgY2FuU3VzcGVuZEZvckRv
Y3VtZW50U3VzcGVuc2lvbigpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2
aXR5KCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzdG9wKCkgZmluYWw7Ci0KLSAgICBjb25zdCBJ
REJUcmFuc2FjdGlvbkluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KLSAgICBJ
REJEYXRhYmFzZSYgZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9Ci0gICAg
Y29uc3QgSURCRGF0YWJhc2UmIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5n
ZXQoKTsgfQotICAgIElEQkRhdGFiYXNlSW5mbyogb3JpZ2luYWxEYXRhYmFzZUluZm8oKSBjb25z
dCB7IHJldHVybiBtX2luZm8ub3JpZ2luYWxEYXRhYmFzZUluZm8oKTsgfQotCi0gICAgdm9pZCBk
aWRTdGFydChjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZGlkQWJvcnQoY29uc3QgSURCRXJy
b3ImKTsKLSAgICB2b2lkIGRpZENvbW1pdChjb25zdCBJREJFcnJvciYpOwotCi0gICAgYm9vbCBp
c1ZlcnNpb25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2luZm8ubW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlOyB9Ci0gICAgYm9vbCBpc1JlYWRPbmx5
KCkgY29uc3QgeyByZXR1cm4gbV9pbmZvLm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6UmVhZE9ubHk7IH0KLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0KLSAgICBSZWY8
SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5m
byYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoSURCT2JqZWN0
U3RvcmUmLCBjb25zdCBJREJJbmRleEluZm8mKTsKLQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1
ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgSURC
S2V5KiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3
cml0ZU1vZGUpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0UmVjb3JkKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYp
OwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0RGVsZXRlUmVjb3JkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0Q2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCT2JqZWN0U3RvcmUmKTsKLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdENv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0Q291bnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0gICAg
UmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RHZXRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
SURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICBSZWY8SURCUmVxdWVzdD4g
cmVxdWVzdEdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmKTsKLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdE9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCQ3Vyc29y
SW5mbyYpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7Ci0gICAgdm9p
ZCBpdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYsIGNvbnN0IElEQktleURhdGEmLCB1bnNpZ25lZCBs
b25nIGNvdW50KTsKLQotICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBv
YmplY3RTdG9yZU5hbWUpOwotICAgIHZvaWQgZGVsZXRlSW5kZXgodWludDY0X3Qgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7Ci0KLSAgICB2b2lkIGFkZFJl
cXVlc3QoSURCUmVxdWVzdCYpOwotICAgIHZvaWQgcmVtb3ZlUmVxdWVzdChJREJSZXF1ZXN0Jik7
Ci0KLSAgICB2b2lkIGFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0KERPTUVycm9yJik7Ci0KLSAgICBJ
REJDb25uZWN0aW9uVG9TZXJ2ZXImIHNlcnZlckNvbm5lY3Rpb24oKTsKLQotICAgIHZvaWQgYWN0
aXZhdGUoKTsKLSAgICB2b2lkIGRlYWN0aXZhdGUoKTsKLQotICAgIHZvaWQgb3BlcmF0aW9uRGlk
Q29tcGxldGUoVHJhbnNhY3Rpb25PcGVyYXRpb24mKTsKLQotICAgIGJvb2wgaXNGaW5pc2hlZE9y
RmluaXNoaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0ZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb24oSURCRGF0YWJhc2UmLCBjb25zdCBJREJUcmFuc2Fj
dGlvbkluZm8mLCBJREJPcGVuREJSZXF1ZXN0Kik7Ci0KLSAgICB2b2lkIGNvbW1pdCgpOwotCi0g
ICAgdm9pZCBub3RpZnlEaWRBYm9ydChjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZmluaXNo
QWJvcnRPckNvbW1pdCgpOwotCi0gICAgdm9pZCBzY2hlZHVsZU9wZXJhdGlvbihSZWZQdHI8VHJh
bnNhY3Rpb25PcGVyYXRpb24+JiYpOwotICAgIHZvaWQgb3BlcmF0aW9uVGltZXJGaXJlZCgpOwot
Ci0gICAgdm9pZCBmaXJlT25Db21wbGV0ZSgpOwotICAgIHZvaWQgZmlyZU9uQWJvcnQoKTsKLSAg
ICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOwotCi0gICAgUmVmPElEQlJlcXVlc3Q+
IHJlcXVlc3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJ
bmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0KLSAg
ICB2b2lkIGNvbW1pdE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJik7Ci0gICAgdm9pZCBh
Ym9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMoVHJhbnNhY3Rpb25PcGVyYXRpb24mKTsKLQot
ICAgIHZvaWQgY3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYs
IGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwotICAgIHZvaWQgZGlkQ3JlYXRlT2JqZWN0U3Rv
cmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAgICB2b2lkIGNyZWF0ZUluZGV4
T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJJbmRleEluZm8mKTsKLSAg
ICB2b2lkIGRpZENyZWF0ZUluZGV4T25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0g
ICAgdm9pZCBjbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBj
b25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLSAgICB2b2lkIGRpZENsZWFy
T2JqZWN0U3RvcmVPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwot
Ci0gICAgdm9pZCBwdXRPckFkZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRy
PElEQktleT4sIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBJbmRleGVkREI6
Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSYpOwotICAgIHZvaWQgZGlkUHV0T3JBZGRPblNlcnZl
cihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBnZXRSZWNv
cmRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYp
OwotICAgIHZvaWQgZGlkR2V0UmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJl
c3VsdERhdGEmKTsKLQotICAgIHZvaWQgZ2V0Q291bnRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJh
dGlvbiYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgZGlkR2V0Q291bnRPblNl
cnZlcihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBkZWxl
dGVSZWNvcmRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYpOwotICAgIHZvaWQgZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNv
bnN0IElEQlJlc3VsdERhdGEmKTsKLQotICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZl
cihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKTsK
LSAgICB2b2lkIGRpZERlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0
YSYpOwotCi0gICAgdm9pZCBkZWxldGVJbmRleE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9u
JiwgY29uc3QgdWludDY0X3QmIG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUpOwotICAgIHZvaWQgZGlkRGVsZXRlSW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1
bHREYXRhJik7Ci0KLSAgICBSZWY8SURCUmVxdWVzdD4gZG9SZXF1ZXN0T3BlbkN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgUmVmPElEQkN1cnNvcj4mJik7Ci0gICAgdm9pZCBvcGVuQ3Vy
c29yT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJDdXJzb3JJbmZvJik7
Ci0gICAgdm9pZCBkaWRPcGVuQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJl
c3VsdERhdGEmKTsKLQotICAgIHZvaWQgaXRlcmF0ZUN1cnNvck9uU2VydmVyKFRyYW5zYWN0aW9u
T3BlcmF0aW9uJiwgY29uc3QgSURCS2V5RGF0YSYsIGNvbnN0IHVuc2lnbmVkIGxvbmcmIGNvdW50
KTsKLSAgICB2b2lkIGRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3Qg
SURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCB0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyhJbmRl
eGVkREI6OlRyYW5zYWN0aW9uU3RhdGUpOwotCi0gICAgdm9pZCBlc3RhYmxpc2hPblNlcnZlcigp
OwotCi0gICAgdm9pZCBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7Ci0KLSAgICBSZWY8SURCRGF0
YWJhc2U+IG1fZGF0YWJhc2U7Ci0gICAgSURCVHJhbnNhY3Rpb25JbmZvIG1faW5mbzsKLQotICAg
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZSBtX3N0YXRlIHsgSW5kZXhlZERCOjpUcmFuc2Fj
dGlvblN0YXRlOjpJbmFjdGl2ZSB9OwotICAgIGJvb2wgbV9zdGFydGVkT25TZXJ2ZXIgeyBmYWxz
ZSB9OwotCi0gICAgSURCRXJyb3IgbV9pZGJFcnJvcjsKLSAgICBSZWZQdHI8RE9NRXJyb3I+IG1f
ZG9tRXJyb3I7Ci0KLSAgICBUaW1lciBtX29wZXJhdGlvblRpbWVyOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxUaW1lcj4gbV9hY3RpdmF0aW9uVGltZXI7Ci0KLSAgICBSZWZQdHI8SURCT3BlbkRCUmVx
dWVzdD4gbV9vcGVuREJSZXF1ZXN0OwotCi0gICAgRGVxdWU8UmVmUHRyPFRyYW5zYWN0aW9uT3Bl
cmF0aW9uPj4gbV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlOwotICAgIERlcXVlPFJlZlB0cjxU
cmFuc2FjdGlvbk9wZXJhdGlvbj4+IG1fYWJvcnRRdWV1ZTsKLSAgICBIYXNoTWFwPElEQlJlc291
cmNlSWRlbnRpZmllciwgUmVmUHRyPFRyYW5zYWN0aW9uT3BlcmF0aW9uPj4gbV90cmFuc2FjdGlv
bk9wZXJhdGlvbk1hcDsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+PiBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXM7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxJREJS
ZXF1ZXN0Pj4gbV9vcGVuUmVxdWVzdHM7Ci0KLSAgICBib29sIG1fY29udGV4dFN0b3BwZWQgeyBm
YWxzZSB9OwotfTsKLQotY2xhc3MgVHJhbnNhY3Rpb25BY3RpdmF0b3IgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFRyYW5zYWN0aW9uQWN0aXZhdG9yKTsKLXB1YmxpYzoKLSAgICBUcmFuc2Fj
dGlvbkFjdGl2YXRvcihJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgICAgIDogbV90
cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChtX3RyYW5zYWN0aW9u
KQotICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWN0aXZhdGUoKTsKLSAgICB9Ci0KLSAgICB+
VHJhbnNhY3Rpb25BY3RpdmF0b3IoKQotICAgIHsKLSAgICAgICAgaWYgKG1fdHJhbnNhY3Rpb24p
Ci0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5kZWFjdGl2YXRlKCk7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIElEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSURCQ2xpZW50Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJUcmFuc2FjdGlvbkltcGxfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNp
b25DaGFuZ2VFdmVudEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkM2E4ZjJhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQg
ewotCi1JREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJz
aW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkK
LSAgICA6IFdlYkNvcmU6OklEQlZlcnNpb25DaGFuZ2VFdmVudChldmVudFR5cGUpCi0gICAgLCBt
X3JlcXVlc3RJZGVudGlmaWVyKHJlcXVlc3RJZGVudGlmaWVyKQotICAgICwgbV9vbGRWZXJzaW9u
KG9sZFZlcnNpb24pCi0gICAgLCBtX25ld1ZlcnNpb24obmV3VmVyc2lvbikKLXsKLX0KLQotT3B0
aW9uYWw8dWludDY0X3Q+IElEQlZlcnNpb25DaGFuZ2VFdmVudDo6bmV3VmVyc2lvbigpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX25ld1ZlcnNpb24pCi0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAg
IHJldHVybiBtX25ld1ZlcnNpb247Ci19Ci0KLUV2ZW50SW50ZXJmYWNlIElEQlZlcnNpb25DaGFu
Z2VFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAotewotICAgIHJldHVybiBJREJWZXJzaW9u
Q2hhbmdlRXZlbnRJbnRlcmZhY2VUeXBlOwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQK
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDExOTExNTUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaAorKysgL2Rl
di9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlZlcnNpb25D
aGFuZ2VFdmVudEltcGxfaAotI2RlZmluZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsX2gKLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCUmVzb3VyY2VJZGVu
dGlmaWVyLmgiCi0jaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1jbGFzcyBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6SURCVmVyc2lvbkNoYW5nZUV2ZW50IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKHVp
bnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCVmVy
c2lvbkNoYW5nZUV2ZW50KElEQlJlc291cmNlSWRlbnRpZmllcjo6ZW1wdHlWYWx1ZSgpLCBvbGRW
ZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudFR5cGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVm
PElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1Zl
cnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSURCVmVyc2lvbkNoYW5nZUV2ZW50KHJlcXVlc3RJZGVudGlmaWVy
LCBvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudFR5cGUpKTsKLSAgICB9Ci0KLSAgICBjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9yZXF1ZXN0SWRlbnRpZmllcjsgfQotCi0gICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2VFdmVu
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotcHJpdmF0ZToKLSAgICBJREJWZXJz
aW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRp
ZmllciwgdWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbiwgY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUpOwotCi0gICAgdWludDY0X3Qgb2xkVmVyc2lvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fb2xkVmVyc2lvbjsgfQotICAgIE9wdGlvbmFsPHVpbnQ2NF90
PiBuZXdWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgRXZlbnRJbnRlcmZhY2UgZXZlbnRJ
bnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIElEQlJlc291cmNlSWRlbnRpZmllciBt
X3JlcXVlc3RJZGVudGlmaWVyOwotICAgIHVpbnQ2NF90IG1fb2xkVmVyc2lvbjsKLSAgICB1aW50
NjRfdCBtX25ld1ZlcnNpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpJREJDbGllbnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RXZlbnQmIGV2ZW50KSB7IHJldHVybiBldmVudC5pc1ZlcnNpb25D
aGFuZ2VFdmVudCgpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJWZXJzaW9uQ2hhbmdlRXZl
bnRJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwCmluZGV4IGY2N2FkMWQuLmE2
ZWFkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcApAQCAtMjgsNyArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJDdXJzb3JJ
bXBsLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBJREJDbGllbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAppbmRleCBjOTM5
NjA1Li4zYzA5ZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaApAQCAtMjgsOSArMjgs
OSBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJSZXF1
ZXN0SW1wbC5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKICNpbmNsdWRlICJJREJSZXNvdXJj
ZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkltcGwuaCIKKyNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZv
LmNwcAppbmRleCAwZWI5NDE0Li42NzBhMzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCQ3Vyc29ySW5mby5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkN1cnNvckluZm8uY3BwCkBAIC0yOCwx
NyArMjgsMTcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25JbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKICNpbmNs
dWRlICJJbmRleGVkREIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJDdXJzb3JJbmZv
IElEQkN1cnNvckluZm86Om9iamVjdFN0b3JlQ3Vyc29yKElEQkNsaWVudDo6SURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYgcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
bikKK0lEQkN1cnNvckluZm8gSURCQ3Vyc29ySW5mbzo6b2JqZWN0U3RvcmVDdXJzb3IoSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKICAgICByZXR1cm4geyB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCByYW5nZSwgZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVl
IH07CiB9CiAKLUlEQkN1cnNvckluZm8gSURCQ3Vyc29ySW5mbzo6aW5kZXhDdXJzb3IoSURCQ2xp
ZW50OjpJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRl
bnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IHJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6
Q3Vyc29yVHlwZSB0eXBlKQorSURCQ3Vyc29ySW5mbyBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNv
cihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJh
bmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSB0eXBlKQogewogICAgIHJldHVybiB7IHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGluZGV4SWRlbnRpZmllciwgcmFuZ2UsIGRpcmVjdGlvbiwgdHlwZSB9OwogfQpA
QCAtNDcsNyArNDcsNyBAQCBJREJDdXJzb3JJbmZvOjpJREJDdXJzb3JJbmZvKCkKIHsKIH0KIAot
SURCQ3Vyc29ySW5mbzo6SURCQ3Vyc29ySW5mbyhJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmIHJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZSB0eXBlKQorSURCQ3Vyc29ySW5mbzo6SURCQ3Vyc29ySW5mbyhJ
REJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgdHlwZSkKICAgICA6IG1fY3Vyc29y
SWRlbnRpZmllcih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCiAgICAgLCBtX3RyYW5z
YWN0aW9uSWRlbnRpZmllcih0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKQogICAgICwg
bV9vYmplY3RTdG9yZUlkZW50aWZpZXIob2JqZWN0U3RvcmVJZGVudGlmaWVyKQpAQCAtNTksNyAr
NTksNyBAQCBJREJDdXJzb3JJbmZvOjpJREJDdXJzb3JJbmZvKElEQkNsaWVudDo6SURCVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYgogewogfQogCi1JREJDdXJzb3JJbmZvOjpJ
REJDdXJzb3JJbmZvKElEQkNsaWVudDo6SURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGly
ZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgdHlwZSkKK0lEQkN1cnNvckluZm86OklEQkN1
cnNvckluZm8oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9y
ZUlkZW50aWZpZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVk
REI6OkN1cnNvclR5cGUgdHlwZSkKICAgICA6IG1fY3Vyc29ySWRlbnRpZmllcih0cmFuc2FjdGlv
bi5zZXJ2ZXJDb25uZWN0aW9uKCkpCiAgICAgLCBtX3RyYW5zYWN0aW9uSWRlbnRpZmllcih0cmFu
c2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKQogICAgICwgbV9vYmplY3RTdG9yZUlkZW50aWZp
ZXIob2JqZWN0U3RvcmVJZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkN1cnNvckluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZvLmgKaW5kZXggOWExY2VlMi4uOWZk
OThjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkN1cnNvckluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCQ3Vyc29ySW5mby5oCkBAIC0zMyw5ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotbmFtZXNwYWNlIElEQkNsaWVudCB7CiBjbGFzcyBJREJUcmFuc2FjdGlvbjsKLX0K
IAogbmFtZXNwYWNlIEluZGV4ZWREQiB7CiBlbnVtIGNsYXNzIEN1cnNvckRpcmVjdGlvbjsKQEAg
LTUyLDggKzUwLDggQEAgZW51bSBjbGFzcyBDdXJzb3JEdXBsaWNpdHkgewogCiBjbGFzcyBJREJD
dXJzb3JJbmZvIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSURCQ3Vyc29ySW5mbyBvYmplY3RTdG9y
ZUN1cnNvcihJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbik7Ci0gICAgc3RhdGljIElEQkN1cnNvckluZm8gaW5kZXhDdXJzb3IoSURCQ2xpZW50OjpJ
REJUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3Qg
aW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlKTsKKyAgICBzdGF0aWMgSURCQ3Vyc29y
SW5mbyBvYmplY3RTdG9yZUN1cnNvcihJREJUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24pOworICAgIHN0YXRpYyBJREJDdXJzb3JJbmZvIGluZGV4Q3Vyc29yKElEQlRyYW5z
YWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUpOwogCiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVy
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvcklkZW50aWZpZXI7IH0KICAgICB1
aW50NjRfdCBzb3VyY2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJZGVudGlm
aWVyOyB9CkBAIC03NCw4ICs3Miw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIElEQkN1cnNvckluZm8mKTsKIAogcHJp
dmF0ZToKLSAgICBJREJDdXJzb3JJbmZvKElEQkNsaWVudDo6SURCVHJhbnNhY3Rpb24mLCB1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUpOwotICAgIElEQkN1
cnNvckluZm8oSURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURh
dGEmLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlKTsK
KyAgICBJREJDdXJzb3JJbmZvKElEQlRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlKTsKKyAgICBJREJDdXJzb3JJbmZvKElEQlRyYW5z
YWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElk
ZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUpOwogCiAgICAgSURCQ3Vyc29ySW5mbyhjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImLCBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCB1aW50
NjRfdCwgdWludDY0X3QsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4ZWREQjo6Q3Vyc29y
U291cmNlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBl
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQlJlcXVlc3REYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAKaW5kZXggYWNjYWExNC4uOWJjOTk1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVx
dWVzdERhdGEuY3BwCkBAIC0yOSw3ICsyOSw4IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKICNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCIKLSNpbmNsdWRlICJJREJP
cGVuREJSZXF1ZXN0SW1wbC5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
SURCT3BlbkRCUmVxdWVzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDcgKzM4
LDcgQEAgSURCUmVxdWVzdERhdGE6OklEQlJlcXVlc3REYXRhKCkKIHsKIH0KIAotSURCUmVxdWVz
dERhdGE6OklEQlJlcXVlc3REYXRhKGNvbnN0IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2Vy
dmVyJiBjb25uZWN0aW9uLCBjb25zdCBJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3QmIHJlcXVl
c3QpCitJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEoY29uc3QgSURCQ2xpZW50OjpJREJD
b25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNvbnN0IElEQk9wZW5EQlJlcXVlc3QmIHJl
cXVlc3QpCiAgICAgOiBtX3NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKGNvbm5lY3Rpb24uaWRl
bnRpZmllcigpKQogICAgICwgbV9yZXF1ZXN0SWRlbnRpZmllcihzdGQ6Om1ha2VfdW5pcXVlPElE
QlJlc291cmNlSWRlbnRpZmllcj4oY29ubmVjdGlvbiwgcmVxdWVzdCkpCiAgICAgLCBtX2RhdGFi
YXNlSWRlbnRpZmllcihyZXF1ZXN0LmRhdGFiYXNlSWRlbnRpZmllcigpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEu
aAppbmRleCA3NTg5YWRmLi4wNmQxNWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaApAQCAtMzQsMjAgKzM0
LDIxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCT3BlbkRCUmVxdWVzdDsK
K2NsYXNzIElEQlRyYW5zYWN0aW9uOworCiBuYW1lc3BhY2UgSW5kZXhlZERCIHsKIGVudW0gY2xh
c3MgSW5kZXhSZWNvcmRUeXBlOwogfQogCiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIGNsYXNzIElE
QkNvbm5lY3Rpb25Ub1NlcnZlcjsKLWNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7Ci1jbGFzcyBJREJU
cmFuc2FjdGlvbjsKIGNsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uOwogfQogCiBjbGFzcyBJREJS
ZXF1ZXN0RGF0YSB7CiBwdWJsaWM6Ci0gICAgSURCUmVxdWVzdERhdGEoY29uc3QgSURCQ2xpZW50
OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBjb25zdCBJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVl
c3QmKTsKKyAgICBJREJSZXF1ZXN0RGF0YShjb25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25U
b1NlcnZlciYsIGNvbnN0IElEQk9wZW5EQlJlcXVlc3QmKTsKICAgICBleHBsaWNpdCBJREJSZXF1
ZXN0RGF0YShJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJik7CiAgICAgSURCUmVxdWVz
dERhdGEoY29uc3QgSURCUmVxdWVzdERhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlm
aWVyLmNwcAppbmRleCAyNmM2ZTZjLi43NzNjNTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVu
dGlmaWVyLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRv
Q2xpZW50LmgiCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCi0jaW5jbHVkZSAi
SURCUmVxdWVzdEltcGwuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjUsNyArNjUsNyBAQCBJ
REJSZXNvdXJjZUlkZW50aWZpZXI6OklEQlJlc291cmNlSWRlbnRpZmllcihjb25zdCBJREJDbGll
bnQ6OklEQkNvbm5lY3Rpb25Ub1NlcgogewogfQogCi1JREJSZXNvdXJjZUlkZW50aWZpZXI6OklE
QlJlc291cmNlSWRlbnRpZmllcihjb25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZl
ciYgY29ubmVjdGlvbiwgY29uc3QgSURCQ2xpZW50OjpJREJSZXF1ZXN0JiByZXF1ZXN0KQorSURC
UmVzb3VyY2VJZGVudGlmaWVyOjpJREJSZXNvdXJjZUlkZW50aWZpZXIoY29uc3QgSURCQ2xpZW50
OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlcXVlc3QmIHJl
cXVlc3QpCiAgICAgOiBtX2lkYkNvbm5lY3Rpb25JZGVudGlmaWVyKGNvbm5lY3Rpb24uaWRlbnRp
ZmllcigpKQogICAgICwgbV9yZXNvdXJjZU51bWJlcihyZXF1ZXN0LnJlc291cmNlSWRlbnRpZmll
cigpLm1fcmVzb3VyY2VOdW1iZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmgKaW5k
ZXggNDE0MTM0NS4uMjUxN2VhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaApAQCAt
MzIsOSArMzIsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJSZXF1ZXN0
OworCiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIGNsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsK
LWNsYXNzIElEQlJlcXVlc3Q7CiB9CiAKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewpAQCAtNDQsNyAr
NDUsNyBAQCBjbGFzcyBJREJDb25uZWN0aW9uVG9DbGllbnQ7CiBjbGFzcyBJREJSZXNvdXJjZUlk
ZW50aWZpZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IElEQlJlc291cmNlSWRlbnRpZmllcihj
b25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYpOwotICAgIElEQlJlc291cmNl
SWRlbnRpZmllcihjb25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0
IElEQkNsaWVudDo6SURCUmVxdWVzdCYpOworICAgIElEQlJlc291cmNlSWRlbnRpZmllcihjb25z
dCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0IElEQlJlcXVlc3QmKTsK
ICAgICBleHBsaWNpdCBJREJSZXNvdXJjZUlkZW50aWZpZXIoY29uc3QgSURCU2VydmVyOjpJREJD
b25uZWN0aW9uVG9DbGllbnQmKTsKIAogICAgIHN0YXRpYyBJREJSZXNvdXJjZUlkZW50aWZpZXIg
ZGVsZXRlZFZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rpb25JbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJUcmFuc2FjdGlvbkluZm8uY3BwCmluZGV4IDE2YTUyZTQu
LjNjYWJkNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJUcmFuc2FjdGlvbkluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJUcmFuc2FjdGlvbkluZm8uY3BwCkBAIC0yOCw3ICsyOCw3IEBA
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIklEQlRyYW5zYWN0
aW9uSW1wbC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCA2MWMwN2E4Li5mYWUxMzM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Q
cm9jZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1
ZGUgIklEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIgogI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIK
ICNpbmNsdWRlICJJREJLZXlSYW5nZURhdGEuaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0
SW1wbC5oIgorI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKICNpbmNsdWRlICJJREJSZXF1
ZXN0RGF0YS5oIgogI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SW5Qcm9jZXNzSURCU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKaW5kZXggNzFkOTc4Yi4uMGU2NDMwMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lE
QlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
blByb2Nlc3NJREJTZXJ2ZXIuaApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSURCQ29u
bmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCi0j
aW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdEltcGwuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSURCU2VydmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU2MjUzOWQuLjg1ZDAxMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE5NDYsMTIgKzE5NDYsNiBAQAogCQk1MTAxOTJEMjE4QjZCOUFCMDA3RkM3QTEgLyogSW1hZ2VD
b250cm9sc1Jvb3RFbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTAxOTJEMDE4QjZCOUFCMDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jv
b3RFbGVtZW50TWFjLmggKi87IH07CiAJCTUxMDE5MkQ1MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFn
ZUNvbnRyb2xzUm9vdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMTkyRDMxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNS
b290RWxlbWVudC5jcHAgKi87IH07CiAJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFn
ZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMDE5MkQ0MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9v
dEVsZW1lbnQuaCAqLzsgfTsKLQkJNTEwMzEwNEYxQkE4Q0MwMzAwMzMyOUMwIC8qIElEQkZhY3Rv
cnlJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMDMxMDRBMUJBOEM2QTYwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1wbC5jcHAgKi87IH07Ci0J
CTUxMDMxMDUwMUJBOENDMDMwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1wbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMzEwNEIxQkE4QzZBNjAwMzMy
OUMwIC8qIElEQkZhY3RvcnlJbXBsLmggKi87IH07Ci0JCTUxMDMxMDVBMUJBOERCNTYwMDMzMjlD
MCAvKiBJREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAzMTA1NjFCQThEQjMwMDAzMzI5QzAgLyogSURCT3BlbkRC
UmVxdWVzdEltcGwuY3BwICovOyB9OwotCQk1MTAzMTA1QjFCQThEQjU2MDAzMzI5QzAgLyogSURC
T3BlbkRCUmVxdWVzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMDMxMDU3MUJBOERCMzAwMDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1w
bC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUx
MDMxMDVDMUJBOERCNTYwMDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAzMTA1ODFCQThEQjMwMDAzMzI5
QzAgLyogSURCUmVxdWVzdEltcGwuY3BwICovOyB9OwotCQk1MTAzMTA1RDFCQThEQjU2MDAzMzI5
QzAgLyogSURCUmVxdWVzdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMDMxMDU5MUJBOERCMzAwMDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMDZE
N0JEMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNkQ3QkIxOEJEQjc2RjAwMEFC
MTY2IC8qIENvbnRleHRNZW51Q29udGV4dC5jcHAgKi87IH07CiAJCTUxMDZEN0JFMThCREI3NkYw
MDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDZEN0JDMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0
TWVudUNvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MTBBNThFNDFCQUE0MEIxMDBDMTkyODIgLyogSW5Qcm9jZXNzSURCU2VydmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE1OEUy
MUJBQTQwQUUwMEMxOTI4MiAvKiBJblByb2Nlc3NJREJTZXJ2ZXIuY3BwICovOyB9OwpAQCAtMjA0
Nyw4ICsyMDQxLDYgQEAKIAkJNTE2MDMwNkMwQ0M0MzYyMzAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1D
Ri5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYw
MzA2QjBDQzQzNjIzMDBDOEFDMjUgLyogRmlsZVN5c3RlbUNGLmNwcCAqLzsgfTsKIAkJNTE2MDcx
MkUxQkQ4MzA3ODAwREJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW5mby5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwNzEyQzFCRDgzMDcyMDBEQkM0
RjIgLyogSURCT2JqZWN0U3RvcmVJbmZvLmNwcCAqLzsgfTsKIAkJNTE2MDcxMkYxQkQ4MzA3ODAw
REJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MDcxMkQxQkQ4MzA3MjAwREJDNEYyIC8qIElEQk9iamVj
dFN0b3JlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTUxNjA3MTMwMUJEODMwODYwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUltcGwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MDcxMjkx
QkQ4MzA1MzAwREJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW1wbC5jcHAgKi87IH07Ci0JCTUxNjA3
MTMxMUJEODMwODYwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUltcGwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjA3MTJBMUJEODMwNTMwMERCQzRG
MiAvKiBJREJPYmplY3RTdG9yZUltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1MTYwNzEzMjFCRDgzMDhCMDBEQkM0RjIgLyogVHJhbnNhY3Rp
b25PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjA3MTJCMUJEODMwNTMwMERCQzRGMiAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNjBGNDk4
MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBGNDk3MEIwQUE3NUYwMEMxRDJBRiAvKiBI
aXN0b3J5SXRlbU1hYy5tbSAqLzsgfTsKIAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZFIC8qIFNj
aGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi87
IH07CkBAIC0yMTYwLDE0ICsyMTUyLDYgQEAKIAkJNTE5OEY3QTkxQkJERDM4NTAwRTJDQzVGIC8q
IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOThGN0E3MUJCREQzODEwMEUyQ0M1RiAvKiBVbmlxdWVJ
REJEYXRhYmFzZVRyYW5zYWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTE5OEY3QUMxQkJERDNFQjAwRTJDQzVGIC8qIElEQlRyYW5zYWN0
aW9uSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTk4RjdBQTFCQkREM0UzMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmNwcCAqLzsg
fTsKIAkJNTE5OEY3QUQxQkJERDNFQjAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QUIxQkJE
RDNFMzAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxOThGN0IwMUJCREY1QzgwMEUyQ0M1RiAv
KiBJREJEYXRhYmFzZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE5OEY3QUUxQkJERjU5MjAwRTJDQzVGIC8qIElEQkRhdGFiYXNlSW1wbC5j
cHAgKi87IH07Ci0JCTUxOThGN0IxMUJCREY1QzgwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOThGN0FG
MUJCREY1OTIwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MTk4RjdCNDFCQkUwMDNDMDBFMkNDNUYg
LyogSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxOThGN0IyMUJCRTAwMUQwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlv
bkltcGwuY3BwICovOyB9OwotCQk1MTk4RjdCNTFCQkUwMDNDMDBFMkNDNUYgLyogSURCVHJhbnNh
Y3Rpb25JbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTk4RjdCMzFCQkUwMDFEMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE5OEY3QjgxQkMz
MTQ1MTAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QjYxQkMzMTQxNzAwRTJD
QzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwICovOyB9OwotCQk1MTk4RjdCOTFC
QzMxNDUxMDBFMkNDNUYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QjcxQkMzMTQxNzAwRTJD
QzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaCAqLzsgfTsKLQkJNTE5OEY3QkUxQkMz
MzhBRjAwRTJDQzVGIC8qIElEQkFueUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QkMxQkMzMzhBOTAwRTJDQzVGIC8qIElEQkFueUlt
cGwuY3BwICovOyB9OwotCQk1MTk4RjdCRjFCQzMzOEFGMDBFMkNDNUYgLyogSURCQW55SW1wbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QkQx
QkMzMzhBOTAwRTJDQzVGIC8qIElEQkFueUltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTk4RjdDMDFCQzQ4NTY3MDBFMkNDNUYgLyogSURC
Q29ubmVjdGlvblRvU2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxODVGQ0JDMUJCNUNCNzcwMDEyODk4RiAvKiBJREJDb25uZWN0aW9uVG9T
ZXJ2ZXIuY3BwICovOyB9OwogCQk1MTk4RjdDMTFCQzQ4NTY3MDBFMkNDNUYgLyogSURCQ29ubmVj
dGlvblRvU2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTBBNThGRDFCQjA3QTk2MDBDMTkyODIgLyogSURCQ29ubmVjdGlvblRvU2VydmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFBMDUy
MzMxMDU4Nzc0RjAwQ0M5RTk1IC8qIENyZWRlbnRpYWxTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUEwNTIzMTEwNTg3NzRGMDBDQzlFOTUg
LyogQ3JlZGVudGlhbFN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMjIzNCwxNCArMjIxOCw4IEBACiAJCTUxRUU3QjNBMUFBNTEyMzEw
MEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUU3QjM5MUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJj
ZUxvYWRJbmZvLmNwcCAqLzsgfTsKIAkJNTFFRUFBNzMxQkVGRkFCMTAwMjE4MDA4IC8qIEluZGV4
VmFsdWVFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUVFQUE3MTFCRUZGQTc5MDAyMTgwMDggLyogSW5kZXhWYWx1ZUVudHJ5LmNwcCAqLzsg
fTsKIAkJNTFFRUFBNzQxQkVGRkFCMTAwMjE4MDA4IC8qIEluZGV4VmFsdWVFbnRyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFRUFBNzIxQkVGRkE3
OTAwMjE4MDA4IC8qIEluZGV4VmFsdWVFbnRyeS5oICovOyB9OwotCQk1MUY3OThFNTFCRTg4MDky
MDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY3OThFMTFCRTg4MDg0MDA4QUU0OTEgLyogSURCQ3Vyc29y
SW1wbC5jcHAgKi87IH07Ci0JCTUxRjc5OEU2MUJFODgwOTIwMDhBRTQ5MSAvKiBJREJDdXJzb3JJ
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY3
OThFMjFCRTg4MDg0MDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxRjc5OEU3MUJFODgwOTIwMDhBRTQ5
MSAvKiBJREJJbmRleEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFGNzk4RTMxQkU4ODA4NDAwOEFFNDkxIC8qIElEQkluZGV4SW1wbC5jcHAg
Ki87IH07Ci0JCTUxRjc5OEU4MUJFODgwOTIwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjc5OEU0MUJFODgw
ODQwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUY3OThFRjFCRTg4MEU3MDA4QUU0OTEgLyogSURCSW5k
ZXhJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRjc5OEVCMUJFODgwRDMwMDhBRTQ5MSAvKiBJREJJbmRleEluZm8uY3BwICovOyB9OwogCQk1
MUY3OThGMDFCRTg4MEU3MDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY3OThFQzFCRTg4MEQzMDA4QUU0OTEg
LyogSURCSW5kZXhJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNTFGNzk4RjMxQkU4ODM5NDAwOEFFNDkxIC8qIElEQkN1cnNvcldpdGhWYWx1
ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFGNzk4RjExQkU4ODM4RDAwOEFFNDkxIC8qIElEQkN1cnNvcldpdGhWYWx1ZUltcGwuY3BwICov
OyB9OwotCQk1MUY3OThGNDFCRTg4Mzk0MDA4QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlSW1w
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNzk4
RjIxQkU4ODM4RDAwOEFFNDkxIC8qIElEQkN1cnNvcldpdGhWYWx1ZUltcGwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUZBMkQ3ODE1MjEzMkIz
MDBDMUJBMEIgLyogRE9NV2luZG93RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdGQkExODE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2lu
ZG93RXh0ZW5zaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTFGQjU1MDQxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjU1MDIxMTNFM0U5
MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5oICovOyB9OwogCQk1MUZCNTUwNTExM0UzRTkxMDA4
MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRkI1NTAzMTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQu
Y3BwICovOyB9OwpAQCAtOTQ5OSwxMiArOTQ3Nyw2IEBACiAJCTUxMDE5MkQzMThCNkI5QjcwMDdG
QzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTkyRDQxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29u
dHJvbHNSb290RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUNvbnRyb2xzUm9vdEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEw
MTkyRDgxOEI3RDdBQjAwN0ZDN0ExIC8qIGltYWdlQ29udHJvbHNNYWMuY3NzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5jc3M7IHBhdGggPSBpbWFnZUNvbnRyb2xzTWFjLmNzczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTEwMzEwNEExQkE4QzZBNjAwMzMyOUMwIC8qIElEQkZhY3RvcnlJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkZhY3RvcnlJbXBsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwMzEwNEIxQkE4QzZBNjAwMzMyOUMw
IC8qIElEQkZhY3RvcnlJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElE
QkZhY3RvcnlJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMDMxMDU2MUJB
OERCMzAwMDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJPcGVuREJSZXF1ZXN0SW1wbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMDMxMDU3MUJBOERCMzAwMDMzMjlDMCAvKiBJREJPcGVu
REJSZXF1ZXN0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJPcGVu
REJSZXF1ZXN0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTAzMTA1ODFC
QThEQjMwMDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSURCUmVxdWVzdEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MTAzMTA1OTFCQThEQjMwMDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUmVxdWVzdEltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMzEwNUUxQkE4RTA5MDAwMzMyOUMwIC8qIElEQkRh
dGFiYXNlSWRlbnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTAzMTA1RjFCQThFMDkwMDAzMzI5QzAgLyogSURCRGF0YWJhc2VJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlSWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA2RDdCQjE4QkRCNzZGMDAwQUIxNjYgLyog
Q29udGV4dE1lbnVDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnRleHRNZW51Q29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NjEyLDggKzk1ODQsNiBAQAogCQk1MTVFNUZFRjE5NTEwMTQ3MDA4NkNBNUUgLyogUGxhdGZv
cm1HYW1lcGFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtR2FtZXBhZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTYwMzAwQTBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3Rl
bVBPU0lYLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTeXN0
ZW1QT1NJWC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjAzMDZCMENDNDM2
MjMwMEM4QUMyNSAvKiBGaWxlU3lzdGVtQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRmlsZVN5c3RlbUNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTE2MDcxMjkxQkQ4MzA1MzAwREJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJPYmplY3RTdG9yZUltcGwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTYwNzEyQTFCRDgzMDUzMDBEQkM0RjIg
LyogSURCT2JqZWN0U3RvcmVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQk9iamVjdFN0b3JlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYw
NzEyQjFCRDgzMDUzMDBEQkM0RjIgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNhY3Rpb25PcGVyYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MDcxMkMxQkQ4MzA3MjAwREJDNEYyIC8qIElEQk9iamVj
dFN0b3JlSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJP
YmplY3RTdG9yZUluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwNzEy
RDFCRDgzMDcyMDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTcwNSwxNCArOTY3NSw2IEBACiAJCTUxOThGN0E3MUJCREQzODEwMEUy
Q0M1RiAvKiBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5OEY3QUExQkJERDNFMzAwRTJDQzVGIC8qIElEQlRyYW5z
YWN0aW9uSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJU
cmFuc2FjdGlvbkluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTk4RjdB
QjFCQkREM0UzMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTk4RjdBRTFCQkRGNTkyMDBFMkNDNUYgLyogSURCRGF0YWJhc2VJbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkRhdGFiYXNlSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOThGN0FGMUJCREY1OTIwMEUy
Q0M1RiAvKiBJREJEYXRhYmFzZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCRGF0YWJhc2VJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOThG
N0IyMUJCRTAwMUQwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25JbXBsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5OEY3QjMxQkJFMDAxRDAwRTJDQzVGIC8qIElEQlRy
YW5zYWN0aW9uSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFu
c2FjdGlvbkltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5OEY3QjYxQkMz
MTQxNzAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOThGN0I3MUJDMzE0MTcwMEUyQ0M1RiAv
KiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTE5OEY3QkMxQkMzMzhBOTAwRTJDQzVGIC8qIElEQkFueUltcGwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQW55SW1wbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOThGN0JEMUJDMzM4QTkwMEUyQ0M1RiAvKiBJREJBbnlJ
bXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkFueUltcGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5RkUwQTEwREFENDQ2RTAwQTA4RjIxIC8qIEhU
TUxBdHRyaWJ1dGVOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MQXR0cmlidXRl
TmFtZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxOUZFMEEyMERBRDQ0NkUw
MEEwOEYyMSAvKiBIVE1MVGFnTmFtZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTFRh
Z05hbWVzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUEwNTIzMTEwNTg3NzRG
MDBDQzlFOTUgLyogQ3JlZGVudGlhbFN0b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ3JlZGVudGlhbFN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTk4MjAsMTQgKzk3ODIsOCBAQAogCQk1MUVFQUE3MjFCRUZGQTc5MDAyMTgwMDggLyogSW5k
ZXhWYWx1ZUVudHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4VmFs
dWVFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUY2QTNENTA2NjNCRjA0
MDA0RDI5MTkgLyogSFRNTENhbnZhc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
NTFGNkEzRDYwNjYzQkYwNDAwNEQyOTE5IC8qIEhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxDYW52YXNFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwotCQk1MUY3OThFMTFCRTg4MDg0MDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3JJbXBsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNzk4RTIxQkU4ODA4NDAwOEFFNDkxIC8qIElE
QkN1cnNvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29y
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUY3OThFMzFCRTg4MDg0MDA4
QUU0OTEgLyogSURCSW5kZXhJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQkluZGV4SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
Rjc5OEU0MUJFODgwODQwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSURCSW5kZXhJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxRjc5OEVCMUJFODgwRDMwMDhBRTQ5MSAvKiBJREJJbmRleEluZm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCSW5kZXhJbmZvLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGNzk4RUMxQkU4ODBEMzAwOEFFNDkxIC8qIElEQklu
ZGV4SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJbmRleEluZm8u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNzk4RjExQkU4ODM4RDAwOEFFNDkx
IC8qIElEQkN1cnNvcldpdGhWYWx1ZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxRjc5OEYyMUJFODgzOEQwMDhBRTQ5MSAvKiBJREJDdXJzb3JXaXRoVmFs
dWVJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNvcldpdGhW
YWx1ZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjU1MDIxMTNFM0U5
MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0Nsb3NlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjU1
MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nsb3NlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MUZCNjdEOTFBRTZCNUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0
eWxlU2hlZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVu
dEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTcyMjYsMzEgKzE3MTgyLDkgQEAKIAkJNTEwMzEwNDIxQkE4QzY0QzAwMzMyOUMwIC8qIGNsaWVu
dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNTE5OEY3
QkMxQkMzMzhBOTAwRTJDQzVGIC8qIElEQkFueUltcGwuY3BwICovLAotCQkJCTUxOThGN0JEMUJD
MzM4QTkwMEUyQ0M1RiAvKiBJREJBbnlJbXBsLmggKi8sCiAJCQkJNTE4NUZDQkMxQkI1Q0I3NzAw
MTI4OThGIC8qIElEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgKi8sCiAJCQkJNTEwQTU4RkQxQkIw
N0E5NjAwQzE5MjgyIC8qIElEQkNvbm5lY3Rpb25Ub1NlcnZlci5oICovLAogCQkJCTUxODVGQ0JE
MUJCNUNCNzcwMDEyODk4RiAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oICovLAot
CQkJCTUxRjc5OEUxMUJFODgwODQwMDhBRTQ5MSAvKiBJREJDdXJzb3JJbXBsLmNwcCAqLywKLQkJ
CQk1MUY3OThFMjFCRTg4MDg0MDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5oICovLAotCQkJCTUx
Rjc5OEYxMUJFODgzOEQwMDhBRTQ5MSAvKiBJREJDdXJzb3JXaXRoVmFsdWVJbXBsLmNwcCAqLywK
LQkJCQk1MUY3OThGMjFCRTg4MzhEMDA4QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5o
ICovLAotCQkJCTUxOThGN0FFMUJCREY1OTIwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwuY3Bw
ICovLAotCQkJCTUxOThGN0FGMUJCREY1OTIwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwuaCAq
LywKLQkJCQk1MTAzMTA0QTFCQThDNkE2MDAzMzI5QzAgLyogSURCRmFjdG9yeUltcGwuY3BwICov
LAotCQkJCTUxMDMxMDRCMUJBOEM2QTYwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1wbC5oICovLAot
CQkJCTUxRjc5OEUzMUJFODgwODQwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuY3BwICovLAotCQkJ
CTUxRjc5OEU0MUJFODgwODQwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuaCAqLywKLQkJCQk1MTYw
NzEyOTFCRDgzMDUzMDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCAqLywKLQkJCQk1
MTYwNzEyQTFCRDgzMDUzMDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbXBsLmggKi8sCi0JCQkJ
NTEwMzEwNTYxQkE4REIzMDAwMzMyOUMwIC8qIElEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcCAqLywK
LQkJCQk1MTAzMTA1NzFCQThEQjMwMDAzMzI5QzAgLyogSURCT3BlbkRCUmVxdWVzdEltcGwuaCAq
LywKLQkJCQk1MTAzMTA1ODFCQThEQjMwMDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwuY3BwICov
LAotCQkJCTUxMDMxMDU5MUJBOERCMzAwMDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5oICovLAot
CQkJCTUxOThGN0IyMUJCRTAwMUQwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuY3BwICov
LAotCQkJCTUxOThGN0IzMUJCRTAwMUQwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuaCAq
LywKLQkJCQk1MTk4RjdCNjFCQzMxNDE3MDBFMkNDNUYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
SW1wbC5jcHAgKi8sCi0JCQkJNTE5OEY3QjcxQkMzMTQxNzAwRTJDQzVGIC8qIElEQlZlcnNpb25D
aGFuZ2VFdmVudEltcGwuaCAqLywKIAkJCQk1MUQ3RUZFQjFCREVGQTQ3MDBFOTNFMTAgLyogVHJh
bnNhY3Rpb25PcGVyYXRpb24uY3BwICovLAogCQkJCTUxNjA3MTJCMUJEODMwNTMwMERCQzRGMiAv
KiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5oICovLAogCQkJKTsKQEAgLTI2MzE4LDcgKzI2MjUyLDYg
QEAKIAkJCQk1MUUxRUNDMTBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29yZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDVCQUMyQjAxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxODVGQzc4MUJCNEM0RTgwMDEyODk4RiAvKiBJREJBbnkuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTUxOThGN0JGMUJDMzM4QUYwMEUyQ0M1RiAvKiBJREJBbnlJbXBsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MUJBNEFDQzFCQkM1QkREMDBERjNENkQgLyogSURCQmFja2luZ1N0
b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTg1QTY2MzExRDRGQUM1MDA0QzNFNEIgLyogSURC
QmluZGluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQjkxQkI0Q0JGODAw
MTI4OThGIC8qIElEQkNvbm5lY3Rpb25Ub0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjMy
NiwyNCArMjYyNTksMTkgQEAKIAkJCQk1MTk4RjdDMTFCQzQ4NTY3MDBFMkNDNUYgLyogSURCQ29u
bmVjdGlvblRvU2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTZEN0Q3MDFCQjVGMEJEMDBB
RjdDNzcgLyogSURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxODVGQzdCMUJCNEM0RTgwMDEyODk4RiAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICov
LAotCQkJCTUxRjc5OEU2MUJFODgwOTIwMDhBRTQ5MSAvKiBJREJDdXJzb3JJbXBsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTcxMzhGQzFCRjNBREY0MDAwRDVGMDEgLyogSURCQ3Vyc29ySW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDN0UxQkI0QzRFODAwMTI4OThGIC8qIElEQkN1cnNv
cldpdGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNzk4RjQxQkU4ODM5NDAwOEFFNDkx
IC8qIElEQkN1cnNvcldpdGhWYWx1ZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzgx
MUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4
NUZDODMxQkI0QzRFODAwMTI4OThGIC8qIElEQkRhdGFiYXNlRXJyb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxODVGQzg1MUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDODcxQkI0QzRFODAwMTI4OThGIC8qIElEQkRhdGFi
YXNlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE5OEY3QjExQkJERjVDODAwRTJD
QzVGIC8qIElEQkRhdGFiYXNlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFCQTRBQzQxQkJC
NUNEODAwREYzRDZEIC8qIElEQkRhdGFiYXNlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0
ODQ1M0YxQkI5RDA3RTAwNkE3MkVEIC8qIElEQkVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTg1RkM4QjFCQjRDNEU4MDAxMjg5OEYgLyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTg1RkM4RDFCQjRDNEU4MDAxMjg5OEYgLyogSURCRmFjdG9yeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjlBNkNCQUQxQzZCRTQyQzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlT
VkdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTAzMTA1MDFCQThDQzAzMDAzMzI5QzAg
LyogSURCRmFjdG9yeUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzhGMUJCNEM0RTgw
MDEyODk4RiAvKiBJREJHZXRSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzkxMUJC
NEM0RTgwMDEyODk4RiAvKiBJREJJbmRleC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNzk4RTgx
QkU4ODA5MjAwOEFFNDkxIC8qIElEQkluZGV4SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFG
Nzk4RjAxQkU4ODBFNzAwOEFFNDkxIC8qIElEQkluZGV4SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE4NUZDOTUxQkI0QzRFODAwMTI4OThGIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE4NUZDOTcxQkI0QzRFODAwMTI4OThGIC8qIElEQktleURhdGEuaCBpbiBIZWFkZXJzICov
LApAQCAtMjYzNTEsMjQgKzI2Mjc5LDE5IEBACiAJCQkJNTE4NUZDOUIxQkI0QzRFODAwMTI4OThG
IC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM5RTFCQjRDNEU4MDAx
Mjg5OEYgLyogSURCS2V5UmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkNBMDFC
QjRDNEU4MDAxMjg5OEYgLyogSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTUx
NjA3MTMxMUJEODMwODYwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUltcGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNjA3MTJGMUJEODMwNzgwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0E0MUJCNEM0RTgwMDEyODk4RiAvKiBJREJPcGVu
REJSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTAzMTA1QjFCQThEQjU2MDAzMzI5QzAg
LyogSURCT3BlbkRCUmVxdWVzdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0E3MUJC
NEM0RTgwMDEyODk4RiAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTg1RkNBOTFCQjRDNEU4MDAxMjg5OEYgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE0MTI5OTkxQzY5NzY5MDAwNTlFNzE0IC8qIElEQlJlcXVlc3RDb21wbGV0aW9uRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEE1OEZBMUJBQ0M3RjIwMEMxOTI4MiAvKiBJREJS
ZXF1ZXN0RGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEwMzEwNUQxQkE4REI1NjAwMzMyOUMw
IC8qIElEQlJlcXVlc3RJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQ1QjEwQTFCQzQ4RTJF
MDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUQ3MjM2RDFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxODVGQ0JCMUJCNENCRjgwMDEyODk4RiAvKiBJREJTZXJ2ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxODVGQ0FEMUJCNEM0RTgwMDEyODk4RiAvKiBJREJUcmFuc2Fj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE5OEY3QjUxQkJFMDAzQzAwRTJDQzVGIC8qIElE
QlRyYW5zYWN0aW9uSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE5OEY3QUQxQkJERDNFQjAw
RTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZD
QjAxQkI0QzRFODAwMTI4OThGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTE5OEY3QjkxQkMzMTQ1MTAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVu
dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QTgxNEUwMUM3MzM4RUIwMEJGODVBQyAvKiBJ
ZENoYW5nZUludmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3MUQ1N0MwRjMzODE5
MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUM1
MEVGODZENDcwMDlEMENBRiAvKiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMDAwMiwyNyArMjk5MjUsMjEgQEAKIAkJCQlCMjc1MzU4RTBCMDUzQTY2MDAy
Q0U2NEYgLyogSWNvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRTFFQ0MwMEM5MUM5MDQw
MERDMjU1QiAvKiBJY29uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzc3MUJC
NEM0RTgwMDEyODk4RiAvKiBJREJBbnkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE5OEY3QkUx
QkMzMzhBRjAwRTJDQzVGIC8qIElEQkFueUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU4
NUE2NjIxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE2RDdENzExQkI1RjBCRDAwQUY3Qzc3IC8qIElEQkNvbm5lY3Rpb25Ub0Ns
aWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTk4RjdDMDFCQzQ4NTY3MDBFMkNDNUYgLyog
SURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzdBMUJC
NEM0RTgwMDEyODk4RiAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFGNzk4
RTUxQkU4ODA5MjAwOEFFNDkxIC8qIElEQkN1cnNvckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE3MTM4RkIxQkYzQURGNDAwMEQ1RjAxIC8qIElEQkN1cnNvckluZm8uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE4NUZDN0QxQkI0QzRFODAwMTI4OThGIC8qIElEQkN1cnNvcldpdGhWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUY3OThGMzFCRTg4Mzk0MDA4QUU0OTEgLyogSURC
Q3Vyc29yV2l0aFZhbHVlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM4MDFCQjRD
NEU4MDAxMjg5OEYgLyogSURCRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZD
ODQxQkI0QzRFODAwMTI4OThGIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxODVGQzg2MUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZUlkZW50aWZp
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE5OEY3QjAxQkJERjVDODAwRTJDQzVGIC8qIElE
QkRhdGFiYXNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUJBNEFDMzFCQkI1Q0Q4MDBE
RjNENkQgLyogSURCRGF0YWJhc2VJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDg0NTNF
MUJCOUQwN0UwMDZBNzJFRCAvKiBJREJFcnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1
RkM4QTFCQjRDNEU4MDAxMjg5OEYgLyogSURCRXZlbnREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxODVGQzhDMUJCNEM0RTgwMDEyODk4RiAvKiBJREJGYWN0b3J5LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTUxMDMxMDRGMUJBOENDMDMwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1w
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJGMUE3ODFDMDdFQjY2MDA5MDgyMzkgLyogSURC
R2V0UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzkwMUJCNEM0RTgwMDEyODk4
RiAvKiBJREJJbmRleC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUY3OThFNzFCRTg4MDkyMDA4
QUU0OTEgLyogSURCSW5kZXhJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjc5OEVGMUJF
ODgwRTcwMDhBRTQ5MSAvKiBJREJJbmRleEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4
NUZDOTQxQkI0QzRFODAwMTI4OThGIC8qIElEQktleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTg1RkM5NjFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTMwMDMwLDIzICsyOTk0NywxOCBAQAogCQkJCTUxODVGQzlBMUJCNEM0RTgwMDEyODk4RiAv
KiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM5RDFCQjRDNEU4MDAx
Mjg5OEYgLyogSURCS2V5UmFuZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzlG
MUJCNEM0RTgwMDEyODk4RiAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MTYwNzEzMDFCRDgzMDg2MDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxNjA3MTJFMUJEODMwNzgwMERCQzRGMiAvKiBJREJPYmplY3RTdG9y
ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDQTMxQkI0QzRFODAwMTI4OThGIC8q
IElEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwMzEwNUExQkE4REI1
NjAwMzMyOUMwIC8qIElEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxODVGQ0E4MUJCNEM0RTgwMDEyODk4RiAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxNDEyOTk4MUM2OTc2OTAwMDU5RTcxNCAvKiBJREJSZXF1ZXN0Q29tcGxldGlvbkV2
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEE1OEY5MUJBQ0M3RjIwMEMxOTI4MiAvKiBJ
REJSZXF1ZXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTAzMTA1QzFCQThEQjU2MDAz
MzI5QzAgLyogSURCUmVxdWVzdEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0NUIxMDkx
QkM0OEUyRTAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUQ3MjM2QzFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTFFQzEyNzFDNTBBQUNBMDAzMkY5ODMgLyogSURCU2VyaWFsaXph
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkNCQTFCQjRDQkY4MDAxMjg5OEYgLyog
SURCU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQ0FDMUJCNEM0RTgwMDEyODk4
RiAvKiBJREJUcmFuc2FjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTk4RjdCNDFCQkUw
MDNDMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxOThGN0FDMUJCREQzRUIwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkluZm8uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTE4NUZDQUYxQkI0QzRFODAwMTI4OThGIC8qIElEQlZlcnNpb25DaGFu
Z2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTk4RjdCODFCQzMxNDUxMDBFMkNDNUYg
LyogSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEE4
MTRERTFDNzMzOEQxMDBCRjg1QUMgLyogSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE3MUQ1N0IwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzNDRjE3QTQxNUIwMDYzRjAwMjc2RDM5IC8qIElkVGFyZ2V0
T2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKaW5kZXggNjNmMzU1YS4uYWViNWQzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcApAQCAt
MjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRl
ICJJREJDdXJzb3JJbXBsLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKQEAgLTM2LDExICszNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7Ci0gICAgaWYgKCF3cmFwcGVkKCkuaXNNb2Rlcm5DdXJzb3IoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgbW9kZXJuQ3Vyc29yID0gc3RhdGljX2Nhc3Q8SURCQ2xpZW50OjpJ
REJDdXJzb3ImPih3cmFwcGVkKCkpOwotICAgIGlmIChhdXRvKiByZXF1ZXN0ID0gbW9kZXJuQ3Vy
c29yLnJlcXVlc3QoKSkKKyAgICBhdXRvJiBjdXJzb3IgPSBzdGF0aWNfY2FzdDxJREJDdXJzb3Im
Pih3cmFwcGVkKCkpOworICAgIGlmIChhdXRvKiByZXF1ZXN0ID0gY3Vyc29yLnJlcXVlc3QoKSkK
ICAgICAgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHJlcXVlc3QpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3Rv
bS5jcHAKaW5kZXggYTU5Yjg3Ny4uYmM2M2ZhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAi
SURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oIgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5o
IgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCmluZGV4IGUyYzJjY2UuLjRlMTZhNjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCkBAIC0yOCw3
ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIklE
QkluZGV4SW1wbC5oIgorI2luY2x1ZGUgIklEQkluZGV4LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKQEAgLTM2LDEwICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBKU0lE
QkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsK
LSAgICBpZiAoIXdyYXBwZWQoKS5pc01vZGVybigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2
aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJnN0YXRpY19jYXN0PElEQkNsaWVudDo6SURCSW5kZXgmPih3
cmFwcGVkKCkpLm1vZGVybk9iamVjdFN0b3JlKCkpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmc3RhdGljX2Nhc3Q8SURCSW5kZXgmPih3cmFwcGVkKCkpLm1vZGVybk9iamVjdFN0b3JlKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCmluZGV4IDMyNTFmZjIuLjc0
NGQ5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0
U3RvcmVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiSURCQmluZGlu
Z1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW1wbC5oIgorI2luY2x1
ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNJREJJbmRleC5oIgogI2luY2x1ZGUgIkpTSURCUmVxdWVzdC5oIgpAQCAtNDcsMTAgKzQ3
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0
QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmICghd3Jh
cHBlZCgpLmlzTW9kZXJuKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpY19jYXN0PElE
QkNsaWVudDo6SURCT2JqZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4
ZXModmlzaXRvcik7CisgICAgc3RhdGljX2Nhc3Q8SURCT2JqZWN0U3RvcmUmPih3cmFwcGVkKCkp
LnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRvcik7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIHB1
dE9yQWRkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgYm9vbCBvdmVyd3JpdGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRl
eCBkMjliNTI3Li45NDMzMDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTE4NSwxMyArMTg1LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNr
KCkuc2VuZEZhaWx1cmUoIlVuZXhwZWN0ZWQgcmVzdWx0IHR5cGUuIik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFyZXF1ZXN0UmVzdWx0LT5pc0xlZ2FjeSgp
KSB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFj
aygpLnNlbmRGYWlsdXJlKCJPbmx5IExlZ2FjeSBJREIgaXMgc3VwcG9ydGVkIHJpZ2h0IG5vdy4i
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FICh3
ZWJraXQub3JnL2IvMTU0Njg2KSAtIFJlaW1wbGVtZW50IHRoaXMuCi0gICAgICAgIG1fZXhlY3V0
YWJsZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZSgpOworICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0
YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJNb2Rlcm4gSURCIGlzIG5vdCBz
dXBwb3J0ZWQgeWV0Iik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggYjk5MGE4Mi4uODRmMjQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDE2LTAzLTI4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBN
b2Rlcm4gSURCOiBSZW1vdmUgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGZvciBhbGwgSURCIERPTSBj
bGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU1OTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVy
LmNwcDoKKwogMjAxNi0wMy0yNSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBwcm90b2NvbCBnZW5lcmF0b3Igc2hvdWxkIHByZWZpeCBDKysg
ZmlsZW5hbWVzIHdpdGggdGhlIHByb3RvY29sIGdyb3VwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2Vy
dmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9X
ZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IDZmNjkwMTEuLjZkMzc1ZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJ
REJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
RGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC0zOSw3
ICszOSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JREJJbmRleEluZm8uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0lEQktleVJhbmdlRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSURCT2JqZWN0U3Rv
cmVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JREJPcGVuREJSZXF1ZXN0SW1wbC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSURCT3BlbkRCUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSURC
UmVxdWVzdERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lEQlJlc291cmNlSWRlbnRpZmllci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSURCUmVzdWx0RGF0YS5oPgo=
</data>
<flag name="review"
          id="299435"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275051</attachid>
            <date>2016-03-28 14:21:11 -0700</date>
            <delta_ts>2016-03-28 14:23:20 -0700</delta_ts>
            <desc>Patch for landing v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>448312</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlYWRjMWVhLi5mODI4OTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkz
IEBACisyMDE2LTAzLTI4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb2Rlcm4gSURCOiBSZW1vdmUgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGZvciBhbGwgSURC
IERPTSBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU1OTUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKwor
ICAgICAgICBSZWZhY3RvciAtIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpET01XaW5kb3dJbmRleGVkRGF0YWJhc2U6OmluZGV4ZWREQik6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQW55LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6SURC
QW55KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6fklEQkFueSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJBbnk6OmlkYkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6ZG9t
U3RyaW5nTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OmlkYkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJBbnk6OmlkYkN1cnNvcldpdGhWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJBbnk6OmlkYkZhY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjppZGJJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OmlkYk9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkFueTo6aWRiVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCQW55OjpzY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OmludGVnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjpzdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQW55OjprZXlQYXRoKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkFueTo6Y3JlYXRlVW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6dHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6On5JREJBbnkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCQW55Ojppc0xlZ2FjeSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6SURCQ3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvcjo6fklEQkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3I6OnNvdXJjZXNEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZWZm
ZWN0aXZlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp0cmFuc2Fj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmRpcmVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3I6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6
OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3I6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmFkdmFuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvcjo6c2V0R2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6YWN0
aXZlRE9NT2JqZWN0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNhblN1c3Bl
bmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpo
YXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpkZWNyZW1l
bnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvcjo6Y2xlYXJSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6cmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmlzS2V5Q3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6fklEQkN1cnNvcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SURCQ3Vyc29yOjppc01vZGVybkN1cnNvcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJREJDdXJzb3I6Omhhc1BlbmRpbmdBY3Rpdml0eSk6IERlbGV0ZWQuCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkN1cnNvcldpdGhWYWx1ZTo6fklEQkN1cnNvcldpdGhWYWx1ZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3JXaXRoVmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUpOiBEZWxldGVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OklE
QkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp+SURCRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Omhhc1BlbmRpbmdBY3Rpdml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6b2Jq
ZWN0U3RvcmVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2U6Om1heWJlQ2xvc2VJblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6c3RhcnRW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6
OmRpZFN0YXJ0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6Ondp
bGxDb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlk
Q29tbWl0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OndpbGxB
Ym9ydFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkaWRBYm9y
dFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkaWRDb21taXRP
ckFib3J0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmZpcmVW
ZXJzaW9uQ2hhbmdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpc3Bh
dGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4
SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlkRGVsZXRlSW5kZXhJbmZv
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2U6OmRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2U6OnNlcnZlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2U6OmlzQ2xvc2luZ09yQ2xvc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp+
SURCRGF0YWJhc2UpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeTo6SURCRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0
b3J5OjpnZXREYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6Om9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6b3BlbkludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkZhY3Rvcnk6OmNtcCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6fklEQkZhY3RvcnkpOiBEZWxl
dGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjpJREJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRl
eDo6fklEQkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjphY3RpdmVET01PYmpl
Y3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpjYW5TdXNwZW5kRm9yRG9jdW1l
bnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpoYXNQZW5kaW5nQWN0
aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
OjprZXlQYXRoQW55KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjprZXlQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojp1bmlxdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXg6Om11bHRpRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5DdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkluZGV4Ojpkb0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpvcGVu
S2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjpnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXg6OmRvR2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojpn
ZXRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmRvR2V0S2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjptYXJrQXNEZWxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4OjpyZWYpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmRlcmVmKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXg6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmluZm8pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6Om1vZGVybk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4Ojppc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6On5JREJJbmRl
eCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6aXNNb2Rlcm4pOiBEZWxl
dGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjp+SURCT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmFjdGl2ZURPTU9iamVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZTo6bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6a2V5UGF0aEFueSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6a2V5
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXhOYW1lcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmF1dG9JbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6YWRkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OnB1dEZvckN1cnNvclVwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
Ojpkb0RlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6bW9kZXJuRGVs
ZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvQ291bnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Om1hcmtBc0RlbGV0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VBYm9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5kZXhl
cyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmU6Om1vZGVyblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
Ojp+SURCT2JqZWN0U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmlzTW9kZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPcGVuREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6
OmNyZWF0ZURlbGV0ZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVz
dDo6Y3JlYXRlT3BlblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVz
dDo6SURCT3BlbkRCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0
Ojp+SURCT3BlbkRCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0
OjpvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OnZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbkRpZEZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJS
ZXF1ZXN0OjpmaXJlU3VjY2Vzc0FmdGVyVmVyc2lvbkNoYW5nZUNvbW1pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpmaXJlRXJyb3JBZnRlclZlcnNpb25DaGFuZ2VDb21w
bGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OmRpc3BhdGNoRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpvbkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RCbG9ja2VkKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpkYXRhYmFzZUlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6dmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPcGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCk6IERlbGV0ZWQuCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6Y3JlYXRlQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6Y3JlYXRlR2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlJlcXVlc3Q6OklEQlJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6fklEQlJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVz
dWx0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmVycm9yQ29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjplcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1
ZXN0Ojpzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0U291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojp0cmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZWFkeVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0Ojpzb3VyY2VJbmRleElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OmFjdGl2ZURPTU9iamVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjplbnF1ZXVlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1VuZGVmaW5lZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXN1bHRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6d2lsbEl0ZXJhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6ZGlkT3Blbk9ySXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
OjpyZXF1ZXN0Q29tcGxldGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uRXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpyZXNvdXJjZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6Y29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojptb2Rlcm5SZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cGVuZGluZ0N1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0VHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0Ojppc09wZW5EQlJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6fklEQlJlcXVlc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdENvbXBsZXRpb25FdmVudDo6SURCUmVxdWVzdENvbXBsZXRpb25FdmVudCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6Y3JlYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpJREJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6
fklEQlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjptb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkYik6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6c2VydmVyQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjphYm9y
dER1ZVRvRmFpbGVkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6
dHJhbnNpdGlvbmVkVG9GaW5pc2hpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b246OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjphYm9ydE9uU2Vy
dmVyQW5kQ2FuY2VsUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmFjdGl2ZURPTU9iamVjdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aXNB
Y3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmlzRmluaXNoZWRPckZp
bmlzaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6YWRkUmVxdWVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVtb3ZlUmVxdWVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6c2NoZWR1bGVPcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnNjaGVkdWxlT3BlcmF0aW9uVGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6Y29tbWl0T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246OmZpbmlzaEFib3J0T3JDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246OmRpZFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
Ojpub3RpZnlEaWRBYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlk
QWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZENvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZmlyZU9uQ29tcGxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmZpcmVPbkFib3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpjcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpkaWRDcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXhPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246OmRvUmVxdWVzdE9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246Om9wZW5DdXJzb3JPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZGlkT3BlbkN1cnNvck9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjppdGVyYXRlQ3Vyc29yT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpyZXF1ZXN0R2V0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpyZXF1ZXN0SW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmdldFJlY29yZE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpk
aWRHZXRSZWNvcmRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6
cmVxdWVzdENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpnZXRDb3Vu
dE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRHZXRDb3Vu
dE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0RGVs
ZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkZWxldGVSZWNv
cmRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRl
UmVjb3JkT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVl
c3RDbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpj
bGVhck9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b246OmRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uOjpwdXRPckFkZE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpkaWRQdXRPckFkZE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bjo6ZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmRpZERlbGV0ZUluZGV4T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246Om9wZXJhdGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjplc3RhYmxpc2hPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6YWN0aXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmRlYWN0aXZhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb246Om9yaWdpbmFsRGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjppc1ZlcnNpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OmlzUmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmlzRmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNhY3Rpb25BY3RpdmF0b3I6OlRy
YW5zYWN0aW9uQWN0aXZhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zYWN0aW9uQWN0aXZh
dG9yOjp+VHJhbnNhY3Rpb25BY3RpdmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb246On5JREJUcmFuc2FjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlZl
cnNpb25DaGFuZ2VFdmVudDo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlZlcnNpb25DaGFuZ2VFdmVudDo6bmV3VmVyc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDoKKyAgICAgICAgKGlzVHlw
ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmg6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rp
b25Ub1NlcnZlci5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNv
bm5lY3Rpb25Ub1NlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJDdXJzb3JJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCQ3Vyc29ySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDdXJzb3JXaXRoVmFsdWVJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oOiBSZW1v
dmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRh
YmFzZUltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCRmFjdG9yeUltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJGYWN0b3J5SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJbmRleEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmg6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9wZW5EQlJl
cXVlc3RJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGll
bnQvSURCT3BlbkRCUmVxdWVzdEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbklt
cGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVmVy
c2lvbkNoYW5nZUV2ZW50SW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5o
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckluZm86Om9iamVjdFN0b3JlQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckluZm86OmluZGV4Q3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvckluZm86OklEQkN1cnNvckluZm8pOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZvLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3REYXRhOjpJREJSZXF1ZXN0RGF0YSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQlJlcXVlc3REYXRhLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXNv
dXJjZUlkZW50aWZpZXI6OklEQlJlc291cmNlSWRlbnRpZmllcik6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5oOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJUcmFuc2FjdGlvbkluZm8uY3BwOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaDoKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJz
b3I6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJJ
bmRleEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQkluZGV4Ojp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQk9iamVjdFN0b3JlOjp2aXNpdEFkZGl0
aW9uYWxDaGlsZHJlbik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFn
ZW50LmNwcDoKKwogMjAxNi0wMy0yOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFNldHVwIGNsb25lZCBjb250aW51YXRpb24gcmVuZGVyZXIgcHJvcGVybHkuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2lu
ZG93SW5kZXhlZERhdGFiYXNlLmNwcAppbmRleCBmNWJjNmE4Li44N2Q2MjZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0lu
ZGV4ZWREYXRhYmFzZS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJEYXRhYmFzZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJJREJGYWN0b3J5SW1wbC5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIApAQCAtMTEyLDcg
KzExMiw3IEBAIElEQkZhY3RvcnkqIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZTo6aW5kZXhlZERC
KCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIW1faWRiRmFjdG9yeSkKLSAg
ICAgICAgbV9pZGJGYWN0b3J5ID0gSURCQ2xpZW50OjpJREJGYWN0b3J5OjpjcmVhdGUocGFnZS0+
aWRiQ29ubmVjdGlvbigpKTsKKyAgICAgICAgbV9pZGJGYWN0b3J5ID0gSURCRmFjdG9yeTo6Y3Jl
YXRlKHBhZ2UtPmlkYkNvbm5lY3Rpb24oKSk7CiAKICAgICByZXR1cm4gbV9pZGJGYWN0b3J5Lmdl
dCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QW55LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKaW5k
ZXggNGIyODZiNi4uOGZhYmQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQW55LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJBbnkuY3BwCkBAIC0yOCwxMCArMjgsMTI5IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJDdXJz
b3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQkZh
Y3RvcnkuaCIKKyNpbmNsdWRlICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3Jl
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1JREJBbnk6OklEQkFueSgpCitJREJBbnk6OklEQkFueShJREJBbnk6OlR5cGUgdHlwZSkKKyAg
ICA6IG1fdHlwZSh0eXBlKQoreworfQorCitJREJBbnk6OklEQkFueShSZWY8SURCRGF0YWJhc2U+
JiYgZGF0YWJhc2UpCisgICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSkKKyAg
ICAsIG1fZGF0YWJhc2UoV1RGTW92ZShkYXRhYmFzZSkpCit7Cit9CisKK0lEQkFueTo6SURCQW55
KFJlZjxJREJPYmplY3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKKyAgICA6IG1fdHlwZShJREJBbnk6
OlR5cGU6OklEQk9iamVjdFN0b3JlKQorICAgICwgbV9vYmplY3RTdG9yZShXVEZNb3ZlKG9iamVj
dFN0b3JlKSkKK3sKK30KKworSURCQW55OjpJREJBbnkoUmVmPElEQkluZGV4PiYmIGluZGV4KQor
ICAgIDogbV90eXBlKElEQkFueTo6VHlwZTo6SURCSW5kZXgpCisgICAgLCBtX2luZGV4KFdURk1v
dmUoaW5kZXgpKQoreworfQorCitJREJBbnk6OklEQkFueShSZWY8SURCQ3Vyc29yPiYmIGN1cnNv
cikKK3sKKyAgICBpZiAoY3Vyc29yLT5pc0tleUN1cnNvcigpKSB7CisgICAgICAgIG1fdHlwZSA9
IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yOworICAgICAgICBtX2N1cnNvciA9IFdURk1vdmUoY3Vy
c29yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3R5cGUgPSBJREJBbnk6OlR5cGU6OklEQkN1
cnNvcldpdGhWYWx1ZTsKKyAgICAgICAgbV9jdXJzb3JXaXRoVmFsdWUgPSBzdGF0aWNfY2FzdDxJ
REJDdXJzb3JXaXRoVmFsdWUqPigmY3Vyc29yLmdldCgpKTsKKyAgICB9Cit9CisKK0lEQkFueTo6
SURCQW55KGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCisgICAgOiBtX3R5cGUoSURCQW55OjpU
eXBlOjpLZXlQYXRoKQorICAgICwgbV9pZGJLZXlQYXRoKGtleVBhdGgpCit7Cit9CisKK0lEQkFu
eTo6SURCQW55KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKKyAgICA6IG1f
dHlwZShJREJBbnk6OlR5cGU6OlNjcmlwdFZhbHVlKQorICAgICwgbV9zY3JpcHRWYWx1ZSh2YWx1
ZSkKK3sKK30KKworSURCQW55Ojp+SURCQW55KCkKK3sKK30KKworUmVmUHRyPElEQkRhdGFiYXNl
PiBJREJBbnk6OmlkYkRhdGFiYXNlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6
VHlwZTo6SURCRGF0YWJhc2UpOworICAgIHJldHVybiBtX2RhdGFiYXNlLmdldCgpOworfQorCitS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCQW55Ojpkb21TdHJpbmdMaXN0KCkKK3sKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworUmVmUHRyPElEQkN1cnNvcj4gSURCQW55OjppZGJDdXJzb3IoKQor
eworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3IgfHwgbV90eXBl
ID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlKTsKKyAgICByZXR1cm4gbV9jdXJz
b3IgPyBtX2N1cnNvci5nZXQoKSA6IG1fY3Vyc29yV2l0aFZhbHVlLmdldCgpOworfQorCitSZWZQ
dHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJBbnk6OmlkYkN1cnNvcldpdGhWYWx1ZSgpCit7Cisg
ICAgQVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSk7Cisg
ICAgcmV0dXJuIG1fY3Vyc29yV2l0aFZhbHVlLmdldCgpOworfQorCitSZWZQdHI8SURCRmFjdG9y
eT4gSURCQW55OjppZGJGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVm
UHRyPElEQkluZGV4PiBJREJBbnk6OmlkYkluZGV4KCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09
IElEQkFueTo6VHlwZTo6SURCSW5kZXgpOworICAgIHJldHVybiBtX2luZGV4LmdldCgpOworfQor
CitSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkFueTo6aWRiT2JqZWN0U3RvcmUoKQoreworICAg
IEFTU0VSVChtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSk7CisgICAgcmV0
dXJuIG1fb2JqZWN0U3RvcmUuZ2V0KCk7Cit9CisKK1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURC
QW55OjppZGJUcmFuc2FjdGlvbigpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2NvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJBbnk6OnNjcmlwdFZhbHVlKCkKK3sKKyAgICBy
ZXR1cm4gbV9zY3JpcHRWYWx1ZTsKK30KKworaW50NjRfdCBJREJBbnk6OmludGVnZXIoKQorewor
ICAgIHJldHVybiBtX2ludGVnZXI7Cit9CisKK2NvbnN0IFN0cmluZyYgSURCQW55OjpzdHJpbmco
KQoreworICAgIHJldHVybiBtX3N0cmluZzsKK30KKworY29uc3QgSURCS2V5UGF0aCYgSURCQW55
OjprZXlQYXRoKCkKIHsKKyAgICByZXR1cm4gbV9pZGJLZXlQYXRoOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJBbnkuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCmlu
ZGV4IDViOGJkYjkuLjlmMWM3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkFueS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkFueS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJREJBbnlfaAotI2RlZmluZSBJREJBbnlfaAorI3ByYWdt
YSBvbmNlCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIApAQCAtMzIsOCArMzEsNiBA
QAogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgPGJpbmRpbmdzL1Njcmlw
dFZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDMsMTMgKzQwLDQ3IEBAIGNsYXNzIElEQkN1cnNvcldpdGhWYWx1ZTsKIGNs
YXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCRmFjdG9yeTsKIGNsYXNzIElEQkluZGV4OwotY2xh
c3MgSURCS2V5UGF0aDsKIGNsYXNzIElEQk9iamVjdFN0b3JlOwogY2xhc3MgSURCVHJhbnNhY3Rp
b247CiAKIGNsYXNzIElEQkFueSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZD
b3VudGVkPElEQkFueT4gewogcHVibGljOgotICAgIHZpcnR1YWwgfklEQkFueSgpIHsgfQorICAg
IHN0YXRpYyBSZWZQdHI8SURCQW55PiBjcmVhdGUoUmVmPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoV1RGTW92ZShkYXRh
YmFzZSkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmPElEQkFueT4gY3JlYXRlKFJlZjxJREJP
YmplY3RTdG9yZT4mJiBvYmplY3RTdG9yZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IElEQkFueShXVEZNb3ZlKG9iamVjdFN0b3JlKSkpOworICAgIH0KKworICAgIHN0YXRp
YyBSZWY8SURCQW55PiBjcmVhdGUoUmVmPElEQkluZGV4PiYmIGluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQW55KFdURk1vdmUoaW5kZXgpKSk7CisgICAgfQor
CisgICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShSZWY8SURCQ3Vyc29yPiYmIGN1cnNv
cikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KFdURk1vdmUoY3Vy
c29yKSkpOworICAgIH0KKworICAgIHN0YXRpYyBSZWZQdHI8SURCQW55PiBjcmVhdGUoY29uc3Qg
SURCS2V5UGF0aCYga2V5UGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SURCQW55KGtleVBhdGgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3Jl
YXRlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGlj
IFJlZlB0cjxJREJBbnk+IGNyZWF0ZVVuZGVmaW5lZCgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElEQkFueShJREJBbnk6OlR5cGU6OlVuZGVmaW5lZCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgfklEQkFueSgpOwogCiAgICAgZW51bSBjbGFzcyBUeXBlIHsKICAgICAgICAg
VW5kZWZpbmVkID0gMCwKQEAgLTY4LDMwICs5OSw0MiBAQCBwdWJsaWM6CiAgICAgICAgIEtleVBh
dGgsCiAgICAgfTsKIAotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2sgdG8g
YWxsb3cgY2FzdHMgaW4gV2ViSW5zcGVjdG9yIGNvZGUgd2hpbGUgTW9kZXJuIElEQiBhbmQgTGVn
YWN5IElEQiBsaXZlIHNpZGUtYnktc2lkZS4KLSAgICAvLyBJdCBzaG91bGQgYmUgcmVtb3ZlZCB3
aGVuIHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gaXMgcmVtb3ZlZCBhcyBwYXJ0IG9mIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxMTcKLSAgICB2aXJ0dWFsIGJv
b2wgaXNMZWdhY3koKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBUeXBl
IHR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZG9t
U3RyaW5nTGlzdCgpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJDdXJzb3I+IGlkYkN1cnNv
cigpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IGlkYkN1cnNv
cldpdGhWYWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJEYXRhYmFzZT4gaWRiRGF0
YWJhc2UoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCRmFjdG9yeT4gaWRiRmFjdG9yeSgp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgoKSA9IDA7Ci0gICAg
dmlydHVhbCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCkgPSAwOwotICAg
IHZpcnR1YWwgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbigpID0gMDsKLSAg
ICB2aXJ0dWFsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSgpID0g
MDsKLSAgICB2aXJ0dWFsIGludDY0X3QgaW50ZWdlcigpID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0
IFN0cmluZyYgc3RyaW5nKCkgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCgpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIElEQkFueSgpOworICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBkb21T
dHJpbmdMaXN0KCk7CisgICAgUmVmUHRyPElEQkN1cnNvcj4gaWRiQ3Vyc29yKCk7CisgICAgUmVm
UHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gaWRiQ3Vyc29yV2l0aFZhbHVlKCk7CisgICAgUmVmUHRy
PElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgpOworICAgIFJlZlB0cjxJREJGYWN0b3J5PiBpZGJG
YWN0b3J5KCk7CisgICAgUmVmUHRyPElEQkluZGV4PiBpZGJJbmRleCgpOworICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZT4gaWRiT2JqZWN0U3RvcmUoKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IGlkYlRyYW5zYWN0aW9uKCk7CisgICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IHNjcmlwdFZhbHVlKCk7CisgICAgaW50NjRfdCBpbnRlZ2VyKCk7CisgICAgY29uc3QgU3RyaW5n
JiBzdHJpbmcoKTsKKyAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCk7CisKK3ByaXZhdGU6
CisgICAgZXhwbGljaXQgSURCQW55KElEQkFueTo6VHlwZSk7CisgICAgZXhwbGljaXQgSURCQW55
KFJlZjxJREJEYXRhYmFzZT4mJik7CisgICAgZXhwbGljaXQgSURCQW55KFJlZjxJREJPYmplY3RT
dG9yZT4mJik7CisgICAgZXhwbGljaXQgSURCQW55KFJlZjxJREJJbmRleD4mJik7CisgICAgZXhw
bGljaXQgSURCQW55KFJlZjxJREJDdXJzb3I+JiYpOworICAgIGV4cGxpY2l0IElEQkFueShjb25z
dCBJREJLZXlQYXRoJik7CisgICAgZXhwbGljaXQgSURCQW55KGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJik7CisKKyAgICBJREJBbnk6OlR5cGUgbV90eXBlIHsgSURCQW55OjpUeXBlOjpV
bmRlZmluZWQgfTsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CisgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBtX29iamVjdFN0b3JlOworICAgIFJlZlB0cjxJREJJbmRleD4g
bV9pbmRleDsKKyAgICBSZWZQdHI8SURCQ3Vyc29yPiBtX2N1cnNvcjsKKyAgICBSZWZQdHI8SURC
Q3Vyc29yV2l0aFZhbHVlPiBtX2N1cnNvcldpdGhWYWx1ZTsKKworICAgIGNvbnN0IElEQktleVBh
dGggbV9pZGJLZXlQYXRoOworICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fc2Ny
aXB0VmFsdWU7CisgICAgY29uc3QgU3RyaW5nIG1fc3RyaW5nOworICAgIGNvbnN0IGludDY0X3Qg
bV9pbnRlZ2VyIHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJBbnlfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggMDM2NjFl
Mi4uYzdiM2IzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuY3BwCkBAIC0yOCwxNSArMjgsMjAgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogCisjaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkdldFJlc3VsdC5oIgorI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1JREJDdXJzb3I6OklEQkN1cnNvcigpCi17Ci19Ci0KIGNvbnN0
IEF0b21pY1N0cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCkKIHsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBuZXh0KCJuZXh0IiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CkBAIC05Nyw2ICsxMDIsMzQ4IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb25Ub1N0cmluZyhJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbiBkaXJlCiAgICAgfQogfQogCitSZWY8SURCQ3Vyc29yPiBJREJDdXJzb3I6OmNyZWF0ZShJ
REJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vy
c29ySW5mbyYgaW5mbykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJDdXJzb3IodHJh
bnNhY3Rpb24sIGluZGV4LCBpbmZvKSk7Cit9CisKK0lEQkN1cnNvcjo6SURCQ3Vyc29yKElEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25z
dCBJREJDdXJzb3JJbmZvJiBpbmZvKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KHRyYW5zYWN0aW9u
LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1faW5mbyhpbmZvKQorICAgICwgbV9z
b3VyY2UoSURCQW55OjpjcmVhdGUob2JqZWN0U3RvcmUpLmxlYWtSZWYoKSkKKyAgICAsIG1fb2Jq
ZWN0U3RvcmUoJm9iamVjdFN0b3JlKQoreworICAgIHN1c3BlbmRJZk5lZWRlZCgpOworfQorCitJ
REJDdXJzb3I6OklEQkN1cnNvcihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQkluZGV4
JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKKyAgICA6IEFjdGl2ZURPTU9iamVj
dCh0cmFuc2FjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2luZm8oaW5m
bykKKyAgICAsIG1fc291cmNlKElEQkFueTo6Y3JlYXRlKGluZGV4KS5sZWFrUmVmKCkpCisgICAg
LCBtX2luZGV4KCZpbmRleCkKK3sKKyAgICBzdXNwZW5kSWZOZWVkZWQoKTsKK30KKworSURCQ3Vy
c29yOjp+SURCQ3Vyc29yKCkKK3sKK30KKworYm9vbCBJREJDdXJzb3I6OnNvdXJjZXNEZWxldGVk
KCkgY29uc3QKK3sKKyAgICBpZiAobV9vYmplY3RTdG9yZSkKKyAgICAgICAgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmUtPmlzRGVsZXRlZCgpOworCisgICAgQVNTRVJUKG1faW5kZXgpOworICAgIHJldHVy
biBtX2luZGV4LT5pc0RlbGV0ZWQoKSB8fCBtX2luZGV4LT5tb2Rlcm5PYmplY3RTdG9yZSgpLmlz
RGVsZXRlZCgpOworfQorCitJREJPYmplY3RTdG9yZSYgSURCQ3Vyc29yOjplZmZlY3RpdmVPYmpl
Y3RTdG9yZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fb2JqZWN0U3RvcmUpCisgICAgICAgIHJldHVy
biAqbV9vYmplY3RTdG9yZTsKKworICAgIEFTU0VSVChtX2luZGV4KTsKKyAgICByZXR1cm4gbV9p
bmRleC0+bW9kZXJuT2JqZWN0U3RvcmUoKTsKK30KKworSURCVHJhbnNhY3Rpb24mIElEQkN1cnNv
cjo6dHJhbnNhY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBlZmZlY3RpdmVPYmplY3RTdG9y
ZSgpLm1vZGVyblRyYW5zYWN0aW9uKCk7Cit9CisKK2NvbnN0IFN0cmluZyYgSURCQ3Vyc29yOjpk
aXJlY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBJREJDdXJzb3I6OmRpcmVjdGlvblRvU3Ry
aW5nKG1faW5mby5jdXJzb3JEaXJlY3Rpb24oKSk7Cit9CisKK2NvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBJREJDdXJzb3I6OmtleSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVwcmVj
YXRlZEN1cnJlbnRLZXk7Cit9CisKK2NvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJD
dXJzb3I6OnByaW1hcnlLZXkoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlcHJlY2F0ZWRDdXJy
ZW50UHJpbWFyeUtleTsKK30KKworY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIElEQkN1
cnNvcjo6dmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50VmFs
dWU7Cit9CisKK0lEQkFueSogSURCQ3Vyc29yOjpzb3VyY2UoKQoreworICAgIHJldHVybiAmbV9z
b3VyY2UuZ2V0KCk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJDdXJzb3I6
OnVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZh
bHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIs
ICJJREJDdXJzb3I6OnVwZGF0ZSIpOworCisgICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpIHsKKyAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
KyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3Vw
ZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9i
amVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBpZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgeworICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsK
KyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3Vw
ZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5p
c2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKHRyYW5z
YWN0aW9uKCkuaXNSZWFkT25seSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6UmVhZE9ubHlFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSByZWNvcmQg
bWF5IG5vdCBiZSB1cGRhdGVkIGluc2lkZSBhIHJlYWQtb25seSB0cmFuc2FjdGlvbi4iKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCFtX2dvdFZhbHVlKSB7Cisg
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7
CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1
cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5nIGl0ZXJhdGVkIG9yIGhh
cyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGlmIChpc0tleUN1cnNvcigpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBU
aGUgY3Vyc29yIGlzIGEga2V5IGN1cnNvci4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgYXV0byYgb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwor
ICAgIGF1dG8mIGtleVBhdGggPSBvYmplY3RTdG9yZS5pbmZvKCkua2V5UGF0aCgpOworICAgIGNv
bnN0IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKKyAgICBpZiAodXNl
c0luTGluZUtleXMpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IG1heWJl
Q3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwga2V5UGF0
aCk7CisgICAgICAgIElEQktleURhdGEga2V5UGF0aEtleURhdGEoa2V5UGF0aEtleS5nZXQoKSk7
CisgICAgICAgIGlmICgha2V5UGF0aEtleSB8fCBrZXlQYXRoS2V5RGF0YSAhPSBtX2N1cnJlbnRQ
cmltYXJ5S2V5RGF0YSkgeworICAgICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhRXJyb3I7CisgICAgICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGVmZmVjdGl2ZSBv
YmplY3Qgc3RvcmUgb2YgdGhpcyBjdXJzb3IgdXNlcyBpbi1saW5lIGtleXMgYW5kIGV2YWx1YXRp
bmcgdGhlIGtleSBwYXRoIG9mIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgcmVzdWx0cyBpbiBhIGRpZmZl
cmVudCB2YWx1ZSB0aGFuIHRoZSBjdXJzb3IncyBlZmZlY3RpdmUga2V5LiIpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3Qg
PSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnB1dEZvckN1cnNvclVwZGF0ZShleGVjLCB2YWx1ZS5q
c1ZhbHVlKCksIG1fZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5LmpzVmFsdWUoKSwgZWMpOwor
ICAgIGlmIChlYy5jb2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVChy
ZXF1ZXN0KTsKKyAgICByZXF1ZXN0LT5zZXRTb3VyY2UoKnRoaXMpOworICAgICsrbV9vdXRzdGFu
ZGluZ1JlcXVlc3RDb3VudDsKKworICAgIHJldHVybiByZXF1ZXN0OworfQorCit2b2lkIElEQkN1
cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDdXJzb3I6OmFkdmFuY2UiKTsKKwor
ICAgIGlmICghbV9yZXF1ZXN0KSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFjb3VudCkgeworICAgICAgICBlYy5jb2RlID0gVHlwZUVycm9yOworICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2YW5jZScgb24g
J0lEQkN1cnNvcic6IEEgY291bnQgYXJndW1lbnQgd2l0aCB2YWx1ZSAwICh6ZXJvKSB3YXMgc3Vw
cGxpZWQsIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoc291cmNlc0RlbGV0ZWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2YW5jZScgb24gJ0lEQkN1cnNvcic6
IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBk
ZWxldGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF0cmFuc2FjdGlv
bigpLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRy
YW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX2dvdFZhbHVlKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29yJzog
VGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5k
LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9nb3RWYWx1ZSA9IGZhbHNlOwor
CisgICAgdW5jaGVja2VkSXRlcmF0ZUN1cnNvcihJREJLZXlEYXRhKCksIGNvdW50KTsKK30KKwor
dm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgY29udGludWVGdW5jdGlvbihJ
REJLZXlEYXRhKCksIGVjKTsKK30KKwordm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIERP
TVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOworICAgIFJlZlB0cjxJREJLZXk+
IGtleTsKKyAgICBpZiAoIWtleVZhbHVlLmpzVmFsdWUoKS5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsKKwor
ICAgIGNvbnRpbnVlRnVuY3Rpb24oa2V5LmdldCgpLCBlYyk7Cit9CisKK3ZvaWQgSURCQ3Vyc29y
Ojpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleURhdGEmIGtleSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjpjb250aW51
ZUZ1bmN0aW9uICh0byBrZXkgJXMpIiwga2V5LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKworICAgIGlmICghbV9yZXF1ZXN0KSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoc291cmNlc0RlbGV0ZWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBU
aGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVs
ZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdHJhbnNhY3Rpb24o
KS5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUgdHJh
bnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIW1fZ290VmFsdWUpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29yJzog
VGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5k
LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFrZXkuaXNOdWxsKCkgJiYg
IWtleS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEYXRhRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBwYXJhbWV0ZXIgaXMgbm90
IGEgdmFsaWQga2V5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1faW5m
by5pc0RpcmVjdGlvbkZvcndhcmQoKSkgeworICAgICAgICBpZiAoIWtleS5pc051bGwoKSAmJiBr
ZXkuY29tcGFyZShtX2N1cnJlbnRLZXlEYXRhKSA8PSAwKSB7CisgICAgICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1
cnNvcic6IFRoZSBwYXJhbWV0ZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgY3Vyc29y
J3MgcG9zaXRpb24uIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKCFrZXkuaXNOdWxsKCkgJiYga2V5LmNvbXBhcmUobV9jdXJyZW50S2V5RGF0YSkgPj0g
MCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsK
KyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Nv
bnRpbnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHBhcmFtZXRlciBpcyBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gdGhpcyBjdXJzb3IncyBwb3NpdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKKworICAgIHVuY2hlY2tlZEl0ZXJhdGVDdXJz
b3Ioa2V5LCAwKTsKK30KKwordm9pZCBJREJDdXJzb3I6OnVuY2hlY2tlZEl0ZXJhdGVDdXJzb3Io
Y29uc3QgSURCS2V5RGF0YSYga2V5LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworICAgICsrbV9v
dXRzdGFuZGluZ1JlcXVlc3RDb3VudDsKKworICAgIG1fcmVxdWVzdC0+d2lsbEl0ZXJhdGVDdXJz
b3IoKnRoaXMpOworICAgIHRyYW5zYWN0aW9uKCkuaXRlcmF0ZUN1cnNvcigqdGhpcywga2V5LCBj
b3VudCk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6ZGVsZXRl
RnVuY3Rpb24iKTsKKworICAgIGlmIChzb3VyY2VzRGVsZXRlZCgpKSB7CisgICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJ
REJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUg
aGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgaWYgKCF0cmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJ
REJDdXJzb3InOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICh0cmFuc2FjdGlvbigpLmlz
UmVhZE9ubHkoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJl
YWRPbmx5RXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3InOiBUaGUgcmVjb3JkIG1heSBub3QgYmUg
ZGVsZXRlZCBpbnNpZGUgYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24uIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV9nb3RWYWx1ZSkgeworICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAn
SURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQg
cGFzdCBpdHMgZW5kLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBp
ZiAoaXNLZXlDdXJzb3IoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBp
cyBhIGtleSBjdXJzb3IuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGF1dG8gcmVxdWVzdCA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkubW9kZXJuRGVsZXRlKGNvbnRl
eHQsIG1fZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5LmpzVmFsdWUoKSwgZWMpOworICAgIGlm
IChlYy5jb2RlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVChyZXF1ZXN0
KTsKKyAgICByZXF1ZXN0LT5zZXRTb3VyY2UoKnRoaXMpOworICAgICsrbV9vdXRzdGFuZGluZ1Jl
cXVlc3RDb3VudDsKKworICAgIHJldHVybiByZXF1ZXN0OworfQorCit2b2lkIElEQkN1cnNvcjo6
c2V0R2V0UmVzdWx0KElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQkdldFJlc3VsdCYgZ2V0
UmVzdWx0KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJDdXJzb3I6OnNldEdldFJlc3VsdCAt
IGN1cnJlbnQga2V5ICVzIiwgZ2V0UmVzdWx0LmtleURhdGEoKS5sb2dnaW5nU3RyaW5nKCkuc3Vi
c3RyaW5nKDAsIDEwMCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBhdXRvKiBjb250ZXh0ID0gcmVx
dWVzdC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWdldFJlc3VsdC5pc0RlZmluZWQoKSkgeworICAgICAgICBt
X2RlcHJlY2F0ZWRDdXJyZW50S2V5ID0geyB9OworICAgICAgICBtX2N1cnJlbnRLZXlEYXRhID0g
eyB9OworICAgICAgICBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleSA9IHsgfTsKKyAgICAg
ICAgbV9jdXJyZW50UHJpbWFyeUtleURhdGEgPSB7IH07CisgICAgICAgIG1fZGVwcmVjYXRlZEN1
cnJlbnRWYWx1ZSA9IHsgfTsKKworICAgICAgICBtX2dvdFZhbHVlID0gZmFsc2U7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX2RlcHJlY2F0ZWRDdXJyZW50S2V5ID0gaWRiS2V5RGF0
YVRvU2NyaXB0VmFsdWUoY29udGV4dCwgZ2V0UmVzdWx0LmtleURhdGEoKSk7CisgICAgbV9jdXJy
ZW50S2V5RGF0YSA9IGdldFJlc3VsdC5rZXlEYXRhKCk7CisgICAgbV9kZXByZWNhdGVkQ3VycmVu
dFByaW1hcnlLZXkgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBnZXRSZXN1bHQu
cHJpbWFyeUtleURhdGEoKSk7CisgICAgbV9jdXJyZW50UHJpbWFyeUtleURhdGEgPSBnZXRSZXN1
bHQucHJpbWFyeUtleURhdGEoKTsKKworICAgIGlmIChpc0tleUN1cnNvcigpKQorICAgICAgICBt
X2RlcHJlY2F0ZWRDdXJyZW50VmFsdWUgPSB7IH07CisgICAgZWxzZQorICAgICAgICBtX2RlcHJl
Y2F0ZWRDdXJyZW50VmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YSgqY29udGV4dCwgZ2V0
UmVzdWx0LnZhbHVlQnVmZmVyKCkpOworCisgICAgbV9nb3RWYWx1ZSA9IHRydWU7Cit9CisKK2Nv
bnN0IGNoYXIqIElEQkN1cnNvcjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICJJREJDdXJzb3IiOworfQorCitib29sIElEQkN1cnNvcjo6Y2FuU3VzcGVuZEZvckRv
Y3VtZW50U3VzcGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IElEQkN1cnNvcjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9v
dXRzdGFuZGluZ1JlcXVlc3RDb3VudDsKK30KKwordm9pZCBJREJDdXJzb3I6OmRlY3JlbWVudE91
dHN0YW5kaW5nUmVxdWVzdENvdW50KCkKK3sKKyAgICBBU1NFUlQobV9vdXRzdGFuZGluZ1JlcXVl
c3RDb3VudCk7CisgICAgLS1tX291dHN0YW5kaW5nUmVxdWVzdENvdW50OworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKaW5kZXggMjRkM2E5
My4uODRmOGI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmgKQEAgLTIzLDMxICsyMywyNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgSURCQ3Vyc29yX2gKLSNkZWZpbmUgSURCQ3Vyc29yX2gKKyNw
cmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJJ
REJLZXkuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIkluZGV4ZWRE
Qi5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgotI2luY2x1ZGUgPGJpbmRpbmdzL1Nj
cmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkN1cnNvckluZm8u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01SZXF1ZXN0U3RhdGU7CiBjbGFz
cyBJREJBbnk7Ci1jbGFzcyBJREJDYWxsYmFja3M7Ci1jbGFzcyBJREJSZXF1ZXN0OwotY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIElEQkdldFJlc3VsdDsKK2NsYXNzIElEQklu
ZGV4OworY2xhc3MgSURCT2JqZWN0U3RvcmU7CitjbGFzcyBJREJUcmFuc2FjdGlvbjsKIAotc3Ry
dWN0IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZTsKLQotY2xhc3MgSURCQ3Vyc29yIDogcHVibGlj
IFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCQ3Vyc29yPiB7CitjbGFzcyBJ
REJDdXJzb3IgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJD
dXJzb3I+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PElEQkN1cnNvcj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uJiwgSURCSW5kZXgmLCBjb25zdCBJREJD
dXJzb3JJbmZvJik7CisKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJlY3Rpb25O
ZXh0KCk7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZGlyZWN0aW9uTmV4dFVuaXF1
ZSgpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGRpcmVjdGlvblByZXYoKTsKQEAg
LTU1LDM5ICs1MSw3MyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24gc3RyaW5nVG9EaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBtb2RlU3RyaW5nLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZGlyZWN0aW9uVG9T
dHJpbmcoSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbW9kZSk7Ci0KLSAgICB2aXJ0dWFsIH5J
REJDdXJzb3IoKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIH5JREJDdXJzb3IoKTsKIAogICAgIC8v
IEltcGxlbWVudCB0aGUgSURMCi0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbigp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgcHJpbWFyeUtleSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiB2YWx1ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIElEQkFueSogc291
cmNlKCkgPSAwOworICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKCkgY29uc3Q7CisgICAgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSgpIGNvbnN0OworICAgIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBwcmltYXJ5S2V5KCkgY29uc3Q7CisgICAgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKCkgY29uc3Q7CisgICAgSURCQW55KiBzb3VyY2UoKTsK
KworICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUm
LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwor
ICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KTsKKyAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIHZvaWQgY29udGludWVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVl
c3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKTsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShK
U0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKKyAgICB2b2lkIGNvbnRpbnVlRnVuY3Rp
b24oY29uc3QgSURCS2V5RGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwogCi0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGF0IG1ldGhvZCAodGFraW5nIGEgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCBwb2ludGVyIGFuZCBub3QgYSByZWZlcmVuY2UpCi0gICAgLy8gYnV0
IEluc3BlY3RvckluZGV4ZWREQkFnZW50IHdhbnRzIHRvIGNhbGwgaXQgd2l0aCBhIG51bGwgY29u
dGV4dC4gCi0gICAgdmlydHVhbCB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICAvLyBGSVhNRTog
VHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBvdmVybG9hZCBpcyB1bm5l
ZWRlZC4KLSAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgeyBjb250aW51ZUZ1bmN0aW9u
KCZjb250ZXh0LCBlYyk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29udGludWVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJl
cXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKSA9IDA7CisgICAgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbygpIGNv
bnN0IHsgcmV0dXJuIG1faW5mbzsgfQogCi0gICAgdmlydHVhbCBib29sIGlzS2V5Q3Vyc29yKCkg
Y29uc3QgPSAwOworICAgIHZvaWQgc2V0UmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KSB7IG1f
cmVxdWVzdCA9ICZyZXF1ZXN0OyB9CisgICAgdm9pZCBjbGVhclJlcXVlc3QoKSB7IG1fcmVxdWVz
dCA9IG51bGxwdHI7IH0KKyAgICBJREJSZXF1ZXN0KiByZXF1ZXN0KCkgeyByZXR1cm4gbV9yZXF1
ZXN0OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNNb2Rlcm5DdXJzb3IoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZvaWQgc2V0R2V0UmVzdWx0KElEQlJlcXVlc3QmLCBjb25zdCBJREJH
ZXRSZXN1bHQmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0
Q291bnQoKTsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdC4KKyAgICBjb25zdCBjaGFyKiBhY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3Q7CisgICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRT
dXNwZW5zaW9uKCkgY29uc3Q7CisgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsK
IAogcHJvdGVjdGVkOgotICAgIElEQkN1cnNvcigpOworICAgIElEQkN1cnNvcihJREJUcmFuc2Fj
dGlvbiYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOworICAgIElEQkN1
cnNvcihJREJUcmFuc2FjdGlvbiYsIElEQkluZGV4JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwor
Citwcml2YXRlOgorICAgIC8vIEN1cnNvcnMgYXJlIGNyZWF0ZWQgd2l0aCBhbiBvdXRzdGFuZGlu
ZyBpdGVyYXRpb24gcmVxdWVzdC4KKyAgICB1bnNpZ25lZCBtX291dHN0YW5kaW5nUmVxdWVzdENv
dW50IHsgMSB9OworCisgICAgSURCQ3Vyc29ySW5mbyBtX2luZm87CisgICAgUmVmPElEQkFueT4g
bV9zb3VyY2U7CisgICAgSURCT2JqZWN0U3RvcmUqIG1fb2JqZWN0U3RvcmUgeyBudWxscHRyIH07
CisgICAgSURCSW5kZXgqIG1faW5kZXggeyBudWxscHRyIH07CisgICAgSURCUmVxdWVzdCogbV9y
ZXF1ZXN0OworCisgICAgYm9vbCBzb3VyY2VzRGVsZXRlZCgpIGNvbnN0OworICAgIElEQk9iamVj
dFN0b3JlJiBlZmZlY3RpdmVPYmplY3RTdG9yZSgpIGNvbnN0OworICAgIElEQlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbigpIGNvbnN0OworCisgICAgdm9pZCB1bmNoZWNrZWRJdGVyYXRlQ3Vyc29y
KGNvbnN0IElEQktleURhdGEmLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKKworICAgIGJvb2wgbV9n
b3RWYWx1ZSB7IGZhbHNlIH07CisKKyAgICBJREJLZXlEYXRhIG1fY3VycmVudEtleURhdGE7Cisg
ICAgSURCS2V5RGF0YSBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YTsKKworICAgIC8vIEZJWE1FOiBX
aGVuIGRpdGNoaW5nIExlZ2FjeSBJREIgYW5kIGNvbWJpbmluZyB0aGlzIGltcGxlbWVudGF0aW9u
IHdpdGggdGhlIGFic3RyYWN0IElEQkN1cnNvciwKKyAgICAvLyB0aGVzZSBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSBtZW1iZXJzIHNob3VsZCBiZSBKU1ZhbHVlcyBpbnN0ZWFkLgorICAgIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGVwcmVjYXRlZEN1cnJlbnRLZXk7CisgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgbV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlLZXk7CisgICAgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkN1cnNvcl9oCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAppbmRleCA1Y2U0NzM4
Li4xNGE2Y2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JXaXRoVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAKQEAgLTMwLDcgKzMwLDI3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotSURCQ3Vyc29yV2l0aFZhbHVlOjpJREJDdXJzb3JXaXRoVmFsdWUoKQor
UmVmPElEQkN1cnNvcldpdGhWYWx1ZT4gSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0
IElEQkN1cnNvckluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vy
c29yV2l0aFZhbHVlKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSwgaW5mbykpOworfQorCitSZWY8
SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYg
aW5mbykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJDdXJzb3JXaXRoVmFsdWUodHJh
bnNhY3Rpb24sIGluZGV4LCBpbmZvKSk7Cit9CisKK0lEQkN1cnNvcldpdGhWYWx1ZTo6SURCQ3Vy
c29yV2l0aFZhbHVlKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmUm
IG9iamVjdFN0b3JlLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQorICAgIDogSURCQ3Vyc29y
KHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSwgaW5mbykKK3sKK30KKworSURCQ3Vyc29yV2l0aFZh
bHVlOjpJREJDdXJzb3JXaXRoVmFsdWUoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJJ
bmRleCYgaW5kZXgsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCisgICAgOiBJREJDdXJzb3Io
dHJhbnNhY3Rpb24sIGluZGV4LCBpbmZvKQoreworfQorCitJREJDdXJzb3JXaXRoVmFsdWU6On5J
REJDdXJzb3JXaXRoVmFsdWUoKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCmluZGV4IDVmOTkwOTAuLmYxMDBk
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
cldpdGhWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvcldpdGhWYWx1ZS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJREJDdXJzb3JXaXRoVmFsdWVfaAotI2RlZmlu
ZSBJREJDdXJzb3JXaXRoVmFsdWVfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIApAQCAtMzQsMTQgKzMzLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlIDogcHVibGljIElEQkN1cnNvciB7CiBwdWJsaWM6Ci0g
ICAgdmlydHVhbCB+SURCQ3Vyc29yV2l0aFZhbHVlKCkgeyB9CisgICAgc3RhdGljIFJlZjxJREJD
dXJzb3JXaXRoVmFsdWU+IGNyZWF0ZShJREJUcmFuc2FjdGlvbiYsIElEQk9iamVjdFN0b3JlJiwg
Y29uc3QgSURCQ3Vyc29ySW5mbyYpOworICAgIHN0YXRpYyBSZWY8SURCQ3Vyc29yV2l0aFZhbHVl
PiBjcmVhdGUoSURCVHJhbnNhY3Rpb24mLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvckluZm8m
KTsKIAotcHJvdGVjdGVkOgotICAgIElEQkN1cnNvcldpdGhWYWx1ZSgpOworICAgIHZpcnR1YWwg
fklEQkN1cnNvcldpdGhWYWx1ZSgpOworCisgICAgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgSURCQ3Vyc29yV2l0aFZhbHVl
KElEQlRyYW5zYWN0aW9uJiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7
CisgICAgSURCQ3Vyc29yV2l0aFZhbHVlKElEQlRyYW5zYWN0aW9uJiwgSURCSW5kZXgmLCBjb25z
dCBJREJDdXJzb3JJbmZvJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZgotCi0jZW5kaWYgLy8gTGVnYWN5Q3Vyc29yV2l0aFZhbHVlX2gKKyNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcAppbmRleCAyZDY0NzlmLi5hMjlkZjAxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0yOCwxMSArMjgs
NDAxIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTVN0
cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCisjaW5jbHVkZSAiSURCQ29ubmVj
dGlvblRvU2VydmVyLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNs
dWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgorI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJEYXRhYmFzZTo6SURCRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IEFjdGl2ZURPTU9iamVjdChj
b250ZXh0KQorUmVmPElEQkRhdGFiYXNlPiBJREJEYXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBj
b25uZWN0aW9uLCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IElEQkRhdGFiYXNlKGNvbnRleHQsIGNvbm5lY3Rpb24sIHJlc3VsdERh
dGEpKTsKK30KKworSURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9u
LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQorICAgIDogV2ViQ29yZTo6QWN0aXZl
RE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwgbV9zZXJ2ZXJDb25uZWN0aW9uKGNvbm5lY3Rpb24p
CisgICAgLCBtX2luZm8ocmVzdWx0RGF0YS5kYXRhYmFzZUluZm8oKSkKKyAgICAsIG1fZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllcihyZXN1bHREYXRhLmRhdGFiYXNlQ29ubmVjdGlvbklkZW50
aWZpZXIoKSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OklEQkRhdGFiYXNl
IC0gQ3JlYXRpbmcgZGF0YWJhc2UgJXMgd2l0aCB2ZXJzaW9uICUiIFBSSXU2NCAiIGNvbm5lY3Rp
b24gJSIgUFJJdTY0LCBtX2luZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1faW5mby52ZXJzaW9u
KCksIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7CisgICAgc3VzcGVuZElmTmVlZGVk
KCk7CisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CisgICAgbV9zZXJ2ZXJDb25uZWN0
aW9uLT5yZWdpc3RlckRhdGFiYXNlQ29ubmVjdGlvbigqdGhpcyk7Cit9CisKK0lEQkRhdGFiYXNl
Ojp+SURCRGF0YWJhc2UoKQoreworICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+dW5yZWdpc3RlckRh
dGFiYXNlQ29ubmVjdGlvbigqdGhpcyk7Cit9CisKK2Jvb2wgSURCRGF0YWJhc2U6Omhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2Nsb3NlZEluU2VydmVyOworfQor
Citjb25zdCBTdHJpbmcgSURCRGF0YWJhc2U6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2luZm8ubmFtZSgpOworfQorCit1aW50NjRfdCBJREJEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1faW5mby52ZXJzaW9uKCk7Cit9CisKK1JlZlB0cjxET01TdHJpbmdM
aXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0Cit7CisgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUo
KTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2luZm8ub2JqZWN0U3RvcmVOYW1lcygpKQorICAg
ICAgICBvYmplY3RTdG9yZU5hbWVzLT5hcHBlbmQobmFtZSk7CisgICAgb2JqZWN0U3RvcmVOYW1l
cy0+c29ydCgpOworICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzOworfQorCitSZWZQdHI8V2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
UmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29s
IGF1dG9JbmNyZW1lbnQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9H
KEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSIpOworCisgICAgQVNT
RVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbikgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFs
aWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRh
YmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG5hbWUpKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yOworICAg
ICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRl
T2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IEFuIG9iamVjdCBzdG9yZSB3aXRoIHRoZSBz
cGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKCFrZXlQYXRoLmlzTnVsbCgpICYmICFrZXlQYXRoLmlzVmFsaWQo
KSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlN5bnRheEVycm9y
OworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
Y3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBrZXlQYXRoIG9wdGlvbiBp
cyBub3QgYSB2YWxpZCBrZXkgcGF0aC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgIWtleVBhdGguaXNOdWxsKCkpIHsKKyAgICAg
ICAgaWYgKChrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpTdHJpbmcg
JiYga2V5UGF0aC5zdHJpbmcoKS5pc0VtcHR5KCkpIHx8IGtleVBhdGgudHlwZSgpID09IEluZGV4
ZWREQjo6S2V5UGF0aFR5cGU6OkFycmF5KSB7CisgICAgICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRBY2Nlc3NFcnJvcjsKKyAgICAgICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScg
b24gJ0lEQkRhdGFiYXNlJzogVGhlIGF1dG9JbmNyZW1lbnQgb3B0aW9uIHdhcyBzZXQgYnV0IHRo
ZSBrZXlQYXRoIG9wdGlvbiB3YXMgZW1wdHkgb3IgYW4gYXJyYXkuIik7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEluc3RhbGwgdGhlIG5l
dyBPYmplY3RTdG9yZSBpbnRvIHRoZSBjb25uZWN0aW9uJ3MgbWV0YWRhdGEuCisgICAgSURCT2Jq
ZWN0U3RvcmVJbmZvIGluZm8gPSBtX2luZm8uY3JlYXRlTmV3T2JqZWN0U3RvcmUobmFtZSwga2V5
UGF0aCwgYXV0b0luY3JlbWVudCk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBJREJPYmpl
Y3RTdG9yZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiwgd2hpY2ggYWxzbyBzY2hlZHVsZXMgdGhlIG9w
ZXJhdGlvbiBzZXJ2ZXIgc2lkZS4KKyAgICBSZWY8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmNyZWF0ZU9iamVjdFN0b3JlKGluZm8pOwor
ICAgIHJldHVybiBhZG9wdFJlZigmb2JqZWN0U3RvcmUubGVha1JlZigpKTsKK30KKworUmVmUHRy
PFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBvYmplY3RTdG9yZXMsIGNv
bnN0IFN0cmluZyYgbW9kZVN0cmluZywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uIik7CisKKyAgICBp
ZiAobV9jbG9zZVBlbmRpbmcpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUg
ZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBpZiAob2JqZWN0U3RvcmVzLmlzRW1wdHkoKSkgeworICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRBY2Nlc3NFcnJvcjsKKyAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0
aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgc3RvcmVOYW1lcyBwYXJhbWV0ZXIgd2FzIGVtcHR5
LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSBtb2RlID0gSURCVHJhbnNhY3Rpb246OnN0cmluZ1RvTW9kZShtb2RlU3Ry
aW5nLCBlYy5jb2RlKTsKKyAgICBpZiAoZWMuY29kZSkgeworICAgICAgICBlYy5tZXNzYWdlID0g
bWFrZVN0cmluZyhBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicg
b24gJ0lEQkRhdGFiYXNlJzogVGhlIG1vZGUgcHJvdmlkZWQgKCciKSwgbW9kZVN0cmluZywgQVND
SUlMaXRlcmFsKCInKSBpcyBub3Qgb25lIG9mICdyZWFkb25seScgb3IgJ3JlYWR3cml0ZScuIikp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobW9kZSAhPSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkgJiYgbW9kZSAhPSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZTo6UmVhZFdyaXRlKSB7CisgICAgICAgIGVjLmNvZGUgPSBUeXBlRXJyb3I7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiAmJiAhbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzRmluaXNoZWRP
ckZpbmlzaGluZygpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogQSB2ZXJzaW9u
IGNoYW5nZSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlTmFtZSA6IG9iamVjdFN0b3Jl
cykgeworICAgICAgICBpZiAobV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpOb3RGb3VuZEVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IE9uZSBv
ZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBzdG9yZXMgd2FzIG5vdCBmb3VuZC4iKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBpbmZvID0gSURCVHJhbnNhY3Rpb25J
bmZvOjpjbGllbnRUcmFuc2FjdGlvbihtX3NlcnZlckNvbm5lY3Rpb24uZ2V0KCksIG9iamVjdFN0
b3JlcywgbW9kZSk7CisgICAgYXV0byB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoKnRoaXMsIGluZm8pOworCisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp0cmFu
c2FjdGlvbiAtIEFkZGVkIGFjdGl2ZSB0cmFuc2FjdGlvbiAlcyIsIGluZm8uaWRlbnRpZmllcigp
LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIG1fYWN0aXZlVHJhbnNhY3Rp
b25zLnNldChpbmZvLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsKKworICAgIHJl
dHVybiBhZG9wdFJlZigmdHJhbnNhY3Rpb24ubGVha1JlZigpKTsKK30KKworUmVmUHRyPFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZSwgY29uc3QgU3Ry
aW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IG9iamVjdFN0b3JlcygxKTsKKyAgICBvYmplY3RTdG9yZXNbMF0gPSBvYmplY3RTdG9y
ZTsKKyAgICByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgb2JqZWN0U3RvcmVzLCBtb2RlLCBl
Yyk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgb2JqZWN0U3RvcmVOYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAg
IExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKworICAg
IGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZU9iamVjdFN0b3JlJyBv
biAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNo
YW5nZSB0cmFuc2FjdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgh
bV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1faW5mby5oYXNPYmplY3RTdG9yZShvYmpl
Y3RTdG9yZU5hbWUpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2RlbGV0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgc3Bl
Y2lmaWVkIG9iamVjdCBzdG9yZSB3YXMgbm90IGZvdW5kLiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9pbmZvLmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSk7Cisg
ICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0
b3JlTmFtZSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmNsb3NlKCkKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCRGF0YWJhc2U6OmNsb3NlIC0gJSIgUFJJdTY0LCBtX2RhdGFiYXNlQ29ubmVj
dGlvbklkZW50aWZpZXIpOworCisgICAgbV9jbG9zZVBlbmRpbmcgPSB0cnVlOworICAgIG1heWJl
Q2xvc2VJblNlcnZlcigpOworfQorCit2b2lkIElEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2
ZXIoKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6bWF5YmVDbG9zZUluU2Vy
dmVyIC0gJSIgUFJJdTY0LCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOworCisgICAg
aWYgKG1fY2xvc2VkSW5TZXJ2ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDMuMy45IERh
dGFiYXNlIGNsb3Npbmcgc3RlcHMKKyAgICAvLyBXYWl0IGZvciBhbGwgdHJhbnNhY3Rpb25zIGNy
ZWF0ZWQgdXNpbmcgdGhpcyBjb25uZWN0aW9uIHRvIGNvbXBsZXRlLgorICAgIC8vIE9uY2UgdGhl
eSBhcmUgY29tcGxldGUsIHRoaXMgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgICAgaWYgKCFtX2Fj
dGl2ZVRyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xv
c2VkSW5TZXJ2ZXIgPSB0cnVlOworICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+ZGF0YWJhc2VDb25u
ZWN0aW9uQ2xvc2VkKCp0aGlzKTsKK30KKworY29uc3QgY2hhciogSURCRGF0YWJhc2U6OmFjdGl2
ZURPTU9iamVjdE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiSURCRGF0YWJhc2UiOworfQor
Citib29sIElEQkRhdGFiYXNlOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyB2YWx1ZSB3aWxsIHNvbWV0aW1lcyBiZSBmYWxzZSB3
aGVuIGRhdGFiYXNlIG9wZXJhdGlvbnMgYXJlIGFjdHVhbGx5IGluIHByb2dyZXNzLgorICAgIC8v
IFN1Y2ggZGF0YWJhc2Ugb3BlcmF0aW9ucyBkbyBub3QgeWV0IGV4aXN0LgorICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIElEQkRhdGFiYXNlOjpzdG9wKCkKK3sKKyAgICBMT0coSW5kZXhlZERC
LCAiSURCRGF0YWJhc2U6OnN0b3AgLSAlIiBQUkl1NjQsIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRl
bnRpZmllcik7CisKKyAgICBWZWN0b3I8SURCUmVzb3VyY2VJZGVudGlmaWVyPiB0cmFuc2FjdGlv
bklkZW50aWZpZXJzOworICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtX2FjdGl2ZVRyYW5zYWN0aW9ucy5zaXplKCkpOworCisgICAgZm9yIChhdXRvJiBp
ZCA6IG1fYWN0aXZlVHJhbnNhY3Rpb25zLmtleXMoKSkKKyAgICAgICAgdHJhbnNhY3Rpb25JZGVu
dGlmaWVycy51bmNoZWNrZWRBcHBlbmQoaWQpOworCisgICAgZm9yIChhdXRvJiBpZCA6IHRyYW5z
YWN0aW9uSWRlbnRpZmllcnMpIHsKKyAgICAgICAgSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
ID0gbV9hY3RpdmVUcmFuc2FjdGlvbnMuZ2V0KGlkKTsKKyAgICAgICAgaWYgKHRyYW5zYWN0aW9u
KQorICAgICAgICAgICAgdHJhbnNhY3Rpb24tPnN0b3AoKTsKKyAgICB9CisKKyAgICBjbG9zZSgp
OworfQorCitSZWY8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjpzdGFydFZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8sIElEQk9wZW5EQlJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpzdGFy
dFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiAlcyIsIGluZm8uaWRlbnRpZmllcigpLmxvZ2dpbmdT
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIEFTU0VSVCghbV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24pOworICAgIEFTU0VSVChpbmZvLm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7CisgICAgQVNTRVJUKCFtX2Nsb3NlUGVuZGluZyk7Cisg
ICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisKKyAgICBSZWY8SURCVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZSgqdGhpcywgaW5mbywg
cmVxdWVzdCk7CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSAmdHJhbnNhY3Rpb24u
Z2V0KCk7CisKKyAgICBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb24tPmluZm8o
KS5pZGVudGlmaWVyKCksICZ0cmFuc2FjdGlvbi5nZXQoKSk7CisKKyAgICByZXR1cm4gdHJhbnNh
Y3Rpb247Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFz
ZTo6ZGlkU3RhcnRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVy
KCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEFTU0VSVCghbV92ZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24pOworCisgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBjbGll
bnQgdG8gaGF2ZSBhYm9ydGVkIGEgdHJhbnNhY3Rpb24gYmVmb3JlIHRoZSBzZXJ2ZXIgcmVwbGll
cyBiYWNrIHRoYXQgaXQgaGFzIHN0YXJ0ZWQuCisgICAgaWYgKG1fYWJvcnRpbmdUcmFuc2FjdGlv
bnMuY29udGFpbnModHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fYWN0aXZlVHJhbnNhY3Rpb25zLnNldCh0cmFuc2FjdGlvbi5pbmZvKCku
aWRlbnRpZmllcigpLCAmdHJhbnNhY3Rpb24pOworfQorCit2b2lkIElEQkRhdGFiYXNlOjp3aWxs
Q29tbWl0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIExP
RyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6d2lsbENvbW1pdFRyYW5zYWN0aW9uICVzIiwgdHJh
bnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisKKyAgICBhdXRvIHJlZlRyYW5zYWN0aW9uID0gbV9hY3RpdmVUcmFuc2FjdGlvbnMudGFr
ZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQocmVmVHJhbnNh
Y3Rpb24pOworICAgIG1fY29tbWl0dGluZ1RyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb24uaW5m
bygpLmlkZW50aWZpZXIoKSwgV1RGTW92ZShyZWZUcmFuc2FjdGlvbikpOworfQorCit2b2lkIElE
QkRhdGFiYXNlOjpkaWRDb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRDb21taXRUcmFuc2Fj
dGlvbiAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID09
ICZ0cmFuc2FjdGlvbikKKyAgICAgICAgbV9pbmZvLnNldFZlcnNpb24odHJhbnNhY3Rpb24uaW5m
bygpLm5ld1ZlcnNpb24oKSk7CisKKyAgICBkaWRDb21taXRPckFib3J0VHJhbnNhY3Rpb24odHJh
bnNhY3Rpb24pOworfQorCit2b2lkIElEQkRhdGFiYXNlOjp3aWxsQWJvcnRUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRh
dGFiYXNlOjp3aWxsQWJvcnRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVu
dGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgYXV0byByZWZU
cmFuc2FjdGlvbiA9IG1fYWN0aXZlVHJhbnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSk7CisgICAgaWYgKCFyZWZUcmFuc2FjdGlvbikKKyAgICAgICAgcmVmVHJh
bnNhY3Rpb24gPSBtX2NvbW1pdHRpbmdUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZv
KCkuaWRlbnRpZmllcigpKTsKKworICAgIEFTU0VSVChyZWZUcmFuc2FjdGlvbik7CisgICAgbV9h
Ym9ydGluZ1RyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwg
V1RGTW92ZShyZWZUcmFuc2FjdGlvbikpOworCisgICAgaWYgKHRyYW5zYWN0aW9uLmlzVmVyc2lv
bkNoYW5nZSgpKSB7CisgICAgICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5vcmlnaW5hbERhdGFiYXNl
SW5mbygpKTsKKyAgICAgICAgbV9pbmZvID0gKnRyYW5zYWN0aW9uLm9yaWdpbmFsRGF0YWJhc2VJ
bmZvKCk7CisgICAgICAgIG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQg
SURCRGF0YWJhc2U6OmRpZEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlkQWJvcnRUcmFuc2Fj
dGlvbiAlcyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKHRyYW5zYWN0aW9uLmlzVmVyc2lvbkNoYW5nZSgp
KSB7CisgICAgICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5vcmlnaW5hbERhdGFiYXNlSW5mbygpKTsK
KyAgICAgICAgQVNTRVJUKG1faW5mby52ZXJzaW9uKCkgPT0gdHJhbnNhY3Rpb24ub3JpZ2luYWxE
YXRhYmFzZUluZm8oKS0+dmVyc2lvbigpKTsKKyAgICAgICAgbV9jbG9zZVBlbmRpbmcgPSB0cnVl
OworICAgICAgICBtYXliZUNsb3NlSW5TZXJ2ZXIoKTsKKyAgICB9CisKKyAgICBkaWRDb21taXRP
ckFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pOworfQorCit2b2lkIElEQkRhdGFiYXNlOjpk
aWRDb21taXRPckFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5z
YWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24g
PT0gJnRyYW5zYWN0aW9uKQorICAgICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9IG51
bGxwdHI7CisKKyNpZm5kZWYgTkRCRUJVRworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBp
ZiAobV9hY3RpdmVUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSkpCisgICAgICAgICsrY291bnQ7CisgICAgaWYgKG1fY29tbWl0dGluZ1RyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSkKKyAgICAgICAg
Kytjb3VudDsKKyAgICBpZiAobV9hYm9ydGluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSkKKyAgICAgICAgKytjb3VudDsKKworICAgIEFTU0VS
VChjb3VudCA9PSAxKTsKKyNlbmRpZgorCisgICAgbV9hY3RpdmVUcmFuc2FjdGlvbnMucmVtb3Zl
KHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOworICAgIG1fY29tbWl0dGluZ1RyYW5z
YWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSk7CisgICAgbV9h
Ym9ydGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIo
KSk7CisKKyAgICBpZiAobV9jbG9zZVBlbmRpbmcpCisgICAgICAgIG1heWJlQ2xvc2VJblNlcnZl
cigpOworfQorCit2b2lkIElEQkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVpbnQ2NF90IHJlcXVl
c3RlZFZlcnNpb24pCit7CisgICAgdWludDY0X3QgY3VycmVudFZlcnNpb24gPSBtX2luZm8udmVy
c2lvbigpOworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZmlyZVZlcnNpb25DaGFu
Z2VFdmVudCAtIGN1cnJlbnQgdmVyc2lvbiAlIiBQUkl1NjQgIiwgcmVxdWVzdGVkIHZlcnNpb24g
JSIgUFJJdTY0ICIsIGNvbm5lY3Rpb24gJSIgUFJJdTY0LCBjdXJyZW50VmVyc2lvbiwgcmVxdWVz
dGVkVmVyc2lvbiwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKworICAgIGlmICgh
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHx8IG1fY2xvc2VQZW5kaW5nKSB7CisgICAgICAgIHNl
cnZlckNvbm5lY3Rpb24oKS5kaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KG1fZGF0YWJhc2VDb25u
ZWN0aW9uSWRlbnRpZmllciwgcmVxdWVzdElkZW50aWZpZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUmVmPEV2ZW50PiBldmVudCA9IElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3Jl
YXRlKHJlcXVlc3RJZGVudGlmaWVyLCBjdXJyZW50VmVyc2lvbiwgcmVxdWVzdGVkVmVyc2lvbiwg
ZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0
aGlzKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVl
RXZlbnQoV1RGTW92ZShldmVudCkpOworfQorCitib29sIElEQkRhdGFiYXNlOjpkaXNwYXRjaEV2
ZW50KEV2ZW50JiBldmVudCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRp
c3BhdGNoRXZlbnQgKCUiIFBSSXU2NCAiKSIsIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmll
cik7CisKKyAgICBib29sIHJlc3VsdCA9IEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGE6OmRpc3Bh
dGNoRXZlbnQoZXZlbnQpOworCisgICAgaWYgKGV2ZW50LmlzVmVyc2lvbkNoYW5nZUV2ZW50KCkg
JiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpCisgICAg
ICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KG1fZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllciwgZG93bmNhc3Q8SURCVmVyc2lvbkNoYW5nZUV2ZW50Pihl
dmVudCkucmVxdWVzdElkZW50aWZpZXIoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIElEQkRhdGFiYXNlOjpkaWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvKQoreworICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9pbmZvLmluZm9Gb3JFeGlzdGluZ09i
amVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOworICAgIEFTU0VSVChvYmpl
Y3RTdG9yZSk7CisgICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7Cit9CisK
K3ZvaWQgSURCRGF0YWJhc2U6OmRpZERlbGV0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8m
IGluZm8pCiB7CisgICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5n
T2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKG9i
amVjdFN0b3JlKTsKKyAgICBvYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5mby5uYW1lKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuaAppbmRleCBmODQ3NmQ4Li5lZDBhNmVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKQEAgLTIzLDU0ICsy
MywxMDEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIElEQkRhdGFiYXNlX2gKLSNkZWZpbmUgSURCRGF0YWJhc2VfaAorI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEaWN0aW9uYXJ5Lmgi
Ci0jaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRl
ICJJbmRleGVkREIuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJJ
REJDb25uZWN0aW9uVG9TZXJ2ZXIuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1
ZGUgIklEQkRhdGFiYXNlSW5mby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0KLXN0cnVjdCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2U7
CitjbGFzcyBET01TdHJpbmdMaXN0OworY2xhc3MgSURCT2JqZWN0U3RvcmU7CitjbGFzcyBJREJP
cGVuREJSZXF1ZXN0OworY2xhc3MgSURCUmVzdWx0RGF0YTsKK2NsYXNzIElEQlRyYW5zYWN0aW9u
OworY2xhc3MgSURCVHJhbnNhY3Rpb25JbmZvOwogCiBjbGFzcyBJREJEYXRhYmFzZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURh
dGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfklEQkRh
dGFiYXNlKCkgeyB9CisgICAgc3RhdGljIFJlZjxJREJEYXRhYmFzZT4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0
IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlKCk7CiAKLSAgICAv
LyBJbXBsZW1lbnQgdGhlIElETAotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB1aW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdCA9IDA7
CisgICAgLy8gSURCRGF0YWJhc2UgSURMCisgICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25zdDsK
KyAgICB1aW50NjRfdCB2ZXJzaW9uKCkgY29uc3Q7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rp
b25hcnkmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25z
dCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKSA9IDA7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0
b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJik7CisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIHZvaWQgY2xvc2UoKTsK
KworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJn
ZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBJREJEYXRhYmFzZUV2ZW50VGFyZ2V0
SW50ZXJmYWNlVHlwZTsgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsgfQorICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7
IFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpyZWYoKTsgfQorICAgIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIGZpbmFsIHsgUmVmQ291bnRlZDxJREJEYXRhYmFzZT46OmRlcmVmKCk7IH0KIAogICAg
IHVzaW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRl
ZDxJREJEYXRhYmFzZT46OmRlcmVmOwogCi1wcm90ZWN0ZWQ6Ci0gICAgSURCRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5h
bWUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNp
b24oKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKworICAgIGNvbnN0IElE
QkRhdGFiYXNlSW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorICAgIHVpbnQ2
NF90IGRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGFi
YXNlQ29ubmVjdGlvbklkZW50aWZpZXI7IH0KKworICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gc3Rh
cnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiwgSURC
T3BlbkRCUmVxdWVzdCYpOworICAgIHZvaWQgZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbiYpOworCisgICAgdm9pZCB3aWxsQ29tbWl0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24m
KTsKKyAgICB2b2lkIGRpZENvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CisgICAg
dm9pZCB3aWxsQWJvcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOworICAgIHZvaWQgZGlk
QWJvcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOworCisgICAgdm9pZCBmaXJlVmVyc2lv
bkNoYW5nZUV2ZW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZp
ZXIsIHVpbnQ2NF90IHJlcXVlc3RlZFZlcnNpb24pOworCisgICAgSURCQ2xpZW50OjpJREJDb25u
ZWN0aW9uVG9TZXJ2ZXImIHNlcnZlckNvbm5lY3Rpb24oKSB7IHJldHVybiBtX3NlcnZlckNvbm5l
Y3Rpb24uZ2V0KCk7IH0KKworICAgIHZvaWQgZGlkQ3JlYXRlSW5kZXhJbmZvKGNvbnN0IElEQklu
ZGV4SW5mbyYpOworICAgIHZvaWQgZGlkRGVsZXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5m
byYpOworCisgICAgYm9vbCBpc0Nsb3NpbmdPckNsb3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xv
c2VQZW5kaW5nIHx8IG1fY2xvc2VkSW5TZXJ2ZXI7IH0KKworICAgIGJvb2wgZGlzcGF0Y2hFdmVu
dChFdmVudCYpIGZpbmFsOworCisgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBm
aW5hbDsKKworcHJpdmF0ZToKKyAgICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBjb25zdCBJREJSZXN1bHREYXRh
Jik7CisKKyAgICB2b2lkIGRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
biYpOworCisgICAgdm9pZCBtYXliZUNsb3NlSW5TZXJ2ZXIoKTsKKworICAgIFJlZjxJREJDbGll
bnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcj4gbV9zZXJ2ZXJDb25uZWN0aW9uOworICAgIElEQkRh
dGFiYXNlSW5mbyBtX2luZm87CisgICAgdWludDY0X3QgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVu
dGlmaWVyIHsgMCB9OworCisgICAgYm9vbCBtX2Nsb3NlUGVuZGluZyB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2Nsb3NlZEluU2VydmVyIHsgZmFsc2UgfTsKKworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbj4gbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb247CisgICAgSGFzaE1hcDxJREJSZXNvdXJj
ZUlkZW50aWZpZXIsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4+IG1fYWN0aXZlVHJhbnNhY3Rpb25z
OworICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+PiBtX2NvbW1pdHRpbmdUcmFuc2FjdGlvbnM7CisgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlk
ZW50aWZpZXIsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4+IG1fYWJvcnRpbmdUcmFuc2FjdGlvbnM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgotCi0jZW5kaWYgLy8gSURC
RGF0YWJhc2VfaAorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAppbmRleCA3YTlmOTk1
Li4zNjhlYzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5LmNwcApAQCAtMjgsMTAgKzI4LDE0MSBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKKyNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
SURCT3BlbkRCUmVxdWVzdC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1JREJGYWN0b3J5OjpJREJGYWN0b3J5KCkKK3N0YXRpYyBib29sIHNob3VsZFRo
cm93U2VjdXJpdHlFeGNlcHRpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKK3sK
KyAgICBBU1NFUlQoaXM8RG9jdW1lbnQ+KGNvbnRleHQpIHx8IGNvbnRleHQuaXNXb3JrZXJHbG9i
YWxTY29wZSgpKTsKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CisgICAgICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKKyAgICAgICAg
aWYgKCFkb2N1bWVudC5mcmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmICghZG9jdW1lbnQucGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgaWYgKCFjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNv
bnRleHQudG9wT3JpZ2luKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworUmVmPElEQkZhY3Rvcnk+IElEQkZhY3Rvcnk6OmNyZWF0ZShJREJDbGllbnQ6
OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJREJGYWN0b3J5KGNvbm5lY3Rpb24pKTsKK30KKworSURCRmFjdG9yeTo6SURCRmFj
dG9yeShJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbikKKyAgICA6
IG1fY29ubmVjdGlvblRvU2VydmVyKGNvbm5lY3Rpb24pCit7Cit9CisKK1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUmVmUHRyPElE
Qk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBM
T0coSW5kZXhlZERCLCAiSURCRmFjdG9yeTo6b3BlbiIpOworICAgIAorICAgIHJldHVybiBvcGVu
SW50ZXJuYWwoY29udGV4dCwgbmFtZSwgMCwgZWMpLnJlbGVhc2UoKTsKK30KKworUmVmUHRyPElE
Qk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkZhY3Rvcnk6Om9w
ZW4iKTsKKyAgICAKKyAgICBpZiAoIXZlcnNpb24pIHsKKyAgICAgICAgZWMgPSBUeXBlRXJyb3I7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBvcGVuSW50ZXJu
YWwoY29udGV4dCwgbmFtZSwgdmVyc2lvbiwgZWMpLnJlbGVhc2UoKTsKK30KKworUmVmUHRyPElE
Qk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2
ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAobmFtZS5pc051bGwoKSkgewor
ICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKHNob3VsZFRocm93U2VjdXJpdHlFeGNlcHRpb24oY29udGV4dCkpIHsKKyAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIEFTU0VSVChjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCkpOworICAgIEFTU0VSVChjb250ZXh0
LnRvcE9yaWdpbigpKTsKKyAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgZGF0YWJhc2VJZGVudGlm
aWVyKG5hbWUsICpjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCksICpjb250ZXh0LnRvcE9yaWdpbigp
KTsKKyAgICBpZiAoIWRhdGFiYXNlSWRlbnRpZmllci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMg
PSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8g
cmVxdWVzdCA9IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0ZU9wZW5SZXF1ZXN0KG1fY29ubmVjdGlv
blRvU2VydmVyLmdldCgpLCBjb250ZXh0LCBkYXRhYmFzZUlkZW50aWZpZXIsIHZlcnNpb24pOwor
ICAgIG1fY29ubmVjdGlvblRvU2VydmVyLT5vcGVuRGF0YWJhc2UocmVxdWVzdC5nZXQoKSk7CisK
KyAgICByZXR1cm4gYWRvcHRSZWYoJnJlcXVlc3QubGVha1JlZigpKTsKK30KKworUmVmUHRyPElE
Qk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlIC0gJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAg
ICAgZWMgPSBUeXBlRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAK
KyAgICBpZiAoc2hvdWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0KSkgeworICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgQVNTRVJUKGNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSk7CisgICAgQVNTRVJUKGNvbnRleHQu
dG9wT3JpZ2luKCkpOworICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBkYXRhYmFzZUlkZW50aWZp
ZXIobmFtZSwgKmNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKmNvbnRleHQudG9wT3JpZ2luKCkp
OworICAgIGlmICghZGF0YWJhc2VJZGVudGlmaWVyLmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9
IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBy
ZXF1ZXN0ID0gSURCT3BlbkRCUmVxdWVzdDo6Y3JlYXRlRGVsZXRlUmVxdWVzdChtX2Nvbm5lY3Rp
b25Ub1NlcnZlci5nZXQoKSwgY29udGV4dCwgZGF0YWJhc2VJZGVudGlmaWVyKTsKKyAgICBtX2Nv
bm5lY3Rpb25Ub1NlcnZlci0+ZGVsZXRlRGF0YWJhc2UocmVxdWVzdC5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoJnJlcXVlc3QubGVha1JlZigpKTsKK30KKworc2hvcnQgSURCRmFjdG9y
eTo6Y21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBmaXJzdFZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
c2Vjb25kVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgRE9NUmVx
dWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4gZmly
c3QgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGZpcnN0VmFsdWUpOworICAg
IFJlZlB0cjxJREJLZXk+IHNlY29uZCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0
ZSwgc2Vjb25kVmFsdWUpOworCisgICAgQVNTRVJUKGZpcnN0KTsKKyAgICBBU1NFUlQoc2Vjb25k
KTsKKworICAgIGlmICghZmlyc3QtPmlzVmFsaWQoKSB8fCAhc2Vjb25kLT5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjbXAnIG9u
ICdJREJGYWN0b3J5JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmly
c3QtPmNvbXBhcmUoc2Vjb25kLmdldCgpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rvcnku
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaAppbmRleCA0
NGE1Y2MyLi5mNWExZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeS5oCkBAIC0yMyw0OCArMjMsMzkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIElEQkZhY3RvcnlfaAotI2RlZmluZSBJREJGYWN0
b3J5X2gKLQotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNwcmFnbWEgb25jZQog
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgSURCS2V5OwotY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotCi1zdHJ1Y3QgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlOworI2luY2x1ZGUgIklE
QkNvbm5lY3Rpb25Ub1NlcnZlci5oIgorI2luY2x1ZGUgIklEQkZhY3RvcnkuaCIKKyNpbmNsdWRl
ICJJREJPcGVuREJSZXF1ZXN0LmgiCiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CituYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkZhY3RvcnkgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJGYWN0b3J5PiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCRmFjdG9yeSgpIHsgfQorICAg
IHN0YXRpYyBSZWY8SURCRmFjdG9yeT4gY3JlYXRlKElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRv
U2VydmVyJik7CiAKICAgICAvLyBGSVhNRTogZ2V0RGF0YWJhc2VOYW1lcyBpcyBubyBsb25nZXIg
YSB3ZWItZmFjaW5nIEFQSSwgYW5kIHNob3VsZCBiZSByZW1vdmVkIGZyb20gSURCRmFjdG9yeS4K
ICAgICAvLyBUaGUgV2ViIEluc3BlY3RvciBjdXJyZW50bHkgdXNlcyB0aGlzIHRvIGVudW1lcmF0
ZSB0aGUgbGlzdCBvZiBkYXRhYmFzZXMsIGJ1dCBpcyBtb3JlIGNvbXBsaWNhdGVkIGFzIGEgcmVz
dWx0LgogICAgIC8vIFdlIHNob3VsZCBwcm92aWRlIGEgc2ltcGxlciBBUEkgdG8gdGhlIFdlYiBJ
bnNwZWN0b3IgdGhlbiByZW1vdmUgZ2V0RGF0YWJhc2VOYW1lcy4KLSAgICB2aXJ0dWFsIFJlZlB0
cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBF
eGNlcHRpb25Db2RlJikgPSAwOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5h
bWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBS
ZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29k
ZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBkZWxldGVEYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJikgPSAwOworICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Y29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBkZWxldGVEYXRhYmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7
CiAKLSAgICB2aXJ0dWFsIHNob3J0IGNtcChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgc2Vjb25kLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7CisgICAgc2hvcnQg
Y21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgZmlyc3QsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmQsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgSURCRmFjdG9yeSgpOworcHJp
dmF0ZToKKyAgICBJREJGYWN0b3J5KElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJik7
CisgICAgCisgICAgUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW5JbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcg
dmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIAorICAgIFJlZjxJREJDbGllbnQ6OklEQkNv
bm5lY3Rpb25Ub1NlcnZlcj4gbV9jb25uZWN0aW9uVG9TZXJ2ZXI7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCRmFjdG9yeV9oCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleC5jcHAKaW5kZXggYTJiNGUyYi4uYzY0NzMxNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcApAQCAtMjgsMTAgKzI4LDMx
MyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJET01SZXF1
ZXN0U3RhdGUuaCIKKyNpbmNsdWRlICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZURhdGEuaCIKKyNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1JREJJbmRleDo6SURCSW5kZXgoKQorSURCSW5kZXg6OklEQkluZGV4KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgSURCT2JqZWN0U3Rv
cmUmIG9iamVjdFN0b3JlKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwg
bV9pbmZvKGluZm8pCisgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQoreworICAgIHN1
c3BlbmRJZk5lZWRlZCgpOworfQorCitJREJJbmRleDo6fklEQkluZGV4KCkKK3sKK30KKworY29u
c3QgY2hhciogSURCSW5kZXg6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAoreworICAgIHJl
dHVybiAiSURCSW5kZXgiOworfQorCitib29sIElEQkluZGV4OjpjYW5TdXNwZW5kRm9yRG9jdW1l
bnRTdXNwZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSURC
SW5kZXg6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX29iamVj
dFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuaXNGaW5pc2hlZCgpOworfQorCitjb25zdCBTdHJp
bmcmIElEQkluZGV4OjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmZvLm5hbWUoKTsK
K30KKworUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJJbmRleDo6b2JqZWN0U3RvcmUoKQorewor
ICAgIHJldHVybiAmbV9vYmplY3RTdG9yZTsKK30KKworUmVmUHRyPElEQkFueT4gSURCSW5kZXg6
OmtleVBhdGhBbnkoKSBjb25zdAoreworICAgIHJldHVybiBJREJBbnk6OmNyZWF0ZShtX2luZm8u
a2V5UGF0aCgpKTsKK30KKworY29uc3QgSURCS2V5UGF0aCYgSURCSW5kZXg6OmtleVBhdGgoKSBj
b25zdAoreworICAgIHJldHVybiBtX2luZm8ua2V5UGF0aCgpOworfQorCitib29sIElEQkluZGV4
Ojp1bmlxdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2luZm8udW5pcXVlKCk7Cit9CisKK2Jv
b2wgSURCSW5kZXg6Om11bHRpRW50cnkoKSBjb25zdAoreworICAgIHJldHVybiBtX2luZm8ubXVs
dGlFbnRyeSgpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdlLCBjb25z
dCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6Om9wZW5DdXJzb3IiKTsKKworICAgIGlm
IChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgeworICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicg
b24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVs
ZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCFtX29i
amVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgeworICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAg
ICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5D
dXJzb3InIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5p
c2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlv
bihkaXJlY3Rpb25TdHJpbmcsIGVjLmNvZGUpOworICAgIGlmIChlYy5jb2RlKSB7CisgICAgICAg
IGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29y
JyBvbiAnSURCSW5kZXgnOiBUaGUgZGlyZWN0aW9uIHByb3ZpZGVkICgnaW52YWxpZC1kaXJlY3Rp
b24nKSBpcyBub3Qgb25lIG9mICduZXh0JywgJ25leHR1bmlxdWUnLCAncHJldicsIG9yICdwcmV2
dW5pcXVlJy4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSURCS2V5
UmFuZ2VEYXRhIHJhbmdlRGF0YSA9IHJhbmdlOworICAgIGlmIChyYW5nZURhdGEubG93ZXJLZXku
aXNOdWxsKCkpCisgICAgICAgIHJhbmdlRGF0YS5sb3dlcktleSA9IElEQktleURhdGE6Om1pbmlt
dW0oKTsKKyAgICBpZiAocmFuZ2VEYXRhLnVwcGVyS2V5LmlzTnVsbCgpKQorICAgICAgICByYW5n
ZURhdGEudXBwZXJLZXkgPSBJREJLZXlEYXRhOjptYXhpbXVtKCk7CisKKyAgICBhdXRvIGluZm8g
PSBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcihtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0
aW9uKCksIG1fb2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZpZXIoKSwgbV9pbmZvLmlkZW50aWZp
ZXIoKSwgcmFuZ2VEYXRhLCBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5k
VmFsdWUpOworICAgIHJldHVybiBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkucmVx
dWVzdE9wZW5DdXJzb3IoY29udGV4dCwgKnRoaXMsIGluZm8pOworfQorCitSZWZQdHI8SURCUmVx
dWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWRE
QiwgIklEQkluZGV4OjpvcGVuQ3Vyc29yIik7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMuY29kZSk7CisgICAgaWYg
KGVjLmNvZGUpIHsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90
IGEgdmFsaWQga2V5LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBy
ZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uLCBlYyk7
Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBM
T0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmNvdW50Iik7CisKKyAgICByZXR1cm4gZG9Db3VudChj
b250ZXh0LCBJREJLZXlSYW5nZURhdGE6OmFsbEtleXMoKSwgZWMpOworfQorCitSZWZQdHI8SURC
UmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IElEQktleVJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmNvdW50Iik7CisKKyAgICByZXR1cm4gZG9Db3Vu
dChjb250ZXh0LCByYW5nZSA/IElEQktleVJhbmdlRGF0YShyYW5nZSkgOiBJREJLZXlSYW5nZURh
dGE6OmFsbEtleXMoKSwgZWMpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9H
KEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIpOworCisgICAgRE9NUmVxdWVzdFN0YXRlIHJl
cXVlc3RTdGF0ZSgmY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0
VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIGlmICghaWRiS2V5IHx8IGlk
YktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQkluZGV4JzogVGhlIHBh
cmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHJldHVybiBkb0NvdW50KGNvbnRleHQsIElEQktleVJhbmdlRGF0YShpZGJL
ZXkuZ2V0KCkpLCBlYyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6ZG9Db3Vu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IHJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIGlmIChtX2RlbGV0
ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6
IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghcmFuZ2UuaXNWYWxpZCgpKSB7
CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvJiB0cmFuc2FjdGlvbiA9IG1f
b2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLmlz
QWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9u
IGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVxdWVzdENvdW50KGNvbnRleHQsICp0aGlz
LCByYW5nZSk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVj
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOworCisg
ICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKSB7CisgICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuS2V5
Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMg
YmVlbiBkZWxldGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBp
ZiAoIW1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVy
cm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0
aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJREJDdXJzb3I6OnN0cmlu
Z1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMuY29kZSk7CisgICAgaWYgKGVjLmNvZGUp
IHsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J29wZW5LZXlDdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBkaXJlY3Rpb24gcHJvdmlkZWQgKCdp
bnZhbGlkLWRpcmVjdGlvbicpIGlzIG5vdCBvbmUgb2YgJ25leHQnLCAnbmV4dHVuaXF1ZScsICdw
cmV2Jywgb3IgJ3ByZXZ1bmlxdWUnLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBhdXRvIGluZm8gPSBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcihtX29iamVjdFN0
b3JlLm1vZGVyblRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZpZXIo
KSwgbV9pbmZvLmlkZW50aWZpZXIoKSwgcmFuZ2UsIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJz
b3JUeXBlOjpLZXlPbmx5KTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2Fj
dGlvbigpLnJlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsICp0aGlzLCBpbmZvKTsKK30KKworUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0
IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAg
IExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOworICAgIFJlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVj
LmNvZGUpOworICAgIGlmIChlYy5jb2RlKSB7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuS2V5Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBU
aGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLmdl
dCgpLCBkaXJlY3Rpb24sIGVjKTsKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpn
ZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdlLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJJ
bmRleDo6Z2V0Iik7CisKKyAgICByZXR1cm4gZG9HZXQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRh
KHJhbmdlKSwgZWMpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVk
REIsICJJREJJbmRleDo6Z2V0Iik7CisKKyAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRl
KCZjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURC
S2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBl
KCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBu
b3QgYSB2YWxpZCBrZXkuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHJldHVybiBkb0dldChjb250ZXh0LCBJREJLZXlSYW5nZURhdGEoaWRiS2V5LmdldCgpKSwgZWMp
OworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmRvR2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0
b3JlLmlzRGVsZXRlZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdnZXQnIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMg
b2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGlmIChyYW5nZS5pc051bGwpIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIGF1dG8mIHRyYW5zYWN0aW9uID0gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFu
c2FjdGlvbigpOworICAgIGlmICghdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkgeworICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsK
KyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dl
dCcgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVk
LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJhbnNh
Y3Rpb24ucmVxdWVzdEdldFZhbHVlKGNvbnRleHQsICp0aGlzLCByYW5nZSk7Cit9CisKK1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIElEQktleVJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldEtleSIpOworCisgICAgcmV0dXJu
IGRvR2V0S2V5KGNvbnRleHQsIElEQktleVJhbmdlRGF0YShyYW5nZSksIGVjKTsKK30KKworUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldEtl
eSIpOworCisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7CisgICAg
UmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRl
LCBrZXkpOworICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6Oklu
dmFsaWQpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJy
b3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5
LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gZG9HZXRL
ZXkoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVjKTsKK30KKworUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKQoreworICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0Rl
bGV0ZWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFs
aWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBpZiAocmFuZ2UuaXNOdWxsKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBhdXRvJiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rp
b24oKTsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRLZXkn
IG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4i
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHRyYW5zYWN0
aW9uLnJlcXVlc3RHZXRLZXkoY29udGV4dCwgKnRoaXMsIHJhbmdlKTsKK30KKwordm9pZCBJREJJ
bmRleDo6bWFya0FzRGVsZXRlZCgpCit7CisgICAgQVNTRVJUKCFtX2RlbGV0ZWQpOworICAgIG1f
ZGVsZXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgSURCSW5kZXg6OnJlZigpCit7CisgICAgbV9vYmpl
Y3RTdG9yZS5yZWYoKTsKK30KKwordm9pZCBJREJJbmRleDo6ZGVyZWYoKQogeworICAgIG1fb2Jq
ZWN0U3RvcmUuZGVyZWYoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKaW5kZXggODUxMGQ0Yy4uNDQ4ZDc4
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCkBAIC0y
Myw3MyArMjMsOTAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIElEQkluZGV4X2gKLSNkZWZpbmUgSURCSW5kZXhfaAorI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJJREJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1
ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklE
Qk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNjcmlw
dFdyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSAiSURCSW5kZXguaCIKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIklEQkN1cnNvci5oIgorI2luY2x1ZGUgIklEQklu
ZGV4SW5mby5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlIDxiaW5kaW5ncy9T
Y3JpcHRWYWx1ZS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQkFueTsKK2Ns
YXNzIElEQktleVJhbmdlOwogY2xhc3MgSURCT2JqZWN0U3RvcmU7CitzdHJ1Y3QgSURCS2V5UmFu
Z2VEYXRhOwogCi1jbGFzcyBJREJJbmRleCB7CitjbGFzcyBJREJJbmRleCA6IHB1YmxpYyBBY3Rp
dmVET01PYmplY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgfklEQkluZGV4KCkgeyB9CisgICAg
SURCSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQkluZGV4SW5mbyYsIElE
Qk9iamVjdFN0b3JlJik7CisKKyAgICB2aXJ0dWFsIH5JREJJbmRleCgpOwogCiAgICAgLy8gSW1w
bGVtZW50IHRoZSBJREwKLSAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoKSA9IDA7
Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgdW5pcXVlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBtdWx0aUVudHJ5
KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAw
OwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAw
OwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIGNvbnN0IFN0
cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmly
dHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUmVm
UHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gY291
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4g
b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAg
IHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIElEQktleVJhbmdlKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgPSAwOwotCi0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVl
c3Q+IGdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4g
Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNNb2Rlcm4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gV2UgdXNl
IG91ciBvd24gcmVmL2RlcmVmIGZ1bmN0aW9uIGJlY2F1c2UgTGVnYWN5IElEQiBhbmQgTW9kZXJu
IElEQiBoYXZlIHZlcnkgZGlmZmVyZW50Ci0gICAgLy8gbGlmZXRpbWUgbWFuYWdlbWVudCBvZiB0
aGVpciBpbmRleGVzLgotICAgIC8vIFRoaXMgd2lsbCBnbyBhd2F5IG9uY2UgTGVnYWN5IElEQiBp
cyBkcm9wcGVkLgotICAgIHZpcnR1YWwgdm9pZCByZWYoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRlcmVmKCkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCSW5kZXgoKTsKKyAgICBjb25zdCBT
dHJpbmcmIG5hbWUoKSBjb25zdDsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0
b3JlKCk7CisgICAgUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0OworICAgIGNvbnN0
IElEQktleVBhdGgmIGtleVBhdGgoKSBjb25zdDsKKyAgICBib29sIHVuaXF1ZSgpIGNvbnN0Owor
ICAgIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0OworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9w
ZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJ
REJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7IH0KKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5
UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3Io
Y29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleSwgSURCQ3Vy
c29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQorICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVu
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIGNvbnN0IFN0cmlu
ZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURC
UmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdl
KiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKworICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwg
c3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOyB9CisgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
SURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSB7IHJl
dHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlv
bk5leHQoKSwgZWMpOyB9CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgeyByZXR1cm4gb3BlbktleUN1
cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCS2V5UmFuZ2UqLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKworICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJh
bmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+
IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IGdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKworICAgIGNvbnN0IElEQkluZGV4SW5mbyYgaW5m
bygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorCisgICAgSURCT2JqZWN0U3RvcmUmIG1vZGVy
bk9iamVjdFN0b3JlKCkgeyByZXR1cm4gbV9vYmplY3RTdG9yZTsgfQorCisgICAgdm9pZCBtYXJr
QXNEZWxldGVkKCk7CisgICAgYm9vbCBpc0RlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0
ZWQ7IH0KKworICAgIHZvaWQgcmVmKCk7CisgICAgdm9pZCBkZXJlZigpOworCitwcml2YXRlOgor
ICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBkb0NvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBj
b25zdCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gZG9HZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiBkb0dldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisKKyAgICAvLyBBY3RpdmVE
T01PYmplY3QKKyAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Q7Cisg
ICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3Q7CisgICAgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKworICAgIElEQkluZGV4SW5mbyBtX2luZm87
CisKKyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07CisKKyAgICAvLyBJREJJbmRleCBvYmpl
Y3RzIGFyZSBhbHdheXMgb3duZWQgYnkgdGhlaXIgcmVmZXJlbmNpbmcgSURCT2JqZWN0U3RvcmUu
CisgICAgLy8gSW5kZXhlcyB3aWxsIG5ldmVyIG91dGxpdmUgT2JqZWN0U3RvcmVzIHNvIGl0cyBv
a2F5IHRvIGtlZXAgYSByYXcgQysrIHJlZmVyZW5jZSBoZXJlLgorICAgIElEQk9iamVjdFN0b3Jl
JiBtX29iamVjdFN0b3JlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYK
LQotI2VuZGlmIC8vIElEQkluZGV4X2gKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcAppbmRleCA0YTA2NDE1Li41YjAwMzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0yOCwxMCArMjgsNjMy
IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTVJlcXVl
c3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSURCRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklE
QkVycm9yLmgiCisjaW5jbHVkZSAiSURCSW5kZXguaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNp
bmNsdWRlICJJREJLZXlSYW5nZURhdGEuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJJbmRleGVkREIuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVk
ZSA8d3RmL0xvY2tlci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQk9iamVjdFN0b3Jl
OjpJREJPYmplY3RTdG9yZSgpCitSZWY8SURCT2JqZWN0U3RvcmU+IElEQk9iamVjdFN0b3JlOjpj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCT2JqZWN0U3Rv
cmVJbmZvJiBpbmZvLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCT2JqZWN0U3RvcmUoY29udGV4dCwgaW5mbywgdHJhbnNhY3Rpb24p
KTsKK30KKworSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywgSURCVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAg
ICwgbV9pbmZvKGluZm8pCisgICAgLCBtX29yaWdpbmFsSW5mbyhpbmZvKQorICAgICwgbV90cmFu
c2FjdGlvbih0cmFuc2FjdGlvbikKK3sKKyAgICBzdXNwZW5kSWZOZWVkZWQoKTsKK30KKworSURC
T2JqZWN0U3RvcmU6On5JREJPYmplY3RTdG9yZSgpCit7Cit9CisKK2NvbnN0IGNoYXIqIElEQk9i
amVjdFN0b3JlOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIklE
Qk9iamVjdFN0b3JlIjsKK30KKworYm9vbCBJREJPYmplY3RTdG9yZTo6Y2FuU3VzcGVuZEZvckRv
Y3VtZW50U3VzcGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IElEQk9iamVjdFN0b3JlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVy
biAhbV90cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpOworfQorCitjb25zdCBTdHJpbmcgSURCT2Jq
ZWN0U3RvcmU6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX2luZm8ubmFtZSgpOworfQor
CitSZWZQdHI8V2ViQ29yZTo6SURCQW55PiBJREJPYmplY3RTdG9yZTo6a2V5UGF0aEFueSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIElEQkFueTo6Y3JlYXRlKG1faW5mby5rZXlQYXRoKCkpOworfQor
Citjb25zdCBJREJLZXlQYXRoIElEQk9iamVjdFN0b3JlOjprZXlQYXRoKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pbmZvLmtleVBhdGgoKTsKK30KKworUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElE
Qk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoYXV0
byYgbmFtZSA6IG1faW5mby5pbmRleE5hbWVzKCkpCisgICAgICAgIGluZGV4TmFtZXMtPmFwcGVu
ZChuYW1lKTsKKyAgICBpbmRleE5hbWVzLT5zb3J0KCk7CisKKyAgICByZXR1cm4gaW5kZXhOYW1l
czsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJPYmplY3RTdG9yZTo6
dHJhbnNhY3Rpb24oKQoreworICAgIHJldHVybiAmbV90cmFuc2FjdGlvbi5nZXQoKTsKK30KKwor
Ym9vbCBJREJPYmplY3RTdG9yZTo6YXV0b0luY3JlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW5mby5hdXRvSW5jcmVtZW50KCk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vy
c29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsKK30K
KworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29y
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICByZXR1cm4gb3BlbkN1cnNvcihj
b250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsKK30KKwor
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgcmV0dXJuIG9w
ZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOwor
fQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdlLCBj
b25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IiKTsK
KworICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJPYmplY3RTdG9yZSc6
IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlz
IGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJREJDdXJzb3I6
OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMuY29kZSk7CisgICAgaWYgKGVj
LmNvZGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbmZvID0gSURCQ3Vy
c29ySW5mbzo6b2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi5nZXQoKSwgbV9pbmZvLmlk
ZW50aWZpZXIoKSwgcmFuZ2UsIGRpcmVjdGlvbik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVl
c3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCAqdGhpcywgaW5m
byk7CisgICAgcmV0dXJuIFdURk1vdmUocmVxdWVzdCk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBT
dHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwg
a2V5LCBlYy5jb2RlKTsKKyAgICBpZiAoZWMuY29kZSkgeworICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdl
LmdldCgpLCBkaXJlY3Rpb24sIGVjKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmdldCIpOworCisg
ICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURC
T2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2RlbGV0ZWQpIHsK
KyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J2dldCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxl
dGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBET01SZXF1ZXN0
U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkg
PSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAgaWYgKCFpZGJL
ZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgeworICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFu
c2FjdGlvbi0+cmVxdWVzdEdldFJlY29yZChjb250ZXh0LCAqdGhpcywgaWRiS2V5LmdldCgpKTsK
KyAgICByZXR1cm4gV1RGTW92ZShyZXF1ZXN0KTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0Iik7CisKKyAgICBpZiAo
IW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBJREJLZXlSYW5nZURhdGEga2V5UmFuZ2VEYXRh
KGtleVJhbmdlKTsKKyAgICBpZiAoIWtleVJhbmdlRGF0YS5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFu
c2FjdGlvbi0+cmVxdWVzdEdldFJlY29yZChjb250ZXh0LCAqdGhpcywga2V5UmFuZ2VEYXRhKTsK
KyAgICByZXR1cm4gV1RGTW92ZShyZXF1ZXN0KTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgcmV0dXJu
IHB1dE9yQWRkKHN0YXRlLCB2YWx1ZSwgbnVsbHB0ciwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRlLCBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSwgZWMpOwor
fQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChKU0M6
OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNWYWx1ZSBr
ZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgUmVmUHRyPElEQktleT4g
aWRiS2V5OworICAgIGlmICgha2V5LmlzVW5kZWZpbmVkKCkpCisgICAgICAgIGlkYktleSA9IHNj
cmlwdFZhbHVlVG9JREJLZXkoZXhlY1N0YXRlLCBrZXkpOworICAgIHJldHVybiBwdXRPckFkZChl
eGVjU3RhdGUsIHZhbHVlLCBpZGJLZXksIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVN
b2RlOjpOb092ZXJ3cml0ZSwgSW5saW5lS2V5Q2hlY2s6OlBlcmZvcm0sIGVjKTsKK30KKworUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWNTdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleTsK
KyAgICBpZiAoIWtleS5pc1VuZGVmaW5lZCgpKQorICAgICAgICBpZGJLZXkgPSBzY3JpcHRWYWx1
ZVRvSURCS2V5KGV4ZWNTdGF0ZSwga2V5KTsKKyAgICByZXR1cm4gcHV0T3JBZGQoZXhlY1N0YXRl
LCB2YWx1ZSwgaWRiS2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3Zl
cndyaXRlLCBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSwgZWMpOworfQorCitSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAg
ICByZXR1cm4gcHV0T3JBZGQoc3RhdGUsIHZhbHVlLCBudWxscHRyLCBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlLCBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSwg
ZWMpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dEZvckN1cnNv
clVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICByZXR1cm4g
cHV0T3JBZGQoc3RhdGUsIHZhbHVlLCBzY3JpcHRWYWx1ZVRvSURCS2V5KHN0YXRlLCBrZXkpLCBJ
bmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9yQ3Vyc29yLCBJ
bmxpbmVLZXlDaGVjazo6RG9Ob3RQZXJmb3JtLCBlYyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIFJlZlB0cjxJREJLZXk+IGtleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92
ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgSW5saW5lS2V5Q2hlY2sgaW5saW5lS2V5Q2hlY2ss
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
Qk9iamVjdFN0b3JlOjpwdXRPckFkZCIpOworCisgICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZl
cmFsIElEQk9iamVjdFN0b3JlIG1ldGhvZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRl
ZCBleGNlcHRpb25zIHNob3VsZCBmaXJlIGJlZm9yZQorICAgIC8vIHRoZSBleGNlcHRpb24gZm9y
IGFuIG9iamVjdCBzdG9yZSBiZWluZyBkZWxldGVkLgorICAgIC8vIEhvd2V2ZXIsIGEgaGFuZGZ1
bCBvZiBXM0MgSURCIHRlc3RzIGV4cGVjdCB0aGUgZGVsZXRlZCBleGNlcHRpb24gZXZlbiB0aG91
Z2ggdGhlIHRyYW5zYWN0aW9uIGluYWN0aXZlIGV4Y2VwdGlvbiBhbHNvIGFwcGxpZXMuCisgICAg
Ly8gQWRkaXRpb25hbGx5LCBDaHJvbWUgYW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUgdGVzdCwgYXMg
ZG9lcyBMZWdhY3kgSURCIGluIFdlYktpdC4KKyAgICAvLyBVbnRpbCB0aGlzIGlzIHNvcnRlZCBv
dXQsIHdlJ2xsIGFncmVlIHdpdGggdGhlIHRlc3QgYW5kIHRoZSBtYWpvcml0eSBzaGFyZSBicm93
c2Vycy4KKyAgICBpZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRo
ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVy
cm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUg
cmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUg
b3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlm
IChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBU
aGUgdHJhbnNhY3Rpb24gaXMgcmVhZC1vbmx5LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFs
dWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHZhbHVlLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgLy8g
Q2xlYXIgdGhlIERPTSBleGNlcHRpb24gZnJvbSB0aGUgc2VyaWFsaXplciBzbyB3ZSBjYW4gZ2l2
ZSBhIG1vcmUgdGFyZ2V0ZWQgZXhjZXB0aW9uLgorICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlv
bigpOworCisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUNsb25l
RXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9y
ZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEFuIG9iamVjdCBjb3VsZCBub3QgYmUgY2xv
bmVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoc2VyaWFs
aXplZFZhbHVlLT5oYXNCbG9iVVJMcygpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9G
aWxlL0ZpbGVMaXN0IHN1cHBvcnQKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhQ2xvbmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogQmxvYlVSTHMgYXJl
IG5vdCB5ZXQgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhl
IHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGJvb2wgdXNlc0lubGluZUtleXMgPSAhbV9pbmZvLmtleVBhdGgoKS5p
c051bGwoKTsKKyAgICBib29sIHVzZXNLZXlHZW5lcmF0b3IgPSBhdXRvSW5jcmVtZW50KCk7Cisg
ICAgaWYgKHVzZXNJbmxpbmVLZXlzICYmIGlubGluZUtleUNoZWNrID09IElubGluZUtleUNoZWNr
OjpQZXJmb3JtKSB7CisgICAgICAgIGlmIChrZXkpIHsKKyAgICAgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9y
ZTogVGhlIG9iamVjdCBzdG9yZSB1c2VzIGluLWxpbmUga2V5cyBhbmQgdGhlIGtleSBwYXJhbWV0
ZXIgd2FzIHByb3ZpZGVkLiIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IH0KKworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gbWF5YmVDcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHN0YXRlLCB2YWx1ZSwgbV9pbmZvLmtleVBhdGgo
KSk7CisgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwor
ICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJl
Y29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogRXZhbHVhdGluZyB0aGUgb2JqZWN0IHN0b3JlJ3Mg
a2V5IHBhdGggeWllbGRlZCBhIHZhbHVlIHRoYXQgaXMgbm90IGEgdmFsaWQga2V5LiIpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWtleVBh
dGhLZXkpIHsKKyAgICAgICAgICAgIGlmICh1c2VzS2V5R2VuZXJhdG9yKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoc3RhdGUsIHZhbHVlLCBt
X2luZm8ua2V5UGF0aCgpKSkgeworICAgICAgICAgICAgICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAg
ICAgICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVj
b3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBFdmFsdWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUncyBr
ZXkgcGF0aCBkaWQgbm90IHlpZWxkIGEgdmFsdWUuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5UGF0
aEtleSkgeworICAgICAgICAgICAgQVNTRVJUKCFrZXkpOworICAgICAgICAgICAga2V5ID0ga2V5
UGF0aEtleTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXVzZXNLZXlHZW5lcmF0b3IgJiYg
IWtleSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJv
cjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJl
Y29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIG9iamVjdCBzdG9yZSB1c2VzIG91dC1vZi1s
aW5lIGtleXMgYW5kIGhhcyBubyBrZXkgZ2VuZXJhdG9yIGFuZCB0aGUga2V5IHBhcmFtZXRlciB3
YXMgbm90IHByb3ZpZGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBhdXRvIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3Rh
dGUpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0UHV0
T3JBZGQoKmNvbnRleHQsICp0aGlzLCBrZXkuZ2V0KCksICpzZXJpYWxpemVkVmFsdWUsIG92ZXJ3
cml0ZU1vZGUpOworICAgIHJldHVybiBhZG9wdFJlZihyZXF1ZXN0LmxlYWtSZWYoKSk7Cit9CisK
K1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdl
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIHJldHVybiBkb0RlbGV0ZShj
b250ZXh0LCBrZXlSYW5nZSwgZWMpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmRvRGVsZXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJh
bmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uIik7CisKKyAgICAvLyBU
aGUgSURCIHNwZWMgZm9yIHNldmVyYWwgSURCT2JqZWN0U3RvcmUgbWV0aG9kcyBzdGF0ZXMgdGhh
dCB0cmFuc2FjdGlvbiByZWxhdGVkIGV4Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVmb3JlCisgICAg
Ly8gdGhlIGV4Y2VwdGlvbiBmb3IgYW4gb2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0ZWQuCisgICAg
Ly8gSG93ZXZlciwgYSBoYW5kZnVsIG9mIFczQyBJREIgdGVzdHMgZXhwZWN0IHRoZSBkZWxldGVk
IGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUgZXhjZXB0aW9u
IGFsc28gYXBwbGllcy4KKyAgICAvLyBBZGRpdGlvbmFsbHksIENocm9tZSBhbmQgRWRnZSBhZ3Jl
ZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2VzIExlZ2FjeSBJREIgaW4gV2ViS2l0LgorICAgIC8vIFVu
dGlsIHRoaXMgaXMgc29ydGVkIG91dCwgd2UnbGwgYWdyZWUgd2l0aCB0aGUgdGVzdCBhbmQgdGhl
IG1ham9yaXR5IHNoYXJlIGJyb3dzZXJzLgorICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScg
b24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rp
b24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRo
ZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkg
eworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7
CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdk
ZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyByZWFkLW9ubHku
Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIElEQktleVJhbmdlRGF0
YSBrZXlSYW5nZURhdGEoa2V5UmFuZ2UpOworICAgIGlmICgha2V5UmFuZ2VEYXRhLmlzVmFsaWQo
KSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsK
KyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Rl
bGV0ZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBr
ZXkgcmFuZ2UuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFuc2FjdGlvbi0+cmVxdWVzdERlbGV0ZVJlY29yZChj
b250ZXh0LCAqdGhpcywga2V5UmFuZ2VEYXRhKTsKKyAgICByZXR1cm4gV1RGTW92ZShyZXF1ZXN0
KTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxl
dGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQorewor
ICAgIHJldHVybiBtb2Rlcm5EZWxldGUoY29udGV4dCwga2V5LmpzVmFsdWUoKSwgZWMpOworfQor
CitSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQoreworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNv
bnRleHQpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXko
JnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9
PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgcGFyYW1ldGVy
IGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgcmV0dXJuIGRvRGVsZXRlKGNvbnRleHQsICZJREJLZXlSYW5nZTo6Y3JlYXRlKGlkYktl
eS5nZXQoKSkuZ2V0KCksIGVjKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJPYmpl
Y3RTdG9yZTo6Y2xlYXIiKTsKKworICAgIC8vIFRoZSBJREIgc3BlYyBmb3Igc2V2ZXJhbCBJREJP
YmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRyYW5zYWN0aW9uIHJlbGF0ZWQgZXhjZXB0
aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKKyAgICAvLyB0aGUgZXhjZXB0aW9uIGZvciBhbiBvYmpl
Y3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4KKyAgICAvLyBIb3dldmVyLCBhIGhhbmRmdWwgb2YgVzND
IElEQiB0ZXN0cyBleHBlY3QgdGhlIGRlbGV0ZWQgZXhjZXB0aW9uIGV2ZW4gdGhvdWdoIHRoZSB0
cmFuc2FjdGlvbiBpbmFjdGl2ZSBleGNlcHRpb24gYWxzbyBhcHBsaWVzLgorICAgIC8vIEFkZGl0
aW9uYWxseSwgQ2hyb21lIGFuZCBFZGdlIGFncmVlIHdpdGggdGhlIHRlc3QsIGFzIGRvZXMgTGVn
YWN5IElEQiBpbiBXZWJLaXQuCisgICAgLy8gVW50aWwgdGhpcyBpcyBzb3J0ZWQgb3V0LCB3ZSds
bCBhZ3JlZSB3aXRoIHRoZSB0ZXN0IGFuZCB0aGUgbWFqb3JpdHkgc2hhcmUgYnJvd3NlcnMuCisg
ICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY2xlYXInIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmpl
Y3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwor
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY2xl
YXInIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBm
aW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1f
dHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjbGVhcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhl
IHRyYW5zYWN0aW9uIGlzIHJlYWQtb25seS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1
ZXN0Q2xlYXJPYmplY3RTdG9yZShjb250ZXh0LCAqdGhpcyk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KHJlcXVlc3QubGVha1JlZigpKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4PiBJREJP
YmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wg
bXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4ICVzIiwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKKworICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0
U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9u
Q2hhbmdlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZh
bGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJh
c2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0Fj
dGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNh
Y3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBpZiAoIWtleVBhdGguaXNWYWxpZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVy
YWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzog
VGhlIGtleVBhdGggYXJndW1lbnQgY29udGFpbnMgYW4gaW52YWxpZCBrZXkgcGF0aC4iKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsK
KyAgICAgICAgZWMuY29kZSA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgaWYgKG1faW5mby5oYXNJbmRleChuYW1lKSkgeworICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvcjsKKyAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBBbiBpbmRleCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5
IGV4aXN0cy4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGtl
eVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OkFycmF5ICYmIG11bHRpRW50
cnkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNj
ZXNzRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdjcmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJn
dW1lbnQgd2FzIGFuIGFycmF5IGFuZCB0aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMgdHJ1ZS4iKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gSW5zdGFsbCB0aGUgbmV3
IEluZGV4IGludG8gdGhlIE9iamVjdFN0b3JlJ3MgaW5mby4KKyAgICBJREJJbmRleEluZm8gaW5m
byA9IG1faW5mby5jcmVhdGVOZXdJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50
cnkpOworICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuZGlkQ3JlYXRlSW5kZXhJbmZvKGlu
Zm8pOworCisgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgSURCT2JqZWN0U3RvcmUgZnJvbSB0aGUg
dHJhbnNhY3Rpb24sIHdoaWNoIGFsc28gc2NoZWR1bGVzIHRoZSBvcGVyYXRpb24gc2VydmVyIHNp
ZGUuCisgICAgYXV0byBpbmRleCA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUluZGV4KCp0aGlzLCBp
bmZvKTsKKyAgICBSZWZQdHI8SURCSW5kZXg+IHJlZkluZGV4ID0gaW5kZXguZ2V0KCk7CisKKyAg
ICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CisgICAgbV9yZWZl
cmVuY2VkSW5kZXhlcy5zZXQobmFtZSwgV1RGTW92ZShpbmRleCkpOworCisgICAgcmV0dXJuIFdU
Rk1vdmUocmVmSW5kZXgpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVj
dFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmluZGV4
Iik7CisKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBpZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdpbmRleCcgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNGaW5pc2hlZE9y
RmluaXNoaW5nKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rp
b24gaXMgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKKyAgICBhdXRvIGl0
ZXJhdG9yID0gbV9yZWZlcmVuY2VkSW5kZXhlcy5maW5kKGluZGV4TmFtZSk7CisgICAgaWYgKGl0
ZXJhdG9yICE9IG1fcmVmZXJlbmNlZEluZGV4ZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWUuZ2V0KCk7CisKKyAgICBhdXRvKiBpbmZvID0gbV9pbmZvLmluZm9Gb3JFeGlz
dGluZ0luZGV4KGluZGV4TmFtZSk7CisgICAgaWYgKCFpbmZvKSB7CisgICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0
U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4IHdhcyBub3QgZm91bmQuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gaW5kZXggPSBzdGQ6Om1ha2VfdW5pcXVl
PElEQkluZGV4Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaW5mbywgKnRoaXMpOworICAg
IFJlZlB0cjxJREJJbmRleD4gcmVmSW5kZXggPSBpbmRleC5nZXQoKTsKKyAgICBtX3JlZmVyZW5j
ZWRJbmRleGVzLnNldChpbmRleE5hbWUsIFdURk1vdmUoaW5kZXgpKTsKKworICAgIHJldHVybiBy
ZWZJbmRleDsKK30KKwordm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRl
eGVkREIsICJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXggJXMiLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlSW5kZXgnIG9uICdJREJPYmplY3RT
dG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkp
IHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJhc2UgaXMgbm90
IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJv
cjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J2RlbGV0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5h
Y3RpdmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IW1faW5mby5oYXNJbmRleChuYW1lKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVy
YWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzog
VGhlIHNwZWNpZmllZCBpbmRleCB3YXMgbm90IGZvdW5kLiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byogaW5mbyA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdJbmRleChuYW1l
KTsKKyAgICBBU1NFUlQoaW5mbyk7CisgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5kaWRE
ZWxldGVJbmRleEluZm8oKmluZm8pOworCisgICAgbV9pbmZvLmRlbGV0ZUluZGV4KG5hbWUpOwor
CisgICAgeworICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9j
ayk7CisgICAgICAgIGlmIChhdXRvIGluZGV4ID0gbV9yZWZlcmVuY2VkSW5kZXhlcy50YWtlKG5h
bWUpKSB7CisgICAgICAgICAgICBpbmRleC0+bWFya0FzRGVsZXRlZCgpOworICAgICAgICAgICAg
bV9kZWxldGVkSW5kZXhlcy5hZGQoV1RGTW92ZShpbmRleCkpOworICAgICAgICB9CisKKyAgICB9
CisKKyAgICBtX3RyYW5zYWN0aW9uLT5kZWxldGVJbmRleChtX2luZm8uaWRlbnRpZmllcigpLCBu
YW1lKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpj
b3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Y291bnQi
KTsKKworICAgIHJldHVybiBkb0NvdW50KGNvbnRleHQsIElEQktleVJhbmdlRGF0YTo6YWxsS2V5
cygpLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7CisKKyAgICBET01SZXF1
ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJL
ZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAgaWYgKCFp
ZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgeworICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCT2Jq
ZWN0U3RvcmUnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGRvQ291bnQoY29udGV4dCwgSURC
S2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVjKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
Cit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjb3VudCIpOworCisgICAg
cmV0dXJuIGRvQ291bnQoY29udGV4dCwgcmFuZ2UgPyBJREJLZXlSYW5nZURhdGEocmFuZ2UpIDog
SURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkb0NvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYgZWMpCit7CisgICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZlcmFsIElEQk9iamVj
dFN0b3JlIG1ldGhvZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBleGNlcHRpb25z
IHNob3VsZCBmaXJlIGJlZm9yZQorICAgIC8vIHRoZSBleGNlcHRpb24gZm9yIGFuIG9iamVjdCBz
dG9yZSBiZWluZyBkZWxldGVkLgorICAgIC8vIEhvd2V2ZXIsIGEgaGFuZGZ1bCBvZiBXM0MgSURC
IHRlc3RzIGV4cGVjdCB0aGUgZGVsZXRlZCBleGNlcHRpb24gZXZlbiB0aG91Z2ggdGhlIHRyYW5z
YWN0aW9uIGluYWN0aXZlIGV4Y2VwdGlvbiBhbHNvIGFwcGxpZXMuCisgICAgLy8gQWRkaXRpb25h
bGx5LCBDaHJvbWUgYW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUgdGVzdCwgYXMgZG9lcyBMZWdhY3kg
SURCIGluIFdlYktpdC4KKyAgICAvLyBVbnRpbCB0aGlzIGlzIHNvcnRlZCBvdXQsIHdlJ2xsIGFn
cmVlIHdpdGggdGhlIHRlc3QgYW5kIHRoZSBtYWpvcml0eSBzaGFyZSBicm93c2Vycy4KKyAgICBp
ZiAobV9kZWxldGVkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBz
dG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcg
b24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlz
aGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIXJhbmdl
LmlzVmFsaWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRh
dGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIG1f
dHJhbnNhY3Rpb24tPnJlcXVlc3RDb3VudChjb250ZXh0LCAqdGhpcywgcmFuZ2UpOworfQorCit2
b2lkIElEQk9iamVjdFN0b3JlOjptYXJrQXNEZWxldGVkKCkKK3sKKyAgICBtX2RlbGV0ZWQgPSB0
cnVlOworfQorCit2b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0luZm9Gb3JWZXJzaW9uQ2hh
bmdlQWJvcnQoKQoreworICAgIG1faW5mbyA9IG1fb3JpZ2luYWxJbmZvOworfQorCit2b2lkIElE
Qk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImIHZp
c2l0b3IpIGNvbnN0CiB7CisgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRl
eExvY2spOworICAgIGZvciAoYXV0byYgaW5kZXggOiBtX3JlZmVyZW5jZWRJbmRleGVzLnZhbHVl
cygpKQorICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCAwM2RlZDQyLi4xYjdjZDgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTIz
LDgzICsyMywxMDYgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIElEQk9iamVjdFN0b3JlX2gKLSNkZWZpbmUgSURCT2JqZWN0U3RvcmVfaAotCi0j
aW5jbHVkZSAiRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNs
dWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNw
cmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLW5hbWVzcGFjZSBE
ZXByZWNhdGVkIHsKLWNsYXNzIFNjcmlwdFZhbHVlOwotfQotCi1uYW1lc3BhY2UgSlNDIHsKLWNs
YXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEpTVmFsdWU7Ci19CisjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiSURCSW5kZXguaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5o
IgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW5mby5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiBjbGFzcyBJ
REJBbnk7CiBjbGFzcyBJREJJbmRleDsKLWNsYXNzIElEQktleVBhdGg7CitjbGFzcyBJREJLZXk7
CiBjbGFzcyBJREJLZXlSYW5nZTsKIGNsYXNzIElEQlJlcXVlc3Q7CiBjbGFzcyBJREJUcmFuc2Fj
dGlvbjsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitzdHJ1Y3QgSURCS2V5UmFuZ2VE
YXRhOwogCi1jbGFzcyBJREJPYmplY3RTdG9yZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQk9iamVj
dFN0b3JlPiB7CitjbGFzcyBJREJPYmplY3RTdG9yZSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQk9i
amVjdFN0b3JlPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCB+SURCT2JqZWN0U3RvcmUoKSB7IH0KKyAgICBzdGF0aWMgUmVmPElEQk9iamVjdFN0b3JlPiBj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYs
IElEQlRyYW5zYWN0aW9uJik7CisKKyAgICB+SURCT2JqZWN0U3RvcmUoKTsKIAogICAgIC8vIElt
cGxlbWVudCB0aGUgSURCT2JqZWN0U3RvcmUgSURMCi0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcg
bmFtZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJBbnk+IGtleVBhdGhBbnko
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcygpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24o
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0
cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwg
Y29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsK
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJp
bmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotCi0gICAgdmly
dHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsK
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0g
MDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJ
REJSZXF1ZXN0PiBjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgPSAwOwotCi0gICAgdmlydHVhbCBSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUlu
ZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJJbmRleD4gaW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgPSAwOwotCi0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gY291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsK
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAg
dmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc01vZGVybigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBJREJPYmplY3RTdG9yZSgpOworICAgIGNvbnN0
IFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNv
bnN0OworICAgIGNvbnN0IElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0OworICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3Q7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uPiB0cmFuc2FjdGlvbigpOworICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0OworCisg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7
CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBjb25zdCBTdHJp
bmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5
UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiBjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
Jik7CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8
SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworCisgICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHB1dEZvckN1cnNvclVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7
CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1vZGVybkRlbGV0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisKKyAg
ICB2b2lkIG1hcmtBc0RlbGV0ZWQoKTsKKyAgICBib29sIGlzRGVsZXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVsZXRlZDsgfQorCisgICAgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisKKyAgICAvLyBGSVhNRTogQWZ0ZXIgcmVtb3Zpbmcg
TGVnYWN5SURCIGFuZCBmb2xkaW5nIGFic3RyYWN0L2ltcGxlbWVudGF0aW9uIGNsYXNzZXMgdG9n
ZXRoZXIsCisgICAgLy8gdGhpcyB3aWxsIG5vIGxvbmdlciBiZSBuZWNlc3NhcnkuCisgICAgSURC
VHJhbnNhY3Rpb24mIG1vZGVyblRyYW5zYWN0aW9uKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5n
ZXQoKTsgfQorCisgICAgdm9pZCByb2xsYmFja0luZm9Gb3JWZXJzaW9uQ2hhbmdlQWJvcnQoKTsK
KworICAgIHZvaWQgdmlzaXRSZWZlcmVuY2VkSW5kZXhlcyhKU0M6OlNsb3RWaXNpdG9yJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgSURCT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYsIElEQlRyYW5zYWN0aW9uJik7CisKKyAgICBl
bnVtIGNsYXNzIElubGluZUtleUNoZWNrIHsKKyAgICAgICAgUGVyZm9ybSwKKyAgICAgICAgRG9O
b3RQZXJmb3JtLAorICAgIH07CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcHV0T3JBZGQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFJlZlB0cjxJREJLZXk+LCBJbmRleGVkREI6Ok9i
amVjdFN0b3JlT3ZlcndyaXRlTW9kZSwgSW5saW5lS2V5Q2hlY2ssIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0NvdW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZG9EZWxldGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7
CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3Q7CisgICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9u
KCkgY29uc3Q7CisgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKworICAgIElE
Qk9iamVjdFN0b3JlSW5mbyBtX2luZm87CisgICAgSURCT2JqZWN0U3RvcmVJbmZvIG1fb3JpZ2lu
YWxJbmZvOworICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKworICAgIGJv
b2wgbV9kZWxldGVkIHsgZmFsc2UgfTsKKworICAgIG11dGFibGUgTG9jayBtX3JlZmVyZW5jZWRJ
bmRleExvY2s7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4+
IG1fcmVmZXJlbmNlZEluZGV4ZXM7CisgICAgSGFzaFNldDxzdGQ6OnVuaXF1ZV9wdHI8SURCSW5k
ZXg+PiBtX2RlbGV0ZWRJbmRleGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYKLQotI2VuZGlmIC8vIElEQk9iamVjdFN0b3JlX2gKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAKaW5kZXggODJjZTE3OS4uNjc0YzQxOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5j
cHAKQEAgLTI4LDExICsyOCwxODMgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
CisjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJREJFcnJvci5oIgorI2luY2x1
ZGUgIklEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJJREJSZXN1bHREYXRh
LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotSURCT3BlbkRCUmVxdWVzdDo6SURCT3BlbkRCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KQotICAgIDogSURCUmVxdWVzdChjb250ZXh0KQorUmVmPElEQk9wZW5EQlJl
cXVlc3Q+IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0ZURlbGV0ZVJlcXVlc3QoSURCQ2xpZW50OjpJ
REJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgZGF0YWJhc2VJZGVudGlmaWVy
KQoreworICAgIEFTU0VSVChkYXRhYmFzZUlkZW50aWZpZXIuaXNWYWxpZCgpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJREJPcGVuREJSZXF1ZXN0KGNvbm5lY3Rpb24sIGNvbnRleHQsIGRh
dGFiYXNlSWRlbnRpZmllciwgMCwgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZTo6RGVsZXRlKSk7Cit9
CisKK1JlZjxJREJPcGVuREJSZXF1ZXN0PiBJREJPcGVuREJSZXF1ZXN0OjpjcmVhdGVPcGVuUmVx
dWVzdChJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBk
YXRhYmFzZUlkZW50aWZpZXIsIHVpbnQ2NF90IHZlcnNpb24pCit7CisgICAgQVNTRVJUKGRhdGFi
YXNlSWRlbnRpZmllci5pc1ZhbGlkKCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQk9w
ZW5EQlJlcXVlc3QoY29ubmVjdGlvbiwgY29udGV4dCwgZGF0YWJhc2VJZGVudGlmaWVyLCB2ZXJz
aW9uLCBJbmRleGVkREI6OlJlcXVlc3RUeXBlOjpPcGVuKSk7Cit9CisgICAgCitJREJPcGVuREJS
ZXF1ZXN0OjpJREJPcGVuREJSZXF1ZXN0KElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVy
JiBjb25uZWN0aW9uLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImIGRhdGFiYXNlSWRlbnRpZmllciwgdWludDY0X3QgdmVyc2lvbiwg
SW5kZXhlZERCOjpSZXF1ZXN0VHlwZSByZXF1ZXN0VHlwZSkKKyAgICA6IElEQlJlcXVlc3QoY29u
bmVjdGlvbiwgY29udGV4dCkKKyAgICAsIG1fZGF0YWJhc2VJZGVudGlmaWVyKGRhdGFiYXNlSWRl
bnRpZmllcikKKyAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQoreworICAgIG1fcmVxdWVzdFR5cGUg
PSByZXF1ZXN0VHlwZTsKK30KKworSURCT3BlbkRCUmVxdWVzdDo6fklEQk9wZW5EQlJlcXVlc3Qo
KQoreworfQorCit2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uRXJyb3IoY29uc3QgSURCUmVzdWx0
RGF0YSYgZGF0YSkKK3sKKyAgICBtX2RvbUVycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShkYXRhLmVy
cm9yKCkubmFtZSgpKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCUmVxdWVzdENvbXBsZXRpb25FdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlLCAqdGhpcykpOwor
fQorCit2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbkRpZEZp
bmlzaCgpCit7CisgICAgLy8gMy4zLjcgInZlcnNpb25jaGFuZ2UiIHRyYW5zYWN0aW9uIHN0ZXBz
CisgICAgLy8gV2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQsIGFmdGVyIGZpcmluZyBj
b21wbGV0ZS9hYm9ydCBvbiB0aGUgdHJhbnNhY3Rpb24sIGltbWVkaWF0ZWx5IHNldCByZXF1ZXN0
J3MgdHJhbnNhY3Rpb24gcHJvcGVydHkgdG8gbnVsbC4KKyAgICBtX3Nob3VsZEV4cG9zZVRyYW5z
YWN0aW9uVG9ET00gPSBmYWxzZTsKK30KKwordm9pZCBJREJPcGVuREJSZXF1ZXN0OjpmaXJlU3Vj
Y2Vzc0FmdGVyVmVyc2lvbkNoYW5nZUNvbW1pdCgpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
Qk9wZW5EQlJlcXVlc3Q6OmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tbWl0KCkiKTsK
KworICAgIEFTU0VSVChoYXNQZW5kaW5nQWN0aXZpdHkoKSk7CisgICAgQVNTRVJUKG1fcmVzdWx0
KTsKKyAgICBBU1NFUlQobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFi
YXNlKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5hZGRSZXF1ZXN0KCp0aGlzKTsKKworICAgIGF1dG8g
ZXZlbnQgPSBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1
Y2Nlc3NFdmVudCwgZmFsc2UsIGZhbHNlLCAqdGhpcyk7CisgICAgbV9vcGVuRGF0YWJhc2VTdWNj
ZXNzRXZlbnQgPSAmZXZlbnQuZ2V0KCk7CisKKyAgICBlbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVu
dCkpOworfQorCit2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVyVmVyc2lvbkNo
YW5nZUNvbXBsZXRpb24oKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0
OjpmaXJlRXJyb3JBZnRlclZlcnNpb25DaGFuZ2VDb21wbGV0aW9uKCkiKTsKKworICAgIEFTU0VS
VChoYXNQZW5kaW5nQWN0aXZpdHkoKSk7CisKKyAgICBJREJFcnJvciBpZGJFcnJvcihJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcik7CisgICAgbV9kb21FcnJvciA9IERPTUVycm9yOjpj
cmVhdGUoaWRiRXJyb3IubmFtZSgpKTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlVW5k
ZWZpbmVkKCk7CisKKyAgICBtX3RyYW5zYWN0aW9uLT5hZGRSZXF1ZXN0KCp0aGlzKTsKKyAgICBl
bnF1ZXVlRXZlbnQoSURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlLCAqdGhpcykpOworfQorCitib29sIElEQk9wZW5EQlJl
cXVlc3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQoreworICAgIGJvb2wgcmVzdWx0ID0g
SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChldmVudCk7CisKKyAgICBpZiAobV90cmFuc2FjdGlv
biAmJiBtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSAmJiAoZXZlbnQudHlwZSgpID09
IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCku
c3VjY2Vzc0V2ZW50KSkKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJD
b25uZWN0aW9uKCkuZGlkRmluaXNoSGFuZGxpbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oKm1f
dHJhbnNhY3Rpb24pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJREJPcGVuREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKCkiKTsKKworICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWY8SURCRGF0YWJhc2U+IGRhdGFiYXNlID0gSURCRGF0YWJhc2U6OmNyZWF0ZSgqc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBjb25uZWN0aW9uKCksIHJlc3VsdERhdGEpOworICAgIG1fcmVzdWx0
ID0gSURCQW55OjpjcmVhdGUoV1RGTW92ZShkYXRhYmFzZSkpOworICAgIG1fcmVhZHlTdGF0ZSA9
IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lOworCisgICAgZW5xdWV1ZUV2ZW50KElEQlJlcXVl
c3RDb21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxz
ZSwgZmFsc2UsICp0aGlzKSk7Cit9CisKK3ZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRl
TmVlZGVkKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgUmVmPElEQkRh
dGFiYXNlPiBkYXRhYmFzZSA9IElEQkRhdGFiYXNlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgY29ubmVjdGlvbigpLCByZXN1bHREYXRhKTsKKyAgICBSZWY8SURCVHJhbnNhY3Rp
b24+IHRyYW5zYWN0aW9uID0gZGF0YWJhc2UtPnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KHJlc3VsdERhdGEudHJhbnNhY3Rpb25JbmZvKCksICp0aGlzKTsKKworICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi0+aW5mbygpLm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVy
c2lvbkNoYW5nZSk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5vcmlnaW5hbERhdGFiYXNlSW5m
bygpKTsKKworICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSB0cmFuc2FjdGlvbi0+b3JpZ2luYWxE
YXRhYmFzZUluZm8oKS0+dmVyc2lvbigpOworICAgIHVpbnQ2NF90IG5ld1ZlcnNpb24gPSB0cmFu
c2FjdGlvbi0+aW5mbygpLm5ld1ZlcnNpb24oKTsKKworICAgIExPRyhJbmRleGVkREIsICJJREJP
cGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoKSAtIGN1cnJlbnQgdmVyc2lvbiBpcyAlIiBQ
Ukl1NjQgIiwgbmV3IGlzICUiIFBSSXU2NCwgb2xkVmVyc2lvbiwgbmV3VmVyc2lvbik7CisKKyAg
ICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUoZGF0YWJhc2UpKTsKKyAgICBtX3Jl
YWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKKyAgICBtX3RyYW5zYWN0aW9u
ID0gYWRvcHRSZWYoJnRyYW5zYWN0aW9uLmxlYWtSZWYoKSk7CisgICAgbV90cmFuc2FjdGlvbi0+
YWRkUmVxdWVzdCgqdGhpcyk7CisKKyAgICBlbnF1ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2
ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnROYW1lcygpLnVwZ3JhZGVu
ZWVkZWRFdmVudCkpOworfQorCit2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uRGVsZXRlRGF0YWJh
c2VTdWNjZXNzKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgdWludDY0
X3Qgb2xkVmVyc2lvbiA9IHJlc3VsdERhdGEuZGF0YWJhc2VJbmZvKCkudmVyc2lvbigpOworCisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uRGVsZXRlRGF0YWJhc2VTdWNj
ZXNzKCkgLSBjdXJyZW50IHZlcnNpb24gaXMgJSIgUFJJdTY0LCBvbGRWZXJzaW9uKTsKKworICAg
IG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lOworICAgIG1fcmVzdWx0
ID0gSURCQW55OjpjcmVhdGVVbmRlZmluZWQoKTsKKworICAgIGVucXVldWVFdmVudChJREJWZXJz
aW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCAwLCBldmVudE5hbWVzKCkuc3VjY2Vz
c0V2ZW50KSk7Cit9CisKK3ZvaWQgSURCT3BlbkRCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZChj
b25zdCBJREJSZXN1bHREYXRhJiBkYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJPcGVu
REJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkIik7CisKKyAgICAvLyBJZiBhbiBPcGVuIHJlcXVl
c3Qgd2FzIGNvbXBsZXRlZCBhZnRlciB0aGUgcGFnZSBoYXMgbmF2aWdhdGVkLCBsZWF2aW5nIHRo
aXMgcmVxdWVzdAorICAgIC8vIHdpdGggYSBzdG9wcGVkIHNjcmlwdCBleGVjdXRpb24gY29udGV4
dCwgd2UgbmVlZCB0byBtZXNzYWdlIGJhY2sgdG8gdGhlIHNlcnZlciBzbyBpdAorICAgIC8vIGRv
ZXNuJ3QgaGFuZyB3YWl0aW5nIG9uIGEgZGF0YWJhc2UgY29ubmVjdGlvbiBvciB0cmFuc2FjdGlv
biB0aGF0IHdpbGwgbmV2ZXIgZXhpc3QuCisgICAgaWYgKG1fY29udGV4dFN0b3BwZWQpIHsKKyAg
ICAgICAgc3dpdGNoIChkYXRhLnR5cGUoKSkgeworICAgICAgICBjYXNlIElEQlJlc3VsdFR5cGU6
Ok9wZW5EYXRhYmFzZVN1Y2Nlc3M6CisgICAgICAgICAgICBjb25uZWN0aW9uKCkuYWJvcnRPcGVu
QW5kVXBncmFkZU5lZWRlZChkYXRhLmRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIoKSwgSURC
UmVzb3VyY2VJZGVudGlmaWVyOjplbXB0eVZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZDoKKyAg
ICAgICAgICAgIGNvbm5lY3Rpb24oKS5hYm9ydE9wZW5BbmRVcGdyYWRlTmVlZGVkKGRhdGEuZGF0
YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcigpLCBkYXRhLnRyYW5zYWN0aW9uSW5mbygpLmlkZW50
aWZpZXIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3
aXRjaCAoZGF0YS50eXBlKCkpIHsKKyAgICBjYXNlIElEQlJlc3VsdFR5cGU6OkVycm9yOgorICAg
ICAgICBvbkVycm9yKGRhdGEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElEQlJlc3VsdFR5
cGU6Ok9wZW5EYXRhYmFzZVN1Y2Nlc3M6CisgICAgICAgIG9uU3VjY2VzcyhkYXRhKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJREJSZXN1bHRUeXBlOjpPcGVuRGF0YWJhc2VVcGdyYWRlTmVl
ZGVkOgorICAgICAgICBvblVwZ3JhZGVOZWVkZWQoZGF0YSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSURCUmVzdWx0VHlwZTo6RGVsZXRlRGF0YWJhc2VTdWNjZXNzOgorICAgICAgICBvbkRl
bGV0ZURhdGFiYXNlU3VjY2VzcyhkYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQg
SURCT3BlbkRCUmVxdWVzdDo6cmVxdWVzdEJsb2NrZWQodWludDY0X3Qgb2xkVmVyc2lvbiwgdWlu
dDY0X3QgbmV3VmVyc2lvbikKIHsKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVz
dDo6cmVxdWVzdEJsb2NrZWQiKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2
ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnROYW1lcygpLmJsb2NrZWRF
dmVudCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmgKaW5kZXggMDBhZGRjMC4u
MWRjZDdkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T3BlbkRCUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuaApAQCAtMjMsMjYgKzIzLDU4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJREJPcGVuREJSZXF1ZXN0X2gKLSNkZWZp
bmUgSURCT3BlbkRCUmVxdWVzdF9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFz
ZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSW5kZXhl
ZERCLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRXZlbnQ7CitjbGFzcyBJREJE
YXRhYmFzZUlkZW50aWZpZXI7CitjbGFzcyBJREJSZXN1bHREYXRhOworY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKKworbmFtZXNwYWNlIElEQkNsaWVudCB7CitjbGFzcyBJREJDb25uZWN0
aW9uVG9TZXJ2ZXI7Cit9CisKIGNsYXNzIElEQk9wZW5EQlJlcXVlc3QgOiBwdWJsaWMgSURCUmVx
dWVzdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCT3BlbkRCUmVxdWVzdCgpIHsgfQorICAg
IHN0YXRpYyBSZWY8SURCT3BlbkRCUmVxdWVzdD4gY3JlYXRlRGVsZXRlUmVxdWVzdChJREJDbGll
bnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKKyAgICBzdGF0aWMgUmVmPElEQk9wZW5EQlJlcXVl
c3Q+IGNyZWF0ZU9wZW5SZXF1ZXN0KElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIHVp
bnQ2NF90IHZlcnNpb24pOworCisgICAgfklEQk9wZW5EQlJlcXVlc3QoKSBmaW5hbDsKKyAgICAK
KyAgICBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGRhdGFiYXNlSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VJZGVudGlmaWVyOyB9CisgICAgdWludDY0X3QgdmVyc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorCisgICAgdm9pZCByZXF1ZXN0Q29tcGxl
dGVkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIHJlcXVlc3RCbG9ja2VkKHVpbnQ2
NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pOworCisgICAgdm9pZCB2ZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb25EaWRGaW5pc2goKTsKKyAgICB2b2lkIGZpcmVTdWNjZXNzQWZ0ZXJW
ZXJzaW9uQ2hhbmdlQ29tbWl0KCk7CisgICAgdm9pZCBmaXJlRXJyb3JBZnRlclZlcnNpb25DaGFu
Z2VDb21wbGV0aW9uKCk7CiAKLXByb3RlY3RlZDoKLSAgICBJREJPcGVuREJSZXF1ZXN0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5h
bDsKKworcHJpdmF0ZToKKyAgICBJREJPcGVuREJSZXF1ZXN0KElEQkNsaWVudDo6SURCQ29ubmVj
dGlvblRvU2VydmVyJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6UmVxdWVzdFR5cGUpOwor
CisgICAgdm9pZCBvbkVycm9yKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKyAgICB2b2lkIG9uU3Vj
Y2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJik7CisgICAgdm9pZCBvblVwZ3JhZGVOZWVkZWQoY29u
c3QgSURCUmVzdWx0RGF0YSYpOworICAgIHZvaWQgb25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MoY29u
c3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgYm9vbCBpc09wZW5EQlJlcXVlc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBJREJEYXRhYmFzZUlkZW50aWZpZXIgbV9k
YXRhYmFzZUlkZW50aWZpZXI7CisgICAgdWludDY0X3QgbV92ZXJzaW9uIHsgMCB9OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNlbmRpZiAvLyBJREJPcGVuREJSZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggMDEyZjM2OS4uZmU2OTUwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAK
QEAgLTI4LDExICsyOCw0MDggQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisj
aW5jbHVkZSAiRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKKyNpbmNs
dWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSURCRGF0
YWJhc2UuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklE
QkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQktleURhdGEuaCIKKyNpbmNsdWRlICJJ
REJSZXN1bHREYXRhLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKK1Jl
ZjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCUmVxdWVzdChjb250ZXh0
LCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pKTsKK30KKworUmVmPElEQlJlcXVlc3Q+IElEQlJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJDdXJzb3Im
IGN1cnNvciwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IElEQlJlcXVlc3QoY29udGV4dCwgY3Vyc29yLCB0cmFuc2FjdGlvbikpOworfQor
CitSZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlQ291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCUmVxdWVzdChjb250ZXh0LCBp
bmRleCwgdHJhbnNhY3Rpb24pKTsKK30KKworUmVmPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNy
ZWF0ZUdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgs
IEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHJlcXVlc3RlZFJlY29yZFR5cGUsIElEQlRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1
ZXN0KGNvbnRleHQsIGluZGV4LCByZXF1ZXN0ZWRSZWNvcmRUeXBlLCB0cmFuc2FjdGlvbikpOwor
fQorCitJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2Vy
dmVyJiBjb25uZWN0aW9uLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDog
QWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24p
CisgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcihjb25uZWN0aW9uKQoreworICAgIHN1c3BlbmRJ
Zk5lZWRlZCgpOworfQorCitJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uKQogICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQorICAgICwg
bV90cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24pCisgICAgLCBtX2Nvbm5lY3Rpb24odHJhbnNhY3Rp
b24uc2VydmVyQ29ubmVjdGlvbigpKQorICAgICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNh
Y3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQorICAgICwgbV9zb3VyY2UoSURCQW55OjpjcmVhdGUo
b2JqZWN0U3RvcmUpKQoreworICAgIHN1c3BlbmRJZk5lZWRlZCgpOworfQorCitJREJSZXF1ZXN0
OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkN1cnNvciYg
Y3Vyc29yLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCisgICAgOiBBY3RpdmVET01PYmpl
Y3QoJmNvbnRleHQpCisgICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKKyAgICAsIG1f
Y29ubmVjdGlvbih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3Jlc291
cmNlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCisgICAgLCBtX3Nv
dXJjZShjdXJzb3Iuc291cmNlKCkpCisgICAgLCBtX3BlbmRpbmdDdXJzb3IoJmN1cnNvcikKK3sK
KyAgICBzdXNwZW5kSWZOZWVkZWQoKTsKKworICAgIGN1cnNvci5zZXRSZXF1ZXN0KCp0aGlzKTsK
K30KKworSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBJREJJbmRleCYgaW5kZXgsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKKyAgICA6
IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKKyAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0
aW9uKQorICAgICwgbV9jb25uZWN0aW9uKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkK
KyAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24o
KSkKKyAgICAsIG1fc291cmNlKElEQkFueTo6Y3JlYXRlKGluZGV4KSkKK3sKKyAgICBzdXNwZW5k
SWZOZWVkZWQoKTsKK30KKworSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRU
eXBlIHJlcXVlc3RlZFJlY29yZFR5cGUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKKyAg
ICA6IElEQlJlcXVlc3QoY29udGV4dCwgaW5kZXgsIHRyYW5zYWN0aW9uKQoreworICAgIG1fcmVx
dWVzdGVkSW5kZXhSZWNvcmRUeXBlID0gcmVxdWVzdGVkUmVjb3JkVHlwZTsKK30KKworSURCUmVx
dWVzdDo6fklEQlJlcXVlc3QoKQoreworICAgIGlmIChtX3Jlc3VsdCkgeworICAgICAgICBhdXRv
IHR5cGUgPSBtX3Jlc3VsdC0+dHlwZSgpOworICAgICAgICBpZiAodHlwZSA9PSBJREJBbnk6OlR5
cGU6OklEQkN1cnNvciB8fCB0eXBlID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVl
KQorICAgICAgICAgICAgbV9yZXN1bHQtPmlkYkN1cnNvcigpLT5jbGVhclJlcXVlc3QoKTsKKyAg
ICB9Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJBbnk+IElEQlJlcXVlc3Q6OnJlc3VsdChFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSBjb25zdAoreworICAgIGlmIChtX3JlYWR5U3RhdGUg
PT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpCisgICAgICAgIHJldHVybiBtX3Jlc3VsdDsK
KworICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7
CisgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHJlYWQgdGhlICdyZXN1
bHQnIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVlc3QnOiBUaGUgcmVxdWVzdCBoYXMgbm90IGZpbmlz
aGVkLiIpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1bnNpZ25lZCBzaG9ydCBJREJSZXF1
ZXN0OjplcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0CiB7CisgICAgcmV0dXJuIDA7Cit9
CisKK1JlZlB0cjxET01FcnJvcj4gSURCUmVxdWVzdDo6ZXJyb3IoRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykgY29uc3QKK3sKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RS
ZWFkeVN0YXRlOjpEb25lKQorICAgICAgICByZXR1cm4gbV9kb21FcnJvcjsKKworICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHJlYWQgdGhlICdlcnJvcicgcHJvcGVydHkg
ZnJvbSAnSURCUmVxdWVzdCc6IFRoZSByZXF1ZXN0IGhhcyBub3QgZmluaXNoZWQuIik7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJBbnk+IElEQlJlcXVlc3Q6
OnNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc291cmNlOworfQorCit2b2lkIElEQlJl
cXVlc3Q6OnNldFNvdXJjZShJREJDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBBU1NFUlQoIW1fY3Vy
c29yUmVxdWVzdE5vdGlmaWVyKTsKKworICAgIG1fc291cmNlID0gSURCQW55OjpjcmVhdGUoY3Vy
c29yKTsKKyAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8U2Nv
cGVHdWFyZD4oW3RoaXNdKCkgeworICAgICAgICBBU1NFUlQobV9zb3VyY2UtPnR5cGUoKSA9PSBJ
REJBbnk6OlR5cGU6OklEQkN1cnNvciB8fCBtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6VHlw
ZTo6SURCQ3Vyc29yV2l0aFZhbHVlKTsKKyAgICAgICAgbV9zb3VyY2UtPmlkYkN1cnNvcigpLT5k
ZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOworICAgIH0pOworfQorCit2b2lkIElE
QlJlcXVlc3Q6OnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCit7CisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKKyAgICBBU1NFUlQodHJh
bnNhY3Rpb24uaXNWZXJzaW9uQ2hhbmdlKCkpOworICAgIEFTU0VSVCghdHJhbnNhY3Rpb24uaXNG
aW5pc2hlZE9yRmluaXNoaW5nKCkpOworCisgICAgbV90cmFuc2FjdGlvbiA9ICZ0cmFuc2FjdGlv
bjsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJSZXF1ZXN0Ojp0cmFu
c2FjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hvdWxkRXhwb3NlVHJhbnNhY3Rpb25U
b0RPTSA/IG1fdHJhbnNhY3Rpb24gOiBudWxscHRyOworfQorCitjb25zdCBTdHJpbmcmIElEQlJl
cXVlc3Q6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHN0YXRpYyBXVEY6Ok5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gcGVuZGluZ1N0cmluZygicGVuZGluZyIpOworICAgIHN0YXRpYyBXVEY6Ok5l
dmVyRGVzdHJveWVkPFN0cmluZz4gZG9uZVN0cmluZygiZG9uZSIpOworCisgICAgc3dpdGNoICht
X3JlYWR5U3RhdGUpIHsKKyAgICBjYXNlIElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nOgor
ICAgICAgICByZXR1cm4gcGVuZGluZ1N0cmluZzsKKyAgICBjYXNlIElEQlJlcXVlc3RSZWFkeVN0
YXRlOjpEb25lOgorICAgICAgICByZXR1cm4gZG9uZVN0cmluZzsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordWludDY0X3Qg
SURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtX3NvdXJjZS0+dHlw
ZSgpID09IElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3RvcmUpIHsKKyAgICAgICAgYXV0byogb2Jq
ZWN0U3RvcmUgPSBtX3NvdXJjZS0+aWRiT2JqZWN0U3RvcmUoKS5nZXQoKTsKKyAgICAgICAgaWYg
KCFvYmplY3RTdG9yZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gb2Jq
ZWN0U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCk7CisgICAgfQorCisgICAgaWYgKG1fc291cmNl
LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJJbmRleCkgeworICAgICAgICBhdXRvKiBpbmRl
eCA9IG1fc291cmNlLT5pZGJJbmRleCgpLmdldCgpOworICAgICAgICBpZiAoIWluZGV4KQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBpbmRleC0+aW5mbygpLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit1aW50NjRfdCBJ
REJSZXF1ZXN0Ojpzb3VyY2VJbmRleElkZW50aWZpZXIoKSBjb25zdAoreworICAgIGlmICghbV9z
b3VyY2UpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpICE9IElE
QkFueTo6VHlwZTo6SURCSW5kZXgpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbV9zb3Vy
Y2UtPmlkYkluZGV4KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fc291cmNl
LT5pZGJJbmRleCgpLT5pbmZvKCkuaWRlbnRpZmllcigpOworfQorCitJbmRleGVkREI6OkluZGV4
UmVjb3JkVHlwZSBJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUoKSBjb25zdAor
eworICAgIEFTU0VSVChtX3NvdXJjZSk7CisgICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0g
SURCQW55OjpUeXBlOjpJREJJbmRleCk7CisKKyAgICByZXR1cm4gbV9yZXF1ZXN0ZWRJbmRleFJl
Y29yZFR5cGU7Cit9CisKK0V2ZW50VGFyZ2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0
SW50ZXJmYWNlVHlwZTsKK30KKworY29uc3QgY2hhciogSURCUmVxdWVzdDo6YWN0aXZlRE9NT2Jq
ZWN0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJJREJSZXF1ZXN0IjsKK30KKworYm9vbCBJ
REJSZXF1ZXN0OjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHk7Cit9CisKK3ZvaWQg
SURCUmVxdWVzdDo6c3RvcCgpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKKyAg
ICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVl
RXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQoreworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIHx8IG1fY29udGV4dFN0b3BwZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGV2ZW50
LT5zZXRUYXJnZXQodGhpcyk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1
ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKK30KKworYm9vbCBJREJSZXF1ZXN0
OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURC
UmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCAtICVzICglcCkiLCBldmVudC50eXBlKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgdGhpcyk7CisKKyAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkp
OworICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7CisKKyAgICBpZiAoZXZlbnQudHlwZSgp
ICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpCisgICAgICAgIG1fcmVhZHlTdGF0ZSA9IElE
QlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lOworCisgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdl
dD4+IHRhcmdldHM7CisgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7CisKKyAgICBpZiAoJmV2ZW50
ID09IG1fb3BlbkRhdGFiYXNlU3VjY2Vzc0V2ZW50KQorICAgICAgICBtX29wZW5EYXRhYmFzZVN1
Y2Nlc3NFdmVudCA9IG51bGxwdHI7CisgICAgZWxzZSBpZiAobV90cmFuc2FjdGlvbiAmJiAhbV90
cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpKSB7CisgICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJh
bnNhY3Rpb24pOworICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uLT5kYigpKTsK
KyAgICB9CisKKyAgICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IGZhbHNlOworCisgICAgbV9jdXJz
b3JSZXF1ZXN0Tm90aWZpZXIgPSBudWxscHRyOworCisgICAgYm9vbCBkb250UHJldmVudERlZmF1
bHQ7CisgICAgeworICAgICAgICBUcmFuc2FjdGlvbkFjdGl2YXRvciBhY3RpdmF0b3IobV90cmFu
c2FjdGlvbi5nZXQoKSk7CisgICAgICAgIGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOworICAgIH0KKworICAgIC8vIElEQkV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goKSBtaWdodCBoYXZlIHNldCB0aGUgcGVuZGluZyBhY3Rp
dml0eSBmbGFnIGJhY2sgdG8gdHJ1ZSwgc3VnZ2VzdGluZyB0aGUgcmVxdWVzdCB3aWxsIGJlIHJl
dXNlZC4KKyAgICAvLyBXZSBtaWdodCBhbHNvIHJlLXVzZSB0aGUgcmVxdWVzdCBpZiB0aGlzIGV2
ZW50IHdhcyB0aGUgdXBncmFkZW5lZWRlZCBldmVudCBmb3IgYW4gSURCT3BlbkRCUmVxdWVzdC4K
KyAgICBpZiAoIW1faGFzUGVuZGluZ0FjdGl2aXR5KQorICAgICAgICBtX2hhc1BlbmRpbmdBY3Rp
dml0eSA9IGlzT3BlbkRCUmVxdWVzdCgpICYmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygp
LnVwZ3JhZGVuZWVkZWRFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsb2Nr
ZWRFdmVudCk7CisKKyAgICAvLyBUaGUgcmVxdWVzdCBzaG91bGQgb25seSByZW1haW4gaW4gdGhl
IHRyYW5zYWN0aW9uJ3MgcmVxdWVzdCBsaXN0IGlmIGl0IHJlcHJlc2VudHMgYSBwZW5kaW5nIGN1
cnNvciBvcGVyYXRpb24sIG9yIHRoaXMgaXMgYW4gb3BlbiByZXF1ZXN0IHRoYXQgd2FzIGJsb2Nr
ZWQuCisgICAgaWYgKG1fdHJhbnNhY3Rpb24gJiYgIW1fcGVuZGluZ0N1cnNvciAmJiBldmVudC50
eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKKyAgICAgICAgbV90cmFuc2FjdGlv
bi0+cmVtb3ZlUmVxdWVzdCgqdGhpcyk7CisKKyAgICBpZiAoZG9udFByZXZlbnREZWZhdWx0ICYm
IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBtX3RyYW5zYWN0aW9u
ICYmICFtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkgeworICAgICAgICBB
U1NFUlQobV9kb21FcnJvcik7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0RHVlVG9GYWls
ZWRSZXF1ZXN0KCptX2RvbUVycm9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gZG9udFByZXZlbnRE
ZWZhdWx0OworfQorCit2b2lkIElEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhh
bmRsZXIoKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2Vw
dGlvbkluRXZlbnRIYW5kbGVyIik7CisKKyAgICBpZiAobV90cmFuc2FjdGlvbiAmJiBtX2lkYkVy
cm9yLmNvZGUoKSAhPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikKKyAgICAgICAg
bV90cmFuc2FjdGlvbi0+YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpB
Ym9ydEVycm9yKSkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJREJL
ZXlEYXRhKiBrZXlEYXRhKQoreworICAgIGlmICgha2V5RGF0YSkgeworICAgICAgICBtX3Jlc3Vs
dCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSB2YWx1ZSA9IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgKmtleURhdGEpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoV1RG
TW92ZSh2YWx1ZSkpOworfQorCit2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRfdCBu
dW1iZXIpCit7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgbV9y
ZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPnZtKCksIEpTQzo6SlNWYWx1ZShudW1iZXIpKSk7Cit9CisKK3ZvaWQg
SURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImIHZhbHVlRGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6
c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUiKTsKKworICAgIGF1dG8gY29udGV4dCA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsK
KworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1
ZURhdGEoKmNvbnRleHQsIHZhbHVlRGF0YSk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0
ZShXVEZNb3ZlKHZhbHVlKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRl
ZmluZWQoKQoreworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGVVbmRlZmluZWQoKTsKK30K
KworSURCQ3Vyc29yKiBJREJSZXF1ZXN0OjpyZXN1bHRDdXJzb3IoKQoreworICAgIGlmICghbV9y
ZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChtX3Jlc3VsdC0+dHlwZSgp
ID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yIHx8IG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55
OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpCisgICAgICAgIHJldHVybiBtX3Jlc3VsdC0+aWRi
Q3Vyc29yKCkuZ2V0KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgSURCUmVxdWVz
dDo6d2lsbEl0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgQVNTRVJUKG1f
cmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSk7CisgICAgQVNTRVJUKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOworICAg
IEFTU0VSVCghbV9wZW5kaW5nQ3Vyc29yKTsKKyAgICBBU1NFUlQoJmN1cnNvciA9PSByZXN1bHRD
dXJzb3IoKSk7CisgICAgQVNTRVJUKCFtX2N1cnNvclJlcXVlc3ROb3RpZmllcik7CisKKyAgICBt
X3BlbmRpbmdDdXJzb3IgPSAmY3Vyc29yOworICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gdHJ1
ZTsKKyAgICBtX3Jlc3VsdCA9IG51bGxwdHI7CisgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVz
dFJlYWR5U3RhdGU6OlBlbmRpbmc7CisgICAgbV9kb21FcnJvciA9IG51bGxwdHI7CisgICAgbV9p
ZGJFcnJvciA9IHsgfTsKKworICAgIG1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyID0gc3RkOjptYWtl
X3VuaXF1ZTxTY29wZUd1YXJkPihbdGhpc10oKSB7CisgICAgICAgIG1fcGVuZGluZ0N1cnNvci0+
ZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQoKTsKKyAgICB9KTsKK30KKwordm9pZCBJ
REJSZXF1ZXN0OjpkaWRPcGVuT3JJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpCit7CisgICAgQVNTRVJUKG1fcGVuZGluZ0N1cnNvcik7CisgICAgbV9yZXN1bHQg
PSBudWxscHRyOworCisgICAgaWYgKHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6
Okl0ZXJhdGVDdXJzb3JTdWNjZXNzIHx8IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5
cGU6Ok9wZW5DdXJzb3JTdWNjZXNzKSB7CisgICAgICAgIG1fcGVuZGluZ0N1cnNvci0+c2V0R2V0
UmVzdWx0KCp0aGlzLCByZXN1bHREYXRhLmdldFJlc3VsdCgpKTsKKyAgICAgICAgaWYgKHJlc3Vs
dERhdGEuZ2V0UmVzdWx0KCkuaXNEZWZpbmVkKCkpCisgICAgICAgICAgICBtX3Jlc3VsdCA9IElE
QkFueTo6Y3JlYXRlKCptX3BlbmRpbmdDdXJzb3IpOworICAgIH0KKworICAgIG1fY3Vyc29yUmVx
dWVzdE5vdGlmaWVyID0gbnVsbHB0cjsKKyAgICBtX3BlbmRpbmdDdXJzb3IgPSBudWxscHRyOwor
CisgICAgcmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKK30KKwordm9pZCBJREJSZXF1ZXN0
OjpyZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7Cisg
ICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7CisKKyAgICBtX2lk
YkVycm9yID0gcmVzdWx0RGF0YS5lcnJvcigpOworICAgIGlmICghbV9pZGJFcnJvci5pc051bGwo
KSkKKyAgICAgICAgb25FcnJvcigpOworICAgIGVsc2UKKyAgICAgICAgb25TdWNjZXNzKCk7Cit9
CisKK3ZvaWQgSURCUmVxdWVzdDo6b25FcnJvcigpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QlJlcXVlc3Q6Om9uRXJyb3IiKTsKKworICAgIEFTU0VSVCghbV9pZGJFcnJvci5pc051bGwoKSk7
CisgICAgbV9kb21FcnJvciA9IERPTUVycm9yOjpjcmVhdGUobV9pZGJFcnJvci5uYW1lKCkpOwor
ICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0
cnVlLCB0cnVlKSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKCkKK3sKKyAgICBM
T0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6b25TdWNjZXNzIik7CisKKyAgICBlbnF1ZXVlRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2Up
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IDVhZmJmNjEuLmUxOTAyM2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAgLTIzLDU0ICsy
MywxNDQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIElEQlJlcXVlc3RfaAotI2RlZmluZSBJREJSZXF1ZXN0X2gKKyNwcmFnbWEgb25jZQogCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01FcnJvci5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNp
bmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJF
dmVudFRhcmdldC5oIgogI2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkN1cnNvci5o
IgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgIklEQlJlc291cmNlSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiU2NvcGVH
dWFyZC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSURCVHJhbnNhY3Rpb247CitjbGFzcyBFdmVudDsKK2NsYXNzIElEQkFueTsK
K2NsYXNzIElEQkN1cnNvcjsKK2NsYXNzIElEQkluZGV4OworY2xhc3MgSURCS2V5RGF0YTsKK2Ns
YXNzIElEQk9iamVjdFN0b3JlOworY2xhc3MgSURCUmVzdWx0RGF0YTsKK2NsYXNzIFRocmVhZFNh
ZmVEYXRhQnVmZmVyOwogCi1zdHJ1Y3QgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlOworbmFtZXNw
YWNlIElEQkNsaWVudCB7CitjbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2ZXI7Cit9CiAKLXR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CituYW1lc3BhY2UgSW5kZXhlZERCIHsKK2VudW0gY2xhc3Mg
SW5kZXhSZWNvcmRUeXBlOworfQogCiAvLyBEZWZpbmVkIGluIHRoZSBJREwKIGVudW0gY2xhc3Mg
SURCUmVxdWVzdFJlYWR5U3RhdGUgewogICAgIFBlbmRpbmcgPSAxLAogICAgIERvbmUgPSAyLAot
ICAgIERlcHJlY2F0ZWRFYXJseURlYXRoID0gMywgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkxMTcgLSBSZW1vdmUgdGhpcyB3aGVuIHJlbW92aW5n
IExlZ2FjeUlEQgogfTsKIAotY2xhc3MgSURCUmVxdWVzdCA6IHB1YmxpYyBFdmVudFRhcmdldFdp
dGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIElEQlJlcXVlc3Qg
OiBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCwgcHVibGljIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD4gewogcHVibGljOgotICAgIHZpcnR1YWwg
fklEQlJlcXVlc3QoKSB7IH0KKyAgICBzdGF0aWMgUmVmPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBJREJUcmFuc2FjdGlvbiYpOwor
ICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBJREJDdXJzb3ImLCBJREJUcmFuc2FjdGlvbiYpOworICAgIHN0YXRpYyBSZWY8SURCUmVxdWVz
dD4gY3JlYXRlQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgSURCVHJh
bnNhY3Rpb24mKTsKKyAgICBzdGF0aWMgUmVmPElEQlJlcXVlc3Q+IGNyZWF0ZUdldChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSwg
SURCVHJhbnNhY3Rpb24mKTsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElEQkFueT4gcmVzdWx0KEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVk
IHNob3J0IGVycm9yQ29kZShFeGNlcHRpb25Db2RlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
UmVmUHRyPERPTUVycm9yPiBlcnJvcihFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCQW55PiBzb3VyY2UoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgPSAwOwor
ICAgIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVzb3VyY2VJZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV9yZXNvdXJjZUlkZW50aWZpZXI7IH0KIAotICAgIHZpcnR1YWwgY29uc3Qg
U3RyaW5nJiByZWFkeVN0YXRlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgfklEQlJlcXVlc3Qo
KTsKKworICAgIFJlZlB0cjxJREJBbnk+IHJlc3VsdChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OworICAgIFJlZlB0cjxET01FcnJvcj4gZXJyb3IoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JikgY29uc3Q7CisgICAgUmVmUHRyPElEQkFueT4gc291cmNlKCkgY29uc3Q7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYg
cmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgdWludDY0X3Qgc291cmNlT2JqZWN0U3RvcmVJZGVu
dGlmaWVyKCkgY29uc3Q7CisgICAgdWludDY0X3Qgc291cmNlSW5kZXhJZGVudGlmaWVyKCkgY29u
c3Q7CisgICAgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVxdWVzdGVkSW5kZXhSZWNvcmRU
eXBlKCkgY29uc3Q7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CisKKyAgICB1
c2luZyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxJ
REJSZXF1ZXN0Pjo6ZGVyZWY7CisKKyAgICB2b2lkIGVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYp
OworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlOworCisgICAgSURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5l
Y3Rpb247IH0KKworICAgIHZvaWQgcmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1bHREYXRh
Jik7CisKKyAgICB2b2lkIHNldFJlc3VsdChjb25zdCBJREJLZXlEYXRhKik7CisgICAgdm9pZCBz
ZXRSZXN1bHQodWludDY0X3QpOworICAgIHZvaWQgc2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUo
Y29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImKTsKKyAgICB2b2lkIHNldFJlc3VsdFRvVW5kZWZp
bmVkKCk7CisKKyAgICBJREJBbnkqIG1vZGVyblJlc3VsdCgpIHsgcmV0dXJuIG1fcmVzdWx0Lmdl
dCgpOyB9CisKKyAgICB2b2lkIHdpbGxJdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYpOworICAgIHZv
aWQgZGlkT3Blbk9ySXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICBj
b25zdCBJREJDdXJzb3IqIHBlbmRpbmdDdXJzb3IoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdD
dXJzb3IuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0U291cmNlKElEQkN1cnNvciYpOworICAgIHZv
aWQgc2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CisKKyAgICBJ
bmRleGVkREI6OlJlcXVlc3RUeXBlIHJlcXVlc3RUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1
ZXN0VHlwZTsgfQorCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0LgorICAgIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGNhblN1c3BlbmRGb3JE
b2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc3RvcCgpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CisgICAgSURCUmVxdWVz
dChJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmKTsKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RT
dG9yZSYsIElEQlRyYW5zYWN0aW9uJik7CisgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCQ3Vyc29yJiwgSURCVHJhbnNhY3Rpb24mKTsKKyAgICBJREJSZXF1ZXN0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIElEQlRyYW5zYWN0aW9uJik7CisgICAg
SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVkREI6
OkluZGV4UmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24mKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0
LgorICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IFJlZkNvdW50ZWQ8SURCUmVxdWVz
dD46OnJlZigpOyB9CisgICAgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBSZWZDb3Vu
dGVkPElEQlJlcXVlc3Q+OjpkZXJlZigpOyB9CisgICAgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbklu
RXZlbnRIYW5kbGVyKCkgZmluYWw7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNPcGVuREJSZXF1ZXN0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIElEQlJlcXVlc3RSZWFkeVN0YXRlIG1f
cmVhZHlTdGF0ZSB7IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nIH07CisgICAgUmVmUHRy
PElEQkFueT4gbV9yZXN1bHQ7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0
aW9uOworICAgIGJvb2wgbV9zaG91bGRFeHBvc2VUcmFuc2FjdGlvblRvRE9NIHsgdHJ1ZSB9Owor
ICAgIFJlZlB0cjxET01FcnJvcj4gbV9kb21FcnJvcjsKKyAgICBJREJFcnJvciBtX2lkYkVycm9y
OworICAgIEluZGV4ZWREQjo6UmVxdWVzdFR5cGUgbV9yZXF1ZXN0VHlwZSA9IHsgSW5kZXhlZERC
OjpSZXF1ZXN0VHlwZTo6T3RoZXIgfTsKKyAgICBib29sIG1fY29udGV4dFN0b3BwZWQgeyBmYWxz
ZSB9OworCisgICAgRXZlbnQqIG1fb3BlbkRhdGFiYXNlU3VjY2Vzc0V2ZW50IHsgbnVsbHB0ciB9
OworCitwcml2YXRlOgorICAgIHZvaWQgb25FcnJvcigpOworICAgIHZvaWQgb25TdWNjZXNzKCk7
CisKKyAgICBJREJDdXJzb3IqIHJlc3VsdEN1cnNvcigpOworCisgICAgSURCQ2xpZW50OjpJREJD
b25uZWN0aW9uVG9TZXJ2ZXImIG1fY29ubmVjdGlvbjsKKyAgICBJREJSZXNvdXJjZUlkZW50aWZp
ZXIgbV9yZXNvdXJjZUlkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQkFueT4gbV9zb3VyY2U7Cisg
ICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eSB7IHRydWUgfTsKKyAgICBJbmRleGVkREI6Oklu
ZGV4UmVjb3JkVHlwZSBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsKKworICAgIFJlZlB0cjxJ
REJDdXJzb3I+IG1fcGVuZGluZ0N1cnNvcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTY29wZUd1
YXJkPiBtX2N1cnNvclJlcXVlc3ROb3RpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gTGVn
YWN5UmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwCmluZGV4IDBiZWM2ZTMuLjEw
MGE0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6SURCUmVx
dWVzdENvbXBsZXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnVi
YmxlLCBib29sIGNhbmNlbGFibGUsIElEQkNsaWVudDo6SURCUmVxdWVzdCYgcmVxdWVzdCkKK0lE
QlJlcXVlc3RDb21wbGV0aW9uRXZlbnQ6OklEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBJREJS
ZXF1ZXN0JiByZXF1ZXN0KQogICAgIDogRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxl
KQogICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmgKaW5k
ZXggMGQ0MGUyNC4uN2ZhOTk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaApAQCAtMjksMjEg
KzI5LDIxIEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJFdmVu
dC5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3RJbXBsLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQlJlcXVlc3RDb21wbGV0aW9uRXZl
bnQgOiBwdWJsaWMgRXZlbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RXZlbnQ+IGNyZWF0
ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFi
bGUsIElEQkNsaWVudDo6SURCUmVxdWVzdCYgcmVxdWVzdCkKKyAgICBzdGF0aWMgUmVmPEV2ZW50
PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBj
YW5jZWxhYmxlLCBJREJSZXF1ZXN0JiByZXF1ZXN0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSURCUmVxdWVzdENvbXBsZXRpb25FdmVudCh0eXBlLCBjYW5CdWJibGUsIGNh
bmNlbGFibGUsIHJlcXVlc3QpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSURCUmVxdWVzdENv
bXBsZXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBi
b29sIGNhbmNlbGFibGUsIElEQkNsaWVudDo6SURCUmVxdWVzdCYpOworICAgIElEQlJlcXVlc3RD
b21wbGV0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBJREJSZXF1ZXN0Jik7CiAKLSAgICBSZWY8SURCQ2xpZW50OjpJREJS
ZXF1ZXN0PiBtX3JlcXVlc3Q7CisgICAgUmVmPElEQlJlcXVlc3Q+IG1fcmVxdWVzdDsKIH07CiAK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uY3BwCmluZGV4IDI1OWZiZjAuLjRlYmQ2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTI4LDE2ICsyOCwyOCBA
QAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiRE9NRXJyb3IuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1
ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNs
dWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisj
aW5jbHVkZSAiSURCRXJyb3IuaCIKKyNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKKyNp
bmNsdWRlICJJREJLZXlEYXRhLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2VEYXRhLmgiCisjaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCisj
aW5jbHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIKKyNpbmNs
dWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRyYW5zYWN0aW9uT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpCi0gICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCkKLXsKLX0KLQogY29u
c3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRPbmx5KCkKIHsKICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiByZWFkb25seSgicmVhZG9ubHkiLCBB
dG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKQEAgLTk3LDYgKzEwOSw4NTggQEAg
Y29uc3QgQXRvbWljU3RyaW5nJiBJREJUcmFuc2FjdGlvbjo6bW9kZVRvU3RyaW5nKEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUKICAgICByZXR1cm4gSURCVHJhbnNhY3Rpb246Om1vZGVS
ZWFkT25seSgpOwogfQogCitSZWY8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVh
dGUoSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8p
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCVHJhbnNhY3Rpb24oZGF0YWJhc2UsIGlu
Zm8sIG51bGxwdHIpKTsKK30KKworUmVmPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6
Y3JlYXRlKElEQkRhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBp
bmZvLCBJREJPcGVuREJSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IElEQlRyYW5zYWN0aW9uKGRhdGFiYXNlLCBpbmZvLCAmcmVxdWVzdCkpOworfQorCitJREJU
cmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBJ
REJUcmFuc2FjdGlvbkluZm8mIGluZm8sIElEQk9wZW5EQlJlcXVlc3QqIHJlcXVlc3QpCisgICAg
OiBXZWJDb3JlOjpBY3RpdmVET01PYmplY3QoZGF0YWJhc2Uuc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQorICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAsIG1faW5mbyhpbmZvKQorICAg
ICwgbV9vcGVyYXRpb25UaW1lcigqdGhpcywgJklEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25UaW1l
ckZpcmVkKQorICAgICwgbV9vcGVuREJSZXF1ZXN0KHJlcXVlc3QpCisKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uIC0gJXMiLCBtX2luZm8ubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVt
ZW50KCk7CisKKyAgICBpZiAobV9pbmZvLm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6VmVyc2lvbkNoYW5nZSkgeworICAgICAgICBBU1NFUlQobV9vcGVuREJSZXF1ZXN0KTsK
KyAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT5zZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oKnRo
aXMpOworICAgICAgICBtX3N0YXJ0ZWRPblNlcnZlciA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYWN0aXZhdGUoKTsKKworICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGY7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOworICAg
ICAgICB2bS53aGVuSWRsZShbc2VsZiwgdGhpc10oKSB7CisgICAgICAgICAgICBkZWFjdGl2YXRl
KCk7CisgICAgICAgIH0pOworCisgICAgICAgIGVzdGFibGlzaE9uU2VydmVyKCk7CisgICAgfQor
CisgICAgc3VzcGVuZElmTmVlZGVkKCk7Cit9CisKK0lEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNh
Y3Rpb24oKQoreworfQorCitjb25zdCBTdHJpbmcmIElEQlRyYW5zYWN0aW9uOjptb2RlKCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1faW5mby5tb2RlKCkpIHsKKyAgICBjYXNlIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seToKKyAgICAgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9u
Ojptb2RlUmVhZE9ubHkoKTsKKyAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpS
ZWFkV3JpdGU6CisgICAgICAgIHJldHVybiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgp
OworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U6Cisg
ICAgICAgIHJldHVybiBJREJUcmFuc2FjdGlvbjo6bW9kZVZlcnNpb25DaGFuZ2UoKTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitXZWJDb3JlOjpJREJE
YXRhYmFzZSogSURCVHJhbnNhY3Rpb246OmRiKCkKK3sKKyAgICByZXR1cm4gJm1fZGF0YWJhc2Uu
Z2V0KCk7Cit9CisKK0lEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBJREJUcmFuc2Fj
dGlvbjo6c2VydmVyQ29ubmVjdGlvbigpCit7CisgICAgcmV0dXJuIG1fZGF0YWJhc2UtPnNlcnZl
ckNvbm5lY3Rpb24oKTsKK30KKworUmVmUHRyPERPTUVycm9yPiBJREJUcmFuc2FjdGlvbjo6ZXJy
b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2RvbUVycm9yOworfQorCitSZWZQdHI8V2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJp
bmcmIG9iamVjdFN0b3JlTmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlIik7CisKKyAgICBp
ZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29iamVjdFN0b3JlJyBvbiAnSURC
VHJhbnNhY3Rpb24nOiBUaGUgdHJhbnNhY3Rpb24gZmluaXNoZWQuIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlZmVyZW5jZWRPYmpl
Y3RTdG9yZXMuZmluZChvYmplY3RTdG9yZU5hbWUpOworICAgIGlmIChpdGVyYXRvciAhPSBtX3Jl
ZmVyZW5jZWRPYmplY3RTdG9yZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFs
dWU7CisKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBvYmplY3RTdG9y
ZSA6IG1faW5mby5vYmplY3RTdG9yZXMoKSkgeworICAgICAgICBpZiAob2JqZWN0U3RvcmUgPT0g
b2JqZWN0U3RvcmVOYW1lKSB7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8qIGluZm8gPSBtX2RhdGFiYXNl
LT5pbmZvKCkuaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTsKKyAg
ICBpZiAoIWluZm8pIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
b3RGb3VuZEVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnb2JqZWN0U3RvcmUnIG9uICdJREJUcmFuc2FjdGlvbic6IFRoZSBzcGVjaWZp
ZWQgb2JqZWN0IHN0b3JlIHdhcyBub3QgZm91bmQuIik7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIC8vIFZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9ucyBhcmUgc2NvcGVk
IHRvIGV2ZXJ5IG9iamVjdCBzdG9yZSBpbiB0aGUgZGF0YWJhc2UuCisgICAgaWYgKCFpbmZvIHx8
ICghZm91bmQgJiYgIWlzVmVyc2lvbkNoYW5nZSgpKSkgeworICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvYmplY3RTdG9yZScgb24gJ0lEQlRyYW5z
YWN0aW9uJzogVGhlIHNwZWNpZmllZCBvYmplY3Qgc3RvcmUgd2FzIG5vdCBmb3VuZC4iKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBvYmplY3RTdG9yZSA9IElE
Qk9iamVjdFN0b3JlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKmluZm8sICp0
aGlzKTsKKyAgICBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3JlTmFtZSwg
Jm9iamVjdFN0b3JlLmdldCgpKTsKKworICAgIHJldHVybiBhZG9wdFJlZigmb2JqZWN0U3RvcmUu
bGVha1JlZigpKTsKK30KKworCit2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydER1ZVRvRmFpbGVk
UmVxdWVzdChET01FcnJvciYgZXJyb3IpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjphYm9ydER1ZVRvRmFpbGVkUmVxdWVzdCIpOworICAgIGlmIChpc0ZpbmlzaGVkT3JG
aW5pc2hpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kb21FcnJvciA9ICZlcnJvcjsK
KyAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CisgICAgYWJvcnQoZWMpOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uOjp0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyhJbmRleGVkREI6OlRy
YW5zYWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgQVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hp
bmcoKSk7CisgICAgbV9zdGF0ZSA9IHN0YXRlOworICAgIEFTU0VSVChpc0ZpbmlzaGVkT3JGaW5p
c2hpbmcoKSk7CisgICAgbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgSURCVHJhbnNhY3Rpb246OmFib3J0KEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjphYm9ydCIpOworCisgICAgaWYg
KGlzRmluaXNoZWRPckZpbmlzaGluZygpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhYm9ydCcgb24gJ0lEQlRyYW5zYWN0aW9uJzog
VGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgbV9kYXRhYmFzZS0+d2lsbEFib3J0VHJhbnNhY3Rpb24oKnRoaXMp
OworCisgICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgb2Jq
ZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMudmFsdWVzKCkpCisgICAgICAgICAg
ICBvYmplY3RTdG9yZS0+cm9sbGJhY2tJbmZvRm9yVmVyc2lvbkNoYW5nZUFib3J0KCk7CisgICAg
fQorCisgICAgdHJhbnNpdGlvbmVkVG9GaW5pc2hpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0
YXRlOjpBYm9ydGluZyk7CisgICAgCisgICAgbV9hYm9ydFF1ZXVlLnN3YXAobV90cmFuc2FjdGlv
bk9wZXJhdGlvblF1ZXVlKTsKKworICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVh
dGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgbnVsbHB0ciwgJklEQlRyYW5zYWN0aW9uOjph
Ym9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdU
Rk1vdmUob3BlcmF0aW9uKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmFib3J0T25TZXJ2
ZXJBbmRDYW5jZWxSZXF1ZXN0cyhJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVy
YXRpb24pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjphYm9ydE9uU2Vy
dmVyQW5kQ2FuY2VsUmVxdWVzdHMiKTsKKworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0
aW9uUXVldWUuaXNFbXB0eSgpKTsKKworICAgIHNlcnZlckNvbm5lY3Rpb24oKS5hYm9ydFRyYW5z
YWN0aW9uKCp0aGlzKTsKKworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmNv
bnRhaW5zKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsKKyAgICBtX3RyYW5zYWN0aW9uT3BlcmF0
aW9uTWFwLnJlbW92ZShvcGVyYXRpb24uaWRlbnRpZmllcigpKTsKKworICAgIElEQkVycm9yIGVy
cm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKTsKKyAgICBmb3IgKGF1dG8mIG9w
ZXJhdGlvbiA6IG1fYWJvcnRRdWV1ZSkKKyAgICAgICAgb3BlcmF0aW9uLT5jb21wbGV0ZWQoSURC
UmVzdWx0RGF0YTo6ZXJyb3Iob3BlcmF0aW9uLT5pZGVudGlmaWVyKCksIGVycm9yKSk7CisKKyAg
ICAvLyBTaW5jZSB3ZSdyZSBhYm9ydGluZywgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gaGF2
ZSBxdWV1ZWQgYW55IGZ1cnRoZXIgb3BlcmF0aW9ucy4KKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bk9wZXJhdGlvblF1ZXVlLmlzRW1wdHkoKSk7Cit9CisKK2NvbnN0IGNoYXIqIElEQlRyYW5zYWN0
aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIklEQlRyYW5z
YWN0aW9uIjsKK30KKworYm9vbCBJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50
U3VzcGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElEQlRy
YW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9j
b250ZXh0U3RvcHBlZCAmJiBtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6
RmluaXNoZWQ7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OnN0b3AoKQoreworICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6c3RvcCIpOworCisgICAgLy8gSURCRGF0YWJhc2U6
OnN0b3AoKSBjYWxscyBJREJUcmFuc2FjdGlvbjo6c3RvcCgpIGZvciBlYWNoIG9mIGl0cyBhY3Rp
dmUgdHJhbnNhY3Rpb25zLgorICAgIC8vIFNpbmNlIHRoZSBvcmRlciBvZiBjYWxsaW5nIEFjdGl2
ZURPTU9iamVjdDo6c3RvcCgpIGlzIHJhbmRvbSwgd2UgbWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4g
c3RvcHBlZC4KKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CisKKyAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNo
aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBl
YzsKKyAgICBhYm9ydChlYyk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3Rh
dGU6OkFjdGl2ZTsKK30KKworYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZE9yRmluaXNo
aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uU3RhdGU6OkNvbW1pdHRpbmcKKyAgICAgICAgfHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uU3RhdGU6OkFib3J0aW5nCisgICAgICAgIHx8IG1fc3RhdGUgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6
YWRkUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIG1fb3BlblJlcXVlc3RzLmFk
ZCgmcmVxdWVzdCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OnJlbW92ZVJlcXVlc3QoSURC
UmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQobV9vcGVuUmVxdWVzdHMuY29udGFpbnMo
JnJlcXVlc3QpKTsKKyAgICBtX29wZW5SZXF1ZXN0cy5yZW1vdmUoJnJlcXVlc3QpOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlvbihSZWZQdHI8SURCQ2xpZW50OjpU
cmFuc2FjdGlvbk9wZXJhdGlvbj4mJiBvcGVyYXRpb24pCit7CisgICAgQVNTRVJUKCFtX3RyYW5z
YWN0aW9uT3BlcmF0aW9uTWFwLmNvbnRhaW5zKG9wZXJhdGlvbi0+aWRlbnRpZmllcigpKSk7CisK
KyAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuYXBwZW5kKG9wZXJhdGlvbik7CisgICAg
bV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5zZXQob3BlcmF0aW9uLT5pZGVudGlmaWVyKCksIFdU
Rk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7Cit9CisK
K3ZvaWQgSURCVHJhbnNhY3Rpb246OnNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKQoreworICAgIGlm
ICghbV9vcGVyYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX29wZXJhdGlvblRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6b3BlcmF0aW9uVGlt
ZXJGaXJlZCgpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpvcGVyYXRp
b25UaW1lckZpcmVkICglcCkiLCB0aGlzKTsKKworICAgIGlmICghbV9zdGFydGVkT25TZXJ2ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVl
LmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IG1fdHJhbnNhY3Rpb25PcGVy
YXRpb25RdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgb3BlcmF0aW9uLT5wZXJmb3JtKCk7CisK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbk9wZXJhdGlv
bk1hcC5pc0VtcHR5KCkgfHwgIW1fb3BlblJlcXVlc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkKKyAgICAgICAgY29tbWl0
KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCit7CisgICAgTE9HKEluZGV4
ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXQiKTsKKworICAgIEFTU0VSVCghaXNGaW5pc2hl
ZE9yRmluaXNoaW5nKCkpOworCisgICAgdHJhbnNpdGlvbmVkVG9GaW5pc2hpbmcoSW5kZXhlZERC
OjpUcmFuc2FjdGlvblN0YXRlOjpDb21taXR0aW5nKTsKKyAgICBtX2RhdGFiYXNlLT53aWxsQ29t
bWl0VHJhbnNhY3Rpb24oKnRoaXMpOworCisgICAgYXV0byBvcGVyYXRpb24gPSBJREJDbGllbnQ6
OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCBudWxscHRyLCAmSURCVHJhbnNhY3Rp
b246OmNvbW1pdE9uU2VydmVyKTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJh
dGlvbikpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlcihJREJDbGll
bnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCit7CisgICAgTE9HKEluZGV4ZWRE
QiwgIklEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlciIpOworICAgIHNlcnZlckNvbm5lY3Rp
b24oKS5jb21taXRUcmFuc2FjdGlvbigqdGhpcyk7CisKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bk9wZXJhdGlvbk1hcC5jb250YWlucyhvcGVyYXRpb24uaWRlbnRpZmllcigpKSk7CisgICAgbV90
cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5yZW1vdmUob3BlcmF0aW9uLmlkZW50aWZpZXIoKSk7Cit9
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmZpbmlzaEFib3J0T3JDb21taXQoKQoreworICAgIEFT
U0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQpOwor
ICAgIG1fc3RhdGUgPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkOworfQor
Cit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRTdGFydChjb25zdCBJREJFcnJvciYgZXJyb3IpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRTdGFydCIpOworCisgICAg
bV9kYXRhYmFzZS0+ZGlkU3RhcnRUcmFuc2FjdGlvbigqdGhpcyk7CisKKyAgICBtX3N0YXJ0ZWRP
blNlcnZlciA9IHRydWU7CisKKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoZSB0cmFuc2FjdGlvbiBm
YWlsZWQgdG8gc3RhcnQgb24gdGhlIHNlcnZlci4KKyAgICAvLyBUaGF0IGVxdWF0ZXMgdG8gYW4g
YWJvcnQuCisgICAgaWYgKCFlcnJvci5pc051bGwoKSkgeworICAgICAgICBkaWRBYm9ydChlcnJv
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVy
KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om5vdGlmeURpZEFib3J0KGNvbnN0IElEQkVy
cm9yJiBlcnJvcikKK3sKKyAgICBtX2RhdGFiYXNlLT5kaWRBYm9ydFRyYW5zYWN0aW9uKCp0aGlz
KTsKKyAgICBtX2lkYkVycm9yID0gZXJyb3I7CisgICAgZmlyZU9uQWJvcnQoKTsKKworICAgIGlm
IChpc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAgICBBU1NFUlQobV9vcGVuREJSZXF1ZXN0KTsK
KyAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT5maXJlRXJyb3JBZnRlclZlcnNpb25DaGFuZ2VDb21w
bGV0aW9uKCk7CisgICAgfQorfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRBYm9ydChjb25z
dCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9u
OjpkaWRBYm9ydCIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlv
blN0YXRlOjpGaW5pc2hlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbm90aWZ5RGlkQWJvcnQo
ZXJyb3IpOworCisgICAgZmluaXNoQWJvcnRPckNvbW1pdCgpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uOjpkaWRDb21taXQoY29uc3QgSURCRXJyb3ImIGVycm9yKQoreworICAgIExPRyhJbmRl
eGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkQ29tbWl0Iik7CisKKyAgICBBU1NFUlQobV9zdGF0
ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkNvbW1pdHRpbmcpOworCisgICAgaWYg
KGVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgIG1fZGF0YWJhc2UtPmRpZENvbW1pdFRyYW5zYWN0
aW9uKCp0aGlzKTsKKyAgICAgICAgZmlyZU9uQ29tcGxldGUoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX2RhdGFiYXNlLT53aWxsQWJvcnRUcmFuc2FjdGlvbigqdGhpcyk7CisgICAgICAgIG5v
dGlmeURpZEFib3J0KGVycm9yKTsKKyAgICB9CisKKyAgICBmaW5pc2hBYm9ydE9yQ29tbWl0KCk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmZpcmVPbkNvbXBsZXRlKCkKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmZpcmVPbkNvbXBsZXRlIik7CisgICAgZW5xdWV1
ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIGZhbHNlLCBm
YWxzZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9ydCgpCit7CisgICAg
TE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9ydCIpOworICAgIGVucXVl
dWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxz
ZSkpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
IGV2ZW50KQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6RmluaXNoZWQpOworCisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwg
bV9jb250ZXh0U3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXZlbnQtPnNldFRhcmdl
dCh0aGlzKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1
ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOworfQorCitib29sIElEQlRyYW5zYWN0aW9uOjpkaXNw
YXRjaEV2ZW50KEV2ZW50JiBldmVudCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmRpc3BhdGNoRXZlbnQiKTsKKworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7CisgICAgQVNTRVJUKGV2ZW50
LnRhcmdldCgpID09IHRoaXMpOworICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50KTsKKworICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOworICAgIHRh
cmdldHMuYXBwZW5kKHRoaXMpOworICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOworCisgICAgYm9v
bCByZXN1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsK
KworICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAgICBBU1NFUlQobV9vcGVuREJS
ZXF1ZXN0KTsKKyAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT52ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b25EaWRGaW5pc2goKTsKKworICAgICAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jb21wbGV0ZUV2ZW50KSB7CisgICAgICAgICAgICBpZiAobV9kYXRhYmFzZS0+aXNDbG9zaW5n
T3JDbG9zZWQoKSkKKyAgICAgICAgICAgICAgICBtX29wZW5EQlJlcXVlc3QtPmZpcmVFcnJvckFm
dGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX29wZW5EQlJlcXVlc3QtPmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29t
bWl0KCk7CisgICAgICAgIH0KKworICAgICAgICBtX29wZW5EQlJlcXVlc3QgPSBudWxscHRyOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZjxJREJPYmplY3RTdG9yZT4gSURC
VHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYg
aW5mbykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVj
dFN0b3JlIik7CisgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKKyAgICBBU1NFUlQoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIFJlZjxJREJPYmplY3RTdG9yZT4gb2JqZWN0
U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IGluZm8sICp0aGlzKTsKKyAgICBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuc2V0KGluZm8ubmFt
ZSgpLCAmb2JqZWN0U3RvcmUuZ2V0KCkpOworCisgICAgYXV0byBvcGVyYXRpb24gPSBJREJDbGll
bnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAmSURCVHJhbnNhY3Rpb246OmRp
ZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0
U3RvcmVPblNlcnZlciwgaW5mbyk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVy
YXRpb24pKTsKKworICAgIHJldHVybiBvYmplY3RTdG9yZTsKK30KKwordm9pZCBJREJUcmFuc2Fj
dGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3Bl
cmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2
ZXIiKTsKKworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisKKyAgICBtX2RhdGFiYXNl
LT5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlT2JqZWN0U3RvcmUob3BlcmF0aW9uLCBpbmZvKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihj
b25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlciIpOworCisgICAgQVNT
RVJUX1VOVVNFRChyZXN1bHREYXRhLCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBl
OjpDcmVhdGVPYmplY3RTdG9yZVN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVz
dWx0VHlwZTo6RXJyb3IpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SURCSW5kZXg+IElEQlRyYW5z
YWN0aW9uOjpjcmVhdGVJbmRleChJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElE
QkluZGV4SW5mbyYgaW5mbykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmNyZWF0ZUluZGV4Iik7CisgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKKworICAgIGlm
ICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlv
bigqdGhpcywgJklEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVJbmRleE9uU2VydmVyLCAmSURCVHJh
bnNhY3Rpb246OmNyZWF0ZUluZGV4T25TZXJ2ZXIsIGluZm8pOworICAgIHNjaGVkdWxlT3BlcmF0
aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJ
REJJbmRleD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgaW5mbywgb2JqZWN0U3RvcmUpOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleE9uU2VydmVyKElEQkNsaWVudDo6
VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZv
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXhPblNl
cnZlciIpOworCisgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKKworICAgIG1fZGF0YWJh
c2UtPnNlcnZlckNvbm5lY3Rpb24oKS5jcmVhdGVJbmRleChvcGVyYXRpb24sIGluZm8pOworfQor
Cit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJl
c3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpkaWRDcmVhdGVJbmRleE9uU2VydmVyIik7CisKKyAgICBpZiAocmVzdWx0RGF0YS50eXBl
KCkgPT0gSURCUmVzdWx0VHlwZTo6Q3JlYXRlSW5kZXhTdWNjZXNzKQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJyb3Ip
OworCisgICAgLy8gVGhpcyBvcGVyYXRpb24gbWlnaHQgaGF2ZSBmYWlsZWQgYmVjYXVzZSB0aGUg
dHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBhYm9ydGluZy4KKyAgICBpZiAobV9zdGF0ZSA9PSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFib3J0aW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBPdGhlcndpc2UsIGZhaWx1cmUgdG8gY3JlYXRlIGFuIGluZGV4IGZvcmNlZCBhYm9ydGlv
biBvZiB0aGUgdHJhbnNhY3Rpb24uCisgICAgYWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKHJlc3VsdERhdGEu
ZXJyb3IoKS5jb2RlKCkpKSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6
cmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2Jq
ZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQoreworICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IiKTsKKwor
ICAgIHJldHVybiBkb1JlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsIElEQkN1cnNvcldpdGhWYWx1
ZTo6Y3JlYXRlKCp0aGlzLCBvYmplY3RTdG9yZSwgaW5mbykpOworfQorCitSZWY8SURCUmVxdWVz
dD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29y
Iik7CisKKyAgICBpZiAoaW5mby5jdXJzb3JUeXBlKCkgPT0gSW5kZXhlZERCOjpDdXJzb3JUeXBl
OjpLZXlPbmx5KQorICAgICAgICByZXR1cm4gZG9SZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCBJ
REJDdXJzb3I6OmNyZWF0ZSgqdGhpcywgaW5kZXgsIGluZm8pKTsKKworICAgIHJldHVybiBkb1Jl
cXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsIElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKCp0aGlz
LCBpbmRleCwgaW5mbykpOworfQorCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OmRv
UmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgUmVmPElE
QkN1cnNvcj4mJiBjdXJzb3IpCit7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworCisgICAgUmVm
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgY3Vyc29y
LmdldCgpLCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKKworICAgIGF1
dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhp
cywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRPcGVuQ3Vyc29yT25TZXJ2ZXIs
ICZJREJUcmFuc2FjdGlvbjo6b3BlbkN1cnNvck9uU2VydmVyLCBjdXJzb3ItPmluZm8oKSk7Cisg
ICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKKworICAgIHJldHVybiBy
ZXF1ZXN0OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIoSURC
Q2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJDdXJzb3JJ
bmZvJiBpbmZvKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6b3BlbkN1
cnNvck9uU2VydmVyIik7CisKKyAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkub3Bl
bkN1cnNvcihvcGVyYXRpb24sIGluZm8pOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRP
cGVuQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0
YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRp
ZE9wZW5DdXJzb3JPblNlcnZlciIpOworCisgICAgcmVxdWVzdC5kaWRPcGVuT3JJdGVyYXRlQ3Vy
c29yKHJlc3VsdERhdGEpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29y
KElEQkN1cnNvciYgY3Vyc29yLCBjb25zdCBJREJLZXlEYXRhJiBrZXksIHVuc2lnbmVkIGxvbmcg
Y291bnQpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vy
c29yIik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVChjdXJzb3IucmVxdWVz
dCgpKTsKKworICAgIGFkZFJlcXVlc3QoKmN1cnNvci5yZXF1ZXN0KCkpOworCisgICAgYXV0byBv
cGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAq
Y3Vyc29yLnJlcXVlc3QoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2
ZXIsICZJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2VydmVyLCBrZXksIGNvdW50KTsK
KyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOworfQorCit2b2lkIElE
QlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlv
bk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbnN0IHVuc2ln
bmVkIGxvbmcmIGNvdW50KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
aXRlcmF0ZUN1cnNvck9uU2VydmVyIik7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuaXRlcmF0
ZUN1cnNvcihvcGVyYXRpb24sIGtleSwgY291bnQpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9u
OjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURC
UmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlciIpOworCisgICAgcmVxdWVzdC5kaWRPcGVu
T3JJdGVyYXRlQ3Vyc29yKHJlc3VsdERhdGEpOworfQorCitSZWY8SURCUmVxdWVzdD4gSURCVHJh
bnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtl
eVJhbmdlRGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVl
c3RHZXRSZWNvcmQiKTsKKyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKCFrZXlS
YW5nZURhdGEuaXNOdWxsKTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CisgICAgYWRkUmVxdWVz
dChyZXF1ZXN0LmdldCgpKTsKKworICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVh
dGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0
aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNl
cnZlciwga2V5UmFuZ2VEYXRhKTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJh
dGlvbikpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1ZSIpOworICAg
IHJldHVybiByZXF1ZXN0SW5kZXhSZWNvcmQoY29udGV4dCwgaW5kZXgsIEluZGV4ZWREQjo6SW5k
ZXhSZWNvcmRUeXBlOjpWYWx1ZSwgcmFuZ2UpOworfQorCitSZWY8SURCUmVxdWVzdD4gSURCVHJh
bnNhY3Rpb246OnJlcXVlc3RHZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
SURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQoreworICAgIExP
RyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlIik7CisgICAgcmV0
dXJuIHJlcXVlc3RJbmRleFJlY29yZChjb250ZXh0LCBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJl
Y29yZFR5cGU6OktleSwgcmFuZ2UpOworfQorCitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJ
REJJbmRleCYgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHR5cGUsIGNvbnN0IElE
QktleVJhbmdlRGF0YSZyYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RHZXRWYWx1ZSIpOworICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKKyAgICBBU1NF
UlQoIXJhbmdlLmlzTnVsbCk7CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZUdldChjb250ZXh0LCBpbmRleCwgdHlwZSwgKnRoaXMpOworICAgIGFkZFJl
cXVlc3QocmVxdWVzdC5nZXQoKSk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IElEQkNsaWVudDo6
Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFu
c2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6Z2V0UmVjb3Jk
T25TZXJ2ZXIsIHJhbmdlKTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlv
bikpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Omdl
dFJlY29yZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlv
biwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyIik7CisKKyAgICBzZXJ2ZXJDb25u
ZWN0aW9uKCkuZ2V0UmVjb3JkKG9wZXJhdGlvbiwga2V5UmFuZ2UpOworfQorCit2b2lkIElEQlRy
YW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJU
cmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIiKTsKKworICAgIGlmIChyZXN1bHREYXRh
LnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcikgeworICAgICAgICByZXF1ZXN0LnJlcXVl
c3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlQocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6R2V0UmVjb3JkU3VjY2Vz
cyk7CisKKyAgICBjb25zdCBJREJHZXRSZXN1bHQmIHJlc3VsdCA9IHJlc3VsdERhdGEuZ2V0UmVz
dWx0KCk7CisKKyAgICBpZiAocmVxdWVzdC5zb3VyY2VJbmRleElkZW50aWZpZXIoKSAmJiByZXF1
ZXN0LnJlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSgpID09IEluZGV4ZWREQjo6SW5kZXhSZWNvcmRU
eXBlOjpLZXkpIHsKKyAgICAgICAgaWYgKCFyZXN1bHQua2V5RGF0YSgpLmlzTnVsbCgpKQorICAg
ICAgICAgICAgcmVxdWVzdC5zZXRSZXN1bHQoJnJlc3VsdC5rZXlEYXRhKCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXF1ZXN0LnNldFJlc3VsdFRvVW5kZWZpbmVkKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKHJlc3VsdERhdGEuZ2V0UmVzdWx0KCkudmFsdWVCdWZmZXIoKS5k
YXRhKCkpCisgICAgICAgICAgICByZXF1ZXN0LnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKHJl
c3VsdERhdGEuZ2V0UmVzdWx0KCkudmFsdWVCdWZmZXIoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICByZXF1
ZXN0LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBy
YW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3Vu
dCAoSURCT2JqZWN0U3RvcmUpIik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VS
VCghcmFuZ2UuaXNOdWxsKTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CisgICAgYWRkUmVxdWVz
dChyZXF1ZXN0LmdldCgpKTsKKworICAgIHNjaGVkdWxlT3BlcmF0aW9uKElEQkNsaWVudDo6Y3Jl
YXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2Fj
dGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRDb3VudE9uU2Vy
dmVyLCByYW5nZSkpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK1JlZjxJREJSZXF1ZXN0
PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudCAoSURCSW5k
ZXgpIik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxs
KTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlQ291
bnQoY29udGV4dCwgaW5kZXgsICp0aGlzKTsKKyAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkp
OworCisgICAgc2NoZWR1bGVPcGVyYXRpb24oSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9w
ZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRHZXRDb3Vu
dE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIsIHJhbmdlKSk7CisK
KyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRP
blNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0
IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRy
YW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVyIik7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCku
Z2V0Q291bnQob3BlcmF0aW9uLCBrZXlSYW5nZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246
OmRpZEdldENvdW50T25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0
RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmRpZEdldENvdW50T25TZXJ2ZXIiKTsKKworICAgIHJlcXVlc3Quc2V0UmVzdWx0KHJlc3VsdERh
dGEucmVzdWx0SW50ZWdlcigpKTsKKyAgICByZXF1ZXN0LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0
RGF0YSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdERlbGV0
ZVJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYg
b2JqZWN0U3RvcmUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0RGVsZXRlUmVjb3JkIik7CisgICAgQVNT
RVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsKKworICAgIFJlZjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0
b3JlLCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKKworICAgIHNjaGVk
dWxlT3BlcmF0aW9uKElEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMs
IHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIs
ICZJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIsIHJhbmdlKSk7CisgICAgcmV0
dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZE9uU2Vy
dmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmRlbGV0ZVJlY29yZE9uU2VydmVyIik7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCku
ZGVsZXRlUmVjb3JkKG9wZXJhdGlvbiwga2V5UmFuZ2UpOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJ
REJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6ZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIiKTsKKworICAgIHJlcXVlc3Quc2V0UmVz
dWx0VG9VbmRlZmluZWQoKTsKKyAgICByZXF1ZXN0LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0
YSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2Jq
ZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUm
IG9iamVjdFN0b3JlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVx
dWVzdENsZWFyT2JqZWN0U3RvcmUiKTsKKyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CisKKyAgICBS
ZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBvYmpl
Y3RTdG9yZSwgKnRoaXMpOworICAgIGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CisKKyAgICB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIgPSBvYmplY3RTdG9yZS5pbmZvKCkuaWRlbnRp
ZmllcigpOworICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlv
bk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRDbGVh
ck9iamVjdFN0b3JlT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9u
U2VydmVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdU
Rk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rp
b25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgdWludDY0X3QmIG9iamVjdFN0b3JlSWRlbnRp
ZmllcikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNsZWFyT2JqZWN0
U3RvcmVPblNlcnZlciIpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLmNsZWFyT2JqZWN0U3Rv
cmUob3BlcmF0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uOjpkaWRDbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAi
SURCVHJhbnNhY3Rpb246OmRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZlciIpOworCisgICAgcmVx
dWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOworICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRl
ZChyZXN1bHREYXRhKTsKK30KKworUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3Rv
cmUmIG9iamVjdFN0b3JlLCBJREJLZXkqIGtleSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1
ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZCIpOwor
ICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQoIWlzUmVhZE9ubHkoKSk7CisgICAg
QVNTRVJUKG9iamVjdFN0b3JlLmluZm8oKS5hdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKKworICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9i
amVjdFN0b3JlLCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKKworICAg
IGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigq
dGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVy
LCAmSURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIsIGtleSwgJnZhbHVlLCBvdmVyd3Jp
dGVNb2RlKTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOworCisg
ICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25T
ZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBSZWZQdHI8
SURCS2V5PiBrZXksIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBJ
bmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSYgb3ZlcndyaXRlTW9kZSkKK3sKKyAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIiKTsKKwor
ICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKKworICAgIHNlcnZlckNvbm5lY3Rpb24oKS5wdXRP
ckFkZChvcGVyYXRpb24sIGtleSwgdmFsdWUsIG92ZXJ3cml0ZU1vZGUpOworfQorCit2b2lkIElE
QlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVyIik7CisKKyAgICByZXF1ZXN0LnNldFJl
c3VsdChyZXN1bHREYXRhLnJlc3VsdEtleSgpKTsKKyAgICByZXF1ZXN0LnJlcXVlc3RDb21wbGV0
ZWQocmVzdWx0RGF0YSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKQoreworICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKKworICAgIEFTU0VSVChpc1Zl
cnNpb25DaGFuZ2UoKSk7CisKKyAgICBpZiAoYXV0byBvYmplY3RTdG9yZSA9IG1fcmVmZXJlbmNl
ZE9iamVjdFN0b3Jlcy50YWtlKG9iamVjdFN0b3JlTmFtZSkpCisgICAgICAgIG9iamVjdFN0b3Jl
LT5tYXJrQXNEZWxldGVkKCk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IElEQkNsaWVudDo6Y3Jl
YXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICZJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRl
T2JqZWN0U3RvcmVPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZU9u
U2VydmVyLCBvYmplY3RTdG9yZU5hbWUpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUo
b3BlcmF0aW9uKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3Jl
T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKKyAgICBBU1NFUlQoaXNWZXJz
aW9uQ2hhbmdlKCkpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZU9iamVjdFN0b3Jl
KG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVOYW1lKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6
ZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHRE
YXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlT2Jq
ZWN0U3RvcmVPblNlcnZlciIpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0RGF0YSwgcmVzdWx0
RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RGVsZXRlT2JqZWN0U3RvcmVTdWNjZXNzIHx8
IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkVycm9yKTsKK30KKwordm9pZCBJ
REJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246OmRlbGV0ZUluZGV4Iik7CisKKyAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkp
OworCisgICAgYXV0byBvcGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3Bl
cmF0aW9uKCp0aGlzLCAmSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4T25TZXJ2ZXIsICZJ
REJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlciwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleE5hbWUpOworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7
Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50
OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIiKTsKKyAgICBBU1NF
UlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZUlu
ZGV4KG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5hbWUpOworfQorCit2
b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJlc3Vs
dERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9u
OjpkaWREZWxldGVJbmRleE9uU2VydmVyIik7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHREYXRh
LCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpEZWxldGVJbmRleFN1Y2Nlc3Mg
fHwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpOworfQorCit2b2lk
IElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25EaWRDb21wbGV0ZShJREJDbGllbnQ6OlRyYW5zYWN0
aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCit7CisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVy
YXRpb25NYXAuZ2V0KG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpID09ICZvcGVyYXRpb24pOworICAg
IG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAucmVtb3ZlKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkp
OworCisgICAgc2NoZWR1bGVPcGVyYXRpb25UaW1lcigpOworfQorCit2b2lkIElEQlRyYW5zYWN0
aW9uOjplc3RhYmxpc2hPblNlcnZlcigpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjplc3RhYmxpc2hPblNlcnZlciIpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLmVz
dGFibGlzaFRyYW5zYWN0aW9uKCp0aGlzKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6YWN0
aXZhdGUoKQoreworICAgIGlmIChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWN0aXZl
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkZWFjdGl2YXRlKCkKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2ZSkKKyAgICAgICAgbV9z
dGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6SW5hY3RpdmU7CisKKyAgICBzY2hl
ZHVsZU9wZXJhdGlvblRpbWVyKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggOWU5YTBlOC4uZTIyMzEwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5oCkBAIC0yMywzMyArMjMsNDEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIElEQlRyYW5zYWN0aW9uX2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rp
b25faAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VJbmZvLmgiCisjaW5jbHVkZSAiSURCRXJyb3IuaCIKKyNpbmNsdWRl
ICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkluZm8uaCIKICNpbmNsdWRl
ICJJbmRleGVkREIuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSAiVGlt
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERPTUVycm9yOwogY2xhc3MgSURCQ3Vyc29y
OworY2xhc3MgSURCQ3Vyc29ySW5mbzsKIGNsYXNzIElEQkRhdGFiYXNlOwotY2xhc3MgSURCRGF0
YWJhc2VFcnJvcjsKK2NsYXNzIElEQkluZGV4OworY2xhc3MgSURCSW5kZXhJbmZvOworY2xhc3Mg
SURCS2V5RGF0YTsKIGNsYXNzIElEQk9iamVjdFN0b3JlOworY2xhc3MgSURCT2JqZWN0U3RvcmVJ
bmZvOwogY2xhc3MgSURCT3BlbkRCUmVxdWVzdDsKK2NsYXNzIElEQlJlc3VsdERhdGE7CitzdHJ1
Y3QgSURCS2V5UmFuZ2VEYXRhOwogCi1zdHJ1Y3QgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlOwor
bmFtZXNwYWNlIElEQkNsaWVudCB7CitjbGFzcyBUcmFuc2FjdGlvbk9wZXJhdGlvbjsKK30KIAog
Y2xhc3MgSURCVHJhbnNhY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbj4s
IHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0
IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbigpIHsgfQotCiAgICAgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZVJlYWRPbmx5KCk7CiAgICAgc3RhdGljIGNvbnN0
IEF0b21pY1N0cmluZyYgbW9kZVJlYWRXcml0ZSgpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIG1vZGVWZXJzaW9uQ2hhbmdlKCk7CkBAIC01OSwyMiArNjcsMTg0IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgc3RyaW5nVG9Nb2RlKGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
JiBtb2RlVG9TdHJpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOwogCi0gICAgLy8gSW1w
bGVtZW50IHRoZSBJREJUcmFuc2FjdGlvbiBJREwKLSAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYg
bW9kZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIElEQkRhdGFiYXNlKiBkYigpID0gMDsKLSAg
ICB2aXJ0dWFsIFJlZlB0cjxET01FcnJvcj4gZXJyb3IoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhYm9ydChF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7CisgICAgc3RhdGljIFJlZjxJREJUcmFuc2Fj
dGlvbj4gY3JlYXRlKElEQkRhdGFiYXNlJiwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJik7Cisg
ICAgc3RhdGljIFJlZjxJREJUcmFuc2FjdGlvbj4gY3JlYXRlKElEQkRhdGFiYXNlJiwgY29uc3Qg
SURCVHJhbnNhY3Rpb25JbmZvJiwgSURCT3BlbkRCUmVxdWVzdCYpOworCisgICAgfklEQlRyYW5z
YWN0aW9uKCkgZmluYWw7CisKKyAgICAvLyBJREJUcmFuc2FjdGlvbiBJREwKKyAgICBjb25zdCBT
dHJpbmcmIG1vZGUoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpJREJEYXRhYmFzZSogZGIoKTsKKyAg
ICBSZWZQdHI8RE9NRXJyb3I+IGVycm9yKCkgY29uc3Q7CisgICAgUmVmUHRyPFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpOworICAgIHZvaWQgYWJvcnQoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
Jik7CisKKyAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIElEQlRyYW5zYWN0aW9uRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBl
OyB9CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOyB9CisgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgUmVmQ291bnRlZDxJ
REJUcmFuc2FjdGlvbj46OnJlZigpOyB9CisgICAgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgZmlu
YWwgeyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPjo6ZGVyZWYoKTsgfQorICAgIHVzaW5nIEV2
ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYp
IGZpbmFsOwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbj46OnJlZjsKICAg
ICB1c2luZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPjo6ZGVyZWY7CiAKLXByb3RlY3RlZDoK
LSAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgY29uc3Qg
Y2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgY2FuU3Vz
cGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaGFzUGVu
ZGluZ0FjdGl2aXR5KCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisKKyAg
ICBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87
IH0KKyAgICBJREJEYXRhYmFzZSYgZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgp
OyB9CisgICAgY29uc3QgSURCRGF0YWJhc2UmIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhYmFzZS5nZXQoKTsgfQorICAgIElEQkRhdGFiYXNlSW5mbyogb3JpZ2luYWxEYXRhYmFzZUlu
Zm8oKSBjb25zdCB7IHJldHVybiBtX2luZm8ub3JpZ2luYWxEYXRhYmFzZUluZm8oKTsgfQorCisg
ICAgdm9pZCBkaWRTdGFydChjb25zdCBJREJFcnJvciYpOworICAgIHZvaWQgZGlkQWJvcnQoY29u
c3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGRpZENvbW1pdChjb25zdCBJREJFcnJvciYpOworCisg
ICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2luZm8ubW9kZSgpID09
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlOyB9CisgICAgYm9vbCBp
c1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9pbmZvLm1vZGUoKSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZTo6UmVhZE9ubHk7IH0KKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisK
KyAgICBSZWY8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgo
SURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJJbmRleEluZm8mKTsKKworICAgIFJlZjxJREJSZXF1
ZXN0PiByZXF1ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0
b3JlJiwgSURCS2V5KiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgSW5kZXhlZERCOjpPYmplY3RT
dG9yZU92ZXJ3cml0ZU1vZGUpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0UmVjb3Jk
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0RGVsZXRlUmVjb3JkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0Q2xlYXJPYmplY3RTdG9yZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmKTsKKyAgICBSZWY8SURCUmVxdWVzdD4g
cmVxdWVzdENvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0Q291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
Jik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RHZXRWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICBSZWY8SURC
UmVxdWVzdD4gcmVxdWVzdEdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgm
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdE9w
ZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgY29uc3Qg
SURCQ3Vyc29ySW5mbyYpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0T3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7
CisgICAgdm9pZCBpdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYsIGNvbnN0IElEQktleURhdGEmLCB1
bnNpZ25lZCBsb25nIGNvdW50KTsKKworICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpOworICAgIHZvaWQgZGVsZXRlSW5kZXgodWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CisKKyAgICB2
b2lkIGFkZFJlcXVlc3QoSURCUmVxdWVzdCYpOworICAgIHZvaWQgcmVtb3ZlUmVxdWVzdChJREJS
ZXF1ZXN0Jik7CisKKyAgICB2b2lkIGFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0KERPTUVycm9yJik7
CisKKyAgICBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgc2VydmVyQ29ubmVjdGlv
bigpOworCisgICAgdm9pZCBhY3RpdmF0ZSgpOworICAgIHZvaWQgZGVhY3RpdmF0ZSgpOworCisg
ICAgdm9pZCBvcGVyYXRpb25EaWRDb21wbGV0ZShJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uJik7CisKKyAgICBib29sIGlzRmluaXNoZWRPckZpbmlzaGluZygpIGNvbnN0OworICAgIGJv
b2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFu
c2FjdGlvblN0YXRlOjpGaW5pc2hlZDsgfQorCitwcml2YXRlOgorICAgIElEQlRyYW5zYWN0aW9u
KElEQkRhdGFiYXNlJiwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiwgSURCT3BlbkRCUmVxdWVz
dCopOworCisgICAgdm9pZCBjb21taXQoKTsKKworICAgIHZvaWQgbm90aWZ5RGlkQWJvcnQoY29u
c3QgSURCRXJyb3ImKTsKKyAgICB2b2lkIGZpbmlzaEFib3J0T3JDb21taXQoKTsKKworICAgIHZv
aWQgc2NoZWR1bGVPcGVyYXRpb24oUmVmUHRyPElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRp
b24+JiYpOworICAgIHZvaWQgb3BlcmF0aW9uVGltZXJGaXJlZCgpOworCisgICAgdm9pZCBmaXJl
T25Db21wbGV0ZSgpOworICAgIHZvaWQgZmlyZU9uQWJvcnQoKTsKKyAgICB2b2lkIGVucXVldWVF
dmVudChSZWY8RXZlbnQ+JiYpOworCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RJbmRleFJl
Y29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVkREI6OkluZGV4
UmVjb3JkVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisKKyAgICB2b2lkIGNvbW1pdE9u
U2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mKTsKKyAgICB2b2lkIGFib3J0
T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0cyhJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9u
Jik7CisKKyAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFu
c2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOworICAgIHZvaWQg
ZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAg
ICB2b2lkIGNyZWF0ZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
biYsIGNvbnN0IElEQkluZGV4SW5mbyYpOworICAgIHZvaWQgZGlkQ3JlYXRlSW5kZXhPblNlcnZl
cihjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmVPblNl
cnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgdWludDY0X3QmIG9i
amVjdFN0b3JlSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRDbGVhck9iamVjdFN0b3JlT25TZXJ2
ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgcHV0T3JB
ZGRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktl
eT4sIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZSYpOworICAgIHZvaWQgZGlkUHV0T3JBZGRPblNlcnZlcihJREJS
ZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgdm9pZCBnZXRSZWNvcmRPblNl
cnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJik7CisgICAgdm9pZCBkaWRHZXRSZWNvcmRPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3Qg
SURCUmVzdWx0RGF0YSYpOworCisgICAgdm9pZCBnZXRDb3VudE9uU2VydmVyKElEQkNsaWVudDo6
VHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICB2b2lk
IGRpZEdldENvdW50T25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsK
KworICAgIHZvaWQgZGVsZXRlUmVjb3JkT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbiYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIHZvaWQgZGlkRGVsZXRlUmVj
b3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZv
aWQgZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uJiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpOworICAgIHZvaWQgZGlkRGVsZXRl
T2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICB2b2lkIGRl
bGV0ZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0
IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1l
KTsKKyAgICB2b2lkIGRpZERlbGV0ZUluZGV4T25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYp
OworCisgICAgUmVmPElEQlJlcXVlc3Q+IGRvUmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFJlZjxJREJDdXJzb3I+JiYpOworICAgIHZvaWQgb3BlbkN1cnNvck9uU2Vy
dmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJDdXJzb3JJbmZv
Jik7CisgICAgdm9pZCBkaWRPcGVuQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElE
QlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgaXRlcmF0ZUN1cnNvck9uU2VydmVyKElEQkNsaWVu
dDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgdW5zaWdu
ZWQgbG9uZyYgY291bnQpOworICAgIHZvaWQgZGlkSXRlcmF0ZUN1cnNvck9uU2VydmVyKElEQlJl
cXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICB2b2lkIHRyYW5zaXRpb25lZFRv
RmluaXNoaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZSk7CisKKyAgICB2b2lkIGVzdGFi
bGlzaE9uU2VydmVyKCk7CisKKyAgICB2b2lkIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsKKwor
ICAgIFJlZjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKyAgICBJREJUcmFuc2FjdGlvbkluZm8g
bV9pbmZvOworCisgICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlIG1fc3RhdGUgeyBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkluYWN0aXZlIH07CisgICAgYm9vbCBtX3N0YXJ0ZWRP
blNlcnZlciB7IGZhbHNlIH07CisKKyAgICBJREJFcnJvciBtX2lkYkVycm9yOworICAgIFJlZlB0
cjxET01FcnJvcj4gbV9kb21FcnJvcjsKKworICAgIFRpbWVyIG1fb3BlcmF0aW9uVGltZXI7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVyPiBtX2FjdGl2YXRpb25UaW1lcjsKKworICAgIFJlZlB0
cjxJREJPcGVuREJSZXF1ZXN0PiBtX29wZW5EQlJlcXVlc3Q7CisKKyAgICBEZXF1ZTxSZWZQdHI8
SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4+IG1fdHJhbnNhY3Rpb25PcGVyYXRpb25R
dWV1ZTsKKyAgICBEZXF1ZTxSZWZQdHI8SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4+
IG1fYWJvcnRRdWV1ZTsKKyAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRy
PElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24+PiBtX3RyYW5zYWN0aW9uT3BlcmF0aW9u
TWFwOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4+IG1fcmVm
ZXJlbmNlZE9iamVjdFN0b3JlczsKKworICAgIEhhc2hTZXQ8UmVmUHRyPElEQlJlcXVlc3Q+PiBt
X29wZW5SZXF1ZXN0czsKKworICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZCB7IGZhbHNlIH07Cit9
OworCitjbGFzcyBUcmFuc2FjdGlvbkFjdGl2YXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVHJhbnNhY3Rpb25BY3RpdmF0b3IpOworcHVibGljOgorICAgIFRyYW5zYWN0aW9uQWN0aXZh
dG9yKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICAgICAgOiBtX3RyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHJhbnNhY3Rpb24pCisgICAgICAg
ICAgICBtX3RyYW5zYWN0aW9uLT5hY3RpdmF0ZSgpOworICAgIH0KKworICAgIH5UcmFuc2FjdGlv
bkFjdGl2YXRvcigpCisgICAgeworICAgICAgICBpZiAobV90cmFuc2FjdGlvbikKKyAgICAgICAg
ICAgIG1fdHJhbnNhY3Rpb24tPmRlYWN0aXZhdGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SURCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElE
QlRyYW5zYWN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCmluZGV4IGZlNmI1NmUuLjMzZjA4Nzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmNwcApAQCAtMjgsMjEgKzI4LDI2IEBACiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJJ
REJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURC
VmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQorSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJREJWZXJzaW9uQ2hhbmdlRXZlbnQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qg
b2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KQogICAgIDogRXZlbnQobmFtZSwgZmFsc2UgLypjYW5CdWJibGUqLywgZmFsc2UgLypjYW5jZWxh
YmxlKi8pCisgICAgLCBtX3JlcXVlc3RJZGVudGlmaWVyKHJlcXVlc3RJZGVudGlmaWVyKQorICAg
ICwgbV9vbGRWZXJzaW9uKG9sZFZlcnNpb24pCisgICAgLCBtX25ld1ZlcnNpb24obmV3VmVyc2lv
bikKK3sKK30KKworT3B0aW9uYWw8dWludDY0X3Q+IElEQlZlcnNpb25DaGFuZ2VFdmVudDo6bmV3
VmVyc2lvbigpIGNvbnN0CiB7CisgICAgaWYgKCFtX25ld1ZlcnNpb24pCisgICAgICAgIHJldHVy
biBOdWxsb3B0OworICAgIHJldHVybiBtX25ld1ZlcnNpb247CiB9CiAKLVJlZjxJREJWZXJzaW9u
Q2hhbmdlRXZlbnQ+IElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKCkKK0V2ZW50SW50ZXJm
YWNlIElEQlZlcnNpb25DaGFuZ2VFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGNhbGxlZCBvbmx5IGJ5IGRvY3VtZW50LmNyZWF0ZUV2ZW50LiBJ
IGRvbid0IHNlZSBob3cgaXQncyB2YWx1YWJsZSB0byBjcmVhdGUgYW4gZXZlbnQgd2l0aAotICAg
IC8vIHJlYWQtb25seSBvbGRWZXJzaW9uIGF0dHJpYnV0ZSBvZiAwIGFuZCBuZXdWZXJzaW9uIG9m
IG51bGw7IHByZXNlcnZpbmcgdGhhdCBiZWhhdmlvciBmb3Igbm93LgotICAgIHJldHVybiBJREJD
bGllbnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKDAsIDAsIGV2ZW50TmFtZXMoKS52
ZXJzaW9uY2hhbmdlRXZlbnQpOworICAgIHJldHVybiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbnRl
cmZhY2VUeXBlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCmlu
ZGV4IDVkMTQ5M2MuLjYzYzU3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oCkBAIC0yMywyOSArMjMsNDkg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIElE
QlZlcnNpb25DaGFuZ2VFdmVudF9oCi0jZGVmaW5lIElEQlZlcnNpb25DaGFuZ2VFdmVudF9oCisj
cHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAi
RXZlbnQuaCIKKyNpbmNsdWRlICJJREJSZXNvdXJjZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJWZXJzaW9u
Q2hhbmdlRXZlbnQgOiBwdWJsaWMgRXZlbnQgeworY2xhc3MgSURCVmVyc2lvbkNoYW5nZUV2ZW50
IGZpbmFsIDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlZlcnNp
b25DaGFuZ2VFdmVudD4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZjxJREJWZXJzaW9uQ2hhbmdl
RXZlbnQ+IGNyZWF0ZSh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IElEQlZlcnNpb25DaGFuZ2VFdmVudChJREJSZXNvdXJjZUlkZW50aWZpZXI6OmVt
cHR5VmFsdWUoKSwgb2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnRUeXBlKSk7CisgICAgfQog
Ci0gICAgdmlydHVhbCB1aW50NjRfdCBvbGRWZXJzaW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgT3B0aW9uYWw8dWludDY0X3Q+IG5ld1ZlcnNpb24oKSBjb25zdCA9IDA7CisgICAgc3RhdGlj
IFJlZjxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+IGNyZWF0ZShjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBu
ZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IElEQlZlcnNpb25DaGFuZ2VFdmVudChyZXF1ZXN0SWRlbnRp
Zmllciwgb2xkVmVyc2lvbiwgbmV3VmVyc2lvbiwgZXZlbnRUeXBlKSk7CisgICAgfQogCi1wcm90
ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgSURCVmVyc2lvbkNoYW5nZUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSk7CisgICAgY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdElkZW50aWZpZXI7IH0KKworICAgIGJv
b2wgaXNWZXJzaW9uQ2hhbmdlRXZlbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICB1aW50NjRfdCBvbGRWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9vbGRWZXJzaW9uOyB9
CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IG5ld1ZlcnNpb24oKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBJREJWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiBy
ZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lv
biwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOworCisgICAgRXZlbnRJbnRlcmZhY2Ug
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdDsKKworICAgIElEQlJlc291cmNlSWRlbnRpZmllciBtX3Jl
cXVlc3RJZGVudGlmaWVyOworICAgIHVpbnQ2NF90IG1fb2xkVmVyc2lvbjsKKyAgICB1aW50NjRf
dCBtX25ld1ZlcnNpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpFdmVudCYgZXZlbnQpIHsgcmV0dXJuIGV2ZW50LmlzVmVyc2lvbkNoYW5n
ZUV2ZW50KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAotI2VuZGlmIC8vIElE
QlZlcnNpb25DaGFuZ2VFdmVudF9oCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
QW55SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
QW55SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZGUwMTQuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUlt
cGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCQW55SW1wbC5oIgotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJBbnkuaCIKLSNpbmNsdWRlICJJREJDdXJz
b3JJbXBsLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeS5oIgotI2luY2x1ZGUgIklEQkluZGV4Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1JREJBbnk6
OklEQkFueShJREJBbnk6OlR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0eXBlKQotewotfQotCi1J
REJBbnk6OklEQkFueShSZWY8SURCRGF0YWJhc2U+JiYgZGF0YWJhc2UpCi0gICAgOiBtX3R5cGUo
SURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSkKLSAgICAsIG1fZGF0YWJhc2UoYWRvcHRSZWYoJmRh
dGFiYXNlLmxlYWtSZWYoKSkpCi17Ci19Ci0KLUlEQkFueTo6SURCQW55KFJlZjxJREJPYmplY3RT
dG9yZT4mJiBvYmplY3RTdG9yZSkKLSAgICA6IG1fdHlwZShJREJBbnk6OlR5cGU6OklEQk9iamVj
dFN0b3JlKQotICAgICwgbV9vYmplY3RTdG9yZShXVEZNb3ZlKG9iamVjdFN0b3JlKSkKLXsKLX0K
LQotSURCQW55OjpJREJBbnkoUmVmPElEQkluZGV4PiYmIGluZGV4KQotICAgIDogbV90eXBlKElE
QkFueTo6VHlwZTo6SURCSW5kZXgpCi0gICAgLCBtX2luZGV4KFdURk1vdmUoaW5kZXgpKQotewot
fQotCi1JREJBbnk6OklEQkFueShSZWY8SURCQ3Vyc29yPiYmIGN1cnNvcikKLXsKLSAgICBpZiAo
Y3Vyc29yLT5pc0tleUN1cnNvcigpKSB7Ci0gICAgICAgIG1fdHlwZSA9IElEQkFueTo6VHlwZTo6
SURCQ3Vyc29yOwotICAgICAgICBtX2N1cnNvciA9IFdURk1vdmUoY3Vyc29yKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBtX3R5cGUgPSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZTsK
LSAgICAgICAgbV9jdXJzb3JXaXRoVmFsdWUgPSBXVEZNb3ZlKGN1cnNvcik7Ci0gICAgfQotfQot
Ci1JREJBbnk6OklEQkFueShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQotICAgIDogbV90eXBl
KElEQkFueTo6VHlwZTo6S2V5UGF0aCkKLSAgICAsIG1faWRiS2V5UGF0aChrZXlQYXRoKQotewot
fQotCi1JREJBbnk6OklEQkFueShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUp
Ci0gICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpTY3JpcHRWYWx1ZSkKLSAgICAsIG1fc2NyaXB0
VmFsdWUodmFsdWUpCi17Ci19Ci0KLUlEQkFueTo6fklEQkFueSgpCi17Ci19Ci0KLVJlZlB0cjxX
ZWJDb3JlOjpJREJEYXRhYmFzZT4gSURCQW55OjppZGJEYXRhYmFzZSgpCi17Ci0gICAgQVNTRVJU
KG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNlKTsKLSAgICByZXR1cm4gbV9kYXRh
YmFzZS5nZXQoKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OkRPTVN0cmluZ0xpc3Q+IElEQkFueTo6
ZG9tU3RyaW5nTGlzdCgpCi17Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxXZWJD
b3JlOjpJREJDdXJzb3I+IElEQkFueTo6aWRiQ3Vyc29yKCkKLXsKLSAgICBBU1NFUlQobV90eXBl
ID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yIHx8IG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklE
QkN1cnNvcldpdGhWYWx1ZSk7Ci0gICAgcmV0dXJuIG1fY3Vyc29yLmdldCgpOwotfQotCi1SZWZQ
dHI8V2ViQ29yZTo6SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJBbnk6OmlkYkN1cnNvcldpdGhWYWx1
ZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhW
YWx1ZSk7Ci0gICAgcmV0dXJuIG1fY3Vyc29yV2l0aFZhbHVlLmdldCgpOwotfQotCi1SZWZQdHI8
V2ViQ29yZTo6SURCRmFjdG9yeT4gSURCQW55OjppZGJGYWN0b3J5KCkKLXsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4PiBJREJBbnk6OmlkYkluZGV4
KCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCSW5kZXgpOwotICAg
IHJldHVybiBtX2luZGV4LmdldCgpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmU+IElEQkFueTo6aWRiT2JqZWN0U3RvcmUoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURC
QW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3RvcmUuZ2V0
KCk7Ci19Ci0KLUlEQk9iamVjdFN0b3JlKiBJREJBbnk6Om1vZGVybklEQk9iamVjdFN0b3JlKCkK
LXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3RvcmUpOwot
ICAgIHJldHVybiBtX29iamVjdFN0b3JlLmdldCgpOwotfQotCi1JREJJbmRleCogSURCQW55Ojpt
b2Rlcm5JREJJbmRleCgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklE
QkluZGV4KTsKLSAgICByZXR1cm4gbV9pbmRleC5nZXQoKTsKLX0KLQotSURCQ3Vyc29yKiBJREJB
bnk6Om1vZGVybklEQkN1cnNvcigpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5
cGU6OklEQkN1cnNvciB8fCBtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFs
dWUpOwotICAgIGlmIChtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3IpCi0gICAgICAg
IHJldHVybiBtX2N1cnNvci5nZXQoKTsKLSAgICByZXR1cm4gbV9jdXJzb3JXaXRoVmFsdWUuZ2V0
KCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4gSURCQW55OjppZGJUcmFu
c2FjdGlvbigpCi17Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBJREJBbnk6OnNjcmlwdFZhbHVlKCkKLXsKLSAgICByZXR1cm4gbV9zY3Jp
cHRWYWx1ZTsKLX0KLQotaW50NjRfdCBJREJBbnk6OmludGVnZXIoKQotewotICAgIHJldHVybiBt
X2ludGVnZXI7Ci19Ci0KLWNvbnN0IFN0cmluZyYgSURCQW55OjpzdHJpbmcoKQotewotICAgIHJl
dHVybiBtX3N0cmluZzsKLX0KLQotY29uc3QgSURCS2V5UGF0aCYgSURCQW55OjprZXlQYXRoKCkK
LXsKLSAgICByZXR1cm4gbV9pZGJLZXlQYXRoOwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGll
bnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkFueUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJBbnlJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYzM5ZGIuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFu
eUltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBJREJBbnlJbXBsX2gKLSNkZWZpbmUgSURCQW55SW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlSW1wbC5oIgotI2luY2x1ZGUgIklEQkluZGV4SW1wbC5oIgotI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlSW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50
IHsKLQotY2xhc3MgSURCQW55IDogcHVibGljIFdlYkNvcmU6OklEQkFueSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShSZWY8SURCRGF0YWJhc2U+JiYgZGF0YWJh
c2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShXVEZNb3ZlKGRh
dGFiYXNlKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWY8SURCQW55PiBjcmVhdGUoUmVmPElE
Qk9iamVjdFN0b3JlPiYmIG9iamVjdFN0b3JlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSURCQW55KFdURk1vdmUob2JqZWN0U3RvcmUpKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFJlZjxJREJBbnk+IGNyZWF0ZShSZWY8SURCSW5kZXg+JiYgaW5kZXgpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJBbnkoV1RGTW92ZShpbmRleCkpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3JlYXRlKFJlZjxJREJDdXJzb3I+JiYgY3Vy
c29yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoV1RGTW92ZShj
dXJzb3IpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJBbnkoa2V5UGF0aCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWZQdHI8SURCQW55PiBj
cmVhdGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkodmFsdWUpKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgUmVmUHRyPElEQkFueT4gY3JlYXRlVW5kZWZpbmVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCQW55KElEQkFueTo6VHlwZTo6VW5kZWZpbmVkKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB+SURCQW55KCk7Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3R5cGU7IH0KLSAgICBSZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTGlzdD4gZG9t
U3RyaW5nTGlzdCgpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJDdXJzb3I+IGlkYkN1
cnNvcigpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJDdXJzb3JXaXRoVmFsdWU+IGlk
YkN1cnNvcldpdGhWYWx1ZSgpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFz
ZT4gaWRiRGF0YWJhc2UoKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCRmFjdG9yeT4g
aWRiRmFjdG9yeSgpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gaWRiSW5k
ZXgoKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IGlkYk9iamVj
dFN0b3JlKCkgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBpZGJU
cmFuc2FjdGlvbigpIGZpbmFsOwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBz
Y3JpcHRWYWx1ZSgpIGZpbmFsOwotICAgIGludDY0X3QgaW50ZWdlcigpIGZpbmFsOwotICAgIGNv
bnN0IFN0cmluZyYgc3RyaW5nKCkgZmluYWw7Ci0gICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCgpIGZpbmFsOwotCi0gICAgSURCT2JqZWN0U3RvcmUqIG1vZGVybklEQk9iamVjdFN0b3JlKCk7
Ci0gICAgSURCSW5kZXgqIG1vZGVybklEQkluZGV4KCk7Ci0gICAgSURCQ3Vyc29yKiBtb2Rlcm5J
REJDdXJzb3IoKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBJREJBbnkoSURCQW55OjpUeXBl
KTsKLSAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQkRhdGFiYXNlPiYmKTsKLSAgICBleHBsaWNp
dCBJREJBbnkoUmVmPElEQk9iamVjdFN0b3JlPiYmKTsKLSAgICBleHBsaWNpdCBJREJBbnkoUmVm
PElEQkluZGV4PiYmKTsKLSAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQkN1cnNvcj4mJik7Ci0g
ICAgZXhwbGljaXQgSURCQW55KGNvbnN0IElEQktleVBhdGgmKTsKLSAgICBleHBsaWNpdCBJREJB
bnkoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKLQotICAgIElEQkFueTo6VHlwZSBt
X3R5cGUgeyBJREJBbnk6OlR5cGU6OlVuZGVmaW5lZCB9OwotICAgIFJlZlB0cjxJREJEYXRhYmFz
ZT4gbV9kYXRhYmFzZTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7
Ci0gICAgUmVmUHRyPElEQkluZGV4PiBtX2luZGV4OwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1f
Y3Vyc29yOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fY3Vyc29yV2l0aFZhbHVlOwotCi0gICAg
Y29uc3QgSURCS2V5UGF0aCBtX2lkYktleVBhdGg7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgbV9zY3JpcHRWYWx1ZTsKLSAgICBjb25zdCBTdHJpbmcgbV9zdHJpbmc7Ci0gICAg
Y29uc3QgaW50NjRfdCBtX2ludGVnZXIgeyAwIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJREJD
bGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQkFueUltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRv
U2VydmVyLmNwcAppbmRleCBkZDU4NTlkLi41YmNlZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlv
blRvU2VydmVyLmNwcApAQCAtMjgsOCArMjgsOSBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIklEQktleVJhbmdl
RGF0YS5oIgotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3RJbXBsLmgiCisjaW5jbHVkZSAiSURC
T3BlbkRCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3REYXRhLmgiCiAjaW5jbHVkZSAi
SURCUmVzdWx0RGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9u
VG9TZXJ2ZXIuaAppbmRleCA5MjI5YmQ1Li4yMTYwOGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25U
b1NlcnZlci5oCkBAIC0zOSwxNSArMzksMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgSURCQ3Vyc29ySW5mbzsKK2NsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCRXJyb3I7CiBj
bGFzcyBJREJPYmplY3RTdG9yZUluZm87CitjbGFzcyBJREJPcGVuREJSZXF1ZXN0OwogY2xhc3Mg
SURCUmVzdWx0RGF0YTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uOwogCiBuYW1lc3BhY2UgSURCQ2xp
ZW50IHsKIAotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJPcGVuREJSZXF1ZXN0OwotY2xh
c3MgSURCVHJhbnNhY3Rpb247CiBjbGFzcyBUcmFuc2FjdGlvbk9wZXJhdGlvbjsKIAogY2xhc3Mg
SURCQ29ubmVjdGlvblRvU2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQ29ubmVjdGlvblRv
U2VydmVyPiB7CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZjxJREJDb25u
ZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsKIAotICAgIEhhc2hNYXA8SURCUmVz
b3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCQ2xpZW50OjpJREJPcGVuREJSZXF1ZXN0Pj4gbV9v
cGVuREJSZXF1ZXN0TWFwOworICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQ
dHI8SURCT3BlbkRCUmVxdWVzdD4+IG1fb3BlbkRCUmVxdWVzdE1hcDsKICAgICBIYXNoTWFwPHVp
bnQ2NF90LCBJREJEYXRhYmFzZSo+IG1fZGF0YWJhc2VDb25uZWN0aW9uTWFwOwogICAgIEhhc2hN
YXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+PiBtX3BlbmRp
bmdUcmFuc2FjdGlvbnM7CiAgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4+IG1fY29tbWl0dGluZ1RyYW5zYWN0aW9uczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JJbXBs
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM1ZTRkNi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29ySW1wbC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJHZXRSZXN1bHQuaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotUmVmPElE
QkN1cnNvcj4gSURCQ3Vyc29yOjpjcmVhdGUoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJ
REJJbmRleCYgaW5kZXgsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yKHRyYW5zYWN0aW9uLCBpbmRleCwgaW5mbykpOwotfQot
Ci1JREJDdXJzb3I6OklEQkN1cnNvcihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQk9i
amVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLSAgICA6
IEFjdGl2ZURPTU9iamVjdCh0cmFuc2FjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0g
ICAgLCBtX2luZm8oaW5mbykKLSAgICAsIG1fc291cmNlKElEQkFueTo6Y3JlYXRlKG9iamVjdFN0
b3JlKS5sZWFrUmVmKCkpCi0gICAgLCBtX29iamVjdFN0b3JlKCZvYmplY3RTdG9yZSkKLXsKLSAg
ICBzdXNwZW5kSWZOZWVkZWQoKTsKLX0KLQotSURCQ3Vyc29yOjpJREJDdXJzb3IoSURCVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQkN1cnNvckluZm8m
IGluZm8pCi0gICAgOiBBY3RpdmVET01PYmplY3QodHJhbnNhY3Rpb24uc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQotICAgICwgbV9pbmZvKGluZm8pCi0gICAgLCBtX3NvdXJjZShJREJBbnk6OmNy
ZWF0ZShpbmRleCkubGVha1JlZigpKQotICAgICwgbV9pbmRleCgmaW5kZXgpCi17Ci0gICAgc3Vz
cGVuZElmTmVlZGVkKCk7Ci19Ci0KLUlEQkN1cnNvcjo6fklEQkN1cnNvcigpCi17Ci19Ci0KLWJv
b2wgSURCQ3Vyc29yOjpzb3VyY2VzRGVsZXRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb2JqZWN0
U3RvcmUpCi0gICAgICAgIHJldHVybiBtX29iamVjdFN0b3JlLT5pc0RlbGV0ZWQoKTsKLQotICAg
IEFTU0VSVChtX2luZGV4KTsKLSAgICByZXR1cm4gbV9pbmRleC0+aXNEZWxldGVkKCkgfHwgbV9p
bmRleC0+bW9kZXJuT2JqZWN0U3RvcmUoKS5pc0RlbGV0ZWQoKTsKLX0KLQotSURCT2JqZWN0U3Rv
cmUmIElEQkN1cnNvcjo6ZWZmZWN0aXZlT2JqZWN0U3RvcmUoKSBjb25zdAotewotICAgIGlmICht
X29iamVjdFN0b3JlKQotICAgICAgICByZXR1cm4gKm1fb2JqZWN0U3RvcmU7Ci0KLSAgICBBU1NF
UlQobV9pbmRleCk7Ci0gICAgcmV0dXJuIG1faW5kZXgtPm1vZGVybk9iamVjdFN0b3JlKCk7Ci19
Ci0KLUlEQlRyYW5zYWN0aW9uJiBJREJDdXJzb3I6OnRyYW5zYWN0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5tb2Rlcm5UcmFuc2FjdGlvbigpOwotfQot
Ci1jb25zdCBTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSURCQ3Vyc29yOjpkaXJlY3Rpb25Ub1N0cmluZyhtX2luZm8uY3Vyc29yRGlyZWN0aW9uKCkp
OwotfQotCi1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURCQ3Vyc29yOjprZXkoKSBj
b25zdAotewotICAgIHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50S2V5OwotfQotCi1jb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURCQ3Vyc29yOjpwcmltYXJ5S2V5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlLZXk7Ci19Ci0KLWNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6OnZhbHVlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlOwotfQotCi1JREJBbnkqIElEQkN1cnNvcjo6
c291cmNlKCkKLXsKLSAgICByZXR1cm4gJm1fc291cmNlLmdldCgpOwotfQotCi1SZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjp1cGRhdGUiKTsKLQotICAg
IGlmIChzb3VyY2VzRGVsZXRlZCgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vy
c29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4i
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCF0cmFuc2FjdGlv
bigpLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgdHJh
bnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIGlmICh0cmFuc2FjdGlvbigpLmlzUmVhZE9ubHkoKSkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7Ci0gICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUn
IG9uICdJREJDdXJzb3InOiBUaGUgcmVjb3JkIG1heSBub3QgYmUgdXBkYXRlZCBpbnNpZGUgYSBy
ZWFkLW9ubHkgdHJhbnNhY3Rpb24uIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIGlmICghbV9nb3RWYWx1ZSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1
cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFzdCBpdHMgZW5kLiIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoaXNLZXlDdXJzb3IoKSkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVy
cm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvciBpcyBhIGtleSBjdXJzb3IuIik7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8mIG9iamVjdFN0b3Jl
ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLSAgICBhdXRvJiBrZXlQYXRoID0gb2JqZWN0U3Rv
cmUuaW5mbygpLmtleVBhdGgoKTsKLSAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtl
eVBhdGguaXNOdWxsKCk7Ci0gICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJlZlB0
cjxJREJLZXk+IGtleVBhdGhLZXkgPSBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoZXhlYywgdmFsdWUsIGtleVBhdGgpOwotICAgICAgICBJREJLZXlEYXRhIGtleVBh
dGhLZXlEYXRhKGtleVBhdGhLZXkuZ2V0KCkpOwotICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwg
a2V5UGF0aEtleURhdGEgIT0gbV9jdXJyZW50UHJpbWFyeUtleURhdGEpIHsKLSAgICAgICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24g
J0lEQkN1cnNvcic6IFRoZSBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIG9mIHRoaXMgY3Vyc29yIHVz
ZXMgaW4tbGluZSBrZXlzIGFuZCBldmFsdWF0aW5nIHRoZSBrZXkgcGF0aCBvZiB0aGUgdmFsdWUg
cGFyYW1ldGVyIHJlc3VsdHMgaW4gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgY3Vyc29yJ3Mg
ZWZmZWN0aXZlIGtleS4iKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgYXV0byByZXF1ZXN0ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5wdXRG
b3JDdXJzb3JVcGRhdGUoZXhlYywgdmFsdWUuanNWYWx1ZSgpLCBtX2RlcHJlY2F0ZWRDdXJyZW50
UHJpbWFyeUtleS5qc1ZhbHVlKCksIGVjKTsKLSAgICBpZiAoZWMuY29kZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQocmVxdWVzdCk7Ci0gICAgcmVxdWVzdC0+c2V0U291
cmNlKCp0aGlzKTsKLSAgICArK21fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7Ci0KLSAgICByZXR1
cm4gcmVxdWVzdDsKLX0KLQotdm9pZCBJREJDdXJzb3I6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBj
b3VudCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCQ3Vyc29yOjphZHZhbmNlIik7Ci0KLSAgICBpZiAoIW1fcmVxdWVzdCkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghY291bnQpIHsKLSAgICAgICAgZWMu
Y29kZSA9IFR5cGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2FkdmFuY2UnIG9uICdJREJDdXJzb3InOiBBIGNvdW50IGFyZ3VtZW50
IHdpdGggdmFsdWUgMCAoemVybykgd2FzIHN1cHBsaWVkLCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAw
LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZXNEZWxldGVkKCkp
IHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2FkdmFuY2UnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVj
dGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmICghdHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwot
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2
YW5jZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5p
c2hlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9nb3RWYWx1ZSkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVy
cm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnYWR2YW5jZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQg
b3IgaGFzIGl0ZXJhdGVkIHBhc3QgaXRzIGVuZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKLQotICAgIHVuY2hlY2tlZEl0ZXJhdGVDdXJzb3Io
SURCS2V5RGF0YSgpLCBjb3VudCk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCi17Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb250aW51ZUZ1bmN0aW9uKElEQktleURhdGEoKSwgZWMpOwotfQotCi12b2lk
IElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5VmFsdWUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgm
Y29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5OwotICAgIGlmICgha2V5VmFsdWUuanNW
YWx1ZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGtleSA9IHNjcmlwdFZhbHVlVG9JREJLZXko
JnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOwotCi0gICAgY29udGludWVGdW5jdGlvbihrZXkuZ2V0
KCksIGVjKTsKLX0KLQotdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURC
S2V5RGF0YSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24gKHRvIGtleSAlcykiLCBrZXku
bG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKCFtX3JlcXVlc3QpIHsK
LSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VzRGVsZXRlZCgpKSB7
Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0
aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCF0cmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0g
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250
aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5p
c2hlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9nb3RWYWx1ZSkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVy
cm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5nIGl0ZXJhdGVk
IG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIWtleS5pc051bGwoKSAmJiAha2V5LmlzVmFsaWQoKSkgewotICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURC
Q3Vyc29yJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9pbmZvLmlzRGlyZWN0aW9uRm9yd2FyZCgpKSB7Ci0g
ICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5jb21wYXJlKG1fY3VycmVudEtleURhdGEp
IDw9IDApIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0
YUVycm9yOwotICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHBhcmFtZXRlciBpcyBsZXNz
IHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBjdXJzb3IncyBwb3NpdGlvbi4iKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIWtleS5pc051bGwoKSAmJiBrZXku
Y29tcGFyZShtX2N1cnJlbnRLZXlEYXRhKSA+PSAwKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUg
cGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGlzIGN1cnNvcidzIHBvc2l0
aW9uLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9nb3RWYWx1ZSA9IGZhbHNl
OwotCi0gICAgdW5jaGVja2VkSXRlcmF0ZUN1cnNvcihrZXksIDApOwotfQotCi12b2lkIElEQkN1
cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJLZXlEYXRhJiBrZXksIHVuc2ln
bmVkIGxvbmcgY291bnQpCi17Ci0gICAgKyttX291dHN0YW5kaW5nUmVxdWVzdENvdW50OwotCi0g
ICAgbV9yZXF1ZXN0LT53aWxsSXRlcmF0ZUN1cnNvcigqdGhpcyk7Ci0gICAgdHJhbnNhY3Rpb24o
KS5pdGVyYXRlQ3Vyc29yKCp0aGlzLCBrZXksIGNvdW50KTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0co
SW5kZXhlZERCLCAiSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbiIpOwotCi0gICAgaWYgKHNvdXJj
ZXNEZWxldGVkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3Vy
Y2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3Rp
dmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0
aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFuc2FjdGlvbiBp
cyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKHRyYW5zYWN0aW9uKCkuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UmVhZE9ubHlFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1
cnNvcic6IFRoZSByZWNvcmQgbWF5IG5vdCBiZSBkZWxldGVkIGluc2lkZSBhIHJlYWQtb25seSB0
cmFuc2FjdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYg
KCFtX2dvdFZhbHVlKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJl
aW5nIGl0ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChpc0tleUN1cnNvcigpKSB7Ci0gICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUn
IG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1cnNvci4iKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byByZXF1ZXN0ID0gZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoKS5tb2Rlcm5EZWxldGUoY29udGV4dCwgbV9kZXByZWNhdGVkQ3VycmVudFByaW1h
cnlLZXkuanNWYWx1ZSgpLCBlYyk7Ci0gICAgaWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgQVNTRVJUKHJlcXVlc3QpOwotICAgIHJlcXVlc3QtPnNldFNvdXJjZSgq
dGhpcyk7Ci0gICAgKyttX291dHN0YW5kaW5nUmVxdWVzdENvdW50OwotCi0gICAgcmV0dXJuIHJl
cXVlc3Q7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURCUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCi17Ci0gICAgTE9HKEluZGV4ZWRE
QiwgIklEQkN1cnNvcjo6c2V0R2V0UmVzdWx0IC0gY3VycmVudCBrZXkgJXMiLCBnZXRSZXN1bHQu
a2V5RGF0YSgpLmxvZ2dpbmdTdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTAwKS51dGY4KCkuZGF0YSgp
KTsKLQotICAgIGF1dG8qIGNvbnRleHQgPSByZXF1ZXN0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghZ2V0UmVz
dWx0LmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRLZXkgPSB7IH07
Ci0gICAgICAgIG1fY3VycmVudEtleURhdGEgPSB7IH07Ci0gICAgICAgIG1fZGVwcmVjYXRlZEN1
cnJlbnRQcmltYXJ5S2V5ID0geyB9OwotICAgICAgICBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YSA9
IHsgfTsKLSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0geyB9OwotCi0gICAgICAg
IG1fZ290VmFsdWUgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fZGVw
cmVjYXRlZEN1cnJlbnRLZXkgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBnZXRS
ZXN1bHQua2V5RGF0YSgpKTsKLSAgICBtX2N1cnJlbnRLZXlEYXRhID0gZ2V0UmVzdWx0LmtleURh
dGEoKTsKLSAgICBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleSA9IGlkYktleURhdGFUb1Nj
cmlwdFZhbHVlKGNvbnRleHQsIGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgpKTsKLSAgICBtX2N1
cnJlbnRQcmltYXJ5S2V5RGF0YSA9IGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgpOwotCi0gICAg
aWYgKGlzS2V5Q3Vyc29yKCkpCi0gICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRWYWx1ZSA9IHsg
fTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRWYWx1ZSA9IGRlc2VyaWFs
aXplSURCVmFsdWVEYXRhKCpjb250ZXh0LCBnZXRSZXN1bHQudmFsdWVCdWZmZXIoKSk7Ci0KLSAg
ICBtX2dvdFZhbHVlID0gdHJ1ZTsKLX0KLQotY29uc3QgY2hhciogSURCQ3Vyc29yOjphY3RpdmVE
T01PYmplY3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIklEQkN1cnNvciI7Ci19Ci0KLWJv
b2wgSURCQ3Vyc29yOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSURCQ3Vyc29yOjpoYXNQZW5kaW5nQWN0aXZp
dHkoKSBjb25zdAotewotICAgIHJldHVybiBtX291dHN0YW5kaW5nUmVxdWVzdENvdW50OwotfQot
Ci12b2lkIElEQkN1cnNvcjo6ZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQoKQotewot
ICAgIEFTU0VSVChtX291dHN0YW5kaW5nUmVxdWVzdENvdW50KTsKLSAgICAtLW1fb3V0c3RhbmRp
bmdSZXF1ZXN0Q291bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29y
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNv
ckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM1YzkxNS4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29ySW1w
bC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IElEQkN1cnNvckltcGxfaAotI2RlZmluZSBJREJDdXJzb3JJbXBsX2gKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQW55SW1wbC5oIgotI2luY2x1ZGUgIklE
QkN1cnNvckluZm8uaCIKLSNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJHZXRSZXN1bHQ7Ci0KLW5hbWVzcGFjZSBJREJDbGll
bnQgewotCi1jbGFzcyBJREJJbmRleDsKLWNsYXNzIElEQk9iamVjdFN0b3JlOwotY2xhc3MgSURC
VHJhbnNhY3Rpb247Ci0KLWNsYXNzIElEQkN1cnNvciA6IHB1YmxpYyBXZWJDb3JlOjpJREJDdXJz
b3JXaXRoVmFsdWUsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8SURCQ3Vyc29yPiBjcmVhdGUoSURCVHJhbnNhY3Rpb24mLCBJREJJbmRleCYsIGNvbnN0
IElEQkN1cnNvckluZm8mKTsKLQotICAgIHZpcnR1YWwgfklEQkN1cnNvcigpOwotCi0gICAgLy8g
SW1wbGVtZW50IHRoZSBJREwKLSAgICBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbigpIGNvbnN0IGZp
bmFsOwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXkoKSBjb25zdCBmaW5h
bDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgcHJpbWFyeUtleSgpIGNvbnN0
IGZpbmFsOwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSgpIGNvbnN0
IGZpbmFsOwotICAgIElEQkFueSogc291cmNlKCkgZmluYWw7Ci0KLSAgICBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gdXBkYXRlKEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICB2b2lkIGFkdmFu
Y2UodW5zaWduZWQgbG9uZywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAg
dm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJS
ZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0KLSAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oY29u
c3QgSURCS2V5RGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotCi0gICAgY29uc3Qg
SURCQ3Vyc29ySW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQotCi0gICAgdm9p
ZCBzZXRSZXF1ZXN0KElEQlJlcXVlc3QmIHJlcXVlc3QpIHsgbV9yZXF1ZXN0ID0gJnJlcXVlc3Q7
IH0KLSAgICB2b2lkIGNsZWFyUmVxdWVzdCgpIHsgbV9yZXF1ZXN0ID0gbnVsbHB0cjsgfQotICAg
IElEQlJlcXVlc3QqIHJlcXVlc3QoKSB7IHJldHVybiBtX3JlcXVlc3Q7IH0KLQotICAgIHZvaWQg
c2V0R2V0UmVzdWx0KElEQlJlcXVlc3QmLCBjb25zdCBJREJHZXRSZXN1bHQmKTsKLQotICAgIGJv
b2wgaXNLZXlDdXJzb3IoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9v
bCBpc01vZGVybkN1cnNvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZv
aWQgZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQoKTsKLQotcHJvdGVjdGVkOgotICAg
IElEQkN1cnNvcihJREJUcmFuc2FjdGlvbiYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCQ3Vy
c29ySW5mbyYpOwotICAgIElEQkN1cnNvcihJREJUcmFuc2FjdGlvbiYsIElEQkluZGV4JiwgY29u
c3QgSURCQ3Vyc29ySW5mbyYpOwotCi1wcml2YXRlOgotICAgIC8vIEFjdGl2ZURPTU9iamVjdC4K
LSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBmaW5hbDsKLQotICAgIC8vIEN1cnNvcnMg
YXJlIGNyZWF0ZWQgd2l0aCBhbiBvdXRzdGFuZGluZyBpdGVyYXRpb24gcmVxdWVzdC4KLSAgICB1
bnNpZ25lZCBtX291dHN0YW5kaW5nUmVxdWVzdENvdW50IHsgMSB9OwotCi0gICAgSURCQ3Vyc29y
SW5mbyBtX2luZm87Ci0gICAgUmVmPElEQkFueT4gbV9zb3VyY2U7Ci0gICAgSURCT2JqZWN0U3Rv
cmUqIG1fb2JqZWN0U3RvcmUgeyBudWxscHRyIH07Ci0gICAgSURCSW5kZXgqIG1faW5kZXggeyBu
dWxscHRyIH07Ci0gICAgSURCUmVxdWVzdCogbV9yZXF1ZXN0OwotCi0gICAgYm9vbCBzb3VyY2Vz
RGVsZXRlZCgpIGNvbnN0OwotICAgIElEQk9iamVjdFN0b3JlJiBlZmZlY3RpdmVPYmplY3RTdG9y
ZSgpIGNvbnN0OwotICAgIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbigpIGNvbnN0OwotCi0g
ICAgdm9pZCB1bmNoZWNrZWRJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQktleURhdGEmLCB1bnNpZ25l
ZCBsb25nIGNvdW50KTsKLQotICAgIGJvb2wgbV9nb3RWYWx1ZSB7IGZhbHNlIH07Ci0KLSAgICBJ
REJLZXlEYXRhIG1fY3VycmVudEtleURhdGE7Ci0gICAgSURCS2V5RGF0YSBtX2N1cnJlbnRQcmlt
YXJ5S2V5RGF0YTsKLQotICAgIC8vIEZJWE1FOiBXaGVuIGRpdGNoaW5nIExlZ2FjeSBJREIgYW5k
IGNvbWJpbmluZyB0aGlzIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGFic3RyYWN0IElEQkN1cnNv
ciwKLSAgICAvLyB0aGVzZSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtZW1iZXJzIHNob3VsZCBi
ZSBKU1ZhbHVlcyBpbnN0ZWFkLgotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGVwcmVj
YXRlZEN1cnJlbnRLZXk7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9kZXByZWNhdGVk
Q3VycmVudFByaW1hcnlLZXk7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9kZXByZWNh
dGVkQ3VycmVudFZhbHVlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50Ci19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNl
bmRpZiAvLyBJREJDdXJzb3JJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JXaXRoVmFsdWVJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JXaXRoVmFsdWVJbXBsLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlZGIyYi4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29yV2l0aFZhbHVl
SW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZUltcGwuaCIKLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1l
c3BhY2UgSURCQ2xpZW50IHsKLQotUmVmPElEQkN1cnNvcldpdGhWYWx1ZT4gSURCQ3Vyc29yV2l0
aFZhbHVlOjpjcmVhdGUoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9y
ZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yV2l0aFZhbHVlKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9y
ZSwgaW5mbykpOwotfQotCi1SZWY8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFs
dWU6OmNyZWF0ZShJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQkluZGV4JiBpbmRleCwg
Y29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
REJDdXJzb3JXaXRoVmFsdWUodHJhbnNhY3Rpb24sIGluZGV4LCBpbmZvKSk7Ci19Ci0KLUlEQkN1
cnNvcldpdGhWYWx1ZTo6SURCQ3Vyc29yV2l0aFZhbHVlKElEQlRyYW5zYWN0aW9uJiB0cmFuc2Fj
dGlvbiwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJDdXJzb3JJbmZvJiBp
bmZvKQotICAgIDogSURCQ3Vyc29yKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZSwgaW5mbykKLXsK
LX0KLQotSURCQ3Vyc29yV2l0aFZhbHVlOjpJREJDdXJzb3JXaXRoVmFsdWUoSURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQkN1cnNvckluZm8mIGlu
Zm8pCi0gICAgOiBJREJDdXJzb3IodHJhbnNhY3Rpb24sIGluZGV4LCBpbmZvKQotewotfQotCi1J
REJDdXJzb3JXaXRoVmFsdWU6On5JREJDdXJzb3JXaXRoVmFsdWUoKQotewotfQotCi19IC8vIG5h
bWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvcldpdGhWYWx1ZUltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JXaXRoVmFsdWVJbXBsLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYjg0MWUuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvcldpdGhWYWx1ZUltcGwu
aAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElE
QkN1cnNvcldpdGhWYWx1ZUltcGxfaAotI2RlZmluZSBJREJDdXJzb3JXaXRoVmFsdWVJbXBsX2gK
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ3Vyc29ySW1w
bC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotY2xh
c3MgSURCQ3Vyc29yV2l0aFZhbHVlIDogcHVibGljIElEQkN1cnNvciB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxJREJDdXJzb3JXaXRoVmFsdWU+IGNyZWF0ZShJREJUcmFuc2FjdGlvbiYsIElE
Qk9iamVjdFN0b3JlJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwotICAgIHN0YXRpYyBSZWY8SURC
Q3Vyc29yV2l0aFZhbHVlPiBjcmVhdGUoSURCVHJhbnNhY3Rpb24mLCBJREJJbmRleCYsIGNvbnN0
IElEQkN1cnNvckluZm8mKTsKLQotICAgIHZpcnR1YWwgfklEQkN1cnNvcldpdGhWYWx1ZSgpOwot
Ci0gICAgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LXByaXZhdGU6Ci0gICAgSURCQ3Vyc29yV2l0aFZhbHVlKElEQlRyYW5zYWN0aW9uJiwgSURCT2Jq
ZWN0U3RvcmUmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7Ci0gICAgSURCQ3Vyc29yV2l0aFZhbHVl
KElEQlRyYW5zYWN0aW9uJiwgSURCSW5kZXgmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQkN1cnNvcldpdGhW
YWx1ZUltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
Y2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNWU5NDRlZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzMSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkRh
dGFiYXNlSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRl
ICJFdmVudFF1ZXVlLmgiCi0jaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0
SW1wbC5oIgotI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIKLSNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkltcGwuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmgiCi0jaW5j
bHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLVJlZjxJREJEYXRh
YmFzZT4gSURCRGF0YWJhc2U6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlc3VsdERhdGEm
IHJlc3VsdERhdGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCRGF0YWJhc2UoY29u
dGV4dCwgY29ubmVjdGlvbiwgcmVzdWx0RGF0YSkpOwotfQotCi1JREJEYXRhYmFzZTo6SURCRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCQ29ubmVjdGlvblRvU2Vy
dmVyJiBjb25uZWN0aW9uLCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotICAgIDog
V2ViQ29yZTo6SURCRGF0YWJhc2UoJmNvbnRleHQpCi0gICAgLCBtX3NlcnZlckNvbm5lY3Rpb24o
Y29ubmVjdGlvbikKLSAgICAsIG1faW5mbyhyZXN1bHREYXRhLmRhdGFiYXNlSW5mbygpKQotICAg
ICwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKHJlc3VsdERhdGEuZGF0YWJhc2VDb25u
ZWN0aW9uSWRlbnRpZmllcigpKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6
SURCRGF0YWJhc2UgLSBDcmVhdGluZyBkYXRhYmFzZSAlcyB3aXRoIHZlcnNpb24gJSIgUFJJdTY0
ICIgY29ubmVjdGlvbiAlIiBQUkl1NjQsIG1faW5mby5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9p
bmZvLnZlcnNpb24oKSwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKLSAgICBzdXNw
ZW5kSWZOZWVkZWQoKTsKLSAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKLSAgICBtX3Nl
cnZlckNvbm5lY3Rpb24tPnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0aGlzKTsKLX0KLQot
SURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSgpCi17Ci0gICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT51
bnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0aGlzKTsKLX0KLQotYm9vbCBJREJEYXRhYmFz
ZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fY2xvc2VkSW5T
ZXJ2ZXI7Ci19Ci0KLWNvbnN0IFN0cmluZyBJREJEYXRhYmFzZTo6bmFtZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faW5mby5uYW1lKCk7Ci19Ci0KLXVpbnQ2NF90IElEQkRhdGFiYXNlOjp2ZXJz
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLnZlcnNpb24oKTsKLX0KLQotUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKLXsK
LSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xp
c3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbmFtZSA6IG1faW5mby5vYmplY3RTdG9yZU5h
bWVzKCkpCi0gICAgICAgIG9iamVjdFN0b3JlTmFtZXMtPmFwcGVuZChuYW1lKTsKLSAgICBvYmpl
Y3RTdG9yZU5hbWVzLT5zb3J0KCk7Ci0gICAgcmV0dXJuIG9iamVjdFN0b3JlTmFtZXM7Ci19Ci0K
LVJlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYsIGNvbnN0IERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxs
cHRyOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpj
cmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykK
LXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7
Ci0KLSAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8IG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSk7Ci0KLSAgICBpZiAoIW1fdmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVy
YWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNl
JzogVGhlIGRhdGFiYXNlIGlzIG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rp
b24uIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV92ZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2luZm8uaGFzT2JqZWN0U3RvcmUobmFt
ZSkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50
RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogQW4gb2JqZWN0IHN0b3Jl
IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIWtleVBhdGguaXNOdWxsKCkgJiYgIWtleVBh
dGguaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
U3ludGF4RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGtleVBh
dGggb3B0aW9uIGlzIG5vdCBhIHZhbGlkIGtleSBwYXRoLiIpOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoYXV0b0luY3JlbWVudCAmJiAha2V5UGF0aC5pc051bGwo
KSkgewotICAgICAgICBpZiAoKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5
cGU6OlN0cmluZyAmJiBrZXlQYXRoLnN0cmluZygpLmlzRW1wdHkoKSkgfHwga2V5UGF0aC50eXBl
KCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6QXJyYXkpIHsKLSAgICAgICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yOwotICAgICAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9i
amVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgYXV0b0luY3JlbWVudCBvcHRpb24gd2Fz
IHNldCBidXQgdGhlIGtleVBhdGggb3B0aW9uIHdhcyBlbXB0eSBvciBhbiBhcnJheS4iKTsKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSW5z
dGFsbCB0aGUgbmV3IE9iamVjdFN0b3JlIGludG8gdGhlIGNvbm5lY3Rpb24ncyBtZXRhZGF0YS4K
LSAgICBJREJPYmplY3RTdG9yZUluZm8gaW5mbyA9IG1faW5mby5jcmVhdGVOZXdPYmplY3RTdG9y
ZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKLQotICAgIC8vIENyZWF0ZSB0aGUgYWN0
dWFsIElEQk9iamVjdFN0b3JlIGZyb20gdGhlIHRyYW5zYWN0aW9uLCB3aGljaCBhbHNvIHNjaGVk
dWxlcyB0aGUgb3BlcmF0aW9uIHNlcnZlciBzaWRlLgotICAgIFJlZjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+Y3JlYXRlT2JqZWN0U3Rv
cmUoaW5mbyk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCZvYmplY3RTdG9yZS5sZWFrUmVmKCkpOwot
fQotCi1SZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2Fj
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVj
dFN0b3JlcywgY29uc3QgU3RyaW5nJiBtb2RlU3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24i
KTsKLQotICAgIGlmIChtX2Nsb3NlUGVuZGluZykgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRh
YmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIGNsb3NpbmcuIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChvYmplY3RTdG9yZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vy
cm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzdG9yZU5hbWVzIHBhcmFtZXRl
ciB3YXMgZW1wdHkuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbjo6c3RyaW5nVG9N
b2RlKG1vZGVTdHJpbmcsIGVjLmNvZGUpOwotICAgIGlmIChlYy5jb2RlKSB7Ci0gICAgICAgIGVj
Lm1lc3NhZ2UgPSBtYWtlU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3Ry
YW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgbW9kZSBwcm92aWRlZCAoJyIpLCBtb2Rl
U3RyaW5nLCBBU0NJSUxpdGVyYWwoIicpIGlzIG5vdCBvbmUgb2YgJ3JlYWRvbmx5JyBvciAncmVh
ZHdyaXRlJy4iKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICht
b2RlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seSAmJiBtb2RlICE9IElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkV3JpdGUpIHsKLSAgICAgICAgZWMuY29kZSA9
IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uICYmICFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+
aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2Un
OiBBIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcuIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmVOYW1lIDog
b2JqZWN0U3RvcmVzKSB7Ci0gICAgICAgIGlmIChtX2luZm8uaGFzT2JqZWN0U3RvcmUob2JqZWN0
U3RvcmVOYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFi
YXNlJzogT25lIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlcyB3YXMgbm90IGZvdW5kLiIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvIGluZm8gPSBJREJU
cmFuc2FjdGlvbkluZm86OmNsaWVudFRyYW5zYWN0aW9uKG1fc2VydmVyQ29ubmVjdGlvbi5nZXQo
KSwgb2JqZWN0U3RvcmVzLCBtb2RlKTsKLSAgICBhdXRvIHRyYW5zYWN0aW9uID0gSURCVHJhbnNh
Y3Rpb246OmNyZWF0ZSgqdGhpcywgaW5mbyk7Ci0KLSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0
YWJhc2U6OnRyYW5zYWN0aW9uIC0gQWRkZWQgYWN0aXZlIHRyYW5zYWN0aW9uICVzIiwgaW5mby5p
ZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgbV9hY3Rp
dmVUcmFuc2FjdGlvbnMuc2V0KGluZm8uaWRlbnRpZmllcigpLCAmdHJhbnNhY3Rpb24uZ2V0KCkp
OwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKCZ0cmFuc2FjdGlvbi5sZWFrUmVmKCkpOwotfQotCi1S
ZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3Jl
LCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0g
ICAgVmVjdG9yPFN0cmluZz4gb2JqZWN0U3RvcmVzKDEpOwotICAgIG9iamVjdFN0b3Jlc1swXSA9
IG9iamVjdFN0b3JlOwotICAgIHJldHVybiB0cmFuc2FjdGlvbihjb250ZXh0LCBvYmplY3RTdG9y
ZXMsIG1vZGUsIGVjKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYg
ZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9y
ZSIpOwotCi0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikgewotICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlT2Jq
ZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBh
IHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9pbmZvLmhhc09iamVj
dFN0b3JlKG9iamVjdFN0b3JlTmFtZSkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFz
ZSc6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdhcyBub3QgZm91bmQuIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2luZm8uZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmVOYW1lKTsKLSAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+ZGVsZXRlT2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmVOYW1lKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6Y2xvc2UoKQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6Y2xvc2UgLSAlIiBQUkl1NjQsIG1fZGF0
YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7Ci0KLSAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7
Ci0gICAgbWF5YmVDbG9zZUluU2VydmVyKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6Om1heWJl
Q2xvc2VJblNlcnZlcigpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjptYXli
ZUNsb3NlSW5TZXJ2ZXIgLSAlIiBQUkl1NjQsIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmll
cik7Ci0KLSAgICBpZiAobV9jbG9zZWRJblNlcnZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gMy4zLjkgRGF0YWJhc2UgY2xvc2luZyBzdGVwcwotICAgIC8vIFdhaXQgZm9yIGFsbCB0cmFu
c2FjdGlvbnMgY3JlYXRlZCB1c2luZyB0aGlzIGNvbm5lY3Rpb24gdG8gY29tcGxldGUuCi0gICAg
Ly8gT25jZSB0aGV5IGFyZSBjb21wbGV0ZSwgdGhpcyBjb25uZWN0aW9uIGlzIGNsb3NlZC4KLSAg
ICBpZiAoIW1fYWN0aXZlVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jbG9zZWRJblNlcnZlciA9IHRydWU7Ci0gICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5k
YXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQoKnRoaXMpOwotfQotCi1jb25zdCBjaGFyKiBJREJEYXRh
YmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJJREJEYXRh
YmFzZSI7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2U6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3Bl
bnNpb24oKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIHZhbHVlIHdpbGwgc29tZXRpbWVz
IGJlIGZhbHNlIHdoZW4gZGF0YWJhc2Ugb3BlcmF0aW9ucyBhcmUgYWN0dWFsbHkgaW4gcHJvZ3Jl
c3MuCi0gICAgLy8gU3VjaCBkYXRhYmFzZSBvcGVyYXRpb25zIGRvIG5vdCB5ZXQgZXhpc3QuCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OnN0b3AoKQotewotICAgIExP
RyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6c3RvcCAtICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNv
bm5lY3Rpb25JZGVudGlmaWVyKTsKLQotICAgIFZlY3RvcjxJREJSZXNvdXJjZUlkZW50aWZpZXI+
IHRyYW5zYWN0aW9uSWRlbnRpZmllcnM7Ci0gICAgdHJhbnNhY3Rpb25JZGVudGlmaWVycy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fYWN0aXZlVHJhbnNhY3Rpb25zLnNpemUoKSk7Ci0KLSAgICBm
b3IgKGF1dG8mIGlkIDogbV9hY3RpdmVUcmFuc2FjdGlvbnMua2V5cygpKQotICAgICAgICB0cmFu
c2FjdGlvbklkZW50aWZpZXJzLnVuY2hlY2tlZEFwcGVuZChpZCk7Ci0KLSAgICBmb3IgKGF1dG8m
IGlkIDogdHJhbnNhY3Rpb25JZGVudGlmaWVycykgewotICAgICAgICBJREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5nZXQoaWQpOwotICAgICAgICBpZiAo
dHJhbnNhY3Rpb24pCi0gICAgICAgICAgICB0cmFuc2FjdGlvbi0+c3RvcCgpOwotICAgIH0KLQot
ICAgIGNsb3NlKCk7Ci19Ci0KLVJlZjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnN0YXJ0
VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbywg
SURCT3BlbkRCUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0
YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uICVzIiwgaW5mby5pZGVudGlmaWVy
KCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgQVNTRVJUKCFtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgQVNTRVJUKGluZm8ubW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKLSAgICBBU1NFUlQoIW1fY2xvc2VQ
ZW5kaW5nKTsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLQotICAgIFJl
ZjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0
aGlzLCBpbmZvLCByZXF1ZXN0KTsKLSAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9ICZ0
cmFuc2FjdGlvbi5nZXQoKTsKLQotICAgIG1fYWN0aXZlVHJhbnNhY3Rpb25zLnNldCh0cmFuc2Fj
dGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRyYW5zYWN0aW9uLmdldCgpKTsKLQotICAgIHJl
dHVybiB0cmFuc2FjdGlvbjsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6ZGlkU3RhcnRUcmFuc2Fj
dGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgQVNTRVJU
KCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0KLSAgICAvLyBJdCBpcyBwb3NzaWJsZSBm
b3IgdGhlIGNsaWVudCB0byBoYXZlIGFib3J0ZWQgYSB0cmFuc2FjdGlvbiBiZWZvcmUgdGhlIHNl
cnZlciByZXBsaWVzIGJhY2sgdGhhdCBpdCBoYXMgc3RhcnRlZC4KLSAgICBpZiAobV9hYm9ydGlu
Z1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hY3RpdmVUcmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCksICZ0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2U6OndpbGxDb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24p
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp3aWxsQ29tbWl0VHJhbnNhY3Rp
b24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIGF1dG8gcmVmVHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5z
YWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOwotICAgIEFTU0VS
VChyZWZUcmFuc2FjdGlvbik7Ci0gICAgbV9jb21taXR0aW5nVHJhbnNhY3Rpb25zLnNldCh0cmFu
c2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBXVEZNb3ZlKHJlZlRyYW5zYWN0aW9uKSk7Ci19
Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbikKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZENv
bW1pdFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dn
aW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAobV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24gPT0gJnRyYW5zYWN0aW9uKQotICAgICAgICBtX2luZm8uc2V0VmVyc2lvbih0cmFu
c2FjdGlvbi5pbmZvKCkubmV3VmVyc2lvbigpKTsKLQotICAgIGRpZENvbW1pdE9yQWJvcnRUcmFu
c2FjdGlvbih0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OndpbGxBYm9ydFRy
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCRGF0YWJhc2U6OndpbGxBYm9ydFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rpb24u
aW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAg
ICBhdXRvIHJlZlRyYW5zYWN0aW9uID0gbV9hY3RpdmVUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKLSAgICBpZiAoIXJlZlRyYW5zYWN0aW9uKQotICAg
ICAgICByZWZUcmFuc2FjdGlvbiA9IG1fY29tbWl0dGluZ1RyYW5zYWN0aW9ucy50YWtlKHRyYW5z
YWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOwotCi0gICAgQVNTRVJUKHJlZlRyYW5zYWN0aW9u
KTsKLSAgICBtX2Fib3J0aW5nVHJhbnNhY3Rpb25zLnNldCh0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpLCBXVEZNb3ZlKHJlZlRyYW5zYWN0aW9uKSk7Ci0KLSAgICBpZiAodHJhbnNhY3Rp
b24uaXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLm9yaWdp
bmFsRGF0YWJhc2VJbmZvKCkpOwotICAgICAgICBtX2luZm8gPSAqdHJhbnNhY3Rpb24ub3JpZ2lu
YWxEYXRhYmFzZUluZm8oKTsKLSAgICAgICAgbV9jbG9zZVBlbmRpbmcgPSB0cnVlOwotICAgIH0K
LX0KLQotdm9pZCBJREJEYXRhYmFzZTo6ZGlkQWJvcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRB
Ym9ydFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dn
aW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAodHJhbnNhY3Rpb24uaXNWZXJz
aW9uQ2hhbmdlKCkpIHsKLSAgICAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLm9yaWdpbmFsRGF0YWJh
c2VJbmZvKCkpOwotICAgICAgICBBU1NFUlQobV9pbmZvLnZlcnNpb24oKSA9PSB0cmFuc2FjdGlv
bi5vcmlnaW5hbERhdGFiYXNlSW5mbygpLT52ZXJzaW9uKCkpOwotICAgICAgICBtX2Nsb3NlUGVu
ZGluZyA9IHRydWU7Ci0gICAgICAgIG1heWJlQ2xvc2VJblNlcnZlcigpOwotICAgIH0KLQotICAg
IGRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2U6OmRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRDb21taXRP
ckFib3J0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxv
Z2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChtX3ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24pCi0gICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uID0gbnVsbHB0cjsKLQotI2lmbmRlZiBOREJFQlVHCi0gICAgdW5zaWduZWQgY291bnQg
PSAwOwotICAgIGlmIChtX2FjdGl2ZVRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5p
bmZvKCkuaWRlbnRpZmllcigpKSkKLSAgICAgICAgKytjb3VudDsKLSAgICBpZiAobV9jb21taXR0
aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkp
KQotICAgICAgICArK2NvdW50OwotICAgIGlmIChtX2Fib3J0aW5nVHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKQotICAgICAgICArK2NvdW50Owot
Ci0gICAgQVNTRVJUKGNvdW50ID09IDEpOwotI2VuZGlmCi0KLSAgICBtX2FjdGl2ZVRyYW5zYWN0
aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSk7Ci0gICAgbV9jb21t
aXR0aW5nVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
KTsKLSAgICBtX2Fib3J0aW5nVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbi5pbmZvKCku
aWRlbnRpZmllcigpKTsKLQotICAgIGlmIChtX2Nsb3NlUGVuZGluZykKLSAgICAgICAgbWF5YmVD
bG9zZUluU2VydmVyKCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hhbmdl
RXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWlu
dDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKLXsKLSAgICB1aW50NjRfdCBjdXJyZW50VmVyc2lvbiA9
IG1faW5mby52ZXJzaW9uKCk7Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpmaXJl
VmVyc2lvbkNoYW5nZUV2ZW50IC0gY3VycmVudCB2ZXJzaW9uICUiIFBSSXU2NCAiLCByZXF1ZXN0
ZWQgdmVyc2lvbiAlIiBQUkl1NjQgIiwgY29ubmVjdGlvbiAlIiBQUkl1NjQsIGN1cnJlbnRWZXJz
aW9uLCByZXF1ZXN0ZWRWZXJzaW9uLCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwot
Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwgbV9jbG9zZVBlbmRpbmcpIHsK
LSAgICAgICAgc2VydmVyQ29ubmVjdGlvbigpLmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQobV9k
YXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCByZXF1ZXN0SWRlbnRpZmllcik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWY8RXZlbnQ+IGV2ZW50ID0gSURCVmVyc2lvbkNoYW5n
ZUV2ZW50OjpjcmVhdGUocmVxdWVzdElkZW50aWZpZXIsIGN1cnJlbnRWZXJzaW9uLCByZXF1ZXN0
ZWRWZXJzaW9uLCBldmVudE5hbWVzKCkudmVyc2lvbmNoYW5nZUV2ZW50KTsKLSAgICBldmVudC0+
c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1
ZSgpLmVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7Ci19Ci0KLWJvb2wgSURCRGF0YWJhc2U6
OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQotewotICAgIExPRyhJbmRleGVkREIsICJJREJE
YXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCAoJSIgUFJJdTY0ICIpIiwgbV9kYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyKTsKLQotICAgIGJvb2wgcmVzdWx0ID0gV2ViQ29yZTo6SURCRGF0YWJhc2U6
OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwotCi0gICAgaWYgKGV2ZW50LmlzVmVyc2lvbkNoYW5nZUV2
ZW50KCkgJiYgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQp
Ci0gICAgICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kaWRGaXJlVmVyc2lvbkNoYW5nZUV2ZW50KG1f
ZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgZG93bmNhc3Q8SURCVmVyc2lvbkNoYW5nZUV2
ZW50PihldmVudCkucmVxdWVzdElkZW50aWZpZXIoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIElEQkRhdGFiYXNlOjpkaWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJ
bmZvJiBpbmZvKQotewotICAgIGF1dG8qIG9iamVjdFN0b3JlID0gbV9pbmZvLmluZm9Gb3JFeGlz
dGluZ09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwotICAgIEFTU0VS
VChvYmplY3RTdG9yZSk7Ci0gICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2U6OmRpZERlbGV0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRl
eEluZm8mIGluZm8pCi17Ci0gICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4
aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7Ci0gICAgQVNT
RVJUKG9iamVjdFN0b3JlKTsKLSAgICBvYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgoaW5mby5uYW1l
KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2FmY2I0Li4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRhYmFzZUltcGwuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJE
YXRhYmFzZUltcGxfaAotI2RlZmluZSBJREJEYXRhYmFzZUltcGxfaAotCi0jaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCIKLSNp
bmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlSW5mby5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlJlc3VsdERhdGE7Ci1jbGFzcyBJREJUcmFu
c2FjdGlvbjsKLWNsYXNzIElEQlRyYW5zYWN0aW9uSW5mbzsKLQotbmFtZXNwYWNlIElEQkNsaWVu
dCB7Ci0KLWNsYXNzIElEQlRyYW5zYWN0aW9uOwotCi1jbGFzcyBJREJEYXRhYmFzZSA6IHB1Ymxp
YyBXZWJDb3JlOjpJREJEYXRhYmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJEYXRh
YmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJDb25uZWN0aW9uVG9TZXJ2
ZXImLCBjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZSgp
OwotCi0gICAgLy8gSURCRGF0YWJhc2UgSURMCi0gICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25z
dCBmaW5hbDsKLSAgICB1aW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdCBmaW5hbDsKLQotICAgIFJl
ZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikg
ZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNy
ZW1lbnQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIHZv
aWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICB2b2lkIGNsb3NlKCkgZmluYWw7Ci0KLSAgICAvLyBFdmVu
dFRhcmdldAotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gSURCRGF0YWJhc2VFdmVudFRhcmdldEludGVyZmFjZVR5cGU7
IH0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7IH0KLSAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyByZWYoKTsgfQotICAg
IHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgZGVyZWYoKTsgfQotCi0gICAgY29uc3Qg
Y2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgY2FuU3Vz
cGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc3RvcCgp
IGZpbmFsOwotCi0gICAgY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZvKCkgY29uc3QgeyByZXR1
cm4gbV9pbmZvOyB9Ci0gICAgdWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcjsgfQotCi0gICAg
UmVmPElEQlRyYW5zYWN0aW9uPiBzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJ
REJUcmFuc2FjdGlvbkluZm8mLCBJREJPcGVuREJSZXF1ZXN0Jik7Ci0gICAgdm9pZCBkaWRTdGFy
dFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7Ci0KLSAgICB2b2lkIHdpbGxDb21taXRUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOwotICAgIHZvaWQgZGlkQ29tbWl0VHJhbnNhY3Rpb24o
SURCVHJhbnNhY3Rpb24mKTsKLSAgICB2b2lkIHdpbGxBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5z
YWN0aW9uJik7Ci0gICAgdm9pZCBkaWRBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7
Ci0KLSAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbik7Ci0K
LSAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIHNlcnZlckNvbm5lY3Rpb24oKSB7IHJldHVybiBt
X3NlcnZlckNvbm5lY3Rpb24uZ2V0KCk7IH0KLQotICAgIHZvaWQgZGlkQ3JlYXRlSW5kZXhJbmZv
KGNvbnN0IElEQkluZGV4SW5mbyYpOwotICAgIHZvaWQgZGlkRGVsZXRlSW5kZXhJbmZvKGNvbnN0
IElEQkluZGV4SW5mbyYpOwotCi0gICAgYm9vbCBpc0Nsb3NpbmdPckNsb3NlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2xvc2VQZW5kaW5nIHx8IG1fY2xvc2VkSW5TZXJ2ZXI7IH0KLQotICAgIGJvb2wg
ZGlzcGF0Y2hFdmVudChFdmVudCYpIGZpbmFsOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBjb25zdCBJ
REJSZXN1bHREYXRhJik7Ci0KLSAgICB2b2lkIGRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbiYpOwotCi0gICAgdm9pZCBtYXliZUNsb3NlSW5TZXJ2ZXIoKTsKLQotICAg
IGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8SURCQ29u
bmVjdGlvblRvU2VydmVyPiBtX3NlcnZlckNvbm5lY3Rpb247Ci0gICAgSURCRGF0YWJhc2VJbmZv
IG1faW5mbzsKLSAgICB1aW50NjRfdCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIgeyAw
IH07Ci0KLSAgICBib29sIG1fY2xvc2VQZW5kaW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fY2xv
c2VkSW5TZXJ2ZXIgeyBmYWxzZSB9OwotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKLSAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmll
ciwgUmVmUHRyPElEQlRyYW5zYWN0aW9uPj4gbV9hY3RpdmVUcmFuc2FjdGlvbnM7Ci0gICAgSGFz
aE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4+IG1fY29t
bWl0dGluZ1RyYW5zYWN0aW9uczsKLSAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwg
UmVmUHRyPElEQlRyYW5zYWN0aW9uPj4gbV9hYm9ydGluZ1RyYW5zYWN0aW9uczsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCRGF0YWJhc2VJbXBsX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJG
YWN0b3J5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCRmFjdG9yeUltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2JlMjJk
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJGYWN0b3J5SW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJGYWN0b3J5SW1wbC5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJET01SZXF1ZXN0U3Rh
dGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VJ
ZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdEltcGwuaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5
LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQg
ewotCi1zdGF0aWMgYm9vbCBzaG91bGRUaHJvd1NlY3VyaXR5RXhjZXB0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKGlzPERvY3VtZW50Pihjb250ZXh0
KSB8fCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2NvcGUoKSk7Ci0gICAgaWYgKGlzPERvY3VtZW50
Pihjb250ZXh0KSkgewotICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oY29udGV4dCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWRvY3VtZW50LnBhZ2UoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghY29udGV4dC5zZWN1cml0eU9yaWdp
bigpLT5jYW5BY2Nlc3NEYXRhYmFzZShjb250ZXh0LnRvcE9yaWdpbigpKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZjxJREJGYWN0b3J5PiBJREJG
YWN0b3J5OjpjcmVhdGUoSURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uKQotewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IElEQkZhY3RvcnkoY29ubmVjdGlvbikpOwotfQotCi1JREJG
YWN0b3J5OjpJREJGYWN0b3J5KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbikKLSAg
ICA6IG1fY29ubmVjdGlvblRvU2VydmVyKGNvbm5lY3Rpb24pCi17Ci19Ci0KLVJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
LQotUmVmUHRyPFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCRmFjdG9yeTo6b3BlbiIpOwot
ICAgIAotICAgIHJldHVybiBvcGVuSW50ZXJuYWwoY29udGV4dCwgbmFtZSwgMCwgZWMpLnJlbGVh
c2UoKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6
Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
TE9HKEluZGV4ZWREQiwgIklEQkZhY3Rvcnk6Om9wZW4iKTsKLSAgICAKLSAgICBpZiAoIXZlcnNp
b24pIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIHJldHVybiBvcGVuSW50ZXJuYWwoY29udGV4dCwgbmFtZSwgdmVyc2lvbiwg
ZWMpLnJlbGVhc2UoKTsKLX0KLQotUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6
Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAobmFtZS5pc051bGwoKSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFRocm93U2VjdXJp
dHlFeGNlcHRpb24oY29udGV4dCkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEFTU0VSVChjb250ZXh0LnNlY3VyaXR5
T3JpZ2luKCkpOwotICAgIEFTU0VSVChjb250ZXh0LnRvcE9yaWdpbigpKTsKLSAgICBJREJEYXRh
YmFzZUlkZW50aWZpZXIgZGF0YWJhc2VJZGVudGlmaWVyKG5hbWUsICpjb250ZXh0LnNlY3VyaXR5
T3JpZ2luKCksICpjb250ZXh0LnRvcE9yaWdpbigpKTsKLSAgICBpZiAoIWRhdGFiYXNlSWRlbnRp
Zmllci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gcmVxdWVzdCA9IElEQk9wZW5EQlJlcXVlc3Q6
OmNyZWF0ZU9wZW5SZXF1ZXN0KG1fY29ubmVjdGlvblRvU2VydmVyLmdldCgpLCBjb250ZXh0LCBk
YXRhYmFzZUlkZW50aWZpZXIsIHZlcnNpb24pOwotICAgIG1fY29ubmVjdGlvblRvU2VydmVyLT5v
cGVuRGF0YWJhc2UocmVxdWVzdC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoJnJlcXVl
c3QubGVha1JlZigpKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q+IElE
QkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlIC0gJXMiLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpOwotCi0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAKLSAgICBpZiAoc2hvdWxkVGhy
b3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0KSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VS
UjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnRleHQu
c2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgQVNTRVJUKGNvbnRleHQudG9wT3JpZ2luKCkpOwotICAg
IElEQkRhdGFiYXNlSWRlbnRpZmllciBkYXRhYmFzZUlkZW50aWZpZXIobmFtZSwgKmNvbnRleHQu
c2VjdXJpdHlPcmlnaW4oKSwgKmNvbnRleHQudG9wT3JpZ2luKCkpOwotICAgIGlmICghZGF0YWJh
c2VJZGVudGlmaWVyLmlzVmFsaWQoKSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byByZXF1ZXN0ID0gSURCT3BlbkRC
UmVxdWVzdDo6Y3JlYXRlRGVsZXRlUmVxdWVzdChtX2Nvbm5lY3Rpb25Ub1NlcnZlci5nZXQoKSwg
Y29udGV4dCwgZGF0YWJhc2VJZGVudGlmaWVyKTsKLSAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZlci0+
ZGVsZXRlRGF0YWJhc2UocmVxdWVzdC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoJnJl
cXVlc3QubGVha1JlZigpKTsKLX0KLQotc2hvcnQgSURCRmFjdG9yeTo6Y21wKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJz
dFZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2Vjb25kVmFsdWUsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RT
dGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gZmlyc3QgPSBzY3JpcHRWYWx1ZVRv
SURCS2V5KCZyZXF1ZXN0U3RhdGUsIGZpcnN0VmFsdWUpOwotICAgIFJlZlB0cjxJREJLZXk+IHNl
Y29uZCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgc2Vjb25kVmFsdWUpOwot
Ci0gICAgQVNTRVJUKGZpcnN0KTsKLSAgICBBU1NFUlQoc2Vjb25kKTsKLQotICAgIGlmICghZmly
c3QtPmlzVmFsaWQoKSB8fCAhc2Vjb25kLT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjbXAnIG9uICdJREJGYWN0b3J5JzogVGhl
IHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oZmlyc3QtPmNvbXBhcmUoc2Vjb25k
LmdldCgpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRmFjdG9yeUltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1w
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDA3NDIxLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURC
RmFjdG9yeUltcGxfaAotI2RlZmluZSBJREJGYWN0b3J5SW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIgotI2lu
Y2x1ZGUgIklEQkZhY3RvcnkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElE
QkNsaWVudCB7Ci0KLWNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7Ci0KLWNsYXNzIElEQkZhY3Rvcnkg
OiBwdWJsaWMgV2ViQ29yZTo6SURCRmFjdG9yeSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJ
REJGYWN0b3J5PiBjcmVhdGUoSURCQ29ubmVjdGlvblRvU2VydmVyJik7Ci0KLSAgICBSZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgRXhjZXB0aW9uQ29kZSYpIGZpbmFsOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6OklEQk9w
ZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJPcGVu
REJSZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG5h
bWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJikgZmluYWw7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSBm
aW5hbDsKLQotICAgIHNob3J0IGNtcChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgc2Vjb25kLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLQotcHJpdmF0ZToK
LSAgICBJREJGYWN0b3J5KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYpOwotICAgIAotICAgIFJlZlB0
cjxJREJPcGVuREJSZXF1ZXN0PiBvcGVuSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIHZlcnNpb24sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICAKLSAgICBSZWY8SURCQ29ubmVjdGlvblRvU2VydmVyPiBtX2Nvbm5lY3Rp
b25Ub1NlcnZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYg
Ly8gSURCRmFjdG9yeUltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2Y2ZThkZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM0MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQklu
ZGV4SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJE
T01SZXF1ZXN0U3RhdGUuaCIKLSNpbmNsdWRlICJJREJBbnlJbXBsLmgiCi0jaW5jbHVkZSAiSURC
QmluZGluZ1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckltcGwuaCIKLSNpbmNsdWRl
ICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlRGF0YS5oIgot
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
SW1wbC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFt
ZXNwYWNlIElEQkNsaWVudCB7Ci0KLUlEQkluZGV4OjpJREJJbmRleChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIElEQk9iamVjdFN0b3Jl
JiBvYmplY3RTdG9yZSkKLSAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKLSAgICAsIG1f
aW5mbyhpbmZvKQotICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKLXsKLSAgICBzdXNw
ZW5kSWZOZWVkZWQoKTsKLX0KLQotSURCSW5kZXg6On5JREJJbmRleCgpCi17Ci19Ci0KLWNvbnN0
IGNoYXIqIElEQkluZGV4OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gIklEQkluZGV4IjsKLX0KLQotYm9vbCBJREJJbmRleDo6Y2FuU3VzcGVuZEZvckRvY3VtZW50
U3VzcGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElEQklu
ZGV4OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9vYmplY3RT
dG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLmlzRmluaXNoZWQoKTsKLX0KLQotY29uc3QgU3RyaW5n
JiBJREJJbmRleDo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5mby5uYW1lKCk7Ci19
Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gSURCSW5kZXg6Om9iamVjdFN0b3Jl
KCkKLXsKLSAgICByZXR1cm4gJm1fb2JqZWN0U3RvcmU7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJ
REJBbnk+IElEQkluZGV4OjprZXlQYXRoQW55KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURCQW55
OjpjcmVhdGUobV9pbmZvLmtleVBhdGgoKSk7Ci19Ci0KLWNvbnN0IElEQktleVBhdGgmIElEQklu
ZGV4OjprZXlQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLmtleVBhdGgoKTsKLX0K
LQotYm9vbCBJREJJbmRleDo6dW5pcXVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLnVu
aXF1ZSgpOwotfQotCi1ib29sIElEQkluZGV4OjptdWx0aUVudHJ5KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9pbmZvLm11bHRpRW50cnkoKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVl
c3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IElEQktleVJhbmdlKiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4
OjpvcGVuQ3Vyc29yIik7Ci0KLSAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNE
ZWxldGVkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZh
bGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMg
b2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIGlmICghbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLmlz
QWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFu
c2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgdHJhbnNh
Y3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElE
QkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYy5jb2RlKTsKLSAg
ICBpZiAoZWMuY29kZSkgewotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGRpcmVjdGlvbiBw
cm92aWRlZCAoJ2ludmFsaWQtZGlyZWN0aW9uJykgaXMgbm90IG9uZSBvZiAnbmV4dCcsICduZXh0
dW5pcXVlJywgJ3ByZXYnLCBvciAncHJldnVuaXF1ZScuIik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIElEQktleVJhbmdlRGF0YSByYW5nZURhdGEgPSByYW5nZTsKLSAg
ICBpZiAocmFuZ2VEYXRhLmxvd2VyS2V5LmlzTnVsbCgpKQotICAgICAgICByYW5nZURhdGEubG93
ZXJLZXkgPSBJREJLZXlEYXRhOjptaW5pbXVtKCk7Ci0gICAgaWYgKHJhbmdlRGF0YS51cHBlcktl
eS5pc051bGwoKSkKLSAgICAgICAgcmFuZ2VEYXRhLnVwcGVyS2V5ID0gSURCS2V5RGF0YTo6bWF4
aW11bSgpOwotCi0gICAgYXV0byBpbmZvID0gSURCQ3Vyc29ySW5mbzo6aW5kZXhDdXJzb3IobV9v
YmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLmluZm8oKS5pZGVu
dGlmaWVyKCksIG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlRGF0YSwgZGlyZWN0aW9uLCBJbmRl
eGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlKTsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9y
ZS5tb2Rlcm5UcmFuc2FjdGlvbigpLnJlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsICp0aGlzLCBp
bmZvKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbkN1cnNv
ciIpOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25s
eShjb250ZXh0LCBrZXksIGVjLmNvZGUpOwotICAgIGlmIChlYy5jb2RlKSB7Ci0gICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBv
biAnSURCSW5kZXgnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4
dCwga2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbiwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6
SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQkluZGV4Ojpjb3VudCIpOwotCi0gICAgcmV0dXJuIGRvQ291bnQoY29udGV4dCwgSURCS2V5
UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVl
c3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJL
ZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9H
KEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIpOwotCi0gICAgcmV0dXJuIGRvQ291bnQoY29u
dGV4dCwgcmFuZ2UgPyBJREJLZXlSYW5nZURhdGEocmFuZ2UpIDogSURCS2V5UmFuZ2VEYXRhOjph
bGxLZXlzKCksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4
Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Y291bnQiKTsKLQotICAgIERPTVJlcXVlc3RTdGF0
ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNj
cmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKLSAgICBpZiAoIWlkYktleSB8
fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRo
ZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG9Db3VudChjb250ZXh0LCBJREJLZXlSYW5nZURhdGEo
aWRiS2V5LmdldCgpKSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURC
SW5kZXg6OmRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAg
ICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpIHsKLSAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBv
biAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxl
dGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIXJhbmdl
LmlzVmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRh
dGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byYgdHJh
bnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCk7Ci0gICAgaWYgKCF0
cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRo
ZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlcXVlc3RDb3VudChj
b250ZXh0LCAqdGhpcywgcmFuZ2UpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4g
SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
SURCS2V5UmFuZ2UqIHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6
Om9wZW5LZXlDdXJzb3IiKTsKLQotICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5p
c0RlbGV0ZWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9y
IGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9u
KCkuaXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5LZXlDdXJzb3InIG9uICdJREJJbmRleCc6IFRo
ZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0
aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJlY3Rpb25TdHJpbmcsIGVjLmNv
ZGUpOwotICAgIGlmIChlYy5jb2RlKSB7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVy
YWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuS2V5Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUg
ZGlyZWN0aW9uIHByb3ZpZGVkICgnaW52YWxpZC1kaXJlY3Rpb24nKSBpcyBub3Qgb25lIG9mICdu
ZXh0JywgJ25leHR1bmlxdWUnLCAncHJldicsIG9yICdwcmV2dW5pcXVlJy4iKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byBpbmZvID0gSURCQ3Vyc29ySW5mbzo6
aW5kZXhDdXJzb3IobV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLCBtX29iamVjdFN0
b3JlLmluZm8oKS5pZGVudGlmaWVyKCksIG1faW5mby5pZGVudGlmaWVyKCksIHJhbmdlLCBkaXJl
Y3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSk7Ci0gICAgcmV0dXJuIG1fb2Jq
ZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5yZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCAq
dGhpcywgaW5mbyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6
b3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6
Om9wZW5LZXlDdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURC
S2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkg
ewotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
b3BlbktleUN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxp
ZCBrZXkuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gb3Bl
bktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uLCBlYyk7Ci19Ci0K
LVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldCIpOwotCi0g
ICAgcmV0dXJuIGRvR2V0KGNvbnRleHQsIElEQktleVJhbmdlRGF0YShyYW5nZSksIGVjKTsKLX0K
LQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURC
SW5kZXg6OmdldCIpOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4
dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVx
dWVzdFN0YXRlLCBrZXkpOwotICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtl
eVR5cGU6OkludmFsaWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEYXRhRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdnZXQnIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFs
aWQga2V5LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZG9HZXQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVjKTsKLX0KLQot
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RT
dG9yZS5pc0RlbGV0ZWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRz
IG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBpZiAocmFuZ2UuaXNOdWxsKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBhdXRvJiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0U3RvcmUubW9kZXJuVHJh
bnNhY3Rpb24oKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLmlzQWN0aXZlKCkpIHsKLSAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7
Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdn
ZXQnIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hl
ZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRyYW5z
YWN0aW9uLnJlcXVlc3RHZXRWYWx1ZShjb250ZXh0LCAqdGhpcywgcmFuZ2UpOwotfQotCi1SZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXRLZXkiKTsKLQot
ICAgIHJldHVybiBkb0dldEtleShjb250ZXh0LCBJREJLZXlSYW5nZURhdGEocmFuZ2UpLCBlYyk7
Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWRE
QiwgIklEQkluZGV4OjpnZXRLZXkiKTsKLQotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3Rh
dGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9J
REJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKLSAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5
cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBUaGUgcGFyYW1ldGVy
IGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGRvR2V0S2V5KGNvbnRleHQsIElEQktleVJhbmdlRGF0YShpZGJLZXkuZ2V0
KCkpLCBlYyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6ZG9H
ZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCS2V5UmFuZ2VE
YXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBpZiAobV9k
ZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQklu
ZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKHJhbmdlLmlzTnVsbCkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byYgdHJhbnNhY3Rpb24gPSBt
X29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi5p
c0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rp
b24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0R2V0S2V5KGNvbnRleHQsICp0
aGlzLCByYW5nZSk7Ci19Ci0KLXZvaWQgSURCSW5kZXg6Om1hcmtBc0RlbGV0ZWQoKQotewotICAg
IEFTU0VSVCghbV9kZWxldGVkKTsKLSAgICBtX2RlbGV0ZWQgPSB0cnVlOwotfQotCi12b2lkIElE
QkluZGV4OjpyZWYoKQotewotICAgIG1fb2JqZWN0U3RvcmUucmVmKCk7Ci19Ci0KLXZvaWQgSURC
SW5kZXg6OmRlcmVmKCkKLXsKLSAgICBtX29iamVjdFN0b3JlLmRlcmVmKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCSW5kZXhJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZkMjQyNWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkluZGV4SW1wbF9oCi0jZGVmaW5lIElEQklu
ZGV4SW1wbF9oCi0KLSNpbmNsdWRlICJJREJJbmRleC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJJREJJ
bmRleEluZm8uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgSURCS2V5UmFuZ2VE
YXRhOwotCi1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmU7Ci0K
LWNsYXNzIElEQkluZGV4IDogcHVibGljIFdlYkNvcmU6OklEQkluZGV4LCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBJREJJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgY29uc3QgSURCSW5kZXhJbmZvJiwgSURCT2JqZWN0U3RvcmUmKTsKLQotICAgIHZpcnR1YWwg
fklEQkluZGV4KCk7Ci0KLSAgICAvLyBJbXBsZW1lbnQgdGhlIElETAotICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZT4gb2JqZWN0U3RvcmUoKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCQW55PiBrZXlQ
YXRoQW55KCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgdW5pcXVlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBtdWx0
aUVudHJ5KCkgY29uc3QgZmluYWw7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4g
b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKSBmaW5hbCB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsgfQotICAgIFJlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgZmlu
YWwgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJl
Y3Rpb25OZXh0KCksIGVjKTsgfQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVu
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIGZpbmFsIHsg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQo
KSwgZWMpOyB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SURC
UmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgZmluYWwgeyByZXR1cm4gb3BlbktleUN1
cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7IH0K
LSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFuZ2UsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpIGZpbmFsIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwg
a2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KLSAgICBSZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmIGVjKSBmaW5hbCB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQs
IGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQotICAgIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJLZXlSYW5nZSosIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbktleUN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYpIGZpbmFsOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGdldChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVz
dD4gZ2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotCi0gICAgY29u
c3QgSURCSW5kZXhJbmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9Ci0KLSAgICBJ
REJPYmplY3RTdG9yZSYgbW9kZXJuT2JqZWN0U3RvcmUoKSB7IHJldHVybiBtX29iamVjdFN0b3Jl
OyB9Ci0KLSAgICB2b2lkIG1hcmtBc0RlbGV0ZWQoKTsKLSAgICBib29sIGlzRGVsZXRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQotCi0gICAgYm9vbCBpc01vZGVybigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZvaWQgcmVmKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkZXJlZigpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxXZWJDb3JlOjpJ
REJSZXF1ZXN0PiBkb0NvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gZG9HZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBkb0dldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7Ci0KLSAgICAvLyBB
Y3RpdmVET01PYmplY3QKLSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29u
c3QgZmluYWw7Ci0gICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29u
c3QgZmluYWw7Ci0gICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBmaW5hbDsKLQot
ICAgIElEQkluZGV4SW5mbyBtX2luZm87Ci0KLSAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07
Ci0KLSAgICAvLyBJREJJbmRleCBvYmplY3RzIGFyZSBhbHdheXMgb3duZWQgYnkgdGhlaXIgcmVm
ZXJlbmNpbmcgSURCT2JqZWN0U3RvcmUuCi0gICAgLy8gSW5kZXhlcyB3aWxsIG5ldmVyIG91dGxp
dmUgT2JqZWN0U3RvcmVzIHNvIGl0cyBva2F5IHRvIGtlZXAgYSByYXcgQysrIHJlZmVyZW5jZSBo
ZXJlLgotICAgIElEQk9iamVjdFN0b3JlJiBtX29iamVjdFN0b3JlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSURCQ2xpZW50Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJJbmRleEltcGxfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3Jl
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2Jq
ZWN0U3RvcmVJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEwYzg3Ni4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
T2JqZWN0U3RvcmVJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY2MSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW1w
bC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJET01SZXF1
ZXN0U3RhdGUuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAi
SURCQ3Vyc29ySW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5j
bHVkZSAiSURCRXJyb3IuaCIKLSNpbmNsdWRlICJJREJJbmRleEltcGwuaCIKLSNpbmNsdWRlICJJ
REJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZURhdGEuaCIKLSNpbmNsdWRlICJJREJSZXF1
ZXN0SW1wbC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgotI2luY2x1ZGUgIklu
ZGV4ZWREQi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaCIKLSNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1SZWY8SURCT2JqZWN0U3RvcmU+IElEQk9iamVj
dFN0b3JlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCT2JqZWN0U3RvcmUoY29udGV4dCwgaW5mbywgdHJh
bnNhY3Rpb24pKTsKLX0KLQotSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbywg
SURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250
ZXh0KQotICAgICwgbV9pbmZvKGluZm8pCi0gICAgLCBtX29yaWdpbmFsSW5mbyhpbmZvKQotICAg
ICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLXsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsK
LX0KLQotSURCT2JqZWN0U3RvcmU6On5JREJPYmplY3RTdG9yZSgpCi17Ci19Ci0KLWNvbnN0IGNo
YXIqIElEQk9iamVjdFN0b3JlOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gIklEQk9iamVjdFN0b3JlIjsKLX0KLQotYm9vbCBJREJPYmplY3RTdG9yZTo6Y2FuU3Vz
cGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIElEQk9iamVjdFN0b3JlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewot
ICAgIHJldHVybiAhbV90cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpOwotfQotCi1jb25zdCBTdHJp
bmcgSURCT2JqZWN0U3RvcmU6Om5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2luZm8ubmFt
ZSgpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCQW55PiBJREJPYmplY3RTdG9yZTo6a2V5UGF0
aEFueSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEQkFueTo6Y3JlYXRlKG1faW5mby5rZXlQYXRo
KCkpOwotfQotCi1jb25zdCBJREJLZXlQYXRoIElEQk9iamVjdFN0b3JlOjprZXlQYXRoKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLmtleVBhdGgoKTsKLX0KLQotUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKCkgY29uc3QKLXsKLSAgICBSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAg
IGZvciAoYXV0byYgbmFtZSA6IG1faW5mby5pbmRleE5hbWVzKCkpCi0gICAgICAgIGluZGV4TmFt
ZXMtPmFwcGVuZChuYW1lKTsKLSAgICBpbmRleE5hbWVzLT5zb3J0KCk7Ci0KLSAgICByZXR1cm4g
aW5kZXhOYW1lczsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJPYmpl
Y3RTdG9yZTo6dHJhbnNhY3Rpb24oKQotewotICAgIHJldHVybiAmbV90cmFuc2FjdGlvbi5nZXQo
KTsKLX0KLQotYm9vbCBJREJPYmplY3RTdG9yZTo6YXV0b0luY3JlbWVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faW5mby5hdXRvSW5jcmVtZW50KCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIHJldHVy
biBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciks
IGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiBr
ZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICByZXR1cm4gb3Bl
bkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVj
KTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVu
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQo
KSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2Uq
IHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6Om9wZW5D
dXJzb3IiKTsKLQotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJPYmpl
Y3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rp
b25JbmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5z
YWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJ
REJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMuY29kZSk7Ci0g
ICAgaWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbmZv
ID0gSURCQ3Vyc29ySW5mbzo6b2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi5nZXQoKSwg
bV9pbmZvLmlkZW50aWZpZXIoKSwgcmFuZ2UsIGRpcmVjdGlvbik7Ci0gICAgUmVmPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCAq
dGhpcywgaW5mbyk7Ci0gICAgcmV0dXJuIFdURk1vdmUocmVxdWVzdCk7Ci19Ci0KLVJlZlB0cjxX
ZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykK
LXsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHko
Y29udGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkgewotICAgICAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQs
IGtleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24sIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6Omdl
dCIpOwotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwot
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0
JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmlu
aXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2Rl
bGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlk
U3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMg
YmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBE
T01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5
PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7Ci0gICAg
aWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lE
Qk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gbV90cmFuc2FjdGlvbi0+cmVxdWVzdEdldFJlY29yZChjb250ZXh0LCAqdGhpcywgaWRiS2V5
LmdldCgpKTsKLSAgICByZXR1cm4gV1RGTW92ZShyZXF1ZXN0KTsKLX0KLQotUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0Iik7Ci0K
LSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBJREJLZXlSYW5nZURhdGEga2V5
UmFuZ2VEYXRhKGtleVJhbmdlKTsKLSAgICBpZiAoIWtleVJhbmdlRGF0YS5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gbV90cmFuc2FjdGlvbi0+cmVxdWVzdEdldFJlY29yZChjb250ZXh0LCAqdGhpcywga2V5UmFu
Z2VEYXRhKTsKLSAgICByZXR1cm4gV1RGTW92ZShyZXF1ZXN0KTsKLX0KLQotUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIHB1dE9yQWRkKHN0YXRlLCB2YWx1ZSwgbnVsbHB0ciwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRlLCBJbmxpbmVLZXlDaGVjazo6UGVyZm9y
bSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OmFkZChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgUmVmUHRy
PElEQktleT4gaWRiS2V5OwotICAgIGlmICgha2V5LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGlk
YktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoZXhlY1N0YXRlLCBrZXkpOwotICAgIHJldHVybiBw
dXRPckFkZChleGVjU3RhdGUsIHZhbHVlLCBpZGJLZXksIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVP
dmVyd3JpdGVNb2RlOjpOb092ZXJ3cml0ZSwgSW5saW5lS2V5Q2hlY2s6OlBlcmZvcm0sIGVjKTsK
LX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSlND
OjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTVmFsdWUg
a2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIFJlZlB0cjxJREJLZXk+
IGlkYktleTsKLSAgICBpZiAoIWtleS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBpZGJLZXkgPSBz
Y3JpcHRWYWx1ZVRvSURCS2V5KGV4ZWNTdGF0ZSwga2V5KTsKLSAgICByZXR1cm4gcHV0T3JBZGQo
ZXhlY1N0YXRlLCB2YWx1ZSwgaWRiS2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRl
TW9kZTo6T3ZlcndyaXRlLCBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSwgZWMpOwotfQotCi1SZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKLXsKLSAgICByZXR1cm4gcHV0T3JBZGQoc3RhdGUsIHZhbHVlLCBudWxscHRyLCBJbmRleGVk
REI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlLCBJbmxpbmVLZXlDaGVjazo6
UGVyZm9ybSwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1
dEZvckN1cnNvclVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAg
ICByZXR1cm4gcHV0T3JBZGQoc3RhdGUsIHZhbHVlLCBzY3JpcHRWYWx1ZVRvSURCS2V5KHN0YXRl
LCBrZXkpLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6T3ZlcndyaXRlRm9y
Q3Vyc29yLCBJbmxpbmVLZXlDaGVjazo6RG9Ob3RQZXJmb3JtLCBlYyk7Ci19Ci0KLVJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFJlZlB0cjxJREJLZXk+IGtleSwgSW5kZXhlZERCOjpPYmpl
Y3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwgSW5saW5lS2V5Q2hlY2sgaW5saW5l
S2V5Q2hlY2ssIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQk9iamVjdFN0b3JlOjpwdXRPckFkZCIpOwotCi0gICAgLy8gVGhlIElEQiBzcGVj
IGZvciBzZXZlcmFsIElEQk9iamVjdFN0b3JlIG1ldGhvZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rp
b24gcmVsYXRlZCBleGNlcHRpb25zIHNob3VsZCBmaXJlIGJlZm9yZQotICAgIC8vIHRoZSBleGNl
cHRpb24gZm9yIGFuIG9iamVjdCBzdG9yZSBiZWluZyBkZWxldGVkLgotICAgIC8vIEhvd2V2ZXIs
IGEgaGFuZGZ1bCBvZiBXM0MgSURCIHRlc3RzIGV4cGVjdCB0aGUgZGVsZXRlZCBleGNlcHRpb24g
ZXZlbiB0aG91Z2ggdGhlIHRyYW5zYWN0aW9uIGluYWN0aXZlIGV4Y2VwdGlvbiBhbHNvIGFwcGxp
ZXMuCi0gICAgLy8gQWRkaXRpb25hbGx5LCBDaHJvbWUgYW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUg
dGVzdCwgYXMgZG9lcyBMZWdhY3kgSURCIGluIFdlYktpdC4KLSAgICAvLyBVbnRpbCB0aGlzIGlz
IHNvcnRlZCBvdXQsIHdlJ2xsIGFncmVlIHdpdGggdGhlIHRlc3QgYW5kIHRoZSBtYWpvcml0eSBz
aGFyZSBicm93c2Vycy4KLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0
U3RvcmU6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25J
bmFjdGl2ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBUaGUgdHJhbnNhY3Rpb24gaXMg
aW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVj
dFN0b3JlOiBUaGUgdHJhbnNhY3Rpb24gaXMgcmVhZC1vbmx5LiIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHZhbHVl
LCBudWxscHRyLCBudWxscHRyKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpIHsKLSAg
ICAgICAgLy8gQ2xlYXIgdGhlIERPTSBleGNlcHRpb24gZnJvbSB0aGUgc2VyaWFsaXplciBzbyB3
ZSBjYW4gZ2l2ZSBhIG1vcmUgdGFyZ2V0ZWQgZXhjZXB0aW9uLgotICAgICAgICBzdGF0ZS5jbGVh
ckV4Y2VwdGlvbigpOwotCi0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
RGF0YUNsb25lRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEFuIG9iamVjdCBjb3VsZCBu
b3QgYmUgY2xvbmVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBp
ZiAoc2VyaWFsaXplZFZhbHVlLT5oYXNCbG9iVVJMcygpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogQmxv
YlVSTHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkgewotICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RT
dG9yZTogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIGJvb2wgdXNlc0lubGluZUtleXMgPSAhbV9pbmZvLmtl
eVBhdGgoKS5pc051bGwoKTsKLSAgICBib29sIHVzZXNLZXlHZW5lcmF0b3IgPSBhdXRvSW5jcmVt
ZW50KCk7Ci0gICAgaWYgKHVzZXNJbmxpbmVLZXlzICYmIGlubGluZUtleUNoZWNrID09IElubGlu
ZUtleUNoZWNrOjpQZXJmb3JtKSB7Ci0gICAgICAgIGlmIChrZXkpIHsKLSAgICAgICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAgICAgZWMu
bWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJP
YmplY3RTdG9yZTogVGhlIG9iamVjdCBzdG9yZSB1c2VzIGluLWxpbmUga2V5cyBhbmQgdGhlIGtl
eSBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkLiIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gbWF5YmVD
cmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHN0YXRlLCB2YWx1ZSwgbV9pbmZv
LmtleVBhdGgoKSk7Ci0gICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0
YUVycm9yOwotICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogRXZhbHVhdGluZyB0aGUgb2JqZWN0
IHN0b3JlJ3Mga2V5IHBhdGggeWllbGRlZCBhIHZhbHVlIHRoYXQgaXMgbm90IGEgdmFsaWQga2V5
LiIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIGlmICh1c2VzS2V5R2VuZXJhdG9yKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoc3RhdGUs
IHZhbHVlLCBtX2luZm8ua2V5UGF0aCgpKSkgewotICAgICAgICAgICAgICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJv
cjsKLSAgICAgICAgICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
c3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBFdmFsdWF0aW5nIHRoZSBvYmplY3Qg
c3RvcmUncyBrZXkgcGF0aCBkaWQgbm90IHlpZWxkIGEgdmFsdWUuIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoa2V5UGF0aEtleSkgewotICAgICAgICAgICAgQVNTRVJUKCFrZXkpOwotICAgICAgICAgICAg
a2V5ID0ga2V5UGF0aEtleTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXVzZXNLZXlHZW5l
cmF0b3IgJiYgIWtleSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIG9iamVjdCBzdG9yZSB1c2Vz
IG91dC1vZi1saW5lIGtleXMgYW5kIGhhcyBubyBrZXkgZ2VuZXJhdG9yIGFuZCB0aGUga2V5IHBh
cmFtZXRlciB3YXMgbm90IHByb3ZpZGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNT
dGF0ZSgmc3RhdGUpOwotICAgIGlmICghY29udGV4dCkgewotICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5y
ZXF1ZXN0UHV0T3JBZGQoKmNvbnRleHQsICp0aGlzLCBrZXkuZ2V0KCksICpzZXJpYWxpemVkVmFs
dWUsIG92ZXJ3cml0ZU1vZGUpOwotICAgIHJldHVybiBhZG9wdFJlZihyZXF1ZXN0LmxlYWtSZWYo
KSk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVs
ZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2Uq
IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIHJldHVybiBk
b0RlbGV0ZShjb250ZXh0LCBrZXlSYW5nZSwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OmRvRGVsZXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uIik7Ci0K
LSAgICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVyYWwgSURCT2JqZWN0U3RvcmUgbWV0aG9kcyBz
dGF0ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVkIGV4Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVm
b3JlCi0gICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3IgYW4gb2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0
ZWQuCi0gICAgLy8gSG93ZXZlciwgYSBoYW5kZnVsIG9mIFczQyBJREIgdGVzdHMgZXhwZWN0IHRo
ZSBkZWxldGVkIGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUg
ZXhjZXB0aW9uIGFsc28gYXBwbGllcy4KLSAgICAvLyBBZGRpdGlvbmFsbHksIENocm9tZSBhbmQg
RWRnZSBhZ3JlZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2VzIExlZ2FjeSBJREIgaW4gV2ViS2l0Lgot
ICAgIC8vIFVudGlsIHRoaXMgaXMgc29ydGVkIG91dCwgd2UnbGwgYWdyZWUgd2l0aCB0aGUgdGVz
dCBhbmQgdGhlIG1ham9yaXR5IHNoYXJlIGJyb3dzZXJzLgotICAgIGlmIChtX2RlbGV0ZWQpIHsK
LSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBk
ZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJPYmplY3RT
dG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVh
ZE9ubHkoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRP
bmx5RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBy
ZWFkLW9ubHkuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIElEQktl
eVJhbmdlRGF0YSBrZXlSYW5nZURhdGEoa2V5UmFuZ2UpOwotICAgIGlmICgha2V5UmFuZ2VEYXRh
LmlzVmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRh
dGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3Qg
YSB2YWxpZCBrZXkgcmFuZ2UuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gbV90cmFuc2FjdGlvbi0+cmVxdWVzdERlbGV0
ZVJlY29yZChjb250ZXh0LCAqdGhpcywga2V5UmFuZ2VEYXRhKTsKLSAgICByZXR1cm4gV1RGTW92
ZShyZXF1ZXN0KTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
IGVjKQotewotICAgIHJldHVybiBtb2Rlcm5EZWxldGUoY29udGV4dCwga2V5LmpzVmFsdWUoKSwg
ZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBKU0M6OkpTVmFsdWUga2V5LCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0
U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVl
VG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKLSAgICBpZiAoIWlkYktleSB8fCBpZGJLZXkt
PnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGRvRGVsZXRlKGNvbnRleHQsICZJREJLZXlSYW5nZTo6Y3Jl
YXRlKGlkYktleS5nZXQoKSkuZ2V0KCksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJPYmplY3RTdG9yZTo6Y2xlYXIiKTsKLQotICAgIC8vIFRoZSBJREIgc3BlYyBmb3Igc2V2
ZXJhbCBJREJPYmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRyYW5zYWN0aW9uIHJlbGF0
ZWQgZXhjZXB0aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKLSAgICAvLyB0aGUgZXhjZXB0aW9uIGZv
ciBhbiBvYmplY3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4KLSAgICAvLyBIb3dldmVyLCBhIGhhbmRm
dWwgb2YgVzNDIElEQiB0ZXN0cyBleHBlY3QgdGhlIGRlbGV0ZWQgZXhjZXB0aW9uIGV2ZW4gdGhv
dWdoIHRoZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZSBleGNlcHRpb24gYWxzbyBhcHBsaWVzLgotICAg
IC8vIEFkZGl0aW9uYWxseSwgQ2hyb21lIGFuZCBFZGdlIGFncmVlIHdpdGggdGhlIHRlc3QsIGFz
IGRvZXMgTGVnYWN5IElEQiBpbiBXZWJLaXQuCi0gICAgLy8gVW50aWwgdGhpcyBpcyBzb3J0ZWQg
b3V0LCB3ZSdsbCBhZ3JlZSB3aXRoIHRoZSB0ZXN0IGFuZCB0aGUgbWFqb3JpdHkgc2hhcmUgYnJv
d3NlcnMuCi0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY2xlYXInIG9uICdJREJPYmplY3RTdG9yZSc6
IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0g
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnY2xlYXInIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFj
dGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlJlYWRPbmx5RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjbGVhcicgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIHJlYWQtb25seS4iKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0
aW9uLT5yZXF1ZXN0Q2xlYXJPYmplY3RTdG9yZShjb250ZXh0LCAqdGhpcyk7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKHJlcXVlc3QubGVha1JlZigpKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQklu
ZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlx
dWUsIGJvb2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4ICVzIiwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+
aXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBU
aGUgZGF0YWJhc2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4i
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0
aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBpZiAoIWtleVBhdGguaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgY29udGFpbnMgYW4gaW52YWxpZCBrZXkgcGF0
aC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG5hbWUuaXNO
dWxsKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1faW5mby5oYXNJbmRleChuYW1lKSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvcjsKLSAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUlu
ZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBBbiBpbmRleCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFt
ZSBhbHJlYWR5IGV4aXN0cy4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgaWYgKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OkFycmF5ICYm
IG11bHRpRW50cnkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkQWNjZXNzRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtl
eVBhdGggYXJndW1lbnQgd2FzIGFuIGFycmF5IGFuZCB0aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMg
dHJ1ZS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gSW5zdGFs
bCB0aGUgbmV3IEluZGV4IGludG8gdGhlIE9iamVjdFN0b3JlJ3MgaW5mby4KLSAgICBJREJJbmRl
eEluZm8gaW5mbyA9IG1faW5mby5jcmVhdGVOZXdJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUs
IG11bHRpRW50cnkpOwotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuZGlkQ3JlYXRlSW5k
ZXhJbmZvKGluZm8pOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgSURCT2JqZWN0U3RvcmUg
ZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdoaWNoIGFsc28gc2NoZWR1bGVzIHRoZSBvcGVyYXRpb24g
c2VydmVyIHNpZGUuCi0gICAgYXV0byBpbmRleCA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUluZGV4
KCp0aGlzLCBpbmZvKTsKLSAgICBSZWZQdHI8SURCSW5kZXg+IHJlZkluZGV4ID0gaW5kZXguZ2V0
KCk7Ci0KLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7Ci0g
ICAgbV9yZWZlcmVuY2VkSW5kZXhlcy5zZXQobmFtZSwgV1RGTW92ZShpbmRleCkpOwotCi0gICAg
cmV0dXJuIFdURk1vdmUocmVmSW5kZXgpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+
IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3Rv
cmU6OmluZGV4Iik7Ci0KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdpbmRleCcgb24gJ0lE
Qk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNG
aW5pc2hlZE9yRmluaXNoaW5nKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUg
dHJhbnNhY3Rpb24gaXMgZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLQotICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKLSAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZlcmVuY2VkSW5kZXhlcy5maW5kKGluZGV4TmFtZSk7Ci0g
ICAgaWYgKGl0ZXJhdG9yICE9IG1fcmVmZXJlbmNlZEluZGV4ZXMuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBpdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci0KLSAgICBhdXRvKiBpbmZvID0gbV9pbmZvLmlu
Zm9Gb3JFeGlzdGluZ0luZGV4KGluZGV4TmFtZSk7Ci0gICAgaWYgKCFpbmZvKSB7Ci0gICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJvcjsKLSAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4IHdhcyBub3QgZm91bmQuIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gaW5kZXggPSBzdGQ6Om1h
a2VfdW5pcXVlPElEQkluZGV4Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaW5mbywgKnRo
aXMpOwotICAgIFJlZlB0cjxJREJJbmRleD4gcmVmSW5kZXggPSBpbmRleC5nZXQoKTsKLSAgICBt
X3JlZmVyZW5jZWRJbmRleGVzLnNldChpbmRleE5hbWUsIFdURk1vdmUoaW5kZXgpKTsKLQotICAg
IHJldHVybiByZWZJbmRleDsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXggJXMiLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpOwotCi0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlSW5kZXgnIG9uICdJ
REJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9u
Q2hhbmdlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZh
bGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgZGF0YWJh
c2UgaXMgbm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rp
b24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIW1faW5mby5oYXNJbmRleChuYW1lKSkgewotICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIHNwZWNpZmllZCBpbmRleCB3YXMgbm90IGZvdW5kLiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byogaW5mbyA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdJ
bmRleChuYW1lKTsKLSAgICBBU1NFUlQoaW5mbyk7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5kaWREZWxldGVJbmRleEluZm8oKmluZm8pOwotCi0gICAgbV9pbmZvLmRlbGV0ZUluZGV4
KG5hbWUpOwotCi0gICAgewotICAgICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNl
ZEluZGV4TG9jayk7Ci0gICAgICAgIGlmIChhdXRvIGluZGV4ID0gbV9yZWZlcmVuY2VkSW5kZXhl
cy50YWtlKG5hbWUpKSB7Ci0gICAgICAgICAgICBpbmRleC0+bWFya0FzRGVsZXRlZCgpOwotICAg
ICAgICAgICAgbV9kZWxldGVkSW5kZXhlcy5hZGQoV1RGTW92ZShpbmRleCkpOwotICAgICAgICB9
Ci0KLSAgICB9Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kZWxldGVJbmRleChtX2luZm8uaWRlbnRp
ZmllcigpLCBuYW1lKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9y
ZTo6Y291bnQiKTsKLQotICAgIHJldHVybiBkb0NvdW50KGNvbnRleHQsIElEQktleVJhbmdlRGF0
YTo6YWxsS2V5cygpLCBlYyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7Ci0KLSAg
ICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURC
S2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7Ci0g
ICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewot
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBv
biAnSURCT2JqZWN0U3RvcmUnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRvQ291bnQoY29u
dGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVjKTsKLX0KLQotUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjb3VudCIp
OwotCi0gICAgcmV0dXJuIGRvQ291bnQoY29udGV4dCwgcmFuZ2UgPyBJREJLZXlSYW5nZURhdGEo
cmFuZ2UpIDogSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsKLX0KLQotUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkb0NvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZlcmFs
IElEQk9iamVjdFN0b3JlIG1ldGhvZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBl
eGNlcHRpb25zIHNob3VsZCBmaXJlIGJlZm9yZQotICAgIC8vIHRoZSBleGNlcHRpb24gZm9yIGFu
IG9iamVjdCBzdG9yZSBiZWluZyBkZWxldGVkLgotICAgIC8vIEhvd2V2ZXIsIGEgaGFuZGZ1bCBv
ZiBXM0MgSURCIHRlc3RzIGV4cGVjdCB0aGUgZGVsZXRlZCBleGNlcHRpb24gZXZlbiB0aG91Z2gg
dGhlIHRyYW5zYWN0aW9uIGluYWN0aXZlIGV4Y2VwdGlvbiBhbHNvIGFwcGxpZXMuCi0gICAgLy8g
QWRkaXRpb25hbGx5LCBDaHJvbWUgYW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUgdGVzdCwgYXMgZG9l
cyBMZWdhY3kgSURCIGluIFdlYktpdC4KLSAgICAvLyBVbnRpbCB0aGlzIGlzIHNvcnRlZCBvdXQs
IHdlJ2xsIGFncmVlIHdpdGggdGhlIHRlc3QgYW5kIHRoZSBtYWpvcml0eSBzaGFyZSBicm93c2Vy
cy4KLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhl
IG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJy
b3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdjb3VudCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZl
IG9yIGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBp
ZiAoIXJhbmdlLmlzVmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RDb3VudChjb250ZXh0LCAqdGhpcywgcmFuZ2Up
OwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlOjptYXJrQXNEZWxldGVkKCkKLXsKLSAgICBtX2Rl
bGV0ZWQgPSB0cnVlOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0luZm9Gb3JW
ZXJzaW9uQ2hhbmdlQWJvcnQoKQotewotICAgIG1faW5mbyA9IG1fb3JpZ2luYWxJbmZvOwotfQot
Ci12b2lkIElEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZp
c2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci17Ci0gICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX3JlZmVy
ZW5jZWRJbmRleExvY2spOwotICAgIGZvciAoYXV0byYgaW5kZXggOiBtX3JlZmVyZW5jZWRJbmRl
eGVzLnZhbHVlcygpKQotICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoaW5kZXguZ2V0KCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1w
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDZiMTUwLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUlt
cGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBJREJPYmplY3RTdG9yZUltcGxfaAotI2RlZmluZSBJREJPYmplY3RTdG9yZUltcGxfaAotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJJREJJbmRleEltcGwuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5o
IgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW5mby5oIgotI2luY2x1ZGUgIkluZGV4ZWREQi5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQktleTsKLQotc3RydWN0IElEQktl
eVJhbmdlRGF0YTsKLQotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLWNsYXNzIElEQlJlcXVlc3Q7
Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmUgOiBwdWJsaWMg
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmUsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgSURCVHJhbnNhY3Rpb24mKTsKLQot
ICAgIH5JREJPYmplY3RTdG9yZSgpIGZpbmFsOwotCi0gICAgLy8gSW1wbGVtZW50IHRoZSBJREJP
YmplY3RTdG9yZSBJREwKLSAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0IGZpbmFsOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IGtleVBhdGhBbnkoKSBjb25zdCBmaW5hbDsKLSAgICBj
b25zdCBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gaW5kZXhOYW1lcygpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBmaW5hbDsKLSAgICBib29sIGF1dG9JbmNyZW1l
bnQoKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBhZGQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
IGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURC
S2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IG9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAg
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
SURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gYWRkKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5h
bDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
a2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gY3Jl
YXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gaW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsK
LSAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5h
bDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKSBmaW5hbDsKLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBwdXRGb3JDdXJz
b3JVcGRhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXks
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBtb2Rl
cm5EZWxldGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotCi0gICAgdm9pZCBtYXJrQXNEZWxldGVkKCk7Ci0gICAg
Ym9vbCBpc0RlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KLQotICAgIGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQotCi0g
ICAgLy8gRklYTUU6IEFmdGVyIHJlbW92aW5nIExlZ2FjeUlEQiBhbmQgZm9sZGluZyBhYnN0cmFj
dC9pbXBsZW1lbnRhdGlvbiBjbGFzc2VzIHRvZ2V0aGVyLAotICAgIC8vIHRoaXMgd2lsbCBubyBs
b25nZXIgYmUgbmVjZXNzYXJ5LgotICAgIElEQlRyYW5zYWN0aW9uJiBtb2Rlcm5UcmFuc2FjdGlv
bigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KLQotICAgIHZvaWQgcm9sbGJhY2tJ
bmZvRm9yVmVyc2lvbkNoYW5nZUFib3J0KCk7Ci0KLSAgICBib29sIGlzTW9kZXJuKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB2aXNpdFJlZmVyZW5jZWRJbmRl
eGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBJREJPYmplY3RT
dG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwg
SURCVHJhbnNhY3Rpb24mKTsKLQotICAgIGVudW0gY2xhc3MgSW5saW5lS2V5Q2hlY2sgewotICAg
ICAgICBQZXJmb3JtLAotICAgICAgICBEb05vdFBlcmZvcm0sCi0gICAgfTsKLQotICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiBwdXRPckFkZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgUmVm
UHRyPElEQktleT4sIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlLCBJbmxpbmVL
ZXlDaGVjaywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OklEQlJlcXVlc3Q+IGRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiBkb0RlbGV0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAg
IGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKLSAgICBib29s
IGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsKLSAgICBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFsOwotCi0gICAgSURCT2JqZWN0U3RvcmVJ
bmZvIG1faW5mbzsKLSAgICBJREJPYmplY3RTdG9yZUluZm8gbV9vcmlnaW5hbEluZm87Ci0gICAg
UmVmPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotCi0gICAgYm9vbCBtX2RlbGV0ZWQg
eyBmYWxzZSB9OwotCi0gICAgbXV0YWJsZSBMb2NrIG1fcmVmZXJlbmNlZEluZGV4TG9jazsKLSAg
ICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4Pj4gbV9yZWZlcmVuY2Vk
SW5kZXhlczsKLSAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4+IG1fZGVsZXRl
ZEluZGV4ZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8v
IElEQk9iamVjdFN0b3JlSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNmNDBmYS4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdEltcGwuaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VJbXBsLmgiCi0jaW5j
bHVkZSAiSURCRXJyb3IuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50Lmgi
Ci0jaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1w
bC5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewot
Ci1SZWY8SURCT3BlbkRCUmVxdWVzdD4gSURCT3BlbkRCUmVxdWVzdDo6Y3JlYXRlRGVsZXRlUmVx
dWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgZGF0YWJhc2VJZGVu
dGlmaWVyKQotewotICAgIEFTU0VSVChkYXRhYmFzZUlkZW50aWZpZXIuaXNWYWxpZCgpKTsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJPcGVuREJSZXF1ZXN0KGNvbm5lY3Rpb24sIGNvbnRl
eHQsIGRhdGFiYXNlSWRlbnRpZmllciwgMCwgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZTo6RGVsZXRl
KSk7Ci19Ci0KLVJlZjxJREJPcGVuREJSZXF1ZXN0PiBJREJPcGVuREJSZXF1ZXN0OjpjcmVhdGVP
cGVuUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgZGF0YWJh
c2VJZGVudGlmaWVyLCB1aW50NjRfdCB2ZXJzaW9uKQotewotICAgIEFTU0VSVChkYXRhYmFzZUlk
ZW50aWZpZXIuaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJPcGVuREJS
ZXF1ZXN0KGNvbm5lY3Rpb24sIGNvbnRleHQsIGRhdGFiYXNlSWRlbnRpZmllciwgdmVyc2lvbiwg
SW5kZXhlZERCOjpSZXF1ZXN0VHlwZTo6T3BlbikpOwotfQotICAgIAotSURCT3BlbkRCUmVxdWVz
dDo6SURCT3BlbkRCUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYgZGF0YWJhc2VJZGVudGlmaWVyLCB1aW50NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlJlcXVl
c3RUeXBlIHJlcXVlc3RUeXBlKQotICAgIDogSURCUmVxdWVzdChjb25uZWN0aW9uLCBjb250ZXh0
KQotICAgICwgbV9kYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKQotICAgICwg
bV92ZXJzaW9uKHZlcnNpb24pCi17Ci0gICAgbV9yZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOwot
fQotCi1JREJPcGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCgpCi17Ci19Ci0KLXZvaWQg
SURCT3BlbkRCUmVxdWVzdDo6b25FcnJvcihjb25zdCBJREJSZXN1bHREYXRhJiBkYXRhKQotewot
ICAgIG1fZG9tRXJyb3IgPSBET01FcnJvcjo6Y3JlYXRlKGRhdGEuZXJyb3IoKS5uYW1lKCkpOwot
ICAgIGVucXVldWVFdmVudChJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUsICp0aGlzKSk7Ci19Ci0KLXZvaWQgSURCT3Bl
bkRCUmVxdWVzdDo6dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlkRmluaXNoKCkKLXsKLSAgICAv
LyAzLjMuNyAidmVyc2lvbmNoYW5nZSIgdHJhbnNhY3Rpb24gc3RlcHMKLSAgICAvLyBXaGVuIHRo
ZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgYWZ0ZXIgZmlyaW5nIGNvbXBsZXRlL2Fib3J0IG9u
IHRoZSB0cmFuc2FjdGlvbiwgaW1tZWRpYXRlbHkgc2V0IHJlcXVlc3QncyB0cmFuc2FjdGlvbiBw
cm9wZXJ0eSB0byBudWxsLgotICAgIG1fc2hvdWxkRXhwb3NlVHJhbnNhY3Rpb25Ub0RPTSA9IGZh
bHNlOwotfQotCi12b2lkIElEQk9wZW5EQlJlcXVlc3Q6OmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9u
Q2hhbmdlQ29tbWl0KCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6
ZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQoKSIpOwotCi0gICAgQVNTRVJUKGhh
c1BlbmRpbmdBY3Rpdml0eSgpKTsKLSAgICBBU1NFUlQobV9yZXN1bHQpOwotICAgIEFTU0VSVCht
X3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCRGF0YWJhc2UpOwotICAgIG1fdHJh
bnNhY3Rpb24tPmFkZFJlcXVlc3QoKnRoaXMpOwotCi0gICAgYXV0byBldmVudCA9IElEQlJlcXVl
c3RDb21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxz
ZSwgZmFsc2UsICp0aGlzKTsKLSAgICBtX29wZW5EYXRhYmFzZVN1Y2Nlc3NFdmVudCA9ICZldmVu
dC5nZXQoKTsKLQotICAgIGVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7Ci19Ci0KLXZvaWQg
SURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigp
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVy
VmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKSIpOwotCi0gICAgQVNTRVJUKGhhc1BlbmRpbmdBY3Rp
dml0eSgpKTsKLQotICAgIElEQkVycm9yIGlkYkVycm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpB
Ym9ydEVycm9yKTsKLSAgICBtX2RvbUVycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShpZGJFcnJvci5u
YW1lKCkpOwotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGVVbmRlZmluZWQoKTsKLQotICAg
IG1fdHJhbnNhY3Rpb24tPmFkZFJlcXVlc3QoKnRoaXMpOwotICAgIGVucXVldWVFdmVudChJREJS
ZXF1ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRy
dWUsIHRydWUsICp0aGlzKSk7Ci19Ci0KLWJvb2wgSURCT3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudChFdmVudCYgZXZlbnQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBJREJSZXF1ZXN0OjpkaXNw
YXRjaEV2ZW50KGV2ZW50KTsKLQotICAgIGlmIChtX3RyYW5zYWN0aW9uICYmIG1fdHJhbnNhY3Rp
b24tPmlzVmVyc2lvbkNoYW5nZSgpICYmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVy
cm9yRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpKQot
ICAgICAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kaWRG
aW5pc2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbigqbV90cmFuc2FjdGlvbik7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vz
cyhjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJPcGVuREJSZXF1ZXN0OjpvblN1Y2Nlc3MoKSIpOwotCi0gICAgaWYgKCFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZjxJREJEYXRhYmFzZT4g
ZGF0YWJhc2UgPSBJREJEYXRhYmFzZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IGNvbm5lY3Rpb24oKSwgcmVzdWx0RGF0YSk7Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0
ZShXVEZNb3ZlKGRhdGFiYXNlKSk7Ci0gICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5
U3RhdGU6OkRvbmU7Ci0KLSAgICBlbnF1ZXVlRXZlbnQoSURCUmVxdWVzdENvbXBsZXRpb25FdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSwgKnRoaXMp
KTsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoY29uc3QgSURC
UmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBSZWY8SURCRGF0YWJhc2U+IGRhdGFiYXNl
ID0gSURCRGF0YWJhc2U6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjb25uZWN0
aW9uKCksIHJlc3VsdERhdGEpOwotICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24g
PSBkYXRhYmFzZS0+c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24ocmVzdWx0RGF0YS50cmFu
c2FjdGlvbkluZm8oKSwgKnRoaXMpOwotCi0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5pbmZvKCku
bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKLSAg
ICBBU1NFUlQodHJhbnNhY3Rpb24tPm9yaWdpbmFsRGF0YWJhc2VJbmZvKCkpOwotCi0gICAgdWlu
dDY0X3Qgb2xkVmVyc2lvbiA9IHRyYW5zYWN0aW9uLT5vcmlnaW5hbERhdGFiYXNlSW5mbygpLT52
ZXJzaW9uKCk7Ci0gICAgdWludDY0X3QgbmV3VmVyc2lvbiA9IHRyYW5zYWN0aW9uLT5pbmZvKCku
bmV3VmVyc2lvbigpOwotCi0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6Om9u
VXBncmFkZU5lZWRlZCgpIC0gY3VycmVudCB2ZXJzaW9uIGlzICUiIFBSSXU2NCAiLCBuZXcgaXMg
JSIgUFJJdTY0LCBvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKTsKLQotICAgIG1fcmVzdWx0ID0gSURC
QW55OjpjcmVhdGUoV1RGTW92ZShkYXRhYmFzZSkpOwotICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJl
cXVlc3RSZWFkeVN0YXRlOjpEb25lOwotICAgIG1fdHJhbnNhY3Rpb24gPSBhZG9wdFJlZigmdHJh
bnNhY3Rpb24ubGVha1JlZigpKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5hZGRSZXF1ZXN0KCp0aGlz
KTsKLQotICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRW
ZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSk7Ci19
Ci0KLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MoY29uc3Qg
SURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0g
cmVzdWx0RGF0YS5kYXRhYmFzZUluZm8oKS52ZXJzaW9uKCk7Ci0KLSAgICBMT0coSW5kZXhlZERC
LCAiSURCT3BlbkRCUmVxdWVzdDo6b25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MoKSAtIGN1cnJlbnQg
dmVyc2lvbiBpcyAlIiBQUkl1NjQsIG9sZFZlcnNpb24pOwotCi0gICAgbV9yZWFkeVN0YXRlID0g
SURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0
ZVVuZGVmaW5lZCgpOwotCi0gICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6
Y3JlYXRlKG9sZFZlcnNpb24sIDAsIGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpKTsKLX0KLQot
dm9pZCBJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERh
dGEmIGRhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6OnJlcXVl
c3RDb21wbGV0ZWQiKTsKLQotICAgIC8vIElmIGFuIE9wZW4gcmVxdWVzdCB3YXMgY29tcGxldGVk
IGFmdGVyIHRoZSBwYWdlIGhhcyBuYXZpZ2F0ZWQsIGxlYXZpbmcgdGhpcyByZXF1ZXN0Ci0gICAg
Ly8gd2l0aCBhIHN0b3BwZWQgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LCB3ZSBuZWVkIHRvIG1l
c3NhZ2UgYmFjayB0byB0aGUgc2VydmVyIHNvIGl0Ci0gICAgLy8gZG9lc24ndCBoYW5nIHdhaXRp
bmcgb24gYSBkYXRhYmFzZSBjb25uZWN0aW9uIG9yIHRyYW5zYWN0aW9uIHRoYXQgd2lsbCBuZXZl
ciBleGlzdC4KLSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkgewotICAgICAgICBzd2l0Y2ggKGRh
dGEudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNlU3Vj
Y2VzczoKLSAgICAgICAgICAgIGNvbm5lY3Rpb24oKS5hYm9ydE9wZW5BbmRVcGdyYWRlTmVlZGVk
KGRhdGEuZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcigpLCBJREJSZXNvdXJjZUlkZW50aWZp
ZXI6OmVtcHR5VmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJREJS
ZXN1bHRUeXBlOjpPcGVuRGF0YWJhc2VVcGdyYWRlTmVlZGVkOgotICAgICAgICAgICAgY29ubmVj
dGlvbigpLmFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQoZGF0YS5kYXRhYmFzZUNvbm5lY3Rpb25J
ZGVudGlmaWVyKCksIGRhdGEudHJhbnNhY3Rpb25JbmZvKCkuaWRlbnRpZmllcigpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dpdGNoIChkYXRhLnR5cGUo
KSkgewotICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6RXJyb3I6Ci0gICAgICAgIG9uRXJyb3IoZGF0
YSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNl
U3VjY2VzczoKLSAgICAgICAgb25TdWNjZXNzKGRhdGEpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIElEQlJlc3VsdFR5cGU6Ok9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQ6Ci0gICAgICAgIG9u
VXBncmFkZU5lZWRlZChkYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJREJSZXN1bHRU
eXBlOjpEZWxldGVEYXRhYmFzZVN1Y2Nlc3M6Ci0gICAgICAgIG9uRGVsZXRlRGF0YWJhc2VTdWNj
ZXNzKGRhdGEpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0
OjpyZXF1ZXN0QmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9u
KQotewotICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0QmxvY2tl
ZCIpOwotICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRW
ZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTgwNGMxLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5o
CisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURC
T3BlbkRCUmVxdWVzdEltcGxfaAotI2RlZmluZSBJREJPcGVuREJSZXF1ZXN0SW1wbF9oCi0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTUVycm9yLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdEltcGwu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUlkZW50aWZpZXI7
Ci0KLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1jbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2ZXI7
Ci0KLWNsYXNzIElEQk9wZW5EQlJlcXVlc3QgOiBwdWJsaWMgSURCUmVxdWVzdCB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxJREJPcGVuREJSZXF1ZXN0PiBjcmVhdGVEZWxldGVSZXF1ZXN0KElE
QkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgUmVmPElEQk9wZW5EQlJlcXVlc3Q+IGNy
ZWF0ZU9wZW5SZXF1ZXN0KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCB1aW50NjRfdCB2ZXJzaW9uKTsK
LQotICAgIH5JREJPcGVuREJSZXF1ZXN0KCkgZmluYWw7Ci0gICAgCi0gICAgY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGFiYXNlSWRlbnRpZmllcjsgfQotICAgIHVpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVy
biBtX3ZlcnNpb247IH0KLQotICAgIHZvaWQgcmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1
bHREYXRhJik7Ci0gICAgdm9pZCByZXF1ZXN0QmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1
aW50NjRfdCBuZXdWZXJzaW9uKTsKLQotICAgIHZvaWQgdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
RGlkRmluaXNoKCk7Ci0gICAgdm9pZCBmaXJlU3VjY2Vzc0FmdGVyVmVyc2lvbkNoYW5nZUNvbW1p
dCgpOwotICAgIHZvaWQgZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigpOwot
Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50JikgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAg
SURCT3BlbkRCUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdmVyc2lvbiwg
SW5kZXhlZERCOjpSZXF1ZXN0VHlwZSk7Ci0KLSAgICB2b2lkIG9uRXJyb3IoY29uc3QgSURCUmVz
dWx0RGF0YSYpOwotICAgIHZvaWQgb25TdWNjZXNzKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLSAg
ICB2b2lkIG9uVXBncmFkZU5lZWRlZChjb25zdCBJREJSZXN1bHREYXRhJik7Ci0gICAgdm9pZCBv
bkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAgICBib29s
IGlzT3BlbkRCUmVxdWVzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAg
IElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2RhdGFiYXNlSWRlbnRpZmllcjsKLSAgICB1aW50NjRf
dCBtX3ZlcnNpb24geyAwIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
I2VuZGlmIC8vIElEQk9wZW5EQlJlcXVlc3RJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDJhNzQyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0KLSNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKLSNpbmNsdWRlICJFdmVudFF1
ZXVlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIklEQkN1
cnNvckltcGwuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUg
IklEQkV2ZW50RGlzcGF0Y2hlci5oIgotI2luY2x1ZGUgIklEQktleURhdGEuaCIKLSNpbmNsdWRl
ICJJREJSZXN1bHREYXRhLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1u
YW1lc3BhY2UgSURCQ2xpZW50IHsKLQotUmVmPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0
U3RvcmUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbikpOwot
fQotCi1SZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIElEQkN1cnNvciYgY3Vyc29yLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCUmVxdWVzdChjb250ZXh0LCBj
dXJzb3IsIHRyYW5zYWN0aW9uKSk7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJSZXF1ZXN0Ojpj
cmVhdGVDb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5k
ZXgsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIGluZGV4LCB0cmFuc2FjdGlvbikpOwotfQotCi1SZWY8
SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVx
dWVzdGVkUmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IElEQlJlcXVlc3QoY29udGV4dCwgaW5kZXgsIHJlcXVlc3RlZFJl
Y29yZFR5cGUsIHRyYW5zYWN0aW9uKSk7Ci19Ci0KLUlEQlJlcXVlc3Q6OklEQlJlcXVlc3QoSURC
Q29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0KQotICAgIDogSURCT3BlbkRCUmVxdWVzdChjb250ZXh0KQotICAgICwgbV9jb25uZWN0
aW9uKGNvbm5lY3Rpb24pCi0gICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcihjb25uZWN0aW9uKQot
ewotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwotfQotCi1JREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9y
ZSwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotICAgIDogSURCT3BlbkRCUmVxdWVzdChj
b250ZXh0KQotICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24pCi0gICAgLCBtX2Nvbm5l
Y3Rpb24odHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQotICAgICwgbV9yZXNvdXJjZUlk
ZW50aWZpZXIodHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQotICAgICwgbV9zb3VyY2Uo
SURCQW55OjpjcmVhdGUob2JqZWN0U3RvcmUpKQotewotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwot
fQotCi1JREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIElEQkN1cnNvciYgY3Vyc29yLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi0gICAg
OiBJREJPcGVuREJSZXF1ZXN0KGNvbnRleHQpCi0gICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2Fj
dGlvbikKLSAgICAsIG1fY29ubmVjdGlvbih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkp
Ci0gICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9u
KCkpCi0gICAgLCBtX3NvdXJjZShjdXJzb3Iuc291cmNlKCkpCi0gICAgLCBtX3BlbmRpbmdDdXJz
b3IoJmN1cnNvcikKLXsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKLQotICAgIGN1cnNvci5zZXRS
ZXF1ZXN0KCp0aGlzKTsKLX0KLQotSURCUmVxdWVzdDo6SURCUmVxdWVzdChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIElEQlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbikKLSAgICA6IElEQk9wZW5EQlJlcXVlc3QoY29udGV4dCkKLSAgICAsIG1fdHJhbnNh
Y3Rpb24oJnRyYW5zYWN0aW9uKQotICAgICwgbV9jb25uZWN0aW9uKHRyYW5zYWN0aW9uLnNlcnZl
ckNvbm5lY3Rpb24oKSkKLSAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uLnNl
cnZlckNvbm5lY3Rpb24oKSkKLSAgICAsIG1fc291cmNlKElEQkFueTo6Y3JlYXRlKGluZGV4KSkK
LXsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKLX0KLQotSURCUmVxdWVzdDo6SURCUmVxdWVzdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIEluZGV4ZWRE
Qjo6SW5kZXhSZWNvcmRUeXBlIHJlcXVlc3RlZFJlY29yZFR5cGUsIElEQlRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbikKLSAgICA6IElEQlJlcXVlc3QoY29udGV4dCwgaW5kZXgsIHRyYW5zYWN0aW9u
KQotewotICAgIG1fcmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlID0gcmVxdWVzdGVkUmVjb3JkVHlw
ZTsKLX0KLQotSURCUmVxdWVzdDo6fklEQlJlcXVlc3QoKQotewotICAgIGlmIChtX3Jlc3VsdCkg
ewotICAgICAgICBhdXRvIHR5cGUgPSBtX3Jlc3VsdC0+dHlwZSgpOwotICAgICAgICBpZiAodHlw
ZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvciB8fCB0eXBlID09IElEQkFueTo6VHlwZTo6SURC
Q3Vyc29yV2l0aFZhbHVlKQotICAgICAgICAgICAgbV9yZXN1bHQtPm1vZGVybklEQkN1cnNvcigp
LT5jbGVhclJlcXVlc3QoKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IElE
QlJlcXVlc3Q6OnJlc3VsdChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSBjb25zdAotewot
ICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpCi0gICAg
ICAgIHJldHVybiBtX3Jlc3VsdDsKLQotICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIHJlYWQgdGhlICdyZXN1bHQnIHByb3BlcnR5IGZyb20gJ0lEQlJlcXVlc3QnOiBUaGUg
cmVxdWVzdCBoYXMgbm90IGZpbmlzaGVkLiIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi11
bnNpZ25lZCBzaG9ydCBJREJSZXF1ZXN0OjplcnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVJlZlB0cjxET01FcnJvcj4gSURCUmVxdWVzdDo6ZXJy
b3IoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgY29uc3QKLXsKLSAgICBpZiAobV9yZWFk
eVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKQotICAgICAgICByZXR1cm4gbV9k
b21FcnJvcjsKLQotICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0
YXRlRXJyb3I7Ci0gICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHJlYWQg
dGhlICdlcnJvcicgcHJvcGVydHkgZnJvbSAnSURCUmVxdWVzdCc6IFRoZSByZXF1ZXN0IGhhcyBu
b3QgZmluaXNoZWQuIik7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxXZWJDb3Jl
OjpJREJBbnk+IElEQlJlcXVlc3Q6OnNvdXJjZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc291
cmNlOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldFNvdXJjZShJREJDdXJzb3ImIGN1cnNvcikK
LXsKLSAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyKTsKLQotICAgIG1fc291cmNl
ID0gSURCQW55OjpjcmVhdGUoY3Vyc29yKTsKLSAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9
IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVHdWFyZD4oW3RoaXNdKCkgewotICAgICAgICBBU1NFUlQo
bV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvciB8fCBtX3NvdXJjZS0+
dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlKTsKLSAgICAgICAgbV9z
b3VyY2UtPm1vZGVybklEQkN1cnNvcigpLT5kZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3Vu
dCgpOwotICAgIH0pOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldFZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKCFtX3Ry
YW5zYWN0aW9uKTsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24uaXNWZXJzaW9uQ2hhbmdlKCkpOwot
ICAgIEFTU0VSVCghdHJhbnNhY3Rpb24uaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpOwotCi0gICAg
bV90cmFuc2FjdGlvbiA9ICZ0cmFuc2FjdGlvbjsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uPiBJREJSZXF1ZXN0Ojp0cmFuc2FjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fc2hvdWxkRXhwb3NlVHJhbnNhY3Rpb25Ub0RPTSA/IG1fdHJhbnNhY3Rpb24gOiBudWxscHRy
OwotfQotCi1jb25zdCBTdHJpbmcmIElEQlJlcXVlc3Q6OnJlYWR5U3RhdGUoKSBjb25zdAotewot
ICAgIHN0YXRpYyBXVEY6Ok5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGVuZGluZ1N0cmluZygicGVu
ZGluZyIpOwotICAgIHN0YXRpYyBXVEY6Ok5ldmVyRGVzdHJveWVkPFN0cmluZz4gZG9uZVN0cmlu
ZygiZG9uZSIpOwotCi0gICAgc3dpdGNoIChtX3JlYWR5U3RhdGUpIHsKLSAgICBjYXNlIElEQlJl
cXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nOgotICAgICAgICByZXR1cm4gcGVuZGluZ1N0cmluZzsK
LSAgICBjYXNlIElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lOgotICAgICAgICByZXR1cm4gZG9u
ZVN0cmluZzsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLX0KLQotdWludDY0X3QgSURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fc291cmNlKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCT2JqZWN0
U3RvcmUpIHsKLSAgICAgICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX3NvdXJjZS0+bW9kZXJuSURC
T2JqZWN0U3RvcmUoKTsKLSAgICAgICAgaWYgKCFvYmplY3RTdG9yZSkKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICByZXR1cm4gb2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCk7
Ci0gICAgfQotCi0gICAgaWYgKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJJ
bmRleCkgewotICAgICAgICBhdXRvKiBpbmRleCA9IG1fc291cmNlLT5tb2Rlcm5JREJJbmRleCgp
OwotICAgICAgICBpZiAoIWluZGV4KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiBpbmRleC0+aW5mbygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigpOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCi11aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VJbmRleElkZW50aWZp
ZXIoKSBjb25zdAotewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChtX3NvdXJjZS0+dHlwZSgpICE9IElEQkFueTo6VHlwZTo6SURCSW5kZXgpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGlmICghbV9zb3VyY2UtPm1vZGVybklEQkluZGV4KCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fc291cmNlLT5tb2Rlcm5JREJJbmRleCgpLT5pbmZv
KCkuaWRlbnRpZmllcigpOwotfQotCi1JbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBJREJSZXF1
ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3Nv
dXJjZSk7Ci0gICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJJ
bmRleCk7Ci0KLSAgICByZXR1cm4gbV9yZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGU7Ci19Ci0KLUV2
ZW50VGFyZ2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKLX0K
LQotY29uc3QgY2hhciogSURCUmVxdWVzdDo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICJJREJSZXF1ZXN0IjsKLX0KLQotYm9vbCBJREJSZXF1ZXN0OjpjYW5TdXNw
ZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgSURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9oYXNQZW5kaW5nQWN0aXZpdHk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c3RvcCgp
Ci17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLSAgICBtX2NvbnRleHRTdG9wcGVk
ID0gdHJ1ZTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
IGV2ZW50KQotewotICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHx8IG1fY29udGV4
dFN0b3BwZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7
Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50
KFdURk1vdmUoZXZlbnQpKTsKLX0KLQotYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2
ZW50JiBldmVudCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudCAtICVzICglcCkiLCBldmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGhp
cyk7Ci0KLSAgICBBU1NFUlQobV9oYXNQZW5kaW5nQWN0aXZpdHkpOwotICAgIEFTU0VSVCghbV9j
b250ZXh0U3RvcHBlZCk7Ci0KLSAgICBpZiAoZXZlbnQudHlwZSgpICE9IGV2ZW50TmFtZXMoKS5i
bG9ja2VkRXZlbnQpCi0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRl
OjpEb25lOwotCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRhcmdldHM7Ci0gICAg
dGFyZ2V0cy5hcHBlbmQodGhpcyk7Ci0KLSAgICBpZiAoJmV2ZW50ID09IG1fb3BlbkRhdGFiYXNl
U3VjY2Vzc0V2ZW50KQotICAgICAgICBtX29wZW5EYXRhYmFzZVN1Y2Nlc3NFdmVudCA9IG51bGxw
dHI7Ci0gICAgZWxzZSBpZiAobV90cmFuc2FjdGlvbiAmJiAhbV90cmFuc2FjdGlvbi0+aXNGaW5p
c2hlZCgpKSB7Ci0gICAgICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0aW9uKTsKLSAg
ICAgICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24tPmRiKCkpOwotICAgIH0KLQot
ICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7Ci0KLSAgICBtX2N1cnNvclJlcXVlc3RO
b3RpZmllciA9IG51bGxwdHI7Ci0KLSAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdDsKLSAgICB7
Ci0gICAgICAgIFRyYW5zYWN0aW9uQWN0aXZhdG9yIGFjdGl2YXRvcihtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKLSAgICAgICAgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpk
aXNwYXRjaChldmVudCwgdGFyZ2V0cyk7Ci0gICAgfQotCi0gICAgLy8gSURCRXZlbnREaXNwYXRj
aGVyOjpkaXNwYXRjaCgpIG1pZ2h0IGhhdmUgc2V0IHRoZSBwZW5kaW5nIGFjdGl2aXR5IGZsYWcg
YmFjayB0byB0cnVlLCBzdWdnZXN0aW5nIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV1c2VkLgotICAg
IC8vIFdlIG1pZ2h0IGFsc28gcmUtdXNlIHRoZSByZXF1ZXN0IGlmIHRoaXMgZXZlbnQgd2FzIHRo
ZSB1cGdyYWRlbmVlZGVkIGV2ZW50IGZvciBhbiBJREJPcGVuREJSZXF1ZXN0LgotICAgIGlmICgh
bV9oYXNQZW5kaW5nQWN0aXZpdHkpCi0gICAgICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gaXNP
cGVuREJSZXF1ZXN0KCkgJiYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5l
ZWRlZEV2ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KTsK
LQotICAgIC8vIFRoZSByZXF1ZXN0IHNob3VsZCBvbmx5IHJlbWFpbiBpbiB0aGUgdHJhbnNhY3Rp
b24ncyByZXF1ZXN0IGxpc3QgaWYgaXQgcmVwcmVzZW50cyBhIHBlbmRpbmcgY3Vyc29yIG9wZXJh
dGlvbiwgb3IgdGhpcyBpcyBhbiBvcGVuIHJlcXVlc3QgdGhhdCB3YXMgYmxvY2tlZC4KLSAgICBp
ZiAobV90cmFuc2FjdGlvbiAmJiAhbV9wZW5kaW5nQ3Vyc29yICYmIGV2ZW50LnR5cGUoKSAhPSBl
dmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmVS
ZXF1ZXN0KCp0aGlzKTsKLQotICAgIGlmIChkb250UHJldmVudERlZmF1bHQgJiYgZXZlbnQudHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIG1fdHJhbnNhY3Rpb24gJiYgIW1fdHJh
bnNhY3Rpb24tPmlzRmluaXNoZWRPckZpbmlzaGluZygpKSB7Ci0gICAgICAgIEFTU0VSVChtX2Rv
bUVycm9yKTsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3Qo
Km1fZG9tRXJyb3IpOwotICAgIH0KLQotICAgIHJldHVybiBkb250UHJldmVudERlZmF1bHQ7Ci19
Ci0KLXZvaWQgSURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCi17
Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVu
dEhhbmRsZXIiKTsKLQotICAgIGlmIChtX3RyYW5zYWN0aW9uICYmIG1faWRiRXJyb3IuY29kZSgp
ICE9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKQotICAgICAgICBtX3RyYW5zYWN0
aW9uLT5hYm9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3Ip
KSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IElEQktleURhdGEqIGtl
eURhdGEpCi17Ci0gICAgaWYgKCFrZXlEYXRhKSB7Ci0gICAgICAgIG1fcmVzdWx0ID0gbnVsbHB0
cjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
IHZhbHVlID0gaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCAqa2V5RGF0YSk7Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKHZhbHVl
KSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KHVpbnQ2NF90IG51bWJlcikKLXsK
LSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBtX3Jlc3VsdCA9IElE
QkFueTo6Y3JlYXRlKERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+dm0oKSwgSlNDOjpKU1ZhbHVlKG51bWJlcikpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0
OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYg
dmFsdWVEYXRhKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpzZXRSZXN1bHRU
b1N0cnVjdHVyZWRDbG9uZSIpOwotCi0gICAgYXV0byBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YSgqY29u
dGV4dCwgdmFsdWVEYXRhKTsKLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUo
dmFsdWUpKTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1VuZGVmaW5lZCgpCi17
Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZVVuZGVmaW5lZCgpOwotfQotCi1JREJDdXJz
b3IqIElEQlJlcXVlc3Q6OnJlc3VsdEN1cnNvcigpCi17Ci0gICAgaWYgKCFtX3Jlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55
OjpUeXBlOjpJREJDdXJzb3IgfHwgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklE
QkN1cnNvcldpdGhWYWx1ZSkKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0LT5tb2Rlcm5JREJDdXJz
b3IoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRl
cmF0ZUN1cnNvcihJREJDdXJzb3ImIGN1cnNvcikKLXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRl
ID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKTsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAgQVNTRVJUKCFt
X3BlbmRpbmdDdXJzb3IpOwotICAgIEFTU0VSVCgmY3Vyc29yID09IHJlc3VsdEN1cnNvcigpKTsK
LSAgICBBU1NFUlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyKTsKLQotICAgIG1fcGVuZGluZ0N1
cnNvciA9ICZjdXJzb3I7Ci0gICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSB0cnVlOwotICAgIG1f
cmVzdWx0ID0gbnVsbHB0cjsKLSAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0
ZTo6UGVuZGluZzsKLSAgICBtX2RvbUVycm9yID0gbnVsbHB0cjsKLSAgICBtX2lkYkVycm9yID0g
eyB9OwotCi0gICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNj
b3BlR3VhcmQ+KFt0aGlzXSgpIHsKLSAgICAgICAgbV9wZW5kaW5nQ3Vyc29yLT5kZWNyZW1lbnRP
dXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOwotICAgIH0pOwotfQotCi12b2lkIElEQlJlcXVlc3Q6
OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkK
LXsKLSAgICBBU1NFUlQobV9wZW5kaW5nQ3Vyc29yKTsKLSAgICBtX3Jlc3VsdCA9IG51bGxwdHI7
Ci0KLSAgICBpZiAocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6SXRlcmF0ZUN1
cnNvclN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6T3BlbkN1
cnNvclN1Y2Nlc3MpIHsKLSAgICAgICAgbV9wZW5kaW5nQ3Vyc29yLT5zZXRHZXRSZXN1bHQoKnRo
aXMsIHJlc3VsdERhdGEuZ2V0UmVzdWx0KCkpOwotICAgICAgICBpZiAocmVzdWx0RGF0YS5nZXRS
ZXN1bHQoKS5pc0RlZmluZWQoKSkKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVh
dGUoKm1fcGVuZGluZ0N1cnNvcik7Ci0gICAgfQotCi0gICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZp
ZXIgPSBudWxscHRyOwotICAgIG1fcGVuZGluZ0N1cnNvciA9IG51bGxwdHI7Ci0KLSAgICByZXF1
ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnJlcXVlc3RD
b21wbGV0ZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBtX3JlYWR5
U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKLQotICAgIG1faWRiRXJyb3IgPSBy
ZXN1bHREYXRhLmVycm9yKCk7Ci0gICAgaWYgKCFtX2lkYkVycm9yLmlzTnVsbCgpKQotICAgICAg
ICBvbkVycm9yKCk7Ci0gICAgZWxzZQotICAgICAgICBvblN1Y2Nlc3MoKTsKLX0KLQotdm9pZCBJ
REJSZXF1ZXN0OjpvbkVycm9yKCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6
b25FcnJvciIpOwotCi0gICAgQVNTRVJUKCFtX2lkYkVycm9yLmlzTnVsbCgpKTsKLSAgICBtX2Rv
bUVycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShtX2lkYkVycm9yLm5hbWUoKSk7Ci0gICAgZW5xdWV1
ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUp
KTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoKQotewotICAgIExPRyhJbmRleGVk
REIsICJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MiKTsKLQotICAgIGVucXVldWVFdmVudChFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTU1OTEzYy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJSZXF1ZXN0SW1wbF9oCi0j
ZGVmaW5lIElEQlJlcXVlc3RJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSAiSURCQW55SW1wbC5oIgotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIK
LSNpbmNsdWRlICJJREJSZXNvdXJjZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkltcGwuaCIKLSNpbmNsdWRlICJTY29wZUd1YXJkLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFdmVudDsKLWNsYXNzIElE
QktleURhdGE7Ci1jbGFzcyBJREJSZXN1bHREYXRhOwotY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZm
ZXI7Ci0KLW5hbWVzcGFjZSBJbmRleGVkREIgewotZW51bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7
Ci19Ci0KLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1jbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2
ZXI7Ci0KLWNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVz
dCwgcHVibGljIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD4gewotcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RT
dG9yZSYsIElEQlRyYW5zYWN0aW9uJik7Ci0gICAgc3RhdGljIFJlZjxJREJSZXF1ZXN0PiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkN1cnNvciYsIElEQlRyYW5zYWN0aW9uJik7
Ci0gICAgc3RhdGljIFJlZjxJREJSZXF1ZXN0PiBjcmVhdGVDb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCSW5kZXgmLCBJREJUcmFuc2FjdGlvbiYpOwotICAgIHN0YXRpYyBSZWY8SURC
UmVxdWVzdD4gY3JlYXRlR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIElu
ZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJREJUcmFuc2FjdGlvbiYpOwotCi0gICAgY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBtX3Jlc291cmNlSWRlbnRpZmllcjsgfQotCi0gICAgfklEQlJlcXVlc3QoKSBvdmVycmlkZTsK
LQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IHJlc3VsdChFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSBjb25zdCBvdmVycmlkZTsKLSAgICB1bnNpZ25lZCBzaG9ydCBlcnJvckNvZGUoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZlB0cjxET01FcnJvcj4gZXJyb3Io
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OklEQkFueT4gc291cmNlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNv
bnN0IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdWludDY0X3Qg
c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgdWludDY0X3Qgc291cmNl
SW5kZXhJZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUg
cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlKCkgY29uc3Q7Ci0KLSAgICAvLyBFdmVudFRhcmdldAot
ICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOyB9Ci0KLSAgICB1c2luZyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+OjpyZWY7Ci0g
ICAgdXNpbmcgUmVmQ291bnRlZDxJREJSZXF1ZXN0Pjo6ZGVyZWY7Ci0KLSAgICB2b2lkIGVucXVl
dWVFdmVudChSZWY8RXZlbnQ+JiYpOwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92
ZXJyaWRlOwotCi0gICAgSURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uKCkgeyByZXR1
cm4gbV9jb25uZWN0aW9uOyB9Ci0KLSAgICB2b2lkIHJlcXVlc3RDb21wbGV0ZWQoY29uc3QgSURC
UmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBzZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0YSopOwot
ICAgIHZvaWQgc2V0UmVzdWx0KHVpbnQ2NF90KTsKLSAgICB2b2lkIHNldFJlc3VsdFRvU3RydWN0
dXJlZENsb25lKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7Ci0gICAgdm9pZCBzZXRSZXN1
bHRUb1VuZGVmaW5lZCgpOwotCi0gICAgSURCQW55KiBtb2Rlcm5SZXN1bHQoKSB7IHJldHVybiBt
X3Jlc3VsdC5nZXQoKTsgfQotCi0gICAgdm9pZCB3aWxsSXRlcmF0ZUN1cnNvcihJREJDdXJzb3Im
KTsKLSAgICB2b2lkIGRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzdWx0RGF0YSYp
OwotCi0gICAgY29uc3QgSURCQ3Vyc29yKiBwZW5kaW5nQ3Vyc29yKCkgY29uc3QgeyByZXR1cm4g
bV9wZW5kaW5nQ3Vyc29yLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldFNvdXJjZShJREJDdXJzb3Im
KTsKLSAgICB2b2lkIHNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYp
OwotCi0gICAgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZSByZXF1ZXN0VHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVxdWVzdFR5cGU7IH0KLQotcHJvdGVjdGVkOgotICAgIElEQlJlcXVlc3QoSURCQ29u
bmVjdGlvblRvU2VydmVyJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwotICAgIElEQlJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgSURCVHJhbnNhY3Rp
b24mKTsKLSAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJDdXJzb3Im
LCBJREJUcmFuc2FjdGlvbiYpOwotICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIElEQkluZGV4JiwgSURCVHJhbnNhY3Rpb24mKTsKLSAgICBJREJSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJ
REJUcmFuc2FjdGlvbiYpOwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0LgotICAgIGNvbnN0IGNo
YXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGNhblN1c3Bl
bmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc3RvcCgpIGZpbmFsOwotCi0gICAg
Ly8gRXZlbnRUYXJnZXQuCi0gICAgdm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgUmVmQ291
bnRlZDxJREJSZXF1ZXN0Pjo6cmVmKCk7IH0KLSAgICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBm
aW5hbCB7IFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46OmRlcmVmKCk7IH0KLSAgICB2b2lkIHVuY2F1
Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKSBmaW5hbDsKLQotICAgIHZpcnR1YWwgYm9vbCBp
c09wZW5EQlJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgSURCUmVxdWVz
dFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlIHsgSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcg
fTsKLSAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IG1fdHJhbnNhY3Rpb247Ci0gICAgYm9vbCBtX3Nob3VsZEV4cG9zZVRyYW5zYWN0aW9uVG9E
T00geyB0cnVlIH07Ci0gICAgUmVmUHRyPERPTUVycm9yPiBtX2RvbUVycm9yOwotICAgIElEQkVy
cm9yIG1faWRiRXJyb3I7Ci0gICAgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZSBtX3JlcXVlc3RUeXBl
ID0geyBJbmRleGVkREI6OlJlcXVlc3RUeXBlOjpPdGhlciB9OwotICAgIGJvb2wgbV9jb250ZXh0
U3RvcHBlZCB7IGZhbHNlIH07Ci0KLSAgICBFdmVudCogbV9vcGVuRGF0YWJhc2VTdWNjZXNzRXZl
bnQgeyBudWxscHRyIH07Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBvbkVycm9yKCk7Ci0gICAgdm9p
ZCBvblN1Y2Nlc3MoKTsKLQotICAgIElEQkN1cnNvciogcmVzdWx0Q3Vyc29yKCk7Ci0KLSAgICBJ
REJDb25uZWN0aW9uVG9TZXJ2ZXImIG1fY29ubmVjdGlvbjsKLSAgICBJREJSZXNvdXJjZUlkZW50
aWZpZXIgbV9yZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAgUmVmUHRyPElEQkFueT4gbV9zb3VyY2U7
Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eSB7IHRydWUgfTsKLSAgICBJbmRleGVkREI6
OkluZGV4UmVjb3JkVHlwZSBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsKLQotICAgIFJlZlB0
cjxJREJDdXJzb3I+IG1fcGVuZGluZ0N1cnNvcjsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY29w
ZUd1YXJkPiBtX2N1cnNvclJlcXVlc3ROb3RpZmllcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElE
QkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCUmVxdWVzdEltcGxfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rp
b25JbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0Y2NmOS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNh
Y3Rpb25JbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkwNyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJET01FcnJvci5oIgot
I2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWVJbXBs
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJEYXRh
YmFzZUltcGwuaCIKLSNpbmNsdWRlICJJREJFcnJvci5oIgotI2luY2x1ZGUgIklEQkV2ZW50RGlz
cGF0Y2hlci5oIgotI2luY2x1ZGUgIklEQktleURhdGEuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5n
ZURhdGEuaCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQk9wZW5E
QlJlcXVlc3RJbXBsLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdEltcGwuaCIKLSNpbmNsdWRlICJJ
REJSZXN1bHREYXRhLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRl
ICJUcmFuc2FjdGlvbk9wZXJhdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3Bh
Y2UgSURCQ2xpZW50IHsKLQotUmVmPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3Jl
YXRlKElEQkRhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZv
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlRyYW5zYWN0aW9uKGRhdGFiYXNlLCBp
bmZvLCBudWxscHRyKSk7Ci19Ci0KLVJlZjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rpb246
OmNyZWF0ZShJREJEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYg
aW5mbywgSURCT3BlbkRCUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJREJUcmFuc2FjdGlvbihkYXRhYmFzZSwgaW5mbywgJnJlcXVlc3QpKTsKLX0KLQotSURC
VHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKElEQkRhdGFiYXNlJiBkYXRhYmFzZSwgY29uc3Qg
SURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvLCBJREJPcGVuREJSZXF1ZXN0KiByZXF1ZXN0KQotICAg
IDogV2ViQ29yZTo6SURCVHJhbnNhY3Rpb24oZGF0YWJhc2Uuc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQotICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKLSAgICAsIG1faW5mbyhpbmZvKQotICAg
ICwgbV9vcGVyYXRpb25UaW1lcigqdGhpcywgJklEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25UaW1l
ckZpcmVkKQotICAgICwgbV9vcGVuREJSZXF1ZXN0KHJlcXVlc3QpCi0KLXsKLSAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uIC0gJXMiLCBtX2luZm8ubG9n
Z2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVt
ZW50KCk7Ci0KLSAgICBpZiAobV9pbmZvLm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6VmVyc2lvbkNoYW5nZSkgewotICAgICAgICBBU1NFUlQobV9vcGVuREJSZXF1ZXN0KTsK
LSAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT5zZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oKnRo
aXMpOwotICAgICAgICBtX3N0YXJ0ZWRPblNlcnZlciA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgYWN0aXZhdGUoKTsKLQotICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGY7
Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gSlNET01XaW5kb3dCYXNlOjpjb21tb25WTSgpOwotICAg
ICAgICB2bS53aGVuSWRsZShbc2VsZiwgdGhpc10oKSB7Ci0gICAgICAgICAgICBkZWFjdGl2YXRl
KCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGVzdGFibGlzaE9uU2VydmVyKCk7Ci0gICAgfQot
Ci0gICAgc3VzcGVuZElmTmVlZGVkKCk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNh
Y3Rpb24oKQotewotfQotCi1jb25zdCBTdHJpbmcmIElEQlRyYW5zYWN0aW9uOjptb2RlKCkgY29u
c3QKLXsKLSAgICBzd2l0Y2ggKG1faW5mby5tb2RlKCkpIHsKLSAgICBjYXNlIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seToKLSAgICAgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9u
Ojptb2RlUmVhZE9ubHkoKTsKLSAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpS
ZWFkV3JpdGU6Ci0gICAgICAgIHJldHVybiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgp
OwotICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U6Ci0g
ICAgICAgIHJldHVybiBJREJUcmFuc2FjdGlvbjo6bW9kZVZlcnNpb25DaGFuZ2UoKTsKLSAgICB9
Ci0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1XZWJDb3JlOjpJREJE
YXRhYmFzZSogSURCVHJhbnNhY3Rpb246OmRiKCkKLXsKLSAgICByZXR1cm4gJm1fZGF0YWJhc2Uu
Z2V0KCk7Ci19Ci0KLUlEQkNvbm5lY3Rpb25Ub1NlcnZlciYgSURCVHJhbnNhY3Rpb246OnNlcnZl
ckNvbm5lY3Rpb24oKQotewotICAgIHJldHVybiBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9u
KCk7Ci19Ci0KLVJlZlB0cjxET01FcnJvcj4gSURCVHJhbnNhY3Rpb246OmVycm9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kb21FcnJvcjsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RT
dG9yZU5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSIpOwotCi0gICAgaWYgKCFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGlz
RmluaXNoZWRPckZpbmlzaGluZygpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvYmplY3RTdG9yZScgb24gJ0lEQlRyYW5zYWN0aW9u
JzogVGhlIHRyYW5zYWN0aW9uIGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLmZp
bmQob2JqZWN0U3RvcmVOYW1lKTsKLSAgICBpZiAoaXRlcmF0b3IgIT0gbV9yZWZlcmVuY2VkT2Jq
ZWN0U3RvcmVzLmVuZCgpKQotICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwotCi0gICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX2luZm8u
b2JqZWN0U3RvcmVzKCkpIHsKLSAgICAgICAgaWYgKG9iamVjdFN0b3JlID09IG9iamVjdFN0b3Jl
TmFtZSkgewotICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvKiBpbmZvID0gbV9kYXRhYmFzZS0+aW5mbygpLmlu
Zm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSk7Ci0gICAgaWYgKCFpbmZv
KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRFcnJv
cjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J29iamVjdFN0b3JlJyBvbiAnSURCVHJhbnNhY3Rpb24nOiBUaGUgc3BlY2lmaWVkIG9iamVjdCBz
dG9yZSB3YXMgbm90IGZvdW5kLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICAvLyBWZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbnMgYXJlIHNjb3BlZCB0byBldmVyeSBv
YmplY3Qgc3RvcmUgaW4gdGhlIGRhdGFiYXNlLgotICAgIGlmICghaW5mbyB8fCAoIWZvdW5kICYm
ICFpc1ZlcnNpb25DaGFuZ2UoKSkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0U3RvcmUnIG9uICdJREJUcmFuc2FjdGlvbic6IFRo
ZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdhcyBub3QgZm91bmQuIik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9y
ZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICppbmZvLCAqdGhpcyk7Ci0gICAg
bV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZU5hbWUsICZvYmplY3RTdG9y
ZS5nZXQoKSk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoJm9iamVjdFN0b3JlLmxlYWtSZWYoKSk7
Ci19Ci0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9N
RXJyb3ImIGVycm9yKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJv
cnREdWVUb0ZhaWxlZFJlcXVlc3QiKTsKLSAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZG9tRXJyb3IgPSAmZXJyb3I7Ci0gICAgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwotICAgIGFib3J0KGVjKTsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbjo6dHJhbnNpdGlvbmVkVG9GaW5pc2hpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0
YXRlIHN0YXRlKQotewotICAgIEFTU0VSVCghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpOwotICAg
IG1fc3RhdGUgPSBzdGF0ZTsKLSAgICBBU1NFUlQoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpOwot
ICAgIG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy5jbGVhcigpOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uOjphYm9ydChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnQiKTsKLQotICAgIGlmIChpc0ZpbmlzaGVk
T3JGaW5pc2hpbmcoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnYWJvcnQnIG9uICdJREJUcmFuc2FjdGlvbic6IFRoZSB0cmFuc2Fj
dGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fZGF0YWJhc2UtPndpbGxBYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKLQotICAgIGlm
IChpc1ZlcnNpb25DaGFuZ2UoKSkgewotICAgICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDog
bV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnZhbHVlcygpKQotICAgICAgICAgICAgb2JqZWN0U3Rv
cmUtPnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VBYm9ydCgpOwotICAgIH0KLQotICAgIHRy
YW5zaXRpb25lZFRvRmluaXNoaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWJvcnRp
bmcpOwotICAgIAotICAgIG1fYWJvcnRRdWV1ZS5zd2FwKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25R
dWV1ZSk7Ci0KLSAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9u
KCp0aGlzLCBudWxscHRyLCAmSURCVHJhbnNhY3Rpb246OmFib3J0T25TZXJ2ZXJBbmRDYW5jZWxS
ZXF1ZXN0cyk7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnRPblNlcnZlckFuZENhbmNlbFJlcXVlc3RzKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMiKTsKLQotICAgIEFT
U0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuaXNFbXB0eSgpKTsKLQotICAgIHNlcnZl
ckNvbm5lY3Rpb24oKS5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKLQotICAgIEFTU0VSVChtX3Ry
YW5zYWN0aW9uT3BlcmF0aW9uTWFwLmNvbnRhaW5zKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsK
LSAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnJlbW92ZShvcGVyYXRpb24uaWRlbnRpZmll
cigpKTsKLQotICAgIElEQkVycm9yIGVycm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVy
cm9yKTsKLSAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG1fYWJvcnRRdWV1ZSkKLSAgICAgICAg
b3BlcmF0aW9uLT5jb21wbGV0ZWQoSURCUmVzdWx0RGF0YTo6ZXJyb3Iob3BlcmF0aW9uLT5pZGVu
dGlmaWVyKCksIGVycm9yKSk7Ci0KLSAgICAvLyBTaW5jZSB3ZSdyZSBhYm9ydGluZywgaXQgc2hv
dWxkIGJlIGltcG9zc2libGUgdG8gaGF2ZSBxdWV1ZWQgYW55IGZ1cnRoZXIgb3BlcmF0aW9ucy4K
LSAgICBBU1NFUlQobV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlLmlzRW1wdHkoKSk7Ci19Ci0K
LWNvbnN0IGNoYXIqIElEQlRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIklEQlRyYW5zYWN0aW9uIjsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlv
bjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBj
b25zdAotewotICAgIHJldHVybiAhbV9jb250ZXh0U3RvcHBlZCAmJiBtX3N0YXRlICE9IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b246OnN0b3AoKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6c3RvcCIp
OwotCi0gICAgLy8gSURCRGF0YWJhc2U6OnN0b3AoKSBjYWxscyBJREJUcmFuc2FjdGlvbjo6c3Rv
cCgpIGZvciBlYWNoIG9mIGl0cyBhY3RpdmUgdHJhbnNhY3Rpb25zLgotICAgIC8vIFNpbmNlIHRo
ZSBvcmRlciBvZiBjYWxsaW5nIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpIGlzIHJhbmRvbSwgd2Ug
bWlnaHQgYWxyZWFkeSBoYXZlIGJlZW4gc3RvcHBlZC4KLSAgICBpZiAobV9jb250ZXh0U3RvcHBl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7Ci0KLSAg
ICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKLSAgICBhYm9ydChlYyk7Ci19Ci0KLWJvb2wgSURC
VHJhbnNhY3Rpb246OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZSA9PSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2ZTsKLX0KLQotYm9vbCBJREJUcmFuc2Fj
dGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0
ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkNvbW1pdHRpbmcKLSAgICAgICAgfHwg
bV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFib3J0aW5nCi0gICAgICAg
IHx8IG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWRkUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQot
ewotICAgIG1fb3BlblJlcXVlc3RzLmFkZCgmcmVxdWVzdCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb246OnJlbW92ZVJlcXVlc3QoSURCUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBBU1NFUlQo
bV9vcGVuUmVxdWVzdHMuY29udGFpbnMoJnJlcXVlc3QpKTsKLSAgICBtX29wZW5SZXF1ZXN0cy5y
ZW1vdmUoJnJlcXVlc3QpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJh
dGlvbihSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+JiYgb3BlcmF0aW9uKQotewotICAgIEFT
U0VSVCghbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5jb250YWlucyhvcGVyYXRpb24tPmlkZW50
aWZpZXIoKSkpOwotCi0gICAgbV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlLmFwcGVuZChvcGVy
YXRpb24pOwotICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuc2V0KG9wZXJhdGlvbi0+aWRl
bnRpZmllcigpLCBXVEZNb3ZlKG9wZXJhdGlvbikpOwotCi0gICAgc2NoZWR1bGVPcGVyYXRpb25U
aW1lcigpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlvblRpbWVy
KCkKLXsKLSAgICBpZiAoIW1fb3BlcmF0aW9uVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9v
cGVyYXRpb25UaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246
Om9wZXJhdGlvblRpbWVyRmlyZWQoKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6b3BlcmF0aW9uVGltZXJGaXJlZCAoJXApIiwgdGhpcyk7Ci0KLSAgICBpZiAoIW1fc3Rh
cnRlZE9uU2VydmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb25P
cGVyYXRpb25RdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byBvcGVyYXRpb24gPSBtX3Ry
YW5zYWN0aW9uT3BlcmF0aW9uUXVldWUudGFrZUZpcnN0KCk7Ci0gICAgICAgIG9wZXJhdGlvbi0+
cGVyZm9ybSgpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNh
Y3Rpb25PcGVyYXRpb25NYXAuaXNFbXB0eSgpIHx8ICFtX29wZW5SZXF1ZXN0cy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCi0g
ICAgICAgIGNvbW1pdCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpjb21taXQoKQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y29tbWl0Iik7Ci0KLSAgICBBU1NF
UlQoIWlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKLQotICAgIHRyYW5zaXRpb25lZFRvRmluaXNo
aW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6Q29tbWl0dGluZyk7Ci0gICAgbV9kYXRh
YmFzZS0+d2lsbENvbW1pdFRyYW5zYWN0aW9uKCp0aGlzKTsKLQotICAgIGF1dG8gb3BlcmF0aW9u
ID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIG51bGxwdHIsICZJREJUcmFuc2Fj
dGlvbjo6Y29tbWl0T25TZXJ2ZXIpOwotICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3Bl
cmF0aW9uKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmNvbW1pdE9uU2VydmVyKFRyYW5z
YWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRy
YW5zYWN0aW9uOjpjb21taXRPblNlcnZlciIpOwotICAgIHNlcnZlckNvbm5lY3Rpb24oKS5jb21t
aXRUcmFuc2FjdGlvbigqdGhpcyk7Ci0KLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbk9wZXJhdGlv
bk1hcC5jb250YWlucyhvcGVyYXRpb24uaWRlbnRpZmllcigpKSk7Ci0gICAgbV90cmFuc2FjdGlv
bk9wZXJhdGlvbk1hcC5yZW1vdmUob3BlcmF0aW9uLmlkZW50aWZpZXIoKSk7Ci19Ci0KLXZvaWQg
SURCVHJhbnNhY3Rpb246OmZpbmlzaEFib3J0T3JDb21taXQoKQotewotICAgIEFTU0VSVChtX3N0
YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQpOwotICAgIG1fc3Rh
dGUgPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkOwotfQotCi12b2lkIElE
QlRyYW5zYWN0aW9uOjpkaWRTdGFydChjb25zdCBJREJFcnJvciYgZXJyb3IpCi17Ci0gICAgTE9H
KEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRTdGFydCIpOwotCi0gICAgbV9kYXRhYmFz
ZS0+ZGlkU3RhcnRUcmFuc2FjdGlvbigqdGhpcyk7Ci0KLSAgICBtX3N0YXJ0ZWRPblNlcnZlciA9
IHRydWU7Ci0KLSAgICAvLyBJdCdzIHBvc3NpYmxlIHRoZSB0cmFuc2FjdGlvbiBmYWlsZWQgdG8g
c3RhcnQgb24gdGhlIHNlcnZlci4KLSAgICAvLyBUaGF0IGVxdWF0ZXMgdG8gYW4gYWJvcnQuCi0g
ICAgaWYgKCFlcnJvci5pc051bGwoKSkgewotICAgICAgICBkaWRBYm9ydChlcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7Ci19Ci0K
LXZvaWQgSURCVHJhbnNhY3Rpb246Om5vdGlmeURpZEFib3J0KGNvbnN0IElEQkVycm9yJiBlcnJv
cikKLXsKLSAgICBtX2RhdGFiYXNlLT5kaWRBYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKLSAgICBt
X2lkYkVycm9yID0gZXJyb3I7Ci0gICAgZmlyZU9uQWJvcnQoKTsKLQotICAgIGlmIChpc1ZlcnNp
b25DaGFuZ2UoKSkgewotICAgICAgICBBU1NFUlQobV9vcGVuREJSZXF1ZXN0KTsKLSAgICAgICAg
bV9vcGVuREJSZXF1ZXN0LT5maXJlRXJyb3JBZnRlclZlcnNpb25DaGFuZ2VDb21wbGV0aW9uKCk7
Ci0gICAgfQotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRBYm9ydChjb25zdCBJREJFcnJv
ciYgZXJyb3IpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRBYm9y
dCIpOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpG
aW5pc2hlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbm90aWZ5RGlkQWJvcnQoZXJyb3IpOwot
Ci0gICAgZmluaXNoQWJvcnRPckNvbW1pdCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpk
aWRDb21taXQoY29uc3QgSURCRXJyb3ImIGVycm9yKQotewotICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6ZGlkQ29tbWl0Iik7Ci0KLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkNvbW1pdHRpbmcpOwotCi0gICAgaWYgKGVycm9yLmlz
TnVsbCgpKSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPmRpZENvbW1pdFRyYW5zYWN0aW9uKCp0aGlz
KTsKLSAgICAgICAgZmlyZU9uQ29tcGxldGUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2Rh
dGFiYXNlLT53aWxsQWJvcnRUcmFuc2FjdGlvbigqdGhpcyk7Ci0gICAgICAgIG5vdGlmeURpZEFi
b3J0KGVycm9yKTsKLSAgICB9Ci0KLSAgICBmaW5pc2hBYm9ydE9yQ29tbWl0KCk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb246OmZpcmVPbkNvbXBsZXRlKCkKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmZpcmVPbkNvbXBsZXRlIik7Ci0gICAgZW5xdWV1ZUV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwot
fQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9ydCgpCi17Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpmaXJlT25BYm9ydCIpOwotICAgIGVucXVldWVFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxzZSkpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQot
ewotICAgIEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6Rmlu
aXNoZWQpOwotCi0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwgbV9jb250ZXh0
U3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
LSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQo
V1RGTW92ZShldmVudCkpOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50
KEV2ZW50JiBldmVudCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRp
c3BhdGNoRXZlbnQiKTsKLQotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwot
ICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7Ci0gICAgQVNTRVJUKGV2ZW50LnRhcmdldCgp
ID09IHRoaXMpOwotICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBs
ZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKLQot
ICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+PiB0YXJnZXRzOwotICAgIHRhcmdldHMuYXBw
ZW5kKHRoaXMpOwotICAgIHRhcmdldHMuYXBwZW5kKGRiKCkpOwotCi0gICAgYm9vbCByZXN1bHQg
PSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJnZXRzKTsKLQotICAgIGlm
IChpc1ZlcnNpb25DaGFuZ2UoKSkgewotICAgICAgICBBU1NFUlQobV9vcGVuREJSZXF1ZXN0KTsK
LSAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT52ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb25EaWRGaW5p
c2goKTsKLQotICAgICAgICBpZiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5jb21wbGV0
ZUV2ZW50KSB7Ci0gICAgICAgICAgICBpZiAobV9kYXRhYmFzZS0+aXNDbG9zaW5nT3JDbG9zZWQo
KSkKLSAgICAgICAgICAgICAgICBtX29wZW5EQlJlcXVlc3QtPmZpcmVFcnJvckFmdGVyVmVyc2lv
bkNoYW5nZUNvbXBsZXRpb24oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
X29wZW5EQlJlcXVlc3QtPmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tbWl0KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBtX29wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rp
b246OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlIik7
Ci0gICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKLQotICAgIFJlZjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBJ
REJPYmplY3RTdG9yZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGluZm8sICp0
aGlzKTsKLSAgICBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuc2V0KGluZm8ubmFtZSgpLCAmb2Jq
ZWN0U3RvcmUuZ2V0KCkpOwotCi0gICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlv
bk9wZXJhdGlvbigqdGhpcywgJklEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVPYmplY3RTdG9yZU9u
U2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIsIGluZm8p
OwotICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Ci0KLSAgICByZXR1
cm4gb2JqZWN0U3RvcmU7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0
b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBpbmZvKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlciIpOwotCi0gICAgQVNTRVJUKGlzVmVyc2lvbkNo
YW5nZSgpKTsKLQotICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5jcmVhdGVPYmpl
Y3RTdG9yZShvcGVyYXRpb24sIGluZm8pOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRD
cmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEp
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVPYmplY3RT
dG9yZU9uU2VydmVyIik7Ci0KLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERh
dGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkNyZWF0ZU9iamVjdFN0b3JlU3VjY2VzcyB8fCBy
ZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7Ci19Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxJREJJbmRleD4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4KElEQk9iamVjdFN0
b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgiKTsKLSAgICBBU1NFUlQoaXNW
ZXJzaW9uQ2hhbmdlKCkpOwotCi0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFu
c2FjdGlvbk9wZXJhdGlvbigqdGhpcywgJklEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVJbmRleE9u
U2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4T25TZXJ2ZXIsIGluZm8pOwotICAg
IHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Ci0KLSAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxJREJJbmRleD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgaW5mbywg
b2JqZWN0U3RvcmUpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleE9uU2Vy
dmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQkluZGV4SW5mbyYg
aW5mbykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4
T25TZXJ2ZXIiKTsKLQotICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7Ci0KLSAgICBtX2Rh
dGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuY3JlYXRlSW5kZXgob3BlcmF0aW9uLCBpbmZvKTsK
LX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlcihjb25zdCBJ
REJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6ZGlkQ3JlYXRlSW5kZXhPblNlcnZlciIpOwotCi0gICAgaWYgKHJlc3VsdERhdGEu
dHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkNyZWF0ZUluZGV4U3VjY2VzcykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkVy
cm9yKTsKLQotICAgIC8vIFRoaXMgb3BlcmF0aW9uIG1pZ2h0IGhhdmUgZmFpbGVkIGJlY2F1c2Ug
dGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgYWJvcnRpbmcuCi0gICAgaWYgKG1fc3RhdGUgPT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBYm9ydGluZykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gT3RoZXJ3aXNlLCBmYWlsdXJlIHRvIGNyZWF0ZSBhbiBpbmRleCBmb3JjZWQgYWJv
cnRpb24gb2YgdGhlIHRyYW5zYWN0aW9uLgotICAgIGFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0KERP
TUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFtZShyZXN1bHRE
YXRhLmVycm9yKCkuY29kZSgpKSkpOwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RPcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
Qk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yIik7
Ci0KLSAgICByZXR1cm4gZG9SZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCBJREJDdXJzb3JXaXRo
VmFsdWU6OmNyZWF0ZSgqdGhpcywgb2JqZWN0U3RvcmUsIGluZm8pKTsKLX0KLQotUmVmPElEQlJl
cXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIGNvbnN0IElEQkN1cnNvckluZm8mIGlu
Zm8pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1
cnNvciIpOwotCi0gICAgaWYgKGluZm8uY3Vyc29yVHlwZSgpID09IEluZGV4ZWREQjo6Q3Vyc29y
VHlwZTo6S2V5T25seSkKLSAgICAgICAgcmV0dXJuIGRvUmVxdWVzdE9wZW5DdXJzb3IoY29udGV4
dCwgSURCQ3Vyc29yOjpjcmVhdGUoKnRoaXMsIGluZGV4LCBpbmZvKSk7Ci0KLSAgICByZXR1cm4g
ZG9SZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZSgq
dGhpcywgaW5kZXgsIGluZm8pKTsKLX0KLQotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9u
Ojpkb1JlcXVlc3RPcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJl
ZjxJREJDdXJzb3I+JiYgY3Vyc29yKQotewotICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKLQotICAg
IFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIGN1
cnNvci5nZXQoKSwgKnRoaXMpOwotICAgIGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci0KLSAg
ICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1
ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZlciwgJklEQlRy
YW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIsIGN1cnNvci0+aW5mbygpKTsKLSAgICBzY2hl
ZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOwotCi0gICAgcmV0dXJuIHJlcXVlc3Q7
Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246Om9wZW5DdXJzb3JPblNlcnZlcihUcmFuc2FjdGlv
bk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6b3BlbkN1cnNvck9uU2VydmVyIik7Ci0K
LSAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkub3BlbkN1cnNvcihvcGVyYXRpb24s
IGluZm8pOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRPcGVuQ3Vyc29yT25TZXJ2ZXIo
SURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZl
ciIpOwotCi0gICAgcmVxdWVzdC5kaWRPcGVuT3JJdGVyYXRlQ3Vyc29yKHJlc3VsdERhdGEpOwot
fQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYgY3Vyc29y
LCBjb25zdCBJREJLZXlEYXRhJiBrZXksIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0gICAgTE9H
KEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yIik7Ci0gICAgQVNTRVJU
KGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVChjdXJzb3IucmVxdWVzdCgpKTsKLQotICAgIGFkZFJl
cXVlc3QoKmN1cnNvci5yZXF1ZXN0KCkpOwotCi0gICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVU
cmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgKmN1cnNvci5yZXF1ZXN0KCksICZJREJUcmFuc2Fj
dGlvbjo6ZGlkSXRlcmF0ZUN1cnNvck9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246Oml0ZXJhdGVD
dXJzb3JPblNlcnZlciwga2V5LCBjb3VudCk7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92
ZShvcGVyYXRpb24pKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9u
U2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQktleURhdGEm
IGtleSwgY29uc3QgdW5zaWduZWQgbG9uZyYgY291bnQpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yT25TZXJ2ZXIiKTsKLQotICAgIHNlcnZlckNv
bm5lY3Rpb24oKS5pdGVyYXRlQ3Vyc29yKG9wZXJhdGlvbiwga2V5LCBjb3VudCk7Ci19Ci0KLXZv
aWQgSURCVHJhbnNhY3Rpb246OmRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlcihJREJSZXF1ZXN0JiBy
ZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIExPRyhJbmRl
eGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkSXRlcmF0ZUN1cnNvck9uU2VydmVyIik7Ci0KLSAg
ICByZXF1ZXN0LmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IocmVzdWx0RGF0YSk7Ci19Ci0KLVJlZjxJ
REJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCIpOwotICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsK
LSAgICBBU1NFUlQoIWtleVJhbmdlRGF0YS5pc051bGwpOwotCi0gICAgUmVmPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgb2JqZWN0U3RvcmUsICp0aGlz
KTsKLSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotCi0gICAgYXV0byBvcGVyYXRpb24g
PSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRy
YW5zYWN0aW9uOjpkaWRHZXRSZWNvcmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRSZWNv
cmRPblNlcnZlciwga2V5UmFuZ2VEYXRhKTsKLSAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3Zl
KG9wZXJhdGlvbikpOwotCi0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0
PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkK
LXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1ZSIp
OwotICAgIHJldHVybiByZXF1ZXN0SW5kZXhSZWNvcmQoY29udGV4dCwgaW5kZXgsIEluZGV4ZWRE
Qjo6SW5kZXhSZWNvcmRUeXBlOjpWYWx1ZSwgcmFuZ2UpOwotfQotCi1SZWY8SURCUmVxdWVzdD4g
SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlIik7Ci0g
ICAgcmV0dXJuIHJlcXVlc3RJbmRleFJlY29yZChjb250ZXh0LCBpbmRleCwgSW5kZXhlZERCOjpJ
bmRleFJlY29yZFR5cGU6OktleSwgcmFuZ2UpOwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCVHJh
bnNhY3Rpb246OnJlcXVlc3RJbmRleFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBJREJJbmRleCYgaW5kZXgsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIHR5cGUsIGNv
bnN0IElEQktleVJhbmdlRGF0YSZyYW5nZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1ZSIpOwotICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKLSAg
ICBBU1NFUlQoIXJhbmdlLmlzTnVsbCk7Ci0KLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlJlcXVlc3Q6OmNyZWF0ZUdldChjb250ZXh0LCBpbmRleCwgdHlwZSwgKnRoaXMpOwotICAg
IGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci0KLSAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0
ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rp
b246OmRpZEdldFJlY29yZE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2Vy
dmVyLCByYW5nZSk7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsK
LQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpnZXRSZWNv
cmRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmIGtleVJhbmdlKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6Z2V0UmVjb3JkT25TZXJ2ZXIiKTsKLQotICAgIHNlcnZlckNvbm5lY3Rpb24oKS5nZXRSZWNv
cmQob3BlcmF0aW9uLCBrZXlSYW5nZSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEdl
dFJlY29yZE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdGEm
IHJlc3VsdERhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRH
ZXRSZWNvcmRPblNlcnZlciIpOwotCi0gICAgaWYgKHJlc3VsdERhdGEudHlwZSgpID09IElEQlJl
c3VsdFR5cGU6OkVycm9yKSB7Ci0gICAgICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1
bHREYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChyZXN1bHREYXRh
LnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpHZXRSZWNvcmRTdWNjZXNzKTsKLQotICAgIGNvbnN0
IElEQkdldFJlc3VsdCYgcmVzdWx0ID0gcmVzdWx0RGF0YS5nZXRSZXN1bHQoKTsKLQotICAgIGlm
IChyZXF1ZXN0LnNvdXJjZUluZGV4SWRlbnRpZmllcigpICYmIHJlcXVlc3QucmVxdWVzdGVkSW5k
ZXhSZWNvcmRUeXBlKCkgPT0gSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGU6OktleSkgewotICAg
ICAgICBpZiAoIXJlc3VsdC5rZXlEYXRhKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXF1ZXN0
LnNldFJlc3VsdCgmcmVzdWx0LmtleURhdGEoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAocmVzdWx0RGF0YS5nZXRSZXN1bHQoKS52YWx1ZUJ1ZmZlcigpLmRhdGEoKSkKLSAgICAgICAg
ICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUocmVzdWx0RGF0YS5nZXRSZXN1
bHQoKS52YWx1ZUJ1ZmZlcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVxdWVzdC5z
ZXRSZXN1bHRUb1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIHJlcXVlc3QucmVxdWVzdENvbXBs
ZXRlZChyZXN1bHREYXRhKTsKLX0KLQotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpy
ZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3Rv
cmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQotewotICAgIExP
RyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50IChJREJPYmplY3RTdG9y
ZSkiKTsKLSAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFyYW5nZS5pc051bGwp
OwotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29u
dGV4dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKLSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkp
OwotCi0gICAgc2NoZWR1bGVPcGVyYXRpb24oY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRo
aXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlciwg
JklEQlRyYW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVyLCByYW5nZSkpOwotCi0gICAgcmV0dXJu
IHJlcXVlc3Q7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246OnJlcXVlc3RDb3VudCAoSURCSW5kZXgpIik7Ci0gICAgQVNTRVJUKGlzQWN0aXZl
KCkpOwotICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsKLQotICAgIFJlZjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlQ291bnQoY29udGV4dCwgaW5kZXgsICp0aGlzKTsK
LSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotCi0gICAgc2NoZWR1bGVPcGVyYXRpb24o
Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFu
c2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRDb3VudE9u
U2VydmVyLCByYW5nZSkpOwotCi0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlv
biwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIiKTsKLQotICAgIHNlcnZlckNvbm5l
Y3Rpb24oKS5nZXRDb3VudChvcGVyYXRpb24sIGtleVJhbmdlKTsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJ
REJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlciIpOwotCi0gICAgcmVxdWVzdC5zZXRSZXN1bHQo
cmVzdWx0RGF0YS5yZXN1bHRJbnRlZ2VyKCkpOwotICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRl
ZChyZXN1bHREYXRhKTsKLX0KLQotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0RGVsZXRlUmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVj
dFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKLXsKLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQiKTsK
LSAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFyYW5nZS5pc051bGwpOwotCi0g
ICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
b2JqZWN0U3RvcmUsICp0aGlzKTsKLSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotCi0g
ICAgc2NoZWR1bGVPcGVyYXRpb24oY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJl
cXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIsICZJ
REJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIsIHJhbmdlKSk7Ci0gICAgcmV0dXJu
IHJlcXVlc3Q7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZE9uU2VydmVy
KFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQktleVJhbmdlRGF0YSYg
a2V5UmFuZ2UpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkZWxldGVS
ZWNvcmRPblNlcnZlciIpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZVJlY29yZChv
cGVyYXRpb24sIGtleVJhbmdlKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRl
UmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYg
cmVzdWx0RGF0YSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZERl
bGV0ZVJlY29yZE9uU2VydmVyIik7Ci0KLSAgICByZXF1ZXN0LnNldFJlc3VsdFRvVW5kZWZpbmVk
KCk7Ci0gICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOwotfQotCi1SZWY8
SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDbGVhck9iamVjdFN0b3JlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSkK
LXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDbGVhck9iamVj
dFN0b3JlIik7Ci0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotCi0gICAgUmVmPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgb2JqZWN0U3RvcmUsICp0aGlz
KTsKLSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotCi0gICAgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZpZXIoKTsKLSAgICBh
dXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0
LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZlciwgJklE
QlRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIsIG9iamVjdFN0b3JlSWRlbnRp
Zmllcik7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKLQotICAg
IHJldHVybiByZXF1ZXN0OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0
b3JlT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgdWludDY0
X3QmIG9iamVjdFN0b3JlSWRlbnRpZmllcikKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246OmNsZWFyT2JqZWN0U3RvcmVPblNlcnZlciIpOwotCi0gICAgc2VydmVyQ29ubmVj
dGlvbigpLmNsZWFyT2JqZWN0U3RvcmUob3BlcmF0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIp
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRDbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIo
SURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZENsZWFyT2JqZWN0U3RvcmVP
blNlcnZlciIpOwotCi0gICAgcmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOwotICAgIHJl
cXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKLX0KLQotUmVmPElEQlJlcXVlc3Q+
IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBJREJLZXkqIGtleSwgU2VyaWFs
aXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGUgb3ZlcndyaXRlTW9kZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OnJlcXVlc3RQdXRPckFkZCIpOwotICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQo
IWlzUmVhZE9ubHkoKSk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZm8oKS5hdXRvSW5jcmVt
ZW50KCkgfHwga2V5KTsKLQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7Ci0gICAgYWRkUmVxdWVzdChy
ZXF1ZXN0LmdldCgpKTsKLQotICAgIGF1dG8gb3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25P
cGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkUHV0T3JB
ZGRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyLCBrZXksICZ2YWx1
ZSwgb3ZlcndyaXRlTW9kZSk7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRp
b24pKTsKLQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpw
dXRPckFkZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJlZlB0cjxJ
REJLZXk+IGtleSwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlJiBvdmVyd3JpdGVNb2RlKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlciIpOwotCi0g
ICAgQVNTRVJUKCFpc1JlYWRPbmx5KCkpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLnB1dE9y
QWRkKG9wZXJhdGlvbiwga2V5LCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSk7Ci19Ci0KLXZvaWQgSURC
VHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIiKTsKLQotICAgIHJlcXVlc3Quc2V0UmVz
dWx0KHJlc3VsdERhdGEucmVzdWx0S2V5KCkpOwotICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRl
ZChyZXN1bHREYXRhKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZSIpOwotCi0gICAgQVNTRVJUKGlzVmVy
c2lvbkNoYW5nZSgpKTsKLQotICAgIGlmIChhdXRvIG9iamVjdFN0b3JlID0gbV9yZWZlcmVuY2Vk
T2JqZWN0U3RvcmVzLnRha2Uob2JqZWN0U3RvcmVOYW1lKSkKLSAgICAgICAgb2JqZWN0U3RvcmUt
Pm1hcmtBc0RlbGV0ZWQoKTsKLQotICAgIGF1dG8gb3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rp
b25PcGVyYXRpb24oKnRoaXMsICZJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVP
blNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZU9uU2VydmVyLCBvYmpl
Y3RTdG9yZU5hbWUpOwotICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7
Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoVHJh
bnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RT
dG9yZU9uU2VydmVyIik7Ci0gICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLQotICAgIHNl
cnZlckNvbm5lY3Rpb24oKS5kZWxldGVPYmplY3RTdG9yZShvcGVyYXRpb24sIG9iamVjdFN0b3Jl
TmFtZSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZU9iamVjdFN0b3JlT25T
ZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKLSAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3Vs
dFR5cGU6OkRlbGV0ZU9iamVjdFN0b3JlU3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJ
REJSZXN1bHRUeXBlOjpFcnJvcik7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRlbGV0ZUlu
ZGV4KHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5h
bWUpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkZWxldGVJbmRleCIp
OwotCi0gICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLQotICAgIGF1dG8gb3BlcmF0aW9u
ID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICZJREJUcmFuc2FjdGlvbjo6ZGlk
RGVsZXRlSW5kZXhPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpkZWxldGVJbmRleE9uU2VydmVy
LCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7Ci0gICAgc2NoZWR1bGVPcGVyYXRp
b24oV1RGTW92ZShvcGVyYXRpb24pKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRl
SW5kZXhPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCB1aW50
NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIi
KTsKLSAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwotCi0gICAgc2VydmVyQ29ubmVjdGlv
bigpLmRlbGV0ZUluZGV4KG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBpbmRleE5h
bWUpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyKGNv
bnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVyIik7Ci0gICAgQVNTRVJUX1VOVVNF
RChyZXN1bHREYXRhLCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpEZWxldGVJ
bmRleFN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJyb3Ip
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25EaWRDb21wbGV0ZShUcmFuc2Fj
dGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3Bl
cmF0aW9uTWFwLmdldChvcGVyYXRpb24uaWRlbnRpZmllcigpKSA9PSAmb3BlcmF0aW9uKTsKLSAg
ICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnJlbW92ZShvcGVyYXRpb24uaWRlbnRpZmllcigp
KTsKLQotICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsKLX0KLQotdm9pZCBJREJUcmFuc2Fj
dGlvbjo6ZXN0YWJsaXNoT25TZXJ2ZXIoKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6ZXN0YWJsaXNoT25TZXJ2ZXIiKTsKLQotICAgIHNlcnZlckNvbm5lY3Rpb24oKS5l
c3RhYmxpc2hUcmFuc2FjdGlvbigqdGhpcyk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmFj
dGl2YXRlKCkKLXsKLSAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc3RhdGUgPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2
ZTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVhY3RpdmF0ZSgpCi17Ci0gICAgaWYgKG1f
c3RhdGUgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBY3RpdmUpCi0gICAgICAgIG1f
c3RhdGUgPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkluYWN0aXZlOwotCi0gICAgc2No
ZWR1bGVPcGVyYXRpb25UaW1lcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QlRyYW5zYWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
YjU0ODFhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJUcmFuc2FjdGlvbkltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkltcGxfaAotI2RlZmluZSBJREJU
cmFuc2FjdGlvbkltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJJREJEYXRhYmFzZUluZm8uaCIKLSNpbmNsdWRlICJJREJFcnJvci5oIgotI2luY2x1ZGUg
IklEQkluZGV4SW1wbC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlSW1wbC5oIgotI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbmZvLmgiCi0j
aW5jbHVkZSAiSW5kZXhlZERCLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIElEQkN1cnNvckluZm87Ci1jbGFzcyBJREJJbmRleEluZm87Ci1jbGFzcyBJREJL
ZXlEYXRhOwotY2xhc3MgSURCT2JqZWN0U3RvcmVJbmZvOwotY2xhc3MgSURCUmVzdWx0RGF0YTsK
LQotc3RydWN0IElEQktleVJhbmdlRGF0YTsKLQotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLWNs
YXNzIElEQkN1cnNvcjsKLWNsYXNzIElEQkRhdGFiYXNlOwotY2xhc3MgSURCSW5kZXg7Ci1jbGFz
cyBJREJPcGVuREJSZXF1ZXN0OwotY2xhc3MgVHJhbnNhY3Rpb25PcGVyYXRpb247Ci0KLWNsYXNz
IElEQlRyYW5zYWN0aW9uIDogcHVibGljIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoSURCRGF0YWJhc2UmLCBj
b25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKLSAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9u
PiBjcmVhdGUoSURCRGF0YWJhc2UmLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mLCBJREJPcGVu
REJSZXF1ZXN0Jik7Ci0KLSAgICB+SURCVHJhbnNhY3Rpb24oKSBmaW5hbDsKLQotICAgIC8vIElE
QlRyYW5zYWN0aW9uIElETAotICAgIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0IGZpbmFsOwot
ICAgIFdlYkNvcmU6OklEQkRhdGFiYXNlKiBkYigpIGZpbmFsOwotICAgIFJlZlB0cjxET01FcnJv
cj4gZXJyb3IoKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmU+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJikgZmluYWw7Ci0gICAgdm9pZCBhYm9ydChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBm
aW5hbDsKLQotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gSURCVHJhbnNhY3Rpb25FdmVudFRhcmdldEludGVyZmFjZVR5
cGU7IH0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7IH0KLSAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyByZWYoKTsgfQot
ICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgZGVyZWYoKTsgfQotICAgIHVzaW5n
IEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVu
dCYpIGZpbmFsOwotCi0gICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgZmluYWw7Ci0gICAg
dm9pZCBzdG9wKCkgZmluYWw7Ci0KLSAgICBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8o
KSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KLSAgICBJREJEYXRhYmFzZSYgZGF0YWJhc2UoKSB7
IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9Ci0gICAgY29uc3QgSURCRGF0YWJhc2UmIGRhdGFi
YXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQotICAgIElEQkRhdGFiYXNl
SW5mbyogb3JpZ2luYWxEYXRhYmFzZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm8ub3JpZ2lu
YWxEYXRhYmFzZUluZm8oKTsgfQotCi0gICAgdm9pZCBkaWRTdGFydChjb25zdCBJREJFcnJvciYp
OwotICAgIHZvaWQgZGlkQWJvcnQoY29uc3QgSURCRXJyb3ImKTsKLSAgICB2b2lkIGRpZENvbW1p
dChjb25zdCBJREJFcnJvciYpOwotCi0gICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX2luZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJz
aW9uQ2hhbmdlOyB9Ci0gICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9pbmZv
Lm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHk7IH0KLSAgICBi
b29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0KLSAgICBSZWY8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYpOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJJbmRleElu
Zm8mKTsKLQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0UHV0T3JBZGQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgSURCS2V5KiwgU2VyaWFsaXplZFNjcmlwdFZh
bHVlJiwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUpOwotICAgIFJlZjxJREJS
ZXF1ZXN0PiByZXF1ZXN0R2V0UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmpl
Y3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIFJlZjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0RGVsZXRlUmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9y
ZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0
Q2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUm
KTsKLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdENvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIFJlZjxJ
REJSZXF1ZXN0PiByZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4
JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RH
ZXRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmKTsKLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEdldEtleShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKLSAgICBS
ZWY8SURCUmVxdWVzdD4gcmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwotICAgIFJlZjxJREJSZXF1
ZXN0PiByZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgm
LCBjb25zdCBJREJDdXJzb3JJbmZvJik7Ci0gICAgdm9pZCBpdGVyYXRlQ3Vyc29yKElEQkN1cnNv
ciYsIGNvbnN0IElEQktleURhdGEmLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotICAgIHZvaWQg
ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpOwotICAgIHZv
aWQgZGVsZXRlSW5kZXgodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGluZGV4TmFtZSk7Ci0KLSAgICB2b2lkIGFkZFJlcXVlc3QoSURCUmVxdWVzdCYpOwotICAg
IHZvaWQgcmVtb3ZlUmVxdWVzdChJREJSZXF1ZXN0Jik7Ci0KLSAgICB2b2lkIGFib3J0RHVlVG9G
YWlsZWRSZXF1ZXN0KERPTUVycm9yJik7Ci0KLSAgICBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIHNl
cnZlckNvbm5lY3Rpb24oKTsKLQotICAgIHZvaWQgYWN0aXZhdGUoKTsKLSAgICB2b2lkIGRlYWN0
aXZhdGUoKTsKLQotICAgIHZvaWQgb3BlcmF0aW9uRGlkQ29tcGxldGUoVHJhbnNhY3Rpb25PcGVy
YXRpb24mKTsKLQotICAgIGJvb2wgaXNGaW5pc2hlZE9yRmluaXNoaW5nKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0ZpbmlzaGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRy
YW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkOyB9Ci0KLXByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rp
b24oSURCRGF0YWJhc2UmLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mLCBJREJPcGVuREJSZXF1
ZXN0Kik7Ci0KLSAgICB2b2lkIGNvbW1pdCgpOwotCi0gICAgdm9pZCBub3RpZnlEaWRBYm9ydChj
b25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZmluaXNoQWJvcnRPckNvbW1pdCgpOwotCi0gICAg
dm9pZCBzY2hlZHVsZU9wZXJhdGlvbihSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+JiYpOwot
ICAgIHZvaWQgb3BlcmF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBmaXJlT25Db21wbGV0
ZSgpOwotICAgIHZvaWQgZmlyZU9uQWJvcnQoKTsKLSAgICB2b2lkIGVucXVldWVFdmVudChSZWY8
RXZlbnQ+JiYpOwotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RJbmRleFJlY29yZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlw
ZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0KLSAgICB2b2lkIGNvbW1pdE9uU2VydmVyKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJik7Ci0gICAgdm9pZCBhYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVx
dWVzdHMoVHJhbnNhY3Rpb25PcGVyYXRpb24mKTsKLQotICAgIHZvaWQgY3JlYXRlT2JqZWN0U3Rv
cmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5m
byYpOwotICAgIHZvaWQgZGlkQ3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1
bHREYXRhJik7Ci0KLSAgICB2b2lkIGNyZWF0ZUluZGV4T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVy
YXRpb24mLCBjb25zdCBJREJJbmRleEluZm8mKTsKLSAgICB2b2lkIGRpZENyZWF0ZUluZGV4T25T
ZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBjbGVhck9iamVjdFN0b3Jl
T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyKTsKLSAgICB2b2lkIGRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZlcihJREJS
ZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBwdXRPckFkZE9uU2Vy
dmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgUmVmUHRyPElEQktleT4sIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+LCBjb25zdCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSYpOwotICAgIHZvaWQgZGlkUHV0T3JBZGRPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3QgSURC
UmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBnZXRSZWNvcmRPblNlcnZlcihUcmFuc2FjdGlvbk9w
ZXJhdGlvbiYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgZGlkR2V0UmVjb3Jk
T25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLQotICAgIHZvaWQg
Z2V0Q291bnRPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYpOwotICAgIHZvaWQgZGlkR2V0Q291bnRPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3Qg
SURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBkZWxldGVSZWNvcmRPblNlcnZlcihUcmFuc2Fj
dGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIHZvaWQgZGlkRGVs
ZXRlUmVjb3JkT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLQot
ICAgIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKTsKLSAgICB2b2lkIGRpZERlbGV0ZU9iamVj
dFN0b3JlT25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBkZWxldGVJ
bmRleE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgdWludDY0X3QmIG9iamVj
dFN0b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwotICAgIHZvaWQgZGlk
RGVsZXRlSW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAgICBSZWY8SURC
UmVxdWVzdD4gZG9SZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVm
PElEQkN1cnNvcj4mJik7Ci0gICAgdm9pZCBvcGVuQ3Vyc29yT25TZXJ2ZXIoVHJhbnNhY3Rpb25P
cGVyYXRpb24mLCBjb25zdCBJREJDdXJzb3JJbmZvJik7Ci0gICAgdm9pZCBkaWRPcGVuQ3Vyc29y
T25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLQotICAgIHZvaWQg
aXRlcmF0ZUN1cnNvck9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCS2V5
RGF0YSYsIGNvbnN0IHVuc2lnbmVkIGxvbmcmIGNvdW50KTsKLSAgICB2b2lkIGRpZEl0ZXJhdGVD
dXJzb3JPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAg
dm9pZCB0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyhJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGUp
OwotCi0gICAgdm9pZCBlc3RhYmxpc2hPblNlcnZlcigpOwotCi0gICAgdm9pZCBzY2hlZHVsZU9w
ZXJhdGlvblRpbWVyKCk7Ci0KLSAgICBSZWY8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7Ci0gICAg
SURCVHJhbnNhY3Rpb25JbmZvIG1faW5mbzsKLQotICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZSBtX3N0YXRlIHsgSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpJbmFjdGl2ZSB9Owot
ICAgIGJvb2wgbV9zdGFydGVkT25TZXJ2ZXIgeyBmYWxzZSB9OwotCi0gICAgSURCRXJyb3IgbV9p
ZGJFcnJvcjsKLSAgICBSZWZQdHI8RE9NRXJyb3I+IG1fZG9tRXJyb3I7Ci0KLSAgICBUaW1lciBt
X29wZXJhdGlvblRpbWVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUaW1lcj4gbV9hY3RpdmF0aW9u
VGltZXI7Ci0KLSAgICBSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gbV9vcGVuREJSZXF1ZXN0Owot
Ci0gICAgRGVxdWU8UmVmUHRyPFRyYW5zYWN0aW9uT3BlcmF0aW9uPj4gbV90cmFuc2FjdGlvbk9w
ZXJhdGlvblF1ZXVlOwotICAgIERlcXVlPFJlZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4+IG1f
YWJvcnRRdWV1ZTsKLSAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRyPFRy
YW5zYWN0aW9uT3BlcmF0aW9uPj4gbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcDsKLQotICAgIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+PiBtX3JlZmVyZW5jZWRPYmplY3RT
dG9yZXM7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxJREJSZXF1ZXN0Pj4gbV9vcGVuUmVxdWVzdHM7
Ci0KLSAgICBib29sIG1fY29udGV4dFN0b3BwZWQgeyBmYWxzZSB9OwotfTsKLQotY2xhc3MgVHJh
bnNhY3Rpb25BY3RpdmF0b3IgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRyYW5zYWN0aW9u
QWN0aXZhdG9yKTsKLXB1YmxpYzoKLSAgICBUcmFuc2FjdGlvbkFjdGl2YXRvcihJREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikK
LSAgICB7Ci0gICAgICAgIGlmIChtX3RyYW5zYWN0aW9uKQotICAgICAgICAgICAgbV90cmFuc2Fj
dGlvbi0+YWN0aXZhdGUoKTsKLSAgICB9Ci0KLSAgICB+VHJhbnNhY3Rpb25BY3RpdmF0b3IoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fdHJhbnNhY3Rpb24pCi0gICAgICAgICAgICBtX3RyYW5zYWN0
aW9uLT5kZWFjdGl2YXRlKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIElEQlRyYW5zYWN0aW9u
KiBtX3RyYW5zYWN0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50Ci19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNl
bmRpZiAvLyBJREJUcmFuc2FjdGlvbkltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VF
dmVudEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2E4ZjJhLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJz
aW9uQ2hhbmdlRXZlbnRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5n
ZUV2ZW50SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1JREJWZXJzaW9uQ2hhbmdlRXZl
bnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJl
cXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKLSAgICA6IFdlYkNvcmU6OklEQlZlcnNp
b25DaGFuZ2VFdmVudChldmVudFR5cGUpCi0gICAgLCBtX3JlcXVlc3RJZGVudGlmaWVyKHJlcXVl
c3RJZGVudGlmaWVyKQotICAgICwgbV9vbGRWZXJzaW9uKG9sZFZlcnNpb24pCi0gICAgLCBtX25l
d1ZlcnNpb24obmV3VmVyc2lvbikKLXsKLX0KLQotT3B0aW9uYWw8dWludDY0X3Q+IElEQlZlcnNp
b25DaGFuZ2VFdmVudDo6bmV3VmVyc2lvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX25ld1ZlcnNp
b24pCi0gICAgICAgIHJldHVybiBOdWxsb3B0OwotICAgIHJldHVybiBtX25ld1ZlcnNpb247Ci19
Ci0KLUV2ZW50SW50ZXJmYWNlIElEQlZlcnNpb25DaGFuZ2VFdmVudDo6ZXZlbnRJbnRlcmZhY2Uo
KSBjb25zdAotewotICAgIHJldHVybiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbnRlcmZhY2VUeXBl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9u
Q2hhbmdlRXZlbnRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOTExNTUu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lE
QlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGxfaAotI2RlZmlu
ZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jaW5jbHVkZSAiSURCUmVzb3VyY2VJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJ
REJDbGllbnQgewotCi1jbGFzcyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgZmluYWwgOiBwdWJsaWMg
V2ViQ29yZTo6SURCVmVyc2lvbkNoYW5nZUV2ZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2
NF90IG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCVmVyc2lvbkNoYW5nZUV2ZW50KElEQlJlc291
cmNlSWRlbnRpZmllcjo6ZW1wdHlWYWx1ZSgpLCBvbGRWZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVu
dFR5cGUpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPElEQlZlcnNpb25DaGFuZ2VFdmVudD4g
Y3JlYXRlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVp
bnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCVmVy
c2lvbkNoYW5nZUV2ZW50KHJlcXVlc3RJZGVudGlmaWVyLCBvbGRWZXJzaW9uLCBuZXdWZXJzaW9u
LCBldmVudFR5cGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0SWRlbnRpZmllcjsg
fQotCi0gICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2VFdmVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KLQotcHJpdmF0ZToKLSAgICBJREJWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVyc2lv
biwgdWludDY0X3QgbmV3VmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpOwot
Ci0gICAgdWludDY0X3Qgb2xkVmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fb2xk
VmVyc2lvbjsgfQotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBuZXdWZXJzaW9uKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgRXZlbnRJbnRlcmZhY2UgZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlk
ZTsKLQotICAgIElEQlJlc291cmNlSWRlbnRpZmllciBtX3JlcXVlc3RJZGVudGlmaWVyOwotICAg
IHVpbnQ2NF90IG1fb2xkVmVyc2lvbjsKLSAgICB1aW50NjRfdCBtX25ld1ZlcnNpb247Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpJREJDbGllbnQ6OklEQlZlcnNpb25D
aGFuZ2VFdmVudCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RXZlbnQm
IGV2ZW50KSB7IHJldHVybiBldmVudC5pc1ZlcnNpb25DaGFuZ2VFdmVudCgpOyB9Ci1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSNlbmRpZiAvLyBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rp
b25PcGVyYXRpb24uY3BwCmluZGV4IGY2N2FkMWQuLmE2ZWFkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0
aW9uT3BlcmF0aW9uLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJDdXJzb3JJbXBsLmgiCisjaW5jbHVkZSAiSURCQ3Vy
c29yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJDbGllbnQgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0
aW9uT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
VHJhbnNhY3Rpb25PcGVyYXRpb24uaAppbmRleCBjOTM5NjA1Li4zYzA5ZTI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVy
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJh
bnNhY3Rpb25PcGVyYXRpb24uaApAQCAtMjgsOSArMjgsOSBAQAogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJSZXF1ZXN0SW1wbC5oIgorI2luY2x1ZGUgIklE
QlJlcXVlc3QuaCIKICNpbmNsdWRlICJJREJSZXNvdXJjZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkltcGwuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZvLmNwcAppbmRleCAwZWI5NDE0Li42NzBh
Mzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCQ3Vyc29ySW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQkN1cnNvckluZm8uY3BwCkBAIC0yOCwxNyArMjgsMTcgQEAKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCisj
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJJbmRleGVkREIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1JREJDdXJzb3JJbmZvIElEQkN1cnNvckluZm86Om9iamVjdFN0
b3JlQ3Vyc29yKElEQkNsaWVudDo6SURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKK0lEQkN1cnNvckluZm8gSURCQ3Vy
c29ySW5mbzo6b2JqZWN0U3RvcmVDdXJzb3IoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1
aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFu
Z2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICByZXR1cm4g
eyB0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCByYW5nZSwgZGlyZWN0aW9uLCBJ
bmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlIH07CiB9CiAKLUlEQkN1cnNvckluZm8g
SURCQ3Vyc29ySW5mbzo6aW5kZXhDdXJzb3IoSURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSB0eXBlKQorSURCQ3Vy
c29ySW5mbyBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcihJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVu
dGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSB0eXBlKQogewogICAgIHJl
dHVybiB7IHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4SWRlbnRpZmll
ciwgcmFuZ2UsIGRpcmVjdGlvbiwgdHlwZSB9OwogfQpAQCAtNDcsNyArNDcsNyBAQCBJREJDdXJz
b3JJbmZvOjpJREJDdXJzb3JJbmZvKCkKIHsKIH0KIAotSURCQ3Vyc29ySW5mbzo6SURCQ3Vyc29y
SW5mbyhJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJbmRleGVk
REI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSB0eXBl
KQorSURCQ3Vyc29ySW5mbzo6SURCQ3Vyc29ySW5mbyhJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
JiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6
OkN1cnNvclR5cGUgdHlwZSkKICAgICA6IG1fY3Vyc29ySWRlbnRpZmllcih0cmFuc2FjdGlvbi5z
ZXJ2ZXJDb25uZWN0aW9uKCkpCiAgICAgLCBtX3RyYW5zYWN0aW9uSWRlbnRpZmllcih0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKQogICAgICwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIo
b2JqZWN0U3RvcmVJZGVudGlmaWVyKQpAQCAtNTksNyArNTksNyBAQCBJREJDdXJzb3JJbmZvOjpJ
REJDdXJzb3JJbmZvKElEQkNsaWVudDo6SURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50
NjRfdCBvYgogewogfQogCi1JREJDdXJzb3JJbmZvOjpJREJDdXJzb3JJbmZvKElEQkNsaWVudDo6
SURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIHVpbnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5n
ZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNv
clR5cGUgdHlwZSkKK0lEQkN1cnNvckluZm86OklEQkN1cnNvckluZm8oSURCVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVpbnQ2NF90IGlu
ZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgdHlwZSkKICAg
ICA6IG1fY3Vyc29ySWRlbnRpZmllcih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9uKCkpCiAg
ICAgLCBtX3RyYW5zYWN0aW9uSWRlbnRpZmllcih0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmll
cigpKQogICAgICwgbV9vYmplY3RTdG9yZUlkZW50aWZpZXIob2JqZWN0U3RvcmVJZGVudGlmaWVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QkN1cnNvckluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJDdXJzb3JJbmZvLmgKaW5kZXggOWExY2VlMi4uOWZkOThjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkN1cnNvckluZm8uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCQ3Vyc29ySW5mby5oCkBA
IC0zMyw5ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNwYWNlIElEQkNs
aWVudCB7CiBjbGFzcyBJREJUcmFuc2FjdGlvbjsKLX0KIAogbmFtZXNwYWNlIEluZGV4ZWREQiB7
CiBlbnVtIGNsYXNzIEN1cnNvckRpcmVjdGlvbjsKQEAgLTUyLDggKzUwLDggQEAgZW51bSBjbGFz
cyBDdXJzb3JEdXBsaWNpdHkgewogCiBjbGFzcyBJREJDdXJzb3JJbmZvIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgSURCQ3Vyc29ySW5mbyBvYmplY3RTdG9yZUN1cnNvcihJREJDbGllbnQ6OklEQlRy
YW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbik7Ci0gICAgc3RhdGljIElEQkN1
cnNvckluZm8gaW5kZXhDdXJzb3IoSURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbiYsIHVpbnQ2NF90
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpD
dXJzb3JUeXBlKTsKKyAgICBzdGF0aWMgSURCQ3Vyc29ySW5mbyBvYmplY3RTdG9yZUN1cnNvcihJ
REJUcmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24pOworICAgIHN0YXRpYyBJ
REJDdXJzb3JJbmZvIGluZGV4Q3Vyc29yKElEQlRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5
cGUpOwogCiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnNvcklkZW50aWZpZXI7IH0KICAgICB1aW50NjRfdCBzb3VyY2VJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJZGVudGlmaWVyOyB9CkBAIC03NCw4ICs3Miw4IEBA
IHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgYm9vbCBkZWNvZGUo
RGVjb2RlciYsIElEQkN1cnNvckluZm8mKTsKIAogcHJpdmF0ZToKLSAgICBJREJDdXJzb3JJbmZv
KElEQkNsaWVudDo6SURCVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUpOwotICAgIElEQkN1cnNvckluZm8oSURCQ2xpZW50OjpJREJU
cmFuc2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5k
ZXhJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlKTsKKyAgICBJREJDdXJzb3JJbmZvKElEQlRy
YW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlS
YW5nZURhdGEmLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JU
eXBlKTsKKyAgICBJREJDdXJzb3JJbmZvKElEQlRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5
cGUpOwogCiAgICAgSURCQ3Vyc29ySW5mbyhjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImLCB1aW50NjRfdCwgdWludDY0X3QsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYsIEluZGV4ZWREQjo6Q3Vyc29yU291cmNlLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAK
aW5kZXggYWNjYWExNC4uOWJjOTk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwCkBAIC0yOSw3ICsy
OSw4IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXIuaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0SW1wbC5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDcgKzM4LDcgQEAgSURCUmVxdWVzdERhdGE6OklE
QlJlcXVlc3REYXRhKCkKIHsKIH0KIAotSURCUmVxdWVzdERhdGE6OklEQlJlcXVlc3REYXRhKGNv
bnN0IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uLCBjb25zdCBJ
REJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3QmIHJlcXVlc3QpCitJREJSZXF1ZXN0RGF0YTo6SURC
UmVxdWVzdERhdGEoY29uc3QgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5l
Y3Rpb24sIGNvbnN0IElEQk9wZW5EQlJlcXVlc3QmIHJlcXVlc3QpCiAgICAgOiBtX3NlcnZlckNv
bm5lY3Rpb25JZGVudGlmaWVyKGNvbm5lY3Rpb24uaWRlbnRpZmllcigpKQogICAgICwgbV9yZXF1
ZXN0SWRlbnRpZmllcihzdGQ6Om1ha2VfdW5pcXVlPElEQlJlc291cmNlSWRlbnRpZmllcj4oY29u
bmVjdGlvbiwgcmVxdWVzdCkpCiAgICAgLCBtX2RhdGFiYXNlSWRlbnRpZmllcihyZXF1ZXN0LmRh
dGFiYXNlSWRlbnRpZmllcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuaAppbmRleCA3NTg5YWRmLi4wNmQxNWQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
UmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCUmVxdWVzdERhdGEuaApAQCAtMzQsMjAgKzM0LDIxIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSURCT3BlbkRCUmVxdWVzdDsKK2NsYXNzIElEQlRyYW5zYWN0aW9uOwor
CiBuYW1lc3BhY2UgSW5kZXhlZERCIHsKIGVudW0gY2xhc3MgSW5kZXhSZWNvcmRUeXBlOwogfQog
CiBuYW1lc3BhY2UgSURCQ2xpZW50IHsKIGNsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsKLWNs
YXNzIElEQk9wZW5EQlJlcXVlc3Q7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsKIGNsYXNzIFRyYW5z
YWN0aW9uT3BlcmF0aW9uOwogfQogCiBjbGFzcyBJREJSZXF1ZXN0RGF0YSB7CiBwdWJsaWM6Ci0g
ICAgSURCUmVxdWVzdERhdGEoY29uc3QgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXIm
LCBjb25zdCBJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3QmKTsKKyAgICBJREJSZXF1ZXN0RGF0
YShjb25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0IElEQk9wZW5E
QlJlcXVlc3QmKTsKICAgICBleHBsaWNpdCBJREJSZXF1ZXN0RGF0YShJREJDbGllbnQ6OlRyYW5z
YWN0aW9uT3BlcmF0aW9uJik7CiAgICAgSURCUmVxdWVzdERhdGEoY29uc3QgSURCUmVxdWVzdERh
dGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQlJlc291cmNlSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcAppbmRleCAyNmM2ZTZjLi43
NzNjNTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcApAQCAtMzAsNyArMzAs
NyBAQAogCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURC
Q29ubmVjdGlvblRvU2VydmVyLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdEltcGwuaCIKKyNpbmNs
dWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNjUsNyArNjUsNyBAQCBJREJSZXNvdXJjZUlkZW50aWZpZXI6OklE
QlJlc291cmNlSWRlbnRpZmllcihjb25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1Nlcgog
ewogfQogCi1JREJSZXNvdXJjZUlkZW50aWZpZXI6OklEQlJlc291cmNlSWRlbnRpZmllcihjb25z
dCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgY29uc3QgSURC
Q2xpZW50OjpJREJSZXF1ZXN0JiByZXF1ZXN0KQorSURCUmVzb3VyY2VJZGVudGlmaWVyOjpJREJS
ZXNvdXJjZUlkZW50aWZpZXIoY29uc3QgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXIm
IGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlcXVlc3QmIHJlcXVlc3QpCiAgICAgOiBtX2lkYkNvbm5l
Y3Rpb25JZGVudGlmaWVyKGNvbm5lY3Rpb24uaWRlbnRpZmllcigpKQogICAgICwgbV9yZXNvdXJj
ZU51bWJlcihyZXF1ZXN0LnJlc291cmNlSWRlbnRpZmllcigpLm1fcmVzb3VyY2VOdW1iZXIpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
UmVzb3VyY2VJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmgKaW5kZXggNDE0MTM0NS4uMjUxN2VhOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291
cmNlSWRlbnRpZmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIuaApAQCAtMzIsOSArMzIsMTAgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJSZXF1ZXN0OworCiBuYW1lc3BhY2UgSURCQ2xpZW50
IHsKIGNsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsKLWNsYXNzIElEQlJlcXVlc3Q7CiB9CiAK
IG5hbWVzcGFjZSBJREJTZXJ2ZXIgewpAQCAtNDQsNyArNDUsNyBAQCBjbGFzcyBJREJDb25uZWN0
aW9uVG9DbGllbnQ7CiBjbGFzcyBJREJSZXNvdXJjZUlkZW50aWZpZXIgewogcHVibGljOgogICAg
IGV4cGxpY2l0IElEQlJlc291cmNlSWRlbnRpZmllcihjb25zdCBJREJDbGllbnQ6OklEQkNvbm5l
Y3Rpb25Ub1NlcnZlciYpOwotICAgIElEQlJlc291cmNlSWRlbnRpZmllcihjb25zdCBJREJDbGll
bnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0IElEQkNsaWVudDo6SURCUmVxdWVzdCYp
OworICAgIElEQlJlc291cmNlSWRlbnRpZmllcihjb25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Ub1NlcnZlciYsIGNvbnN0IElEQlJlcXVlc3QmKTsKICAgICBleHBsaWNpdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXIoY29uc3QgSURCU2VydmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKIAog
ICAgIHN0YXRpYyBJREJSZXNvdXJjZUlkZW50aWZpZXIgZGVsZXRlZFZhbHVlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCVHJhbnNhY3Rp
b25JbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJU
cmFuc2FjdGlvbkluZm8uY3BwCmluZGV4IDE2YTUyZTQuLjNjYWJkNTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJUcmFuc2FjdGlvbkluZm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJUcmFu
c2FjdGlvbkluZm8uY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKIAotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgorI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURC
U2VydmVyLmNwcAppbmRleCA2MWMwN2E4Li5mYWUxMzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2Vy
dmVyLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5oIgogI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZURh
dGEuaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0SW1wbC5oIgorI2luY2x1ZGUgIklEQk9w
ZW5EQlJlcXVlc3QuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0RGF0YS5oIgogI2luY2x1ZGUgIklE
QlJlc3VsdERhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVy
LmgKaW5kZXggNzFkOTc4Yi4uMGU2NDMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaApAQCAt
MzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5j
bHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCi0jaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVz
dEltcGwuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSURCU2Vy
dmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDU2MjUzOWQuLjg1ZDAxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5NDYsMTIgKzE5NDYsNiBAQAogCQk1
MTAxOTJEMjE4QjZCOUFCMDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50TWFjLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxOTJEMDE4
QjZCOUFCMDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50TWFjLmggKi87IH07CiAJ
CTUxMDE5MkQ1MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTkyRDMx
OEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5jcHAgKi87IH07CiAJ
CTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE5MkQ0MThC
NkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCAqLzsgfTsKLQkJNTEw
MzEwNEYxQkE4Q0MwMzAwMzMyOUMwIC8qIElEQkZhY3RvcnlJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDMxMDRBMUJBOEM2QTYwMDMzMjlD
MCAvKiBJREJGYWN0b3J5SW1wbC5jcHAgKi87IH07Ci0JCTUxMDMxMDUwMUJBOENDMDMwMDMzMjlD
MCAvKiBJREJGYWN0b3J5SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwMzEwNEIxQkE4QzZBNjAwMzMyOUMwIC8qIElEQkZhY3RvcnlJbXBsLmgg
Ki87IH07Ci0JCTUxMDMxMDVBMUJBOERCNTYwMDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAz
MTA1NjFCQThEQjMwMDAzMzI5QzAgLyogSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwICovOyB9Owot
CQk1MTAzMTA1QjFCQThEQjU2MDAzMzI5QzAgLyogSURCT3BlbkRCUmVxdWVzdEltcGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDMxMDU3MUJBOERC
MzAwMDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxMDMxMDVDMUJBOERCNTYwMDMzMjlDMCAv
KiBJREJSZXF1ZXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTAzMTA1ODFCQThEQjMwMDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwuY3Bw
ICovOyB9OwotCQk1MTAzMTA1RDFCQThEQjU2MDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDMxMDU5MUJB
OERCMzAwMDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMDZEN0JEMThCREI3NkYwMDBBQjE2NiAvKiBD
b250ZXh0TWVudUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwNkQ3QkIxOEJEQjc2RjAwMEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4
dC5jcHAgKi87IH07CiAJCTUxMDZEN0JFMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNv
bnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MDZEN0JDMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTBBNThFNDFCQUE0MEIx
MDBDMTkyODIgLyogSW5Qcm9jZXNzSURCU2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE1OEUyMUJBQTQwQUUwMEMxOTI4MiAvKiBJblBy
b2Nlc3NJREJTZXJ2ZXIuY3BwICovOyB9OwpAQCAtMjA0Nyw4ICsyMDQxLDYgQEAKIAkJNTE2MDMw
NkMwQ0M0MzYyMzAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1DRi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwMzA2QjBDQzQzNjIzMDBDOEFDMjUgLyog
RmlsZVN5c3RlbUNGLmNwcCAqLzsgfTsKIAkJNTE2MDcxMkUxQkQ4MzA3ODAwREJDNEYyIC8qIElE
Qk9iamVjdFN0b3JlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTYwNzEyQzFCRDgzMDcyMDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbmZv
LmNwcCAqLzsgfTsKIAkJNTE2MDcxMkYxQkQ4MzA3ODAwREJDNEYyIC8qIElEQk9iamVjdFN0b3Jl
SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
MDcxMkQxQkQ4MzA3MjAwREJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW5mby5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxNjA3MTMwMUJEODMwODYw
MERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MDcxMjkxQkQ4MzA1MzAwREJDNEYyIC8qIElEQk9i
amVjdFN0b3JlSW1wbC5jcHAgKi87IH07Ci0JCTUxNjA3MTMxMUJEODMwODYwMERCQzRGMiAvKiBJ
REJPYmplY3RTdG9yZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjA3MTJBMUJEODMwNTMwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUltcGwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTYw
NzEzMjFCRDgzMDhCMDBEQkM0RjIgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjA3MTJCMUJEODMwNTMwMERC
QzRGMiAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNjBGNDk4MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0
b3J5SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjBGNDk3MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSAqLzsgfTsK
IAkJNTE2MkM3RjQxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJDN0YyMTFGNzdFRkEw
MDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi87IH07CkBAIC0yMTYwLDE0ICsyMTUyLDYg
QEAKIAkJNTE5OEY3QTkxQkJERDM4NTAwRTJDQzVGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNh
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
OThGN0E3MUJCREQzODEwMEUyQ0M1RiAvKiBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE5OEY3
QUMxQkJERDNFQjAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW5mby5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk4RjdBQTFCQkREM0UzMDBFMkND
NUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmNwcCAqLzsgfTsKIAkJNTE5OEY3QUQxQkJERDNFQjAw
RTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QUIxQkJERDNFMzAwRTJDQzVGIC8qIElEQlRyYW5z
YWN0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTUxOThGN0IwMUJCREY1QzgwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QUUxQkJE
RjU5MjAwRTJDQzVGIC8qIElEQkRhdGFiYXNlSW1wbC5jcHAgKi87IH07Ci0JCTUxOThGN0IxMUJC
REY1QzgwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOThGN0FGMUJCREY1OTIwMEUyQ0M1RiAvKiBJREJE
YXRhYmFzZUltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk1MTk4RjdCNDFCQkUwMDNDMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxOThGN0Iy
MUJCRTAwMUQwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuY3BwICovOyB9OwotCQk1MTk4
RjdCNTFCQkUwMDNDMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk4RjdCMzFCQkUwMDFEMDBFMkND
NUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE5OEY3QjgxQkMzMTQ1MTAwRTJDQzVGIC8qIElEQlZlcnNp
b25DaGFuZ2VFdmVudEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE5OEY3QjYxQkMzMTQxNzAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VF
dmVudEltcGwuY3BwICovOyB9OwotCQk1MTk4RjdCOTFCQzMxNDUxMDBFMkNDNUYgLyogSURCVmVy
c2lvbkNoYW5nZUV2ZW50SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE5OEY3QjcxQkMzMTQxNzAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VF
dmVudEltcGwuaCAqLzsgfTsKLQkJNTE5OEY3QkUxQkMzMzhBRjAwRTJDQzVGIC8qIElEQkFueUlt
cGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5
OEY3QkMxQkMzMzhBOTAwRTJDQzVGIC8qIElEQkFueUltcGwuY3BwICovOyB9OwotCQk1MTk4RjdC
RjFCQzMzOEFGMDBFMkNDNUYgLyogSURCQW55SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QkQxQkMzMzhBOTAwRTJDQzVGIC8qIElEQkFu
eUltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MTk4RjdDMDFCQzQ4NTY3MDBFMkNDNUYgLyogSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODVGQ0JDMUJC
NUNCNzcwMDEyODk4RiAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwICovOyB9OwogCQk1MTk4
RjdDMTFCQzQ4NTY3MDBFMkNDNUYgLyogSURCQ29ubmVjdGlvblRvU2VydmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBBNThGRDFCQjA3QTk2MDBD
MTkyODIgLyogSURCQ29ubmVjdGlvblRvU2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFBMDUyMzMxMDU4Nzc0RjAwQ0M5RTk1IC8qIENy
ZWRlbnRpYWxTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUEwNTIzMTEwNTg3NzRGMDBDQzlFOTUgLyogQ3JlZGVudGlhbFN0b3JhZ2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjIzNCwx
NCArMjIxOCw4IEBACiAJCTUxRUU3QjNBMUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJ
bmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
RUU3QjM5MUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAqLzsgfTsKIAkJ
NTFFRUFBNzMxQkVGRkFCMTAwMjE4MDA4IC8qIEluZGV4VmFsdWVFbnRyeS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUVFQUE3MTFCRUZGQTc5MDAy
MTgwMDggLyogSW5kZXhWYWx1ZUVudHJ5LmNwcCAqLzsgfTsKIAkJNTFFRUFBNzQxQkVGRkFCMTAw
MjE4MDA4IC8qIEluZGV4VmFsdWVFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFFRUFBNzIxQkVGRkE3OTAwMjE4MDA4IC8qIEluZGV4VmFsdWVF
bnRyeS5oICovOyB9OwotCQk1MUY3OThFNTFCRTg4MDkyMDA4QUU0OTEgLyogSURCQ3Vyc29ySW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY3
OThFMTFCRTg4MDg0MDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5jcHAgKi87IH07Ci0JCTUxRjc5
OEU2MUJFODgwOTIwMDhBRTQ5MSAvKiBJREJDdXJzb3JJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY3OThFMjFCRTg4MDg0MDA4QUU0OTEgLyog
SURCQ3Vyc29ySW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTUxRjc5OEU3MUJFODgwOTIwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNzk4RTMxQkU4
ODA4NDAwOEFFNDkxIC8qIElEQkluZGV4SW1wbC5jcHAgKi87IH07Ci0JCTUxRjc5OEU4MUJFODgw
OTIwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjc5OEU0MUJFODgwODQwMDhBRTQ5MSAvKiBJREJJbmRleElt
cGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MUY3OThFRjFCRTg4MEU3MDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjc5OEVCMUJFODgwRDMwMDhBRTQ5
MSAvKiBJREJJbmRleEluZm8uY3BwICovOyB9OwogCQk1MUY3OThGMDFCRTg4MEU3MDA4QUU0OTEg
LyogSURCSW5kZXhJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUY3OThFQzFCRTg4MEQzMDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTFGNzk4RjMxQkU4
ODM5NDAwOEFFNDkxIC8qIElEQkN1cnNvcldpdGhWYWx1ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNzk4RjExQkU4ODM4RDAwOEFFNDkx
IC8qIElEQkN1cnNvcldpdGhWYWx1ZUltcGwuY3BwICovOyB9OwotCQk1MUY3OThGNDFCRTg4Mzk0
MDA4QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNzk4RjIxQkU4ODM4RDAwOEFFNDkxIC8qIElE
QkN1cnNvcldpdGhWYWx1ZUltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1MUZBMkQ3ODE1MjEzMkIzMDBDMUJBMEIgLyogRE9NV2luZG93RXh0
ZW5zaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTdGQkExODE1MUFBNzFCMDBCNTc5NTkgLyogRE9NV2luZG93RXh0ZW5zaW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFGQjU1MDQxMTNFM0U5
MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFGQjU1MDIxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVu
dC5oICovOyB9OwogCQk1MUZCNTUwNTExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkI1NTAz
MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwICovOyB9OwpAQCAtOTQ5OSwxMiAr
OTQ3Nyw2IEBACiAJCTUxMDE5MkQzMThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9v
dEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VD
b250cm9sc1Jvb3RFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEw
MTkyRDQxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwMTkyRDgxOEI3RDdBQjAwN0ZDN0ExIC8q
IGltYWdlQ29udHJvbHNNYWMuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBpbWFnZUNv
bnRyb2xzTWFjLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwMzEwNEExQkE4
QzZBNjAwMzMyOUMwIC8qIElEQkZhY3RvcnlJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElEQkZhY3RvcnlJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTEwMzEwNEIxQkE4QzZBNjAwMzMyOUMwIC8qIElEQkZhY3RvcnlJbXBsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkZhY3RvcnlJbXBsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMDMxMDU2MUJBOERCMzAwMDMzMjlDMCAvKiBJREJPcGVu
REJSZXF1ZXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
REJPcGVuREJSZXF1ZXN0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
MDMxMDU3MUJBOERCMzAwMDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJPcGVuREJSZXF1ZXN0SW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MTAzMTA1ODFCQThEQjMwMDAzMzI5QzAgLyogSURCUmVx
dWVzdEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCUmVx
dWVzdEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTAzMTA1OTFCQThE
QjMwMDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSURCUmVxdWVzdEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTEwMzEwNUUxQkE4RTA5MDAwMzMyOUMwIC8qIElEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJEYXRhYmFzZUlkZW50aWZpZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAzMTA1RjFCQThFMDkwMDAzMzI5
QzAgLyogSURCRGF0YWJhc2VJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQkRhdGFiYXNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTA2RDdCQjE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRleHRNZW51Q29udGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjEyLDggKzk1ODQsNiBAQAogCQk1
MTVFNUZFRjE5NTEwMTQ3MDA4NkNBNUUgLyogUGxhdGZvcm1HYW1lcGFkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtR2FtZXBhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYw
MzAwQTBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBPU0lYLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTeXN0ZW1QT1NJWC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxNjAzMDZCMENDNDM2MjMwMEM4QUMyNSAvKiBGaWxlU3lzdGVt
Q0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN5c3RlbUNG
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2MDcxMjkxQkQ4MzA1MzAwREJD
NEYyIC8qIElEQk9iamVjdFN0b3JlSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJREJPYmplY3RTdG9yZUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk1MTYwNzEyQTFCRDgzMDUzMDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwNzEyQjFCRDgzMDUzMDBEQkM0RjIgLyog
VHJhbnNhY3Rpb25PcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHJhbnNhY3Rpb25PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2
MDcxMkMxQkQ4MzA3MjAwREJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW5mby5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJPYmplY3RTdG9yZUluZm8uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwNzEyRDFCRDgzMDcyMDBEQkM0RjIgLyogSURC
T2JqZWN0U3RvcmVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9i
amVjdFN0b3JlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTcwNSwxNCAr
OTY3NSw2IEBACiAJCTUxOThGN0E3MUJCREQzODEwMEUyQ0M1RiAvKiBVbmlxdWVJREJEYXRhYmFz
ZVRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZUlE
QkRhdGFiYXNlVHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5
OEY3QUExQkJERDNFMzAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW5mby5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlvbkluZm8uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTk4RjdBQjFCQkREM0UzMDBFMkNDNUYgLyogSURC
VHJhbnNhY3Rpb25JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRy
YW5zYWN0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTk4RjdBRTFC
QkRGNTkyMDBFMkNDNUYgLyogSURCRGF0YWJhc2VJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IElEQkRhdGFiYXNlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxOThGN0FGMUJCREY1OTIwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOThGN0IyMUJCRTAwMUQwMEUyQ0M1RiAvKiBJ
REJUcmFuc2FjdGlvbkltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSURCVHJhbnNhY3Rpb25JbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTE5OEY3QjMxQkJFMDAxRDAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2FjdGlvbkltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5OEY3QjYxQkMzMTQxNzAwRTJDQzVGIC8qIElEQlZlcnNp
b25DaGFuZ2VFdmVudEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUxOThGN0I3MUJDMzE0MTcwMEUyQ0M1RiAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJ
bXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlZlcnNpb25DaGFuZ2VF
dmVudEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5OEY3QkMxQkMzMzhB
OTAwRTJDQzVGIC8qIElEQkFueUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSURCQW55SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
OThGN0JEMUJDMzM4QTkwMEUyQ0M1RiAvKiBJREJBbnlJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElEQkFueUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE5RkUwQTEwREFENDQ2RTAwQTA4RjIxIC8qIEhUTUxBdHRyaWJ1dGVOYW1lcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MQXR0cmlidXRlTmFtZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxOUZFMEEyMERBRDQ0NkUwMEEwOEYyMSAvKiBIVE1MVGFnTmFtZXMu
aW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTFRhZ05hbWVzLmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUEwNTIzMTEwNTg3NzRGMDBDQzlFOTUgLyogQ3JlZGVudGlhbFN0
b3JhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3JlZGVudGlhbFN0b3Jh
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MjAsMTQgKzk3ODIsOCBAQAog
CQk1MUVFQUE3MjFCRUZGQTc5MDAyMTgwMDggLyogSW5kZXhWYWx1ZUVudHJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4VmFsdWVFbnRyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUY2QTNENTA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSFRNTENhbnZhc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFGNkEzRDYwNjYzQkYwNDAwNEQyOTE5
IC8qIEhUTUxDYW52YXNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxDYW52YXNFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQk1MUY3OThFMTFCRTg4MDg0
MDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJREJDdXJzb3JJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTFGNzk4RTIxQkU4ODA4NDAwOEFFNDkxIC8qIElEQkN1cnNvckltcGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MUY3OThFMzFCRTg4MDg0MDA4QUU0OTEgLyogSURCSW5kZXhJbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkluZGV4SW1wbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRjc5OEU0MUJFODgwODQwMDhBRTQ5MSAv
KiBJREJJbmRleEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCSW5k
ZXhJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjc5OEVCMUJFODgwRDMw
MDhBRTQ5MSAvKiBJREJJbmRleEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSURCSW5kZXhJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFGNzk4RUMxQkU4ODBEMzAwOEFFNDkxIC8qIElEQkluZGV4SW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJREJJbmRleEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTFGNzk4RjExQkU4ODM4RDAwOEFFNDkxIC8qIElEQkN1cnNvcldpdGhWYWx1ZUlt
cGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQ3Vyc29yV2l0
aFZhbHVlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRjc5OEYyMUJF
ODgzOEQwMDhBRTQ5MSAvKiBJREJDdXJzb3JXaXRoVmFsdWVJbXBsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQkN1cnNvcldpdGhWYWx1ZUltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjU1MDIxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nsb3NlRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8qIEpT
Q2xvc2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Ns
b3NlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNjdEOTFBRTZC
NUU0MDBEMDZDNUEgLyogQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvblN0eWxlU2hlZXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcyMjYsMzEgKzE3MTgyLDkgQEAKIAkJ
NTEwMzEwNDIxQkE4QzY0QzAwMzMyOUMwIC8qIGNsaWVudCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNTE5OEY3QkMxQkMzMzhBOTAwRTJDQzVGIC8qIElE
QkFueUltcGwuY3BwICovLAotCQkJCTUxOThGN0JEMUJDMzM4QTkwMEUyQ0M1RiAvKiBJREJBbnlJ
bXBsLmggKi8sCiAJCQkJNTE4NUZDQkMxQkI1Q0I3NzAwMTI4OThGIC8qIElEQkNvbm5lY3Rpb25U
b1NlcnZlci5jcHAgKi8sCiAJCQkJNTEwQTU4RkQxQkIwN0E5NjAwQzE5MjgyIC8qIElEQkNvbm5l
Y3Rpb25Ub1NlcnZlci5oICovLAogCQkJCTUxODVGQ0JEMUJCNUNCNzcwMDEyODk4RiAvKiBJREJD
b25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oICovLAotCQkJCTUxRjc5OEUxMUJFODgwODQwMDhB
RTQ5MSAvKiBJREJDdXJzb3JJbXBsLmNwcCAqLywKLQkJCQk1MUY3OThFMjFCRTg4MDg0MDA4QUU0
OTEgLyogSURCQ3Vyc29ySW1wbC5oICovLAotCQkJCTUxRjc5OEYxMUJFODgzOEQwMDhBRTQ5MSAv
KiBJREJDdXJzb3JXaXRoVmFsdWVJbXBsLmNwcCAqLywKLQkJCQk1MUY3OThGMjFCRTg4MzhEMDA4
QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oICovLAotCQkJCTUxOThGN0FFMUJCREY1
OTIwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwuY3BwICovLAotCQkJCTUxOThGN0FGMUJCREY1
OTIwMEUyQ0M1RiAvKiBJREJEYXRhYmFzZUltcGwuaCAqLywKLQkJCQk1MTAzMTA0QTFCQThDNkE2
MDAzMzI5QzAgLyogSURCRmFjdG9yeUltcGwuY3BwICovLAotCQkJCTUxMDMxMDRCMUJBOEM2QTYw
MDMzMjlDMCAvKiBJREJGYWN0b3J5SW1wbC5oICovLAotCQkJCTUxRjc5OEUzMUJFODgwODQwMDhB
RTQ5MSAvKiBJREJJbmRleEltcGwuY3BwICovLAotCQkJCTUxRjc5OEU0MUJFODgwODQwMDhBRTQ5
MSAvKiBJREJJbmRleEltcGwuaCAqLywKLQkJCQk1MTYwNzEyOTFCRDgzMDUzMDBEQkM0RjIgLyog
SURCT2JqZWN0U3RvcmVJbXBsLmNwcCAqLywKLQkJCQk1MTYwNzEyQTFCRDgzMDUzMDBEQkM0RjIg
LyogSURCT2JqZWN0U3RvcmVJbXBsLmggKi8sCi0JCQkJNTEwMzEwNTYxQkE4REIzMDAwMzMyOUMw
IC8qIElEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcCAqLywKLQkJCQk1MTAzMTA1NzFCQThEQjMwMDAz
MzI5QzAgLyogSURCT3BlbkRCUmVxdWVzdEltcGwuaCAqLywKLQkJCQk1MTAzMTA1ODFCQThEQjMw
MDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwuY3BwICovLAotCQkJCTUxMDMxMDU5MUJBOERCMzAw
MDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5oICovLAotCQkJCTUxOThGN0IyMUJCRTAwMUQwMEUy
Q0M1RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuY3BwICovLAotCQkJCTUxOThGN0IzMUJCRTAwMUQw
MEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuaCAqLywKLQkJCQk1MTk4RjdCNjFCQzMxNDE3
MDBFMkNDNUYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5jcHAgKi8sCi0JCQkJNTE5OEY3
QjcxQkMzMTQxNzAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaCAqLywKIAkJ
CQk1MUQ3RUZFQjFCREVGQTQ3MDBFOTNFMTAgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwICov
LAogCQkJCTUxNjA3MTJCMUJEODMwNTMwMERCQzRGMiAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5o
ICovLAogCQkJKTsKQEAgLTI2MzE4LDcgKzI2MjUyLDYgQEAKIAkJCQk1MUUxRUNDMTBDOTFDOTA0
MDBEQzI1NUIgLyogSWNvblJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDVCQUMyQjAxMzYw
QkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzc4MUJC
NEM0RTgwMDEyODk4RiAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxOThGN0JGMUJD
MzM4QUYwMEUyQ0M1RiAvKiBJREJBbnlJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUJBNEFD
QzFCQkM1QkREMDBERjNENkQgLyogSURCQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNTg1QTY2MzExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE4NUZDQjkxQkI0Q0JGODAwMTI4OThGIC8qIElEQkNvbm5lY3Rpb25U
b0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjMyNiwyNCArMjYyNTksMTkgQEAKIAkJCQk1
MTk4RjdDMTFCQzQ4NTY3MDBFMkNDNUYgLyogSURCQ29ubmVjdGlvblRvU2VydmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTZEN0Q3MDFCQjVGMEJEMDBBRjdDNzcgLyogSURCQ29ubmVjdGlvblRv
U2VydmVyRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzdCMUJCNEM0RTgwMDEy
ODk4RiAvKiBJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRjc5OEU2MUJFODgwOTIw
MDhBRTQ5MSAvKiBJREJDdXJzb3JJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTcxMzhGQzFC
RjNBREY0MDAwRDVGMDEgLyogSURCQ3Vyc29ySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4
NUZDN0UxQkI0QzRFODAwMTI4OThGIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTFGNzk4RjQxQkU4ODM5NDAwOEFFNDkxIC8qIElEQkN1cnNvcldpdGhWYWx1ZUlt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzgxMUJCNEM0RTgwMDEyODk4RiAvKiBJREJE
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDODMxQkI0QzRFODAwMTI4OThGIC8q
IElEQkRhdGFiYXNlRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzg1MUJCNEM0RTgw
MDEyODk4RiAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4
NUZDODcxQkI0QzRFODAwMTI4OThGIC8qIElEQkRhdGFiYXNlSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNTE5OEY3QjExQkJERjVDODAwRTJDQzVGIC8qIElEQkRhdGFiYXNlSW1wbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFCQTRBQzQxQkJCNUNEODAwREYzRDZEIC8qIElEQkRhdGFi
YXNlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0ODQ1M0YxQkI5RDA3RTAwNkE3MkVEIC8q
IElEQkVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4QjFCQjRDNEU4MDAxMjg5OEYg
LyogSURCRXZlbnREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4RDFCQjRD
NEU4MDAxMjg5OEYgLyogSURCRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjlBNkNCQUQx
QzZCRTQyQzAwQjgzNkU5IC8qIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKLQkJCQk1MTAzMTA1MDFCQThDQzAzMDAzMzI5QzAgLyogSURCRmFjdG9yeUltcGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxODVGQzhGMUJCNEM0RTgwMDEyODk4RiAvKiBJREJHZXRSZXN1bHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzkxMUJCNEM0RTgwMDEyODk4RiAvKiBJREJJbmRl
eC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNzk4RTgxQkU4ODA5MjAwOEFFNDkxIC8qIElEQklu
ZGV4SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGNzk4RjAxQkU4ODBFNzAwOEFFNDkxIC8q
IElEQkluZGV4SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOTUxQkI0QzRFODAwMTI4
OThGIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOTcxQkI0QzRFODAwMTI4
OThGIC8qIElEQktleURhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtMjYzNTEsMjQgKzI2Mjc5LDE5
IEBACiAJCQkJNTE4NUZDOUIxQkI0QzRFODAwMTI4OThGIC8qIElEQktleVJhbmdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTg1RkM5RTFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UmFuZ2VEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkNBMDFCQjRDNEU4MDAxMjg5OEYgLyogSURCT2Jq
ZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjA3MTMxMUJEODMwODYwMERCQzRGMiAv
KiBJREJPYmplY3RTdG9yZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNjA3MTJGMUJEODMw
NzgwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
ODVGQ0E0MUJCNEM0RTgwMDEyODk4RiAvKiBJREJPcGVuREJSZXF1ZXN0LmggaW4gSGVhZGVycyAq
LywKLQkJCQk1MTAzMTA1QjFCQThEQjU2MDAzMzI5QzAgLyogSURCT3BlbkRCUmVxdWVzdEltcGwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0E3MUJCNEM0RTgwMDEyODk4RiAvKiBJREJSZWNv
cmRJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkNBOTFCQjRDNEU4MDAxMjg5
OEYgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MTI5OTkxQzY5NzY5MDAw
NTlFNzE0IC8qIElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxMEE1OEZBMUJBQ0M3RjIwMEMxOTI4MiAvKiBJREJSZXF1ZXN0RGF0YS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTEwMzEwNUQxQkE4REI1NjAwMzMyOUMwIC8qIElEQlJlcXVlc3RJbXBsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTQ1QjEwQTFCQzQ4RTJFMDBFODYyMTkgLyogSURCUmVzb3VyY2VJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQ3MjM2RDFCQjYxNzQ5MDA0NzhDQTMg
LyogSURCUmVzdWx0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExRUMxMjgxQzUwQUFDQTAw
MzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0JC
MUJCNENCRjgwMDEyODk4RiAvKiBJREJTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVG
Q0FEMUJCNEM0RTgwMDEyODk4RiAvKiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE5OEY3QjUxQkJFMDAzQzAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW1wbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE5OEY3QUQxQkJERDNFQjAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9u
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQjAxQkI0QzRFODAwMTI4OThGIC8qIElE
QlZlcnNpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE5OEY3QjkxQkMzMTQ1
MTAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0QTgxNEUwMUM3MzM4RUIwMEJGODVBQyAvKiBJZENoYW5nZUludmFsaWRhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE3MUQ1N0MwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJS
ZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUM1MEVGODZENDcwMDlEMENBRiAvKiBJZGVu
dGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDAwMiwyNyArMjk5
MjUsMjEgQEAKIAkJCQlCMjc1MzU4RTBCMDUzQTY2MDAyQ0U2NEYgLyogSWNvbk1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTUxRTFFQ0MwMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzc3MUJCNEM0RTgwMDEyODk4RiAvKiBJREJBbnku
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE5OEY3QkUxQkMzMzhBRjAwRTJDQzVGIC8qIElEQkFu
eUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU4NUE2NjIxMUQ0RkFDNTAwNEMzRTRCIC8q
IElEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2RDdENzExQkI1
RjBCRDAwQUY3Qzc3IC8qIElEQkNvbm5lY3Rpb25Ub0NsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTk4RjdDMDFCQzQ4NTY3MDBFMkNDNUYgLyogSURCQ29ubmVjdGlvblRvU2VydmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzdBMUJCNEM0RTgwMDEyODk4RiAvKiBJREJDdXJz
b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFGNzk4RTUxQkU4ODA5MjAwOEFFNDkxIC8qIElE
QkN1cnNvckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3MTM4RkIxQkYzQURGNDAwMEQ1
RjAxIC8qIElEQkN1cnNvckluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDN0QxQkI0
QzRFODAwMTI4OThGIC8qIElEQkN1cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk1MUY3OThGMzFCRTg4Mzk0MDA4QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM4MDFCQjRDNEU4MDAxMjg5OEYgLyogSURCRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDODQxQkI0QzRFODAwMTI4OThGIC8qIElE
QkRhdGFiYXNlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzg2MUJCNEM0
RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTE5OEY3QjAxQkJERjVDODAwRTJDQzVGIC8qIElEQkRhdGFiYXNlSW1wbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUJBNEFDMzFCQkI1Q0Q4MDBERjNENkQgLyogSURCRGF0YWJhc2VJbmZv
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDg0NTNFMUJCOUQwN0UwMDZBNzJFRCAvKiBJREJF
cnJvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM4QTFCQjRDNEU4MDAxMjg5OEYgLyog
SURCRXZlbnREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzhDMUJCNEM0
RTgwMDEyODk4RiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxMDMxMDRG
MUJBOENDMDMwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTJGMUE3ODFDMDdFQjY2MDA5MDgyMzkgLyogSURCR2V0UmVzdWx0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxODVGQzkwMUJCNEM0RTgwMDEyODk4RiAvKiBJREJJbmRleC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk1MUY3OThFNzFCRTg4MDkyMDA4QUU0OTEgLyogSURCSW5kZXhJbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjc5OEVGMUJFODgwRTcwMDhBRTQ5MSAvKiBJREJJbmRl
eEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDOTQxQkI0QzRFODAwMTI4OThGIC8q
IElEQktleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM5NjFCQjRDNEU4MDAxMjg5OEYg
LyogSURCS2V5RGF0YS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwMDMwLDIzICsyOTk0NywxOCBA
QAogCQkJCTUxODVGQzlBMUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTg1RkM5RDFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UmFuZ2VEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzlGMUJCNEM0RTgwMDEyODk4RiAvKiBJREJP
YmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTYwNzEzMDFCRDgzMDg2MDBEQkM0
RjIgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjA3MTJF
MUJEODMwNzgwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUluZm8uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTE4NUZDQTMxQkI0QzRFODAwMTI4OThGIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNTEwMzEwNUExQkE4REI1NjAwMzMyOUMwIC8qIElEQk9wZW5EQlJl
cXVlc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQ0E4MUJCNEM0RTgwMDEyODk4
RiAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDEyOTk4MUM2OTc2OTAw
MDU5RTcxNCAvKiBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMEE1OEY5MUJBQ0M3RjIwMEMxOTI4MiAvKiBJREJSZXF1ZXN0RGF0YS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk1MTAzMTA1QzFCQThEQjU2MDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0NUIxMDkxQkM0OEUyRTAwRTg2MjE5IC8qIElEQlJl
c291cmNlSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQ3MjM2QzFCQjYxNzQ5
MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFFQzEy
NzFDNTBBQUNBMDAzMkY5ODMgLyogSURCU2VyaWFsaXphdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTg1RkNCQTFCQjRDQkY4MDAxMjg5OEYgLyogSURCU2VydmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxODVGQ0FDMUJCNEM0RTgwMDEyODk4RiAvKiBJREJUcmFuc2FjdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1MTk4RjdCNDFCQkUwMDNDMDBFMkNDNUYgLyogSURCVHJhbnNh
Y3Rpb25JbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxOThGN0FDMUJCREQzRUIwMEUyQ0M1
RiAvKiBJREJUcmFuc2FjdGlvbkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDQUYx
QkI0QzRFODAwMTI4OThGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk1MTk4RjdCODFCQzMxNDUxMDBFMkNDNUYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
SW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEE4MTRERTFDNzMzOEQxMDBCRjg1QUMgLyog
SWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE3MUQ1N0IwRjMz
ODE5MDAwRjlDRTRFIC8qIElkZW50aWZpZXJSZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzND
RjE3QTQxNUIwMDYzRjAwMjc2RDM5IC8qIElkVGFyZ2V0T2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5j
cHAKaW5kZXggNjNmMzU1YS4uYWViNWQzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJDdXJzb3JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJDdXJzb3JJbXBsLmgiCisjaW5j
bHVkZSAiSURCQ3Vyc29yLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTM2LDExICsz
Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBKU0lEQkN1cnNvcjo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgaWYgKCF3cmFwcGVk
KCkuaXNNb2Rlcm5DdXJzb3IoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgbW9kZXJu
Q3Vyc29yID0gc3RhdGljX2Nhc3Q8SURCQ2xpZW50OjpJREJDdXJzb3ImPih3cmFwcGVkKCkpOwot
ICAgIGlmIChhdXRvKiByZXF1ZXN0ID0gbW9kZXJuQ3Vyc29yLnJlcXVlc3QoKSkKKyAgICBhdXRv
JiBjdXJzb3IgPSBzdGF0aWNfY2FzdDxJREJDdXJzb3ImPih3cmFwcGVkKCkpOworICAgIGlmIChh
dXRvKiByZXF1ZXN0ID0gY3Vyc29yLnJlcXVlc3QoKSkKICAgICAgICAgdmlzaXRvci5hZGRPcGFx
dWVSb290KHJlcXVlc3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKaW5kZXggYTU5Yjg3Ny4uYmM2
M2ZhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29y
V2l0aFZhbHVlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5o
IgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3Bw
CmluZGV4IGUyYzJjY2UuLjRlMTZhNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCSW5kZXhDdXN0b20uY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIklEQkluZGV4SW1wbC5oIgorI2luY2x1ZGUg
IklEQkluZGV4LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTM2LDEwICszNiw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBKU0lEQkluZGV4Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAoIXdyYXBwZWQoKS5pc01v
ZGVybigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJnN0
YXRpY19jYXN0PElEQkNsaWVudDo6SURCSW5kZXgmPih3cmFwcGVkKCkpLm1vZGVybk9iamVjdFN0
b3JlKCkpOworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmc3RhdGljX2Nhc3Q8SURCSW5kZXgm
Pih3cmFwcGVkKCkpLm1vZGVybk9iamVjdFN0b3JlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVj
dFN0b3JlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0
U3RvcmVDdXN0b20uY3BwCmluZGV4IDMyNTFmZjIuLjc0NGQ5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCkBAIC0z
NCw3ICszNCw3IEBACiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1
ZGUgIklEQk9iamVjdFN0b3JlSW1wbC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNJREJJbmRleC5oIgogI2luY2x1
ZGUgIkpTSURCUmVxdWVzdC5oIgpAQCAtNDcsMTAgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB2b2lkIEpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewotICAgIGlmICghd3JhcHBlZCgpLmlzTW9kZXJuKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHN0YXRpY19jYXN0PElEQkNsaWVudDo6SURCT2JqZWN0U3RvcmUm
Pih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXModmlzaXRvcik7CisgICAgc3RhdGlj
X2Nhc3Q8SURCT2JqZWN0U3RvcmUmPih3cmFwcGVkKCkpLnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMo
dmlzaXRvcik7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIHB1dE9yQWRkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgYm9vbCBvdmVyd3JpdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCBkMjliNTI3Li45NDMzMDc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHAKQEAgLTE4NSwxMyArMTg1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZXhlY3V0
YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCkuc2VuZEZhaWx1cmUoIlVuZXhwZWN0
ZWQgcmVzdWx0IHR5cGUuIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKCFyZXF1ZXN0UmVzdWx0LT5pc0xlZ2FjeSgpKSB7Ci0gICAgICAgICAgICBtX2V4ZWN1
dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNlbmRGYWlsdXJlKCJPbmx5IExl
Z2FjeSBJREIgaXMgc3VwcG9ydGVkIHJpZ2h0IG5vdy4iKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FICh3ZWJraXQub3JnL2IvMTU0Njg2KSAtIFJl
aW1wbGVtZW50IHRoaXMuCi0gICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+ZXhlY3V0
ZSgpOworICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygp
LnNlbmRGYWlsdXJlKCJNb2Rlcm4gSURCIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7CisgICAgICAg
IHJldHVybjsKICAgICB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3OTRjZC4uZjhiM2My
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE2LTAzLTI4ICBCcmFkeSBFaWRzb24g
IDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm4gSURCOiBSZW1vdmUgYWJzdHJh
Y3QgYmFzZSBjbGFzc2VzIGZvciBhbGwgSURCIERPTSBjbGFzc2VzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1OTUxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvRGF0YWJhc2Vz
L0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwOgorCiAyMDE2LTAzLTI4ICBC
cmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBBdXRvbWF0aW9uOiBy
ZXBvcnQgdGhlIGJyb3dzaW5nIGNvbnRleHQncyB3aW5kb3cgZnJhbWUgKHNpemUgYW5kIG9yaWdp
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4
ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAKaW5k
ZXggNmY2OTAxMS4uNmQzNzVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5l
Y3Rpb25Ub1NlcnZlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0lE
QkluZGV4SW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSURCS2V5UmFuZ2VEYXRhLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9JREJPYmplY3RTdG9yZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lE
Qk9wZW5EQlJlcXVlc3RJbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JREJPcGVuREJSZXF1ZXN0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJSZXF1ZXN0RGF0YS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSURCUmVzb3VyY2VJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJSZXN1bHRE
YXRhLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275052</attachid>
            <date>2016-03-28 14:23:20 -0700</date>
            <delta_ts>2016-03-28 15:49:05 -0700</delta_ts>
            <desc>Patch for landing v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>449376</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGMzODdkNi4uZGI5M2JhYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTg1MywxOCArODUzLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5jcHAKIAotICAgIE1vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQkN1cnNvckltcGwuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1
cnNvcldpdGhWYWx1ZUltcGwuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRh
dGFiYXNlSW1wbC5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRmFjdG9yeUlt
cGwuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkluZGV4SW1wbC5jcHAKLSAg
ICBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcAotICAgIE1v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAKLSAgICBNb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCUmVxdWVzdEltcGwuY3BwCi0gICAgTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5jcHAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwCiAKICAgICBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVhZGMx
ZWEuLmY4Mjg5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOTMgQEAKKzIwMTYtMDMtMjggIEJy
YWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybiBJREI6IFJl
bW92ZSBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgZm9yIGFsbCBJREIgRE9NIGNsYXNzZXMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU5NTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgIFJlZmFjdG9yIC0g
Tm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvRE9NV2lu
ZG93SW5kZXhlZERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvd0luZGV4
ZWREYXRhYmFzZTo6aW5kZXhlZERCKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJB
bnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjpJREJBbnkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQW55Ojp+SURCQW55KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6aWRiRGF0
YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55Ojpkb21TdHJpbmdMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkFueTo6aWRiQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFu
eTo6aWRiQ3Vyc29yV2l0aFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6aWRiRmFj
dG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OmlkYkluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkFueTo6aWRiT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55
OjppZGJUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OnNjcmlwdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6aW50ZWdlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJBbnk6OnN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OmtleVBhdGgpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCQW55OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55OjpjcmVhdGVVbmRlZmlu
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkFueTo6fklEQkFueSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6Omlz
TGVnYWN5KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQ3Vyc29yOjpJREJDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
Ojp+SURCQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6c291cmNlc0RlbGV0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjplZmZlY3RpdmVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6ZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNv
cjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6cHJpbWFyeUtleSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1
cnNvcjo6c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6dXBkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
Ojp1bmNoZWNrZWRJdGVyYXRlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6
ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRHZXRSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjphY3RpdmVET01PYmplY3ROYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVu
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6Omhhc1BlbmRpbmdBY3Rpdml0eSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmRlY3JlbWVudE91dHN0YW5kaW5nUmVxdWVz
dENvdW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6aW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3I6OnNldFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjbGVhclJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpyZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6aXNLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yOjp+SURCQ3Vyc29yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6
Y29udGludWVGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6
OmlzTW9kZXJuQ3Vyc29yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6
aGFzUGVuZGluZ0FjdGl2aXR5KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yV2l0
aFZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yV2l0aFZhbHVlOjpJ
REJDdXJzb3JXaXRoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yV2l0aFZhbHVl
Ojp+SURCQ3Vyc29yV2l0aFZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JXaXRoVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcldpdGhWYWx1ZTo6
fklEQkN1cnNvcldpdGhWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6SURCRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjp2ZXJzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6bWF5YmVDbG9z
ZUluU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjphY3RpdmVET01PYmpl
Y3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjYW5TdXNwZW5kRm9yRG9j
dW1lbnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpzdG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpzdGFydFZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlkU3RhcnRUcmFuc2FjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6d2lsbENvbW1pdFRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkaWRDb21taXRUcmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6d2lsbEFib3J0VHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZEFib3J0VHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXhJbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlOjpkaWREZWxldGVJbmRleEluZm8pOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6aW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6c2VydmVyQ29u
bmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6aXNDbG9zaW5nT3JDbG9z
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSk6IERlbGV0
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzaG91bGRUaHJvd1NlY3VyaXR5RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkZhY3Rvcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5OjpJ
REJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6OmdldERhdGFiYXNlTmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6b3Blbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJGYWN0b3J5OjpvcGVuSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFj
dG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Y21w
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5Ojp+SURCRmFjdG9yeSk6IERlbGV0ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6
OklEQkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4Ojp+SURCSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmFjdGl2ZURPTU9iamVjdE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXg6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b2Jq
ZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmtleVBhdGhBbnkpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXg6OnVuaXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6bXVsdGlFbnRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmRvQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCSW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6
ZG9HZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmdldEtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6ZG9HZXRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6
Om1hcmtBc0RlbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OnJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleDo6ZGVyZWYpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3BlbkN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3BlbktleUN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6aW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6bW9k
ZXJuT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmlzRGVsZXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6fklEQkluZGV4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4Ojppc01vZGVybik6IERlbGV0ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
SURCT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6On5JREJP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6YWN0aXZlRE9N
T2JqZWN0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2FuU3VzcGVu
ZEZvckRvY3VtZW50U3VzcGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
OjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjprZXlQYXRoQW55KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjprZXlQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleE5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6YXV0b0luY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Z2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
cHV0Rm9yQ3Vyc29yVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpw
dXRPckFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvRGVsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjptb2Rlcm5EZWxldGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
aW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZTo6ZG9Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZTo6bWFya0FzRGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6cm9sbGJhY2tJbmZvRm9yVmVyc2lvbkNoYW5nZUFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjp2aXNpdFJlZmVyZW5jZWRJbmRleGVzKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmlzRGVsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
aW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6bW9kZXJuVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6On5JREJPYmplY3RTdG9yZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aXNNb2Rlcm4pOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6Y3JlYXRlRGVsZXRlUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpjcmVhdGVPcGVuUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpJREJPcGVuREJSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6On5JREJPcGVuREJSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6Om9uRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlk
RmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVTdWNjZXNz
QWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3Q6OmZpcmVFcnJvckFmdGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPcGVuREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9w
ZW5EQlJlcXVlc3Q6Om9uRGVsZXRlRGF0YWJhc2VTdWNjZXNzKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT3BlbkRCUmVxdWVzdDo6cmVxdWVzdEJsb2NrZWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJl
cXVlc3Q6OmRhdGFiYXNlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJS
ZXF1ZXN0Ojp2ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6On5J
REJPcGVuREJSZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjcmVhdGVDb3VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpjcmVhdGVHZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVz
dDo6SURCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojp+SURCUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXN1bHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCUmVxdWVzdDo6ZXJyb3JDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6c2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c291cmNlT2Jq
ZWN0U3RvcmVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNvdXJj
ZUluZGV4SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0
ZWRJbmRleFJlY29yZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZXZlbnRU
YXJnZXRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6YWN0aXZlRE9N
T2JqZWN0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpjYW5TdXNwZW5kRm9y
RG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Omhhc1Bl
bmRpbmdBY3Rpdml0eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzdG9wKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVxdWVzdDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6
OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6
OnJlc3VsdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0
ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaWRPcGVuT3JJdGVyYXRl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25FcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJlc291cmNlSWRl
bnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpjb25uZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om1vZGVyblJlc3VsdCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpwZW5kaW5nQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3Q6OnJlcXVlc3RUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmlzT3Bl
bkRCUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojp+SURCUmVxdWVzdCk6
IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdENvbXBsZXRp
b25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50
OjpJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1
ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om1vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmRiKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpzZXJ2ZXJDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpl
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjp0cmFuc2l0aW9uZWRUb0Zpbmlz
aGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6YWJvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFib3J0T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6YWN0aXZlRE9NT2JqZWN0TmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZEZvckRvY3Vt
ZW50U3VzcGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aGFzUGVu
ZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpzdG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjppc0FjdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZE9yRmluaXNoaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjphZGRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpyZW1vdmVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRy
YW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6c2NoZWR1bGVPcGVyYXRpb25UaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6b3BlcmF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpj
b21taXRPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZmluaXNo
QWJvcnRPckNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkU3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om5vdGlmeURpZEFib3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRBYm9ydCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjpmaXJlT25Db21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6ZmlyZU9uQWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlzcGF0
Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0
b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZENyZWF0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246
OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGVJ
bmRleE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRDcmVh
dGVJbmRleE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0T3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZG9SZXF1
ZXN0T3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b3BlbkN1
cnNvck9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRPcGVu
Q3Vyc29yT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Oml0ZXJh
dGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJz
b3JPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkSXRlcmF0
ZUN1cnNvck9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0R2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
R2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RJbmRleFJlY29y
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZE9uU2VydmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNsZWFyT2JqZWN0U3RvcmVPblNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ2xlYXJPYmplY3RT
dG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
UHV0T3JBZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25T
ZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25T
ZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9y
ZU9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVP
YmplY3RTdG9yZU9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpk
ZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5k
ZXhPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRl
SW5kZXhPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b3BlcmF0
aW9uRGlkQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVzdGFi
bGlzaE9uU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjphY3RpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVhY3RpdmF0ZSk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uOjppbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpkYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6b3JpZ2lu
YWxEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmlzVmVy
c2lvbkNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aXNSZWFkT25s
eSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aXNGaW5pc2hlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpUcmFuc2FjdGlvbkFjdGl2YXRvcjo6VHJhbnNhY3Rpb25BY3RpdmF0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNhY3Rpb25BY3RpdmF0b3I6On5UcmFuc2FjdGlvbkFj
dGl2YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6fklEQlRyYW5zYWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hh
bmdlRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVmVyc2lvbkNoYW5nZUV2ZW50OjpJ
REJWZXJzaW9uQ2hhbmdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVmVyc2lvbkNoYW5n
ZUV2ZW50OjpuZXdWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlZlcnNpb25DaGFuZ2VF
dmVudDo6ZXZlbnRJbnRlcmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCVmVyc2lvbkNoYW5n
ZUV2ZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QlZlcnNpb25DaGFuZ2VFdmVudC5oOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcDoKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmg6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvckltcGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JJbXBs
Lmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNv
cldpdGhWYWx1ZUltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJDdXJzb3JXaXRoVmFsdWVJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5oOiBSZW1vdmVk
LgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkZhY3RvcnlJ
bXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQklu
ZGV4SW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkluZGV4SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0
SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJS
ZXF1ZXN0SW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvY2xp
ZW50L0lEQlJlcXVlc3RJbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9uSW1wbC5oOiBSZW1vdmVkLgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBs
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVmVy
c2lvbkNoYW5nZUV2ZW50SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHA6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmg6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQkN1cnNvckluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCQ3Vyc29ySW5mbzo6b2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29ySW5mbzo6aW5kZXhDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29ySW5m
bzo6SURCQ3Vyc29ySW5mbyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QkN1cnNvckluZm8uaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVx
dWVzdERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdERhdGE6OklEQlJlcXVl
c3REYXRhKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERh
dGEuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVu
dGlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlc291cmNlSWRlbnRpZmllcjo6SURC
UmVzb3VyY2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCUmVzb3VyY2VJZGVudGlmaWVyLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQlRyYW5zYWN0aW9uSW5mby5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQkN1cnNvcjo6dmlzaXRBZGRpdGlvbmFs
Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkluZGV4Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTSURCT2JqZWN0U3RvcmU6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwOgorCiAyMDE2LTAz
LTI4ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2V0dXAgY2xv
bmVkIGNvbnRpbnVhdGlvbiByZW5kZXJlciBwcm9wZXJseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2Uu
Y3BwCmluZGV4IGY1YmM2YTguLjg3ZDYyNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcApA
QCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGFi
YXNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIklEQkZhY3Rv
cnlJbXBsLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCkBAIC0xMTIsNyArMTEyLDcgQEAgSURCRmFjdG9y
eSogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlOjppbmRleGVkREIoKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIGlmICghbV9pZGJGYWN0b3J5KQotICAgICAgICBtX2lkYkZhY3Rvcnkg
PSBJREJDbGllbnQ6OklEQkZhY3Rvcnk6OmNyZWF0ZShwYWdlLT5pZGJDb25uZWN0aW9uKCkpOwor
ICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUocGFnZS0+aWRiQ29ubmVj
dGlvbigpKTsKIAogICAgIHJldHVybiBtX2lkYkZhY3RvcnkuZ2V0KCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAppbmRleCA0YjI4NmI2Li44ZmFiZDIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKQEAgLTI4
LDEwICsyOCwxMjkgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVk
ZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgorI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgorI2luY2x1ZGUg
IklEQkluZGV4LmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbi5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkFueTo6SURCQW55KCkK
K0lEQkFueTo6SURCQW55KElEQkFueTo6VHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7
Cit9CisKK0lEQkFueTo6SURCQW55KFJlZjxJREJEYXRhYmFzZT4mJiBkYXRhYmFzZSkKKyAgICA6
IG1fdHlwZShJREJBbnk6OlR5cGU6OklEQkRhdGFiYXNlKQorICAgICwgbV9kYXRhYmFzZShXVEZN
b3ZlKGRhdGFiYXNlKSkKK3sKK30KKworSURCQW55OjpJREJBbnkoUmVmPElEQk9iamVjdFN0b3Jl
PiYmIG9iamVjdFN0b3JlKQorICAgIDogbV90eXBlKElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3Rv
cmUpCisgICAgLCBtX29iamVjdFN0b3JlKFdURk1vdmUob2JqZWN0U3RvcmUpKQoreworfQorCitJ
REJBbnk6OklEQkFueShSZWY8SURCSW5kZXg+JiYgaW5kZXgpCisgICAgOiBtX3R5cGUoSURCQW55
OjpUeXBlOjpJREJJbmRleCkKKyAgICAsIG1faW5kZXgoV1RGTW92ZShpbmRleCkpCit7Cit9CisK
K0lEQkFueTo6SURCQW55KFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQoreworICAgIGlmIChjdXJz
b3ItPmlzS2V5Q3Vyc29yKCkpIHsKKyAgICAgICAgbV90eXBlID0gSURCQW55OjpUeXBlOjpJREJD
dXJzb3I7CisgICAgICAgIG1fY3Vyc29yID0gV1RGTW92ZShjdXJzb3IpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fdHlwZSA9IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlOworICAg
ICAgICBtX2N1cnNvcldpdGhWYWx1ZSA9IHN0YXRpY19jYXN0PElEQkN1cnNvcldpdGhWYWx1ZSo+
KCZjdXJzb3IuZ2V0KCkpOworICAgIH0KK30KKworSURCQW55OjpJREJBbnkoY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKKyAgICA6IG1fdHlwZShJREJBbnk6OlR5cGU6OktleVBhdGgpCisgICAg
LCBtX2lkYktleVBhdGgoa2V5UGF0aCkKK3sKK30KKworSURCQW55OjpJREJBbnkoY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQorICAgIDogbV90eXBlKElEQkFueTo6VHlwZTo6
U2NyaXB0VmFsdWUpCisgICAgLCBtX3NjcmlwdFZhbHVlKHZhbHVlKQoreworfQorCitJREJBbnk6
On5JREJBbnkoKQoreworfQorCitSZWZQdHI8SURCRGF0YWJhc2U+IElEQkFueTo6aWRiRGF0YWJh
c2UoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSk7
CisgICAgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7Cit9CisKK1JlZlB0cjxET01TdHJpbmdMaXN0
PiBJREJBbnk6OmRvbVN0cmluZ0xpc3QoKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitS
ZWZQdHI8SURCQ3Vyc29yPiBJREJBbnk6OmlkYkN1cnNvcigpCit7CisgICAgQVNTRVJUKG1fdHlw
ZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvciB8fCBtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJ
REJDdXJzb3JXaXRoVmFsdWUpOworICAgIHJldHVybiBtX2N1cnNvciA/IG1fY3Vyc29yLmdldCgp
IDogbV9jdXJzb3JXaXRoVmFsdWUuZ2V0KCk7Cit9CisKK1JlZlB0cjxJREJDdXJzb3JXaXRoVmFs
dWU+IElEQkFueTo6aWRiQ3Vyc29yV2l0aFZhbHVlKCkKK3sKKyAgICBBU1NFUlQobV90eXBlID09
IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlKTsKKyAgICByZXR1cm4gbV9jdXJzb3JX
aXRoVmFsdWUuZ2V0KCk7Cit9CisKK1JlZlB0cjxJREJGYWN0b3J5PiBJREJBbnk6OmlkYkZhY3Rv
cnkoKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8SURCSW5kZXg+IElEQkFu
eTo6aWRiSW5kZXgoKQoreworICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJJ
bmRleCk7CisgICAgcmV0dXJuIG1faW5kZXguZ2V0KCk7Cit9CisKK1JlZlB0cjxJREJPYmplY3RT
dG9yZT4gSURCQW55OjppZGJPYmplY3RTdG9yZSgpCit7CisgICAgQVNTRVJUKG1fdHlwZSA9PSBJ
REJBbnk6OlR5cGU6OklEQk9iamVjdFN0b3JlKTsKKyAgICByZXR1cm4gbV9vYmplY3RTdG9yZS5n
ZXQoKTsKK30KKworUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJBbnk6OmlkYlRyYW5zYWN0aW9u
KCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIElEQkFueTo6c2NyaXB0VmFsdWUoKQoreworICAgIHJldHVybiBtX3NjcmlwdFZhbHVl
OworfQorCitpbnQ2NF90IElEQkFueTo6aW50ZWdlcigpCit7CisgICAgcmV0dXJuIG1faW50ZWdl
cjsKK30KKworY29uc3QgU3RyaW5nJiBJREJBbnk6OnN0cmluZygpCit7CisgICAgcmV0dXJuIG1f
c3RyaW5nOworfQorCitjb25zdCBJREJLZXlQYXRoJiBJREJBbnk6OmtleVBhdGgoKQogeworICAg
IHJldHVybiBtX2lkYktleVBhdGg7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgKaW5kZXggNWI4YmRiOS4uOWYxYzc5
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgKQEAgLTIzLDgg
KzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZu
ZGVmIElEQkFueV9oCi0jZGVmaW5lIElEQkFueV9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCkBAIC0zMiw4ICszMSw2IEBACiAjaW5jbHVkZSAiU2NyaXB0
V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MywxMyAr
NDAsNDcgQEAgY2xhc3MgSURCQ3Vyc29yV2l0aFZhbHVlOwogY2xhc3MgSURCRGF0YWJhc2U7CiBj
bGFzcyBJREJGYWN0b3J5OwogY2xhc3MgSURCSW5kZXg7Ci1jbGFzcyBJREJLZXlQYXRoOwogY2xh
c3MgSURCT2JqZWN0U3RvcmU7CiBjbGFzcyBJREJUcmFuc2FjdGlvbjsKIAogY2xhc3MgSURCQW55
IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCQW55PiB7CiBw
dWJsaWM6Ci0gICAgdmlydHVhbCB+SURCQW55KCkgeyB9CisgICAgc3RhdGljIFJlZlB0cjxJREJB
bnk+IGNyZWF0ZShSZWY8SURCRGF0YWJhc2U+JiYgZGF0YWJhc2UpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShXVEZNb3ZlKGRhdGFiYXNlKSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBSZWY8SURCQW55PiBjcmVhdGUoUmVmPElEQk9iamVjdFN0b3JlPiYmIG9iamVj
dFN0b3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQW55KFdURk1v
dmUob2JqZWN0U3RvcmUpKSk7CisgICAgfQorCisgICAgc3RhdGljIFJlZjxJREJBbnk+IGNyZWF0
ZShSZWY8SURCSW5kZXg+JiYgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJREJBbnkoV1RGTW92ZShpbmRleCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmUHRy
PElEQkFueT4gY3JlYXRlKFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoV1RGTW92ZShjdXJzb3IpKSk7CisgICAgfQorCisg
ICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkoa2V5UGF0aCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBSZWZQdHI8SURCQW55PiBjcmVhdGUoY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJBbnkodmFsdWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3Jl
YXRlVW5kZWZpbmVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55
KElEQkFueTo6VHlwZTo6VW5kZWZpbmVkKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+SURCQW55
KCk7CiAKICAgICBlbnVtIGNsYXNzIFR5cGUgewogICAgICAgICBVbmRlZmluZWQgPSAwLApAQCAt
NjgsMzAgKzk5LDQyIEBAIHB1YmxpYzoKICAgICAgICAgS2V5UGF0aCwKICAgICB9OwogCi0gICAg
Ly8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgaGFjayB0byBhbGxvdyBjYXN0cyBpbiBXZWJJ
bnNwZWN0b3IgY29kZSB3aGlsZSBNb2Rlcm4gSURCIGFuZCBMZWdhY3kgSURCIGxpdmUgc2lkZS1i
eS1zaWRlLgotICAgIC8vIEl0IHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhlIGxlZ2FjeSBpbXBs
ZW1lbnRhdGlvbiBpcyByZW1vdmVkIGFzIHBhcnQgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0OTExNwotICAgIHZpcnR1YWwgYm9vbCBpc0xlZ2FjeSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFJlZlB0cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCkgPSAwOwot
ICAgIHZpcnR1YWwgUmVmUHRyPElEQkN1cnNvcj4gaWRiQ3Vyc29yKCkgPSAwOwotICAgIHZpcnR1
YWwgUmVmUHRyPElEQkN1cnNvcldpdGhWYWx1ZT4gaWRiQ3Vyc29yV2l0aFZhbHVlKCkgPSAwOwot
ICAgIHZpcnR1YWwgUmVmUHRyPElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgpID0gMDsKLSAgICB2
aXJ0dWFsIFJlZlB0cjxJREJGYWN0b3J5PiBpZGJGYWN0b3J5KCkgPSAwOwotICAgIHZpcnR1YWwg
UmVmUHRyPElEQkluZGV4PiBpZGJJbmRleCgpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJP
YmplY3RTdG9yZT4gaWRiT2JqZWN0U3RvcmUoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uKCkgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKCkgPSAwOwotICAgIHZpcnR1YWwgaW50
NjRfdCBpbnRlZ2VyKCkgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSA9
IDA7Ci0gICAgdmlydHVhbCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgPSAwOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgSURCQW55KCk7CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QoKTsKKyAgICBS
ZWZQdHI8SURCQ3Vyc29yPiBpZGJDdXJzb3IoKTsKKyAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZh
bHVlPiBpZGJDdXJzb3JXaXRoVmFsdWUoKTsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2U+IGlkYkRh
dGFiYXNlKCk7CisgICAgUmVmUHRyPElEQkZhY3Rvcnk+IGlkYkZhY3RvcnkoKTsKKyAgICBSZWZQ
dHI8SURCSW5kZXg+IGlkYkluZGV4KCk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJP
YmplY3RTdG9yZSgpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24o
KTsKKyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUoKTsKKyAg
ICBpbnQ2NF90IGludGVnZXIoKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpOworICAgIGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGgoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBJREJB
bnkoSURCQW55OjpUeXBlKTsKKyAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQkRhdGFiYXNlPiYm
KTsKKyAgICBleHBsaWNpdCBJREJBbnkoUmVmPElEQk9iamVjdFN0b3JlPiYmKTsKKyAgICBleHBs
aWNpdCBJREJBbnkoUmVmPElEQkluZGV4PiYmKTsKKyAgICBleHBsaWNpdCBJREJBbnkoUmVmPElE
QkN1cnNvcj4mJik7CisgICAgZXhwbGljaXQgSURCQW55KGNvbnN0IElEQktleVBhdGgmKTsKKyAg
ICBleHBsaWNpdCBJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKKworICAg
IElEQkFueTo6VHlwZSBtX3R5cGUgeyBJREJBbnk6OlR5cGU6OlVuZGVmaW5lZCB9OworICAgIFJl
ZlB0cjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+
IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQkluZGV4PiBtX2luZGV4OworICAgIFJlZlB0
cjxJREJDdXJzb3I+IG1fY3Vyc29yOworICAgIFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IG1f
Y3Vyc29yV2l0aFZhbHVlOworCisgICAgY29uc3QgSURCS2V5UGF0aCBtX2lkYktleVBhdGg7Cisg
ICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9zY3JpcHRWYWx1ZTsKKyAgICBjb25z
dCBTdHJpbmcgbV9zdHJpbmc7CisgICAgY29uc3QgaW50NjRfdCBtX2ludGVnZXIgeyAwIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQkFueV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCAwMzY2MWUyLi5jN2IzYjNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTI4LDE1
ICsyOCwyMCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJE
T01SZXF1ZXN0U3RhdGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAi
SURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CisjaW5jbHVkZSAiSURCR2V0UmVzdWx0LmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIK
KyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUlEQkN1cnNvcjo6SURCQ3Vyc29yKCkKLXsKLX0KLQogY29uc3QgQXRvbWljU3RyaW5nJiBJREJD
dXJzb3I6OmRpcmVjdGlvbk5leHQoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9t
aWNTdHJpbmc+IG5leHQoIm5leHQiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKQEAgLTk3LDYgKzEwMiwzNDggQEAgY29uc3QgQXRvbWljU3RyaW5nJiBJREJDdXJzb3I6OmRp
cmVjdGlvblRvU3RyaW5nKEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmUKICAgICB9CiB9
CiAKK1JlZjxJREJDdXJzb3I+IElEQkN1cnNvcjo6Y3JlYXRlKElEQlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkN1cnNvcih0cmFuc2FjdGlvbiwgaW5kZXgsIGlu
Zm8pKTsKK30KKworSURCQ3Vyc29yOjpJREJDdXJzb3IoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQkN1cnNvckluZm8mIGlu
Zm8pCisgICAgOiBBY3RpdmVET01PYmplY3QodHJhbnNhY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQorICAgICwgbV9pbmZvKGluZm8pCisgICAgLCBtX3NvdXJjZShJREJBbnk6OmNyZWF0
ZShvYmplY3RTdG9yZSkubGVha1JlZigpKQorICAgICwgbV9vYmplY3RTdG9yZSgmb2JqZWN0U3Rv
cmUpCit7CisgICAgc3VzcGVuZElmTmVlZGVkKCk7Cit9CisKK0lEQkN1cnNvcjo6SURCQ3Vyc29y
KElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJD
dXJzb3JJbmZvJiBpbmZvKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KHRyYW5zYWN0aW9uLnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1faW5mbyhpbmZvKQorICAgICwgbV9zb3VyY2Uo
SURCQW55OjpjcmVhdGUoaW5kZXgpLmxlYWtSZWYoKSkKKyAgICAsIG1faW5kZXgoJmluZGV4KQor
eworICAgIHN1c3BlbmRJZk5lZWRlZCgpOworfQorCitJREJDdXJzb3I6On5JREJDdXJzb3IoKQor
eworfQorCitib29sIElEQkN1cnNvcjo6c291cmNlc0RlbGV0ZWQoKSBjb25zdAoreworICAgIGlm
IChtX29iamVjdFN0b3JlKQorICAgICAgICByZXR1cm4gbV9vYmplY3RTdG9yZS0+aXNEZWxldGVk
KCk7CisKKyAgICBBU1NFUlQobV9pbmRleCk7CisgICAgcmV0dXJuIG1faW5kZXgtPmlzRGVsZXRl
ZCgpIHx8IG1faW5kZXgtPm1vZGVybk9iamVjdFN0b3JlKCkuaXNEZWxldGVkKCk7Cit9CisKK0lE
Qk9iamVjdFN0b3JlJiBJREJDdXJzb3I6OmVmZmVjdGl2ZU9iamVjdFN0b3JlKCkgY29uc3QKK3sK
KyAgICBpZiAobV9vYmplY3RTdG9yZSkKKyAgICAgICAgcmV0dXJuICptX29iamVjdFN0b3JlOwor
CisgICAgQVNTRVJUKG1faW5kZXgpOworICAgIHJldHVybiBtX2luZGV4LT5tb2Rlcm5PYmplY3RT
dG9yZSgpOworfQorCitJREJUcmFuc2FjdGlvbiYgSURCQ3Vyc29yOjp0cmFuc2FjdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkubW9kZXJuVHJhbnNhY3Rp
b24oKTsKK30KKworY29uc3QgU3RyaW5nJiBJREJDdXJzb3I6OmRpcmVjdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIElEQkN1cnNvcjo6ZGlyZWN0aW9uVG9TdHJpbmcobV9pbmZvLmN1cnNvckRp
cmVjdGlvbigpKTsKK30KKworY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIElEQkN1cnNv
cjo6a2V5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZXByZWNhdGVkQ3VycmVudEtleTsKK30K
KworY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIElEQkN1cnNvcjo6cHJpbWFyeUtleSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5OworfQor
Citjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURCQ3Vyc29yOjp2YWx1ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZGVwcmVjYXRlZEN1cnJlbnRWYWx1ZTsKK30KKworSURCQW55KiBJ
REJDdXJzb3I6OnNvdXJjZSgpCit7CisgICAgcmV0dXJuICZtX3NvdXJjZS5nZXQoKTsKK30KKwor
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRlKEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6dXBkYXRl
Iik7CisKKyAgICBpZiAoc291cmNlc0RlbGV0ZWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29y
JzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVu
IGRlbGV0ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICgh
dHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29y
JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAodHJhbnNhY3Rpb24oKS5pc1JlYWRPbmx5
KCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVy
cm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHJlY29yZCBtYXkgbm90IGJlIHVwZGF0ZWQg
aW5zaWRlIGEgcmVhZC1vbmx5IHRyYW5zYWN0aW9uLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBpZiAoIW1fZ290VmFsdWUpIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNv
cic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQgb3IgaGFzIGl0ZXJhdGVkIHBhc3QgaXRz
IGVuZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGlzS2V5
Q3Vyc29yKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZh
bGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYSBrZXkg
Y3Vyc29yLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvJiBv
YmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7CisgICAgYXV0byYga2V5UGF0aCA9
IG9iamVjdFN0b3JlLmluZm8oKS5rZXlQYXRoKCk7CisgICAgY29uc3QgYm9vbCB1c2VzSW5MaW5l
S2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOworICAgIGlmICh1c2VzSW5MaW5lS2V5cykgeworICAg
ICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgSURCS2V5
RGF0YSBrZXlQYXRoS2V5RGF0YShrZXlQYXRoS2V5LmdldCgpKTsKKyAgICAgICAgaWYgKCFrZXlQ
YXRoS2V5IHx8IGtleVBhdGhLZXlEYXRhICE9IG1fY3VycmVudFByaW1hcnlLZXlEYXRhKSB7Cisg
ICAgICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAg
ICAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1
cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBvZiB0aGlz
IGN1cnNvciB1c2VzIGluLWxpbmUga2V5cyBhbmQgZXZhbHVhdGluZyB0aGUga2V5IHBhdGggb2Yg
dGhlIHZhbHVlIHBhcmFtZXRlciByZXN1bHRzIGluIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhl
IGN1cnNvcidzIGVmZmVjdGl2ZSBrZXkuIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gcmVxdWVzdCA9IGVmZmVjdGl2ZU9iamVjdFN0
b3JlKCkucHV0Rm9yQ3Vyc29yVXBkYXRlKGV4ZWMsIHZhbHVlLmpzVmFsdWUoKSwgbV9kZXByZWNh
dGVkQ3VycmVudFByaW1hcnlLZXkuanNWYWx1ZSgpLCBlYyk7CisgICAgaWYgKGVjLmNvZGUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIHJlcXVl
c3QtPnNldFNvdXJjZSgqdGhpcyk7CisgICAgKyttX291dHN0YW5kaW5nUmVxdWVzdENvdW50Owor
CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCQ3Vyc29yOjphZHZhbmNlKHVuc2ln
bmVkIGxvbmcgY291bnQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9H
KEluZGV4ZWREQiwgIklEQkN1cnNvcjo6YWR2YW5jZSIpOworCisgICAgaWYgKCFtX3JlcXVlc3Qp
IHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNvdW50KSB7Cisg
ICAgICAgIGVjLmNvZGUgPSBUeXBlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29yJzogQSBjb3Vu
dCBhcmd1bWVudCB3aXRoIHZhbHVlIDAgKHplcm8pIHdhcyBzdXBwbGllZCwgbXVzdCBiZSBncmVh
dGVyIHRoYW4gMC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzb3VyY2Vz
RGVsZXRlZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52
YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJj
ZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgewor
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2FkdmFuY2UnIG9uICdJREJDdXJzb3InOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3Rp
dmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1f
Z290VmFsdWUpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZh
bGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2FkdmFuY2UnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5n
IGl0ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2dvdFZhbHVlID0gZmFsc2U7CisKKyAgICB1bmNoZWNrZWRJdGVy
YXRlQ3Vyc29yKElEQktleURhdGEoKSwgY291bnQpOworfQorCit2b2lkIElEQkN1cnNvcjo6Y29u
dGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKK3sKKyAgICBjb250aW51ZUZ1bmN0aW9uKElEQktleURhdGEoKSwgZWMpOwor
fQorCit2b2lkIElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5VmFsdWUsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVl
c3RTdGF0ZSgmY29udGV4dCk7CisgICAgUmVmUHRyPElEQktleT4ga2V5OworICAgIGlmICgha2V5
VmFsdWUuanNWYWx1ZSgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIGtleSA9IHNjcmlwdFZhbHVl
VG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOworCisgICAgY29udGludWVGdW5jdGlv
bihrZXkuZ2V0KCksIGVjKTsKK30KKwordm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24o
Y29uc3QgSURCS2V5RGF0YSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24gKHRvIGtleSAl
cykiLCBrZXkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFtX3Jl
cXVlc3QpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlk
U3RhdGVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzb3VyY2VzRGVs
ZXRlZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxp
ZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ug
b3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCF0cmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZl
RXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2
ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9n
b3RWYWx1ZSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFs
aWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5n
IGl0ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIWtleS5pc051bGwoKSAmJiAha2V5LmlzVmFsaWQoKSkgewor
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVl
JyBvbiAnSURCQ3Vyc29yJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9pbmZvLmlzRGlyZWN0aW9uRm9yd2Fy
ZCgpKSB7CisgICAgICAgIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5jb21wYXJlKG1fY3VycmVu
dEtleURhdGEpIDw9IDApIHsKKyAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6RGF0YUVycm9yOworICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHBhcmFtZXRl
ciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBjdXJzb3IncyBwb3NpdGlvbi4iKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIWtleS5pc051bGwo
KSAmJiBrZXkuY29tcGFyZShtX2N1cnJlbnRLZXlEYXRhKSA+PSAwKSB7CisgICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJz
b3InOiBUaGUgcGFyYW1ldGVyIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGlzIGN1cnNv
cidzIHBvc2l0aW9uLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9nb3RWYWx1
ZSA9IGZhbHNlOworCisgICAgdW5jaGVja2VkSXRlcmF0ZUN1cnNvcihrZXksIDApOworfQorCit2
b2lkIElEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJLZXlEYXRhJiBr
ZXksIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisgICAgKyttX291dHN0YW5kaW5nUmVxdWVzdENv
dW50OworCisgICAgbV9yZXF1ZXN0LT53aWxsSXRlcmF0ZUN1cnNvcigqdGhpcyk7CisgICAgdHJh
bnNhY3Rpb24oKS5pdGVyYXRlQ3Vyc29yKCp0aGlzLCBrZXksIGNvdW50KTsKK30KKworUmVmUHRy
PFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbiIpOworCisgICAg
aWYgKHNvdXJjZXNEZWxldGVkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJz
b3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIXRyYW5zYWN0aW9u
KCkuaXNBY3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFu
c2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgaWYgKHRyYW5zYWN0aW9uKCkuaXNSZWFkT25seSgpKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UmVhZE9ubHlFcnJvcjsKKyAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScg
b24gJ0lEQkN1cnNvcic6IFRoZSByZWNvcmQgbWF5IG5vdCBiZSBkZWxldGVkIGluc2lkZSBhIHJl
YWQtb25seSB0cmFuc2FjdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgaWYgKCFtX2dvdFZhbHVlKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vy
c29yIGlzIGJlaW5nIGl0ZXJhdGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChpc0tleUN1cnNvcigpKSB7
CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdkZWxldGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1cnNvci4iKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byByZXF1ZXN0ID0gZWZm
ZWN0aXZlT2JqZWN0U3RvcmUoKS5tb2Rlcm5EZWxldGUoY29udGV4dCwgbV9kZXByZWNhdGVkQ3Vy
cmVudFByaW1hcnlLZXkuanNWYWx1ZSgpLCBlYyk7CisgICAgaWYgKGVjLmNvZGUpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKHJlcXVlc3QpOworICAgIHJlcXVlc3QtPnNl
dFNvdXJjZSgqdGhpcyk7CisgICAgKyttX291dHN0YW5kaW5nUmVxdWVzdENvdW50OworCisgICAg
cmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQgSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURCUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCit7CisgICAgTE9H
KEluZGV4ZWREQiwgIklEQkN1cnNvcjo6c2V0R2V0UmVzdWx0IC0gY3VycmVudCBrZXkgJXMiLCBn
ZXRSZXN1bHQua2V5RGF0YSgpLmxvZ2dpbmdTdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTAwKS51dGY4
KCkuZGF0YSgpKTsKKworICAgIGF1dG8qIGNvbnRleHQgPSByZXF1ZXN0LnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghZ2V0UmVzdWx0LmlzRGVmaW5lZCgpKSB7CisgICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRL
ZXkgPSB7IH07CisgICAgICAgIG1fY3VycmVudEtleURhdGEgPSB7IH07CisgICAgICAgIG1fZGVw
cmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5ID0geyB9OworICAgICAgICBtX2N1cnJlbnRQcmltYXJ5
S2V5RGF0YSA9IHsgfTsKKyAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0geyB9Owor
CisgICAgICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRLZXkgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250
ZXh0LCBnZXRSZXN1bHQua2V5RGF0YSgpKTsKKyAgICBtX2N1cnJlbnRLZXlEYXRhID0gZ2V0UmVz
dWx0LmtleURhdGEoKTsKKyAgICBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleSA9IGlkYktl
eURhdGFUb1NjcmlwdFZhbHVlKGNvbnRleHQsIGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgpKTsK
KyAgICBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YSA9IGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgp
OworCisgICAgaWYgKGlzS2V5Q3Vyc29yKCkpCisgICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRW
YWx1ZSA9IHsgfTsKKyAgICBlbHNlCisgICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRWYWx1ZSA9
IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKCpjb250ZXh0LCBnZXRSZXN1bHQudmFsdWVCdWZmZXIo
KSk7CisKKyAgICBtX2dvdFZhbHVlID0gdHJ1ZTsKK30KKworY29uc3QgY2hhciogSURCQ3Vyc29y
OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIklEQkN1cnNvciI7
Cit9CisKK2Jvb2wgSURCQ3Vyc29yOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSURCQ3Vyc29yOjpoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX291dHN0YW5kaW5nUmVxdWVzdENv
dW50OworfQorCit2b2lkIElEQkN1cnNvcjo6ZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291
bnQoKQoreworICAgIEFTU0VSVChtX291dHN0YW5kaW5nUmVxdWVzdENvdW50KTsKKyAgICAtLW1f
b3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCAyNGQzYTkzLi44NGY4Yjk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtMjMsMzEgKzIz
LDI3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRl
ZiBJREJDdXJzb3JfaAotI2RlZmluZSBJREJDdXJzb3JfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUg
IklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiSW5kZXhlZERCLmgiCi0jaW5jbHVkZSAiU2Ny
aXB0V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURCQ3Vyc29ySW5mby5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIERPTVJlcXVlc3RTdGF0ZTsKIGNsYXNzIElEQkFueTsKLWNsYXNzIElE
QkNhbGxiYWNrczsKLWNsYXNzIElEQlJlcXVlc3Q7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OworY2xhc3MgSURCR2V0UmVzdWx0OworY2xhc3MgSURCSW5kZXg7CitjbGFzcyBJREJPYmpl
Y3RTdG9yZTsKK2NsYXNzIElEQlRyYW5zYWN0aW9uOwogCi1zdHJ1Y3QgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlOwotCi1jbGFzcyBJREJDdXJzb3IgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBw
dWJsaWMgUmVmQ291bnRlZDxJREJDdXJzb3I+IHsKK2NsYXNzIElEQkN1cnNvciA6IHB1YmxpYyBT
Y3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPElEQkN1cnNvcj4sIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QgewogcHVibGljOgorICAgIHN0YXRpYyBSZWY8SURCQ3Vyc29yPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb24mLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKKwogICAg
IHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGRpcmVjdGlvbk5leHQoKTsKICAgICBzdGF0aWMg
Y29uc3QgQXRvbWljU3RyaW5nJiBkaXJlY3Rpb25OZXh0VW5pcXVlKCk7CiAgICAgc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyYgZGlyZWN0aW9uUHJldigpOwpAQCAtNTUsMzkgKzUxLDczIEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBzdHJpbmdUb0Rp
cmVjdGlvbihjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBz
dGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJlY3Rpb25Ub1N0cmluZyhJbmRleGVkREI6OkN1
cnNvckRpcmVjdGlvbiBtb2RlKTsKLQotICAgIHZpcnR1YWwgfklEQkN1cnNvcigpIHsgfQorICAg
IAorICAgIHZpcnR1YWwgfklEQkN1cnNvcigpOwogCiAgICAgLy8gSW1wbGVtZW50IHRoZSBJREwK
LSAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBwcmltYXJ5S2V5KCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVl
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgSURCQW55KiBzb3VyY2UoKSA9IDA7CisgICAgY29u
c3QgU3RyaW5nJiBkaXJlY3Rpb24oKSBjb25zdDsKKyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5KCkgY29uc3Q7CisgICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IHByaW1hcnlLZXkoKSBjb25zdDsKKyAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
dmFsdWUoKSBjb25zdDsKKyAgICBJREJBbnkqIHNvdXJjZSgpOworCisgICAgUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IHVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgdm9pZCBhZHZhbmNlKHVu
c2lnbmVkIGxvbmcsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIHZvaWQgY29udGlu
dWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJik7CisgICAgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwogCi0g
ICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gdXBkYXRlKEpTQzo6RXhlY1N0YXRlJiwgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJikgPSAwOworICAgIHZvaWQgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRh
JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IG5vdCBuZWVkIHRoYXQgbWV0aG9kICh0YWtpbmcgYSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHBv
aW50ZXIgYW5kIG5vdCBhIHJlZmVyZW5jZSkKLSAgICAvLyBidXQgSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQgd2FudHMgdG8gY2FsbCBpdCB3aXRoIGEgbnVsbCBjb250ZXh0LiAKLSAgICB2aXJ0dWFs
IHZvaWQgY29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5IHRoZSBj
b2RlIGdlbmVyYXRvciBzbyB0aGlzIG92ZXJsb2FkIGlzIHVubmVlZGVkLgotICAgIHZvaWQgY29u
dGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmIGVjKSB7IGNvbnRpbnVlRnVuY3Rpb24oJmNvbnRleHQsIGVjKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0g
MDsKKyAgICBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZv
OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3IoKSBjb25zdCA9IDA7CisgICAgdm9p
ZCBzZXRSZXF1ZXN0KElEQlJlcXVlc3QmIHJlcXVlc3QpIHsgbV9yZXF1ZXN0ID0gJnJlcXVlc3Q7
IH0KKyAgICB2b2lkIGNsZWFyUmVxdWVzdCgpIHsgbV9yZXF1ZXN0ID0gbnVsbHB0cjsgfQorICAg
IElEQlJlcXVlc3QqIHJlcXVlc3QoKSB7IHJldHVybiBtX3JlcXVlc3Q7IH0KIAotICAgIHZpcnR1
YWwgYm9vbCBpc01vZGVybkN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9p
ZCBzZXRHZXRSZXN1bHQoSURCUmVxdWVzdCYsIGNvbnN0IElEQkdldFJlc3VsdCYpOwogCi0gICAg
dmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzS2V5Q3Vyc29yKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgdm9pZCBkZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOworCisgICAgLy8g
QWN0aXZlRE9NT2JqZWN0LgorICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBj
b25zdDsKKyAgICBib29sIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdDsK
KyAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAg
SURCQ3Vyc29yKCk7CisgICAgSURCQ3Vyc29yKElEQlRyYW5zYWN0aW9uJiwgSURCT2JqZWN0U3Rv
cmUmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7CisgICAgSURCQ3Vyc29yKElEQlRyYW5zYWN0aW9u
JiwgSURCSW5kZXgmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7CisKK3ByaXZhdGU6CisgICAgLy8g
Q3Vyc29ycyBhcmUgY3JlYXRlZCB3aXRoIGFuIG91dHN0YW5kaW5nIGl0ZXJhdGlvbiByZXF1ZXN0
LgorICAgIHVuc2lnbmVkIG1fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgeyAxIH07CisKKyAgICBJ
REJDdXJzb3JJbmZvIG1faW5mbzsKKyAgICBSZWY8SURCQW55PiBtX3NvdXJjZTsKKyAgICBJREJP
YmplY3RTdG9yZSogbV9vYmplY3RTdG9yZSB7IG51bGxwdHIgfTsKKyAgICBJREJJbmRleCogbV9p
bmRleCB7IG51bGxwdHIgfTsKKyAgICBJREJSZXF1ZXN0KiBtX3JlcXVlc3Q7CisKKyAgICBib29s
IHNvdXJjZXNEZWxldGVkKCkgY29uc3Q7CisgICAgSURCT2JqZWN0U3RvcmUmIGVmZmVjdGl2ZU9i
amVjdFN0b3JlKCkgY29uc3Q7CisgICAgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKCkgY29u
c3Q7CisKKyAgICB2b2lkIHVuY2hlY2tlZEl0ZXJhdGVDdXJzb3IoY29uc3QgSURCS2V5RGF0YSYs
IHVuc2lnbmVkIGxvbmcgY291bnQpOworCisgICAgYm9vbCBtX2dvdFZhbHVlIHsgZmFsc2UgfTsK
KworICAgIElEQktleURhdGEgbV9jdXJyZW50S2V5RGF0YTsKKyAgICBJREJLZXlEYXRhIG1fY3Vy
cmVudFByaW1hcnlLZXlEYXRhOworCisgICAgLy8gRklYTUU6IFdoZW4gZGl0Y2hpbmcgTGVnYWN5
IElEQiBhbmQgY29tYmluaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgYWJzdHJhY3Qg
SURCQ3Vyc29yLAorICAgIC8vIHRoZXNlIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1lbWJlcnMg
c2hvdWxkIGJlIEpTVmFsdWVzIGluc3RlYWQuCisgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUg
bV9kZXByZWNhdGVkQ3VycmVudEtleTsKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2Rl
cHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleTsKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBt
X2RlcHJlY2F0ZWRDdXJyZW50VmFsdWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZgotCi0jZW5kaWYgLy8gSURCQ3Vyc29yX2gKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCmluZGV4IDVjZTQ3MzguLjE0YTZjYjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZh
bHVlLmNwcApAQCAtMzAsNyArMzAsMjcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJD
dXJzb3JXaXRoVmFsdWU6OklEQkN1cnNvcldpdGhWYWx1ZSgpCitSZWY8SURCQ3Vyc29yV2l0aFZh
bHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5m
bykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJDdXJzb3JXaXRoVmFsdWUodHJhbnNh
Y3Rpb24sIG9iamVjdFN0b3JlLCBpbmZvKSk7Cit9CisKK1JlZjxJREJDdXJzb3JXaXRoVmFsdWU+
IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwg
SURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQoreworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IElEQkN1cnNvcldpdGhWYWx1ZSh0cmFuc2FjdGlvbiwgaW5kZXgsIGlu
Zm8pKTsKK30KKworSURCQ3Vyc29yV2l0aFZhbHVlOjpJREJDdXJzb3JXaXRoVmFsdWUoSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNvbnN0
IElEQkN1cnNvckluZm8mIGluZm8pCisgICAgOiBJREJDdXJzb3IodHJhbnNhY3Rpb24sIG9iamVj
dFN0b3JlLCBpbmZvKQoreworfQorCitJREJDdXJzb3JXaXRoVmFsdWU6OklEQkN1cnNvcldpdGhW
YWx1ZShJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQkluZGV4JiBpbmRleCwgY29uc3Qg
SURCQ3Vyc29ySW5mbyYgaW5mbykKKyAgICA6IElEQkN1cnNvcih0cmFuc2FjdGlvbiwgaW5kZXgs
IGluZm8pCit7Cit9CisKK0lEQkN1cnNvcldpdGhWYWx1ZTo6fklEQkN1cnNvcldpdGhWYWx1ZSgp
CiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yV2l0aFZhbHVlLmgKaW5kZXggNWY5OTA5MC4uZjEwMGRlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmgKQEAg
LTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIElEQkN1cnNvcldpdGhWYWx1ZV9oCi0jZGVmaW5lIElEQkN1cnNvcldpdGhWYWx1
ZV9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCkBAIC0z
NCwxNCArMzMsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJDdXJzb3JXaXRo
VmFsdWUgOiBwdWJsaWMgSURCQ3Vyc29yIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJDdXJz
b3JXaXRoVmFsdWUoKSB7IH0KKyAgICBzdGF0aWMgUmVmPElEQkN1cnNvcldpdGhWYWx1ZT4gY3Jl
YXRlKElEQlRyYW5zYWN0aW9uJiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJDdXJzb3JJbmZv
Jik7CisgICAgc3RhdGljIFJlZjxJREJDdXJzb3JXaXRoVmFsdWU+IGNyZWF0ZShJREJUcmFuc2Fj
dGlvbiYsIElEQkluZGV4JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwogCi1wcm90ZWN0ZWQ6Ci0g
ICAgSURCQ3Vyc29yV2l0aFZhbHVlKCk7CisgICAgdmlydHVhbCB+SURCQ3Vyc29yV2l0aFZhbHVl
KCk7CisKKyAgICBib29sIGlzS2V5Q3Vyc29yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KKworcHJpdmF0ZToKKyAgICBJREJDdXJzb3JXaXRoVmFsdWUoSURCVHJhbnNhY3Rpb24mLCBJ
REJPYmplY3RTdG9yZSYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKKyAgICBJREJDdXJzb3JXaXRo
VmFsdWUoSURCVHJhbnNhY3Rpb24mLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCi0KLSNlbmRpZiAvLyBMZWdh
Y3lDdXJzb3JXaXRoVmFsdWVfaAorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmlu
ZGV4IDJkNjQ3OWYuLmEyOWRmMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAgLTI4LDExICsyOCw0MDEgQEAKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1
ZGUgIkV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCIKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVl
c3QuaCIKKyNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b24uaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUlEQkRhdGFiYXNlOjpJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQotICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQpCitSZWY8SURCRGF0
YWJhc2U+IElEQkRhdGFiYXNlOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNvbnN0IElE
QlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURC
RGF0YWJhc2UoY29udGV4dCwgY29ubmVjdGlvbiwgcmVzdWx0RGF0YSkpOworfQorCitJREJEYXRh
YmFzZTo6SURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNvbnN0IElEQlJlc3VsdERh
dGEmIHJlc3VsdERhdGEpCisgICAgOiBXZWJDb3JlOjpBY3RpdmVET01PYmplY3QoJmNvbnRleHQp
CisgICAgLCBtX3NlcnZlckNvbm5lY3Rpb24oY29ubmVjdGlvbikKKyAgICAsIG1faW5mbyhyZXN1
bHREYXRhLmRhdGFiYXNlSW5mbygpKQorICAgICwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlm
aWVyKHJlc3VsdERhdGEuZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcigpKQoreworICAgIExP
RyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6SURCRGF0YWJhc2UgLSBDcmVhdGluZyBkYXRhYmFz
ZSAlcyB3aXRoIHZlcnNpb24gJSIgUFJJdTY0ICIgY29ubmVjdGlvbiAlIiBQUkl1NjQsIG1faW5m
by5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9pbmZvLnZlcnNpb24oKSwgbV9kYXRhYmFzZUNvbm5l
Y3Rpb25JZGVudGlmaWVyKTsKKyAgICBzdXNwZW5kSWZOZWVkZWQoKTsKKyAgICByZWxheEFkb3B0
aW9uUmVxdWlyZW1lbnQoKTsKKyAgICBtX3NlcnZlckNvbm5lY3Rpb24tPnJlZ2lzdGVyRGF0YWJh
c2VDb25uZWN0aW9uKCp0aGlzKTsKK30KKworSURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSgpCit7
CisgICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT51bnJlZ2lzdGVyRGF0YWJhc2VDb25uZWN0aW9uKCp0
aGlzKTsKK30KKworYm9vbCBJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIW1fY2xvc2VkSW5TZXJ2ZXI7Cit9CisKK2NvbnN0IFN0cmluZyBJREJE
YXRhYmFzZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5mby5uYW1lKCk7Cit9CisK
K3VpbnQ2NF90IElEQkRhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bmZvLnZlcnNpb24oKTsKK30KKworUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlOjpv
YmplY3RTdG9yZU5hbWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2Jq
ZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOworICAgIGZvciAoYXV0byYg
bmFtZSA6IG1faW5mby5vYmplY3RTdG9yZU5hbWVzKCkpCisgICAgICAgIG9iamVjdFN0b3JlTmFt
ZXMtPmFwcGVuZChuYW1lKTsKKyAgICBvYmplY3RTdG9yZU5hbWVzLT5zb3J0KCk7CisgICAgcmV0
dXJuIG9iamVjdFN0b3JlTmFtZXM7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYsIGNvbnN0IERp
Y3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0
YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIik7CisKKyAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uIHx8IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFu
Z2UoKSk7CisKKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKSB7CisgICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVP
YmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGlzIG5vdCBydW5uaW5n
IGEgdmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb24uIik7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlv
bkluYWN0aXZlRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlm
IChtX2luZm8uaGFzT2JqZWN0U3RvcmUobmFtZSkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lE
QkRhdGFiYXNlJzogQW4gb2JqZWN0IHN0b3JlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVh
ZHkgZXhpc3RzLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAo
IWtleVBhdGguaXNOdWxsKCkgJiYgIWtleVBhdGguaXNWYWxpZCgpKSB7CisgICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7CisgICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScg
b24gJ0lEQkRhdGFiYXNlJzogVGhlIGtleVBhdGggb3B0aW9uIGlzIG5vdCBhIHZhbGlkIGtleSBw
YXRoLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoYXV0b0lu
Y3JlbWVudCAmJiAha2V5UGF0aC5pc051bGwoKSkgeworICAgICAgICBpZiAoKGtleVBhdGgudHlw
ZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OlN0cmluZyAmJiBrZXlQYXRoLnN0cmluZygp
LmlzRW1wdHkoKSkgfHwga2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6
QXJyYXkpIHsKKyAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52
YWxpZEFjY2Vzc0Vycm9yOworICAgICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBU
aGUgYXV0b0luY3JlbWVudCBvcHRpb24gd2FzIHNldCBidXQgdGhlIGtleVBhdGggb3B0aW9uIHdh
cyBlbXB0eSBvciBhbiBhcnJheS4iKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSW5zdGFsbCB0aGUgbmV3IE9iamVjdFN0b3JlIGludG8g
dGhlIGNvbm5lY3Rpb24ncyBtZXRhZGF0YS4KKyAgICBJREJPYmplY3RTdG9yZUluZm8gaW5mbyA9
IG1faW5mby5jcmVhdGVOZXdPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50
KTsKKworICAgIC8vIENyZWF0ZSB0aGUgYWN0dWFsIElEQk9iamVjdFN0b3JlIGZyb20gdGhlIHRy
YW5zYWN0aW9uLCB3aGljaCBhbHNvIHNjaGVkdWxlcyB0aGUgb3BlcmF0aW9uIHNlcnZlciBzaWRl
LgorICAgIFJlZjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBtX3ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbi0+Y3JlYXRlT2JqZWN0U3RvcmUoaW5mbyk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCZvYmplY3RTdG9yZS5sZWFrUmVmKCkpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb24+IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIG9iamVjdFN0b3JlcywgY29uc3QgU3RyaW5nJiBtb2RlU3Ry
aW5nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIs
ICJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24iKTsKKworICAgIGlmIChtX2Nsb3NlUGVuZGluZykg
eworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVy
cm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9u
IGlzIGNsb3NpbmcuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlm
IChvYmplY3RTdG9yZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFz
ZSc6IFRoZSBzdG9yZU5hbWVzIHBhcmFtZXRlciB3YXMgZW1wdHkuIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUg
PSBJREJUcmFuc2FjdGlvbjo6c3RyaW5nVG9Nb2RlKG1vZGVTdHJpbmcsIGVjLmNvZGUpOworICAg
IGlmIChlYy5jb2RlKSB7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBtYWtlU3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBU
aGUgbW9kZSBwcm92aWRlZCAoJyIpLCBtb2RlU3RyaW5nLCBBU0NJSUxpdGVyYWwoIicpIGlzIG5v
dCBvbmUgb2YgJ3JlYWRvbmx5JyBvciAncmVhZHdyaXRlJy4iKSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGlmIChtb2RlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlOjpSZWFkT25seSAmJiBtb2RlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFk
V3JpdGUpIHsKKyAgICAgICAgZWMuY29kZSA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uICYmICFt
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkpIHsKKyAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
KyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3Ry
YW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBBIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9u
IGlzIHJ1bm5pbmcuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGZv
ciAoYXV0byYgb2JqZWN0U3RvcmVOYW1lIDogb2JqZWN0U3RvcmVzKSB7CisgICAgICAgIGlmICht
X2luZm8uaGFzT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJy
b3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogT25lIG9mIHRoZSBzcGVjaWZpZWQgb2Jq
ZWN0IHN0b3JlcyB3YXMgbm90IGZvdW5kLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBhdXRvIGluZm8gPSBJREJUcmFuc2FjdGlvbkluZm86OmNsaWVudFRyYW5zYWN0
aW9uKG1fc2VydmVyQ29ubmVjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmVzLCBtb2RlKTsKKyAgICBh
dXRvIHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb246OmNyZWF0ZSgqdGhpcywgaW5mbyk7CisK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uIC0gQWRkZWQgYWN0
aXZlIHRyYW5zYWN0aW9uICVzIiwgaW5mby5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworCisgICAgbV9hY3RpdmVUcmFuc2FjdGlvbnMuc2V0KGluZm8uaWRlbnRp
ZmllcigpLCAmdHJhbnNhY3Rpb24uZ2V0KCkpOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCZ0cmFu
c2FjdGlvbi5sZWFrUmVmKCkpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+
IElEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgVmVjdG9yPFN0cmluZz4gb2JqZWN0U3RvcmVz
KDEpOworICAgIG9iamVjdFN0b3Jlc1swXSA9IG9iamVjdFN0b3JlOworICAgIHJldHVybiB0cmFu
c2FjdGlvbihjb250ZXh0LCBvYmplY3RTdG9yZXMsIG1vZGUsIGVjKTsKK30KKwordm9pZCBJREJE
YXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSIpOworCisgICAgaWYgKCFtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbikgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRo
ZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbV9pbmZvLmhhc09iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSkpIHsKKyAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOworICAg
ICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRl
T2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3Jl
IHdhcyBub3QgZm91bmQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luZm8u
ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTsKKyAgICBtX3ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbi0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTsKK30KKwordm9p
ZCBJREJEYXRhYmFzZTo6Y2xvc2UoKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFz
ZTo6Y2xvc2UgLSAlIiBQUkl1NjQsIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7CisK
KyAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7CisgICAgbWF5YmVDbG9zZUluU2VydmVyKCk7Cit9
CisKK3ZvaWQgSURCRGF0YWJhc2U6Om1heWJlQ2xvc2VJblNlcnZlcigpCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2ZXIgLSAlIiBQUkl1NjQsIG1f
ZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7CisKKyAgICBpZiAobV9jbG9zZWRJblNlcnZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gMy4zLjkgRGF0YWJhc2UgY2xvc2luZyBzdGVw
cworICAgIC8vIFdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbnMgY3JlYXRlZCB1c2luZyB0aGlzIGNv
bm5lY3Rpb24gdG8gY29tcGxldGUuCisgICAgLy8gT25jZSB0aGV5IGFyZSBjb21wbGV0ZSwgdGhp
cyBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKyAgICBpZiAoIW1fYWN0aXZlVHJhbnNhY3Rpb25zLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbG9zZWRJblNlcnZlciA9IHRydWU7
CisgICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5kYXRhYmFzZUNvbm5lY3Rpb25DbG9zZWQoKnRoaXMp
OworfQorCitjb25zdCBjaGFyKiBJREJEYXRhYmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICJJREJEYXRhYmFzZSI7Cit9CisKK2Jvb2wgSURCRGF0YWJhc2U6
OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBUaGlzIHZhbHVlIHdpbGwgc29tZXRpbWVzIGJlIGZhbHNlIHdoZW4gZGF0YWJhc2Ugb3BlcmF0
aW9ucyBhcmUgYWN0dWFsbHkgaW4gcHJvZ3Jlc3MuCisgICAgLy8gU3VjaCBkYXRhYmFzZSBvcGVy
YXRpb25zIGRvIG5vdCB5ZXQgZXhpc3QuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2U6OnN0b3AoKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6c3Rv
cCAtICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKworICAgIFZl
Y3RvcjxJREJSZXNvdXJjZUlkZW50aWZpZXI+IHRyYW5zYWN0aW9uSWRlbnRpZmllcnM7CisgICAg
dHJhbnNhY3Rpb25JZGVudGlmaWVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYWN0aXZlVHJh
bnNhY3Rpb25zLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIGlkIDogbV9hY3RpdmVUcmFuc2Fj
dGlvbnMua2V5cygpKQorICAgICAgICB0cmFuc2FjdGlvbklkZW50aWZpZXJzLnVuY2hlY2tlZEFw
cGVuZChpZCk7CisKKyAgICBmb3IgKGF1dG8mIGlkIDogdHJhbnNhY3Rpb25JZGVudGlmaWVycykg
eworICAgICAgICBJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5zYWN0
aW9ucy5nZXQoaWQpOworICAgICAgICBpZiAodHJhbnNhY3Rpb24pCisgICAgICAgICAgICB0cmFu
c2FjdGlvbi0+c3RvcCgpOworICAgIH0KKworICAgIGNsb3NlKCk7Cit9CisKK1JlZjxJREJUcmFu
c2FjdGlvbj4gSURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0
IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbywgSURCT3BlbkRCUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OnN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uICVzIiwgaW5mby5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAgQVNT
RVJUKGluZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hh
bmdlKTsKKyAgICBBU1NFUlQoIW1fY2xvc2VQZW5kaW5nKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKKworICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24g
PSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlzLCBpbmZvLCByZXF1ZXN0KTsKKyAgICBtX3Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9ICZ0cmFuc2FjdGlvbi5nZXQoKTsKKworICAgIG1fYWN0
aXZlVHJhbnNhY3Rpb25zLnNldCh0cmFuc2FjdGlvbi0+aW5mbygpLmlkZW50aWZpZXIoKSwgJnRy
YW5zYWN0aW9uLmdldCgpKTsKKworICAgIHJldHVybiB0cmFuc2FjdGlvbjsKK30KKwordm9pZCBJ
REJEYXRhYmFzZTo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5zYWN0
aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7
CisKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGNsaWVudCB0byBoYXZlIGFib3J0ZWQg
YSB0cmFuc2FjdGlvbiBiZWZvcmUgdGhlIHNlcnZlciByZXBsaWVzIGJhY2sgdGhhdCBpdCBoYXMg
c3RhcnRlZC4KKyAgICBpZiAobV9hYm9ydGluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hY3Rp
dmVUcmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksICZ0cmFu
c2FjdGlvbik7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OndpbGxDb21taXRUcmFuc2FjdGlvbihJ
REJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkRh
dGFiYXNlOjp3aWxsQ29tbWl0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRl
bnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGF1dG8gcmVm
VHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uLmluZm8o
KS5pZGVudGlmaWVyKCkpOworICAgIEFTU0VSVChyZWZUcmFuc2FjdGlvbik7CisgICAgbV9jb21t
aXR0aW5nVHJhbnNhY3Rpb25zLnNldCh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBX
VEZNb3ZlKHJlZlRyYW5zYWN0aW9uKSk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmRpZENvbW1p
dFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBMT0coSW5k
ZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBpZiAobV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPT0gJnRyYW5zYWN0aW9uKQorICAg
ICAgICBtX2luZm8uc2V0VmVyc2lvbih0cmFuc2FjdGlvbi5pbmZvKCkubmV3VmVyc2lvbigpKTsK
KworICAgIGRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7Cit9CisKK3Zv
aWQgSURCRGF0YWJhc2U6OndpbGxBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OndpbGxBYm9ydFRy
YW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBhdXRvIHJlZlRyYW5zYWN0aW9uID0gbV9hY3Rp
dmVUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKKyAg
ICBpZiAoIXJlZlRyYW5zYWN0aW9uKQorICAgICAgICByZWZUcmFuc2FjdGlvbiA9IG1fY29tbWl0
dGluZ1RyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOwor
CisgICAgQVNTRVJUKHJlZlRyYW5zYWN0aW9uKTsKKyAgICBtX2Fib3J0aW5nVHJhbnNhY3Rpb25z
LnNldCh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLCBXVEZNb3ZlKHJlZlRyYW5zYWN0
aW9uKSk7CisKKyAgICBpZiAodHJhbnNhY3Rpb24uaXNWZXJzaW9uQ2hhbmdlKCkpIHsKKyAgICAg
ICAgQVNTRVJUKHRyYW5zYWN0aW9uLm9yaWdpbmFsRGF0YWJhc2VJbmZvKCkpOworICAgICAgICBt
X2luZm8gPSAqdHJhbnNhY3Rpb24ub3JpZ2luYWxEYXRhYmFzZUluZm8oKTsKKyAgICAgICAgbV9j
bG9zZVBlbmRpbmcgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBJREJEYXRhYmFzZTo6ZGlkQWJv
cnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRBYm9ydFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBpZiAodHJhbnNhY3Rpb24uaXNWZXJzaW9uQ2hhbmdlKCkpIHsKKyAgICAgICAgQVNTRVJU
KHRyYW5zYWN0aW9uLm9yaWdpbmFsRGF0YWJhc2VJbmZvKCkpOworICAgICAgICBBU1NFUlQobV9p
bmZvLnZlcnNpb24oKSA9PSB0cmFuc2FjdGlvbi5vcmlnaW5hbERhdGFiYXNlSW5mbygpLT52ZXJz
aW9uKCkpOworICAgICAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7CisgICAgICAgIG1heWJlQ2xv
c2VJblNlcnZlcigpOworICAgIH0KKworICAgIGRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbik7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmRpZENvbW1pdE9yQWJvcnRUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgTE9HKEluZGV4ZWRE
QiwgIklEQkRhdGFiYXNlOjpkaWRDb21taXRPckFib3J0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KworICAgIGlmIChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9PSAmdHJhbnNhY3Rpb24pCisg
ICAgICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKKworI2lmbmRlZiBO
REJFQlVHCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChtX2FjdGl2ZVRyYW5zYWN0
aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSkKKyAgICAgICAg
Kytjb3VudDsKKyAgICBpZiAobV9jb21taXR0aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5z
YWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKQorICAgICAgICArK2NvdW50OworICAgIGlmICht
X2Fib3J0aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlm
aWVyKCkpKQorICAgICAgICArK2NvdW50OworCisgICAgQVNTRVJUKGNvdW50ID09IDEpOworI2Vu
ZGlmCisKKyAgICBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24uaW5mbygp
LmlkZW50aWZpZXIoKSk7CisgICAgbV9jb21taXR0aW5nVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFu
c2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKKyAgICBtX2Fib3J0aW5nVHJhbnNhY3Rpb25z
LnJlbW92ZSh0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKKworICAgIGlmIChtX2Ns
b3NlUGVuZGluZykKKyAgICAgICAgbWF5YmVDbG9zZUluU2VydmVyKCk7Cit9CisKK3ZvaWQgSURC
RGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlm
aWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3QgcmVxdWVzdGVkVmVyc2lvbikKK3sKKyAg
ICB1aW50NjRfdCBjdXJyZW50VmVyc2lvbiA9IG1faW5mby52ZXJzaW9uKCk7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50IC0gY3VycmVudCB2
ZXJzaW9uICUiIFBSSXU2NCAiLCByZXF1ZXN0ZWQgdmVyc2lvbiAlIiBQUkl1NjQgIiwgY29ubmVj
dGlvbiAlIiBQUkl1NjQsIGN1cnJlbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uLCBtX2RhdGFi
YXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOworCisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgfHwgbV9jbG9zZVBlbmRpbmcpIHsKKyAgICAgICAgc2VydmVyQ29ubmVjdGlvbigpLmRp
ZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQobV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyLCBy
ZXF1ZXN0SWRlbnRpZmllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWY8RXZl
bnQ+IGV2ZW50ID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUocmVxdWVzdElkZW50aWZp
ZXIsIGN1cnJlbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uLCBldmVudE5hbWVzKCkudmVyc2lv
bmNoYW5nZUV2ZW50KTsKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50
KSk7Cit9CisKK2Jvb2wgSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCAoJSIgUFJJ
dTY0ICIpIiwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKworICAgIGJvb2wgcmVz
dWx0ID0gRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YTo6ZGlzcGF0Y2hFdmVudChldmVudCk7CisK
KyAgICBpZiAoZXZlbnQuaXNWZXJzaW9uQ2hhbmdlRXZlbnQoKSAmJiBldmVudC50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCkKKyAgICAgICAgc2VydmVyQ29ubmVjdGlv
bigpLmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQobV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlm
aWVyLCBkb3duY2FzdDxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+KGV2ZW50KS5yZXF1ZXN0SWRlbnRp
ZmllcigpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2U6OmRp
ZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCit7CisgICAgYXV0byog
b2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmpl
Y3RTdG9yZUlkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKKyAgICBvYmpl
Y3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKK30KKwordm9pZCBJREJEYXRhYmFzZTo6
ZGlkRGVsZXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKKyAgICBhdXRv
KiBvYmplY3RTdG9yZSA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9i
amVjdFN0b3JlSWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUpOworICAgIG9i
amVjdFN0b3JlLT5kZWxldGVJbmRleChpbmZvLm5hbWUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5oCmluZGV4IGY4NDc2ZDguLmVkMGE2ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaApAQCAtMjMsNTQgKzIzLDEwMSBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCRGF0YWJhc2VfaAot
I2RlZmluZSBJREJEYXRhYmFzZV9oCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9N
U3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKLSNpbmNsdWRlICJFdmVudC5o
IgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIK
LSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIkluZGV4ZWREQi5oIgotI2lu
Y2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VJbmZv
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKLQotc3RydWN0IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZTsKK2NsYXNzIERPTVN0cmluZ0xp
c3Q7CitjbGFzcyBJREJPYmplY3RTdG9yZTsKK2NsYXNzIElEQk9wZW5EQlJlcXVlc3Q7CitjbGFz
cyBJREJSZXN1bHREYXRhOworY2xhc3MgSURCVHJhbnNhY3Rpb247CitjbGFzcyBJREJUcmFuc2Fj
dGlvbkluZm87CiAKIGNsYXNzIElEQkRhdGFiYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0
YWJhc2U+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIEFjdGl2ZURP
TU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCRGF0YWJhc2UoKSB7IH0KKyAgICBz
dGF0aWMgUmVmPElEQkRhdGFiYXNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElE
QkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwor
CisgICAgdmlydHVhbCB+SURCRGF0YWJhc2UoKTsKIAotICAgIC8vIEltcGxlbWVudCB0aGUgSURM
Ci0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHVpbnQ2NF90IHZlcnNpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygpIGNvbnN0ID0gMDsKKyAgICAvLyBJREJEYXRhYmFz
ZSBJREwKKyAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgIHVpbnQ2NF90IHZlcnNp
b24oKSBjb25zdDsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcygp
IGNvbnN0OwogCi0gICAgdmlydHVhbCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAg
dmlydHVhbCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlRyYW5z
YWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0g
MDsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
OworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsK
KyAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJik7CisgICAgdm9pZCBjbG9zZSgpOworCisgICAgLy8gRXZlbnRUYXJn
ZXQKKyAgICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIElEQkRhdGFiYXNlRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9Cisg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OyB9CisgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgUmVmQ291bnRlZDxJREJEYXRh
YmFzZT46OnJlZigpOyB9CisgICAgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBSZWZD
b3VudGVkPElEQkRhdGFiYXNlPjo6ZGVyZWYoKTsgfQogCiAgICAgdXNpbmcgUmVmQ291bnRlZDxJ
REJEYXRhYmFzZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6ZGVy
ZWY7CiAKLXByb3RlY3RlZDoKLSAgICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
Kik7CisgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgc3RvcCgpIGZpbmFsOworCisgICAgY29uc3QgSURCRGF0YWJhc2VJbmZvJiBpbmZv
KCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisgICAgdWludDY0X3QgZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRp
ZmllcjsgfQorCisgICAgUmVmPElEQlRyYW5zYWN0aW9uPiBzdGFydFZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mLCBJREJPcGVuREJSZXF1ZXN0Jik7Cisg
ICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CisKKyAgICB2b2lk
IHdpbGxDb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOworICAgIHZvaWQgZGlkQ29t
bWl0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKKyAgICB2b2lkIHdpbGxBYm9ydFRyYW5z
YWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CisgICAgdm9pZCBkaWRBYm9ydFRyYW5zYWN0aW9uKElE
QlRyYW5zYWN0aW9uJik7CisKKyAgICB2b2lkIGZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3Qg
SURCUmVzb3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3QgcmVxdWVz
dGVkVmVyc2lvbik7CisKKyAgICBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgc2Vy
dmVyQ29ubmVjdGlvbigpIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbi5nZXQoKTsgfQorCisg
ICAgdm9pZCBkaWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7CisgICAgdm9p
ZCBkaWREZWxldGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7CisKKyAgICBib29sIGlz
Q2xvc2luZ09yQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZVBlbmRpbmcgfHwgbV9jbG9z
ZWRJblNlcnZlcjsgfQorCisgICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50JikgZmluYWw7CisK
KyAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFsOworCitwcml2YXRlOgor
ICAgIElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJDbGllbnQ6OklEQkNv
bm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgZGlk
Q29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7CisKKyAgICB2b2lkIG1h
eWJlQ2xvc2VJblNlcnZlcigpOworCisgICAgUmVmPElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRv
U2VydmVyPiBtX3NlcnZlckNvbm5lY3Rpb247CisgICAgSURCRGF0YWJhc2VJbmZvIG1faW5mbzsK
KyAgICB1aW50NjRfdCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIgeyAwIH07CisKKyAg
ICBib29sIG1fY2xvc2VQZW5kaW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2xvc2VkSW5TZXJ2
ZXIgeyBmYWxzZSB9OworCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbjsKKyAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPj4gbV9hY3RpdmVUcmFuc2FjdGlvbnM7CisgICAgSGFzaE1hcDxJREJS
ZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4+IG1fY29tbWl0dGluZ1Ry
YW5zYWN0aW9uczsKKyAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPj4gbV9hYm9ydGluZ1RyYW5zYWN0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJEYXRhYmFzZV9oCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCmluZGV4IDdhOWY5OTUuLjM2OGVjMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCkBAIC0yOCwx
MCArMjgsMTQxIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUg
IkRPTVJlcXVlc3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTY2hl
bWVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkZhY3Rv
cnk6OklEQkZhY3RvcnkoKQorc3RhdGljIGJvb2wgc2hvdWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIEFTU0VSVChpczxEb2N1
bWVudD4oY29udGV4dCkgfHwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOworICAgIGlm
IChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKKyAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOworICAgICAgICBpZiAoIWRvY3VtZW50LmZyYW1l
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFkb2N1bWVudC5wYWdl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWNvbnRleHQu
c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC50b3BPcmlnaW4oKSkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZWY8SURC
RmFjdG9yeT4gSURCRmFjdG9yeTo6Y3JlYXRlKElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2Vy
dmVyJiBjb25uZWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkZhY3Rvcnko
Y29ubmVjdGlvbikpOworfQorCitJREJGYWN0b3J5OjpJREJGYWN0b3J5KElEQkNsaWVudDo6SURC
Q29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uKQorICAgIDogbV9jb25uZWN0aW9uVG9TZXJ2
ZXIoY29ubmVjdGlvbikKK3sKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Omdl
dERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGUmKQor
eworICAgIHJldHVybiBudWxscHRyOworfQorCitSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURC
RmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIExPRyhJbmRleGVkREIsICJJREJG
YWN0b3J5OjpvcGVuIik7CisgICAgCisgICAgcmV0dXJuIG9wZW5JbnRlcm5hbChjb250ZXh0LCBu
YW1lLCAwLCBlYykucmVsZWFzZSgpOworfQorCitSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURC
RmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCRmFjdG9yeTo6b3BlbiIpOworICAgIAorICAgIGlm
ICghdmVyc2lvbikgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCB2
ZXJzaW9uLCBlYykucmVsZWFzZSgpOworfQorCitSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURC
RmFjdG9yeTo6b3BlbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQgbG9uZyBsb25nIHZlcnNpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gVHlwZUVy
cm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkVGhy
b3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0KSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VS
UjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQVNTRVJUKGNvbnRleHQu
c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgQVNTRVJUKGNvbnRleHQudG9wT3JpZ2luKCkpOworICAg
IElEQkRhdGFiYXNlSWRlbnRpZmllciBkYXRhYmFzZUlkZW50aWZpZXIobmFtZSwgKmNvbnRleHQu
c2VjdXJpdHlPcmlnaW4oKSwgKmNvbnRleHQudG9wT3JpZ2luKCkpOworICAgIGlmICghZGF0YWJh
c2VJZGVudGlmaWVyLmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byByZXF1ZXN0ID0gSURCT3BlbkRC
UmVxdWVzdDo6Y3JlYXRlT3BlblJlcXVlc3QobV9jb25uZWN0aW9uVG9TZXJ2ZXIuZ2V0KCksIGNv
bnRleHQsIGRhdGFiYXNlSWRlbnRpZmllciwgdmVyc2lvbik7CisgICAgbV9jb25uZWN0aW9uVG9T
ZXJ2ZXItPm9wZW5EYXRhYmFzZShyZXF1ZXN0LmdldCgpKTsKKworICAgIHJldHVybiBhZG9wdFJl
ZigmcmVxdWVzdC5sZWFrUmVmKCkpOworfQorCitSZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURC
RmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBMT0coSW5kZXhl
ZERCLCAiSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UgLSAlcyIsIG5hbWUudXRmOCgpLmRhdGEo
KSk7CisKKyAgICBpZiAobmFtZS5pc051bGwoKSkgeworICAgICAgICBlYyA9IFR5cGVFcnJvcjsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGlmIChzaG91bGRUaHJv
d1NlY3VyaXR5RXhjZXB0aW9uKGNvbnRleHQpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJS
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBBU1NFUlQoY29udGV4dC5z
ZWN1cml0eU9yaWdpbigpKTsKKyAgICBBU1NFUlQoY29udGV4dC50b3BPcmlnaW4oKSk7CisgICAg
SURCRGF0YWJhc2VJZGVudGlmaWVyIGRhdGFiYXNlSWRlbnRpZmllcihuYW1lLCAqY29udGV4dC5z
ZWN1cml0eU9yaWdpbigpLCAqY29udGV4dC50b3BPcmlnaW4oKSk7CisgICAgaWYgKCFkYXRhYmFz
ZUlkZW50aWZpZXIuaXNWYWxpZCgpKSB7CisgICAgICAgIGVjID0gVHlwZUVycm9yOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3QgPSBJREJPcGVuREJS
ZXF1ZXN0OjpjcmVhdGVEZWxldGVSZXF1ZXN0KG1fY29ubmVjdGlvblRvU2VydmVyLmdldCgpLCBj
b250ZXh0LCBkYXRhYmFzZUlkZW50aWZpZXIpOworICAgIG1fY29ubmVjdGlvblRvU2VydmVyLT5k
ZWxldGVEYXRhYmFzZShyZXF1ZXN0LmdldCgpKTsKKworICAgIHJldHVybiBhZG9wdFJlZigmcmVx
dWVzdC5sZWFrUmVmKCkpOworfQorCitzaG9ydCBJREJGYWN0b3J5OjpjbXAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0
VmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmRWYWx1ZSwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0
YXRlKCZjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5PiBmaXJzdCA9IHNjcmlwdFZhbHVlVG9J
REJLZXkoJnJlcXVlc3RTdGF0ZSwgZmlyc3RWYWx1ZSk7CisgICAgUmVmUHRyPElEQktleT4gc2Vj
b25kID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBzZWNvbmRWYWx1ZSk7CisK
KyAgICBBU1NFUlQoZmlyc3QpOworICAgIEFTU0VSVChzZWNvbmQpOworCisgICAgaWYgKCFmaXJz
dC0+aXNWYWxpZCgpIHx8ICFzZWNvbmQtPmlzVmFsaWQoKSkgeworICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NtcCcgb24gJ0lEQkZhY3RvcnknOiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PihmaXJzdC0+Y29tcGFyZShzZWNvbmQu
Z2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCmluZGV4IDQ0YTVjYzIuLmY1YTFlNzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmgKQEAgLTIz
LDQ4ICsyMywzOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgSURCRmFjdG9yeV9oCi0jZGVmaW5lIElEQkZhY3RvcnlfaAotCi0jaW5jbHVkZSAi
SURCT3BlbkRCUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJLZXk7Ci1jbGFz
cyBJREJLZXlSYW5nZTsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0KLXN0cnVjdCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2U7CisjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVy
LmgiCisjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgorI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3Qu
aCIKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSURCRmFjdG9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5JREJGYWN0b3J5KCkgeyB9CisgICAgc3RhdGljIFJlZjxJREJGYWN0
b3J5PiBjcmVhdGUoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImKTsKIAogICAgIC8v
IEZJWE1FOiBnZXREYXRhYmFzZU5hbWVzIGlzIG5vIGxvbmdlciBhIHdlYi1mYWNpbmcgQVBJLCBh
bmQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBJREJGYWN0b3J5LgogICAgIC8vIFRoZSBXZWIgSW5z
cGVjdG9yIGN1cnJlbnRseSB1c2VzIHRoaXMgdG8gZW51bWVyYXRlIHRoZSBsaXN0IG9mIGRhdGFi
YXNlcywgYnV0IGlzIG1vcmUgY29tcGxpY2F0ZWQgYXMgYSByZXN1bHQuCiAgICAgLy8gV2Ugc2hv
dWxkIHByb3ZpZGUgYSBzaW1wbGVyIEFQSSB0byB0aGUgV2ViIEluc3BlY3RvciB0aGVuIHJlbW92
ZSBnZXREYXRhYmFzZU5hbWVzLgotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGdldERh
dGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHZpcnR1YWwgUmVmUHRyPElEQk9wZW5E
QlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJPcGVuREJSZXF1
ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUsIHVu
c2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1
YWwgUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAg
UmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFJlZlB0cjxJREJPcGVuREJS
ZXF1ZXN0PiBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIG5hbWUs
IHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJik7CisgICAgUmVmUHRy
PElEQk9wZW5EQlJlcXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHZpcnR1YWwgc2hv
cnQgY21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgZmlyc3QsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmQsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKKyAgICBzaG9ydCBjbXAoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdCwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNlY29uZCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7
CiAKLXByb3RlY3RlZDoKLSAgICBJREJGYWN0b3J5KCk7Citwcml2YXRlOgorICAgIElEQkZhY3Rv
cnkoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImKTsKKyAgICAKKyAgICBSZWZQdHI8
SURCT3BlbkRCUmVxdWVzdD4gb3BlbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBj
b25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25D
b2RlJik7CisgICAgCisgICAgUmVmPElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyPiBt
X2Nvbm5lY3Rpb25Ub1NlcnZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmCi0KLSNlbmRpZiAvLyBJREJGYWN0b3J5X2gKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNw
cAppbmRleCBhMmI0ZTJiLi5jNjQ3MzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXguY3BwCkBAIC0yOCwxMCArMjgsMzEzIEBACiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgorI2luY2x1
ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1
ZGUgIklEQktleVJhbmdlRGF0YS5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5j
bHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkluZGV4OjpJREJJbmRl
eCgpCitJREJJbmRleDo6SURCSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUpCisg
ICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCisgICAgLCBtX2luZm8oaW5mbykKKyAgICAs
IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCit7CisgICAgc3VzcGVuZElmTmVlZGVkKCk7Cit9
CisKK0lEQkluZGV4Ojp+SURCSW5kZXgoKQoreworfQorCitjb25zdCBjaGFyKiBJREJJbmRleDo6
YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJJREJJbmRleCI7Cit9
CisKK2Jvb2wgSURCSW5kZXg6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJREJJbmRleDo6aGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNh
Y3Rpb24oKS5pc0ZpbmlzaGVkKCk7Cit9CisKK2NvbnN0IFN0cmluZyYgSURCSW5kZXg6Om5hbWUo
KSBjb25zdAoreworICAgIHJldHVybiBtX2luZm8ubmFtZSgpOworfQorCitSZWZQdHI8SURCT2Jq
ZWN0U3RvcmU+IElEQkluZGV4OjpvYmplY3RTdG9yZSgpCit7CisgICAgcmV0dXJuICZtX29iamVj
dFN0b3JlOworfQorCitSZWZQdHI8SURCQW55PiBJREJJbmRleDo6a2V5UGF0aEFueSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIElEQkFueTo6Y3JlYXRlKG1faW5mby5rZXlQYXRoKCkpOworfQorCitj
b25zdCBJREJLZXlQYXRoJiBJREJJbmRleDo6a2V5UGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW5mby5rZXlQYXRoKCk7Cit9CisKK2Jvb2wgSURCSW5kZXg6OnVuaXF1ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1faW5mby51bmlxdWUoKTsKK30KKworYm9vbCBJREJJbmRleDo6bXVsdGlF
bnRyeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5mby5tdWx0aUVudHJ5KCk7Cit9CisKK1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9u
U3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVk
REIsICJJREJJbmRleDo6b3BlbkN1cnNvciIpOworCisgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29i
amVjdFN0b3JlLmlzRGVsZXRlZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUg
aW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIW1fb2JqZWN0U3RvcmUubW9kZXJuVHJh
bnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4
JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBJREJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywg
ZWMuY29kZSk7CisgICAgaWYgKGVjLmNvZGUpIHsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRo
ZSBkaXJlY3Rpb24gcHJvdmlkZWQgKCdpbnZhbGlkLWRpcmVjdGlvbicpIGlzIG5vdCBvbmUgb2Yg
J25leHQnLCAnbmV4dHVuaXF1ZScsICdwcmV2Jywgb3IgJ3ByZXZ1bmlxdWUnLiIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBJREJLZXlSYW5nZURhdGEgcmFuZ2VEYXRh
ID0gcmFuZ2U7CisgICAgaWYgKHJhbmdlRGF0YS5sb3dlcktleS5pc051bGwoKSkKKyAgICAgICAg
cmFuZ2VEYXRhLmxvd2VyS2V5ID0gSURCS2V5RGF0YTo6bWluaW11bSgpOworICAgIGlmIChyYW5n
ZURhdGEudXBwZXJLZXkuaXNOdWxsKCkpCisgICAgICAgIHJhbmdlRGF0YS51cHBlcktleSA9IElE
QktleURhdGE6Om1heGltdW0oKTsKKworICAgIGF1dG8gaW5mbyA9IElEQkN1cnNvckluZm86Omlu
ZGV4Q3Vyc29yKG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9y
ZS5pbmZvKCkuaWRlbnRpZmllcigpLCBtX2luZm8uaWRlbnRpZmllcigpLCByYW5nZURhdGEsIGRp
cmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlBbmRWYWx1ZSk7CisgICAgcmV0dXJu
IG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5yZXF1ZXN0T3BlbkN1cnNvcihjb250
ZXh0LCAqdGhpcywgaW5mbyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6Om9wZW5D
dXJzb3IiKTsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6
Om9ubHkoY29udGV4dCwga2V5LCBlYy5jb2RlKTsKKyAgICBpZiAoZWMuY29kZSkgeworICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNv
cicgb24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNv
bnRleHQsIGtleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24sIGVjKTsKK30KKworUmVmUHRyPElEQlJl
cXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJJ
bmRleDo6Y291bnQiKTsKKworICAgIHJldHVybiBkb0NvdW50KGNvbnRleHQsIElEQktleVJhbmdl
RGF0YTo6YWxsS2V5cygpLCBlYyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6
Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdl
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJJbmRleDo6Y291bnQiKTsKKworICAgIHJldHVybiBkb0NvdW50KGNvbnRleHQsIHJhbmdlID8g
SURCS2V5UmFuZ2VEYXRhKHJhbmdlKSA6IElEQktleVJhbmdlRGF0YTo6YWxsS2V5cygpLCBlYyk7
Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCSW5k
ZXg6OmNvdW50Iik7CisKKyAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0
KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1
ZXN0U3RhdGUsIGtleSk7CisgICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5
VHlwZTo6SW52YWxpZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCSW5kZXgnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZh
bGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IGRvQ291bnQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVjKTsKK30K
KworUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0NvdW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3Jl
LmlzRGVsZXRlZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SW52YWxpZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBv
YmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKCFyYW5nZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGF1dG8mIHRyYW5zYWN0aW9uID0gbV9vYmplY3RTdG9yZS5tb2Rlcm5U
cmFuc2FjdGlvbigpOworICAgIGlmICghdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkgeworICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJv
cjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J2NvdW50JyBvbiAnSURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmlu
aXNoZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiB0
cmFuc2FjdGlvbi5yZXF1ZXN0Q291bnQoY29udGV4dCwgKnRoaXMsIHJhbmdlKTsKK30KKworUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b25TdHJpbmcsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4
ZWREQiwgIklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yIik7CisKKyAgICBpZiAobV9kZWxldGVkIHx8
IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5LZXlDdXJzb3InIG9uICdJREJJbmRl
eCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV9vYmplY3RTdG9yZS5t
b2Rlcm5UcmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuS2V5Q3Vyc29yJyBv
biAnSURCSW5kZXgnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0
aW9uU3RyaW5nLCBlYy5jb2RlKTsKKyAgICBpZiAoZWMuY29kZSkgeworICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbktleUN1cnNvcicgb24g
J0lEQkluZGV4JzogVGhlIGRpcmVjdGlvbiBwcm92aWRlZCAoJ2ludmFsaWQtZGlyZWN0aW9uJykg
aXMgbm90IG9uZSBvZiAnbmV4dCcsICduZXh0dW5pcXVlJywgJ3ByZXYnLCBvciAncHJldnVuaXF1
ZScuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gaW5mbyA9
IElEQkN1cnNvckluZm86OmluZGV4Q3Vyc29yKG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rp
b24oKSwgbV9vYmplY3RTdG9yZS5pbmZvKCkuaWRlbnRpZmllcigpLCBtX2luZm8uaWRlbnRpZmll
cigpLCByYW5nZSwgZGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkpOwor
ICAgIHJldHVybiBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkucmVxdWVzdE9wZW5D
dXJzb3IoY29udGV4dCwgKnRoaXMsIGluZm8pOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURC
SW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24s
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QkluZGV4OjpvcGVuS2V5Q3Vyc29yIik7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMuY29kZSk7CisgICAgaWYgKGVj
LmNvZGUpIHsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ29wZW5LZXlDdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90
IGEgdmFsaWQga2V5LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0
dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbiwgZWMp
OworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXQiKTsKKworICAg
IHJldHVybiBkb0dldChjb250ZXh0LCBJREJLZXlSYW5nZURhdGEocmFuZ2UpLCBlYyk7Cit9CisK
K1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXQi
KTsKKworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOworICAgIFJl
ZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwg
a2V5KTsKKyAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZh
bGlkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9y
OworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
Z2V0JyBvbiAnSURCSW5kZXgnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGRvR2V0KGNvbnRl
eHQsIElEQktleVJhbmdlRGF0YShpZGJLZXkuZ2V0KCkpLCBlYyk7Cit9CisKK1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJJbmRleDo6ZG9HZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKK3sKKyAgICBpZiAobV9kZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpIHsK
KyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J2dldCcgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJl
ZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYg
KHJhbmdlLmlzTnVsbCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byYg
dHJhbnNhY3Rpb24gPSBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCk7CisgICAgaWYg
KCF0cmFuc2FjdGlvbi5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCSW5kZXgnOiBU
aGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiB0cmFuc2FjdGlvbi5yZXF1ZXN0R2V0VmFs
dWUoY29udGV4dCwgKnRoaXMsIHJhbmdlKTsKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQklu
ZGV4OjpnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2Uq
IHJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVk
REIsICJJREJJbmRleDo6Z2V0S2V5Iik7CisKKyAgICByZXR1cm4gZG9HZXRLZXkoY29udGV4dCwg
SURCS2V5UmFuZ2VEYXRhKHJhbmdlKSwgZWMpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURC
SW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Z2V0S2V5Iik7CisKKyAgICBET01SZXF1
ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJL
ZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAgaWYgKCFp
ZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgeworICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQklu
ZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBkb0dldEtleShjb250ZXh0LCBJREJLZXlS
YW5nZURhdGEoaWRiS2V5LmdldCgpKSwgZWMpOworfQorCitSZWZQdHI8SURCUmVxdWVzdD4gSURC
SW5kZXg6OmRvR2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7Cisg
ICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKSB7CisgICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CisgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRLZXkn
IG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRl
bGV0ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChyYW5n
ZS5pc051bGwpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRh
RXJyb3I7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8mIHRyYW5z
YWN0aW9uID0gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpOworICAgIGlmICghdHJh
bnNhY3Rpb24uaXNBY3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldEtleScgb24gJ0lEQkluZGV4JzogVGhl
IHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVxdWVzdEdldEtleShj
b250ZXh0LCAqdGhpcywgcmFuZ2UpOworfQorCit2b2lkIElEQkluZGV4OjptYXJrQXNEZWxldGVk
KCkKK3sKKyAgICBBU1NFUlQoIW1fZGVsZXRlZCk7CisgICAgbV9kZWxldGVkID0gdHJ1ZTsKK30K
Kwordm9pZCBJREJJbmRleDo6cmVmKCkKK3sKKyAgICBtX29iamVjdFN0b3JlLnJlZigpOworfQor
Cit2b2lkIElEQkluZGV4OjpkZXJlZigpCiB7CisgICAgbV9vYmplY3RTdG9yZS5kZXJlZigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXguaAppbmRleCA4NTEwZDRjLi40NDhkNzhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKQEAgLTIzLDczICsyMyw5MCBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCSW5kZXhf
aAotI2RlZmluZSBJREJJbmRleF9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIklEQkN1cnNv
ci5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgot
I2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKLSNp
bmNsdWRlICJJREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCi0jaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNp
bmNsdWRlICJJREJJbmRleC5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSURCSW5kZXhJbmZvLmgiCisjaW5jbHVk
ZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCQW55OworY2xhc3MgSURCS2V5UmFuZ2U7CiBj
bGFzcyBJREJPYmplY3RTdG9yZTsKK3N0cnVjdCBJREJLZXlSYW5nZURhdGE7CiAKLWNsYXNzIElE
QkluZGV4IHsKK2NsYXNzIElEQkluZGV4IDogcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB+SURCSW5kZXgoKSB7IH0KKyAgICBJREJJbmRleChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgSURCSW5kZXhJbmZvJiwgSURCT2JqZWN0U3RvcmUmKTsKKwor
ICAgIHZpcnR1YWwgfklEQkluZGV4KCk7CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElETAotICAg
IHZpcnR1YWwgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSgpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0
cjxJREJBbnk+IGtleVBhdGhBbnkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1bmlxdWUoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIG11bHRpRW50cnkoKSBjb25zdCA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5
UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikg
PSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1
ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJikgPSAwOwotCi0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gY291
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0g
MDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0g
ICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlD
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURC
UmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFu
Z2UqLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikg
PSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZp
cnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JikgPSAwOwotCi0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc01vZGVybigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBXZSB1c2Ugb3VyIG93biByZWYvZGVyZWYg
ZnVuY3Rpb24gYmVjYXVzZSBMZWdhY3kgSURCIGFuZCBNb2Rlcm4gSURCIGhhdmUgdmVyeSBkaWZm
ZXJlbnQKLSAgICAvLyBsaWZldGltZSBtYW5hZ2VtZW50IG9mIHRoZWlyIGluZGV4ZXMuCi0gICAg
Ly8gVGhpcyB3aWxsIGdvIGF3YXkgb25jZSBMZWdhY3kgSURCIGlzIGRyb3BwZWQuCi0gICAgdmly
dHVhbCB2b2lkIHJlZigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVyZWYoKSA9IDA7Ci0KLXBy
b3RlY3RlZDoKLSAgICBJREJJbmRleCgpOworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
OworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoKTsKKyAgICBSZWZQdHI8
SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3Q7CisgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCgpIGNvbnN0OworICAgIGJvb2wgdW5pcXVlKCkgY29uc3Q7CisgICAgYm9vbCBtdWx0aUVudHJ5
KCkgY29uc3Q7CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSB7IHJl
dHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0
ciksIGVjKTsgfQorICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwg
SURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQorICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIHsg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQo
KSwgZWMpOyB9CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29y
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
a2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7
CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3Vu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlS
YW5nZSo+KG51bGxwdHIpLCBlYyk7IH0KKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFu
Z2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3Io
Y29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmIGVjKSB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleSwg
SURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQorICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIGNv
bnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gb3BlbktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworCisgICAgUmVmUHRyPElEQlJlcXVlc3Q+
IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0S2V5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
OworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpOworCisgICAgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4g
bV9pbmZvOyB9CisKKyAgICBJREJPYmplY3RTdG9yZSYgbW9kZXJuT2JqZWN0U3RvcmUoKSB7IHJl
dHVybiBtX29iamVjdFN0b3JlOyB9CisKKyAgICB2b2lkIG1hcmtBc0RlbGV0ZWQoKTsKKyAgICBi
b29sIGlzRGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQorCisgICAgdm9pZCBy
ZWYoKTsKKyAgICB2b2lkIGRlcmVmKCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IGRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBk
b0dldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGRvR2V0S2V5
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmKTsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIGNvbnN0
IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdDsKKyAgICBib29sIGNhblN1c3BlbmRG
b3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdDsKKyAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSgpIGNvbnN0OworCisgICAgSURCSW5kZXhJbmZvIG1faW5mbzsKKworICAgIGJvb2wgbV9kZWxl
dGVkIHsgZmFsc2UgfTsKKworICAgIC8vIElEQkluZGV4IG9iamVjdHMgYXJlIGFsd2F5cyBvd25l
ZCBieSB0aGVpciByZWZlcmVuY2luZyBJREJPYmplY3RTdG9yZS4KKyAgICAvLyBJbmRleGVzIHdp
bGwgbmV2ZXIgb3V0bGl2ZSBPYmplY3RTdG9yZXMgc28gaXRzIG9rYXkgdG8ga2VlcCBhIHJhdyBD
KysgcmVmZXJlbmNlIGhlcmUuCisgICAgSURCT2JqZWN0U3RvcmUmIG1fb2JqZWN0U3RvcmU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgotCi0jZW5kaWYgLy8gSURCSW5k
ZXhfaAorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IDRhMDY0
MTUuLjViMDAzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTI4LDEwICsyOCw2MzIgQEAKIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCisjaW5jbHVk
ZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRXJyb3IuaCIKKyNpbmNsdWRl
ICJJREJJbmRleC5oIgorI2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleVJhbmdl
RGF0YS5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bi5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKCkK
K1JlZjxJREJPYmplY3RTdG9yZT4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8sIElEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJP
YmplY3RTdG9yZShjb250ZXh0LCBpbmZvLCB0cmFuc2FjdGlvbikpOworfQorCitJREJPYmplY3RT
dG9yZTo6SURCT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24p
CisgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCisgICAgLCBtX2luZm8oaW5mbykKKyAg
ICAsIG1fb3JpZ2luYWxJbmZvKGluZm8pCisgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KQoreworICAgIHN1c3BlbmRJZk5lZWRlZCgpOworfQorCitJREJPYmplY3RTdG9yZTo6fklEQk9i
amVjdFN0b3JlKCkKK3sKK30KKworY29uc3QgY2hhciogSURCT2JqZWN0U3RvcmU6OmFjdGl2ZURP
TU9iamVjdE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiSURCT2JqZWN0U3RvcmUiOworfQor
Citib29sIElEQk9iamVjdFN0b3JlOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSURCT2JqZWN0U3RvcmU6Omhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3RyYW5zYWN0aW9uLT5p
c0ZpbmlzaGVkKCk7Cit9CisKK2NvbnN0IFN0cmluZyBJREJPYmplY3RTdG9yZTo6bmFtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faW5mby5uYW1lKCk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJ
REJBbnk+IElEQk9iamVjdFN0b3JlOjprZXlQYXRoQW55KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
SURCQW55OjpjcmVhdGUobV9pbmZvLmtleVBhdGgoKSk7Cit9CisKK2NvbnN0IElEQktleVBhdGgg
SURCT2JqZWN0U3RvcmU6OmtleVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX2luZm8ua2V5
UGF0aCgpOworfQorCitSZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3RvcmU6OmluZGV4
TmFtZXMoKSBjb25zdAoreworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzID0g
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CisgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLmlu
ZGV4TmFtZXMoKSkKKyAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKG5hbWUpOworICAgIGluZGV4
TmFtZXMtPnNvcnQoKTsKKworICAgIHJldHVybiBpbmRleE5hbWVzOworfQorCitSZWZQdHI8V2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb24+IElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlvbigpCit7Cisg
ICAgcmV0dXJuICZtX3RyYW5zYWN0aW9uLmdldCgpOworfQorCitib29sIElEQk9iamVjdFN0b3Jl
OjphdXRvSW5jcmVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmZvLmF1dG9JbmNyZW1l
bnQoKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCit7CisgICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOworfQorCitSZWZQdHI8V2ViQ29yZTo6
SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQoreworICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJ
REJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBr
ZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0
aW9uU3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRl
eGVkREIsICJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOworCisgICAgaWYgKG1fZGVsZXRl
ZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0
ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBv
biAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNo
ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEluZGV4ZWREQjo6
Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24o
ZGlyZWN0aW9uU3RyaW5nLCBlYy5jb2RlKTsKKyAgICBpZiAoZWMuY29kZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGluZm8gPSBJREJDdXJzb3JJbmZvOjpvYmplY3RTdG9y
ZUN1cnNvcihtX3RyYW5zYWN0aW9uLmdldCgpLCBtX2luZm8uaWRlbnRpZmllcigpLCByYW5nZSwg
ZGlyZWN0aW9uKTsKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJhbnNhY3Rpb24t
PnJlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsICp0aGlzLCBpbmZvKTsKKyAgICByZXR1cm4gV1RG
TW92ZShyZXF1ZXN0KTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjLmNvZGUpOworICAg
IGlmIChlYy5jb2RlKSB7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgcGFyYW1l
dGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbiwg
ZWMpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Omdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0Iik7CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rp
b24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxp
dGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0
cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0
U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUo
JmNvbnRleHQpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJL
ZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUo
KSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgcGFyYW1ldGVy
IGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0R2V0
UmVjb3JkKGNvbnRleHQsICp0aGlzLCBpZGJLZXkuZ2V0KCkpOworICAgIHJldHVybiBXVEZNb3Zl
KHJlcXVlc3QpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5
UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWRE
QiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNB
Y3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5z
YWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0
IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIElEQktleVJhbmdlRGF0YSBrZXlSYW5nZURhdGEoa2V5UmFuZ2UpOworICAgIGlm
ICgha2V5UmFuZ2VEYXRhLmlzVmFsaWQoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkRhdGFFcnJvcjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0R2V0
UmVjb3JkKGNvbnRleHQsICp0aGlzLCBrZXlSYW5nZURhdGEpOworICAgIHJldHVybiBXVEZNb3Zl
KHJlcXVlc3QpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICByZXR1cm4gcHV0T3JBZGQoc3RhdGUsIHZh
bHVlLCBudWxscHRyLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZTo6Tm9PdmVy
d3JpdGUsIElubGluZUtleUNoZWNrOjpQZXJmb3JtLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRlJiBleGVjU3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJiBlYykKK3sKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXk7CisgICAgaWYgKCFr
ZXkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShl
eGVjU3RhdGUsIGtleSk7CisgICAgcmV0dXJuIHB1dE9yQWRkKGV4ZWNTdGF0ZSwgdmFsdWUsIGlk
YktleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3ZlcndyaXRlLCBJ
bmxpbmVLZXlDaGVjazo6UGVyZm9ybSwgZWMpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCit7CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5OworICAgIGlmICgha2V5LmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgIGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoZXhlY1N0YXRl
LCBrZXkpOworICAgIHJldHVybiBwdXRPckFkZChleGVjU3RhdGUsIHZhbHVlLCBpZGJLZXksIElu
ZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpPdmVyd3JpdGUsIElubGluZUtleUNo
ZWNrOjpQZXJmb3JtLCBlYyk7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIHJldHVybiBwdXRPckFkZChz
dGF0ZSwgdmFsdWUsIG51bGxwdHIsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2Rl
OjpPdmVyd3JpdGUsIElubGluZUtleUNoZWNrOjpQZXJmb3JtLCBlYyk7Cit9CisKK1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0Rm9yQ3Vyc29yVXBkYXRlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIHJldHVybiBwdXRPckFkZChzdGF0ZSwgdmFs
dWUsIHNjcmlwdFZhbHVlVG9JREJLZXkoc3RhdGUsIGtleSksIEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlOjpPdmVyd3JpdGVGb3JDdXJzb3IsIElubGluZUtleUNoZWNrOjpEb05v
dFBlcmZvcm0sIGVjKTsKK30KKworUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpw
dXRPckFkZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgUmVmUHRy
PElEQktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3Jp
dGVNb2RlLCBJbmxpbmVLZXlDaGVjayBpbmxpbmVLZXlDaGVjaywgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OnB1dE9y
QWRkIik7CisKKyAgICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVyYWwgSURCT2JqZWN0U3RvcmUg
bWV0aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVkIGV4Y2VwdGlvbnMgc2hvdWxk
IGZpcmUgYmVmb3JlCisgICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3IgYW4gb2JqZWN0IHN0b3JlIGJl
aW5nIGRlbGV0ZWQuCisgICAgLy8gSG93ZXZlciwgYSBoYW5kZnVsIG9mIFczQyBJREIgdGVzdHMg
ZXhwZWN0IHRoZSBkZWxldGVkIGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgdHJhbnNhY3Rpb24g
aW5hY3RpdmUgZXhjZXB0aW9uIGFsc28gYXBwbGllcy4KKyAgICAvLyBBZGRpdGlvbmFsbHksIENo
cm9tZSBhbmQgRWRnZSBhZ3JlZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2VzIExlZ2FjeSBJREIgaW4g
V2ViS2l0LgorICAgIC8vIFVudGlsIHRoaXMgaXMgc29ydGVkIG91dCwgd2UnbGwgYWdyZWUgd2l0
aCB0aGUgdGVzdCBhbmQgdGhlIG1ham9yaXR5IHNoYXJlIGJyb3dzZXJzLgorICAgIGlmIChtX2Rl
bGV0ZWQpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlk
U3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIG9iamVjdCBzdG9yZSBoYXMg
YmVlbiBkZWxldGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2Jq
ZWN0U3RvcmU6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlz
UmVhZE9ubHkoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJl
YWRPbmx5RXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRoZSB0cmFuc2FjdGlvbiBpcyBy
ZWFkLW9ubHkuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOworICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAvLyBDbGVhciB0aGUgRE9NIGV4Y2Vw
dGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0YXJnZXRlZCBl
eGNlcHRpb24uCisgICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICAgICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKKyAgICAgICAgZWMu
bWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJP
YmplY3RTdG9yZTogQW4gb2JqZWN0IGNvdWxkIG5vdCBiZSBjbG9uZWQuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmhhc0Jsb2JV
UkxzKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9y
dAorICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFDbG9uZUVycm9y
OworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVj
b3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBCbG9iVVJMcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQu
Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChrZXkgJiYgIWtl
eS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
c3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBh
IHZhbGlkIGtleS4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9v
bCB1c2VzSW5saW5lS2V5cyA9ICFtX2luZm8ua2V5UGF0aCgpLmlzTnVsbCgpOworICAgIGJvb2wg
dXNlc0tleUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKKyAgICBpZiAodXNlc0lubGluZUtl
eXMgJiYgaW5saW5lS2V5Q2hlY2sgPT0gSW5saW5lS2V5Q2hlY2s6OlBlcmZvcm0pIHsKKyAgICAg
ICAgaWYgKGtleSkgeworICAgICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEYXRhRXJyb3I7CisgICAgICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBUaGUgb2JqZWN0IHN0b3Jl
IHVzZXMgaW4tbGluZSBrZXlzIGFuZCB0aGUga2V5IHBhcmFtZXRlciB3YXMgcHJvdmlkZWQuIik7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0
cjxJREJLZXk+IGtleVBhdGhLZXkgPSBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoc3RhdGUsIHZhbHVlLCBtX2luZm8ua2V5UGF0aCgpKTsKKyAgICAgICAgaWYgKGtl
eVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CisgICAgICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVj
dFN0b3JlOiBFdmFsdWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUncyBrZXkgcGF0aCB5aWVsZGVkIGEg
dmFsdWUgdGhhdCBpcyBub3QgYSB2YWxpZCBrZXkuIik7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgha2V5UGF0aEtleSkgeworICAgICAgICAg
ICAgaWYgKHVzZXNLZXlHZW5lcmF0b3IpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbkluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShzdGF0ZSwgdmFsdWUsIG1faW5mby5rZXlQYXRoKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0
YUVycm9yOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICAgICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0
U3RvcmU6IEV2YWx1YXRpbmcgdGhlIG9iamVjdCBzdG9yZSdzIGtleSBwYXRoIGRpZCBub3QgeWll
bGQgYSB2YWx1ZS4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXlQYXRoS2V5KSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWtleSk7CisgICAgICAgICAgICBrZXkgPSBrZXlQYXRoS2V5OworICAgICAgICB9
CisgICAgfSBlbHNlIGlmICghdXNlc0tleUdlbmVyYXRvciAmJiAha2V5KSB7CisgICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVj
dFN0b3JlOiBUaGUgb2JqZWN0IHN0b3JlIHVzZXMgb3V0LW9mLWxpbmUga2V5cyBhbmQgaGFzIG5v
IGtleSBnZW5lcmF0b3IgYW5kIHRoZSBrZXkgcGFyYW1ldGVyIHdhcyBub3QgcHJvdmlkZWQuIik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gY29udGV4dCA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSk7CisgICAgaWYgKCFjb250
ZXh0KSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWY8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RQdXRPckFkZCgqY29udGV4dCwgKnRo
aXMsIGtleS5nZXQoKSwgKnNlcmlhbGl6ZWRWYWx1ZSwgb3ZlcndyaXRlTW9kZSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKHJlcXVlc3QubGVha1JlZigpKTsKK30KKworUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYgZWMpCit7CisgICAgcmV0dXJuIGRvRGVsZXRlKGNvbnRleHQsIGtleVJhbmdlLCBl
Yyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZG9EZWxldGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJPYmpl
Y3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24iKTsKKworICAgIC8vIFRoZSBJREIgc3BlYyBmb3Igc2V2
ZXJhbCBJREJPYmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRyYW5zYWN0aW9uIHJlbGF0
ZWQgZXhjZXB0aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKKyAgICAvLyB0aGUgZXhjZXB0aW9uIGZv
ciBhbiBvYmplY3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4KKyAgICAvLyBIb3dldmVyLCBhIGhhbmRm
dWwgb2YgVzNDIElEQiB0ZXN0cyBleHBlY3QgdGhlIGRlbGV0ZWQgZXhjZXB0aW9uIGV2ZW4gdGhv
dWdoIHRoZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZSBleGNlcHRpb24gYWxzbyBhcHBsaWVzLgorICAg
IC8vIEFkZGl0aW9uYWxseSwgQ2hyb21lIGFuZCBFZGdlIGFncmVlIHdpdGggdGhlIHRlc3QsIGFz
IGRvZXMgTGVnYWN5IElEQiBpbiBXZWJLaXQuCisgICAgLy8gVW50aWwgdGhpcyBpcyBzb3J0ZWQg
b3V0LCB3ZSdsbCBhZ3JlZSB3aXRoIHRoZSB0ZXN0IGFuZCB0aGUgbWFqb3JpdHkgc2hhcmUgYnJv
d3NlcnMuCisgICAgaWYgKG1fZGVsZXRlZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCT2JqZWN0U3RvcmUn
OiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewor
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGlu
YWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UmVhZE9ubHlFcnJvcjsKKyAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVj
dFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIHJlYWQtb25seS4iKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgSURCS2V5UmFuZ2VEYXRhIGtleVJhbmdlRGF0YShrZXlS
YW5nZSk7CisgICAgaWYgKCFrZXlSYW5nZURhdGEuaXNWYWxpZCgpKSB7CisgICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCT2JqZWN0
U3RvcmUnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleSByYW5nZS4iKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0RGVsZXRlUmVjb3JkKGNvbnRleHQsICp0aGlzLCBrZXlS
YW5nZURhdGEpOworICAgIHJldHVybiBXVEZNb3ZlKHJlcXVlc3QpOworfQorCitSZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBr
ZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgcmV0dXJuIG1vZGVybkRl
bGV0ZShjb250ZXh0LCBrZXkuanNWYWx1ZSgpLCBlYyk7Cit9CisKK1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6bW9kZXJuRGVsZXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7
CisgICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7CisgICAgUmVmUHRy
PElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkp
OworICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQp
IHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Cisg
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxl
dGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5
LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gZG9EZWxl
dGUoY29udGV4dCwgJklEQktleVJhbmdlOjpjcmVhdGUoaWRiS2V5LmdldCgpKS5nZXQoKSwgZWMp
OworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNsZWFy
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjbGVhciIpOwor
CisgICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZlcmFsIElEQk9iamVjdFN0b3JlIG1ldGhvZHMg
c3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBleGNlcHRpb25zIHNob3VsZCBmaXJlIGJl
Zm9yZQorICAgIC8vIHRoZSBleGNlcHRpb24gZm9yIGFuIG9iamVjdCBzdG9yZSBiZWluZyBkZWxl
dGVkLgorICAgIC8vIEhvd2V2ZXIsIGEgaGFuZGZ1bCBvZiBXM0MgSURCIHRlc3RzIGV4cGVjdCB0
aGUgZGVsZXRlZCBleGNlcHRpb24gZXZlbiB0aG91Z2ggdGhlIHRyYW5zYWN0aW9uIGluYWN0aXZl
IGV4Y2VwdGlvbiBhbHNvIGFwcGxpZXMuCisgICAgLy8gQWRkaXRpb25hbGx5LCBDaHJvbWUgYW5k
IEVkZ2UgYWdyZWUgd2l0aCB0aGUgdGVzdCwgYXMgZG9lcyBMZWdhY3kgSURCIGluIFdlYktpdC4K
KyAgICAvLyBVbnRpbCB0aGlzIGlzIHNvcnRlZCBvdXQsIHdlJ2xsIGFncmVlIHdpdGggdGhlIHRl
c3QgYW5kIHRoZSBtYWpvcml0eSBzaGFyZSBicm93c2Vycy4KKyAgICBpZiAobV9kZWxldGVkKSB7
CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdjbGVhcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBk
ZWxldGVkLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjbGVhcicgb24gJ0lEQk9iamVjdFN0
b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFk
T25seSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UmVhZE9u
bHlFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2NsZWFyJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgcmVh
ZC1vbmx5LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWY8SURC
UmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RDbGVhck9iamVjdFN0b3Jl
KGNvbnRleHQsICp0aGlzKTsKKyAgICByZXR1cm4gYWRvcHRSZWYocmVxdWVzdC5sZWFrUmVmKCkp
OworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJ
bmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RT
dG9yZTo6Y3JlYXRlSW5kZXggJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKG1f
ZGVsZXRlZCkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFs
aWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQg
dG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBvYmplY3Qg
c3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAg
ICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRl
SW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBh
IHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICgha2V5UGF0aC5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpTeW50YXhF
cnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0aCBhcmd1bWVu
dCBjb250YWlucyBhbiBpbnZhbGlkIGtleSBwYXRoLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBpZiAobmFtZS5pc051bGwoKSkgeworICAgICAgICBlYy5jb2RlID0g
VHlwZUVycm9yOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9p
bmZvLmhhc0luZGV4KG5hbWUpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q29uc3RyYWludEVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IEFu
IGluZGV4IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSW5k
ZXhlZERCOjpLZXlQYXRoVHlwZTo6QXJyYXkgJiYgbXVsdGlFbnRyeSkgeworICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRBY2Nlc3NFcnJvcjsKKyAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4
JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0aCBhcmd1bWVudCB3YXMgYW4gYXJyYXkg
YW5kIHRoZSBtdWx0aUVudHJ5IG9wdGlvbiBpcyB0cnVlLiIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICAvLyBJbnN0YWxsIHRoZSBuZXcgSW5kZXggaW50byB0aGUgT2Jq
ZWN0U3RvcmUncyBpbmZvLgorICAgIElEQkluZGV4SW5mbyBpbmZvID0gbV9pbmZvLmNyZWF0ZU5l
d0luZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7CisgICAgbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5kaWRDcmVhdGVJbmRleEluZm8oaW5mbyk7CisKKyAgICAvLyBDcmVh
dGUgdGhlIGFjdHVhbCBJREJPYmplY3RTdG9yZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiwgd2hpY2gg
YWxzbyBzY2hlZHVsZXMgdGhlIG9wZXJhdGlvbiBzZXJ2ZXIgc2lkZS4KKyAgICBhdXRvIGluZGV4
ID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSW5kZXgoKnRoaXMsIGluZm8pOworICAgIFJlZlB0cjxJ
REJJbmRleD4gcmVmSW5kZXggPSBpbmRleC5nZXQoKTsKKworICAgIExvY2tlcjxMb2NrPiBsb2Nr
ZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKKyAgICBtX3JlZmVyZW5jZWRJbmRleGVzLnNldChu
YW1lLCBXVEZNb3ZlKGluZGV4KSk7CisKKyAgICByZXR1cm4gV1RGTW92ZShyZWZJbmRleCk7Cit9
CisKK1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0
IFN0cmluZyYgaW5kZXhOYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6aW5kZXgiKTsKKworICAgIGlmICghc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlm
IChtX2RlbGV0ZWQpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0
b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkgeworICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwor
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5k
ZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZC4iKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgTG9ja2VyPExvY2s+IGxvY2tl
cihtX3JlZmVyZW5jZWRJbmRleExvY2spOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3JlZmVyZW5j
ZWRJbmRleGVzLmZpbmQoaW5kZXhOYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gbV9yZWZlcmVu
Y2VkSW5kZXhlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsK
KworICAgIGF1dG8qIGluZm8gPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nSW5kZXgoaW5kZXhOYW1l
KTsKKyAgICBpZiAoIWluZm8pIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpOb3RGb3VuZEVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnaW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBzcGVjaWZp
ZWQgaW5kZXggd2FzIG5vdCBmb3VuZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgYXV0byBpbmRleCA9IHN0ZDo6bWFrZV91bmlxdWU8SURCSW5kZXg+KCpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksICppbmZvLCAqdGhpcyk7CisgICAgUmVmUHRyPElEQkluZGV4PiBy
ZWZJbmRleCA9IGluZGV4LmdldCgpOworICAgIG1fcmVmZXJlbmNlZEluZGV4ZXMuc2V0KGluZGV4
TmFtZSwgV1RGTW92ZShpbmRleCkpOworCisgICAgcmV0dXJuIHJlZkluZGV4OworfQorCit2b2lk
IElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0
b3JlOjpkZWxldGVJbmRleCAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAobV9k
ZWxldGVkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxp
ZFN0YXRlRXJyb3I7CisgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdkZWxldGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBz
dG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSkgeworICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlSW5kZXgnIG9u
ICdJREJPYmplY3RTdG9yZSc6IFRoZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBhIHZlcnNpb24g
Y2hhbmdlIHRyYW5zYWN0aW9uLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOworICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlSW5kZXgnIG9uICdJ
REJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9pbmZvLmhhc0luZGV4KG5h
bWUpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tm90Rm91bmRF
cnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lmaWVkIGluZGV4
IHdhcyBub3QgZm91bmQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvKiBp
bmZvID0gbV9pbmZvLmluZm9Gb3JFeGlzdGluZ0luZGV4KG5hbWUpOworICAgIEFTU0VSVChpbmZv
KTsKKyAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmRpZERlbGV0ZUluZGV4SW5mbygqaW5m
byk7CisKKyAgICBtX2luZm8uZGVsZXRlSW5kZXgobmFtZSk7CisKKyAgICB7CisgICAgICAgIExv
Y2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKKyAgICAgICAgaWYgKGF1
dG8gaW5kZXggPSBtX3JlZmVyZW5jZWRJbmRleGVzLnRha2UobmFtZSkpIHsKKyAgICAgICAgICAg
IGluZGV4LT5tYXJrQXNEZWxldGVkKCk7CisgICAgICAgICAgICBtX2RlbGV0ZWRJbmRleGVzLmFk
ZChXVEZNb3ZlKGluZGV4KSk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIG1fdHJhbnNhY3Rp
b24tPmRlbGV0ZUluZGV4KG1faW5mby5pZGVudGlmaWVyKCksIG5hbWUpOworfQorCitSZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCit7CisgICAg
TE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjb3VudCIpOworCisgICAgcmV0dXJuIGRv
Q291bnQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsKK30KKworUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJPYmplY3RTdG9yZTo6Y291bnQiKTsKKworICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3Rh
dGUoJmNvbnRleHQpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9J
REJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5
cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBwYXJh
bWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gZG9Db3VudChjb250ZXh0LCBJREJLZXlSYW5nZURhdGEoaWRiS2V5
LmdldCgpKSwgZWMpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdl
KiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhl
ZERCLCAiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7CisKKyAgICByZXR1cm4gZG9Db3VudChjb250
ZXh0LCByYW5nZSA/IElEQktleVJhbmdlRGF0YShyYW5nZSkgOiBJREJLZXlSYW5nZURhdGE6OmFs
bEtleXMoKSwgZWMpOworfQorCitSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAg
ICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVyYWwgSURCT2JqZWN0U3RvcmUgbWV0aG9kcyBzdGF0
ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVkIGV4Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVmb3Jl
CisgICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3IgYW4gb2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0ZWQu
CisgICAgLy8gSG93ZXZlciwgYSBoYW5kZnVsIG9mIFczQyBJREIgdGVzdHMgZXhwZWN0IHRoZSBk
ZWxldGVkIGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUgZXhj
ZXB0aW9uIGFsc28gYXBwbGllcy4KKyAgICAvLyBBZGRpdGlvbmFsbHksIENocm9tZSBhbmQgRWRn
ZSBhZ3JlZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2VzIExlZ2FjeSBJREIgaW4gV2ViS2l0LgorICAg
IC8vIFVudGlsIHRoaXMgaXMgc29ydGVkIG91dCwgd2UnbGwgYWdyZWUgd2l0aCB0aGUgdGVzdCBh
bmQgdGhlIG1ham9yaXR5IHNoYXJlIGJyb3dzZXJzLgorICAgIGlmIChtX2RlbGV0ZWQpIHsKKyAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
KyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Nv
dW50JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0
ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghbV90cmFu
c2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCT2JqZWN0U3RvcmUn
OiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmICghcmFuZ2UuaXNWYWxpZCgpKSB7CisgICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gbV90cmFuc2FjdGlvbi0+cmVxdWVz
dENvdW50KGNvbnRleHQsICp0aGlzLCByYW5nZSk7Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmU6
Om1hcmtBc0RlbGV0ZWQoKQoreworICAgIG1fZGVsZXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgSURC
T2JqZWN0U3RvcmU6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VBYm9ydCgpCit7CisgICAg
bV9pbmZvID0gbV9vcmlnaW5hbEluZm87Cit9CisKK3ZvaWQgSURCT2JqZWN0U3RvcmU6OnZpc2l0
UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKKyAg
ICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CisgICAgZm9yIChh
dXRvJiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCisgICAgICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5oCmluZGV4IDAzZGVkNDIuLjFiN2NkODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtMjMsODMgKzIzLDEwNiBAQAogICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCT2JqZWN0
U3RvcmVfaAotI2RlZmluZSBJREJPYmplY3RTdG9yZV9oCi0KLSNpbmNsdWRlICJEaWN0aW9uYXJ5
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJs
ZS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI3ByYWdtYSBvbmNlCiAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotbmFtZXNwYWNlIERlcHJlY2F0ZWQgewotY2xhc3Mg
U2NyaXB0VmFsdWU7Ci19Ci0KLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgRXhlY1N0YXRlOwotY2xh
c3MgSlNWYWx1ZTsKLX0KKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJJ
REJJbmRleC5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCisjaW5jbHVkZSAiSURCT2Jq
ZWN0U3RvcmVJbmZvLmgiCisjaW5jbHVkZSAiSW5kZXhlZERCLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRE9NU3RyaW5nTGlzdDsKIGNsYXNzIElEQkFueTsKIGNsYXNzIElEQklu
ZGV4OwotY2xhc3MgSURCS2V5UGF0aDsKK2NsYXNzIElEQktleTsKIGNsYXNzIElEQktleVJhbmdl
OwogY2xhc3MgSURCUmVxdWVzdDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uOwotY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKK3N0cnVjdCBJREJLZXlSYW5nZURhdGE7CiAKLWNsYXNzIElEQk9i
amVjdFN0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmU+IHsKK2NsYXNzIElE
Qk9iamVjdFN0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmU+LCBwdWJsaWMg
QWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZSgp
IHsgfQorICAgIHN0YXRpYyBSZWY8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiwgSURCVHJhbnNhY3Rpb24mKTsK
KworICAgIH5JREJPYmplY3RTdG9yZSgpOwogCiAgICAgLy8gSW1wbGVtZW50IHRoZSBJREJPYmpl
Y3RTdG9yZSBJREwKLSAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGNvbnN0IElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVzKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElE
QlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikg
PSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFuZ2UqLCBjb25zdCBTdHJpbmcmIGRpcmVj
dGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1
ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFs
IFJlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJh
bmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRy
PElEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1Zh
bHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVm
UHRyPElEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwg
UmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5p
cXVlLCBib29sIG11bHRpRW50cnksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLQot
ICAgIHZpcnR1YWwgUmVmUHRyPElEQkluZGV4PiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRy
PElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSos
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJS
ZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgPSAwOwotCi0gICAg
dmlydHVhbCBib29sIGlzTW9kZXJuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJvdGVj
dGVkOgotICAgIElEQk9iamVjdFN0b3JlKCk7CisgICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25z
dDsKKyAgICBSZWZQdHI8SURCQW55PiBrZXlQYXRoQW55KCkgY29uc3Q7CisgICAgY29uc3QgSURC
S2V5UGF0aCBrZXlQYXRoKCkgY29uc3Q7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4
TmFtZXMoKSBjb25zdDsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKCk7
CisgICAgYm9vbCBhdXRvSW5jcmVtZW50KCkgY29uc3Q7CisKKyAgICBSZWZQdHI8SURCUmVxdWVz
dD4gYWRkKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVx
dWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7
CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
OworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVl
IGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+
IHB1dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlIGtleSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1
bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IGNs
ZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsK
KyAgICBSZWZQdHI8SURCSW5kZXg+IGNyZWF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9v
bCBtdWx0aUVudHJ5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURC
SW5kZXg+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
Jik7CisgICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtl
eSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cHV0Rm9yQ3Vyc29yVXBkYXRlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
VmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKyAgICBSZWZQdHI8SURCUmVx
dWVzdD4gbW9kZXJuRGVsZXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBKU0M6OkpTVmFsdWUg
a2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKworICAgIHZvaWQgbWFya0FzRGVsZXRl
ZCgpOworICAgIGJvb2wgaXNEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CisK
KyAgICBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2lu
Zm87IH0KKworICAgIC8vIEZJWE1FOiBBZnRlciByZW1vdmluZyBMZWdhY3lJREIgYW5kIGZvbGRp
bmcgYWJzdHJhY3QvaW1wbGVtZW50YXRpb24gY2xhc3NlcyB0b2dldGhlciwKKyAgICAvLyB0aGlz
IHdpbGwgbm8gbG9uZ2VyIGJlIG5lY2Vzc2FyeS4KKyAgICBJREJUcmFuc2FjdGlvbiYgbW9kZXJu
VHJhbnNhY3Rpb24oKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CisKKyAgICB2b2lk
IHJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VBYm9ydCgpOworCisgICAgdm9pZCB2aXNpdFJl
ZmVyZW5jZWRJbmRleGVzKEpTQzo6U2xvdFZpc2l0b3ImKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBJREJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCT2JqZWN0
U3RvcmVJbmZvJiwgSURCVHJhbnNhY3Rpb24mKTsKKworICAgIGVudW0gY2xhc3MgSW5saW5lS2V5
Q2hlY2sgeworICAgICAgICBQZXJmb3JtLAorICAgICAgICBEb05vdFBlcmZvcm0sCisgICAgfTsK
KworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBwdXRPckFkZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgUmVmUHRyPElEQktleT4sIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVN
b2RlLCBJbmxpbmVLZXlDaGVjaywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CisgICAgUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOworICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiBkb0RlbGV0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURC
S2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKworICAgIC8vIEFjdGl2ZURP
TU9iamVjdAorICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdDsKKyAg
ICBib29sIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdDsKKyAgICBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworCisgICAgSURCT2JqZWN0U3RvcmVJbmZvIG1f
aW5mbzsKKyAgICBJREJPYmplY3RTdG9yZUluZm8gbV9vcmlnaW5hbEluZm87CisgICAgUmVmPElE
QlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOworCisgICAgYm9vbCBtX2RlbGV0ZWQgeyBmYWxz
ZSB9OworCisgICAgbXV0YWJsZSBMb2NrIG1fcmVmZXJlbmNlZEluZGV4TG9jazsKKyAgICBIYXNo
TWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4Pj4gbV9yZWZlcmVuY2VkSW5kZXhl
czsKKyAgICBIYXNoU2V0PHN0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4+IG1fZGVsZXRlZEluZGV4
ZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgotCi0jZW5kaWYgLy8g
SURCT2JqZWN0U3RvcmVfaAorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0
LmNwcAppbmRleCA4MmNlMTc5Li42NzRjNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcApAQCAtMjgsMTEgKzI4LDE4
MyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJJREJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIklEQkVycm9yLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdENvbXBs
ZXRpb25FdmVudC5oIgorI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIKKyNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJPcGVuREJSZXF1ZXN0
OjpJREJPcGVuREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCi0gICAg
OiBJREJSZXF1ZXN0KGNvbnRleHQpCitSZWY8SURCT3BlbkRCUmVxdWVzdD4gSURCT3BlbkRCUmVx
dWVzdDo6Y3JlYXRlRGVsZXRlUmVxdWVzdChJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZl
ciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURC
RGF0YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKGRh
dGFiYXNlSWRlbnRpZmllci5pc1ZhbGlkKCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElE
Qk9wZW5EQlJlcXVlc3QoY29ubmVjdGlvbiwgY29udGV4dCwgZGF0YWJhc2VJZGVudGlmaWVyLCAw
LCBJbmRleGVkREI6OlJlcXVlc3RUeXBlOjpEZWxldGUpKTsKK30KKworUmVmPElEQk9wZW5EQlJl
cXVlc3Q+IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0ZU9wZW5SZXF1ZXN0KElEQkNsaWVudDo6SURC
Q29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGRhdGFiYXNlSWRlbnRpZmllciwg
dWludDY0X3QgdmVyc2lvbikKK3sKKyAgICBBU1NFUlQoZGF0YWJhc2VJZGVudGlmaWVyLmlzVmFs
aWQoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCT3BlbkRCUmVxdWVzdChjb25uZWN0
aW9uLCBjb250ZXh0LCBkYXRhYmFzZUlkZW50aWZpZXIsIHZlcnNpb24sIEluZGV4ZWREQjo6UmVx
dWVzdFR5cGU6Ok9wZW4pKTsKK30KKyAgICAKK0lEQk9wZW5EQlJlcXVlc3Q6OklEQk9wZW5EQlJl
cXVlc3QoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYg
ZGF0YWJhc2VJZGVudGlmaWVyLCB1aW50NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlJlcXVlc3RU
eXBlIHJlcXVlc3RUeXBlKQorICAgIDogSURCUmVxdWVzdChjb25uZWN0aW9uLCBjb250ZXh0KQor
ICAgICwgbV9kYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VJZGVudGlmaWVyKQorICAgICwgbV92
ZXJzaW9uKHZlcnNpb24pCit7CisgICAgbV9yZXF1ZXN0VHlwZSA9IHJlcXVlc3RUeXBlOworfQor
CitJREJPcGVuREJSZXF1ZXN0Ojp+SURCT3BlbkRCUmVxdWVzdCgpCit7Cit9CisKK3ZvaWQgSURC
T3BlbkRCUmVxdWVzdDo6b25FcnJvcihjb25zdCBJREJSZXN1bHREYXRhJiBkYXRhKQoreworICAg
IG1fZG9tRXJyb3IgPSBET01FcnJvcjo6Y3JlYXRlKGRhdGEuZXJyb3IoKS5uYW1lKCkpOworICAg
IGVucXVldWVFdmVudChJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUsICp0aGlzKSk7Cit9CisKK3ZvaWQgSURCT3BlbkRC
UmVxdWVzdDo6dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uRGlkRmluaXNoKCkKK3sKKyAgICAvLyAz
LjMuNyAidmVyc2lvbmNoYW5nZSIgdHJhbnNhY3Rpb24gc3RlcHMKKyAgICAvLyBXaGVuIHRoZSB0
cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgYWZ0ZXIgZmlyaW5nIGNvbXBsZXRlL2Fib3J0IG9uIHRo
ZSB0cmFuc2FjdGlvbiwgaW1tZWRpYXRlbHkgc2V0IHJlcXVlc3QncyB0cmFuc2FjdGlvbiBwcm9w
ZXJ0eSB0byBudWxsLgorICAgIG1fc2hvdWxkRXhwb3NlVHJhbnNhY3Rpb25Ub0RPTSA9IGZhbHNl
OworfQorCit2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OmZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hh
bmdlQ29tbWl0KCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6Zmly
ZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQoKSIpOworCisgICAgQVNTRVJUKGhhc1Bl
bmRpbmdBY3Rpdml0eSgpKTsKKyAgICBBU1NFUlQobV9yZXN1bHQpOworICAgIEFTU0VSVChtX3Jl
c3VsdC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCRGF0YWJhc2UpOworICAgIG1fdHJhbnNh
Y3Rpb24tPmFkZFJlcXVlc3QoKnRoaXMpOworCisgICAgYXV0byBldmVudCA9IElEQlJlcXVlc3RD
b21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxzZSwg
ZmFsc2UsICp0aGlzKTsKKyAgICBtX29wZW5EYXRhYmFzZVN1Y2Nlc3NFdmVudCA9ICZldmVudC5n
ZXQoKTsKKworICAgIGVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7Cit9CisKK3ZvaWQgSURC
T3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVyVmVy
c2lvbkNoYW5nZUNvbXBsZXRpb24oKSIpOworCisgICAgQVNTRVJUKGhhc1BlbmRpbmdBY3Rpdml0
eSgpKTsKKworICAgIElEQkVycm9yIGlkYkVycm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9y
dEVycm9yKTsKKyAgICBtX2RvbUVycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShpZGJFcnJvci5uYW1l
KCkpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGVVbmRlZmluZWQoKTsKKworICAgIG1f
dHJhbnNhY3Rpb24tPmFkZFJlcXVlc3QoKnRoaXMpOworICAgIGVucXVldWVFdmVudChJREJSZXF1
ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUs
IHRydWUsICp0aGlzKSk7Cit9CisKK2Jvb2wgSURCT3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dChFdmVudCYgZXZlbnQpCit7CisgICAgYm9vbCByZXN1bHQgPSBJREJSZXF1ZXN0OjpkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uICYmIG1fdHJhbnNhY3Rpb24t
PmlzVmVyc2lvbkNoYW5nZSgpICYmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9y
RXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpKQorICAg
ICAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kaWRGaW5p
c2hIYW5kbGluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbigqbV90cmFuc2FjdGlvbik7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyhj
b25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJPcGVuREJSZXF1ZXN0OjpvblN1Y2Nlc3MoKSIpOworCisgICAgaWYgKCFzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZjxJREJEYXRhYmFzZT4gZGF0
YWJhc2UgPSBJREJEYXRhYmFzZTo6Y3JlYXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNv
bm5lY3Rpb24oKSwgcmVzdWx0RGF0YSk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShX
VEZNb3ZlKGRhdGFiYXNlKSk7CisgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3Rh
dGU6OkRvbmU7CisKKyAgICBlbnF1ZXVlRXZlbnQoSURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSwgKnRoaXMpKTsK
K30KKwordm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVz
dWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBSZWY8SURCRGF0YWJhc2U+IGRhdGFiYXNlID0g
SURCRGF0YWJhc2U6OmNyZWF0ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjb25uZWN0aW9u
KCksIHJlc3VsdERhdGEpOworICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBk
YXRhYmFzZS0+c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24ocmVzdWx0RGF0YS50cmFuc2Fj
dGlvbkluZm8oKSwgKnRoaXMpOworCisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5pbmZvKCkubW9k
ZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKKyAgICBB
U1NFUlQodHJhbnNhY3Rpb24tPm9yaWdpbmFsRGF0YWJhc2VJbmZvKCkpOworCisgICAgdWludDY0
X3Qgb2xkVmVyc2lvbiA9IHRyYW5zYWN0aW9uLT5vcmlnaW5hbERhdGFiYXNlSW5mbygpLT52ZXJz
aW9uKCk7CisgICAgdWludDY0X3QgbmV3VmVyc2lvbiA9IHRyYW5zYWN0aW9uLT5pbmZvKCkubmV3
VmVyc2lvbigpOworCisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6Om9uVXBn
cmFkZU5lZWRlZCgpIC0gY3VycmVudCB2ZXJzaW9uIGlzICUiIFBSSXU2NCAiLCBuZXcgaXMgJSIg
UFJJdTY0LCBvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKTsKKworICAgIG1fcmVzdWx0ID0gSURCQW55
OjpjcmVhdGUoV1RGTW92ZShkYXRhYmFzZSkpOworICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVl
c3RSZWFkeVN0YXRlOjpEb25lOworICAgIG1fdHJhbnNhY3Rpb24gPSBhZG9wdFJlZigmdHJhbnNh
Y3Rpb24ubGVha1JlZigpKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5hZGRSZXF1ZXN0KCp0aGlzKTsK
KworICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJz
aW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSk7Cit9CisK
K3ZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MoY29uc3QgSURC
UmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0gcmVz
dWx0RGF0YS5kYXRhYmFzZUluZm8oKS52ZXJzaW9uKCk7CisKKyAgICBMT0coSW5kZXhlZERCLCAi
SURCT3BlbkRCUmVxdWVzdDo6b25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MoKSAtIGN1cnJlbnQgdmVy
c2lvbiBpcyAlIiBQUkl1NjQsIG9sZFZlcnNpb24pOworCisgICAgbV9yZWFkeVN0YXRlID0gSURC
UmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZVVu
ZGVmaW5lZCgpOworCisgICAgZW5xdWV1ZUV2ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3Jl
YXRlKG9sZFZlcnNpb24sIDAsIGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpKTsKK30KKwordm9p
ZCBJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEm
IGRhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RD
b21wbGV0ZWQiKTsKKworICAgIC8vIElmIGFuIE9wZW4gcmVxdWVzdCB3YXMgY29tcGxldGVkIGFm
dGVyIHRoZSBwYWdlIGhhcyBuYXZpZ2F0ZWQsIGxlYXZpbmcgdGhpcyByZXF1ZXN0CisgICAgLy8g
d2l0aCBhIHN0b3BwZWQgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LCB3ZSBuZWVkIHRvIG1lc3Nh
Z2UgYmFjayB0byB0aGUgc2VydmVyIHNvIGl0CisgICAgLy8gZG9lc24ndCBoYW5nIHdhaXRpbmcg
b24gYSBkYXRhYmFzZSBjb25uZWN0aW9uIG9yIHRyYW5zYWN0aW9uIHRoYXQgd2lsbCBuZXZlciBl
eGlzdC4KKyAgICBpZiAobV9jb250ZXh0U3RvcHBlZCkgeworICAgICAgICBzd2l0Y2ggKGRhdGEu
dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNlU3VjY2Vz
czoKKyAgICAgICAgICAgIGNvbm5lY3Rpb24oKS5hYm9ydE9wZW5BbmRVcGdyYWRlTmVlZGVkKGRh
dGEuZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcigpLCBJREJSZXNvdXJjZUlkZW50aWZpZXI6
OmVtcHR5VmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJREJSZXN1
bHRUeXBlOjpPcGVuRGF0YWJhc2VVcGdyYWRlTmVlZGVkOgorICAgICAgICAgICAgY29ubmVjdGlv
bigpLmFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQoZGF0YS5kYXRhYmFzZUNvbm5lY3Rpb25JZGVu
dGlmaWVyKCksIGRhdGEudHJhbnNhY3Rpb25JbmZvKCkuaWRlbnRpZmllcigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoIChkYXRhLnR5cGUoKSkg
eworICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6RXJyb3I6CisgICAgICAgIG9uRXJyb3IoZGF0YSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6T3BlbkRhdGFiYXNlU3Vj
Y2VzczoKKyAgICAgICAgb25TdWNjZXNzKGRhdGEpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IElEQlJlc3VsdFR5cGU6Ok9wZW5EYXRhYmFzZVVwZ3JhZGVOZWVkZWQ6CisgICAgICAgIG9uVXBn
cmFkZU5lZWRlZChkYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJREJSZXN1bHRUeXBl
OjpEZWxldGVEYXRhYmFzZVN1Y2Nlc3M6CisgICAgICAgIG9uRGVsZXRlRGF0YWJhc2VTdWNjZXNz
KGRhdGEpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBJREJPcGVuREJSZXF1ZXN0Ojpy
ZXF1ZXN0QmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uKQog
eworICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0QmxvY2tlZCIp
OworICAgIGVucXVldWVFdmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJz
aW9uLCBuZXdWZXJzaW9uLCBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9wZW5EQlJlcXVlc3QuaAppbmRleCAwMGFkZGMwLi4xZGNkN2Q2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5oCkBA
IC0yMywyNiArMjMsNTggQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIElEQk9wZW5EQlJlcXVlc3RfaAotI2RlZmluZSBJREJPcGVuREJSZXF1ZXN0
X2gKKyNwcmFnbWEgb25jZQogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNs
dWRlICJET01FcnJvci5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIklEQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJbmRleGVkREIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBFdmVudDsKK2NsYXNzIElEQkRhdGFiYXNlSWRlbnRpZmllcjsK
K2NsYXNzIElEQlJlc3VsdERhdGE7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitu
YW1lc3BhY2UgSURCQ2xpZW50IHsKK2NsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsKK30KKwog
Y2xhc3MgSURCT3BlbkRCUmVxdWVzdCA6IHB1YmxpYyBJREJSZXF1ZXN0IHsKIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5JREJPcGVuREJSZXF1ZXN0KCkgeyB9CisgICAgc3RhdGljIFJlZjxJREJPcGVu
REJSZXF1ZXN0PiBjcmVhdGVEZWxldGVSZXF1ZXN0KElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRv
U2VydmVyJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYpOworICAgIHN0YXRpYyBSZWY8SURCT3BlbkRCUmVxdWVzdD4gY3JlYXRlT3BlblJlcXVl
c3QoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgdWludDY0X3QgdmVyc2lvbik7CisK
KyAgICB+SURCT3BlbkRCUmVxdWVzdCgpIGZpbmFsOworICAgIAorICAgIGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgZGF0YWJhc2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
YmFzZUlkZW50aWZpZXI7IH0KKyAgICB1aW50NjRfdCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
bV92ZXJzaW9uOyB9CisKKyAgICB2b2lkIHJlcXVlc3RDb21wbGV0ZWQoY29uc3QgSURCUmVzdWx0
RGF0YSYpOworICAgIHZvaWQgcmVxdWVzdEJsb2NrZWQodWludDY0X3Qgb2xkVmVyc2lvbiwgdWlu
dDY0X3QgbmV3VmVyc2lvbik7CisKKyAgICB2b2lkIHZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbkRp
ZEZpbmlzaCgpOworICAgIHZvaWQgZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQo
KTsKKyAgICB2b2lkIGZpcmVFcnJvckFmdGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKTsKIAot
cHJvdGVjdGVkOgotICAgIElEQk9wZW5EQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYp
OworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIGZpbmFsOworCitwcml2YXRlOgorICAg
IElEQk9wZW5EQlJlcXVlc3QoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgdWludDY0
X3QgdmVyc2lvbiwgSW5kZXhlZERCOjpSZXF1ZXN0VHlwZSk7CisKKyAgICB2b2lkIG9uRXJyb3Io
Y29uc3QgSURCUmVzdWx0RGF0YSYpOworICAgIHZvaWQgb25TdWNjZXNzKGNvbnN0IElEQlJlc3Vs
dERhdGEmKTsKKyAgICB2b2lkIG9uVXBncmFkZU5lZWRlZChjb25zdCBJREJSZXN1bHREYXRhJik7
CisgICAgdm9pZCBvbkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJik7
CisKKyAgICBib29sIGlzT3BlbkRCUmVxdWVzdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBtX2RhdGFiYXNlSWRlbnRpZmllcjsK
KyAgICB1aW50NjRfdCBtX3ZlcnNpb24geyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElE
Qk9wZW5EQlJlcXVlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcAppbmRleCAwMTJmMzY5Li5mZTY5NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMjgsMTEgKzI4LDQwOCBA
QAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJET01FcnJvci5o
IgorI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5j
bHVkZSAiRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJJREJDdXJzb3IuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgi
CisjaW5jbHVkZSAiSURCS2V5RGF0YS5oIgorI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
I2luY2x1ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCUmVxdWVzdDo6SURCUmVxdWVz
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorUmVmPElEQlJlcXVlc3Q+IElEQlJl
cXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RT
dG9yZSYgb2JqZWN0U3RvcmUsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIG9iamVjdFN0b3JlLCB0cmFu
c2FjdGlvbikpOworfQorCitSZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkN1cnNvciYgY3Vyc29yLCBJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCUmVxdWVz
dChjb250ZXh0LCBjdXJzb3IsIHRyYW5zYWN0aW9uKSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJ
REJSZXF1ZXN0OjpjcmVhdGVDb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJ
REJJbmRleCYgaW5kZXgsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIGluZGV4LCB0cmFuc2FjdGlvbikp
OworfQorCitSZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlR2V0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJl
Y29yZFR5cGUgcmVxdWVzdGVkUmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9u
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlJlcXVlc3QoY29udGV4dCwgaW5kZXgs
IHJlcXVlc3RlZFJlY29yZFR5cGUsIHRyYW5zYWN0aW9uKSk7Cit9CisKK0lEQlJlcXVlc3Q6OklE
QlJlcXVlc3QoSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBBY3RpdmVET01PYmplY3QoJmNv
bnRleHQpCisgICAgLCBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKKyAgICAsIG1fcmVzb3VyY2VJ
ZGVudGlmaWVyKGNvbm5lY3Rpb24pCit7CisgICAgc3VzcGVuZElmTmVlZGVkKCk7Cit9CisKK0lE
QlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURC
T2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiAg
ICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCisgICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFu
c2FjdGlvbikKKyAgICAsIG1fY29ubmVjdGlvbih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0aW9u
KCkpCisgICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFuc2FjdGlvbi5zZXJ2ZXJDb25uZWN0
aW9uKCkpCisgICAgLCBtX3NvdXJjZShJREJBbnk6OmNyZWF0ZShvYmplY3RTdG9yZSkpCit7Cisg
ICAgc3VzcGVuZElmTmVlZGVkKCk7Cit9CisKK0lEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCQ3Vyc29yJiBjdXJzb3IsIElEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbikKKyAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKKyAgICAs
IG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQorICAgICwgbV9jb25uZWN0aW9uKHRyYW5zYWN0
aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKKyAgICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKHRyYW5z
YWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKKyAgICAsIG1fc291cmNlKGN1cnNvci5zb3VyY2Uo
KSkKKyAgICAsIG1fcGVuZGluZ0N1cnNvcigmY3Vyc29yKQoreworICAgIHN1c3BlbmRJZk5lZWRl
ZCgpOworCisgICAgY3Vyc29yLnNldFJlcXVlc3QoKnRoaXMpOworfQorCitJREJSZXF1ZXN0OjpJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRl
eCwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KCZj
b250ZXh0KQorICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24pCisgICAgLCBtX2Nvbm5l
Y3Rpb24odHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQorICAgICwgbV9yZXNvdXJjZUlk
ZW50aWZpZXIodHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQorICAgICwgbV9zb3VyY2Uo
SURCQW55OjpjcmVhdGUoaW5kZXgpKQoreworICAgIHN1c3BlbmRJZk5lZWRlZCgpOworfQorCitJ
REJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
QkluZGV4JiBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgcmVxdWVzdGVkUmVjb3Jk
VHlwZSwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQorICAgIDogSURCUmVxdWVzdChjb250
ZXh0LCBpbmRleCwgdHJhbnNhY3Rpb24pCit7CisgICAgbV9yZXF1ZXN0ZWRJbmRleFJlY29yZFR5
cGUgPSByZXF1ZXN0ZWRSZWNvcmRUeXBlOworfQorCitJREJSZXF1ZXN0Ojp+SURCUmVxdWVzdCgp
Cit7CisgICAgaWYgKG1fcmVzdWx0KSB7CisgICAgICAgIGF1dG8gdHlwZSA9IG1fcmVzdWx0LT50
eXBlKCk7CisgICAgICAgIGlmICh0eXBlID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yIHx8IHR5
cGUgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpCisgICAgICAgICAgICBtX3Jl
c3VsdC0+aWRiQ3Vyc29yKCktPmNsZWFyUmVxdWVzdCgpOworICAgIH0KK30KKworUmVmUHRyPFdl
YkNvcmU6OklEQkFueT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVhZHlT
dGF0ZTo6RG9uZSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0OworCisgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gcmVhZCB0aGUgJ3Jlc3VsdCcgcHJvcGVydHkgZnJvbSAn
SURCUmVxdWVzdCc6IFRoZSByZXF1ZXN0IGhhcyBub3QgZmluaXNoZWQuIik7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3Vuc2lnbmVkIHNob3J0IElEQlJlcXVlc3Q6OmVycm9yQ29kZShFeGNl
cHRpb25Db2RlJikgY29uc3QKIHsKKyAgICByZXR1cm4gMDsKK30KKworUmVmUHRyPERPTUVycm9y
PiBJREJSZXF1ZXN0OjplcnJvcihFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSBjb25zdAor
eworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpCisg
ICAgICAgIHJldHVybiBtX2RvbUVycm9yOworCisgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKKyAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gcmVhZCB0aGUgJ2Vycm9yJyBwcm9wZXJ0eSBmcm9tICdJREJSZXF1ZXN0Jzog
VGhlIHJlcXVlc3QgaGFzIG5vdCBmaW5pc2hlZC4iKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworUmVmUHRyPFdlYkNvcmU6OklEQkFueT4gSURCUmVxdWVzdDo6c291cmNlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zb3VyY2U7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0U291cmNlKElE
QkN1cnNvciYgY3Vyc29yKQoreworICAgIEFTU0VSVCghbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIp
OworCisgICAgbV9zb3VyY2UgPSBJREJBbnk6OmNyZWF0ZShjdXJzb3IpOworICAgIG1fY3Vyc29y
UmVxdWVzdE5vdGlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxTY29wZUd1YXJkPihbdGhpc10oKSB7
CisgICAgICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCQ3Vy
c29yIHx8IG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFs
dWUpOworICAgICAgICBtX3NvdXJjZS0+aWRiQ3Vyc29yKCktPmRlY3JlbWVudE91dHN0YW5kaW5n
UmVxdWVzdENvdW50KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0VmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKK3sKKyAgICBB
U1NFUlQoIW1fdHJhbnNhY3Rpb24pOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5pc1ZlcnNpb25D
aGFuZ2UoKSk7CisgICAgQVNTRVJUKCF0cmFuc2FjdGlvbi5pc0ZpbmlzaGVkT3JGaW5pc2hpbmco
KSk7CisKKyAgICBtX3RyYW5zYWN0aW9uID0gJnRyYW5zYWN0aW9uOworfQorCitSZWZQdHI8V2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb24+IElEQlJlcXVlc3Q6OnRyYW5zYWN0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zaG91bGRFeHBvc2VUcmFuc2FjdGlvblRvRE9NID8gbV90cmFuc2FjdGlv
biA6IG51bGxwdHI7Cit9CisKK2NvbnN0IFN0cmluZyYgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgp
IGNvbnN0Cit7CisgICAgc3RhdGljIFdURjo6TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwZW5kaW5n
U3RyaW5nKCJwZW5kaW5nIik7CisgICAgc3RhdGljIFdURjo6TmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
PiBkb25lU3RyaW5nKCJkb25lIik7CisKKyAgICBzd2l0Y2ggKG1fcmVhZHlTdGF0ZSkgeworICAg
IGNhc2UgSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmc6CisgICAgICAgIHJldHVybiBwZW5k
aW5nU3RyaW5nOworICAgIGNhc2UgSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU6CisgICAgICAg
IHJldHVybiBkb25lU3RyaW5nOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit1aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VP
YmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAoreworICAgIGlmICghbV9zb3VyY2UpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBl
OjpJREJPYmplY3RTdG9yZSkgeworICAgICAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fc291cmNl
LT5pZGJPYmplY3RTdG9yZSgpLmdldCgpOworICAgICAgICBpZiAoIW9iamVjdFN0b3JlKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBvYmplY3RTdG9yZS0+aW5mbygpLmlk
ZW50aWZpZXIoKTsKKyAgICB9CisKKyAgICBpZiAobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6
OlR5cGU6OklEQkluZGV4KSB7CisgICAgICAgIGF1dG8qIGluZGV4ID0gbV9zb3VyY2UtPmlkYklu
ZGV4KCkuZ2V0KCk7CisgICAgICAgIGlmICghaW5kZXgpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlmaWVyKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3VpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUlu
ZGV4SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKG1fc291cmNlLT50eXBlKCkgIT0gSURCQW55OjpUeXBlOjpJREJJbmRl
eCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX3NvdXJjZS0+aWRiSW5kZXgoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9zb3VyY2UtPmlkYkluZGV4KCktPmluZm8o
KS5pZGVudGlmaWVyKCk7Cit9CisKK0luZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIElEQlJlcXVl
c3Q6OnJlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fc291
cmNlKTsKKyAgICBBU1NFUlQobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQklu
ZGV4KTsKKworICAgIHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsKK30KKworRXZl
bnRUYXJnZXRJbnRlcmZhY2UgSURCUmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25z
dAoreworICAgIHJldHVybiBJREJSZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOworfQor
Citjb25zdCBjaGFyKiBJREJSZXF1ZXN0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIklEQlJlcXVlc3QiOworfQorCitib29sIElEQlJlcXVlc3Q6OmNhblN1c3Bl
bmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBJREJSZXF1ZXN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpzdG9wKCkK
K3sKKyAgICBBU1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOworICAgIG1fY29udGV4dFN0b3BwZWQg
PSB0cnVlOworfQorCit2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYg
ZXZlbnQpCit7CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwgbV9jb250ZXh0
U3RvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
KyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQo
V1RGTW92ZShldmVudCkpOworfQorCitib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoRXZl
bnQmIGV2ZW50KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpkaXNwYXRjaEV2
ZW50IC0gJXMgKCVwKSIsIGV2ZW50LnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aGlz
KTsKKworICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7CisgICAgQVNTRVJUKCFtX2Nv
bnRleHRTdG9wcGVkKTsKKworICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJs
b2NrZWRFdmVudCkKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6
OkRvbmU7CisKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKKyAgICB0
YXJnZXRzLmFwcGVuZCh0aGlzKTsKKworICAgIGlmICgmZXZlbnQgPT0gbV9vcGVuRGF0YWJhc2VT
dWNjZXNzRXZlbnQpCisgICAgICAgIG1fb3BlbkRhdGFiYXNlU3VjY2Vzc0V2ZW50ID0gbnVsbHB0
cjsKKyAgICBlbHNlIGlmIChtX3RyYW5zYWN0aW9uICYmICFtX3RyYW5zYWN0aW9uLT5pc0Zpbmlz
aGVkKCkpIHsKKyAgICAgICAgdGFyZ2V0cy5hcHBlbmQobV90cmFuc2FjdGlvbik7CisgICAgICAg
IHRhcmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24tPmRiKCkpOworICAgIH0KKworICAgIG1faGFz
UGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7CisKKyAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9
IG51bGxwdHI7CisKKyAgICBib29sIGRvbnRQcmV2ZW50RGVmYXVsdDsKKyAgICB7CisgICAgICAg
IFRyYW5zYWN0aW9uQWN0aXZhdG9yIGFjdGl2YXRvcihtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAg
ICAgICAgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChl
dmVudCwgdGFyZ2V0cyk7CisgICAgfQorCisgICAgLy8gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaCgpIG1pZ2h0IGhhdmUgc2V0IHRoZSBwZW5kaW5nIGFjdGl2aXR5IGZsYWcgYmFjayB0byB0
cnVlLCBzdWdnZXN0aW5nIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV1c2VkLgorICAgIC8vIFdlIG1p
Z2h0IGFsc28gcmUtdXNlIHRoZSByZXF1ZXN0IGlmIHRoaXMgZXZlbnQgd2FzIHRoZSB1cGdyYWRl
bmVlZGVkIGV2ZW50IGZvciBhbiBJREJPcGVuREJSZXF1ZXN0LgorICAgIGlmICghbV9oYXNQZW5k
aW5nQWN0aXZpdHkpCisgICAgICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0gaXNPcGVuREJSZXF1
ZXN0KCkgJiYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50
IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KTsKKworICAgIC8v
IFRoZSByZXF1ZXN0IHNob3VsZCBvbmx5IHJlbWFpbiBpbiB0aGUgdHJhbnNhY3Rpb24ncyByZXF1
ZXN0IGxpc3QgaWYgaXQgcmVwcmVzZW50cyBhIHBlbmRpbmcgY3Vyc29yIG9wZXJhdGlvbiwgb3Ig
dGhpcyBpcyBhbiBvcGVuIHJlcXVlc3QgdGhhdCB3YXMgYmxvY2tlZC4KKyAgICBpZiAobV90cmFu
c2FjdGlvbiAmJiAhbV9wZW5kaW5nQ3Vyc29yICYmIGV2ZW50LnR5cGUoKSAhPSBldmVudE5hbWVz
KCkuYmxvY2tlZEV2ZW50KQorICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1vdmVSZXF1ZXN0KCp0
aGlzKTsKKworICAgIGlmIChkb250UHJldmVudERlZmF1bHQgJiYgZXZlbnQudHlwZSgpID09IGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIG1fdHJhbnNhY3Rpb24gJiYgIW1fdHJhbnNhY3Rpb24t
PmlzRmluaXNoZWRPckZpbmlzaGluZygpKSB7CisgICAgICAgIEFTU0VSVChtX2RvbUVycm9yKTsK
KyAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoKm1fZG9tRXJy
b3IpOworICAgIH0KKworICAgIHJldHVybiBkb250UHJldmVudERlZmF1bHQ7Cit9CisKK3ZvaWQg
SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCit7CisgICAgTE9H
KEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIi
KTsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uICYmIG1faWRiRXJyb3IuY29kZSgpICE9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKQorICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9y
dER1ZVRvRmFpbGVkUmVxdWVzdChET01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpnZXRFcnJvck5hbWUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKSk7Cit9CisK
K3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IElEQktleURhdGEqIGtleURhdGEpCit7
CisgICAgaWYgKCFrZXlEYXRhKSB7CisgICAgICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0g
aWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqa2V5RGF0
YSk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3ZlKHZhbHVlKSk7Cit9CisK
K3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KHVpbnQ2NF90IG51bWJlcikKK3sKKyAgICBBU1NF
UlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3Jl
YXRlKERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0o
KSwgSlNDOjpKU1ZhbHVlKG51bWJlcikpKTsKK30KKwordm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1
bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRh
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVy
ZWRDbG9uZSIpOworCisgICAgYXV0byBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YSgqY29udGV4dCwgdmFs
dWVEYXRhKTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUodmFsdWUpKTsK
K30KKwordm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1VuZGVmaW5lZCgpCit7CisgICAgbV9y
ZXN1bHQgPSBJREJBbnk6OmNyZWF0ZVVuZGVmaW5lZCgpOworfQorCitJREJDdXJzb3IqIElEQlJl
cXVlc3Q6OnJlc3VsdEN1cnNvcigpCit7CisgICAgaWYgKCFtX3Jlc3VsdCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJ
REJDdXJzb3IgfHwgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldp
dGhWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0LT5pZGJDdXJzb3IoKS5nZXQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0ZUN1cnNv
cihJREJDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJl
cXVlc3RSZWFkeVN0YXRlOjpEb25lKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdD
dXJzb3IpOworICAgIEFTU0VSVCgmY3Vyc29yID09IHJlc3VsdEN1cnNvcigpKTsKKyAgICBBU1NF
UlQoIW1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyKTsKKworICAgIG1fcGVuZGluZ0N1cnNvciA9ICZj
dXJzb3I7CisgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSB0cnVlOworICAgIG1fcmVzdWx0ID0g
bnVsbHB0cjsKKyAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGlu
ZzsKKyAgICBtX2RvbUVycm9yID0gbnVsbHB0cjsKKyAgICBtX2lkYkVycm9yID0geyB9OworCisg
ICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFNjb3BlR3VhcmQ+
KFt0aGlzXSgpIHsKKyAgICAgICAgbV9wZW5kaW5nQ3Vyc29yLT5kZWNyZW1lbnRPdXRzdGFuZGlu
Z1JlcXVlc3RDb3VudCgpOworICAgIH0pOworfQorCit2b2lkIElEQlJlcXVlc3Q6OmRpZE9wZW5P
ckl0ZXJhdGVDdXJzb3IoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBB
U1NFUlQobV9wZW5kaW5nQ3Vyc29yKTsKKyAgICBtX3Jlc3VsdCA9IG51bGxwdHI7CisKKyAgICBp
ZiAocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6SXRlcmF0ZUN1cnNvclN1Y2Nl
c3MgfHwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6T3BlbkN1cnNvclN1Y2Nl
c3MpIHsKKyAgICAgICAgbV9wZW5kaW5nQ3Vyc29yLT5zZXRHZXRSZXN1bHQoKnRoaXMsIHJlc3Vs
dERhdGEuZ2V0UmVzdWx0KCkpOworICAgICAgICBpZiAocmVzdWx0RGF0YS5nZXRSZXN1bHQoKS5p
c0RlZmluZWQoKSkKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoKm1fcGVu
ZGluZ0N1cnNvcik7CisgICAgfQorCisgICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIgPSBudWxs
cHRyOworICAgIG1fcGVuZGluZ0N1cnNvciA9IG51bGxwdHI7CisKKyAgICByZXF1ZXN0Q29tcGxl
dGVkKHJlc3VsdERhdGEpOworfQorCit2b2lkIElEQlJlcXVlc3Q6OnJlcXVlc3RDb21wbGV0ZWQo
Y29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKK3sKKyAgICBtX3JlYWR5U3RhdGUgPSBJ
REJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKKworICAgIG1faWRiRXJyb3IgPSByZXN1bHREYXRh
LmVycm9yKCk7CisgICAgaWYgKCFtX2lkYkVycm9yLmlzTnVsbCgpKQorICAgICAgICBvbkVycm9y
KCk7CisgICAgZWxzZQorICAgICAgICBvblN1Y2Nlc3MoKTsKK30KKwordm9pZCBJREJSZXF1ZXN0
OjpvbkVycm9yKCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6b25FcnJvciIp
OworCisgICAgQVNTRVJUKCFtX2lkYkVycm9yLmlzTnVsbCgpKTsKKyAgICBtX2RvbUVycm9yID0g
RE9NRXJyb3I6OmNyZWF0ZShtX2lkYkVycm9yLm5hbWUoKSk7CisgICAgZW5xdWV1ZUV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUpKTsKK30KKwor
dm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MiKTsKKworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmgKaW5kZXggNWFmYmY2MS4uZTE5MDIzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaApAQCAtMjMsNTQgKzIzLDE0NCBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCUmVxdWVzdF9oCi0j
ZGVmaW5lIElEQlJlcXVlc3RfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUVy
cm9yLmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50LmgiCi0j
aW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5j
bHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVkZSAiU2NyaXB0
V3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiSURCUmVzb3VyY2VJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTY29wZUd1YXJkLmgiCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJUcmFu
c2FjdGlvbjsKK2NsYXNzIEV2ZW50OworY2xhc3MgSURCQW55OworY2xhc3MgSURCQ3Vyc29yOwor
Y2xhc3MgSURCSW5kZXg7CitjbGFzcyBJREJLZXlEYXRhOworY2xhc3MgSURCT2JqZWN0U3RvcmU7
CitjbGFzcyBJREJSZXN1bHREYXRhOworY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAKLXN0
cnVjdCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2U7CituYW1lc3BhY2UgSURCQ2xpZW50IHsKK2Ns
YXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsKK30KIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKK25hbWVzcGFjZSBJbmRleGVkREIgeworZW51bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7Cit9
CiAKIC8vIERlZmluZWQgaW4gdGhlIElETAogZW51bSBjbGFzcyBJREJSZXF1ZXN0UmVhZHlTdGF0
ZSB7CiAgICAgUGVuZGluZyA9IDEsCiAgICAgRG9uZSA9IDIsCi0gICAgRGVwcmVjYXRlZEVhcmx5
RGVhdGggPSAzLCAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0OTExNyAtIFJlbW92ZSB0aGlzIHdoZW4gcmVtb3ZpbmcgTGVnYWN5SURCCiB9OwogCi1j
bGFzcyBJREJSZXF1ZXN0IDogcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QgeworY2xhc3MgSURCUmVxdWVzdCA6IHB1YmxpYyBFdmVudFRhcmdl
dFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgUmVmQ291bnRl
ZDxJREJSZXF1ZXN0PiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCUmVxdWVzdCgpIHsgfQor
ICAgIHN0YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBJREJPYmplY3RTdG9yZSYsIElEQlRyYW5zYWN0aW9uJik7CisgICAgc3RhdGljIFJlZjxJREJS
ZXF1ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkN1cnNvciYsIElEQlRy
YW5zYWN0aW9uJik7CisgICAgc3RhdGljIFJlZjxJREJSZXF1ZXN0PiBjcmVhdGVDb3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJREJUcmFuc2FjdGlvbiYpOworICAgIHN0
YXRpYyBSZWY8SURCUmVxdWVzdD4gY3JlYXRlR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJREJUcmFuc2FjdGlvbiYpOwog
Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCQW55PiByZXN1bHQoRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgZXJyb3JDb2RlKEV4
Y2VwdGlvbkNvZGUmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZWZQdHI8RE9NRXJyb3I+IGVy
cm9yKEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJl
ZlB0cjxJREJBbnk+IHNvdXJjZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdCA9IDA7CisgICAgY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiByZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291
cmNlSWRlbnRpZmllcjsgfQogCi0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHJlYWR5U3RhdGUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOworCisgICAgUmVmUHRyPElE
QkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGNvbnN0OworICAgIHVuc2ln
bmVkIHNob3J0IGVycm9yQ29kZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgUmVmUHRyPERP
TUVycm9yPiBlcnJvcihFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBjb25zdDsKKyAgICBSZWZQ
dHI8SURCQW55PiBzb3VyY2UoKSBjb25zdDsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRy
YW5zYWN0aW9uKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiByZWFkeVN0YXRlKCkgY29uc3Q7
CisKKyAgICB1aW50NjRfdCBzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdDsKKyAg
ICB1aW50NjRfdCBzb3VyY2VJbmRleElkZW50aWZpZXIoKSBjb25zdDsKKyAgICBJbmRleGVkREI6
OkluZGV4UmVjb3JkVHlwZSByZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUoKSBjb25zdDsKKworICAg
IC8vIEV2ZW50VGFyZ2V0CisgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRl
cmZhY2UoKSBjb25zdCBvdmVycmlkZTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURC
UmVxdWVzdD46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+OjpkZXJlZjsK
KworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7CisgICAgYm9vbCBkaXNwYXRj
aEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7CisKKyAgICBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25U
b1NlcnZlciYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbjsgfQorCisgICAgdm9p
ZCByZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgc2V0
UmVzdWx0KGNvbnN0IElEQktleURhdGEqKTsKKyAgICB2b2lkIHNldFJlc3VsdCh1aW50NjRfdCk7
CisgICAgdm9pZCBzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYpOworICAgIHZvaWQgc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKKworICAgIElEQkFu
eSogbW9kZXJuUmVzdWx0KCkgeyByZXR1cm4gbV9yZXN1bHQuZ2V0KCk7IH0KKworICAgIHZvaWQg
d2lsbEl0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJik7CisgICAgdm9pZCBkaWRPcGVuT3JJdGVyYXRl
Q3Vyc29yKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIGNvbnN0IElEQkN1cnNvciogcGVu
ZGluZ0N1cnNvcigpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ0N1cnNvci5nZXQoKTsgfQorCisg
ICAgdm9pZCBzZXRTb3VyY2UoSURCQ3Vyc29yJik7CisgICAgdm9pZCBzZXRWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKKworICAgIEluZGV4ZWREQjo6UmVxdWVzdFR5
cGUgcmVxdWVzdFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RUeXBlOyB9CisKKyAgICAv
LyBBY3RpdmVET01PYmplY3QuCisgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CiAKIHByb3RlY3RlZDoKLSAgICBJREJSZXF1ZXN0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBJREJSZXF1ZXN0KElEQkNsaWVudDo6SURCQ29u
bmVjdGlvblRvU2VydmVyJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworICAgIElEQlJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgSURCVHJhbnNhY3Rp
b24mKTsKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJDdXJzb3Im
LCBJREJUcmFuc2FjdGlvbiYpOworICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIElEQkluZGV4JiwgSURCVHJhbnNhY3Rpb24mKTsKKyAgICBJREJSZXF1ZXN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBJ
REJUcmFuc2FjdGlvbiYpOworCisgICAgLy8gRXZlbnRUYXJnZXQuCisgICAgdm9pZCByZWZFdmVu
dFRhcmdldCgpIGZpbmFsIHsgUmVmQ291bnRlZDxJREJSZXF1ZXN0Pjo6cmVmKCk7IH0KKyAgICB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46OmRl
cmVmKCk7IH0KKyAgICB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKSBmaW5h
bDsKKworICAgIHZpcnR1YWwgYm9vbCBpc09wZW5EQlJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorCisgICAgSURCUmVxdWVzdFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlIHsgSURCUmVx
dWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcgfTsKKyAgICBSZWZQdHI8SURCQW55PiBtX3Jlc3VsdDsK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgYm9vbCBtX3No
b3VsZEV4cG9zZVRyYW5zYWN0aW9uVG9ET00geyB0cnVlIH07CisgICAgUmVmUHRyPERPTUVycm9y
PiBtX2RvbUVycm9yOworICAgIElEQkVycm9yIG1faWRiRXJyb3I7CisgICAgSW5kZXhlZERCOjpS
ZXF1ZXN0VHlwZSBtX3JlcXVlc3RUeXBlID0geyBJbmRleGVkREI6OlJlcXVlc3RUeXBlOjpPdGhl
ciB9OworICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZCB7IGZhbHNlIH07CisKKyAgICBFdmVudCog
bV9vcGVuRGF0YWJhc2VTdWNjZXNzRXZlbnQgeyBudWxscHRyIH07CisKK3ByaXZhdGU6CisgICAg
dm9pZCBvbkVycm9yKCk7CisgICAgdm9pZCBvblN1Y2Nlc3MoKTsKKworICAgIElEQkN1cnNvciog
cmVzdWx0Q3Vyc29yKCk7CisKKyAgICBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYg
bV9jb25uZWN0aW9uOworICAgIElEQlJlc291cmNlSWRlbnRpZmllciBtX3Jlc291cmNlSWRlbnRp
ZmllcjsKKyAgICBSZWZQdHI8SURCQW55PiBtX3NvdXJjZTsKKyAgICBib29sIG1faGFzUGVuZGlu
Z0FjdGl2aXR5IHsgdHJ1ZSB9OworICAgIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIG1fcmVx
dWVzdGVkSW5kZXhSZWNvcmRUeXBlOworCisgICAgUmVmUHRyPElEQkN1cnNvcj4gbV9wZW5kaW5n
Q3Vyc29yOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlR3VhcmQ+IG1fY3Vyc29yUmVxdWVz
dE5vdGlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBMZWdhY3lSZXF1ZXN0X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0
aW9uRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dENvbXBsZXRpb25FdmVudC5jcHAKaW5kZXggMGJlYzZlMy4uMTAwYTQxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdENvbXBsZXRpb25FdmVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdENv
bXBsZXRpb25FdmVudC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1JREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50OjpJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJs
ZSwgSURCQ2xpZW50OjpJREJSZXF1ZXN0JiByZXF1ZXN0KQorSURCUmVxdWVzdENvbXBsZXRpb25F
dmVudDo6SURCUmVxdWVzdENvbXBsZXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUs
IGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIElEQlJlcXVlc3QmIHJlcXVlc3QpCiAg
ICAgOiBFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUpCiAgICAgLCBtX3JlcXVlc3Qo
cmVxdWVzdCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaAppbmRleCAwZDQwZTI0Li43ZmE5OTQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
Q29tcGxldGlvbkV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5oCkBAIC0yOSwyMSArMjksMjEgQEAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiSURC
UmVxdWVzdEltcGwuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgSURCUmVxdWVzdENvbXBsZXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgSURCQ2xpZW50OjpJREJS
ZXF1ZXN0JiByZXF1ZXN0KQorICAgIHN0YXRpYyBSZWY8RXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIElEQlJlcXVl
c3QmIHJlcXVlc3QpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1
ZXN0Q29tcGxldGlvbkV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgcmVxdWVzdCkp
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgSURC
Q2xpZW50OjpJREJSZXF1ZXN0Jik7CisgICAgSURCUmVxdWVzdENvbXBsZXRpb25FdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIElE
QlJlcXVlc3QmKTsKIAotICAgIFJlZjxJREJDbGllbnQ6OklEQlJlcXVlc3Q+IG1fcmVxdWVzdDsK
KyAgICBSZWY8SURCUmVxdWVzdD4gbV9yZXF1ZXN0OwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggMjU5ZmJm
MC4uNGViZDYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMjgsMTYgKzI4LDI4IEBACiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJE
T01FcnJvci5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgor
I2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJFcnJvci5o
IgorI2luY2x1ZGUgIklEQkV2ZW50RGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgIklEQktleURhdGEu
aCIKKyNpbmNsdWRlICJJREJLZXlSYW5nZURhdGEuaCIKKyNpbmNsdWRlICJJREJPYmplY3RTdG9y
ZS5oIgorI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0
LmgiCisjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFz
ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiVHJhbnNhY3Rpb25PcGVyYXRpb24uaCIKICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJUcmFuc2FjdGlv
bjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6
IEFjdGl2ZURPTU9iamVjdChjb250ZXh0KQotewotfQotCiBjb25zdCBBdG9taWNTdHJpbmcmIElE
QlRyYW5zYWN0aW9uOjptb2RlUmVhZE9ubHkoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxBdG9taWNTdHJpbmc+IHJlYWRvbmx5KCJyZWFkb25seSIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwpAQCAtOTcsNiArMTA5LDg1OCBAQCBjb25zdCBBdG9taWNTdHJpbmcm
IElEQlRyYW5zYWN0aW9uOjptb2RlVG9TdHJpbmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUg
bW9kZQogICAgIHJldHVybiBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRPbmx5KCk7CiB9CiAKK1Jl
ZjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShJREJEYXRhYmFzZSYgZGF0
YWJhc2UsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBJREJUcmFuc2FjdGlvbihkYXRhYmFzZSwgaW5mbywgbnVsbHB0cikpOworfQor
CitSZWY8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoSURCRGF0YWJhc2Um
IGRhdGFiYXNlLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8sIElEQk9wZW5EQlJlcXVl
c3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCVHJhbnNhY3Rpb24o
ZGF0YWJhc2UsIGluZm8sICZyZXF1ZXN0KSk7Cit9CisKK0lEQlRyYW5zYWN0aW9uOjpJREJUcmFu
c2FjdGlvbihJREJEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYg
aW5mbywgSURCT3BlbkRCUmVxdWVzdCogcmVxdWVzdCkKKyAgICA6IFdlYkNvcmU6OkFjdGl2ZURP
TU9iamVjdChkYXRhYmFzZS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2RhdGFi
YXNlKGRhdGFiYXNlKQorICAgICwgbV9pbmZvKGluZm8pCisgICAgLCBtX29wZXJhdGlvblRpbWVy
KCp0aGlzLCAmSURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX29w
ZW5EQlJlcXVlc3QocmVxdWVzdCkKKworeworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6SURCVHJhbnNhY3Rpb24gLSAlcyIsIG1faW5mby5sb2dnaW5nU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisKKyAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKKworICAgIGlmICht
X2luZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdl
KSB7CisgICAgICAgIEFTU0VSVChtX29wZW5EQlJlcXVlc3QpOworICAgICAgICBtX29wZW5EQlJl
cXVlc3QtPnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbigqdGhpcyk7CisgICAgICAgIG1fc3Rh
cnRlZE9uU2VydmVyID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBhY3RpdmF0ZSgpOwor
CisgICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gc2VsZjsKKyAgICAgICAgSlNDOjpWTSYg
dm0gPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7CisgICAgICAgIHZtLndoZW5JZGxlKFtz
ZWxmLCB0aGlzXSgpIHsKKyAgICAgICAgICAgIGRlYWN0aXZhdGUoKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgZXN0YWJsaXNoT25TZXJ2ZXIoKTsKKyAgICB9CisKKyAgICBzdXNwZW5kSWZOZWVk
ZWQoKTsKK30KKworSURCVHJhbnNhY3Rpb246On5JREJUcmFuc2FjdGlvbigpCit7Cit9CisKK2Nv
bnN0IFN0cmluZyYgSURCVHJhbnNhY3Rpb246Om1vZGUoKSBjb25zdAoreworICAgIHN3aXRjaCAo
bV9pbmZvLm1vZGUoKSkgeworICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJl
YWRPbmx5OgorICAgICAgICByZXR1cm4gSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkT25seSgpOwor
ICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRXcml0ZToKKyAgICAgICAg
cmV0dXJuIElEQlRyYW5zYWN0aW9uOjptb2RlUmVhZFdyaXRlKCk7CisgICAgY2FzZSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZToKKyAgICAgICAgcmV0dXJuIElEQlRy
YW5zYWN0aW9uOjptb2RlVmVyc2lvbkNoYW5nZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1dlYkNvcmU6OklEQkRhdGFiYXNlKiBJREJUcmFuc2Fj
dGlvbjo6ZGIoKQoreworICAgIHJldHVybiAmbV9kYXRhYmFzZS5nZXQoKTsKK30KKworSURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIElEQlRyYW5zYWN0aW9uOjpzZXJ2ZXJDb25uZWN0
aW9uKCkKK3sKKyAgICByZXR1cm4gbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpOworfQor
CitSZWZQdHI8RE9NRXJyb3I+IElEQlRyYW5zYWN0aW9uOjplcnJvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZG9tRXJyb3I7Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4g
SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUiKTsKKworICAgIGlmICghc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChpc0ZpbmlzaGVk
T3JGaW5pc2hpbmcoKSkgeworICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkludmFsaWRTdGF0ZUVycm9yOworICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0U3RvcmUnIG9uICdJREJUcmFuc2FjdGlvbic6IFRoZSB0
cmFuc2FjdGlvbiBmaW5pc2hlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgYXV0byBpdGVyYXRvciA9IG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy5maW5kKG9iamVj
dFN0b3JlTmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yICE9IG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jl
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKworICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9pbmZvLm9iamVjdFN0
b3JlcygpKSB7CisgICAgICAgIGlmIChvYmplY3RTdG9yZSA9PSBvYmplY3RTdG9yZU5hbWUpIHsK
KyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgYXV0byogaW5mbyA9IG1fZGF0YWJhc2UtPmluZm8oKS5pbmZvRm9yRXhp
c3RpbmdPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpOworICAgIGlmICghaW5mbykgeworICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7CisgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvYmplY3RT
dG9yZScgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHNwZWNpZmllZCBvYmplY3Qgc3RvcmUgd2Fz
IG5vdCBmb3VuZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8g
VmVyc2lvbiBjaGFuZ2UgdHJhbnNhY3Rpb25zIGFyZSBzY29wZWQgdG8gZXZlcnkgb2JqZWN0IHN0
b3JlIGluIHRoZSBkYXRhYmFzZS4KKyAgICBpZiAoIWluZm8gfHwgKCFmb3VuZCAmJiAhaXNWZXJz
aW9uQ2hhbmdlKCkpKSB7CisgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tm90Rm91bmRFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ29iamVjdFN0b3JlJyBvbiAnSURCVHJhbnNhY3Rpb24nOiBUaGUgc3BlY2lm
aWVkIG9iamVjdCBzdG9yZSB3YXMgbm90IGZvdW5kLiIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBhdXRvIG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZSgqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAqaW5mbywgKnRoaXMpOworICAgIG1fcmVmZXJl
bmNlZE9iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVOYW1lLCAmb2JqZWN0U3RvcmUuZ2V0KCkp
OworCisgICAgcmV0dXJuIGFkb3B0UmVmKCZvYmplY3RTdG9yZS5sZWFrUmVmKCkpOworfQorCisK
K3ZvaWQgSURCVHJhbnNhY3Rpb246OmFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0KERPTUVycm9yJiBl
cnJvcikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmFib3J0RHVlVG9G
YWlsZWRSZXF1ZXN0Iik7CisgICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2RvbUVycm9yID0gJmVycm9yOworICAgIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSBlYzsKKyAgICBhYm9ydChlYyk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246
OnRyYW5zaXRpb25lZFRvRmluaXNoaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZSBzdGF0
ZSkKK3sKKyAgICBBU1NFUlQoIWlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKKyAgICBtX3N0YXRl
ID0gc3RhdGU7CisgICAgQVNTRVJUKGlzRmluaXNoZWRPckZpbmlzaGluZygpKTsKKyAgICBtX3Jl
ZmVyZW5jZWRPYmplY3RTdG9yZXMuY2xlYXIoKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6
YWJvcnQoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKK3sKKyAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmFib3J0Iik7CisKKyAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNo
aW5nKCkpIHsKKyAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlk
U3RhdGVFcnJvcjsKKyAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2Fib3J0JyBvbiAnSURCVHJhbnNhY3Rpb24nOiBUaGUgdHJhbnNhY3Rpb24gaXMg
aW5hY3RpdmUgb3IgZmluaXNoZWQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2RhdGFiYXNlLT53aWxsQWJvcnRUcmFuc2FjdGlvbigqdGhpcyk7CisKKyAgICBpZiAoaXNWZXJz
aW9uQ2hhbmdlKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1fcmVmZXJl
bmNlZE9iamVjdFN0b3Jlcy52YWx1ZXMoKSkKKyAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yb2xs
YmFja0luZm9Gb3JWZXJzaW9uQ2hhbmdlQWJvcnQoKTsKKyAgICB9CisKKyAgICB0cmFuc2l0aW9u
ZWRUb0ZpbmlzaGluZyhJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkFib3J0aW5nKTsKKyAg
ICAKKyAgICBtX2Fib3J0UXVldWUuc3dhcChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUpOwor
CisgICAgYXV0byBvcGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0
aW9uKCp0aGlzLCBudWxscHRyLCAmSURCVHJhbnNhY3Rpb246OmFib3J0T25TZXJ2ZXJBbmRDYW5j
ZWxSZXF1ZXN0cyk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnRPblNlcnZlckFuZENhbmNlbFJlcXVlc3Rz
KElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbikKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmFib3J0T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0
cyIpOworCisgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25RdWV1ZS5pc0VtcHR5KCkp
OworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLmFib3J0VHJhbnNhY3Rpb24oKnRoaXMpOworCisg
ICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuY29udGFpbnMob3BlcmF0aW9uLmlk
ZW50aWZpZXIoKSkpOworICAgIG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAucmVtb3ZlKG9wZXJh
dGlvbi5pZGVudGlmaWVyKCkpOworCisgICAgSURCRXJyb3IgZXJyb3IoSURCRGF0YWJhc2VFeGNl
cHRpb246OkFib3J0RXJyb3IpOworICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDogbV9hYm9ydFF1
ZXVlKQorICAgICAgICBvcGVyYXRpb24tPmNvbXBsZXRlZChJREJSZXN1bHREYXRhOjplcnJvcihv
cGVyYXRpb24tPmlkZW50aWZpZXIoKSwgZXJyb3IpKTsKKworICAgIC8vIFNpbmNlIHdlJ3JlIGFi
b3J0aW5nLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSB0byBoYXZlIHF1ZXVlZCBhbnkgZnVydGhl
ciBvcGVyYXRpb25zLgorICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuaXNF
bXB0eSgpKTsKK30KKworY29uc3QgY2hhciogSURCVHJhbnNhY3Rpb246OmFjdGl2ZURPTU9iamVj
dE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiSURCVHJhbnNhY3Rpb24iOworfQorCitib29s
IElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb246Omhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2NvbnRleHRTdG9wcGVkICYmIG1f
c3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsKK30KKwordm9p
ZCBJREJUcmFuc2FjdGlvbjo6c3RvcCgpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpzdG9wIik7CisKKyAgICAvLyBJREJEYXRhYmFzZTo6c3RvcCgpIGNhbGxzIElEQlRy
YW5zYWN0aW9uOjpzdG9wKCkgZm9yIGVhY2ggb2YgaXRzIGFjdGl2ZSB0cmFuc2FjdGlvbnMuCisg
ICAgLy8gU2luY2UgdGhlIG9yZGVyIG9mIGNhbGxpbmcgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCkg
aXMgcmFuZG9tLCB3ZSBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBzdG9wcGVkLgorICAgIGlmICht
X2NvbnRleHRTdG9wcGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHRTdG9wcGVk
ID0gdHJ1ZTsKKworICAgIGlmIChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjOworICAgIGFib3J0KGVjKTsK
K30KKworYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWN0aXZlOworfQorCiti
b29sIElEQlRyYW5zYWN0aW9uOjppc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6Q29tbWl0dGlu
ZworICAgICAgICB8fCBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWJv
cnRpbmcKKyAgICAgICAgfHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6
OkZpbmlzaGVkOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjphZGRSZXF1ZXN0KElEQlJlcXVl
c3QmIHJlcXVlc3QpCit7CisgICAgbV9vcGVuUmVxdWVzdHMuYWRkKCZyZXF1ZXN0KTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbjo6cmVtb3ZlUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQor
eworICAgIEFTU0VSVChtX29wZW5SZXF1ZXN0cy5jb250YWlucygmcmVxdWVzdCkpOworICAgIG1f
b3BlblJlcXVlc3RzLnJlbW92ZSgmcmVxdWVzdCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246
OnNjaGVkdWxlT3BlcmF0aW9uKFJlZlB0cjxJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9u
PiYmIG9wZXJhdGlvbikKK3sKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAu
Y29udGFpbnMob3BlcmF0aW9uLT5pZGVudGlmaWVyKCkpKTsKKworICAgIG1fdHJhbnNhY3Rpb25P
cGVyYXRpb25RdWV1ZS5hcHBlbmQob3BlcmF0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9uT3BlcmF0
aW9uTWFwLnNldChvcGVyYXRpb24tPmlkZW50aWZpZXIoKSwgV1RGTW92ZShvcGVyYXRpb24pKTsK
KworICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlv
bjo6c2NoZWR1bGVPcGVyYXRpb25UaW1lcigpCit7CisgICAgaWYgKCFtX29wZXJhdGlvblRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fb3BlcmF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwor
fQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVyRmlyZWQgKCVwKSIs
IHRoaXMpOworCisgICAgaWYgKCFtX3N0YXJ0ZWRPblNlcnZlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGF1dG8gb3BlcmF0aW9uID0gbV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlLnRha2VGaXJz
dCgpOworICAgICAgICBvcGVyYXRpb24tPnBlcmZvcm0oKTsKKworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmlzRW1wdHkoKSB8fCAh
bV9vcGVuUmVxdWVzdHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWlz
RmluaXNoZWRPckZpbmlzaGluZygpKQorICAgICAgICBjb21taXQoKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbjo6Y29tbWl0KCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmNvbW1pdCIpOworCisgICAgQVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CisK
KyAgICB0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyhJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6
OkNvbW1pdHRpbmcpOworICAgIG1fZGF0YWJhc2UtPndpbGxDb21taXRUcmFuc2FjdGlvbigqdGhp
cyk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IElEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25P
cGVyYXRpb24oKnRoaXMsIG51bGxwdHIsICZJREJUcmFuc2FjdGlvbjo6Y29tbWl0T25TZXJ2ZXIp
OworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb246OmNvbW1pdE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVy
YXRpb24mIG9wZXJhdGlvbikKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246
OmNvbW1pdE9uU2VydmVyIik7CisgICAgc2VydmVyQ29ubmVjdGlvbigpLmNvbW1pdFRyYW5zYWN0
aW9uKCp0aGlzKTsKKworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmNvbnRh
aW5zKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpKTsKKyAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9u
TWFwLnJlbW92ZShvcGVyYXRpb24uaWRlbnRpZmllcigpKTsKK30KKwordm9pZCBJREJUcmFuc2Fj
dGlvbjo6ZmluaXNoQWJvcnRPckNvbW1pdCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gSW5k
ZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCk7CisgICAgbV9zdGF0ZSA9IEluZGV4
ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b246OmRpZFN0YXJ0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKK3sKKyAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmRpZFN0YXJ0Iik7CisKKyAgICBtX2RhdGFiYXNlLT5kaWRTdGFy
dFRyYW5zYWN0aW9uKCp0aGlzKTsKKworICAgIG1fc3RhcnRlZE9uU2VydmVyID0gdHJ1ZTsKKwor
ICAgIC8vIEl0J3MgcG9zc2libGUgdGhlIHRyYW5zYWN0aW9uIGZhaWxlZCB0byBzdGFydCBvbiB0
aGUgc2VydmVyLgorICAgIC8vIFRoYXQgZXF1YXRlcyB0byBhbiBhYm9ydC4KKyAgICBpZiAoIWVy
cm9yLmlzTnVsbCgpKSB7CisgICAgICAgIGRpZEFib3J0KGVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsKK30KKwordm9pZCBJREJU
cmFuc2FjdGlvbjo6bm90aWZ5RGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQoreworICAg
IG1fZGF0YWJhc2UtPmRpZEFib3J0VHJhbnNhY3Rpb24oKnRoaXMpOworICAgIG1faWRiRXJyb3Ig
PSBlcnJvcjsKKyAgICBmaXJlT25BYm9ydCgpOworCisgICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgp
KSB7CisgICAgICAgIEFTU0VSVChtX29wZW5EQlJlcXVlc3QpOworICAgICAgICBtX29wZW5EQlJl
cXVlc3QtPmZpcmVFcnJvckFmdGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKTsKKyAgICB9Cit9
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEFib3J0KGNvbnN0IElEQkVycm9yJiBlcnJvcikK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEFib3J0Iik7CisKKyAg
ICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBub3RpZnlEaWRBYm9ydChlcnJvcik7CisKKyAgICBmaW5p
c2hBYm9ydE9yQ29tbWl0KCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENvbW1pdChj
b25zdCBJREJFcnJvciYgZXJyb3IpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpkaWRDb21taXQiKTsKKworICAgIEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25TdGF0ZTo6Q29tbWl0dGluZyk7CisKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsK
KyAgICAgICAgbV9kYXRhYmFzZS0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24oKnRoaXMpOworICAgICAg
ICBmaXJlT25Db21wbGV0ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZGF0YWJhc2UtPndp
bGxBYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKKyAgICAgICAgbm90aWZ5RGlkQWJvcnQoZXJyb3Ip
OworICAgIH0KKworICAgIGZpbmlzaEFib3J0T3JDb21taXQoKTsKK30KKwordm9pZCBJREJUcmFu
c2FjdGlvbjo6ZmlyZU9uQ29tcGxldGUoKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6ZmlyZU9uQ29tcGxldGUiKTsKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb246OmZpcmVPbkFib3J0KCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURC
VHJhbnNhY3Rpb246OmZpcmVPbkFib3J0Iik7CisgICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIHRydWUsIGZhbHNlKSk7Cit9CisKK3ZvaWQgSURC
VHJhbnNhY3Rpb246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCit7CisgICAgQVNT
RVJUKG1fc3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCk7CisK
KyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2NvbnRleHRTdG9wcGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEZNb3ZlKGV2
ZW50KSk7Cit9CisKK2Jvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2
ZW50KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVu
dCIpOworCisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgQVNTRVJU
KCFtX2NvbnRleHRTdG9wcGVkKTsKKyAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7
CisgICAgQVNTRVJUKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8
fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOworCisgICAgVmVjdG9y
PFJlZlB0cjxFdmVudFRhcmdldD4+IHRhcmdldHM7CisgICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7
CisgICAgdGFyZ2V0cy5hcHBlbmQoZGIoKSk7CisKKyAgICBib29sIHJlc3VsdCA9IElEQkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOworCisgICAgaWYgKGlzVmVyc2lv
bkNoYW5nZSgpKSB7CisgICAgICAgIEFTU0VSVChtX29wZW5EQlJlcXVlc3QpOworICAgICAgICBt
X29wZW5EQlJlcXVlc3QtPnZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbkRpZEZpbmlzaCgpOworCisg
ICAgICAgIGlmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQpIHsK
KyAgICAgICAgICAgIGlmIChtX2RhdGFiYXNlLT5pc0Nsb3NpbmdPckNsb3NlZCgpKQorICAgICAg
ICAgICAgICAgIG1fb3BlbkRCUmVxdWVzdC0+ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29t
cGxldGlvbigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fb3BlbkRCUmVx
dWVzdC0+ZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1fb3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworUmVmPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQoreworICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKKyAgICBBU1NF
UlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOworCisgICAgUmVmPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0
b3JlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgaW5mbywgKnRoaXMpOworICAg
IG1fcmVmZXJlbmNlZE9iamVjdFN0b3Jlcy5zZXQoaW5mby5uYW1lKCksICZvYmplY3RTdG9yZS5n
ZXQoKSk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IElEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rp
b25PcGVyYXRpb24oKnRoaXMsICZJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0U3RvcmVP
blNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyLCBpbmZv
KTsKKyAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOworCisgICAgcmV0
dXJuIG9iamVjdFN0b3JlOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RT
dG9yZU9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlciIpOworCisgICAgQVNTRVJU
KGlzVmVyc2lvbkNoYW5nZSgpKTsKKworICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24o
KS5jcmVhdGVPYmplY3RTdG9yZShvcGVyYXRpb24sIGluZm8pOworfQorCit2b2lkIElEQlRyYW5z
YWN0aW9uOjpkaWRDcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEm
IHJlc3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRD
cmVhdGVPYmplY3RTdG9yZU9uU2VydmVyIik7CisKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERh
dGEsIHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkNyZWF0ZU9iamVjdFN0b3Jl
U3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxJREJJbmRleD4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4
KElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgiKTsKKyAg
ICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBvcGVyYXRpb24g
PSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAmSURCVHJhbnNh
Y3Rpb246OmRpZENyZWF0ZUluZGV4T25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5k
ZXhPblNlcnZlciwgaW5mbyk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRp
b24pKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPElEQkluZGV4Pigqc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBpbmZvLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNh
Y3Rpb246OmNyZWF0ZUluZGV4T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
biYgb3BlcmF0aW9uLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCit7CisgICAgTE9HKEluZGV4
ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleE9uU2VydmVyIik7CisKKyAgICBBU1NF
UlQoaXNWZXJzaW9uQ2hhbmdlKCkpOworCisgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlv
bigpLmNyZWF0ZUluZGV4KG9wZXJhdGlvbiwgaW5mbyk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rp
b246OmRpZENyZWF0ZUluZGV4T25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZENyZWF0ZUluZGV4
T25TZXJ2ZXIiKTsKKworICAgIGlmIChyZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBl
OjpDcmVhdGVJbmRleFN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChyZXN1
bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7CisKKyAgICAvLyBUaGlzIG9w
ZXJhdGlvbiBtaWdodCBoYXZlIGZhaWxlZCBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbiBpcyBhbHJl
YWR5IGFib3J0aW5nLgorICAgIGlmIChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6QWJvcnRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE90aGVyd2lzZSwgZmFp
bHVyZSB0byBjcmVhdGUgYW4gaW5kZXggZm9yY2VkIGFib3J0aW9uIG9mIHRoZSB0cmFuc2FjdGlv
bi4KKyAgICBhYm9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01FcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUocmVzdWx0RGF0YS5lcnJvcigpLmNvZGUoKSkpKTsK
K30KKworUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3Rv
cmUsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvciIpOworCisgICAgcmV0dXJuIGRvUmVxdWVz
dE9wZW5DdXJzb3IoY29udGV4dCwgSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoKnRoaXMsIG9i
amVjdFN0b3JlLCBpbmZvKSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6
cmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5k
ZXgmIGluZGV4LCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQoreworICAgIExPRyhJbmRleGVk
REIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IiKTsKKworICAgIGlmIChpbmZv
LmN1cnNvclR5cGUoKSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHkpCisgICAgICAg
IHJldHVybiBkb1JlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsIElEQkN1cnNvcjo6Y3JlYXRlKCp0
aGlzLCBpbmRleCwgaW5mbykpOworCisgICAgcmV0dXJuIGRvUmVxdWVzdE9wZW5DdXJzb3IoY29u
dGV4dCwgSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoKnRoaXMsIGluZGV4LCBpbmZvKSk7Cit9
CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6ZG9SZXF1ZXN0T3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBSZWY8SURCQ3Vyc29yPiYmIGN1cnNvcikK
K3sKKyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVz
dCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBjdXJzb3IuZ2V0KCksICp0aGlzKTsKKyAg
ICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOworCisgICAgYXV0byBvcGVyYXRpb24gPSBJREJD
bGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgpLCAm
SURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpv
cGVuQ3Vyc29yT25TZXJ2ZXIsIGN1cnNvci0+aW5mbygpKTsKKyAgICBzY2hlZHVsZU9wZXJhdGlv
bihXVEZNb3ZlKG9wZXJhdGlvbikpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQg
SURCVHJhbnNhY3Rpb246Om9wZW5DdXJzb3JPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9u
T3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCit7CisgICAg
TE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIiKTsKKwor
ICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5vcGVuQ3Vyc29yKG9wZXJhdGlvbiwg
aW5mbyk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZlcihJ
REJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQorewor
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkT3BlbkN1cnNvck9uU2VydmVy
Iik7CisKKyAgICByZXF1ZXN0LmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IocmVzdWx0RGF0YSk7Cit9
CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJiBjdXJzb3Is
IGNvbnN0IElEQktleURhdGEmIGtleSwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKyAgICBMT0co
SW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IiKTsKKyAgICBBU1NFUlQo
aXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKGN1cnNvci5yZXF1ZXN0KCkpOworCisgICAgYWRkUmVx
dWVzdCgqY3Vyc29yLnJlcXVlc3QoKSk7CisKKyAgICBhdXRvIG9wZXJhdGlvbiA9IElEQkNsaWVu
dDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICpjdXJzb3IucmVxdWVzdCgpLCAm
SURCVHJhbnNhY3Rpb246OmRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlciwgJklEQlRyYW5zYWN0aW9u
OjppdGVyYXRlQ3Vyc29yT25TZXJ2ZXIsIGtleSwgY291bnQpOworICAgIHNjaGVkdWxlT3BlcmF0
aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Oml0ZXJh
dGVDdXJzb3JPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRp
b24sIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgdW5zaWduZWQgbG9uZyYgY291bnQpCit7
CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yT25TZXJ2
ZXIiKTsKKworICAgIHNlcnZlckNvbm5lY3Rpb24oKS5pdGVyYXRlQ3Vyc29yKG9wZXJhdGlvbiwg
a2V5LCBjb3VudCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEl0ZXJhdGVDdXJzb3JP
blNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHRE
YXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkSXRlcmF0ZUN1
cnNvck9uU2VydmVyIik7CisKKyAgICByZXF1ZXN0LmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IocmVz
dWx0RGF0YSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdl
dFJlY29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYg
b2JqZWN0U3RvcmUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQoreworICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFJlY29yZCIpOworICAg
IEFTU0VSVChpc0FjdGl2ZSgpKTsKKyAgICBBU1NFUlQoIWtleVJhbmdlRGF0YS5pc051bGwpOwor
CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKKyAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwor
CisgICAgYXV0byBvcGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0
aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9u
U2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyLCBrZXlSYW5nZURhdGEp
OworICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICByZXR1
cm4gcmVxdWVzdDsKK30KKworUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
R2V0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlIik7CisgICAgcmV0dXJuIHJlcXVlc3RJbmRl
eFJlY29yZChjb250ZXh0LCBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGU6OlZhbHVl
LCByYW5nZSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdl
dEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5kZXgsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRy
YW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUiKTsKKyAgICByZXR1cm4gcmVxdWVzdEluZGV4UmVj
b3JkKGNvbnRleHQsIGluZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZTo6S2V5LCByYW5n
ZSk7Cit9CisKK1JlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEluZGV4UmVj
b3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSW5k
ZXhlZERCOjpJbmRleFJlY29yZFR5cGUgdHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJnJhbmdl
KQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVl
Iik7CisgICAgQVNTRVJUKGlzQWN0aXZlKCkpOworICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsK
KworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlR2V0KGNv
bnRleHQsIGluZGV4LCB0eXBlLCAqdGhpcyk7CisgICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgp
KTsKKworICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9w
ZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRHZXRSZWNv
cmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlciwgcmFuZ2UpOwor
ICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICByZXR1cm4g
cmVxdWVzdDsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2ZXIoSURC
Q2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
Z2V0UmVjb3JkT25TZXJ2ZXIiKTsKKworICAgIHNlcnZlckNvbm5lY3Rpb24oKS5nZXRSZWNvcmQo
b3BlcmF0aW9uLCBrZXlSYW5nZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZEdldFJl
Y29yZE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJl
c3VsdERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRHZXRS
ZWNvcmRPblNlcnZlciIpOworCisgICAgaWYgKHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3Vs
dFR5cGU6OkVycm9yKSB7CisgICAgICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHRE
YXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChyZXN1bHREYXRhLnR5
cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpHZXRSZWNvcmRTdWNjZXNzKTsKKworICAgIGNvbnN0IElE
QkdldFJlc3VsdCYgcmVzdWx0ID0gcmVzdWx0RGF0YS5nZXRSZXN1bHQoKTsKKworICAgIGlmIChy
ZXF1ZXN0LnNvdXJjZUluZGV4SWRlbnRpZmllcigpICYmIHJlcXVlc3QucmVxdWVzdGVkSW5kZXhS
ZWNvcmRUeXBlKCkgPT0gSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGU6OktleSkgeworICAgICAg
ICBpZiAoIXJlc3VsdC5rZXlEYXRhKCkuaXNOdWxsKCkpCisgICAgICAgICAgICByZXF1ZXN0LnNl
dFJlc3VsdCgmcmVzdWx0LmtleURhdGEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
cXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
cmVzdWx0RGF0YS5nZXRSZXN1bHQoKS52YWx1ZUJ1ZmZlcigpLmRhdGEoKSkKKyAgICAgICAgICAg
IHJlcXVlc3Quc2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUocmVzdWx0RGF0YS5nZXRSZXN1bHQo
KS52YWx1ZUJ1ZmZlcigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVxdWVzdC5zZXRS
ZXN1bHRUb1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRl
ZChyZXN1bHREYXRhKTsKK30KKworUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUm
IG9iamVjdFN0b3JlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQoreworICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50IChJREJPYmplY3RTdG9yZSki
KTsKKyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKCFyYW5nZS5pc051bGwpOwor
CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKKyAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwor
CisgICAgc2NoZWR1bGVPcGVyYXRpb24oSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJh
dGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRHZXRDb3VudE9u
U2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIsIHJhbmdlKSk7CisKKyAg
ICByZXR1cm4gcmVxdWVzdDsKK30KKworUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpy
ZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGlu
ZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQoreworICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50IChJREJJbmRleCkiKTsKKyAgICBBU1NFUlQo
aXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKCFyYW5nZS5pc051bGwpOworCisgICAgUmVmPElEQlJl
cXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGVDb3VudChjb250ZXh0LCBpbmRleCwg
KnRoaXMpOworICAgIGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7CisKKyAgICBzY2hlZHVsZU9w
ZXJhdGlvbihJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1
ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIsICZJREJUcmFu
c2FjdGlvbjo6Z2V0Q291bnRPblNlcnZlciwgcmFuZ2UpKTsKKworICAgIHJldHVybiByZXF1ZXN0
OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpnZXRDb3VudE9uU2VydmVyKElEQkNsaWVudDo6
VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBr
ZXlSYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmdldENvdW50
T25TZXJ2ZXIiKTsKKworICAgIHNlcnZlckNvbm5lY3Rpb24oKS5nZXRDb3VudChvcGVyYXRpb24s
IGtleVJhbmdlKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZl
cihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQor
eworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZl
ciIpOworCisgICAgcmVxdWVzdC5zZXRSZXN1bHQocmVzdWx0RGF0YS5yZXN1bHRJbnRlZ2VyKCkp
OworICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKK30KKworUmVmPElE
QlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0RGVsZXRlUmVjb3JkKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3Qg
SURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQiKTsKKyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Cisg
ICAgQVNTRVJUKCFyYW5nZS5pc051bGwpOworCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKKyAgICBh
ZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOworCisgICAgc2NoZWR1bGVPcGVyYXRpb24oSURCQ2xp
ZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklE
QlRyYW5zYWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpk
ZWxldGVSZWNvcmRPblNlcnZlciwgcmFuZ2UpKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFu
c2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJh
bmdlKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3Jk
T25TZXJ2ZXIiKTsKKworICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kZWxldGVSZWNvcmQob3BlcmF0
aW9uLCBrZXlSYW5nZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZVJlY29y
ZE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3Vs
dERhdGEpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVS
ZWNvcmRPblNlcnZlciIpOworCisgICAgcmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOwor
ICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKK30KKworUmVmPElEQlJl
cXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUpCit7Cisg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q2xlYXJPYmplY3RTdG9y
ZSIpOworICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKKworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1
ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7Cisg
ICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKKworICAgIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciA9IG9iamVjdFN0b3JlLmluZm8oKS5pZGVudGlmaWVyKCk7CisgICAgYXV0byBv
cGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCBy
ZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZl
ciwgJklEQlRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllcik7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsK
KworICAgIHJldHVybiByZXF1ZXN0OworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpjbGVhck9i
amVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0
aW9uLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyKQoreworICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9uU2VydmVyIik7CisK
KyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuY2xlYXJPYmplY3RTdG9yZShvcGVyYXRpb24sIG9iamVj
dFN0b3JlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENsZWFyT2Jq
ZWN0U3RvcmVPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRh
JiByZXN1bHREYXRhKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlk
Q2xlYXJPYmplY3RTdG9yZU9uU2VydmVyIik7CisKKyAgICByZXF1ZXN0LnNldFJlc3VsdFRvVW5k
ZWZpbmVkKCk7CisgICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOworfQor
CitSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIElE
QktleSoga2V5LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBJbmRleGVkREI6Ok9iamVj
dFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRkIik7CisgICAgQVNTRVJUKGlzQWN0aXZl
KCkpOworICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKKyAgICBBU1NFUlQob2JqZWN0U3RvcmUu
aW5mbygpLmF1dG9JbmNyZW1lbnQoKSB8fCBrZXkpOworCisgICAgUmVmPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsK
KyAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOworCisgICAgYXV0byBvcGVyYXRpb24gPSBJ
REJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgp
LCAmSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6
cHV0T3JBZGRPblNlcnZlciwga2V5LCAmdmFsdWUsIG92ZXJ3cml0ZU1vZGUpOworICAgIHNjaGVk
dWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7CisKKyAgICByZXR1cm4gcmVxdWVzdDsK
K30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlcihJREJDbGllbnQ6OlRy
YW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIFJlZlB0cjxJREJLZXk+IGtleSwgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3Rv
cmVPdmVyd3JpdGVNb2RlJiBvdmVyd3JpdGVNb2RlKQoreworICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlciIpOworCisgICAgQVNTRVJUKCFpc1JlYWRP
bmx5KCkpOworCisgICAgc2VydmVyQ29ubmVjdGlvbigpLnB1dE9yQWRkKG9wZXJhdGlvbiwga2V5
LCB2YWx1ZSwgb3ZlcndyaXRlTW9kZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmRpZFB1
dE9yQWRkT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYg
cmVzdWx0RGF0YSkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZFB1
dE9yQWRkT25TZXJ2ZXIiKTsKKworICAgIHJlcXVlc3Quc2V0UmVzdWx0KHJlc3VsdERhdGEucmVz
dWx0S2V5KCkpOworICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKK30K
Kwordm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBv
YmplY3RTdG9yZU5hbWUpCit7CisgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpk
ZWxldGVPYmplY3RTdG9yZSIpOworCisgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKKwor
ICAgIGlmIChhdXRvIG9iamVjdFN0b3JlID0gbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVzLnRha2Uo
b2JqZWN0U3RvcmVOYW1lKSkKKyAgICAgICAgb2JqZWN0U3RvcmUtPm1hcmtBc0RlbGV0ZWQoKTsK
KworICAgIGF1dG8gb3BlcmF0aW9uID0gSURCQ2xpZW50OjpjcmVhdGVUcmFuc2FjdGlvbk9wZXJh
dGlvbigqdGhpcywgJklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVPYmplY3RTdG9yZU9uU2VydmVy
LCAmSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIsIG9iamVjdFN0b3Jl
TmFtZSk7CisgICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKK30KKwor
dm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihJREJDbGllbnQ6
OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3Rv
cmVOYW1lKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2Jq
ZWN0U3RvcmVPblNlcnZlciIpOworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisKKyAg
ICBzZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRlT2JqZWN0U3RvcmUob3BlcmF0aW9uLCBvYmplY3RT
dG9yZU5hbWUpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVPYmplY3RTdG9y
ZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCit7CisgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVPYmplY3RTdG9yZU9uU2VydmVyIik7
CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHREYXRhLCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJS
ZXN1bHRUeXBlOjpEZWxldGVPYmplY3RTdG9yZVN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkg
PT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjpkZWxl
dGVJbmRleCh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5k
ZXhOYW1lKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5k
ZXgiKTsKKworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisKKyAgICBhdXRvIG9wZXJh
dGlvbiA9IElEQkNsaWVudDo6Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsICZJREJU
cmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpkZWxl
dGVJbmRleE9uU2VydmVyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7CisgICAg
c2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKK30KKwordm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0
aW9uJiBvcGVyYXRpb24sIGNvbnN0IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlciIpOworICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2Uo
KSk7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRlSW5kZXgob3BlcmF0aW9uLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246
OmRpZERlbGV0ZUluZGV4T25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkK
K3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4T25T
ZXJ2ZXIiKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEudHlwZSgp
ID09IElEQlJlc3VsdFR5cGU6OkRlbGV0ZUluZGV4U3VjY2VzcyB8fCByZXN1bHREYXRhLnR5cGUo
KSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9w
ZXJhdGlvbkRpZENvbXBsZXRlKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJh
dGlvbikKK3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5nZXQob3BlcmF0
aW9uLmlkZW50aWZpZXIoKSkgPT0gJm9wZXJhdGlvbik7CisgICAgbV90cmFuc2FjdGlvbk9wZXJh
dGlvbk1hcC5yZW1vdmUob3BlcmF0aW9uLmlkZW50aWZpZXIoKSk7CisKKyAgICBzY2hlZHVsZU9w
ZXJhdGlvblRpbWVyKCk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmVzdGFibGlzaE9uU2Vy
dmVyKCkKK3sKKyAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmVzdGFibGlzaE9u
U2VydmVyIik7CisKKyAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZXN0YWJsaXNoVHJhbnNhY3Rpb24o
KnRoaXMpOworfQorCit2b2lkIElEQlRyYW5zYWN0aW9uOjphY3RpdmF0ZSgpCit7CisgICAgaWYg
KGlzRmluaXNoZWRPckZpbmlzaGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRl
ID0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBY3RpdmU7Cit9CisKK3ZvaWQgSURCVHJh
bnNhY3Rpb246OmRlYWN0aXZhdGUoKQoreworICAgIGlmIChtX3N0YXRlID09IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6QWN0aXZlKQorICAgICAgICBtX3N0YXRlID0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblN0YXRlOjpJbmFjdGl2ZTsKKworICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaAppbmRleCA5ZTlhMGU4Li5lMjIzMTAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTIzLDMzICsyMyw0
MSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
SURCVHJhbnNhY3Rpb25faAotI2RlZmluZSBJREJUcmFuc2FjdGlvbl9oCisjcHJhZ21hIG9uY2UK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUlu
Zm8uaCIKKyNpbmNsdWRlICJJREJFcnJvci5oIgorI2luY2x1ZGUgIklEQkluZGV4LmgiCisjaW5j
bHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbi5oIgorI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5oIgotI2lu
Y2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRE9NRXJyb3I7CiBjbGFzcyBJREJDdXJzb3I7CitjbGFzcyBJREJDdXJzb3JJ
bmZvOwogY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJEYXRhYmFzZUVycm9yOworY2xhc3Mg
SURCSW5kZXg7CitjbGFzcyBJREJJbmRleEluZm87CitjbGFzcyBJREJLZXlEYXRhOwogY2xhc3Mg
SURCT2JqZWN0U3RvcmU7CitjbGFzcyBJREJPYmplY3RTdG9yZUluZm87CiBjbGFzcyBJREJPcGVu
REJSZXF1ZXN0OworY2xhc3MgSURCUmVzdWx0RGF0YTsKK3N0cnVjdCBJREJLZXlSYW5nZURhdGE7
CiAKLXN0cnVjdCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2U7CituYW1lc3BhY2UgSURCQ2xpZW50
IHsKK2NsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uOworfQogCiBjbGFzcyBJREJUcmFuc2FjdGlv
biA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0
V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHZp
cnR1YWwgfklEQlRyYW5zYWN0aW9uKCkgeyB9Ci0KICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBtb2RlUmVhZE9ubHkoKTsKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBtb2Rl
UmVhZFdyaXRlKCk7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZVZlcnNpb25D
aGFuZ2UoKTsKQEAgLTU5LDIyICs2NywxODQgQEAgcHVibGljOgogICAgIHN0YXRpYyBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZSBzdHJpbmdUb01vZGUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIG1vZGVUb1N0cmluZyhJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZSk7CiAKLSAgICAvLyBJbXBsZW1lbnQgdGhlIElEQlRyYW5z
YWN0aW9uIElETAotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBtb2RlKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgSURCRGF0YWJhc2UqIGRiKCkgPSAwOwotICAgIHZpcnR1YWwgUmVmUHRyPERP
TUVycm9yPiBlcnJvcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJPYmplY3RT
dG9yZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpID0gMDsKKyAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUoSURCRGF0
YWJhc2UmLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mKTsKKyAgICBzdGF0aWMgUmVmPElEQlRy
YW5zYWN0aW9uPiBjcmVhdGUoSURCRGF0YWJhc2UmLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8m
LCBJREJPcGVuREJSZXF1ZXN0Jik7CisKKyAgICB+SURCVHJhbnNhY3Rpb24oKSBmaW5hbDsKKwor
ICAgIC8vIElEQlRyYW5zYWN0aW9uIElETAorICAgIGNvbnN0IFN0cmluZyYgbW9kZSgpIGNvbnN0
OworICAgIFdlYkNvcmU6OklEQkRhdGFiYXNlKiBkYigpOworICAgIFJlZlB0cjxET01FcnJvcj4g
ZXJyb3IoKSBjb25zdDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IG9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7Cisg
ICAgdm9pZCBhYm9ydChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKKworICAgIEV2ZW50VGFy
Z2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
SURCVHJhbnNhY3Rpb25FdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KKyAgICB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPjo6cmVm
KCk7IH0KKyAgICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IFJlZkNvdW50ZWQ8SURC
VHJhbnNhY3Rpb24+OjpkZXJlZigpOyB9CisgICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3BhdGNo
RXZlbnQ7CisgICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50JikgZmluYWw7CiAKICAgICB1c2lu
ZyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCVHJhbnNhY3Rpb24+OjpkZXJlZjsKIAotcHJvdGVjdGVkOgotICAgIElEQlRyYW5zYWN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dCBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKworICAgIGNvbnN0IElEQlRyYW5zYWN0
aW9uSW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQorICAgIElEQkRhdGFiYXNl
JiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KKyAgICBjb25zdCBJREJE
YXRhYmFzZSYgZGF0YWJhc2UoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9Cisg
ICAgSURCRGF0YWJhc2VJbmZvKiBvcmlnaW5hbERhdGFiYXNlSW5mbygpIGNvbnN0IHsgcmV0dXJu
IG1faW5mby5vcmlnaW5hbERhdGFiYXNlSW5mbygpOyB9CisKKyAgICB2b2lkIGRpZFN0YXJ0KGNv
bnN0IElEQkVycm9yJik7CisgICAgdm9pZCBkaWRBYm9ydChjb25zdCBJREJFcnJvciYpOworICAg
IHZvaWQgZGlkQ29tbWl0KGNvbnN0IElEQkVycm9yJik7CisKKyAgICBib29sIGlzVmVyc2lvbkNo
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2Fj
dGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U7IH0KKyAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7
IHJldHVybiBtX2luZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFk
T25seTsgfQorICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKworICAgIFJlZjxJREJPYmplY3RT
dG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CisgICAg
c3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBjcmVhdGVJbmRleChJREJPYmplY3RTdG9yZSYsIGNv
bnN0IElEQkluZGV4SW5mbyYpOworCisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RQdXRPckFk
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBJREJLZXkqLCBTZXJp
YWxpemVkU2NyaXB0VmFsdWUmLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSk7
CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RHZXRSZWNvcmQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgUmVm
PElEQlJlcXVlc3Q+IHJlcXVlc3REZWxldGVSZWNvcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CisgICAgUmVmPElEQlJl
cXVlc3Q+IHJlcXVlc3RDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJPYmplY3RTdG9yZSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0Q291bnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
Jik7CisgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RDb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICBSZWY8SURCUmVx
dWVzdD4gcmVxdWVzdEdldFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0
S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYpOworICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7Cisg
ICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RPcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKKyAgICB2b2lkIGl0ZXJhdGVD
dXJzb3IoSURCQ3Vyc29yJiwgY29uc3QgSURCS2V5RGF0YSYsIHVuc2lnbmVkIGxvbmcgY291bnQp
OworCisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3Jl
TmFtZSk7CisgICAgdm9pZCBkZWxldGVJbmRleCh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKKworICAgIHZvaWQgYWRkUmVxdWVzdChJREJS
ZXF1ZXN0Jik7CisgICAgdm9pZCByZW1vdmVSZXF1ZXN0KElEQlJlcXVlc3QmKTsKKworICAgIHZv
aWQgYWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXJyb3ImKTsKKworICAgIElEQkNsaWVudDo6
SURCQ29ubmVjdGlvblRvU2VydmVyJiBzZXJ2ZXJDb25uZWN0aW9uKCk7CisKKyAgICB2b2lkIGFj
dGl2YXRlKCk7CisgICAgdm9pZCBkZWFjdGl2YXRlKCk7CisKKyAgICB2b2lkIG9wZXJhdGlvbkRp
ZENvbXBsZXRlKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mKTsKKworICAgIGJvb2wg
aXNGaW5pc2hlZE9yRmluaXNoaW5nKCkgY29uc3Q7CisgICAgYm9vbCBpc0ZpbmlzaGVkKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlz
aGVkOyB9CisKK3ByaXZhdGU6CisgICAgSURCVHJhbnNhY3Rpb24oSURCRGF0YWJhc2UmLCBjb25z
dCBJREJUcmFuc2FjdGlvbkluZm8mLCBJREJPcGVuREJSZXF1ZXN0Kik7CisKKyAgICB2b2lkIGNv
bW1pdCgpOworCisgICAgdm9pZCBub3RpZnlEaWRBYm9ydChjb25zdCBJREJFcnJvciYpOworICAg
IHZvaWQgZmluaXNoQWJvcnRPckNvbW1pdCgpOworCisgICAgdm9pZCBzY2hlZHVsZU9wZXJhdGlv
bihSZWZQdHI8SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4mJik7CisgICAgdm9pZCBv
cGVyYXRpb25UaW1lckZpcmVkKCk7CisKKyAgICB2b2lkIGZpcmVPbkNvbXBsZXRlKCk7CisgICAg
dm9pZCBmaXJlT25BYm9ydCgpOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7
CisKKyAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEluZGV4UmVjb3JkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJ
REJLZXlSYW5nZURhdGEmKTsKKworICAgIHZvaWQgY29tbWl0T25TZXJ2ZXIoSURCQ2xpZW50OjpU
cmFuc2FjdGlvbk9wZXJhdGlvbiYpOworICAgIHZvaWQgYWJvcnRPblNlcnZlckFuZENhbmNlbFJl
cXVlc3RzKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mKTsKKworICAgIHZvaWQgY3Jl
YXRlT2JqZWN0U3RvcmVPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7CisgICAgdm9pZCBkaWRDcmVhdGVPYmplY3RTdG9y
ZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgY3JlYXRlSW5kZXhP
blNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCSW5kZXhJ
bmZvJik7CisgICAgdm9pZCBkaWRDcmVhdGVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERh
dGEmKTsKKworICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZU9uU2VydmVyKElEQkNsaWVudDo6VHJh
bnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVy
KTsKKyAgICB2b2lkIGRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZlcihJREJSZXF1ZXN0JiwgY29u
c3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgdm9pZCBwdXRPckFkZE9uU2VydmVyKElEQkNsaWVu
dDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mLCBSZWZQdHI8SURCS2V5PiwgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2Rl
Jik7CisgICAgdm9pZCBkaWRQdXRPckFkZE9uU2VydmVyKElEQlJlcXVlc3QmLCBjb25zdCBJREJS
ZXN1bHREYXRhJik7CisKKyAgICB2b2lkIGdldFJlY29yZE9uU2VydmVyKElEQkNsaWVudDo6VHJh
bnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJLZXlSYW5nZURhdGEmKTsKKyAgICB2b2lkIGRp
ZEdldFJlY29yZE9uU2VydmVyKElEQlJlcXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRhJik7CisK
KyAgICB2b2lkIGdldENvdW50T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlv
biYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOworICAgIHZvaWQgZGlkR2V0Q291bnRPblNlcnZl
cihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgdm9pZCBkZWxldGVS
ZWNvcmRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJik7CisgICAgdm9pZCBkaWREZWxldGVSZWNvcmRPblNlcnZlcihJREJSZXF1
ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOworCisgICAgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZU9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBTdHJpbmcm
IG9iamVjdFN0b3JlTmFtZSk7CisgICAgdm9pZCBkaWREZWxldGVPYmplY3RTdG9yZU9uU2VydmVy
KGNvbnN0IElEQlJlc3VsdERhdGEmKTsKKworICAgIHZvaWQgZGVsZXRlSW5kZXhPblNlcnZlcihJ
REJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgdWludDY0X3QmIG9iamVjdFN0
b3JlSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOworICAgIHZvaWQgZGlkRGVs
ZXRlSW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1bHREYXRhJik7CisKKyAgICBSZWY8SURCUmVx
dWVzdD4gZG9SZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmPElE
QkN1cnNvcj4mJik7CisgICAgdm9pZCBvcGVuQ3Vyc29yT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFu
c2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKKyAgICB2b2lkIGRpZE9w
ZW5DdXJzb3JPblNlcnZlcihJREJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOworCisg
ICAgdm9pZCBpdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJh
dGlvbiYsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCB1bnNpZ25lZCBsb25nJiBjb3VudCk7Cisg
ICAgdm9pZCBkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVzdCYsIGNvbnN0IElEQlJl
c3VsdERhdGEmKTsKKworICAgIHZvaWQgdHJhbnNpdGlvbmVkVG9GaW5pc2hpbmcoSW5kZXhlZERC
OjpUcmFuc2FjdGlvblN0YXRlKTsKKworICAgIHZvaWQgZXN0YWJsaXNoT25TZXJ2ZXIoKTsKKwor
ICAgIHZvaWQgc2NoZWR1bGVPcGVyYXRpb25UaW1lcigpOworCisgICAgUmVmPElEQkRhdGFiYXNl
PiBtX2RhdGFiYXNlOworICAgIElEQlRyYW5zYWN0aW9uSW5mbyBtX2luZm87CisKKyAgICBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uU3RhdGUgbV9zdGF0ZSB7IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6SW5hY3RpdmUgfTsKKyAgICBib29sIG1fc3RhcnRlZE9uU2VydmVyIHsgZmFsc2UgfTsK
KworICAgIElEQkVycm9yIG1faWRiRXJyb3I7CisgICAgUmVmUHRyPERPTUVycm9yPiBtX2RvbUVy
cm9yOworCisgICAgVGltZXIgbV9vcGVyYXRpb25UaW1lcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VGltZXI+IG1fYWN0aXZhdGlvblRpbWVyOworCisgICAgUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+
IG1fb3BlbkRCUmVxdWVzdDsKKworICAgIERlcXVlPFJlZlB0cjxJREJDbGllbnQ6OlRyYW5zYWN0
aW9uT3BlcmF0aW9uPj4gbV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlOworICAgIERlcXVlPFJl
ZlB0cjxJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uPj4gbV9hYm9ydFF1ZXVlOworICAg
IEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCQ2xpZW50OjpUcmFuc2Fj
dGlvbk9wZXJhdGlvbj4+IG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXA7CisKKyAgICBIYXNoTWFw
PFN0cmluZywgUmVmUHRyPElEQk9iamVjdFN0b3JlPj4gbV9yZWZlcmVuY2VkT2JqZWN0U3RvcmVz
OworCisgICAgSGFzaFNldDxSZWZQdHI8SURCUmVxdWVzdD4+IG1fb3BlblJlcXVlc3RzOworCisg
ICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIFRyYW5zYWN0
aW9uQWN0aXZhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUcmFuc2FjdGlvbkFjdGl2
YXRvcik7CitwdWJsaWM6CisgICAgVHJhbnNhY3Rpb25BY3RpdmF0b3IoSURCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKQorICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAg
eworICAgICAgICBpZiAobV90cmFuc2FjdGlvbikKKyAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24t
PmFjdGl2YXRlKCk7CisgICAgfQorCisgICAgflRyYW5zYWN0aW9uQWN0aXZhdG9yKCkKKyAgICB7
CisgICAgICAgIGlmIChtX3RyYW5zYWN0aW9uKQorICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+
ZGVhY3RpdmF0ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJREJUcmFuc2FjdGlvbiogbV90
cmFuc2FjdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rpb25faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAKaW5kZXggZmU2YjU2ZS4uMzNmMDg3OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQu
Y3BwCkBAIC0yOCwyMSArMjgsMjYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVu
dEltcGwuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJWZXJzaW9uQ2hhbmdlRXZlbnQ6
OklEQlZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCitJREJWZXJz
aW9uQ2hhbmdlRXZlbnQ6OklEQlZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRf
dCBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgOiBFdmVudChuYW1l
LCBmYWxzZSAvKmNhbkJ1YmJsZSovLCBmYWxzZSAvKmNhbmNlbGFibGUqLykKKyAgICAsIG1fcmVx
dWVzdElkZW50aWZpZXIocmVxdWVzdElkZW50aWZpZXIpCisgICAgLCBtX29sZFZlcnNpb24ob2xk
VmVyc2lvbikKKyAgICAsIG1fbmV3VmVyc2lvbihuZXdWZXJzaW9uKQoreworfQorCitPcHRpb25h
bDx1aW50NjRfdD4gSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpuZXdWZXJzaW9uKCkgY29uc3QKIHsK
KyAgICBpZiAoIW1fbmV3VmVyc2lvbikKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgcmV0
dXJuIG1fbmV3VmVyc2lvbjsKIH0KIAotUmVmPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gSURCVmVy
c2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUoKQorRXZlbnRJbnRlcmZhY2UgSURCVmVyc2lvbkNoYW5n
ZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMg
Y2FsbGVkIG9ubHkgYnkgZG9jdW1lbnQuY3JlYXRlRXZlbnQuIEkgZG9uJ3Qgc2VlIGhvdyBpdCdz
IHZhbHVhYmxlIHRvIGNyZWF0ZSBhbiBldmVudCB3aXRoCi0gICAgLy8gcmVhZC1vbmx5IG9sZFZl
cnNpb24gYXR0cmlidXRlIG9mIDAgYW5kIG5ld1ZlcnNpb24gb2YgbnVsbDsgcHJlc2VydmluZyB0
aGF0IGJlaGF2aW9yIGZvciBub3cuCi0gICAgcmV0dXJuIElEQkNsaWVudDo6SURCVmVyc2lvbkNo
YW5nZUV2ZW50OjpjcmVhdGUoMCwgMCwgZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCk7
CisgICAgcmV0dXJuIElEQlZlcnNpb25DaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmgKaW5kZXggNWQxNDkzYy4uNjNjNTcy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lv
bkNoYW5nZUV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmgKQEAgLTIzLDI5ICsyMyw0OSBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSURCVmVyc2lvbkNoYW5nZUV2ZW50
X2gKLSNkZWZpbmUgSURCVmVyc2lvbkNoYW5nZUV2ZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUg
IklEQlJlc291cmNlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQlZlcnNpb25DaGFuZ2VFdmVudCA6IHB1Ymxp
YyBFdmVudCB7CitjbGFzcyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgZmluYWwgOiBwdWJsaWMgRXZl
bnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCVmVyc2lvbkNoYW5nZUV2ZW50PiBjcmVh
dGUoKTsKKyAgICBzdGF0aWMgUmVmPElEQlZlcnNpb25DaGFuZ2VFdmVudD4gY3JlYXRlKHVpbnQ2
NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCVmVyc2lv
bkNoYW5nZUV2ZW50KElEQlJlc291cmNlSWRlbnRpZmllcjo6ZW1wdHlWYWx1ZSgpLCBvbGRWZXJz
aW9uLCBuZXdWZXJzaW9uLCBldmVudFR5cGUpKTsKKyAgICB9CiAKLSAgICB2aXJ0dWFsIHVpbnQ2
NF90IG9sZFZlcnNpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBPcHRpb25hbDx1aW50NjRf
dD4gbmV3VmVyc2lvbigpIGNvbnN0ID0gMDsKKyAgICBzdGF0aWMgUmVmPElEQlZlcnNpb25DaGFu
Z2VFdmVudD4gY3JlYXRlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50
aWZpZXIsIHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24sIGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCVmVyc2lvbkNoYW5nZUV2ZW50KHJlcXVlc3RJZGVudGlmaWVyLCBvbGRWZXJzaW9uLCBu
ZXdWZXJzaW9uLCBldmVudFR5cGUpKTsKKyAgICB9CiAKLXByb3RlY3RlZDoKLSAgICBleHBsaWNp
dCBJREJWZXJzaW9uQ2hhbmdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKKyAgICBj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXF1ZXN0SWRlbnRpZmllcjsgfQorCisgICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2VF
dmVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHVpbnQ2NF90IG9sZFZl
cnNpb24oKSBjb25zdCB7IHJldHVybiBtX29sZFZlcnNpb247IH0KKyAgICBPcHRpb25hbDx1aW50
NjRfdD4gbmV3VmVyc2lvbigpIGNvbnN0OworCitwcml2YXRlOgorICAgIElEQlZlcnNpb25DaGFu
Z2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1
aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSk7CisKKyAgICBFdmVudEludGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNv
bnN0OworCisgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVxdWVzdElkZW50aWZpZXI7Cisg
ICAgdWludDY0X3QgbV9vbGRWZXJzaW9uOworICAgIHVpbnQ2NF90IG1fbmV3VmVyc2lvbjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpJREJWZXJzaW9u
Q2hhbmdlRXZlbnQpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkV2ZW50
JiBldmVudCkgeyByZXR1cm4gZXZlbnQuaXNWZXJzaW9uQ2hhbmdlRXZlbnQoKTsgfQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQogCi0jZW5kaWYgLy8gSURCVmVyc2lvbkNoYW5nZUV2ZW50
X2gKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJBbnlJbXBsLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZkZTAxNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJREJBbnlJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQot
I2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkN1cnNvckltcGwuaCIKLSNpbmNsdWRl
ICJJREJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiSURCSW5kZXguaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLUlEQkFueTo6SURCQW55KElEQkFueTo6VHlw
ZSB0eXBlKQotICAgIDogbV90eXBlKHR5cGUpCi17Ci19Ci0KLUlEQkFueTo6SURCQW55KFJlZjxJ
REJEYXRhYmFzZT4mJiBkYXRhYmFzZSkKLSAgICA6IG1fdHlwZShJREJBbnk6OlR5cGU6OklEQkRh
dGFiYXNlKQotICAgICwgbV9kYXRhYmFzZShhZG9wdFJlZigmZGF0YWJhc2UubGVha1JlZigpKSkK
LXsKLX0KLQotSURCQW55OjpJREJBbnkoUmVmPElEQk9iamVjdFN0b3JlPiYmIG9iamVjdFN0b3Jl
KQotICAgIDogbV90eXBlKElEQkFueTo6VHlwZTo6SURCT2JqZWN0U3RvcmUpCi0gICAgLCBtX29i
amVjdFN0b3JlKFdURk1vdmUob2JqZWN0U3RvcmUpKQotewotfQotCi1JREJBbnk6OklEQkFueShS
ZWY8SURCSW5kZXg+JiYgaW5kZXgpCi0gICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpJREJJbmRl
eCkKLSAgICAsIG1faW5kZXgoV1RGTW92ZShpbmRleCkpCi17Ci19Ci0KLUlEQkFueTo6SURCQW55
KFJlZjxJREJDdXJzb3I+JiYgY3Vyc29yKQotewotICAgIGlmIChjdXJzb3ItPmlzS2V5Q3Vyc29y
KCkpIHsKLSAgICAgICAgbV90eXBlID0gSURCQW55OjpUeXBlOjpJREJDdXJzb3I7Ci0gICAgICAg
IG1fY3Vyc29yID0gV1RGTW92ZShjdXJzb3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdHlw
ZSA9IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlOwotICAgICAgICBtX2N1cnNvcldp
dGhWYWx1ZSA9IFdURk1vdmUoY3Vyc29yKTsKLSAgICB9Ci19Ci0KLUlEQkFueTo6SURCQW55KGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGgpCi0gICAgOiBtX3R5cGUoSURCQW55OjpUeXBlOjpLZXlQ
YXRoKQotICAgICwgbV9pZGJLZXlQYXRoKGtleVBhdGgpCi17Ci19Ci0KLUlEQkFueTo6SURCQW55
KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKLSAgICA6IG1fdHlwZShJREJB
bnk6OlR5cGU6OlNjcmlwdFZhbHVlKQotICAgICwgbV9zY3JpcHRWYWx1ZSh2YWx1ZSkKLXsKLX0K
LQotSURCQW55Ojp+SURCQW55KCkKLXsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNl
PiBJREJBbnk6OmlkYkRhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6
VHlwZTo6SURCRGF0YWJhc2UpOwotICAgIHJldHVybiBtX2RhdGFiYXNlLmdldCgpOwotfQotCi1S
ZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTGlzdD4gSURCQW55Ojpkb21TdHJpbmdMaXN0KCkKLXsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQkN1cnNvcj4gSURC
QW55OjppZGJDdXJzb3IoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gSURCQW55OjpUeXBlOjpJ
REJDdXJzb3IgfHwgbV90eXBlID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlKTsK
LSAgICByZXR1cm4gbV9jdXJzb3IuZ2V0KCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJDdXJz
b3JXaXRoVmFsdWU+IElEQkFueTo6aWRiQ3Vyc29yV2l0aFZhbHVlKCkKLXsKLSAgICBBU1NFUlQo
bV90eXBlID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlKTsKLSAgICByZXR1cm4g
bV9jdXJzb3JXaXRoVmFsdWUuZ2V0KCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5
PiBJREJBbnk6OmlkYkZhY3RvcnkoKQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQ
dHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQkFueTo6aWRiSW5kZXgoKQotewotICAgIEFTU0VSVCht
X3R5cGUgPT0gSURCQW55OjpUeXBlOjpJREJJbmRleCk7Ci0gICAgcmV0dXJuIG1faW5kZXguZ2V0
KCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gSURCQW55OjppZGJPYmpl
Y3RTdG9yZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQk9iamVj
dFN0b3JlKTsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZS5nZXQoKTsKLX0KLQotSURCT2JqZWN0
U3RvcmUqIElEQkFueTo6bW9kZXJuSURCT2JqZWN0U3RvcmUoKQotewotICAgIEFTU0VSVChtX3R5
cGUgPT0gSURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG1fb2JqZWN0
U3RvcmUuZ2V0KCk7Ci19Ci0KLUlEQkluZGV4KiBJREJBbnk6Om1vZGVybklEQkluZGV4KCkKLXsK
LSAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCSW5kZXgpOwotICAgIHJldHVy
biBtX2luZGV4LmdldCgpOwotfQotCi1JREJDdXJzb3IqIElEQkFueTo6bW9kZXJuSURCQ3Vyc29y
KCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yIHx8IG1f
dHlwZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSk7Ci0gICAgaWYgKG1fdHlw
ZSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcikKLSAgICAgICAgcmV0dXJuIG1fY3Vyc29yLmdl
dCgpOwotICAgIHJldHVybiBtX2N1cnNvcldpdGhWYWx1ZS5nZXQoKTsKLX0KLQotUmVmUHRyPFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJBbnk6OmlkYlRyYW5zYWN0aW9uKCkKLXsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIElEQkFu
eTo6c2NyaXB0VmFsdWUoKQotewotICAgIHJldHVybiBtX3NjcmlwdFZhbHVlOwotfQotCi1pbnQ2
NF90IElEQkFueTo6aW50ZWdlcigpCi17Ci0gICAgcmV0dXJuIG1faW50ZWdlcjsKLX0KLQotY29u
c3QgU3RyaW5nJiBJREJBbnk6OnN0cmluZygpCi17Ci0gICAgcmV0dXJuIG1fc3RyaW5nOwotfQot
Ci1jb25zdCBJREJLZXlQYXRoJiBJREJBbnk6OmtleVBhdGgoKQotewotICAgIHJldHVybiBtX2lk
YktleVBhdGg7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkFueUltcGwuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VjMzlkYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQW55SW1wbC5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkFueUltcGxfaAot
I2RlZmluZSBJREJBbnlJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiSURCQW55LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VJbXBsLmgiCi0jaW5jbHVk
ZSAiSURCSW5kZXhJbXBsLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJbXBsLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1jbGFzcyBJREJBbnkg
OiBwdWJsaWMgV2ViQ29yZTo6SURCQW55IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPElE
QkFueT4gY3JlYXRlKFJlZjxJREJEYXRhYmFzZT4mJiBkYXRhYmFzZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KFdURk1vdmUoZGF0YWJhc2UpKSk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIFJlZjxJREJBbnk+IGNyZWF0ZShSZWY8SURCT2JqZWN0U3RvcmU+JiYgb2Jq
ZWN0U3RvcmUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJBbnkoV1RG
TW92ZShvYmplY3RTdG9yZSkpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPElEQkFueT4gY3Jl
YXRlKFJlZjxJREJJbmRleD4mJiBpbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IElEQkFueShXVEZNb3ZlKGluZGV4KSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWZQ
dHI8SURCQW55PiBjcmVhdGUoUmVmPElEQkN1cnNvcj4mJiBjdXJzb3IpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShXVEZNb3ZlKGN1cnNvcikpKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4gY3JlYXRlKGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShrZXlQYXRoKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IElEQkFueSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWZQdHI8SURCQW55PiBj
cmVhdGVVbmRlZmluZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJB
bnkoSURCQW55OjpUeXBlOjpVbmRlZmluZWQpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5JREJB
bnkoKTsKLQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQot
ICAgIFJlZlB0cjxXZWJDb3JlOjpET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCkgZmluYWw7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQkN1cnNvcj4gaWRiQ3Vyc29yKCkgZmluYWw7Ci0gICAg
UmVmUHRyPFdlYkNvcmU6OklEQkN1cnNvcldpdGhWYWx1ZT4gaWRiQ3Vyc29yV2l0aFZhbHVlKCkg
ZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgpIGZp
bmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5PiBpZGJGYWN0b3J5KCkgZmluYWw7
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4PiBpZGJJbmRleCgpIGZpbmFsOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gaWRiT2JqZWN0U3RvcmUoKSBmaW5hbDsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IGlkYlRyYW5zYWN0aW9uKCkgZmluYWw7
Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKCkgZmluYWw7
Ci0gICAgaW50NjRfdCBpbnRlZ2VyKCkgZmluYWw7Ci0gICAgY29uc3QgU3RyaW5nJiBzdHJpbmco
KSBmaW5hbDsKLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgZmluYWw7Ci0KLSAgICBJ
REJPYmplY3RTdG9yZSogbW9kZXJuSURCT2JqZWN0U3RvcmUoKTsKLSAgICBJREJJbmRleCogbW9k
ZXJuSURCSW5kZXgoKTsKLSAgICBJREJDdXJzb3IqIG1vZGVybklEQkN1cnNvcigpOwotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IElEQkFueShJREJBbnk6OlR5cGUpOwotICAgIGV4cGxpY2l0IElE
QkFueShSZWY8SURCRGF0YWJhc2U+JiYpOwotICAgIGV4cGxpY2l0IElEQkFueShSZWY8SURCT2Jq
ZWN0U3RvcmU+JiYpOwotICAgIGV4cGxpY2l0IElEQkFueShSZWY8SURCSW5kZXg+JiYpOwotICAg
IGV4cGxpY2l0IElEQkFueShSZWY8SURCQ3Vyc29yPiYmKTsKLSAgICBleHBsaWNpdCBJREJBbnko
Y29uc3QgSURCS2V5UGF0aCYpOwotICAgIGV4cGxpY2l0IElEQkFueShjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYpOwotCi0gICAgSURCQW55OjpUeXBlIG1fdHlwZSB7IElEQkFueTo6VHlw
ZTo6VW5kZWZpbmVkIH07Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFiYXNlOwotICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZT4gbV9vYmplY3RTdG9yZTsKLSAgICBSZWZQdHI8SURCSW5k
ZXg+IG1faW5kZXg7Ci0gICAgUmVmUHRyPElEQkN1cnNvcj4gbV9jdXJzb3I7Ci0gICAgUmVmUHRy
PElEQkN1cnNvcj4gbV9jdXJzb3JXaXRoVmFsdWU7Ci0KLSAgICBjb25zdCBJREJLZXlQYXRoIG1f
aWRiS2V5UGF0aDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX3NjcmlwdFZh
bHVlOwotICAgIGNvbnN0IFN0cmluZyBtX3N0cmluZzsKLSAgICBjb25zdCBpbnQ2NF90IG1faW50
ZWdlciB7IDAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYg
Ly8gSURCQW55SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCmluZGV4IGRk
NTg1OWQuLjViY2VkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwCkBAIC0y
OCw4ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUg
IklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2VEYXRhLmgiCi0jaW5jbHVkZSAi
SURCT3BlbkRCUmVxdWVzdEltcGwuaCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiSURCUmVxdWVzdERhdGEuaCIKICNpbmNsdWRlICJJREJSZXN1bHREYXRhLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkNvbm5lY3Rpb25Ub1NlcnZlci5oCmluZGV4IDky
MjliZDUuLjIxNjA4YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2NsaWVudC9JREJDb25uZWN0aW9uVG9TZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ29ubmVjdGlvblRvU2VydmVyLmgKQEAgLTM5LDE1
ICszOSwxNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJDdXJzb3JJbmZvOwor
Y2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJFcnJvcjsKIGNsYXNzIElEQk9iamVjdFN0b3Jl
SW5mbzsKK2NsYXNzIElEQk9wZW5EQlJlcXVlc3Q7CiBjbGFzcyBJREJSZXN1bHREYXRhOworY2xh
c3MgSURCVHJhbnNhY3Rpb247CiAKIG5hbWVzcGFjZSBJREJDbGllbnQgewogCi1jbGFzcyBJREJE
YXRhYmFzZTsKLWNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsK
IGNsYXNzIFRyYW5zYWN0aW9uT3BlcmF0aW9uOwogCiBjbGFzcyBJREJDb25uZWN0aW9uVG9TZXJ2
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IHsKQEAgLTEzMCw3
ICsxMzAsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmPElEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVn
YXRlPiBtX2RlbGVnYXRlOwogCi0gICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJl
ZlB0cjxJREJDbGllbnQ6OklEQk9wZW5EQlJlcXVlc3Q+PiBtX29wZW5EQlJlcXVlc3RNYXA7Cisg
ICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0
Pj4gbV9vcGVuREJSZXF1ZXN0TWFwOwogICAgIEhhc2hNYXA8dWludDY0X3QsIElEQkRhdGFiYXNl
Kj4gbV9kYXRhYmFzZUNvbm5lY3Rpb25NYXA7CiAgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50
aWZpZXIsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4+IG1fcGVuZGluZ1RyYW5zYWN0aW9uczsKICAg
ICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgUmVmUHRyPElEQlRyYW5zYWN0aW9uPj4g
bV9jb21taXR0aW5nVHJhbnNhY3Rpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkN1cnNvckltcGwuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA1YzVlNGQ2Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JJbXBsLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIklEQkN1cnNvckltcGwuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgot
I2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkdldFJlc3VsdC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1SZWY8SURCQ3Vyc29yPiBJREJDdXJzb3I6
OmNyZWF0ZShJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQkluZGV4JiBpbmRleCwgY29u
c3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJD
dXJzb3IodHJhbnNhY3Rpb24sIGluZGV4LCBpbmZvKSk7Ci19Ci0KLUlEQkN1cnNvcjo6SURCQ3Vy
c29yKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0
b3JlLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQotICAgIDogQWN0aXZlRE9NT2JqZWN0KHRy
YW5zYWN0aW9uLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAsIG1faW5mbyhpbmZvKQot
ICAgICwgbV9zb3VyY2UoSURCQW55OjpjcmVhdGUob2JqZWN0U3RvcmUpLmxlYWtSZWYoKSkKLSAg
ICAsIG1fb2JqZWN0U3RvcmUoJm9iamVjdFN0b3JlKQotewotICAgIHN1c3BlbmRJZk5lZWRlZCgp
OwotfQotCi1JREJDdXJzb3I6OklEQkN1cnNvcihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24s
IElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLSAgICA6IEFjdGl2
ZURPTU9iamVjdCh0cmFuc2FjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBt
X2luZm8oaW5mbykKLSAgICAsIG1fc291cmNlKElEQkFueTo6Y3JlYXRlKGluZGV4KS5sZWFrUmVm
KCkpCi0gICAgLCBtX2luZGV4KCZpbmRleCkKLXsKLSAgICBzdXNwZW5kSWZOZWVkZWQoKTsKLX0K
LQotSURCQ3Vyc29yOjp+SURCQ3Vyc29yKCkKLXsKLX0KLQotYm9vbCBJREJDdXJzb3I6OnNvdXJj
ZXNEZWxldGVkKCkgY29uc3QKLXsKLSAgICBpZiAobV9vYmplY3RTdG9yZSkKLSAgICAgICAgcmV0
dXJuIG1fb2JqZWN0U3RvcmUtPmlzRGVsZXRlZCgpOwotCi0gICAgQVNTRVJUKG1faW5kZXgpOwot
ICAgIHJldHVybiBtX2luZGV4LT5pc0RlbGV0ZWQoKSB8fCBtX2luZGV4LT5tb2Rlcm5PYmplY3RT
dG9yZSgpLmlzRGVsZXRlZCgpOwotfQotCi1JREJPYmplY3RTdG9yZSYgSURCQ3Vyc29yOjplZmZl
Y3RpdmVPYmplY3RTdG9yZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb2JqZWN0U3RvcmUpCi0gICAg
ICAgIHJldHVybiAqbV9vYmplY3RTdG9yZTsKLQotICAgIEFTU0VSVChtX2luZGV4KTsKLSAgICBy
ZXR1cm4gbV9pbmRleC0+bW9kZXJuT2JqZWN0U3RvcmUoKTsKLX0KLQotSURCVHJhbnNhY3Rpb24m
IElEQkN1cnNvcjo6dHJhbnNhY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBlZmZlY3RpdmVP
YmplY3RTdG9yZSgpLm1vZGVyblRyYW5zYWN0aW9uKCk7Ci19Ci0KLWNvbnN0IFN0cmluZyYgSURC
Q3Vyc29yOjpkaXJlY3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBJREJDdXJzb3I6OmRpcmVj
dGlvblRvU3RyaW5nKG1faW5mby5jdXJzb3JEaXJlY3Rpb24oKSk7Ci19Ci0KLWNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6OmtleSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fZGVwcmVjYXRlZEN1cnJlbnRLZXk7Ci19Ci0KLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBJREJDdXJzb3I6OnByaW1hcnlLZXkoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlcHJl
Y2F0ZWRDdXJyZW50UHJpbWFyeUtleTsKLX0KLQotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIElEQkN1cnNvcjo6dmFsdWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RlcHJlY2F0ZWRD
dXJyZW50VmFsdWU7Ci19Ci0KLUlEQkFueSogSURCQ3Vyc29yOjpzb3VyY2UoKQotewotICAgIHJl
dHVybiAmbV9zb3VyY2UuZ2V0KCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJ
REJDdXJzb3I6OnVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJDdXJzb3I6OnVwZGF0ZSIpOwotCi0gICAgaWYgKHNvdXJjZXNEZWxldGVk
KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3Rh
dGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZm
ZWN0aXZlIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIXRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgewot
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3Rp
dmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2
ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
aWYgKHRyYW5zYWN0aW9uKCkuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6UmVhZE9ubHlFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3VwZGF0ZScgb24gJ0lEQkN1cnNvcic6IFRo
ZSByZWNvcmQgbWF5IG5vdCBiZSB1cGRhdGVkIGluc2lkZSBhIHJlYWQtb25seSB0cmFuc2FjdGlv
bi4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX2dvdFZh
bHVlKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0
YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICd1cGRhdGUnIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yIGlzIGJlaW5nIGl0ZXJh
dGVkIG9yIGhhcyBpdGVyYXRlZCBwYXN0IGl0cyBlbmQuIik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIGlmIChpc0tleUN1cnNvcigpKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd1cGRhdGUnIG9uICdJREJD
dXJzb3InOiBUaGUgY3Vyc29yIGlzIGEga2V5IGN1cnNvci4iKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgYXV0byYgb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RT
dG9yZSgpOwotICAgIGF1dG8mIGtleVBhdGggPSBvYmplY3RTdG9yZS5pbmZvKCkua2V5UGF0aCgp
OwotICAgIGNvbnN0IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKLSAg
ICBpZiAodXNlc0luTGluZUtleXMpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtl
eSA9IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1
ZSwga2V5UGF0aCk7Ci0gICAgICAgIElEQktleURhdGEga2V5UGF0aEtleURhdGEoa2V5UGF0aEtl
eS5nZXQoKSk7Ci0gICAgICAgIGlmICgha2V5UGF0aEtleSB8fCBrZXlQYXRoS2V5RGF0YSAhPSBt
X2N1cnJlbnRQcmltYXJ5S2V5RGF0YSkgewotICAgICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndXBkYXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGVm
ZmVjdGl2ZSBvYmplY3Qgc3RvcmUgb2YgdGhpcyBjdXJzb3IgdXNlcyBpbi1saW5lIGtleXMgYW5k
IGV2YWx1YXRpbmcgdGhlIGtleSBwYXRoIG9mIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgcmVzdWx0cyBp
biBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRoZSBjdXJzb3IncyBlZmZlY3RpdmUga2V5LiIpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRv
IHJlcXVlc3QgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnB1dEZvckN1cnNvclVwZGF0ZShleGVj
LCB2YWx1ZS5qc1ZhbHVlKCksIG1fZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5LmpzVmFsdWUo
KSwgZWMpOwotICAgIGlmIChlYy5jb2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IEFTU0VSVChyZXF1ZXN0KTsKLSAgICByZXF1ZXN0LT5zZXRTb3VyY2UoKnRoaXMpOwotICAgICsr
bV9vdXRzdGFuZGluZ1JlcXVlc3RDb3VudDsKLQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi12
b2lkIElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJDdXJzb3I6OmFkdmFu
Y2UiKTsKLQotICAgIGlmICghbV9yZXF1ZXN0KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBlYy5jb2RlID0gVHlwZUVycm9yOwot
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2
YW5jZScgb24gJ0lEQkN1cnNvcic6IEEgY291bnQgYXJndW1lbnQgd2l0aCB2YWx1ZSAwICh6ZXJv
KSB3YXMgc3VwcGxpZWQsIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlc0RlbGV0ZWQoKSkgewotICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYWR2YW5jZScgb24gJ0lE
QkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF0
cmFuc2FjdGlvbigpLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURCQ3Vyc29y
JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2dvdFZhbHVlKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdhZHZhbmNlJyBvbiAnSURC
Q3Vyc29yJzogVGhlIGN1cnNvciBpcyBiZWluZyBpdGVyYXRlZCBvciBoYXMgaXRlcmF0ZWQgcGFz
dCBpdHMgZW5kLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9nb3RWYWx1ZSA9
IGZhbHNlOwotCi0gICAgdW5jaGVja2VkSXRlcmF0ZUN1cnNvcihJREJLZXlEYXRhKCksIGNvdW50
KTsKLX0KLQotdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBp
ZiAoIWNvbnRleHQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRpbnVl
RnVuY3Rpb24oSURCS2V5RGF0YSgpLCBlYyk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpjb250aW51
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykK
LXsKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQ
dHI8SURCS2V5PiBrZXk7Ci0gICAgaWYgKCFrZXlWYWx1ZS5qc1ZhbHVlKCkuaXNVbmRlZmluZWQo
KSkKLSAgICAgICAga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXlW
YWx1ZSk7Ci0KLSAgICBjb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSwgZWMpOwotfQotCi12b2lk
IElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRhJiBrZXksIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNv
cjo6Y29udGludWVGdW5jdGlvbiAodG8ga2V5ICVzKSIsIGtleS5sb2dnaW5nU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAoIW1fcmVxdWVzdCkgewotICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURC
Q3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhh
cyBiZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXRy
YW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlJyBvbiAnSURCQ3Vyc29y
JzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2dvdFZhbHVlKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZScgb24gJ0lE
QkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQgb3IgaGFzIGl0ZXJhdGVkIHBh
c3QgaXRzIGVuZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgha2V5Lmlz
TnVsbCgpICYmICFrZXkuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUnIG9uICdJREJDdXJzb3InOiBUaGUgcGFyYW1l
dGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChtX2luZm8uaXNEaXJlY3Rpb25Gb3J3YXJkKCkpIHsKLSAgICAgICAgaWYgKCFrZXkuaXNO
dWxsKCkgJiYga2V5LmNvbXBhcmUobV9jdXJyZW50S2V5RGF0YSkgPD0gMCkgewotICAgICAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWUn
IG9uICdJREJDdXJzb3InOiBUaGUgcGFyYW1ldGVyIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0
aGlzIGN1cnNvcidzIHBvc2l0aW9uLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICgha2V5LmlzTnVsbCgpICYmIGtleS5jb21wYXJlKG1fY3VycmVudEtl
eURhdGEpID49IDApIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
YXRhRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdjb250aW51ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBwYXJhbWV0ZXIgaXMgZ3JlYXRl
ciB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgY3Vyc29yJ3MgcG9zaXRpb24uIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX2dvdFZhbHVlID0gZmFsc2U7Ci0KLSAgICB1bmNoZWNrZWRJ
dGVyYXRlQ3Vyc29yKGtleSwgMCk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjp1bmNoZWNrZWRJdGVy
YXRlQ3Vyc29yKGNvbnN0IElEQktleURhdGEmIGtleSwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsK
LSAgICArK21fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7Ci0KLSAgICBtX3JlcXVlc3QtPndpbGxJ
dGVyYXRlQ3Vyc29yKCp0aGlzKTsKLSAgICB0cmFuc2FjdGlvbigpLml0ZXJhdGVDdXJzb3IoKnRo
aXMsIGtleSwgY291bnQpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCQ3Vy
c29yOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJDdXJz
b3I6OmRlbGV0ZUZ1bmN0aW9uIik7Ci0KLSAgICBpZiAoc291cmNlc0RlbGV0ZWQoKSkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwot
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVs
ZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBlZmZlY3RpdmUgb2Jq
ZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIGlmICghdHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwot
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVs
ZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlz
aGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAodHJhbnNh
Y3Rpb24oKS5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCQ3Vyc29yJzogVGhlIHJlY29yZCBt
YXkgbm90IGJlIGRlbGV0ZWQgaW5zaWRlIGEgcmVhZC1vbmx5IHRyYW5zYWN0aW9uLiIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZ290VmFsdWUpIHsKLSAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
LSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Rl
bGV0ZScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IgaXMgYmVpbmcgaXRlcmF0ZWQgb3IgaGFz
IGl0ZXJhdGVkIHBhc3QgaXRzIGVuZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKGlzS2V5Q3Vyc29yKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQkN1cnNvcic6IFRo
ZSBjdXJzb3IgaXMgYSBrZXkgY3Vyc29yLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBhdXRvIHJlcXVlc3QgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLm1vZGVybkRl
bGV0ZShjb250ZXh0LCBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5qc1ZhbHVlKCksIGVj
KTsKLSAgICBpZiAoZWMuY29kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NF
UlQocmVxdWVzdCk7Ci0gICAgcmVxdWVzdC0+c2V0U291cmNlKCp0aGlzKTsKLSAgICArK21fb3V0
c3RhbmRpbmdSZXF1ZXN0Q291bnQ7Ci0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotdm9pZCBJ
REJDdXJzb3I6OnNldEdldFJlc3VsdChJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJHZXRS
ZXN1bHQmIGdldFJlc3VsdCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjpzZXRH
ZXRSZXN1bHQgLSBjdXJyZW50IGtleSAlcyIsIGdldFJlc3VsdC5rZXlEYXRhKCkubG9nZ2luZ1N0
cmluZygpLnN1YnN0cmluZygwLCAxMDApLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgYXV0byogY29u
dGV4dCA9IHJlcXVlc3Quc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFnZXRSZXN1bHQuaXNEZWZpbmVkKCkpIHsK
LSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudEtleSA9IHsgfTsKLSAgICAgICAgbV9jdXJyZW50
S2V5RGF0YSA9IHsgfTsKLSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlLZXkgPSB7
IH07Ci0gICAgICAgIG1fY3VycmVudFByaW1hcnlLZXlEYXRhID0geyB9OwotICAgICAgICBtX2Rl
cHJlY2F0ZWRDdXJyZW50VmFsdWUgPSB7IH07Ci0KLSAgICAgICAgbV9nb3RWYWx1ZSA9IGZhbHNl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kZXByZWNhdGVkQ3VycmVudEtleSA9
IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKGNvbnRleHQsIGdldFJlc3VsdC5rZXlEYXRhKCkpOwot
ICAgIG1fY3VycmVudEtleURhdGEgPSBnZXRSZXN1bHQua2V5RGF0YSgpOwotICAgIG1fZGVwcmVj
YXRlZEN1cnJlbnRQcmltYXJ5S2V5ID0gaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoY29udGV4dCwg
Z2V0UmVzdWx0LnByaW1hcnlLZXlEYXRhKCkpOwotICAgIG1fY3VycmVudFByaW1hcnlLZXlEYXRh
ID0gZ2V0UmVzdWx0LnByaW1hcnlLZXlEYXRhKCk7Ci0KLSAgICBpZiAoaXNLZXlDdXJzb3IoKSkK
LSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0geyB9OwotICAgIGVsc2UKLSAgICAg
ICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoKmNv
bnRleHQsIGdldFJlc3VsdC52YWx1ZUJ1ZmZlcigpKTsKLQotICAgIG1fZ290VmFsdWUgPSB0cnVl
OwotfQotCi1jb25zdCBjaGFyKiBJREJDdXJzb3I6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25z
dAotewotICAgIHJldHVybiAiSURCQ3Vyc29yIjsKLX0KLQotYm9vbCBJREJDdXJzb3I6OmNhblN1
c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBJREJDdXJzb3I6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yOjpk
ZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpCi17Ci0gICAgQVNTRVJUKG1fb3V0c3Rh
bmRpbmdSZXF1ZXN0Q291bnQpOwotICAgIC0tbV9vdXRzdGFuZGluZ1JlcXVlc3RDb3VudDsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29ySW1wbC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBkMzVjOTE1Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JJbXBsLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCQ3Vyc29ySW1wbF9oCi0j
ZGVmaW5lIElEQkN1cnNvckltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LSNpbmNsdWRlICJJREJBbnlJbXBsLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29ySW5mby5oIgotI2lu
Y2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIElEQkdldFJlc3VsdDsKLQotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLWNsYXNzIElEQklu
ZGV4OwotY2xhc3MgSURCT2JqZWN0U3RvcmU7Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsKLQotY2xh
c3MgSURCQ3Vyc29yIDogcHVibGljIFdlYkNvcmU6OklEQkN1cnNvcldpdGhWYWx1ZSwgcHVibGlj
IEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJDdXJzb3I+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbiYsIElEQkluZGV4JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwot
Ci0gICAgdmlydHVhbCB+SURCQ3Vyc29yKCk7Ci0KLSAgICAvLyBJbXBsZW1lbnQgdGhlIElETAot
ICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSgpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBwcmltYXJ5S2V5KCkgY29uc3QgZmluYWw7Ci0gICAgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKCkgY29uc3QgZmluYWw7Ci0gICAgSURCQW55
KiBzb3VyY2UoKSBmaW5hbDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiB1cGRh
dGUoSlNDOjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlRnVuY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZp
bmFsOwotICAgIHZvaWQgY29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBm
aW5hbDsKLQotICAgIHZvaWQgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRhJiwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7Ci0KLSAgICBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZv
KCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9Ci0KLSAgICB2b2lkIHNldFJlcXVlc3QoSURCUmVx
dWVzdCYgcmVxdWVzdCkgeyBtX3JlcXVlc3QgPSAmcmVxdWVzdDsgfQotICAgIHZvaWQgY2xlYXJS
ZXF1ZXN0KCkgeyBtX3JlcXVlc3QgPSBudWxscHRyOyB9Ci0gICAgSURCUmVxdWVzdCogcmVxdWVz
dCgpIHsgcmV0dXJuIG1fcmVxdWVzdDsgfQotCi0gICAgdm9pZCBzZXRHZXRSZXN1bHQoSURCUmVx
dWVzdCYsIGNvbnN0IElEQkdldFJlc3VsdCYpOwotCi0gICAgYm9vbCBpc0tleUN1cnNvcigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIGlzTW9kZXJuQ3Vyc29yKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBkZWNyZW1lbnRPdXRzdGFu
ZGluZ1JlcXVlc3RDb3VudCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCQ3Vyc29yKElEQlRyYW5z
YWN0aW9uJiwgSURCT2JqZWN0U3RvcmUmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7Ci0gICAgSURC
Q3Vyc29yKElEQlRyYW5zYWN0aW9uJiwgSURCSW5kZXgmLCBjb25zdCBJREJDdXJzb3JJbmZvJik7
Ci0KLXByaXZhdGU6Ci0gICAgLy8gQWN0aXZlRE9NT2JqZWN0LgotICAgIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGNhblN1c3BlbmRGb3JE
b2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0IGZpbmFsOwotCi0gICAgLy8gQ3Vyc29ycyBhcmUgY3JlYXRlZCB3aXRoIGFu
IG91dHN0YW5kaW5nIGl0ZXJhdGlvbiByZXF1ZXN0LgotICAgIHVuc2lnbmVkIG1fb3V0c3RhbmRp
bmdSZXF1ZXN0Q291bnQgeyAxIH07Ci0KLSAgICBJREJDdXJzb3JJbmZvIG1faW5mbzsKLSAgICBS
ZWY8SURCQW55PiBtX3NvdXJjZTsKLSAgICBJREJPYmplY3RTdG9yZSogbV9vYmplY3RTdG9yZSB7
IG51bGxwdHIgfTsKLSAgICBJREJJbmRleCogbV9pbmRleCB7IG51bGxwdHIgfTsKLSAgICBJREJS
ZXF1ZXN0KiBtX3JlcXVlc3Q7Ci0KLSAgICBib29sIHNvdXJjZXNEZWxldGVkKCkgY29uc3Q7Ci0g
ICAgSURCT2JqZWN0U3RvcmUmIGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkgY29uc3Q7Ci0gICAgSURC
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHVuY2hlY2tlZEl0
ZXJhdGVDdXJzb3IoY29uc3QgSURCS2V5RGF0YSYsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotCi0g
ICAgYm9vbCBtX2dvdFZhbHVlIHsgZmFsc2UgfTsKLQotICAgIElEQktleURhdGEgbV9jdXJyZW50
S2V5RGF0YTsKLSAgICBJREJLZXlEYXRhIG1fY3VycmVudFByaW1hcnlLZXlEYXRhOwotCi0gICAg
Ly8gRklYTUU6IFdoZW4gZGl0Y2hpbmcgTGVnYWN5IElEQiBhbmQgY29tYmluaW5nIHRoaXMgaW1w
bGVtZW50YXRpb24gd2l0aCB0aGUgYWJzdHJhY3QgSURCQ3Vyc29yLAotICAgIC8vIHRoZXNlIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1lbWJlcnMgc2hvdWxkIGJlIEpTVmFsdWVzIGluc3RlYWQu
Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9kZXByZWNhdGVkQ3VycmVudEtleTsKLSAg
ICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleTsK
LSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RlcHJlY2F0ZWRDdXJyZW50VmFsdWU7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQkN1cnNvcklt
cGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50
L0lEQkN1cnNvcldpdGhWYWx1ZUltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQkN1cnNvcldpdGhWYWx1ZUltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlZWVkYjJiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2NsaWVudC9JREJDdXJzb3JXaXRoVmFsdWVJbXBsLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewot
Ci1SZWY8SURCQ3Vyc29yV2l0aFZhbHVlPiBJREJDdXJzb3JXaXRoVmFsdWU6OmNyZWF0ZShJREJU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29u
c3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJD
dXJzb3JXaXRoVmFsdWUodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLCBpbmZvKSk7Ci19Ci0KLVJl
ZjxJREJDdXJzb3JXaXRoVmFsdWU+IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKElEQlRyYW5z
YWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJDdXJzb3JJbmZv
JiBpbmZvKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQkN1cnNvcldpdGhWYWx1ZSh0
cmFuc2FjdGlvbiwgaW5kZXgsIGluZm8pKTsKLX0KLQotSURCQ3Vyc29yV2l0aFZhbHVlOjpJREJD
dXJzb3JXaXRoVmFsdWUoSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9y
ZSYgb2JqZWN0U3RvcmUsIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCi0gICAgOiBJREJDdXJz
b3IodHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLCBpbmZvKQotewotfQotCi1JREJDdXJzb3JXaXRo
VmFsdWU6OklEQkN1cnNvcldpdGhWYWx1ZShJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIElE
QkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLSAgICA6IElEQkN1cnNv
cih0cmFuc2FjdGlvbiwgaW5kZXgsIGluZm8pCi17Ci19Ci0KLUlEQkN1cnNvcldpdGhWYWx1ZTo6
fklEQkN1cnNvcldpdGhWYWx1ZSgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQv
SURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQkN1cnNvcldpdGhWYWx1ZUltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmZiODQxZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCQ3Vyc29yV2l0aFZhbHVlSW1w
bF9oCi0jZGVmaW5lIElEQkN1cnNvcldpdGhWYWx1ZUltcGxfaAotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JJbXBsLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1jbGFzcyBJREJDdXJzb3JXaXRoVmFs
dWUgOiBwdWJsaWMgSURCQ3Vyc29yIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQkN1cnNv
cldpdGhWYWx1ZT4gY3JlYXRlKElEQlRyYW5zYWN0aW9uJiwgSURCT2JqZWN0U3RvcmUmLCBjb25z
dCBJREJDdXJzb3JJbmZvJik7Ci0gICAgc3RhdGljIFJlZjxJREJDdXJzb3JXaXRoVmFsdWU+IGNy
ZWF0ZShJREJUcmFuc2FjdGlvbiYsIElEQkluZGV4JiwgY29uc3QgSURCQ3Vyc29ySW5mbyYpOwot
Ci0gICAgdmlydHVhbCB+SURCQ3Vyc29yV2l0aFZhbHVlKCk7Ci0KLSAgICBib29sIGlzS2V5Q3Vy
c29yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJpdmF0ZToKLSAgICBJREJD
dXJzb3JXaXRoVmFsdWUoSURCVHJhbnNhY3Rpb24mLCBJREJPYmplY3RTdG9yZSYsIGNvbnN0IElE
QkN1cnNvckluZm8mKTsKLSAgICBJREJDdXJzb3JXaXRoVmFsdWUoSURCVHJhbnNhY3Rpb24mLCBJ
REJJbmRleCYsIGNvbnN0IElEQkN1cnNvckluZm8mKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElE
QkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCQ3Vyc29yV2l0aFZhbHVlSW1wbF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRh
YmFzZUltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTk0NGVkLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJEYXRh
YmFzZUltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VJbXBsLmgiCi0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNp
bmNsdWRlICJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3RJbXBsLmgiCi0jaW5jbHVkZSAi
SURCUmVzdWx0RGF0YS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgotI2luY2x1
ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotUmVmPElEQkRhdGFiYXNlPiBJREJEYXRhYmFzZTo6
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgY29ubmVjdGlvbiwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJEYXRhYmFzZShjb250ZXh0LCBjb25uZWN0aW9uLCBy
ZXN1bHREYXRhKSk7Ci19Ci0KLUlEQkRhdGFiYXNlOjpJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNv
bnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCi0gICAgOiBXZWJDb3JlOjpJREJEYXRhYmFz
ZSgmY29udGV4dCkKLSAgICAsIG1fc2VydmVyQ29ubmVjdGlvbihjb25uZWN0aW9uKQotICAgICwg
bV9pbmZvKHJlc3VsdERhdGEuZGF0YWJhc2VJbmZvKCkpCi0gICAgLCBtX2RhdGFiYXNlQ29ubmVj
dGlvbklkZW50aWZpZXIocmVzdWx0RGF0YS5kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKCkp
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpJREJEYXRhYmFzZSAtIENyZWF0
aW5nIGRhdGFiYXNlICVzIHdpdGggdmVyc2lvbiAlIiBQUkl1NjQgIiBjb25uZWN0aW9uICUiIFBS
SXU2NCwgbV9pbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtX2luZm8udmVyc2lvbigpLCBtX2Rh
dGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwotICAg
IHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwotICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+cmVn
aXN0ZXJEYXRhYmFzZUNvbm5lY3Rpb24oKnRoaXMpOwotfQotCi1JREJEYXRhYmFzZTo6fklEQkRh
dGFiYXNlKCkKLXsKLSAgICBtX3NlcnZlckNvbm5lY3Rpb24tPnVucmVnaXN0ZXJEYXRhYmFzZUNv
bm5lY3Rpb24oKnRoaXMpOwotfQotCi1ib29sIElEQkRhdGFiYXNlOjpoYXNQZW5kaW5nQWN0aXZp
dHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9jbG9zZWRJblNlcnZlcjsKLX0KLQotY29uc3Qg
U3RyaW5nIElEQkRhdGFiYXNlOjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLm5h
bWUoKTsKLX0KLQotdWludDY0X3QgSURCRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtX2luZm8udmVyc2lvbigpOwotfQotCi1SZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURC
RGF0YWJhc2U6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAotewotICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAg
Zm9yIChhdXRvJiBuYW1lIDogbV9pbmZvLm9iamVjdFN0b3JlTmFtZXMoKSkKLSAgICAgICAgb2Jq
ZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5hbWUpOwotICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQo
KTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lczsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiwgY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpCi17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVk
REIsICJJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKLQotICAgIEFTU0VSVCghbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlz
VmVyc2lvbkNoYW5nZSgpKTsKLQotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24p
IHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJhc2UgaXMg
bm90IHJ1bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKG1faW5mby5oYXNPYmplY3RTdG9yZShuYW1lKSkgewotICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvcjsKLSAgICAgICAgZWMu
bWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0
b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBBbiBvYmplY3Qgc3RvcmUgd2l0aCB0aGUgc3BlY2lmaWVk
IG5hbWUgYWxyZWFkeSBleGlzdHMuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIGlmICgha2V5UGF0aC5pc051bGwoKSAmJiAha2V5UGF0aC5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpTeW50YXhFcnJvcjsKLSAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9i
amVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUga2V5UGF0aCBvcHRpb24gaXMgbm90IGEg
dmFsaWQga2V5IHBhdGguIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IGlmIChhdXRvSW5jcmVtZW50ICYmICFrZXlQYXRoLmlzTnVsbCgpKSB7Ci0gICAgICAgIGlmICgo
a2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6U3RyaW5nICYmIGtleVBh
dGguc3RyaW5nKCkuaXNFbXB0eSgpKSB8fCBrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6Oktl
eVBhdGhUeXBlOjpBcnJheSkgewotICAgICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7Ci0gICAgICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJE
YXRhYmFzZSc6IFRoZSBhdXRvSW5jcmVtZW50IG9wdGlvbiB3YXMgc2V0IGJ1dCB0aGUga2V5UGF0
aCBvcHRpb24gd2FzIGVtcHR5IG9yIGFuIGFycmF5LiIpOwotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJbnN0YWxsIHRoZSBuZXcgT2JqZWN0
U3RvcmUgaW50byB0aGUgY29ubmVjdGlvbidzIG1ldGFkYXRhLgotICAgIElEQk9iamVjdFN0b3Jl
SW5mbyBpbmZvID0gbV9pbmZvLmNyZWF0ZU5ld09iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1
dG9JbmNyZW1lbnQpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgSURCT2JqZWN0U3RvcmUg
ZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdoaWNoIGFsc28gc2NoZWR1bGVzIHRoZSBvcGVyYXRpb24g
c2VydmVyIHNpZGUuCi0gICAgUmVmPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IG1fdmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5jcmVhdGVPYmplY3RTdG9yZShpbmZvKTsKLSAgICByZXR1
cm4gYWRvcHRSZWYoJm9iamVjdFN0b3JlLmxlYWtSZWYoKSk7Ci19Ci0KLVJlZlB0cjxXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVzLCBjb25zdCBTdHJp
bmcmIG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9H
KEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbiIpOwotCi0gICAgaWYgKG1fY2xv
c2VQZW5kaW5nKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52
YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNl
IGNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKG9iamVjdFN0b3Jlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJyb3I7Ci0gICAgICAgIGVjLm1l
c3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24g
J0lEQkRhdGFiYXNlJzogVGhlIHN0b3JlTmFtZXMgcGFyYW1ldGVyIHdhcyBlbXB0eS4iKTsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUgbW9kZSA9IElEQlRyYW5zYWN0aW9uOjpzdHJpbmdUb01vZGUobW9kZVN0cmluZywgZWMu
Y29kZSk7Ci0gICAgaWYgKGVjLmNvZGUpIHsKLSAgICAgICAgZWMubWVzc2FnZSA9IG1ha2VTdHJp
bmcoQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJE
YXRhYmFzZSc6IFRoZSBtb2RlIHByb3ZpZGVkICgnIiksIG1vZGVTdHJpbmcsIEFTQ0lJTGl0ZXJh
bCgiJykgaXMgbm90IG9uZSBvZiAncmVhZG9ubHknIG9yICdyZWFkd3JpdGUnLiIpKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1vZGUgIT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5ICYmIG1vZGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGU6OlJlYWRXcml0ZSkgewotICAgICAgICBlYy5jb2RlID0gVHlwZUVycm9yOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gJiYgIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkT3JGaW5pc2hp
bmcoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRT
dGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
ZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IEEgdmVyc2lvbiBjaGFuZ2Ug
dHJhbnNhY3Rpb24gaXMgcnVubmluZy4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZU5hbWUgOiBvYmplY3RTdG9yZXMpIHsKLSAg
ICAgICAgaWYgKG1faW5mby5oYXNPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tm90Rm91bmRFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBPbmUgb2YgdGhlIHNw
ZWNpZmllZCBvYmplY3Qgc3RvcmVzIHdhcyBub3QgZm91bmQuIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gaW5mbyA9IElEQlRyYW5zYWN0aW9uSW5mbzo6Y2xp
ZW50VHJhbnNhY3Rpb24obV9zZXJ2ZXJDb25uZWN0aW9uLmdldCgpLCBvYmplY3RTdG9yZXMsIG1v
ZGUpOwotICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKCp0aGlz
LCBpbmZvKTsKLQotICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24g
LSBBZGRlZCBhY3RpdmUgdHJhbnNhY3Rpb24gJXMiLCBpbmZvLmlkZW50aWZpZXIoKS5sb2dnaW5n
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5zZXQo
aW5mby5pZGVudGlmaWVyKCksICZ0cmFuc2FjdGlvbi5nZXQoKSk7Ci0KLSAgICByZXR1cm4gYWRv
cHRSZWYoJnRyYW5zYWN0aW9uLmxlYWtSZWYoKSk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmUsIGNvbnN0IFN0cmluZyYgbW9k
ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBv
YmplY3RTdG9yZXMoMSk7Ci0gICAgb2JqZWN0U3RvcmVzWzBdID0gb2JqZWN0U3RvcmU7Ci0gICAg
cmV0dXJuIHRyYW5zYWN0aW9uKGNvbnRleHQsIG9iamVjdFN0b3JlcywgbW9kZSwgZWMpOwotfQot
Ci12b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVj
dFN0b3JlTmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5k
ZXhlZERCLCAiSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0KLSAgICBpZiAoIW1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRh
dGFiYXNlJzogVGhlIGRhdGFiYXNlIGlzIG5vdCBydW5uaW5nIGEgdmVyc2lvbiBjaGFuZ2UgdHJh
bnNhY3Rpb24uIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2luZm8uaGFzT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVO
YW1lKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5k
RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdkZWxldGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIHNwZWNpZmllZCBv
YmplY3Qgc3RvcmUgd2FzIG5vdCBmb3VuZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1faW5mby5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpOwotICAgIG1fdmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlOjpjbG9zZSgpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQkRhdGFiYXNlOjpjbG9zZSAtICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVu
dGlmaWVyKTsKLQotICAgIG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKLSAgICBtYXliZUNsb3NlSW5T
ZXJ2ZXIoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6bWF5YmVDbG9zZUluU2VydmVyKCkKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6Om1heWJlQ2xvc2VJblNlcnZlciAtICUi
IFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKLQotICAgIGlmIChtX2Ns
b3NlZEluU2VydmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyAzLjMuOSBEYXRhYmFzZSBj
bG9zaW5nIHN0ZXBzCi0gICAgLy8gV2FpdCBmb3IgYWxsIHRyYW5zYWN0aW9ucyBjcmVhdGVkIHVz
aW5nIHRoaXMgY29ubmVjdGlvbiB0byBjb21wbGV0ZS4KLSAgICAvLyBPbmNlIHRoZXkgYXJlIGNv
bXBsZXRlLCB0aGlzIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgotICAgIGlmICghbV9hY3RpdmVUcmFu
c2FjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nsb3NlZEluU2Vy
dmVyID0gdHJ1ZTsKLSAgICBtX3NlcnZlckNvbm5lY3Rpb24tPmRhdGFiYXNlQ29ubmVjdGlvbkNs
b3NlZCgqdGhpcyk7Ci19Ci0KLWNvbnN0IGNoYXIqIElEQkRhdGFiYXNlOjphY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIklEQkRhdGFiYXNlIjsKLX0KLQotYm9vbCBJ
REJEYXRhYmFzZTo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lvbigpIGNvbnN0Ci17Ci0g
ICAgLy8gRklYTUU6IFRoaXMgdmFsdWUgd2lsbCBzb21ldGltZXMgYmUgZmFsc2Ugd2hlbiBkYXRh
YmFzZSBvcGVyYXRpb25zIGFyZSBhY3R1YWxseSBpbiBwcm9ncmVzcy4KLSAgICAvLyBTdWNoIGRh
dGFiYXNlIG9wZXJhdGlvbnMgZG8gbm90IHlldCBleGlzdC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBJREJEYXRhYmFzZTo6c3RvcCgpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRh
dGFiYXNlOjpzdG9wIC0gJSIgUFJJdTY0LCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIp
OwotCi0gICAgVmVjdG9yPElEQlJlc291cmNlSWRlbnRpZmllcj4gdHJhbnNhY3Rpb25JZGVudGlm
aWVyczsKLSAgICB0cmFuc2FjdGlvbklkZW50aWZpZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bV9hY3RpdmVUcmFuc2FjdGlvbnMuc2l6ZSgpKTsKLQotICAgIGZvciAoYXV0byYgaWQgOiBtX2Fj
dGl2ZVRyYW5zYWN0aW9ucy5rZXlzKCkpCi0gICAgICAgIHRyYW5zYWN0aW9uSWRlbnRpZmllcnMu
dW5jaGVja2VkQXBwZW5kKGlkKTsKLQotICAgIGZvciAoYXV0byYgaWQgOiB0cmFuc2FjdGlvbklk
ZW50aWZpZXJzKSB7Ci0gICAgICAgIElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IG1fYWN0
aXZlVHJhbnNhY3Rpb25zLmdldChpZCk7Ci0gICAgICAgIGlmICh0cmFuc2FjdGlvbikKLSAgICAg
ICAgICAgIHRyYW5zYWN0aW9uLT5zdG9wKCk7Ci0gICAgfQotCi0gICAgY2xvc2UoKTsKLX0KLQot
UmVmPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvLCBJREJPcGVuREJSZXF1ZXN0JiBy
ZXF1ZXN0KQotewotICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6c3RhcnRWZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb24gJXMiLCBpbmZvLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
KTsKLSAgICBBU1NFUlQoaW5mby5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6
OlZlcnNpb25DaGFuZ2UpOwotICAgIEFTU0VSVCghbV9jbG9zZVBlbmRpbmcpOwotICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotCi0gICAgUmVmPElEQlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoKnRoaXMsIGluZm8sIHJlcXVlc3Qp
OwotICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gJnRyYW5zYWN0aW9uLmdldCgpOwot
Ci0gICAgbV9hY3RpdmVUcmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uLT5pbmZvKCkuaWRlbnRp
ZmllcigpLCAmdHJhbnNhY3Rpb24uZ2V0KCkpOwotCi0gICAgcmV0dXJuIHRyYW5zYWN0aW9uOwot
fQotCi12b2lkIElEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbikKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZFN0
YXJ0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dp
bmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBBU1NFUlQoIW1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKTsKLQotICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgY2xpZW50IHRvIGhh
dmUgYWJvcnRlZCBhIHRyYW5zYWN0aW9uIGJlZm9yZSB0aGUgc2VydmVyIHJlcGxpZXMgYmFjayB0
aGF0IGl0IGhhcyBzdGFydGVkLgotICAgIGlmIChtX2Fib3J0aW5nVHJhbnNhY3Rpb25zLmNvbnRh
aW5zKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2FjdGl2ZVRyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZp
ZXIoKSwgJnRyYW5zYWN0aW9uKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6d2lsbENvbW1pdFRy
YW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCRGF0YWJhc2U6OndpbGxDb21taXRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0aW9u
LmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0g
ICAgYXV0byByZWZUcmFuc2FjdGlvbiA9IG1fYWN0aXZlVHJhbnNhY3Rpb25zLnRha2UodHJhbnNh
Y3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSk7Ci0gICAgQVNTRVJUKHJlZlRyYW5zYWN0aW9uKTsK
LSAgICBtX2NvbW1pdHRpbmdUcmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uLmluZm8oKS5pZGVu
dGlmaWVyKCksIFdURk1vdmUocmVmVHJhbnNhY3Rpb24pKTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZTo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlkQ29tbWl0VHJhbnNhY3Rpb24gJXMi
LCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLQotICAgIGlmIChtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiA9PSAmdHJhbnNh
Y3Rpb24pCi0gICAgICAgIG1faW5mby5zZXRWZXJzaW9uKHRyYW5zYWN0aW9uLmluZm8oKS5uZXdW
ZXJzaW9uKCkpOwotCi0gICAgZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9u
KTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6d2lsbEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6
d2lsbEFib3J0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigp
LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGF1dG8gcmVmVHJhbnNhY3Rp
b24gPSBtX2FjdGl2ZVRyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlm
aWVyKCkpOwotICAgIGlmICghcmVmVHJhbnNhY3Rpb24pCi0gICAgICAgIHJlZlRyYW5zYWN0aW9u
ID0gbV9jb21taXR0aW5nVHJhbnNhY3Rpb25zLnRha2UodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50
aWZpZXIoKSk7Ci0KLSAgICBBU1NFUlQocmVmVHJhbnNhY3Rpb24pOwotICAgIG1fYWJvcnRpbmdU
cmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCksIFdURk1vdmUo
cmVmVHJhbnNhY3Rpb24pKTsKLQotICAgIGlmICh0cmFuc2FjdGlvbi5pc1ZlcnNpb25DaGFuZ2Uo
KSkgewotICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24ub3JpZ2luYWxEYXRhYmFzZUluZm8oKSk7
Ci0gICAgICAgIG1faW5mbyA9ICp0cmFuc2FjdGlvbi5vcmlnaW5hbERhdGFiYXNlSW5mbygpOwot
ICAgICAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFi
YXNlOjpkaWRBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZEFib3J0VHJhbnNhY3Rpb24gJXMi
LCB0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLQotICAgIGlmICh0cmFuc2FjdGlvbi5pc1ZlcnNpb25DaGFuZ2UoKSkgewotICAg
ICAgICBBU1NFUlQodHJhbnNhY3Rpb24ub3JpZ2luYWxEYXRhYmFzZUluZm8oKSk7Ci0gICAgICAg
IEFTU0VSVChtX2luZm8udmVyc2lvbigpID09IHRyYW5zYWN0aW9uLm9yaWdpbmFsRGF0YWJhc2VJ
bmZvKCktPnZlcnNpb24oKSk7Ci0gICAgICAgIG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKLSAgICAg
ICAgbWF5YmVDbG9zZUluU2VydmVyKCk7Ci0gICAgfQotCi0gICAgZGlkQ29tbWl0T3JBYm9ydFRy
YW5zYWN0aW9uKHRyYW5zYWN0aW9uKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZTo6ZGlkQ29tbWl0
T3JBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZENvbW1pdE9yQWJvcnRUcmFuc2FjdGlvbiAl
cyIsIHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotCi0gICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID09ICZ0cmFu
c2FjdGlvbikKLSAgICAgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSBudWxscHRyOwot
Ci0jaWZuZGVmIE5EQkVCVUcKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgaWYgKG1fYWN0
aXZlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkp
KQotICAgICAgICArK2NvdW50OwotICAgIGlmIChtX2NvbW1pdHRpbmdUcmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpCi0gICAgICAgICsrY291bnQ7
Ci0gICAgaWYgKG1fYWJvcnRpbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaW5m
bygpLmlkZW50aWZpZXIoKSkpCi0gICAgICAgICsrY291bnQ7Ci0KLSAgICBBU1NFUlQoY291bnQg
PT0gMSk7Ci0jZW5kaWYKLQotICAgIG1fYWN0aXZlVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2Fj
dGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKTsKLSAgICBtX2NvbW1pdHRpbmdUcmFuc2FjdGlvbnMu
cmVtb3ZlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOwotICAgIG1fYWJvcnRpbmdU
cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOwotCi0g
ICAgaWYgKG1fY2xvc2VQZW5kaW5nKQotICAgICAgICBtYXliZUNsb3NlSW5TZXJ2ZXIoKTsKLX0K
LQotdm9pZCBJREJEYXRhYmFzZTo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJz
aW9uKQotewotICAgIHVpbnQ2NF90IGN1cnJlbnRWZXJzaW9uID0gbV9pbmZvLnZlcnNpb24oKTsK
LSAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQg
LSBjdXJyZW50IHZlcnNpb24gJSIgUFJJdTY0ICIsIHJlcXVlc3RlZCB2ZXJzaW9uICUiIFBSSXU2
NCAiLCBjb25uZWN0aW9uICUiIFBSSXU2NCwgY3VycmVudFZlcnNpb24sIHJlcXVlc3RlZFZlcnNp
b24sIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllcik7Ci0KLSAgICBpZiAoIXNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2Nsb3NlUGVuZGluZykgewotICAgICAgICBzZXJ2ZXJDb25u
ZWN0aW9uKCkuZGlkRmlyZVZlcnNpb25DaGFuZ2VFdmVudChtX2RhdGFiYXNlQ29ubmVjdGlvbklk
ZW50aWZpZXIsIHJlcXVlc3RJZGVudGlmaWVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFJlZjxFdmVudD4gZXZlbnQgPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShyZXF1
ZXN0SWRlbnRpZmllciwgY3VycmVudFZlcnNpb24sIHJlcXVlc3RlZFZlcnNpb24sIGV2ZW50TmFt
ZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpOwotICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0g
ICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdU
Rk1vdmUoZXZlbnQpKTsKLX0KLQotYm9vbCBJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChFdmVu
dCYgZXZlbnQpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaXNwYXRjaEV2
ZW50ICglIiBQUkl1NjQgIikiLCBtX2RhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwotCi0g
ICAgYm9vbCByZXN1bHQgPSBXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudChldmVu
dCk7Ci0KLSAgICBpZiAoZXZlbnQuaXNWZXJzaW9uQ2hhbmdlRXZlbnQoKSAmJiBldmVudC50eXBl
KCkgPT0gZXZlbnROYW1lcygpLnZlcnNpb25jaGFuZ2VFdmVudCkKLSAgICAgICAgc2VydmVyQ29u
bmVjdGlvbigpLmRpZEZpcmVWZXJzaW9uQ2hhbmdlRXZlbnQobV9kYXRhYmFzZUNvbm5lY3Rpb25J
ZGVudGlmaWVyLCBkb3duY2FzdDxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ+KGV2ZW50KS5yZXF1ZXN0
SWRlbnRpZmllcigpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2U6OmRpZENyZWF0ZUluZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCi17Ci0gICAg
YXV0byogb2JqZWN0U3RvcmUgPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5m
by5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlKTsKLSAg
ICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChpbmZvKTsKLX0KLQotdm9pZCBJREJEYXRh
YmFzZTo6ZGlkRGVsZXRlSW5kZXhJbmZvKGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKLXsKLSAg
ICBhdXRvKiBvYmplY3RTdG9yZSA9IG1faW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShp
bmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUpOwot
ICAgIG9iamVjdFN0b3JlLT5kZWxldGVJbmRleChpbmZvLm5hbWUoKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCRGF0YWJhc2VJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDhjYWZjYjQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L0lEQkRhdGFiYXNlSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkRhdGFiYXNlSW1wbF9oCi0jZGVm
aW5lIElEQkRhdGFiYXNlSW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQot
I2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNl
LmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VJbmZvLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgSURCUmVzdWx0RGF0YTsKLWNsYXNzIElEQlRyYW5zYWN0aW9uOwotY2xhc3MgSURC
VHJhbnNhY3Rpb25JbmZvOwotCi1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotY2xhc3MgSURCVHJh
bnNhY3Rpb247Ci0KLWNsYXNzIElEQkRhdGFiYXNlIDogcHVibGljIFdlYkNvcmU6OklEQkRhdGFi
YXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQkRhdGFiYXNlPiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0IElEQlJlc3Vs
dERhdGEmKTsKLQotICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlKCk7Ci0KLSAgICAvLyBJREJEYXRh
YmFzZSBJREwKLSAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIHVpbnQ2
NF90IHZlcnNpb24oKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2Jq
ZWN0U3RvcmVOYW1lcygpIGNvbnN0IGZpbmFsOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IERp
Y3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
PiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBTdHJpbmcmIG1vZGUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFs
OwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwot
ICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgRXZlbnRU
YXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBJREJEYXRhYmFzZUV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQotICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQotICAgIHZvaWQg
cmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IHJlZigpOyB9Ci0gICAgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgZmluYWwgeyBkZXJlZigpOyB9Ci0KLSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzdG9wKCkgZmluYWw7Ci0KLSAgICBjb25z
dCBJREJEYXRhYmFzZUluZm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KLSAgICB1
aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyOyB9Ci0KLSAgICBSZWY8SURCVHJhbnNhY3Rpb24+
IHN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYs
IElEQk9wZW5EQlJlcXVlc3QmKTsKLSAgICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJh
bnNhY3Rpb24mKTsKLQotICAgIHZvaWQgd2lsbENvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uJik7Ci0gICAgdm9pZCBkaWRDb21taXRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYpOwot
ICAgIHZvaWQgd2lsbEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKLSAgICB2b2lk
IGRpZEFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mKTsKLQotICAgIHZvaWQgZmlyZVZl
cnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGVu
dGlmaWVyLCB1aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKLQotICAgIElEQkNvbm5lY3Rpb25U
b1NlcnZlciYgc2VydmVyQ29ubmVjdGlvbigpIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVjdGlvbi5n
ZXQoKTsgfQotCi0gICAgdm9pZCBkaWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZv
Jik7Ci0gICAgdm9pZCBkaWREZWxldGVJbmRleEluZm8oY29uc3QgSURCSW5kZXhJbmZvJik7Ci0K
LSAgICBib29sIGlzQ2xvc2luZ09yQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZVBlbmRp
bmcgfHwgbV9jbG9zZWRJblNlcnZlcjsgfQotCi0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50
JikgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgSURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLQot
ICAgIHZvaWQgZGlkQ29tbWl0T3JBYm9ydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7Ci0K
LSAgICB2b2lkIG1heWJlQ2xvc2VJblNlcnZlcigpOwotCi0gICAgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZjxJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IG1f
c2VydmVyQ29ubmVjdGlvbjsKLSAgICBJREJEYXRhYmFzZUluZm8gbV9pbmZvOwotICAgIHVpbnQ2
NF90IG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciB7IDAgfTsKLQotICAgIGJvb2wgbV9j
bG9zZVBlbmRpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9jbG9zZWRJblNlcnZlciB7IGZhbHNl
IH07Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uOwotICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+PiBtX2FjdGl2ZVRyYW5zYWN0aW9uczsKLSAgICBIYXNoTWFwPElEQlJlc291cmNlSWRl
bnRpZmllciwgUmVmUHRyPElEQlRyYW5zYWN0aW9uPj4gbV9jb21taXR0aW5nVHJhbnNhY3Rpb25z
OwotICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURCVHJhbnNhY3Rp
b24+PiBtX2Fib3J0aW5nVHJhbnNhY3Rpb25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSURCQ2xp
ZW50Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLSNlbmRpZiAvLyBJREJEYXRhYmFzZUltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkZhY3RvcnlJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYmUyMmQuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkZhY3RvcnlJbXBsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIklEQkJpbmRp
bmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKLSNpbmNs
dWRlICJJREJPcGVuREJSZXF1ZXN0SW1wbC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLXN0YXRpYyBib29sIHNo
b3VsZFRocm93U2VjdXJpdHlFeGNlcHRpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBBU1NFUlQoaXM8RG9jdW1lbnQ+KGNvbnRleHQpIHx8IGNvbnRleHQuaXNXb3Jr
ZXJHbG9iYWxTY29wZSgpKTsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7Ci0gICAg
ICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKLSAg
ICAgICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGlmICghZG9jdW1lbnQucGFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgaWYgKCFjb250ZXh0LnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFi
YXNlKGNvbnRleHQudG9wT3JpZ2luKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotUmVmPElEQkZhY3Rvcnk+IElEQkZhY3Rvcnk6OmNyZWF0ZShJREJD
b25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCRmFjdG9yeShjb25uZWN0aW9uKSk7Ci19Ci0KLUlEQkZhY3Rvcnk6OklEQkZhY3Rvcnko
SURCQ29ubmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uKQotICAgIDogbV9jb25uZWN0aW9uVG9T
ZXJ2ZXIoY29ubmVjdGlvbikKLXsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElE
QkZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2Vw
dGlvbkNvZGUmKQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6
SURCT3BlbkRCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJGYWN0b3J5OjpvcGVuIik7Ci0gICAgCi0gICAgcmV0dXJuIG9w
ZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCAwLCBlYykucmVsZWFzZSgpOwotfQotCi1SZWZQdHI8
V2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIGxvbmcgbG9u
ZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURC
RmFjdG9yeTo6b3BlbiIpOwotICAgIAotICAgIGlmICghdmVyc2lvbikgewotICAgICAgICBlYyA9
IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCB2ZXJzaW9uLCBlYykucmVsZWFzZSgpOwotfQot
Ci1SZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbkludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQg
bG9uZyBsb25nIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChuYW1lLmlz
TnVsbCgpKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkVGhyb3dTZWN1cml0eUV4Y2VwdGlvbihjb250ZXh0
KSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSk7Ci0gICAgQVNT
RVJUKGNvbnRleHQudG9wT3JpZ2luKCkpOwotICAgIElEQkRhdGFiYXNlSWRlbnRpZmllciBkYXRh
YmFzZUlkZW50aWZpZXIobmFtZSwgKmNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKmNvbnRleHQu
dG9wT3JpZ2luKCkpOwotICAgIGlmICghZGF0YWJhc2VJZGVudGlmaWVyLmlzVmFsaWQoKSkgewot
ICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgYXV0byByZXF1ZXN0ID0gSURCT3BlbkRCUmVxdWVzdDo6Y3JlYXRlT3BlblJlcXVlc3Qo
bV9jb25uZWN0aW9uVG9TZXJ2ZXIuZ2V0KCksIGNvbnRleHQsIGRhdGFiYXNlSWRlbnRpZmllciwg
dmVyc2lvbik7Ci0gICAgbV9jb25uZWN0aW9uVG9TZXJ2ZXItPm9wZW5EYXRhYmFzZShyZXF1ZXN0
LmdldCgpKTsKLQotICAgIHJldHVybiBhZG9wdFJlZigmcmVxdWVzdC5sZWFrUmVmKCkpOwotfQot
Ci1SZWZQdHI8V2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCRmFjdG9yeTo6
ZGVsZXRlRGF0YWJhc2UgLSAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAobmFt
ZS5pc051bGwoKSkgewotICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotICAgIAotICAgIGlmIChzaG91bGRUaHJvd1NlY3VyaXR5RXhjZXB0aW9u
KGNvbnRleHQpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoY29udGV4dC5zZWN1cml0eU9yaWdpbigpKTsK
LSAgICBBU1NFUlQoY29udGV4dC50b3BPcmlnaW4oKSk7Ci0gICAgSURCRGF0YWJhc2VJZGVudGlm
aWVyIGRhdGFiYXNlSWRlbnRpZmllcihuYW1lLCAqY29udGV4dC5zZWN1cml0eU9yaWdpbigpLCAq
Y29udGV4dC50b3BPcmlnaW4oKSk7Ci0gICAgaWYgKCFkYXRhYmFzZUlkZW50aWZpZXIuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIGVjID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBhdXRvIHJlcXVlc3QgPSBJREJPcGVuREJSZXF1ZXN0OjpjcmVhdGVEZWxl
dGVSZXF1ZXN0KG1fY29ubmVjdGlvblRvU2VydmVyLmdldCgpLCBjb250ZXh0LCBkYXRhYmFzZUlk
ZW50aWZpZXIpOwotICAgIG1fY29ubmVjdGlvblRvU2VydmVyLT5kZWxldGVEYXRhYmFzZShyZXF1
ZXN0LmdldCgpKTsKLQotICAgIHJldHVybiBhZG9wdFJlZigmcmVxdWVzdC5sZWFrUmVmKCkpOwot
fQotCi1zaG9ydCBJREJGYWN0b3J5OjpjbXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0VmFsdWUsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmRWYWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykKLXsKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAg
ICBSZWZQdHI8SURCS2V5PiBmaXJzdCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0
ZSwgZmlyc3RWYWx1ZSk7Ci0gICAgUmVmUHRyPElEQktleT4gc2Vjb25kID0gc2NyaXB0VmFsdWVU
b0lEQktleSgmcmVxdWVzdFN0YXRlLCBzZWNvbmRWYWx1ZSk7Ci0KLSAgICBBU1NFUlQoZmlyc3Qp
OwotICAgIEFTU0VSVChzZWNvbmQpOwotCi0gICAgaWYgKCFmaXJzdC0+aXNWYWxpZCgpIHx8ICFz
ZWNvbmQtPmlzVmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2NtcCcgb24gJ0lEQkZhY3RvcnknOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBh
IHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PHNob3J0PihmaXJzdC0+Y29tcGFyZShzZWNvbmQuZ2V0KCkpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSURCQ2xpZW50Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJGYWN0b3J5SW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkZhY3RvcnlJbXBsLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDg0MDc0MjEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQkZhY3RvcnlJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJGYWN0b3J5SW1wbF9oCi0jZGVm
aW5lIElEQkZhY3RvcnlJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0j
aW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotY2xhc3Mg
SURCT3BlbkRCUmVxdWVzdDsKLQotY2xhc3MgSURCRmFjdG9yeSA6IHB1YmxpYyBXZWJDb3JlOjpJ
REJGYWN0b3J5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQkZhY3Rvcnk+IGNyZWF0ZShJ
REJDb25uZWN0aW9uVG9TZXJ2ZXImKTsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBFeGNlcHRpb25Db2Rl
JikgZmluYWw7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdD4gb3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q+IG9wZW4oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgdW5zaWduZWQgbG9uZyBs
b25nIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
SURCT3BlbkRCUmVxdWVzdD4gZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpIGZpbmFsOwotCi0gICAgc2hvcnQg
Y21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgZmlyc3QsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzZWNvbmQsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotCi1wcml2YXRlOgotICAgIElEQkZhY3RvcnkoSURC
Q29ubmVjdGlvblRvU2VydmVyJik7Ci0gICAgCi0gICAgUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+
IG9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1l
LCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIAotICAg
IFJlZjxJREJDb25uZWN0aW9uVG9TZXJ2ZXI+IG1fY29ubmVjdGlvblRvU2VydmVyOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJGYWN0b3J5SW1wbF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
SW5kZXhJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJJbmRleEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjZlOGRmLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJJ
bmRleEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhJbXBsLmgiCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgot
I2luY2x1ZGUgIklEQkFueUltcGwuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiSURCQ3Vyc29ySW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVJbXBsLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgSURCQ2xpZW50IHsK
LQotSURCSW5kZXg6OklEQkluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IElEQkluZGV4SW5mbyYgaW5mbywgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlKQotICAg
IDogQWN0aXZlRE9NT2JqZWN0KCZjb250ZXh0KQotICAgICwgbV9pbmZvKGluZm8pCi0gICAgLCBt
X29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQotewotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwotfQot
Ci1JREJJbmRleDo6fklEQkluZGV4KCkKLXsKLX0KLQotY29uc3QgY2hhciogSURCSW5kZXg6OmFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSURCSW5kZXgiOwotfQot
Ci1ib29sIElEQkluZGV4OjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSURCSW5kZXg6Omhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0
aW9uKCkuaXNGaW5pc2hlZCgpOwotfQotCi1jb25zdCBTdHJpbmcmIElEQkluZGV4OjpuYW1lKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLm5hbWUoKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlPiBJREJJbmRleDo6b2JqZWN0U3RvcmUoKQotewotICAgIHJldHVybiAm
bV9vYmplY3RTdG9yZTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQkFueT4gSURCSW5kZXg6Omtl
eVBhdGhBbnkoKSBjb25zdAotewotICAgIHJldHVybiBJREJBbnk6OmNyZWF0ZShtX2luZm8ua2V5
UGF0aCgpKTsKLX0KLQotY29uc3QgSURCS2V5UGF0aCYgSURCSW5kZXg6OmtleVBhdGgoKSBjb25z
dAotewotICAgIHJldHVybiBtX2luZm8ua2V5UGF0aCgpOwotfQotCi1ib29sIElEQkluZGV4Ojp1
bmlxdWUoKSBjb25zdAotewotICAgIHJldHVybiBtX2luZm8udW5pcXVlKCk7Ci19Ci0KLWJvb2wg
SURCSW5kZXg6Om11bHRpRW50cnkoKSBjb25zdAotewotICAgIHJldHVybiBtX2luZm8ubXVsdGlF
bnRyeSgpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIHJhbmdl
LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6Om9wZW5DdXJzb3IiKTsKLQot
ICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAg
ICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1
cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIGluZGV4IG9yIGl0cyBvYmplY3Qgc3RvcmUgaGFzIGJl
ZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYg
KCFtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuaXNBY3RpdmUoKSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJv
cjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUg
J29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBv
ciBmaW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSW5k
ZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0Rp
cmVjdGlvbihkaXJlY3Rpb25TdHJpbmcsIGVjLmNvZGUpOwotICAgIGlmIChlYy5jb2RlKSB7Ci0g
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVu
Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgZGlyZWN0aW9uIHByb3ZpZGVkICgnaW52YWxpZC1k
aXJlY3Rpb24nKSBpcyBub3Qgb25lIG9mICduZXh0JywgJ25leHR1bmlxdWUnLCAncHJldicsIG9y
ICdwcmV2dW5pcXVlJy4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
SURCS2V5UmFuZ2VEYXRhIHJhbmdlRGF0YSA9IHJhbmdlOwotICAgIGlmIChyYW5nZURhdGEubG93
ZXJLZXkuaXNOdWxsKCkpCi0gICAgICAgIHJhbmdlRGF0YS5sb3dlcktleSA9IElEQktleURhdGE6
Om1pbmltdW0oKTsKLSAgICBpZiAocmFuZ2VEYXRhLnVwcGVyS2V5LmlzTnVsbCgpKQotICAgICAg
ICByYW5nZURhdGEudXBwZXJLZXkgPSBJREJLZXlEYXRhOjptYXhpbXVtKCk7Ci0KLSAgICBhdXRv
IGluZm8gPSBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcihtX29iamVjdFN0b3JlLm1vZGVyblRy
YW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZpZXIoKSwgbV9pbmZvLmlk
ZW50aWZpZXIoKSwgcmFuZ2VEYXRhLCBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6
S2V5QW5kVmFsdWUpOwotICAgIHJldHVybiBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9u
KCkucmVxdWVzdE9wZW5DdXJzb3IoY29udGV4dCwgKnRoaXMsIGluZm8pOwotfQotCi1SZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29u
c3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0g
ICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpvcGVuQ3Vyc29yIik7Ci0gICAgUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMu
Y29kZSk7Ci0gICAgaWYgKGVjLmNvZGUpIHsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ29wZW5DdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBw
YXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZS5nZXQoKSwg
ZGlyZWN0aW9uLCBlYyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRl
eDo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmNvdW50Iik7
Ci0KLSAgICByZXR1cm4gZG9Db3VudChjb250ZXh0LCBJREJLZXlSYW5nZURhdGE6OmFsbEtleXMo
KSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleVJhbmdlKiByYW5nZSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCSW5k
ZXg6OmNvdW50Iik7Ci0KLSAgICByZXR1cm4gZG9Db3VudChjb250ZXh0LCByYW5nZSA/IElEQktl
eVJhbmdlRGF0YShyYW5nZSkgOiBJREJLZXlSYW5nZURhdGE6OmFsbEtleXMoKSwgZWMpOwotfQot
Ci1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklE
QkluZGV4Ojpjb3VudCIpOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29u
dGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgm
cmVxdWVzdFN0YXRlLCBrZXkpOwotICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09
IEtleVR5cGU6OkludmFsaWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3Qg
YSB2YWxpZCBrZXkuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJl
dHVybiBkb0NvdW50KGNvbnRleHQsIElEQktleVJhbmdlRGF0YShpZGJLZXkuZ2V0KCkpLCBlYyk7
Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6ZG9Db3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdl
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIGlmIChtX2RlbGV0ZWQgfHwg
bV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRoZSBp
bmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghcmFuZ2UuaXNWYWxpZCgpKSB7Ci0gICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBhdXRvJiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0
U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLmlzQWN0aXZl
KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlv
bkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICdjb3VudCcgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGlu
YWN0aXZlIG9yIGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVxdWVzdENvdW50KGNvbnRleHQsICp0aGlzLCByYW5n
ZSk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbktleUN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2Us
IGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
IGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOwot
Ci0gICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKSB7Ci0gICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0g
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVu
S2V5Q3Vyc29yJyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3IgaXRzIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5pc0FjdGl2ZSgpKSB7Ci0g
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnb3BlbktleUN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhlIHRyYW5zYWN0aW9uIGlzIGlu
YWN0aXZlIG9yIGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJREJDdXJzb3I6OnN0
cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMuY29kZSk7Ci0gICAgaWYgKGVjLmNv
ZGUpIHsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ29wZW5LZXlDdXJzb3InIG9uICdJREJJbmRleCc6IFRoZSBkaXJlY3Rpb24gcHJvdmlkZWQg
KCdpbnZhbGlkLWRpcmVjdGlvbicpIGlzIG5vdCBvbmUgb2YgJ25leHQnLCAnbmV4dHVuaXF1ZScs
ICdwcmV2Jywgb3IgJ3ByZXZ1bmlxdWUnLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBhdXRvIGluZm8gPSBJREJDdXJzb3JJbmZvOjppbmRleEN1cnNvcihtX29iamVj
dFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUuaW5mbygpLmlkZW50aWZp
ZXIoKSwgbV9pbmZvLmlkZW50aWZpZXIoKSwgcmFuZ2UsIGRpcmVjdGlvbiwgSW5kZXhlZERCOjpD
dXJzb3JUeXBlOjpLZXlPbmx5KTsKLSAgICByZXR1cm4gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFu
c2FjdGlvbigpLnJlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsICp0aGlzLCBpbmZvKTsKLX0KLQot
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
IGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbktleUN1cnNvciIpOwot
ICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250
ZXh0LCBrZXksIGVjLmNvZGUpOwotICAgIGlmIChlYy5jb2RlKSB7Ci0gICAgICAgIGVjLm1lc3Nh
Z2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuS2V5Q3Vyc29yJyBvbiAn
SURCSW5kZXgnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQs
IGtleVJhbmdlLmdldCgpLCBkaXJlY3Rpb24sIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
SURCS2V5UmFuZ2UqIHJhbmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Z2V0Iik7Ci0KLSAgICByZXR1cm4gZG9HZXQoY29u
dGV4dCwgSURCS2V5UmFuZ2VEYXRhKHJhbmdlKSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6
SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Z2V0Iik7Ci0KLSAg
ICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURC
S2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7Ci0g
ICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewot
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAg
ICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24g
J0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBkb0dldChjb250ZXh0LCBJREJL
ZXlSYW5nZURhdGEoaWRiS2V5LmdldCgpKSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURC
UmVxdWVzdD4gSURCSW5kZXg6OmRvR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYg
ZWMpCi17Ci0gICAgaWYgKG1fZGVsZXRlZCB8fCBtX29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKSB7
Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdnZXQnIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBi
ZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlm
IChyYW5nZS5pc051bGwpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEYXRhRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8m
IHRyYW5zYWN0aW9uID0gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpOwotICAgIGlm
ICghdHJhbnNhY3Rpb24uaXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQkluZGV4Jzog
VGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVxdWVzdEdldFZh
bHVlKGNvbnRleHQsICp0aGlzLCByYW5nZSk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1
ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
QktleVJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldEtleSIpOwotCi0gICAgcmV0dXJuIGRvR2V0S2V5
KGNvbnRleHQsIElEQktleVJhbmdlRGF0YShyYW5nZSksIGVjKTsKLX0KLQotUmVmUHRyPFdlYkNv
cmU6OklEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldEtl
eSIpOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAg
UmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRl
LCBrZXkpOwotICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6Oklu
dmFsaWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJy
b3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5
LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG9HZXRL
ZXkoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhKGlkYktleS5nZXQoKSksIGVjKTsKLX0KLQotUmVm
UHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RT
dG9yZS5pc0RlbGV0ZWQoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXggb3Ig
aXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICBpZiAocmFuZ2UuaXNOdWxsKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBhdXRvJiB0cmFuc2FjdGlvbiA9IG1fb2JqZWN0U3RvcmUubW9kZXJu
VHJhbnNhY3Rpb24oKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLmlzQWN0aXZlKCkpIHsKLSAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJy
b3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBm
aW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRyYW5zYWN0aW9uLnJlcXVlc3RHZXRLZXkoY29udGV4dCwgKnRoaXMsIHJhbmdlKTsKLX0KLQot
dm9pZCBJREJJbmRleDo6bWFya0FzRGVsZXRlZCgpCi17Ci0gICAgQVNTRVJUKCFtX2RlbGV0ZWQp
OwotICAgIG1fZGVsZXRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgSURCSW5kZXg6OnJlZigpCi17Ci0g
ICAgbV9vYmplY3RTdG9yZS5yZWYoKTsKLX0KLQotdm9pZCBJREJJbmRleDo6ZGVyZWYoKQotewot
ICAgIG1fb2JqZWN0U3RvcmUuZGVyZWYoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJJbmRleEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVu
dC9JREJJbmRleEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyNDI1ZS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURC
SW5kZXhJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgSURCSW5kZXhJbXBsX2gKLSNkZWZpbmUgSURCSW5kZXhJbXBsX2gKLQotI2luY2x1
ZGUgIklEQkluZGV4LmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIklEQkluZGV4SW5mby5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBJREJLZXlSYW5nZURhdGE7Ci0KLW5hbWVzcGFjZSBJ
REJDbGllbnQgewotCi1jbGFzcyBJREJPYmplY3RTdG9yZTsKLQotY2xhc3MgSURCSW5kZXggOiBw
dWJsaWMgV2ViQ29yZTo6SURCSW5kZXgsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewotcHVibGlj
OgotICAgIElEQkluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJJbmRleElu
Zm8mLCBJREJPYmplY3RTdG9yZSYpOwotCi0gICAgdmlydHVhbCB+SURCSW5kZXgoKTsKLQotICAg
IC8vIEltcGxlbWVudCB0aGUgSURMCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgZmlu
YWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSgpIGZp
bmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJBbnk+IGtleVBhdGhBbnkoKSBjb25zdCBmaW5h
bDsKLSAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCB1bmlxdWUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIG11bHRpRW50cnkoKSBjb25zdCBmaW5h
bDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIGZp
bmFsIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2Uq
PihudWxscHRyKSwgZWMpOyB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IG9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJh
bmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSBmaW5hbCB7IHJldHVybiBvcGVuQ3Vy
c29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgZmluYWwgeyByZXR1cm4gb3BlbkN1cnNvcihj
b250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgSURCS2V5UmFuZ2UqLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IG9wZW5D
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmKSBmaW5hbDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBjb3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJikgZmluYWw7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3Blbktl
eUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKSBmaW5hbCB7IHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsgfQotICAgIFJlZlB0cjxXZWJDb3Jl
OjpJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykg
ZmluYWwgeyByZXR1cm4gb3BlbktleUN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29y
OjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
IGZpbmFsIHsgcmV0dXJuIG9wZW5LZXlDdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRp
cmVjdGlvbk5leHQoKSwgZWMpOyB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IG9w
ZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgY29uc3Qg
U3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJp
bmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0KLSAgICBS
ZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJ
REJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYp
IGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBnZXRLZXkoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikg
ZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGdldEtleShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0KLSAgICBjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KLQotICAgIElEQk9iamVjdFN0b3JlJiBtb2Rl
cm5PYmplY3RTdG9yZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0KLQotICAgIHZvaWQgbWFy
a0FzRGVsZXRlZCgpOwotICAgIGJvb2wgaXNEZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxl
dGVkOyB9Ci0KLSAgICBib29sIGlzTW9kZXJuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgdm9pZCByZWYoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlcmVmKCkgb3ZlcnJp
ZGU7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRvQ291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBkb0dl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGRv
R2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAg
IGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbDsKLSAgICBib29s
IGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBmaW5hbDsKLSAgICBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFsOwotCi0gICAgSURCSW5kZXhJbmZvIG1f
aW5mbzsKLQotICAgIGJvb2wgbV9kZWxldGVkIHsgZmFsc2UgfTsKLQotICAgIC8vIElEQkluZGV4
IG9iamVjdHMgYXJlIGFsd2F5cyBvd25lZCBieSB0aGVpciByZWZlcmVuY2luZyBJREJPYmplY3RT
dG9yZS4KLSAgICAvLyBJbmRleGVzIHdpbGwgbmV2ZXIgb3V0bGl2ZSBPYmplY3RTdG9yZXMgc28g
aXRzIG9rYXkgdG8ga2VlcCBhIHJhdyBDKysgcmVmZXJlbmNlIGhlcmUuCi0gICAgSURCT2JqZWN0
U3RvcmUmIG1fb2JqZWN0U3RvcmU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotI2VuZGlmIC8vIElEQkluZGV4SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTBjODc2Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJPYmplY3RTdG9yZUltcGwuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJbXBsLmgiCi0KLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgotI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JJbXBsLmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJFcnJvci5oIgot
I2luY2x1ZGUgIklEQkluZGV4SW1wbC5oIgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUg
IklEQktleVJhbmdlRGF0YS5oIgotI2luY2x1ZGUgIklEQlJlcXVlc3RJbXBsLmgiCi0jaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCi0jaW5jbHVkZSAiSW5kZXhlZERCLmgiCi0jaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1
ZGUgPHd0Zi9Mb2NrZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElEQkNs
aWVudCB7Ci0KLVJlZjxJREJPYmplY3RTdG9yZT4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGlu
Zm8sIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJREJPYmplY3RTdG9yZShjb250ZXh0LCBpbmZvLCB0cmFuc2FjdGlvbikpOwotfQotCi1J
REJPYmplY3RTdG9yZTo6SURCT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvLCBJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCi0gICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCi0gICAgLCBtX2luZm8o
aW5mbykKLSAgICAsIG1fb3JpZ2luYWxJbmZvKGluZm8pCi0gICAgLCBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQotewotICAgIHN1c3BlbmRJZk5lZWRlZCgpOwotfQotCi1JREJPYmplY3RTdG9y
ZTo6fklEQk9iamVjdFN0b3JlKCkKLXsKLX0KLQotY29uc3QgY2hhciogSURCT2JqZWN0U3RvcmU6
OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSURCT2JqZWN0U3Rv
cmUiOwotfQotCi1ib29sIElEQk9iamVjdFN0b3JlOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgSURCT2JqZWN0
U3RvcmU6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX3RyYW5z
YWN0aW9uLT5pc0ZpbmlzaGVkKCk7Ci19Ci0KLWNvbnN0IFN0cmluZyBJREJPYmplY3RTdG9yZTo6
bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5mby5uYW1lKCk7Ci19Ci0KLVJlZlB0cjxX
ZWJDb3JlOjpJREJBbnk+IElEQk9iamVjdFN0b3JlOjprZXlQYXRoQW55KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURCQW55OjpjcmVhdGUobV9pbmZvLmtleVBhdGgoKSk7Ci19Ci0KLWNvbnN0IElE
QktleVBhdGggSURCT2JqZWN0U3RvcmU6OmtleVBhdGgoKSBjb25zdAotewotICAgIHJldHVybiBt
X2luZm8ua2V5UGF0aCgpOwotfQotCi1SZWZQdHI8RE9NU3RyaW5nTGlzdD4gSURCT2JqZWN0U3Rv
cmU6OmluZGV4TmFtZXMoKSBjb25zdAotewotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRl
eE5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBuYW1lIDog
bV9pbmZvLmluZGV4TmFtZXMoKSkKLSAgICAgICAgaW5kZXhOYW1lcy0+YXBwZW5kKG5hbWUpOwot
ICAgIGluZGV4TmFtZXMtPnNvcnQoKTsKLQotICAgIHJldHVybiBpbmRleE5hbWVzOwotfQotCi1S
ZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElEQk9iamVjdFN0b3JlOjp0cmFuc2FjdGlv
bigpCi17Ci0gICAgcmV0dXJuICZtX3RyYW5zYWN0aW9uLmdldCgpOwotfQotCi1ib29sIElEQk9i
amVjdFN0b3JlOjphdXRvSW5jcmVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbmZvLmF1
dG9JbmNyZW1lbnQoKTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4
dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxscHRyKSwgZWMpOwotfQotCi1SZWZQdHI8
V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtl
eVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOwotfQotCi1SZWZQdHI8V2Vi
Q29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICByZXR1cm4gb3BlbkN1cnNvcihj
b250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7Ci19Ci0KLVJlZlB0
cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSogcmFuZ2UsIGNvbnN0IFN0cmlu
ZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvciIpOwotCi0gICAgaWYg
KG1fZGVsZXRlZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0g
ICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVu
Q3Vyc29yJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUg
b3IgZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9E
aXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGluZm8gPSBJREJDdXJzb3JJbmZvOjpv
YmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLmdldCgpLCBtX2luZm8uaWRlbnRpZmllcigp
LCByYW5nZSwgZGlyZWN0aW9uKTsKLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJh
bnNhY3Rpb24tPnJlcXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsICp0aGlzLCBpbmZvKTsKLSAgICBy
ZXR1cm4gV1RGTW92ZShyZXF1ZXN0KTsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGly
ZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIFJlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6b25seShjb250ZXh0LCBrZXksIGVjLmNv
ZGUpOwotICAgIGlmIChlYy5jb2RlKSB7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVy
YWwoIkZhaWxlZCB0byBleGVjdXRlICdvcGVuQ3Vyc29yJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBU
aGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UuZ2V0KCksIGRp
cmVjdGlvbiwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0Iik7Ci0KLSAgICBpZiAoIW1f
dHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2Ug
PSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXQnIG9uICdJREJPYmplY3RTdG9y
ZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hlZC4iKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1
ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZh
bHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKLSAgICBpZiAoIWlkYktleSB8fCBpZGJL
ZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5y
ZXF1ZXN0R2V0UmVjb3JkKGNvbnRleHQsICp0aGlzLCBpZGJLZXkuZ2V0KCkpOwotICAgIHJldHVy
biBXVEZNb3ZlKHJlcXVlc3QpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlS
YW5nZSoga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9H
KEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpnZXQiKTsKLQotICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBU
aGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIElEQktleVJhbmdlRGF0YSBrZXlSYW5nZURhdGEoa2V5UmFuZ2Up
OwotICAgIGlmICgha2V5UmFuZ2VEYXRhLmlzVmFsaWQoKSkgewotICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5y
ZXF1ZXN0R2V0UmVjb3JkKGNvbnRleHQsICp0aGlzLCBrZXlSYW5nZURhdGEpOwotICAgIHJldHVy
biBXVEZNb3ZlKHJlcXVlc3QpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmFkZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICByZXR1cm4gcHV0T3JBZGQo
c3RhdGUsIHZhbHVlLCBudWxscHRyLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZTo6Tm9PdmVyd3JpdGUsIElubGluZUtleUNoZWNrOjpQZXJmb3JtLCBlYyk7Ci19Ci0KLVJlZlB0
cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKEpTQzo6RXhlY1N0YXRl
JiBleGVjU3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXk7Ci0g
ICAgaWYgKCFrZXkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgaWRiS2V5ID0gc2NyaXB0VmFsdWVU
b0lEQktleShleGVjU3RhdGUsIGtleSk7Ci0gICAgcmV0dXJuIHB1dE9yQWRkKGV4ZWNTdGF0ZSwg
dmFsdWUsIGlkYktleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGU6Ok5vT3Zl
cndyaXRlLCBJbmxpbmVLZXlDaGVjazo6UGVyZm9ybSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5OwotICAgIGlmICgh
a2V5LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXko
ZXhlY1N0YXRlLCBrZXkpOwotICAgIHJldHVybiBwdXRPckFkZChleGVjU3RhdGUsIHZhbHVlLCBp
ZGJLZXksIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpPdmVyd3JpdGUsIElu
bGluZUtleUNoZWNrOjpQZXJmb3JtLCBlYyk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIHJldHVybiBw
dXRPckFkZChzdGF0ZSwgdmFsdWUsIG51bGxwdHIsIEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVy
d3JpdGVNb2RlOjpPdmVyd3JpdGUsIElubGluZUtleUNoZWNrOjpQZXJmb3JtLCBlYyk7Ci19Ci0K
LVJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0Rm9yQ3Vyc29yVXBkYXRlKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTVmFsdWUga2V5
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIHJldHVybiBwdXRPckFkZChz
dGF0ZSwgdmFsdWUsIHNjcmlwdFZhbHVlVG9JREJLZXkoc3RhdGUsIGtleSksIEluZGV4ZWREQjo6
T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlOjpPdmVyd3JpdGVGb3JDdXJzb3IsIElubGluZUtleUNo
ZWNrOjpEb05vdFBlcmZvcm0sIGVjKTsKLX0KLQotUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpwdXRPckFkZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgUmVmUHRyPElEQktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9k
ZSBvdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjayBpbmxpbmVLZXlDaGVjaywgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3Rv
cmU6OnB1dE9yQWRkIik7Ci0KLSAgICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVyYWwgSURCT2Jq
ZWN0U3RvcmUgbWV0aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVkIGV4Y2VwdGlv
bnMgc2hvdWxkIGZpcmUgYmVmb3JlCi0gICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3IgYW4gb2JqZWN0
IHN0b3JlIGJlaW5nIGRlbGV0ZWQuCi0gICAgLy8gSG93ZXZlciwgYSBoYW5kZnVsIG9mIFczQyBJ
REIgdGVzdHMgZXhwZWN0IHRoZSBkZWxldGVkIGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgdHJh
bnNhY3Rpb24gaW5hY3RpdmUgZXhjZXB0aW9uIGFsc28gYXBwbGllcy4KLSAgICAvLyBBZGRpdGlv
bmFsbHksIENocm9tZSBhbmQgRWRnZSBhZ3JlZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2VzIExlZ2Fj
eSBJREIgaW4gV2ViS2l0LgotICAgIC8vIFVudGlsIHRoaXMgaXMgc29ydGVkIG91dCwgd2UnbGwg
YWdyZWUgd2l0aCB0aGUgdGVzdCBhbmQgdGhlIG1ham9yaXR5IHNoYXJlIGJyb3dzZXJzLgotICAg
IGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogVGhlIG9iamVjdCBz
dG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4g
YW4gSURCT2JqZWN0U3RvcmU6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBmaW5pc2hl
ZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fdHJhbnNh
Y3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlJlYWRPbmx5RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IFRoZSB0cmFuc2Fj
dGlvbiBpcyByZWFkLW9ubHkuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAvLyBDbGVhciB0aGUg
RE9NIGV4Y2VwdGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0
YXJnZXRlZCBleGNlcHRpb24uCi0gICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7Ci0KLSAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKLSAg
ICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBp
biBhbiBJREJPYmplY3RTdG9yZTogQW4gb2JqZWN0IGNvdWxkIG5vdCBiZSBjbG9uZWQuIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChzZXJpYWxpemVkVmFsdWUt
Pmhhc0Jsb2JVUkxzKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxp
c3Qgc3VwcG9ydAotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFD
bG9uZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
c3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBCbG9iVVJMcyBhcmUgbm90IHlldCBz
dXBwb3J0ZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChr
ZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJG
YWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBUaGUgcGFyYW1ldGVy
IGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgYm9vbCB1c2VzSW5saW5lS2V5cyA9ICFtX2luZm8ua2V5UGF0aCgpLmlzTnVsbCgpOwot
ICAgIGJvb2wgdXNlc0tleUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKLSAgICBpZiAodXNl
c0lubGluZUtleXMgJiYgaW5saW5lS2V5Q2hlY2sgPT0gSW5saW5lS2V5Q2hlY2s6OlBlcmZvcm0p
IHsKLSAgICAgICAgaWYgKGtleSkgewotICAgICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBUaGUgb2Jq
ZWN0IHN0b3JlIHVzZXMgaW4tbGluZSBrZXlzIGFuZCB0aGUga2V5IHBhcmFtZXRlciB3YXMgcHJv
dmlkZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAg
ICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBtYXliZUNyZWF0ZUlEQktleUZyb21TY3Jp
cHRWYWx1ZUFuZEtleVBhdGgoc3RhdGUsIHZhbHVlLCBtX2luZm8ua2V5UGF0aCgpKTsKLSAgICAg
ICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgewotICAgICAgICAg
ICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7Ci0gICAgICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFu
IElEQk9iamVjdFN0b3JlOiBFdmFsdWF0aW5nIHRoZSBvYmplY3Qgc3RvcmUncyBrZXkgcGF0aCB5
aWVsZGVkIGEgdmFsdWUgdGhhdCBpcyBub3QgYSB2YWxpZCBrZXkuIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgha2V5UGF0aEtleSkgewot
ICAgICAgICAgICAgaWYgKHVzZXNLZXlHZW5lcmF0b3IpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShzdGF0ZSwgdmFsdWUsIG1faW5mby5rZXlQ
YXRoKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6RGF0YUVycm9yOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAgICAgICAg
IGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSByZWNvcmQgaW4gYW4g
SURCT2JqZWN0U3RvcmU6IEV2YWx1YXRpbmcgdGhlIG9iamVjdCBzdG9yZSdzIGtleSBwYXRoIGRp
ZCBub3QgeWllbGQgYSB2YWx1ZS4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXlQYXRoS2V5KSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWtleSk7Ci0gICAgICAgICAgICBrZXkgPSBrZXlQYXRoS2V5Owot
ICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghdXNlc0tleUdlbmVyYXRvciAmJiAha2V5KSB7Ci0g
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFu
IElEQk9iamVjdFN0b3JlOiBUaGUgb2JqZWN0IHN0b3JlIHVzZXMgb3V0LW9mLWxpbmUga2V5cyBh
bmQgaGFzIG5vIGtleSBnZW5lcmF0b3IgYW5kIHRoZSBrZXkgcGFyYW1ldGVyIHdhcyBub3QgcHJv
dmlkZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8gY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSk7Ci0gICAg
aWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBSZWY8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RQdXRPckFkZCgqY29u
dGV4dCwgKnRoaXMsIGtleS5nZXQoKSwgKnNlcmlhbGl6ZWRWYWx1ZSwgb3ZlcndyaXRlTW9kZSk7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKHJlcXVlc3QubGVha1JlZigpKTsKLX0KLQotUmVmUHRyPFdl
YkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFuZ2UsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgcmV0dXJuIGRvRGVsZXRlKGNvbnRleHQsIGtl
eVJhbmdlLCBlYyk7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZG9E
ZWxldGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJh
bmdlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24iKTsKLQotICAgIC8vIFRoZSBJREIgc3Bl
YyBmb3Igc2V2ZXJhbCBJREJPYmplY3RTdG9yZSBtZXRob2RzIHN0YXRlcyB0aGF0IHRyYW5zYWN0
aW9uIHJlbGF0ZWQgZXhjZXB0aW9ucyBzaG91bGQgZmlyZSBiZWZvcmUKLSAgICAvLyB0aGUgZXhj
ZXB0aW9uIGZvciBhbiBvYmplY3Qgc3RvcmUgYmVpbmcgZGVsZXRlZC4KLSAgICAvLyBIb3dldmVy
LCBhIGhhbmRmdWwgb2YgVzNDIElEQiB0ZXN0cyBleHBlY3QgdGhlIGRlbGV0ZWQgZXhjZXB0aW9u
IGV2ZW4gdGhvdWdoIHRoZSB0cmFuc2FjdGlvbiBpbmFjdGl2ZSBleGNlcHRpb24gYWxzbyBhcHBs
aWVzLgotICAgIC8vIEFkZGl0aW9uYWxseSwgQ2hyb21lIGFuZCBFZGdlIGFncmVlIHdpdGggdGhl
IHRlc3QsIGFzIGRvZXMgTGVnYWN5IElEQiBpbiBXZWJLaXQuCi0gICAgLy8gVW50aWwgdGhpcyBp
cyBzb3J0ZWQgb3V0LCB3ZSdsbCBhZ3JlZSB3aXRoIHRoZSB0ZXN0IGFuZCB0aGUgbWFqb3JpdHkg
c2hhcmUgYnJvd3NlcnMuCi0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAnSURCT2Jq
ZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3Rp
dmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0
aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0
aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7Ci0gICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UmVhZE9ubHlFcnJvcjsKLSAgICAgICAg
ZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIHJlYWQtb25seS4iKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSURCS2V5UmFuZ2VEYXRhIGtleVJhbmdl
RGF0YShrZXlSYW5nZSk7Ci0gICAgaWYgKCFrZXlSYW5nZURhdGEuaXNWYWxpZCgpKSB7Ci0gICAg
ICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBl
Yy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlJyBvbiAn
SURCT2JqZWN0U3RvcmUnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleSByYW5nZS4i
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBtX3RyYW5zYWN0aW9uLT5yZXF1ZXN0RGVsZXRlUmVjb3JkKGNvbnRleHQsICp0
aGlzLCBrZXlSYW5nZURhdGEpOwotICAgIHJldHVybiBXVEZNb3ZlKHJlcXVlc3QpOwotfQotCi1S
ZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgcmV0dXJu
IG1vZGVybkRlbGV0ZShjb250ZXh0LCBrZXkuanNWYWx1ZSgpLCBlYyk7Ci19Ci0KLVJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6bW9kZXJuRGVsZXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCi17Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0g
ICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0
YXRlLCBrZXkpOwotICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6
OkludmFsaWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRh
RXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEg
dmFsaWQga2V5LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZG9EZWxldGUoY29udGV4dCwgJklEQktleVJhbmdlOjpjcmVhdGUoaWRiS2V5LmdldCgpKS5n
ZXQoKSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpj
bGVhciIpOwotCi0gICAgLy8gVGhlIElEQiBzcGVjIGZvciBzZXZlcmFsIElEQk9iamVjdFN0b3Jl
IG1ldGhvZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVsYXRlZCBleGNlcHRpb25zIHNob3Vs
ZCBmaXJlIGJlZm9yZQotICAgIC8vIHRoZSBleGNlcHRpb24gZm9yIGFuIG9iamVjdCBzdG9yZSBi
ZWluZyBkZWxldGVkLgotICAgIC8vIEhvd2V2ZXIsIGEgaGFuZGZ1bCBvZiBXM0MgSURCIHRlc3Rz
IGV4cGVjdCB0aGUgZGVsZXRlZCBleGNlcHRpb24gZXZlbiB0aG91Z2ggdGhlIHRyYW5zYWN0aW9u
IGluYWN0aXZlIGV4Y2VwdGlvbiBhbHNvIGFwcGxpZXMuCi0gICAgLy8gQWRkaXRpb25hbGx5LCBD
aHJvbWUgYW5kIEVkZ2UgYWdyZWUgd2l0aCB0aGUgdGVzdCwgYXMgZG9lcyBMZWdhY3kgSURCIGlu
IFdlYktpdC4KLSAgICAvLyBVbnRpbCB0aGlzIGlzIHNvcnRlZCBvdXQsIHdlJ2xsIGFncmVlIHdp
dGggdGhlIHRlc3QgYW5kIHRoZSBtYWpvcml0eSBzaGFyZSBicm93c2Vycy4KLSAgICBpZiAobV9k
ZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxp
ZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICdjbGVhcicgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIG9iamVjdCBzdG9yZSBo
YXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIGVj
Lm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjbGVhcicgb24gJ0lE
Qk9iamVjdFN0b3JlJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9yIGZpbmlzaGVkLiIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobV90cmFuc2FjdGlv
bi0+aXNSZWFkT25seSgpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6UmVhZE9ubHlFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFp
bGVkIHRvIGV4ZWN1dGUgJ2NsZWFyJyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rp
b24gaXMgcmVhZC1vbmx5LiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IG1fdHJhbnNhY3Rpb24tPnJlcXVlc3RDbGVhck9i
amVjdFN0b3JlKGNvbnRleHQsICp0aGlzKTsKLSAgICByZXR1cm4gYWRvcHRSZWYocmVxdWVzdC5s
ZWFrUmVmKCkpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRleGVkREIsICJJ
REJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXggJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0g
ICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRo
ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVy
cm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBkYXRhYmFzZSBpcyBub3Qg
cnVubmluZyBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsK
LSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0
aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICgha2V5
UGF0aC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpTeW50YXhFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0
aCBhcmd1bWVudCBjb250YWlucyBhbiBpbnZhbGlkIGtleSBwYXRoLiIpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAobmFtZS5pc051bGwoKSkgewotICAgICAgICBl
Yy5jb2RlID0gVHlwZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAg
ICBpZiAobV9pbmZvLmhhc0luZGV4KG5hbWUpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RT
dG9yZSc6IEFuIGluZGV4IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5UGF0aC50eXBl
KCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6QXJyYXkgJiYgbXVsdGlFbnRyeSkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRBY2Nlc3NFcnJvcjsK
LSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Ny
ZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0aCBhcmd1bWVudCB3YXMg
YW4gYXJyYXkgYW5kIHRoZSBtdWx0aUVudHJ5IG9wdGlvbiBpcyB0cnVlLiIpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBJbnN0YWxsIHRoZSBuZXcgSW5kZXggaW50
byB0aGUgT2JqZWN0U3RvcmUncyBpbmZvLgotICAgIElEQkluZGV4SW5mbyBpbmZvID0gbV9pbmZv
LmNyZWF0ZU5ld0luZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0gICAg
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5kaWRDcmVhdGVJbmRleEluZm8oaW5mbyk7Ci0KLSAg
ICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBJREJPYmplY3RTdG9yZSBmcm9tIHRoZSB0cmFuc2FjdGlv
biwgd2hpY2ggYWxzbyBzY2hlZHVsZXMgdGhlIG9wZXJhdGlvbiBzZXJ2ZXIgc2lkZS4KLSAgICBh
dXRvIGluZGV4ID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSW5kZXgoKnRoaXMsIGluZm8pOwotICAg
IFJlZlB0cjxJREJJbmRleD4gcmVmSW5kZXggPSBpbmRleC5nZXQoKTsKLQotICAgIExvY2tlcjxM
b2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKLSAgICBtX3JlZmVyZW5jZWRJbmRl
eGVzLnNldChuYW1lLCBXVEZNb3ZlKGluZGV4KSk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShyZWZJ
bmRleCk7Ci19Ci0KLVJlZlB0cjxXZWJDb3JlOjpJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6Omlu
ZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVj
KQotewotICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6aW5kZXgiKTsKLQotICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUg
b2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkT3JGaW5pc2hpbmco
KSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0
ZUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnaW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBmaW5p
c2hlZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgTG9ja2VyPExv
Y2s+IGxvY2tlcihtX3JlZmVyZW5jZWRJbmRleExvY2spOwotICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3JlZmVyZW5jZWRJbmRleGVzLmZpbmQoaW5kZXhOYW1lKTsKLSAgICBpZiAoaXRlcmF0b3IgIT0g
bV9yZWZlcmVuY2VkSW5kZXhlcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKLQotICAgIGF1dG8qIGluZm8gPSBtX2luZm8uaW5mb0ZvckV4aXN0aW5nSW5kZXgo
aW5kZXhOYW1lKTsKLSAgICBpZiAoIWluZm8pIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnaW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRo
ZSBzcGVjaWZpZWQgaW5kZXggd2FzIG5vdCBmb3VuZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgYXV0byBpbmRleCA9IHN0ZDo6bWFrZV91bmlxdWU8SURCSW5kZXg+
KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICppbmZvLCAqdGhpcyk7Ci0gICAgUmVmUHRyPElE
QkluZGV4PiByZWZJbmRleCA9IGluZGV4LmdldCgpOwotICAgIG1fcmVmZXJlbmNlZEluZGV4ZXMu
c2V0KGluZGV4TmFtZSwgV1RGTW92ZShpbmRleCkpOwotCi0gICAgcmV0dXJuIHJlZkluZGV4Owot
fQotCi12b2lkIElEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklE
Qk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAg
ICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICdkZWxldGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhl
IG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc1ZlcnNpb25DaGFuZ2UoKSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAg
ICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRl
SW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBkYXRhYmFzZSBpcyBub3QgcnVubmluZyBh
IHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwotICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZGVsZXRlSW5k
ZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSB0cmFuc2FjdGlvbiBpcyBpbmFjdGl2ZSBvciBm
aW5pc2hlZC4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9pbmZvLmhh
c0luZGV4KG5hbWUpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Tm90Rm91bmRFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2RlbGV0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgc3BlY2lm
aWVkIGluZGV4IHdhcyBub3QgZm91bmQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBhdXRvKiBpbmZvID0gbV9pbmZvLmluZm9Gb3JFeGlzdGluZ0luZGV4KG5hbWUpOwotICAgIEFT
U0VSVChpbmZvKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmRpZERlbGV0ZUluZGV4
SW5mbygqaW5mbyk7Ci0KLSAgICBtX2luZm8uZGVsZXRlSW5kZXgobmFtZSk7Ci0KLSAgICB7Ci0g
ICAgICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9yZWZlcmVuY2VkSW5kZXhMb2NrKTsKLSAgICAg
ICAgaWYgKGF1dG8gaW5kZXggPSBtX3JlZmVyZW5jZWRJbmRleGVzLnRha2UobmFtZSkpIHsKLSAg
ICAgICAgICAgIGluZGV4LT5tYXJrQXNEZWxldGVkKCk7Ci0gICAgICAgICAgICBtX2RlbGV0ZWRJ
bmRleGVzLmFkZChXVEZNb3ZlKGluZGV4KSk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIG1f
dHJhbnNhY3Rpb24tPmRlbGV0ZUluZGV4KG1faW5mby5pZGVudGlmaWVyKCksIG5hbWUpOwotfQot
Ci1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpjb3VudCIpOwotCi0gICAg
cmV0dXJuIGRvQ291bnQoY29udGV4dCwgSURCS2V5UmFuZ2VEYXRhOjphbGxLZXlzKCksIGVjKTsK
LX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhJbmRl
eGVkREIsICJJREJPYmplY3RTdG9yZTo6Y291bnQiKTsKLQotICAgIERPTVJlcXVlc3RTdGF0ZSBy
ZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlw
dFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKLSAgICBpZiAoIWlkYktleSB8fCBp
ZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICBlYy5tZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJPYmplY3RTdG9yZSc6
IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gZG9Db3VudChjb250ZXh0LCBJREJLZXlSYW5nZURh
dGEoaWRiS2V5LmdldCgpKSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
QktleVJhbmdlKiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7Ci0KLSAgICByZXR1cm4gZG9D
b3VudChjb250ZXh0LCByYW5nZSA/IElEQktleVJhbmdlRGF0YShyYW5nZSkgOiBJREJLZXlSYW5n
ZURhdGE6OmFsbEtleXMoKSwgZWMpOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OmRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKLXsKLSAgICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVyYWwgSURCT2JqZWN0U3RvcmUgbWV0
aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVkIGV4Y2VwdGlvbnMgc2hvdWxkIGZp
cmUgYmVmb3JlCi0gICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3IgYW4gb2JqZWN0IHN0b3JlIGJlaW5n
IGRlbGV0ZWQuCi0gICAgLy8gSG93ZXZlciwgYSBoYW5kZnVsIG9mIFczQyBJREIgdGVzdHMgZXhw
ZWN0IHRoZSBkZWxldGVkIGV4Y2VwdGlvbiBldmVuIHRob3VnaCB0aGUgdHJhbnNhY3Rpb24gaW5h
Y3RpdmUgZXhjZXB0aW9uIGFsc28gYXBwbGllcy4KLSAgICAvLyBBZGRpdGlvbmFsbHksIENocm9t
ZSBhbmQgRWRnZSBhZ3JlZSB3aXRoIHRoZSB0ZXN0LCBhcyBkb2VzIExlZ2FjeSBJREIgaW4gV2Vi
S2l0LgotICAgIC8vIFVudGlsIHRoaXMgaXMgc29ydGVkIG91dCwgd2UnbGwgYWdyZWUgd2l0aCB0
aGUgdGVzdCBhbmQgdGhlIG1ham9yaXR5IHNoYXJlIGJyb3dzZXJzLgotICAgIGlmIChtX2RlbGV0
ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3Rh
dGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ2NvdW50JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgb2JqZWN0IHN0b3JlIGhhcyBi
ZWVuIGRlbGV0ZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlm
ICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgZWMubWVz
c2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCT2Jq
ZWN0U3RvcmUnOiBUaGUgdHJhbnNhY3Rpb24gaXMgaW5hY3RpdmUgb3IgZmluaXNoZWQuIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghcmFuZ2UuaXNWYWxpZCgp
KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV90cmFuc2FjdGlv
bi0+cmVxdWVzdENvdW50KGNvbnRleHQsICp0aGlzLCByYW5nZSk7Ci19Ci0KLXZvaWQgSURCT2Jq
ZWN0U3RvcmU6Om1hcmtBc0RlbGV0ZWQoKQotewotICAgIG1fZGVsZXRlZCA9IHRydWU7Ci19Ci0K
LXZvaWQgSURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VBYm9ydCgp
Ci17Ci0gICAgbV9pbmZvID0gbV9vcmlnaW5hbEluZm87Ci19Ci0KLXZvaWQgSURCT2JqZWN0U3Rv
cmU6OnZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikgY29u
c3QKLXsKLSAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7Ci0g
ICAgZm9yIChhdXRvJiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCi0gICAg
ICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCT2JqZWN0U3RvcmVJbXBsLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDMwNmIxNTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQk9iamVjdFN0b3JlSW1wbC5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQk9iamVjdFN0b3JlSW1w
bF9oCi0jZGVmaW5lIElEQk9iamVjdFN0b3JlSW1wbF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIklEQklu
ZGV4SW1wbC5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCT2Jq
ZWN0U3RvcmVJbmZvLmgiCi0jaW5jbHVkZSAiSW5kZXhlZERCLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgSURCS2V5OwotCi1zdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhOwotCi1uYW1l
c3BhY2UgSURCQ2xpZW50IHsKLQotY2xhc3MgSURCUmVxdWVzdDsKLWNsYXNzIElEQlRyYW5zYWN0
aW9uOwotCi1jbGFzcyBJREJPYmplY3RTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpJREJPYmplY3RT
dG9yZSwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJ
REJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJP
YmplY3RTdG9yZUluZm8mLCBJREJUcmFuc2FjdGlvbiYpOwotCi0gICAgfklEQk9iamVjdFN0b3Jl
KCkgZmluYWw7Ci0KLSAgICAvLyBJbXBsZW1lbnQgdGhlIElEQk9iamVjdFN0b3JlIElETAotICAg
IGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklE
QkFueT4ga2V5UGF0aEFueSgpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IElEQktleVBhdGgga2V5
UGF0aCgpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5hbWVz
KCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiB0cmFu
c2FjdGlvbigpIGZpbmFsOwotICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IGZpbmFsOwot
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IGFkZChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OklEQlJlcXVlc3Q+IHB1dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklE
QlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBv
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgSURCS2V5UmFuZ2UqLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJikgZmluYWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IG9w
ZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZ2V0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURC
UmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1
ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1ZSBrZXks
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJ
REJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNWYWx1
ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
SURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBjbGVh
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmlu
YWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4PiBjcmVhdGVJbmRleChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgZmlu
YWw7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4PiBpbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIHZvaWQgZGVsZXRlSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsK
LSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotICAgIFJlZlB0cjxXZWJD
b3JlOjpJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCS2V5UmFu
Z2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFs
OwotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHB1dEZvckN1cnNvclVwZGF0ZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJik7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1vZGVybkRlbGV0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
Jik7Ci0KLSAgICB2b2lkIG1hcmtBc0RlbGV0ZWQoKTsKLSAgICBib29sIGlzRGVsZXRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQotCi0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZv
JiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9Ci0KLSAgICAvLyBGSVhNRTogQWZ0ZXIg
cmVtb3ZpbmcgTGVnYWN5SURCIGFuZCBmb2xkaW5nIGFic3RyYWN0L2ltcGxlbWVudGF0aW9uIGNs
YXNzZXMgdG9nZXRoZXIsCi0gICAgLy8gdGhpcyB3aWxsIG5vIGxvbmdlciBiZSBuZWNlc3Nhcnku
Ci0gICAgSURCVHJhbnNhY3Rpb24mIG1vZGVyblRyYW5zYWN0aW9uKCkgeyByZXR1cm4gbV90cmFu
c2FjdGlvbi5nZXQoKTsgfQotCi0gICAgdm9pZCByb2xsYmFja0luZm9Gb3JWZXJzaW9uQ2hhbmdl
QWJvcnQoKTsKLQotICAgIGJvb2wgaXNNb2Rlcm4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgICB2b2lkIHZpc2l0UmVmZXJlbmNlZEluZGV4ZXMoSlNDOjpTbG90VmlzaXRv
ciYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIElEQk9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mLCBJREJUcmFuc2FjdGlvbiYpOwot
Ci0gICAgZW51bSBjbGFzcyBJbmxpbmVLZXlDaGVjayB7Ci0gICAgICAgIFBlcmZvcm0sCi0gICAg
ICAgIERvTm90UGVyZm9ybSwKLSAgICB9OwotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHB1dE9y
QWRkKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBSZWZQdHI8SURCS2V5PiwgSW5kZXhl
ZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUsIElubGluZUtleUNoZWNrLCBFeGNlcHRpb25D
b2RlV2l0aE1lc3NhZ2UmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gZG9Db3Vu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJik7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IGRvRGVsZXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYpOwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgY29uc3QgY2hhciogYWN0aXZl
RE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3Vt
ZW50U3VzcGVuc2lvbigpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QgZmluYWw7Ci0KLSAgICBJREJPYmplY3RTdG9yZUluZm8gbV9pbmZvOwotICAgIElE
Qk9iamVjdFN0b3JlSW5mbyBtX29yaWdpbmFsSW5mbzsKLSAgICBSZWY8SURCVHJhbnNhY3Rpb24+
IG1fdHJhbnNhY3Rpb247Ci0KLSAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07Ci0KLSAgICBt
dXRhYmxlIExvY2sgbV9yZWZlcmVuY2VkSW5kZXhMb2NrOwotICAgIEhhc2hNYXA8U3RyaW5nLCBz
dGQ6OnVuaXF1ZV9wdHI8SURCSW5kZXg+PiBtX3JlZmVyZW5jZWRJbmRleGVzOwotICAgIEhhc2hT
ZXQ8c3RkOjp1bmlxdWVfcHRyPElEQkluZGV4Pj4gbV9kZWxldGVkSW5kZXhlczsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCT2JqZWN0U3RvcmVJbXBs
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9J
REJPcGVuREJSZXF1ZXN0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9jbGllbnQvSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2Y2Y0MGZhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJREJPcGVuREJSZXF1ZXN0SW1wbC5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLSNpbmNsdWRlICJJREJEYXRhYmFzZUltcGwuaCIKLSNpbmNsdWRlICJJREJFcnJvci5oIgot
I2luY2x1ZGUgIklEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJJREJSZXN1
bHREYXRhLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCi0jaW5jbHVkZSAiSURC
VmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLVJlZjxJREJPcGVuREJSZXF1
ZXN0PiBJREJPcGVuREJSZXF1ZXN0OjpjcmVhdGVEZWxldGVSZXF1ZXN0KElEQkNvbm5lY3Rpb25U
b1NlcnZlciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZpZXIpCi17Ci0gICAgQVNT
RVJUKGRhdGFiYXNlSWRlbnRpZmllci5pc1ZhbGlkKCkpOwotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IElEQk9wZW5EQlJlcXVlc3QoY29ubmVjdGlvbiwgY29udGV4dCwgZGF0YWJhc2VJZGVudGlm
aWVyLCAwLCBJbmRleGVkREI6OlJlcXVlc3RUeXBlOjpEZWxldGUpKTsKLX0KLQotUmVmPElEQk9w
ZW5EQlJlcXVlc3Q+IElEQk9wZW5EQlJlcXVlc3Q6OmNyZWF0ZU9wZW5SZXF1ZXN0KElEQkNvbm5l
Y3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZpZXIsIHVpbnQ2
NF90IHZlcnNpb24pCi17Ci0gICAgQVNTRVJUKGRhdGFiYXNlSWRlbnRpZmllci5pc1ZhbGlkKCkp
OwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQk9wZW5EQlJlcXVlc3QoY29ubmVjdGlvbiwg
Y29udGV4dCwgZGF0YWJhc2VJZGVudGlmaWVyLCB2ZXJzaW9uLCBJbmRleGVkREI6OlJlcXVlc3RU
eXBlOjpPcGVuKSk7Ci19Ci0gICAgCi1JREJPcGVuREJSZXF1ZXN0OjpJREJPcGVuREJSZXF1ZXN0
KElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBkYXRhYmFzZUlkZW50aWZp
ZXIsIHVpbnQ2NF90IHZlcnNpb24sIEluZGV4ZWREQjo6UmVxdWVzdFR5cGUgcmVxdWVzdFR5cGUp
Ci0gICAgOiBJREJSZXF1ZXN0KGNvbm5lY3Rpb24sIGNvbnRleHQpCi0gICAgLCBtX2RhdGFiYXNl
SWRlbnRpZmllcihkYXRhYmFzZUlkZW50aWZpZXIpCi0gICAgLCBtX3ZlcnNpb24odmVyc2lvbikK
LXsKLSAgICBtX3JlcXVlc3RUeXBlID0gcmVxdWVzdFR5cGU7Ci19Ci0KLUlEQk9wZW5EQlJlcXVl
c3Q6On5JREJPcGVuREJSZXF1ZXN0KCkKLXsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0Ojpv
bkVycm9yKGNvbnN0IElEQlJlc3VsdERhdGEmIGRhdGEpCi17Ci0gICAgbV9kb21FcnJvciA9IERP
TUVycm9yOjpjcmVhdGUoZGF0YS5lcnJvcigpLm5hbWUoKSk7Ci0gICAgZW5xdWV1ZUV2ZW50KElE
QlJlcXVlc3RDb21wbGV0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwg
dHJ1ZSwgdHJ1ZSwgKnRoaXMpKTsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0Ojp2ZXJzaW9u
Q2hhbmdlVHJhbnNhY3Rpb25EaWRGaW5pc2goKQotewotICAgIC8vIDMuMy43ICJ2ZXJzaW9uY2hh
bmdlIiB0cmFuc2FjdGlvbiBzdGVwcwotICAgIC8vIFdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGZp
bmlzaGVkLCBhZnRlciBmaXJpbmcgY29tcGxldGUvYWJvcnQgb24gdGhlIHRyYW5zYWN0aW9uLCBp
bW1lZGlhdGVseSBzZXQgcmVxdWVzdCdzIHRyYW5zYWN0aW9uIHByb3BlcnR5IHRvIG51bGwuCi0g
ICAgbV9zaG91bGRFeHBvc2VUcmFuc2FjdGlvblRvRE9NID0gZmFsc2U7Ci19Ci0KLXZvaWQgSURC
T3BlbkRCUmVxdWVzdDo6ZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQoKQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpmaXJlU3VjY2Vzc0FmdGVyVmVy
c2lvbkNoYW5nZUNvbW1pdCgpIik7Ci0KLSAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkp
OwotICAgIEFTU0VSVChtX3Jlc3VsdCk7Ci0gICAgQVNTRVJUKG1fcmVzdWx0LT50eXBlKCkgPT0g
SURCQW55OjpUeXBlOjpJREJEYXRhYmFzZSk7Ci0gICAgbV90cmFuc2FjdGlvbi0+YWRkUmVxdWVz
dCgqdGhpcyk7Ci0KLSAgICBhdXRvIGV2ZW50ID0gSURCUmVxdWVzdENvbXBsZXRpb25FdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIGZhbHNlLCBmYWxzZSwgKnRoaXMpOwot
ICAgIG1fb3BlbkRhdGFiYXNlU3VjY2Vzc0V2ZW50ID0gJmV2ZW50LmdldCgpOwotCi0gICAgZW5x
dWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKLX0KLQotdm9pZCBJREJPcGVuREJSZXF1ZXN0Ojpm
aXJlRXJyb3JBZnRlclZlcnNpb25DaGFuZ2VDb21wbGV0aW9uKCkKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxl
dGlvbigpIik7Ci0KLSAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOwotCi0gICAgSURC
RXJyb3IgaWRiRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpOwotICAgIG1f
ZG9tRXJyb3IgPSBET01FcnJvcjo6Y3JlYXRlKGlkYkVycm9yLm5hbWUoKSk7Ci0gICAgbV9yZXN1
bHQgPSBJREJBbnk6OmNyZWF0ZVVuZGVmaW5lZCgpOwotCi0gICAgbV90cmFuc2FjdGlvbi0+YWRk
UmVxdWVzdCgqdGhpcyk7Ci0gICAgZW5xdWV1ZUV2ZW50KElEQlJlcXVlc3RDb21wbGV0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSwgKnRoaXMpKTsK
LX0KLQotYm9vbCBJREJPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkK
LXsKLSAgICBib29sIHJlc3VsdCA9IElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOwot
Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24gJiYgbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdl
KCkgJiYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkpCi0gICAgICAgIG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRpZEZpbmlzaEhhbmRsaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uKCptX3RyYW5zYWN0aW9uKTsKLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgSURCT3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKGNvbnN0IElEQlJlc3VsdERh
dGEmIHJlc3VsdERhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6
Om9uU3VjY2VzcygpIik7Ci0KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVmPElEQkRhdGFiYXNlPiBkYXRhYmFzZSA9IElEQkRhdGFi
YXNlOjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY29ubmVjdGlvbigpLCByZXN1
bHREYXRhKTsKLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUoZGF0YWJhc2Up
KTsKLSAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZTsKLQotICAg
IGVucXVldWVFdmVudChJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnN1Y2Nlc3NFdmVudCwgZmFsc2UsIGZhbHNlLCAqdGhpcykpOwotfQotCi12b2lkIElEQk9w
ZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZChjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHRE
YXRhKQotewotICAgIFJlZjxJREJEYXRhYmFzZT4gZGF0YWJhc2UgPSBJREJEYXRhYmFzZTo6Y3Jl
YXRlKCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNvbm5lY3Rpb24oKSwgcmVzdWx0RGF0YSk7
Ci0gICAgUmVmPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IGRhdGFiYXNlLT5zdGFydFZl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbihyZXN1bHREYXRhLnRyYW5zYWN0aW9uSW5mbygpLCAqdGhp
cyk7Ci0KLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPmluZm8oKS5tb2RlKCkgPT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwotICAgIEFTU0VSVCh0cmFuc2FjdGlv
bi0+b3JpZ2luYWxEYXRhYmFzZUluZm8oKSk7Ci0KLSAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0g
dHJhbnNhY3Rpb24tPm9yaWdpbmFsRGF0YWJhc2VJbmZvKCktPnZlcnNpb24oKTsKLSAgICB1aW50
NjRfdCBuZXdWZXJzaW9uID0gdHJhbnNhY3Rpb24tPmluZm8oKS5uZXdWZXJzaW9uKCk7Ci0KLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6b25VcGdyYWRlTmVlZGVkKCkgLSBj
dXJyZW50IHZlcnNpb24gaXMgJSIgUFJJdTY0ICIsIG5ldyBpcyAlIiBQUkl1NjQsIG9sZFZlcnNp
b24sIG5ld1ZlcnNpb24pOwotCi0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShXVEZNb3Zl
KGRhdGFiYXNlKSk7Ci0gICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRv
bmU7Ci0gICAgbV90cmFuc2FjdGlvbiA9IGFkb3B0UmVmKCZ0cmFuc2FjdGlvbi5sZWFrUmVmKCkp
OwotICAgIG1fdHJhbnNhY3Rpb24tPmFkZFJlcXVlc3QoKnRoaXMpOwotCi0gICAgZW5xdWV1ZUV2
ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24s
IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpKTsKLX0KLQotdm9pZCBJREJPcGVuREJS
ZXF1ZXN0OjpvbkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJSZXN1bHREYXRhJiByZXN1
bHREYXRhKQotewotICAgIHVpbnQ2NF90IG9sZFZlcnNpb24gPSByZXN1bHREYXRhLmRhdGFiYXNl
SW5mbygpLnZlcnNpb24oKTsKLQotICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0
OjpvbkRlbGV0ZURhdGFiYXNlU3VjY2VzcygpIC0gY3VycmVudCB2ZXJzaW9uIGlzICUiIFBSSXU2
NCwgb2xkVmVyc2lvbik7Ci0KLSAgICBtX3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0
ZTo6RG9uZTsKLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlVW5kZWZpbmVkKCk7Ci0KLSAg
ICBlbnF1ZXVlRXZlbnQoSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpjcmVhdGUob2xkVmVyc2lvbiwg
MCwgZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkpOwotfQotCi12b2lkIElEQk9wZW5EQlJlcXVl
c3Q6OnJlcXVlc3RDb21wbGV0ZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgZGF0YSkKLXsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCT3BlbkRCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZCIpOwotCi0g
ICAgLy8gSWYgYW4gT3BlbiByZXF1ZXN0IHdhcyBjb21wbGV0ZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFz
IG5hdmlnYXRlZCwgbGVhdmluZyB0aGlzIHJlcXVlc3QKLSAgICAvLyB3aXRoIGEgc3RvcHBlZCBz
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQsIHdlIG5lZWQgdG8gbWVzc2FnZSBiYWNrIHRvIHRoZSBz
ZXJ2ZXIgc28gaXQKLSAgICAvLyBkb2Vzbid0IGhhbmcgd2FpdGluZyBvbiBhIGRhdGFiYXNlIGNv
bm5lY3Rpb24gb3IgdHJhbnNhY3Rpb24gdGhhdCB3aWxsIG5ldmVyIGV4aXN0LgotICAgIGlmICht
X2NvbnRleHRTdG9wcGVkKSB7Ci0gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKCkpIHsKLSAgICAg
ICAgY2FzZSBJREJSZXN1bHRUeXBlOjpPcGVuRGF0YWJhc2VTdWNjZXNzOgotICAgICAgICAgICAg
Y29ubmVjdGlvbigpLmFib3J0T3BlbkFuZFVwZ3JhZGVOZWVkZWQoZGF0YS5kYXRhYmFzZUNvbm5l
Y3Rpb25JZGVudGlmaWVyKCksIElEQlJlc291cmNlSWRlbnRpZmllcjo6ZW1wdHlWYWx1ZSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEQlJlc3VsdFR5cGU6Ok9wZW5EYXRh
YmFzZVVwZ3JhZGVOZWVkZWQ6Ci0gICAgICAgICAgICBjb25uZWN0aW9uKCkuYWJvcnRPcGVuQW5k
VXBncmFkZU5lZWRlZChkYXRhLmRhdGFiYXNlQ29ubmVjdGlvbklkZW50aWZpZXIoKSwgZGF0YS50
cmFuc2FjdGlvbkluZm8oKS5pZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGRhdGEudHlwZSgpKSB7Ci0gICAgY2FzZSBJREJS
ZXN1bHRUeXBlOjpFcnJvcjoKLSAgICAgICAgb25FcnJvcihkYXRhKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJREJSZXN1bHRUeXBlOjpPcGVuRGF0YWJhc2VTdWNjZXNzOgotICAgICAgICBv
blN1Y2Nlc3MoZGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURCUmVzdWx0VHlwZTo6
T3BlbkRhdGFiYXNlVXBncmFkZU5lZWRlZDoKLSAgICAgICAgb25VcGdyYWRlTmVlZGVkKGRhdGEp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEQlJlc3VsdFR5cGU6OkRlbGV0ZURhdGFiYXNl
U3VjY2VzczoKLSAgICAgICAgb25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MoZGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotfQotCi12b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RCbG9ja2VkKHVp
bnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCi17Ci0gICAgTE9HKEluZGV4
ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RCbG9ja2VkIik7Ci0gICAgZW5xdWV1ZUV2
ZW50KElEQlZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24s
IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSURCQ2xp
ZW50Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJPcGVuREJSZXF1ZXN0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGRhODA0YzEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L0lEQk9wZW5EQlJlcXVlc3RJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJPcGVuREJSZXF1ZXN0SW1wbF9o
Ci0jZGVmaW5lIElEQk9wZW5EQlJlcXVlc3RJbXBsX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jaW5jbHVkZSAiRE9NRXJyb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUlk
ZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIElEQkRhdGFiYXNlSWRlbnRpZmllcjsKLQotbmFtZXNwYWNlIElEQkNs
aWVudCB7Ci0KLWNsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsKLQotY2xhc3MgSURCT3BlbkRC
UmVxdWVzdCA6IHB1YmxpYyBJREJSZXF1ZXN0IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElE
Qk9wZW5EQlJlcXVlc3Q+IGNyZWF0ZURlbGV0ZVJlcXVlc3QoSURCQ29ubmVjdGlvblRvU2VydmVy
JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYp
OwotICAgIHN0YXRpYyBSZWY8SURCT3BlbkRCUmVxdWVzdD4gY3JlYXRlT3BlblJlcXVlc3QoSURC
Q29ubmVjdGlvblRvU2VydmVyJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYsIHVpbnQ2NF90IHZlcnNpb24pOwotCi0gICAgfklEQk9wZW5EQlJl
cXVlc3QoKSBmaW5hbDsKLSAgICAKLSAgICBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGRh
dGFiYXNlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VJZGVudGlmaWVyOyB9
Ci0gICAgdWludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQotCi0g
ICAgdm9pZCByZXF1ZXN0Q29tcGxldGVkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLSAgICB2b2lk
IHJlcXVlc3RCbG9ja2VkKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24p
OwotCi0gICAgdm9pZCB2ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb25EaWRGaW5pc2goKTsKLSAgICB2
b2lkIGZpcmVTdWNjZXNzQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tbWl0KCk7Ci0gICAgdm9pZCBmaXJl
RXJyb3JBZnRlclZlcnNpb25DaGFuZ2VDb21wbGV0aW9uKCk7Ci0KLSAgICBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnQmKSBmaW5hbDsKLQotcHJpdmF0ZToKLSAgICBJREJPcGVuREJSZXF1ZXN0KElE
QkNvbm5lY3Rpb25Ub1NlcnZlciYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImLCB1aW50NjRfdCB2ZXJzaW9uLCBJbmRleGVkREI6OlJlcXVlc3RU
eXBlKTsKLQotICAgIHZvaWQgb25FcnJvcihjb25zdCBJREJSZXN1bHREYXRhJik7Ci0gICAgdm9p
ZCBvblN1Y2Nlc3MoY29uc3QgSURCUmVzdWx0RGF0YSYpOwotICAgIHZvaWQgb25VcGdyYWRlTmVl
ZGVkKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLSAgICB2b2lkIG9uRGVsZXRlRGF0YWJhc2VTdWNj
ZXNzKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLQotICAgIGJvb2wgaXNPcGVuREJSZXF1ZXN0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgSURCRGF0YWJhc2VJZGVudGlm
aWVyIG1fZGF0YWJhc2VJZGVudGlmaWVyOwotICAgIHVpbnQ2NF90IG1fdmVyc2lvbiB7IDAgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCT3BlbkRC
UmVxdWVzdEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2NsaWVudC9JREJSZXF1ZXN0SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQwMmE3NDIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50L0lEQlJlcXVlc3RJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlJl
cXVlc3RJbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUg
IkRPTVJlcXVlc3RTdGF0ZS5oIgotI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJJ
REJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29ySW1wbC5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVy
LmgiCi0jaW5jbHVkZSAiSURCS2V5RGF0YS5oIgotI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgotI2luY2x1ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQg
ewotCi1SZWY8SURCUmVxdWVzdD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgSURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlJlcXVlc3Qo
Y29udGV4dCwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSk7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0
PiBJREJSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURC
Q3Vyc29yJiBjdXJzb3IsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIGN1cnNvciwgdHJhbnNhY3Rpb24p
KTsKLX0KLQotUmVmPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZUNvdW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSURCVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlJlcXVlc3QoY29u
dGV4dCwgaW5kZXgsIHRyYW5zYWN0aW9uKSk7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJSZXF1
ZXN0OjpjcmVhdGVHZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgm
IGluZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZXF1ZXN0ZWRSZWNvcmRUeXBlLCBJ
REJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SURCUmVxdWVzdChjb250ZXh0LCBpbmRleCwgcmVxdWVzdGVkUmVjb3JkVHlwZSwgdHJhbnNhY3Rp
b24pKTsKLX0KLQotSURCUmVxdWVzdDo6SURCUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXIm
IGNvbm5lY3Rpb24sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCi0gICAgOiBJREJP
cGVuREJSZXF1ZXN0KGNvbnRleHQpCi0gICAgLCBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKLSAg
ICAsIG1fcmVzb3VyY2VJZGVudGlmaWVyKGNvbm5lY3Rpb24pCi17Ci0gICAgc3VzcGVuZElmTmVl
ZGVkKCk7Ci19Ci0KLUlEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBJREJUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24pCi0gICAgOiBJREJPcGVuREJSZXF1ZXN0KGNvbnRleHQpCi0gICAgLCBtX3Ry
YW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKLSAgICAsIG1fY29ubmVjdGlvbih0cmFuc2FjdGlvbi5z
ZXJ2ZXJDb25uZWN0aW9uKCkpCi0gICAgLCBtX3Jlc291cmNlSWRlbnRpZmllcih0cmFuc2FjdGlv
bi5zZXJ2ZXJDb25uZWN0aW9uKCkpCi0gICAgLCBtX3NvdXJjZShJREJBbnk6OmNyZWF0ZShvYmpl
Y3RTdG9yZSkpCi17Ci0gICAgc3VzcGVuZElmTmVlZGVkKCk7Ci19Ci0KLUlEQlJlcXVlc3Q6OklE
QlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCQ3Vyc29yJiBjdXJz
b3IsIElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKLSAgICA6IElEQk9wZW5EQlJlcXVlc3Qo
Y29udGV4dCkKLSAgICAsIG1fdHJhbnNhY3Rpb24oJnRyYW5zYWN0aW9uKQotICAgICwgbV9jb25u
ZWN0aW9uKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKLSAgICAsIG1fcmVzb3VyY2VJ
ZGVudGlmaWVyKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKLSAgICAsIG1fc291cmNl
KGN1cnNvci5zb3VyY2UoKSkKLSAgICAsIG1fcGVuZGluZ0N1cnNvcigmY3Vyc29yKQotewotICAg
IHN1c3BlbmRJZk5lZWRlZCgpOwotCi0gICAgY3Vyc29yLnNldFJlcXVlc3QoKnRoaXMpOwotfQot
Ci1JREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IElEQkluZGV4JiBpbmRleCwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotICAgIDogSURC
T3BlbkRCUmVxdWVzdChjb250ZXh0KQotICAgICwgbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24p
Ci0gICAgLCBtX2Nvbm5lY3Rpb24odHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQotICAg
ICwgbV9yZXNvdXJjZUlkZW50aWZpZXIodHJhbnNhY3Rpb24uc2VydmVyQ29ubmVjdGlvbigpKQot
ICAgICwgbV9zb3VyY2UoSURCQW55OjpjcmVhdGUoaW5kZXgpKQotewotICAgIHN1c3BlbmRJZk5l
ZWRlZCgpOwotfQotCi1JREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUg
cmVxdWVzdGVkUmVjb3JkVHlwZSwgSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotICAgIDog
SURCUmVxdWVzdChjb250ZXh0LCBpbmRleCwgdHJhbnNhY3Rpb24pCi17Ci0gICAgbV9yZXF1ZXN0
ZWRJbmRleFJlY29yZFR5cGUgPSByZXF1ZXN0ZWRSZWNvcmRUeXBlOwotfQotCi1JREJSZXF1ZXN0
Ojp+SURCUmVxdWVzdCgpCi17Ci0gICAgaWYgKG1fcmVzdWx0KSB7Ci0gICAgICAgIGF1dG8gdHlw
ZSA9IG1fcmVzdWx0LT50eXBlKCk7Ci0gICAgICAgIGlmICh0eXBlID09IElEQkFueTo6VHlwZTo6
SURCQ3Vyc29yIHx8IHR5cGUgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpCi0g
ICAgICAgICAgICBtX3Jlc3VsdC0+bW9kZXJuSURCQ3Vyc29yKCktPmNsZWFyUmVxdWVzdCgpOwot
ICAgIH0KLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQkFueT4gSURCUmVxdWVzdDo6cmVzdWx0KEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVhZHlTdGF0
ZSA9PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSkKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0
OwotCi0gICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKLSAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gcmVhZCB0aGUgJ3Jl
c3VsdCcgcHJvcGVydHkgZnJvbSAnSURCUmVxdWVzdCc6IFRoZSByZXF1ZXN0IGhhcyBub3QgZmlu
aXNoZWQuIik7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IElEQlJl
cXVlc3Q6OmVycm9yQ29kZShFeGNlcHRpb25Db2RlJikgY29uc3QKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotUmVmUHRyPERPTUVycm9yPiBJREJSZXF1ZXN0OjplcnJvcihFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVz
dFJlYWR5U3RhdGU6OkRvbmUpCi0gICAgICAgIHJldHVybiBtX2RvbUVycm9yOwotCi0gICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICBlYy5t
ZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gcmVhZCB0aGUgJ2Vycm9yJyBwcm9wZXJ0
eSBmcm9tICdJREJSZXF1ZXN0JzogVGhlIHJlcXVlc3QgaGFzIG5vdCBmaW5pc2hlZC4iKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPFdlYkNvcmU6OklEQkFueT4gSURCUmVxdWVz
dDo6c291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zb3VyY2U7Ci19Ci0KLXZvaWQgSURC
UmVxdWVzdDo6c2V0U291cmNlKElEQkN1cnNvciYgY3Vyc29yKQotewotICAgIEFTU0VSVCghbV9j
dXJzb3JSZXF1ZXN0Tm90aWZpZXIpOwotCi0gICAgbV9zb3VyY2UgPSBJREJBbnk6OmNyZWF0ZShj
dXJzb3IpOwotICAgIG1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxT
Y29wZUd1YXJkPihbdGhpc10oKSB7Ci0gICAgICAgIEFTU0VSVChtX3NvdXJjZS0+dHlwZSgpID09
IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yIHx8IG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpU
eXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpOwotICAgICAgICBtX3NvdXJjZS0+bW9kZXJuSURCQ3Vy
c29yKCktPmRlY3JlbWVudE91dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgSURCUmVxdWVzdDo6c2V0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb24pOwotICAgIEFT
U0VSVCh0cmFuc2FjdGlvbi5pc1ZlcnNpb25DaGFuZ2UoKSk7Ci0gICAgQVNTRVJUKCF0cmFuc2Fj
dGlvbi5pc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7Ci0KLSAgICBtX3RyYW5zYWN0aW9uID0gJnRy
YW5zYWN0aW9uOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElEQlJlcXVl
c3Q6OnRyYW5zYWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaG91bGRFeHBvc2VUcmFu
c2FjdGlvblRvRE9NID8gbV90cmFuc2FjdGlvbiA6IG51bGxwdHI7Ci19Ci0KLWNvbnN0IFN0cmlu
ZyYgSURCUmVxdWVzdDo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgc3RhdGljIFdURjo6TmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwZW5kaW5nU3RyaW5nKCJwZW5kaW5nIik7Ci0gICAgc3RhdGlj
IFdURjo6TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkb25lU3RyaW5nKCJkb25lIik7Ci0KLSAgICBz
d2l0Y2ggKG1fcmVhZHlTdGF0ZSkgewotICAgIGNhc2UgSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBl
bmRpbmc6Ci0gICAgICAgIHJldHVybiBwZW5kaW5nU3RyaW5nOwotICAgIGNhc2UgSURCUmVxdWVz
dFJlYWR5U3RhdGU6OkRvbmU6Ci0gICAgICAgIHJldHVybiBkb25lU3RyaW5nOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi11
aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkZW50aWZpZXIoKSBjb25zdAot
ewotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fc291
cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSkgewotICAgICAgICBh
dXRvKiBvYmplY3RTdG9yZSA9IG1fc291cmNlLT5tb2Rlcm5JREJPYmplY3RTdG9yZSgpOwotICAg
ICAgICBpZiAoIW9iamVjdFN0b3JlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiBvYmplY3RTdG9yZS0+aW5mbygpLmlkZW50aWZpZXIoKTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkluZGV4KSB7Ci0gICAgICAgIGF1
dG8qIGluZGV4ID0gbV9zb3VyY2UtPm1vZGVybklEQkluZGV4KCk7Ci0gICAgICAgIGlmICghaW5k
ZXgpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGluZGV4LT5pbmZvKCku
b2JqZWN0U3RvcmVJZGVudGlmaWVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXVp
bnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3NvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fc291cmNlLT50eXBl
KCkgIT0gSURCQW55OjpUeXBlOjpJREJJbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KCFtX3NvdXJjZS0+bW9kZXJuSURCSW5kZXgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gbV9zb3VyY2UtPm1vZGVybklEQkluZGV4KCktPmluZm8oKS5pZGVudGlmaWVyKCk7Ci19
Ci0KLUluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnJlcXVlc3RlZEluZGV4
UmVjb3JkVHlwZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBBU1NFUlQo
bV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkluZGV4KTsKLQotICAgIHJldHVy
biBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsKLX0KLQotRXZlbnRUYXJnZXRJbnRlcmZhY2Ug
SURCUmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAotewotICAgIHJldHVybiBJ
REJSZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwotfQotCi1jb25zdCBjaGFyKiBJREJS
ZXF1ZXN0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIklEQlJl
cXVlc3QiOwotfQotCi1ib29sIElEQlJlcXVlc3Q6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3Bl
bnNpb24oKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJREJSZXF1ZXN0
OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBtX2hhc1BlbmRpbmdB
Y3Rpdml0eTsKLX0KLQotdm9pZCBJREJSZXF1ZXN0OjpzdG9wKCkKLXsKLSAgICBBU1NFUlQoIW1f
Y29udGV4dFN0b3BwZWQpOwotICAgIG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOwotfQotCi12b2lk
IElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCi17Ci0gICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgfHwgbV9jb250ZXh0U3RvcHBlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKLSAgICBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZlbnQoV1RGTW92ZShldmVudCkpOwot
fQotCi1ib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50IC0gJXMgKCVwKSIsIGV2
ZW50LnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aGlzKTsKLQotICAgIEFTU0VSVCht
X2hhc1BlbmRpbmdBY3Rpdml0eSk7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKLQot
ICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKLSAgICAg
ICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmU7Ci0KLSAgICBWZWN0
b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKLSAgICB0YXJnZXRzLmFwcGVuZCh0aGlz
KTsKLQotICAgIGlmICgmZXZlbnQgPT0gbV9vcGVuRGF0YWJhc2VTdWNjZXNzRXZlbnQpCi0gICAg
ICAgIG1fb3BlbkRhdGFiYXNlU3VjY2Vzc0V2ZW50ID0gbnVsbHB0cjsKLSAgICBlbHNlIGlmICht
X3RyYW5zYWN0aW9uICYmICFtX3RyYW5zYWN0aW9uLT5pc0ZpbmlzaGVkKCkpIHsKLSAgICAgICAg
ICAgIHRhcmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24pOwotICAgICAgICAgICAgdGFyZ2V0cy5h
cHBlbmQobV90cmFuc2FjdGlvbi0+ZGIoKSk7Ci0gICAgfQotCi0gICAgbV9oYXNQZW5kaW5nQWN0
aXZpdHkgPSBmYWxzZTsKLQotICAgIG1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyID0gbnVsbHB0cjsK
LQotICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0OwotICAgIHsKLSAgICAgICAgVHJhbnNhY3Rp
b25BY3RpdmF0b3IgYWN0aXZhdG9yKG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgICAgICBkb250
UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LCB0YXJn
ZXRzKTsKLSAgICB9Ci0KLSAgICAvLyBJREJFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKCkgbWln
aHQgaGF2ZSBzZXQgdGhlIHBlbmRpbmcgYWN0aXZpdHkgZmxhZyBiYWNrIHRvIHRydWUsIHN1Z2dl
c3RpbmcgdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXVzZWQuCi0gICAgLy8gV2UgbWlnaHQgYWxzbyBy
ZS11c2UgdGhlIHJlcXVlc3QgaWYgdGhpcyBldmVudCB3YXMgdGhlIHVwZ3JhZGVuZWVkZWQgZXZl
bnQgZm9yIGFuIElEQk9wZW5EQlJlcXVlc3QuCi0gICAgaWYgKCFtX2hhc1BlbmRpbmdBY3Rpdml0
eSkKLSAgICAgICAgbV9oYXNQZW5kaW5nQWN0aXZpdHkgPSBpc09wZW5EQlJlcXVlc3QoKSAmJiAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQgfHwgZXZlbnQu
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpOwotCi0gICAgLy8gVGhlIHJlcXVl
c3Qgc2hvdWxkIG9ubHkgcmVtYWluIGluIHRoZSB0cmFuc2FjdGlvbidzIHJlcXVlc3QgbGlzdCBp
ZiBpdCByZXByZXNlbnRzIGEgcGVuZGluZyBjdXJzb3Igb3BlcmF0aW9uLCBvciB0aGlzIGlzIGFu
IG9wZW4gcmVxdWVzdCB0aGF0IHdhcyBibG9ja2VkLgotICAgIGlmIChtX3RyYW5zYWN0aW9uICYm
ICFtX3BlbmRpbmdDdXJzb3IgJiYgZXZlbnQudHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2Vk
RXZlbnQpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZVJlcXVlc3QoKnRoaXMpOwotCi0g
ICAgaWYgKGRvbnRQcmV2ZW50RGVmYXVsdCAmJiBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmVycm9yRXZlbnQgJiYgbV90cmFuc2FjdGlvbiAmJiAhbV90cmFuc2FjdGlvbi0+aXNGaW5pc2hl
ZE9yRmluaXNoaW5nKCkpIHsKLSAgICAgICAgQVNTRVJUKG1fZG9tRXJyb3IpOwotICAgICAgICBt
X3RyYW5zYWN0aW9uLT5hYm9ydER1ZVRvRmFpbGVkUmVxdWVzdCgqbV9kb21FcnJvcik7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGRvbnRQcmV2ZW50RGVmYXVsdDsKLX0KLQotdm9pZCBJREJSZXF1ZXN0
Ojp1bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCkKLXsKLSAgICBMT0coSW5kZXhlZERC
LCAiSURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlciIpOwotCi0gICAg
aWYgKG1fdHJhbnNhY3Rpb24gJiYgbV9pZGJFcnJvci5jb2RlKCkgIT0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkFib3J0RXJyb3IpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0RHVlVG9GYWls
ZWRSZXF1ZXN0KERPTUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9y
TmFtZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpKTsKLX0KLQotdm9pZCBJREJS
ZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3QgSURCS2V5RGF0YSoga2V5RGF0YSkKLXsKLSAgICBpZiAo
IWtleURhdGEpIHsKLSAgICAgICAgbV9yZXN1bHQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBpZGJLZXlEYXRh
VG9TY3JpcHRWYWx1ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICprZXlEYXRhKTsKLSAgICBt
X3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUodmFsdWUpKTsKLX0KLQotdm9pZCBJREJS
ZXF1ZXN0OjpzZXRSZXN1bHQodWludDY0X3QgbnVtYmVyKQotewotICAgIEFTU0VSVChzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT52bSgpLCBKU0M6OkpT
VmFsdWUobnVtYmVyKSkpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0
dXJlZENsb25lKGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCi17Ci0gICAg
TE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lIik7
Ci0KLSAgICBhdXRvIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYg
KCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKCpjb250ZXh0LCB2YWx1ZURhdGEpOwot
ICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoV1RGTW92ZSh2YWx1ZSkpOwotfQotCi12b2lk
IElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvVW5kZWZpbmVkKCkKLXsKLSAgICBtX3Jlc3VsdCA9IElE
QkFueTo6Y3JlYXRlVW5kZWZpbmVkKCk7Ci19Ci0KLUlEQkN1cnNvciogSURCUmVxdWVzdDo6cmVz
dWx0Q3Vyc29yKCkKLXsKLSAgICBpZiAoIW1fcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvciB8
fCBtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6SURCQ3Vyc29yV2l0aFZhbHVlKQot
ICAgICAgICByZXR1cm4gbV9yZXN1bHQtPm1vZGVybklEQkN1cnNvcigpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi12b2lkIElEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29yKElEQkN1cnNv
ciYgY3Vyc29yKQotewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5
U3RhdGU6OkRvbmUpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1fcGVuZGluZ0N1cnNvcik7Ci0g
ICAgQVNTRVJUKCZjdXJzb3IgPT0gcmVzdWx0Q3Vyc29yKCkpOwotICAgIEFTU0VSVCghbV9jdXJz
b3JSZXF1ZXN0Tm90aWZpZXIpOwotCi0gICAgbV9wZW5kaW5nQ3Vyc29yID0gJmN1cnNvcjsKLSAg
ICBtX2hhc1BlbmRpbmdBY3Rpdml0eSA9IHRydWU7Ci0gICAgbV9yZXN1bHQgPSBudWxscHRyOwot
ICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nOwotICAgIG1f
ZG9tRXJyb3IgPSBudWxscHRyOwotICAgIG1faWRiRXJyb3IgPSB7IH07Ci0KLSAgICBtX2N1cnNv
clJlcXVlc3ROb3RpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVHdWFyZD4oW3RoaXNdKCkg
ewotICAgICAgICBtX3BlbmRpbmdDdXJzb3ItPmRlY3JlbWVudE91dHN0YW5kaW5nUmVxdWVzdENv
dW50KCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6ZGlkT3Blbk9ySXRlcmF0ZUN1
cnNvcihjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIEFTU0VSVChtX3Bl
bmRpbmdDdXJzb3IpOwotICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKLQotICAgIGlmIChyZXN1bHRE
YXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpJdGVyYXRlQ3Vyc29yU3VjY2VzcyB8fCByZXN1
bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpPcGVuQ3Vyc29yU3VjY2VzcykgewotICAg
ICAgICBtX3BlbmRpbmdDdXJzb3ItPnNldEdldFJlc3VsdCgqdGhpcywgcmVzdWx0RGF0YS5nZXRS
ZXN1bHQoKSk7Ci0gICAgICAgIGlmIChyZXN1bHREYXRhLmdldFJlc3VsdCgpLmlzRGVmaW5lZCgp
KQotICAgICAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZSgqbV9wZW5kaW5nQ3Vyc29y
KTsKLSAgICB9Ci0KLSAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IG51bGxwdHI7Ci0gICAg
bV9wZW5kaW5nQ3Vyc29yID0gbnVsbHB0cjsKLQotICAgIHJlcXVlc3RDb21wbGV0ZWQocmVzdWx0
RGF0YSk7Ci19Ci0KLXZvaWQgSURCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJS
ZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RS
ZWFkeVN0YXRlOjpEb25lOwotCi0gICAgbV9pZGJFcnJvciA9IHJlc3VsdERhdGEuZXJyb3IoKTsK
LSAgICBpZiAoIW1faWRiRXJyb3IuaXNOdWxsKCkpCi0gICAgICAgIG9uRXJyb3IoKTsKLSAgICBl
bHNlCi0gICAgICAgIG9uU3VjY2VzcygpOwotfQotCi12b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3Io
KQotewotICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpvbkVycm9yIik7Ci0KLSAgICBB
U1NFUlQoIW1faWRiRXJyb3IuaXNOdWxsKCkpOwotICAgIG1fZG9tRXJyb3IgPSBET01FcnJvcjo6
Y3JlYXRlKG1faWRiRXJyb3IubmFtZSgpKTsKLSAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSkpOwotfQotCi12b2lkIElEQlJl
cXVlc3Q6Om9uU3VjY2VzcygpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6Om9u
U3VjY2VzcyIpOwotCi0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnN1Y2Nlc3NFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNs
aWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCUmVxdWVzdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2NsaWVudC9JREJSZXF1ZXN0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1
NTU5MTNjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2Ns
aWVudC9JREJSZXF1ZXN0SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIElEQlJlcXVlc3RJbXBsX2gKLSNkZWZpbmUgSURCUmVxdWVzdElt
cGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJBbnlJ
bXBsLmgiCi0jaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlJlc291
cmNlSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1wbC5oIgotI2luY2x1
ZGUgIlNjb3BlR3VhcmQuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEV2ZW50OwotY2xhc3MgSURCS2V5RGF0YTsKLWNsYXNzIElE
QlJlc3VsdERhdGE7Ci1jbGFzcyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKLQotbmFtZXNwYWNlIElu
ZGV4ZWREQiB7Ci1lbnVtIGNsYXNzIEluZGV4UmVjb3JkVHlwZTsKLX0KLQotbmFtZXNwYWNlIElE
QkNsaWVudCB7Ci0KLWNsYXNzIElEQkNvbm5lY3Rpb25Ub1NlcnZlcjsKLQotY2xhc3MgSURCUmVx
dWVzdCA6IHB1YmxpYyBXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0LCBwdWJsaWMgUmVmQ291bnRl
ZDxJREJSZXF1ZXN0PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJSZXF1ZXN0PiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgSURCVHJhbnNhY3Rp
b24mKTsKLSAgICBzdGF0aWMgUmVmPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCQ3Vyc29yJiwgSURCVHJhbnNhY3Rpb24mKTsKLSAgICBzdGF0aWMgUmVmPElE
QlJlcXVlc3Q+IGNyZWF0ZUNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYs
IElEQlRyYW5zYWN0aW9uJik7Ci0gICAgc3RhdGljIFJlZjxJREJSZXF1ZXN0PiBjcmVhdGVHZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkluZGV4JiwgSW5kZXhlZERCOjpJbmRleFJlY29y
ZFR5cGUsIElEQlRyYW5zYWN0aW9uJik7Ci0KLSAgICBjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHJlc291cmNlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VJZGVudGlm
aWVyOyB9Ci0KLSAgICB+SURCUmVxdWVzdCgpIG92ZXJyaWRlOwotCi0gICAgUmVmUHRyPFdlYkNv
cmU6OklEQkFueT4gcmVzdWx0KEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHVuc2lnbmVkIHNob3J0IGVycm9yQ29kZShFeGNlcHRpb25Db2RlJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgUmVmUHRyPERPTUVycm9yPiBlcnJvcihFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCQW55PiBzb3Vy
Y2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgY29uc3QgU3RyaW5nJiByZWFkeVN0
YXRlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB1aW50NjRfdCBzb3VyY2VPYmplY3RTdG9yZUlk
ZW50aWZpZXIoKSBjb25zdDsKLSAgICB1aW50NjRfdCBzb3VyY2VJbmRleElkZW50aWZpZXIoKSBj
b25zdDsKLSAgICBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSByZXF1ZXN0ZWRJbmRleFJlY29y
ZFR5cGUoKSBjb25zdDsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgRXZlbnRUYXJnZXRJbnRl
cmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLQotICAg
IHVzaW5nIFJlZkNvdW50ZWQ8SURCUmVxdWVzdD46OnJlZjsKLSAgICB1c2luZyBSZWZDb3VudGVk
PElEQlJlcXVlc3Q+OjpkZXJlZjsKLQotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4m
Jik7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICBJREJD
b25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb247IH0K
LQotICAgIHZvaWQgcmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAg
ICB2b2lkIHNldFJlc3VsdChjb25zdCBJREJLZXlEYXRhKik7Ci0gICAgdm9pZCBzZXRSZXN1bHQo
dWludDY0X3QpOwotICAgIHZvaWQgc2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgVGhy
ZWFkU2FmZURhdGFCdWZmZXImKTsKLSAgICB2b2lkIHNldFJlc3VsdFRvVW5kZWZpbmVkKCk7Ci0K
LSAgICBJREJBbnkqIG1vZGVyblJlc3VsdCgpIHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9Ci0K
LSAgICB2b2lkIHdpbGxJdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYpOwotICAgIHZvaWQgZGlkT3Bl
bk9ySXRlcmF0ZUN1cnNvcihjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAgICBjb25zdCBJREJD
dXJzb3IqIHBlbmRpbmdDdXJzb3IoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdDdXJzb3IuZ2V0
KCk7IH0KLQotICAgIHZvaWQgc2V0U291cmNlKElEQkN1cnNvciYpOwotICAgIHZvaWQgc2V0VmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJik7Ci0KLSAgICBJbmRleGVkREI6
OlJlcXVlc3RUeXBlIHJlcXVlc3RUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0VHlwZTsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCUmVxdWVzdChJREJDb25uZWN0aW9uVG9TZXJ2ZXImLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Jik7Ci0gICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBJREJUcmFuc2FjdGlvbiYpOwotICAgIElEQlJlcXVl
c3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQkN1cnNvciYsIElEQlRyYW5zYWN0aW9uJik7
Ci0gICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBJREJU
cmFuc2FjdGlvbiYpOwotICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElE
QkluZGV4JiwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUsIElEQlRyYW5zYWN0aW9uJik7Ci0K
LSAgICAvLyBBY3RpdmVET01PYmplY3QuCi0gICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVu
c2lvbigpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qg
ZmluYWw7Ci0gICAgdm9pZCBzdG9wKCkgZmluYWw7Ci0KLSAgICAvLyBFdmVudFRhcmdldC4KLSAg
ICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyBSZWZDb3VudGVkPElEQlJlcXVlc3Q+Ojpy
ZWYoKTsgfQotICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgUmVmQ291bnRlZDxJ
REJSZXF1ZXN0Pjo6ZGVyZWYoKTsgfQotICAgIHZvaWQgdW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50
SGFuZGxlcigpIGZpbmFsOwotCi0gICAgdmlydHVhbCBib29sIGlzT3BlbkRCUmVxdWVzdCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBJREJSZXF1ZXN0UmVhZHlTdGF0ZSBtX3JlYWR5
U3RhdGUgeyBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZyB9OwotICAgIFJlZlB0cjxJREJB
bnk+IG1fcmVzdWx0OwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsK
LSAgICBib29sIG1fc2hvdWxkRXhwb3NlVHJhbnNhY3Rpb25Ub0RPTSB7IHRydWUgfTsKLSAgICBS
ZWZQdHI8RE9NRXJyb3I+IG1fZG9tRXJyb3I7Ci0gICAgSURCRXJyb3IgbV9pZGJFcnJvcjsKLSAg
ICBJbmRleGVkREI6OlJlcXVlc3RUeXBlIG1fcmVxdWVzdFR5cGUgPSB7IEluZGV4ZWREQjo6UmVx
dWVzdFR5cGU6Ok90aGVyIH07Ci0gICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkIHsgZmFsc2UgfTsK
LQotICAgIEV2ZW50KiBtX29wZW5EYXRhYmFzZVN1Y2Nlc3NFdmVudCB7IG51bGxwdHIgfTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIG9uRXJyb3IoKTsKLSAgICB2b2lkIG9uU3VjY2VzcygpOwotCi0g
ICAgSURCQ3Vyc29yKiByZXN1bHRDdXJzb3IoKTsKLQotICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZl
ciYgbV9jb25uZWN0aW9uOwotICAgIElEQlJlc291cmNlSWRlbnRpZmllciBtX3Jlc291cmNlSWRl
bnRpZmllcjsKLSAgICBSZWZQdHI8SURCQW55PiBtX3NvdXJjZTsKLSAgICBib29sIG1faGFzUGVu
ZGluZ0FjdGl2aXR5IHsgdHJ1ZSB9OwotICAgIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIG1f
cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlOwotCi0gICAgUmVmUHRyPElEQkN1cnNvcj4gbV9wZW5k
aW5nQ3Vyc29yOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlR3VhcmQ+IG1fY3Vyc29yUmVx
dWVzdE5vdGlmaWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSURCQ2xpZW50Ci19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRp
ZiAvLyBJREJSZXF1ZXN0SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRjY2Y5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsOTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkRPTUVycm9yLmgiCi0jaW5jbHVkZSAiRXZlbnRRdWV1
ZS5oIgotI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZUltcGwuaCIKLSNpbmNsdWRlICJJREJE
YXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlSW1wbC5oIgotI2luY2x1
ZGUgIklEQkVycm9yLmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVk
ZSAiSURCS2V5RGF0YS5oIgotI2luY2x1ZGUgIklEQktleVJhbmdlRGF0YS5oIgotI2luY2x1ZGUg
IklEQk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdEltcGwuaCIKLSNp
bmNsdWRlICJJREJSZXF1ZXN0SW1wbC5oIgotI2luY2x1ZGUgIklEQlJlc3VsdERhdGEuaCIKLSNp
bmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlRyYW5zYWN0aW9uT3BlcmF0
aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBJREJDbGllbnQgewotCi1S
ZWY8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoSURCRGF0YWJhc2UmIGRh
dGFiYXNlLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8pCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSURCVHJhbnNhY3Rpb24oZGF0YWJhc2UsIGluZm8sIG51bGxwdHIpKTsKLX0K
LQotUmVmPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKElEQkRhdGFiYXNl
JiBkYXRhYmFzZSwgY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvLCBJREJPcGVuREJSZXF1
ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlRyYW5zYWN0aW9u
KGRhdGFiYXNlLCBpbmZvLCAmcmVxdWVzdCkpOwotfQotCi1JREJUcmFuc2FjdGlvbjo6SURCVHJh
bnNhY3Rpb24oSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBJREJUcmFuc2FjdGlvbkluZm8m
IGluZm8sIElEQk9wZW5EQlJlcXVlc3QqIHJlcXVlc3QpCi0gICAgOiBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbihkYXRhYmFzZS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgLCBtX2RhdGFi
YXNlKGRhdGFiYXNlKQotICAgICwgbV9pbmZvKGluZm8pCi0gICAgLCBtX29wZXJhdGlvblRpbWVy
KCp0aGlzLCAmSURCVHJhbnNhY3Rpb246Om9wZXJhdGlvblRpbWVyRmlyZWQpCi0gICAgLCBtX29w
ZW5EQlJlcXVlc3QocmVxdWVzdCkKLQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6SURCVHJhbnNhY3Rpb24gLSAlcyIsIG1faW5mby5sb2dnaW5nU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7Ci0KLSAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKLQotICAgIGlmICht
X2luZm8ubW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdl
KSB7Ci0gICAgICAgIEFTU0VSVChtX29wZW5EQlJlcXVlc3QpOwotICAgICAgICBtX29wZW5EQlJl
cXVlc3QtPnNldFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbigqdGhpcyk7Ci0gICAgICAgIG1fc3Rh
cnRlZE9uU2VydmVyID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBhY3RpdmF0ZSgpOwot
Ci0gICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gc2VsZjsKLSAgICAgICAgSlNDOjpWTSYg
dm0gPSBKU0RPTVdpbmRvd0Jhc2U6OmNvbW1vblZNKCk7Ci0gICAgICAgIHZtLndoZW5JZGxlKFtz
ZWxmLCB0aGlzXSgpIHsKLSAgICAgICAgICAgIGRlYWN0aXZhdGUoKTsKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgZXN0YWJsaXNoT25TZXJ2ZXIoKTsKLSAgICB9Ci0KLSAgICBzdXNwZW5kSWZOZWVk
ZWQoKTsKLX0KLQotSURCVHJhbnNhY3Rpb246On5JREJUcmFuc2FjdGlvbigpCi17Ci19Ci0KLWNv
bnN0IFN0cmluZyYgSURCVHJhbnNhY3Rpb246Om1vZGUoKSBjb25zdAotewotICAgIHN3aXRjaCAo
bV9pbmZvLm1vZGUoKSkgewotICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJl
YWRPbmx5OgotICAgICAgICByZXR1cm4gSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkT25seSgpOwot
ICAgIGNhc2UgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRXcml0ZToKLSAgICAgICAg
cmV0dXJuIElEQlRyYW5zYWN0aW9uOjptb2RlUmVhZFdyaXRlKCk7Ci0gICAgY2FzZSBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZToKLSAgICAgICAgcmV0dXJuIElEQlRy
YW5zYWN0aW9uOjptb2RlVmVyc2lvbkNoYW5nZSgpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLVdlYkNvcmU6OklEQkRhdGFiYXNlKiBJREJUcmFuc2Fj
dGlvbjo6ZGIoKQotewotICAgIHJldHVybiAmbV9kYXRhYmFzZS5nZXQoKTsKLX0KLQotSURCQ29u
bmVjdGlvblRvU2VydmVyJiBJREJUcmFuc2FjdGlvbjo6c2VydmVyQ29ubmVjdGlvbigpCi17Ci0g
ICAgcmV0dXJuIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKTsKLX0KLQotUmVmUHRyPERP
TUVycm9yPiBJREJUcmFuc2FjdGlvbjo6ZXJyb3IoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rv
bUVycm9yOwotfQotCi1SZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0
aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246Om9iamVjdFN0b3JlIik7Ci0KLSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNoaW5n
KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3Rh
dGVFcnJvcjsKLSAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4
ZWN1dGUgJ29iamVjdFN0b3JlJyBvbiAnSURCVHJhbnNhY3Rpb24nOiBUaGUgdHJhbnNhY3Rpb24g
ZmluaXNoZWQuIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGF1dG8g
aXRlcmF0b3IgPSBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuZmluZChvYmplY3RTdG9yZU5hbWUp
OwotICAgIGlmIChpdGVyYXRvciAhPSBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1faW5mby5vYmplY3RTdG9yZXMoKSkgewot
ICAgICAgICBpZiAob2JqZWN0U3RvcmUgPT0gb2JqZWN0U3RvcmVOYW1lKSB7Ci0gICAgICAgICAg
ICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGF1dG8qIGluZm8gPSBtX2RhdGFiYXNlLT5pbmZvKCkuaW5mb0ZvckV4aXN0aW5nT2JqZWN0
U3RvcmUob2JqZWN0U3RvcmVOYW1lKTsKLSAgICBpZiAoIWluZm8pIHsKLSAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAgICBlYy5tZXNz
YWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb2JqZWN0U3RvcmUnIG9uICdJ
REJUcmFuc2FjdGlvbic6IFRoZSBzcGVjaWZpZWQgb2JqZWN0IHN0b3JlIHdhcyBub3QgZm91bmQu
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIC8vIFZlcnNpb24gY2hh
bmdlIHRyYW5zYWN0aW9ucyBhcmUgc2NvcGVkIHRvIGV2ZXJ5IG9iamVjdCBzdG9yZSBpbiB0aGUg
ZGF0YWJhc2UuCi0gICAgaWYgKCFpbmZvIHx8ICghZm91bmQgJiYgIWlzVmVyc2lvbkNoYW5nZSgp
KSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJy
b3I7Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdvYmplY3RTdG9yZScgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHNwZWNpZmllZCBvYmplY3Qg
c3RvcmUgd2FzIG5vdCBmb3VuZC4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgYXV0byBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUoKnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgKmluZm8sICp0aGlzKTsKLSAgICBtX3JlZmVyZW5jZWRPYmplY3RT
dG9yZXMuc2V0KG9iamVjdFN0b3JlTmFtZSwgJm9iamVjdFN0b3JlLmdldCgpKTsKLQotICAgIHJl
dHVybiBhZG9wdFJlZigmb2JqZWN0U3RvcmUubGVha1JlZigpKTsKLX0KLQotCi12b2lkIElEQlRy
YW5zYWN0aW9uOjphYm9ydER1ZVRvRmFpbGVkUmVxdWVzdChET01FcnJvciYgZXJyb3IpCi17Ci0g
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjphYm9ydER1ZVRvRmFpbGVkUmVxdWVz
dCIpOwotICAgIGlmIChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9kb21FcnJvciA9ICZlcnJvcjsKLSAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Ug
ZWM7Ci0gICAgYWJvcnQoZWMpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjp0cmFuc2l0aW9u
ZWRUb0ZpbmlzaGluZyhJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGUgc3RhdGUpCi17Ci0gICAg
QVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7Ci0gICAgbV9zdGF0ZSA9IHN0YXRlOwot
ICAgIEFTU0VSVChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7Ci0gICAgbV9yZWZlcmVuY2VkT2Jq
ZWN0U3RvcmVzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmFib3J0KEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjphYm9ydCIpOwotCi0gICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKSB7Ci0g
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7
Ci0gICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdh
Ym9ydCcgb24gJ0lEQlRyYW5zYWN0aW9uJzogVGhlIHRyYW5zYWN0aW9uIGlzIGluYWN0aXZlIG9y
IGZpbmlzaGVkLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9kYXRhYmFzZS0+
d2lsbEFib3J0VHJhbnNhY3Rpb24oKnRoaXMpOwotCi0gICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX3JlZmVyZW5jZWRPYmplY3RT
dG9yZXMudmFsdWVzKCkpCi0gICAgICAgICAgICBvYmplY3RTdG9yZS0+cm9sbGJhY2tJbmZvRm9y
VmVyc2lvbkNoYW5nZUFib3J0KCk7Ci0gICAgfQotCi0gICAgdHJhbnNpdGlvbmVkVG9GaW5pc2hp
bmcoSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpBYm9ydGluZyk7Ci0gICAgCi0gICAgbV9h
Ym9ydFF1ZXVlLnN3YXAobV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlKTsKLQotICAgIGF1dG8g
b3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIG51bGxwdHIsICZJ
REJUcmFuc2FjdGlvbjo6YWJvcnRPblNlcnZlckFuZENhbmNlbFJlcXVlc3RzKTsKLSAgICBzY2hl
ZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uOjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMoVHJhbnNhY3Rpb25PcGVyYXRpb24m
IG9wZXJhdGlvbikKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmFib3J0
T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0cyIpOwotCi0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25P
cGVyYXRpb25RdWV1ZS5pc0VtcHR5KCkpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLmFib3J0
VHJhbnNhY3Rpb24oKnRoaXMpOwotCi0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25N
YXAuY29udGFpbnMob3BlcmF0aW9uLmlkZW50aWZpZXIoKSkpOwotICAgIG1fdHJhbnNhY3Rpb25P
cGVyYXRpb25NYXAucmVtb3ZlKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpOwotCi0gICAgSURCRXJy
b3IgZXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpOwotICAgIGZvciAoYXV0
byYgb3BlcmF0aW9uIDogbV9hYm9ydFF1ZXVlKQotICAgICAgICBvcGVyYXRpb24tPmNvbXBsZXRl
ZChJREJSZXN1bHREYXRhOjplcnJvcihvcGVyYXRpb24tPmlkZW50aWZpZXIoKSwgZXJyb3IpKTsK
LQotICAgIC8vIFNpbmNlIHdlJ3JlIGFib3J0aW5nLCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSB0
byBoYXZlIHF1ZXVlZCBhbnkgZnVydGhlciBvcGVyYXRpb25zLgotICAgIEFTU0VSVChtX3RyYW5z
YWN0aW9uT3BlcmF0aW9uUXVldWUuaXNFbXB0eSgpKTsKLX0KLQotY29uc3QgY2hhciogSURCVHJh
bnNhY3Rpb246OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiAiSURC
VHJhbnNhY3Rpb24iOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kRm9yRG9j
dW1lbnRTdXNwZW5zaW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
SURCVHJhbnNhY3Rpb246Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICFtX2NvbnRleHRTdG9wcGVkICYmIG1fc3RhdGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0
YXRlOjpGaW5pc2hlZDsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6c3RvcCgpCi17Ci0gICAg
TE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpzdG9wIik7Ci0KLSAgICAvLyBJREJEYXRh
YmFzZTo6c3RvcCgpIGNhbGxzIElEQlRyYW5zYWN0aW9uOjpzdG9wKCkgZm9yIGVhY2ggb2YgaXRz
IGFjdGl2ZSB0cmFuc2FjdGlvbnMuCi0gICAgLy8gU2luY2UgdGhlIG9yZGVyIG9mIGNhbGxpbmcg
QWN0aXZlRE9NT2JqZWN0OjpzdG9wKCkgaXMgcmFuZG9tLCB3ZSBtaWdodCBhbHJlYWR5IGhhdmUg
YmVlbiBzdG9wcGVkLgotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRleHRTdG9wcGVkID0gdHJ1ZTsKLQotICAgIGlmIChpc0ZpbmlzaGVkT3JG
aW5pc2hpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlIGVjOwotICAgIGFib3J0KGVjKTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbjo6aXNBY3Rp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25TdGF0ZTo6QWN0aXZlOwotfQotCi1ib29sIElEQlRyYW5zYWN0aW9uOjppc0ZpbmlzaGVkT3JG
aW5pc2hpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25TdGF0ZTo6Q29tbWl0dGluZwotICAgICAgICB8fCBtX3N0YXRlID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWJvcnRpbmcKLSAgICAgICAgfHwgbV9zdGF0ZSA9PSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uOjphZGRSZXF1ZXN0KElEQlJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgbV9vcGVuUmVxdWVz
dHMuYWRkKCZyZXF1ZXN0KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6cmVtb3ZlUmVxdWVz
dChJREJSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIEFTU0VSVChtX29wZW5SZXF1ZXN0cy5jb250
YWlucygmcmVxdWVzdCkpOwotICAgIG1fb3BlblJlcXVlc3RzLnJlbW92ZSgmcmVxdWVzdCk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnNjaGVkdWxlT3BlcmF0aW9uKFJlZlB0cjxUcmFuc2Fj
dGlvbk9wZXJhdGlvbj4mJiBvcGVyYXRpb24pCi17Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9u
T3BlcmF0aW9uTWFwLmNvbnRhaW5zKG9wZXJhdGlvbi0+aWRlbnRpZmllcigpKSk7Ci0KLSAgICBt
X3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuYXBwZW5kKG9wZXJhdGlvbik7Ci0gICAgbV90cmFu
c2FjdGlvbk9wZXJhdGlvbk1hcC5zZXQob3BlcmF0aW9uLT5pZGVudGlmaWVyKCksIFdURk1vdmUo
b3BlcmF0aW9uKSk7Ci0KLSAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQg
SURCVHJhbnNhY3Rpb246OnNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKQotewotICAgIGlmICghbV9v
cGVyYXRpb25UaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX29wZXJhdGlvblRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b3BlcmF0aW9uVGltZXJGaXJl
ZCgpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25UaW1l
ckZpcmVkICglcCkiLCB0aGlzKTsKLQotICAgIGlmICghbV9zdGFydGVkT25TZXJ2ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV90cmFuc2FjdGlvbk9wZXJhdGlvblF1ZXVlLmlzRW1w
dHkoKSkgewotICAgICAgICBhdXRvIG9wZXJhdGlvbiA9IG1fdHJhbnNhY3Rpb25PcGVyYXRpb25R
dWV1ZS50YWtlRmlyc3QoKTsKLSAgICAgICAgb3BlcmF0aW9uLT5wZXJmb3JtKCk7Ci0KLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV90cmFuc2FjdGlvbk9wZXJhdGlvbk1hcC5p
c0VtcHR5KCkgfHwgIW1fb3BlblJlcXVlc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkKLSAgICAgICAgY29tbWl0KCk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpjb21taXQiKTsKLQotICAgIEFTU0VSVCghaXNGaW5pc2hlZE9yRmlu
aXNoaW5nKCkpOwotCi0gICAgdHJhbnNpdGlvbmVkVG9GaW5pc2hpbmcoSW5kZXhlZERCOjpUcmFu
c2FjdGlvblN0YXRlOjpDb21taXR0aW5nKTsKLSAgICBtX2RhdGFiYXNlLT53aWxsQ29tbWl0VHJh
bnNhY3Rpb24oKnRoaXMpOwotCi0gICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlv
bk9wZXJhdGlvbigqdGhpcywgbnVsbHB0ciwgJklEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZl
cik7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbjo6Y29tbWl0T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mIG9w
ZXJhdGlvbikKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNvbW1pdE9u
U2VydmVyIik7Ci0gICAgc2VydmVyQ29ubmVjdGlvbigpLmNvbW1pdFRyYW5zYWN0aW9uKCp0aGlz
KTsKLQotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLmNvbnRhaW5zKG9wZXJh
dGlvbi5pZGVudGlmaWVyKCkpKTsKLSAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnJlbW92
ZShvcGVyYXRpb24uaWRlbnRpZmllcigpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6Zmlu
aXNoQWJvcnRPckNvbW1pdCgpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgIT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCk7Ci0gICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQ7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRpZFN0
YXJ0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246OmRpZFN0YXJ0Iik7Ci0KLSAgICBtX2RhdGFiYXNlLT5kaWRTdGFydFRyYW5zYWN0
aW9uKCp0aGlzKTsKLQotICAgIG1fc3RhcnRlZE9uU2VydmVyID0gdHJ1ZTsKLQotICAgIC8vIEl0
J3MgcG9zc2libGUgdGhlIHRyYW5zYWN0aW9uIGZhaWxlZCB0byBzdGFydCBvbiB0aGUgc2VydmVy
LgotICAgIC8vIFRoYXQgZXF1YXRlcyB0byBhbiBhYm9ydC4KLSAgICBpZiAoIWVycm9yLmlzTnVs
bCgpKSB7Ci0gICAgICAgIGRpZEFib3J0KGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bjo6bm90aWZ5RGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQotewotICAgIG1fZGF0YWJh
c2UtPmRpZEFib3J0VHJhbnNhY3Rpb24oKnRoaXMpOwotICAgIG1faWRiRXJyb3IgPSBlcnJvcjsK
LSAgICBmaXJlT25BYm9ydCgpOwotCi0gICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgpKSB7Ci0gICAg
ICAgIEFTU0VSVChtX29wZW5EQlJlcXVlc3QpOwotICAgICAgICBtX29wZW5EQlJlcXVlc3QtPmZp
cmVFcnJvckFmdGVyVmVyc2lvbkNoYW5nZUNvbXBsZXRpb24oKTsKLSAgICB9Ci19Ci0KLXZvaWQg
SURCVHJhbnNhY3Rpb246OmRpZEFib3J0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKLXsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEFib3J0Iik7Ci0KLSAgICBpZiAobV9z
dGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBub3RpZnlEaWRBYm9ydChlcnJvcik7Ci0KLSAgICBmaW5pc2hBYm9ydE9y
Q29tbWl0KCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENvbW1pdChjb25zdCBJREJF
cnJvciYgZXJyb3IpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRD
b21taXQiKTsKLQotICAgIEFTU0VSVChtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6Q29tbWl0dGluZyk7Ci0KLSAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKLSAgICAgICAg
bV9kYXRhYmFzZS0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24oKnRoaXMpOwotICAgICAgICBmaXJlT25D
b21wbGV0ZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZGF0YWJhc2UtPndpbGxBYm9ydFRy
YW5zYWN0aW9uKCp0aGlzKTsKLSAgICAgICAgbm90aWZ5RGlkQWJvcnQoZXJyb3IpOwotICAgIH0K
LQotICAgIGZpbmlzaEFib3J0T3JDb21taXQoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6
ZmlyZU9uQ29tcGxldGUoKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
ZmlyZU9uQ29tcGxldGUiKTsKLSAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuY29tcGxldGVFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb246OmZpcmVPbkFib3J0KCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmZpcmVPbkFib3J0Iik7Ci0gICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmFib3J0RXZlbnQsIHRydWUsIGZhbHNlKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rp
b246OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCi17Ci0gICAgQVNTRVJUKG1fc3Rh
dGUgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCk7Ci0KLSAgICBpZiAo
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2NvbnRleHRTdG9wcGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotICAgIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChXVEZNb3ZlKGV2ZW50KSk7Ci19
Ci0KLWJvb2wgSURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQotewot
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlzcGF0Y2hFdmVudCIpOwotCi0g
ICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKCFtX2NvbnRl
eHRTdG9wcGVkKTsKLSAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7Ci0gICAgQVNT
RVJUKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCB8fCBldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxF
dmVudFRhcmdldD4+IHRhcmdldHM7Ci0gICAgdGFyZ2V0cy5hcHBlbmQodGhpcyk7Ci0gICAgdGFy
Z2V0cy5hcHBlbmQoZGIoKSk7Ci0KLSAgICBib29sIHJlc3VsdCA9IElEQkV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2goZXZlbnQsIHRhcmdldHMpOwotCi0gICAgaWYgKGlzVmVyc2lvbkNoYW5nZSgp
KSB7Ci0gICAgICAgIEFTU0VSVChtX29wZW5EQlJlcXVlc3QpOwotICAgICAgICBtX29wZW5EQlJl
cXVlc3QtPnZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbkRpZEZpbmlzaCgpOwotCi0gICAgICAgIGlm
IChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQpIHsKLSAgICAgICAg
ICAgIGlmIChtX2RhdGFiYXNlLT5pc0Nsb3NpbmdPckNsb3NlZCgpKQotICAgICAgICAgICAgICAg
IG1fb3BlbkRCUmVxdWVzdC0+ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fb3BlbkRCUmVxdWVzdC0+Zmly
ZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1fb3BlbkRCUmVxdWVzdCA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotUmVmPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3Rv
cmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKLSAgICBBU1NFUlQoaXNWZXJz
aW9uQ2hhbmdlKCkpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotCi0g
ICAgUmVmPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVh
dGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgaW5mbywgKnRoaXMpOwotICAgIG1fcmVmZXJl
bmNlZE9iamVjdFN0b3Jlcy5zZXQoaW5mby5uYW1lKCksICZvYmplY3RTdG9yZS5nZXQoKSk7Ci0K
LSAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0aGlzLCAm
SURCVHJhbnNhY3Rpb246OmRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIsICZJREJUcmFuc2Fj
dGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlciwgaW5mbyk7Ci0gICAgc2NoZWR1bGVPcGVy
YXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKLQotICAgIHJldHVybiBvYmplY3RTdG9yZTsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2Fj
dGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8p
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9y
ZU9uU2VydmVyIik7Ci0KLSAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwotCi0gICAgbV9k
YXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLmNyZWF0ZU9iamVjdFN0b3JlKG9wZXJhdGlvbiwg
aW5mbyk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENyZWF0ZU9iamVjdFN0b3JlT25T
ZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAgICBMT0coSW5kZXhl
ZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKLQot
ICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0RGF0YSwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVz
dWx0VHlwZTo6Q3JlYXRlT2JqZWN0U3RvcmVTdWNjZXNzIHx8IHJlc3VsdERhdGEudHlwZSgpID09
IElEQlJlc3VsdFR5cGU6OkVycm9yKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBJ
REJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXgoSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBj
b25zdCBJREJJbmRleEluZm8mIGluZm8pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5z
YWN0aW9uOjpjcmVhdGVJbmRleCIpOwotICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7Ci0K
LSAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKCp0
aGlzLCAmSURCVHJhbnNhY3Rpb246OmRpZENyZWF0ZUluZGV4T25TZXJ2ZXIsICZJREJUcmFuc2Fj
dGlvbjo6Y3JlYXRlSW5kZXhPblNlcnZlciwgaW5mbyk7Ci0gICAgc2NoZWR1bGVPcGVyYXRpb24o
V1RGTW92ZShvcGVyYXRpb24pKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPElEQklu
ZGV4Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBpbmZvLCBvYmplY3RTdG9yZSk7Ci19Ci0K
LXZvaWQgSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVy
YXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQotewotICAgIExPRyhJ
bmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y3JlYXRlSW5kZXhPblNlcnZlciIpOwotCi0gICAg
QVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLQotICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5l
Y3Rpb24oKS5jcmVhdGVJbmRleChvcGVyYXRpb24sIGluZm8pOwotfQotCi12b2lkIElEQlRyYW5z
YWN0aW9uOjpkaWRDcmVhdGVJbmRleE9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3Vs
dERhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRDcmVhdGVJ
bmRleE9uU2VydmVyIik7Ci0KLSAgICBpZiAocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0
VHlwZTo6Q3JlYXRlSW5kZXhTdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
cmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpOwotCi0gICAgLy8gVGhp
cyBvcGVyYXRpb24gbWlnaHQgaGF2ZSBmYWlsZWQgYmVjYXVzZSB0aGUgdHJhbnNhY3Rpb24gaXMg
YWxyZWFkeSBhYm9ydGluZy4KLSAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0
aW9uU3RhdGU6OkFib3J0aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPdGhlcndpc2Us
IGZhaWx1cmUgdG8gY3JlYXRlIGFuIGluZGV4IGZvcmNlZCBhYm9ydGlvbiBvZiB0aGUgdHJhbnNh
Y3Rpb24uCi0gICAgYWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKHJlc3VsdERhdGEuZXJyb3IoKS5jb2RlKCkp
KSk7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVj
dFN0b3JlLCBjb25zdCBJREJDdXJzb3JJbmZvJiBpbmZvKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IiKTsKLQotICAgIHJldHVybiBkb1Jl
cXVlc3RPcGVuQ3Vyc29yKGNvbnRleHQsIElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKCp0aGlz
LCBvYmplY3RTdG9yZSwgaW5mbykpOwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rp
b246OnJlcXVlc3RPcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
QkluZGV4JiBpbmRleCwgY29uc3QgSURCQ3Vyc29ySW5mbyYgaW5mbykKLXsKLSAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVuQ3Vyc29yIik7Ci0KLSAgICBpZiAo
aW5mby5jdXJzb3JUeXBlKCkgPT0gSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5KQotICAg
ICAgICByZXR1cm4gZG9SZXF1ZXN0T3BlbkN1cnNvcihjb250ZXh0LCBJREJDdXJzb3I6OmNyZWF0
ZSgqdGhpcywgaW5kZXgsIGluZm8pKTsKLQotICAgIHJldHVybiBkb1JlcXVlc3RPcGVuQ3Vyc29y
KGNvbnRleHQsIElEQkN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKCp0aGlzLCBpbmRleCwgaW5mbykp
OwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OmRvUmVxdWVzdE9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgUmVmPElEQkN1cnNvcj4mJiBjdXJz
b3IpCi17Ci0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgY3Vyc29yLmdldCgpLCAqdGhpcyk7
Ci0gICAgYWRkUmVxdWVzdChyZXF1ZXN0LmdldCgpKTsKLQotICAgIGF1dG8gb3BlcmF0aW9uID0g
Y3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFu
c2FjdGlvbjo6ZGlkT3BlbkN1cnNvck9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246Om9wZW5DdXJz
b3JPblNlcnZlciwgY3Vyc29yLT5pbmZvKCkpOwotICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1v
dmUob3BlcmF0aW9uKSk7Ci0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbjo6b3BlbkN1cnNvck9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRp
b24sIGNvbnN0IElEQkN1cnNvckluZm8mIGluZm8pCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIiKTsKLQotICAgIG1fZGF0YWJhc2UtPnNl
cnZlckNvbm5lY3Rpb24oKS5vcGVuQ3Vyc29yKG9wZXJhdGlvbiwgaW5mbyk7Ci19Ci0KLXZvaWQg
SURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6ZGlkT3BlbkN1cnNvck9uU2VydmVyIik7Ci0KLSAgICByZXF1ZXN0
LmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IocmVzdWx0RGF0YSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb246Oml0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJiBjdXJzb3IsIGNvbnN0IElEQktleURhdGEm
IGtleSwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJh
bnNhY3Rpb246Oml0ZXJhdGVDdXJzb3IiKTsKLSAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAg
QVNTRVJUKGN1cnNvci5yZXF1ZXN0KCkpOwotCi0gICAgYWRkUmVxdWVzdCgqY3Vyc29yLnJlcXVl
c3QoKSk7Ci0KLSAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9uT3BlcmF0aW9u
KCp0aGlzLCAqY3Vyc29yLnJlcXVlc3QoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vy
c29yT25TZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2VydmVyLCBrZXks
IGNvdW50KTsKLSAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoVHJhbnNhY3Rpb25P
cGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCB1bnNpZ25l
ZCBsb25nJiBjb3VudCkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246Oml0
ZXJhdGVDdXJzb3JPblNlcnZlciIpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLml0ZXJhdGVD
dXJzb3Iob3BlcmF0aW9uLCBrZXksIGNvdW50KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6
ZGlkSXRlcmF0ZUN1cnNvck9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJl
c3VsdERhdGEmIHJlc3VsdERhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIiKTsKLQotICAgIHJlcXVlc3QuZGlkT3Blbk9y
SXRlcmF0ZUN1cnNvcihyZXN1bHREYXRhKTsKLX0KLQotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5z
YWN0aW9uOjpyZXF1ZXN0R2V0UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IElEQk9iamVjdFN0b3JlJiBvYmplY3RTdG9yZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlS
YW5nZURhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
R2V0UmVjb3JkIik7Ci0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCgha2V5UmFu
Z2VEYXRhLmlzTnVsbCk7Ci0KLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBvYmplY3RTdG9yZSwgKnRoaXMpOwotICAgIGFkZFJlcXVlc3Qo
cmVxdWVzdC5nZXQoKSk7Ci0KLSAgICBhdXRvIG9wZXJhdGlvbiA9IGNyZWF0ZVRyYW5zYWN0aW9u
T3BlcmF0aW9uKCp0aGlzLCByZXF1ZXN0LmdldCgpLCAmSURCVHJhbnNhY3Rpb246OmRpZEdldFJl
Y29yZE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyLCBrZXlSYW5n
ZURhdGEpOwotICAgIHNjaGVkdWxlT3BlcmF0aW9uKFdURk1vdmUob3BlcmF0aW9uKSk7Ci0KLSAg
ICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpy
ZXF1ZXN0R2V0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgm
IGluZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQotewotICAgIExPRyhJbmRleGVk
REIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlIik7Ci0gICAgcmV0dXJuIHJlcXVl
c3RJbmRleFJlY29yZChjb250ZXh0LCBpbmRleCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGU6
OlZhbHVlLCByYW5nZSk7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVx
dWVzdEdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJJbmRleCYgaW5k
ZXgsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwg
IklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0VmFsdWUiKTsKLSAgICByZXR1cm4gcmVxdWVzdElu
ZGV4UmVjb3JkKGNvbnRleHQsIGluZGV4LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZTo6S2V5
LCByYW5nZSk7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdElu
ZGV4UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRl
eCwgSW5kZXhlZERCOjpJbmRleFJlY29yZFR5cGUgdHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
JnJhbmdlKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdl
dFZhbHVlIik7Ci0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghcmFuZ2UuaXNO
dWxsKTsKLQotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
R2V0KGNvbnRleHQsIGluZGV4LCB0eXBlLCAqdGhpcyk7Ci0gICAgYWRkUmVxdWVzdChyZXF1ZXN0
LmdldCgpKTsKLQotICAgIGF1dG8gb3BlcmF0aW9uID0gY3JlYXRlVHJhbnNhY3Rpb25PcGVyYXRp
b24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25T
ZXJ2ZXIsICZJREJUcmFuc2FjdGlvbjo6Z2V0UmVjb3JkT25TZXJ2ZXIsIHJhbmdlKTsKLSAgICBz
Y2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOwotCi0gICAgcmV0dXJuIHJlcXVl
c3Q7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyKFRyYW5zYWN0
aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2Up
Ci17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZl
ciIpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLmdldFJlY29yZChvcGVyYXRpb24sIGtleVJh
bmdlKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIoSURC
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKLXsKLSAg
ICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEdldFJlY29yZE9uU2VydmVyIik7
Ci0KLSAgICBpZiAocmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpIHsK
LSAgICAgICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3Vs
dFR5cGU6OkdldFJlY29yZFN1Y2Nlc3MpOwotCi0gICAgY29uc3QgSURCR2V0UmVzdWx0JiByZXN1
bHQgPSByZXN1bHREYXRhLmdldFJlc3VsdCgpOwotCi0gICAgaWYgKHJlcXVlc3Quc291cmNlSW5k
ZXhJZGVudGlmaWVyKCkgJiYgcmVxdWVzdC5yZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUoKSA9PSBJ
bmRleGVkREI6OkluZGV4UmVjb3JkVHlwZTo6S2V5KSB7Ci0gICAgICAgIGlmICghcmVzdWx0Lmtl
eURhdGEoKS5pc051bGwoKSkKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0UmVzdWx0KCZyZXN1bHQu
a2V5RGF0YSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXN1bHRU
b1VuZGVmaW5lZCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZXN1bHREYXRhLmdldFJl
c3VsdCgpLnZhbHVlQnVmZmVyKCkuZGF0YSgpKQotICAgICAgICAgICAgcmVxdWVzdC5zZXRSZXN1
bHRUb1N0cnVjdHVyZWRDbG9uZShyZXN1bHREYXRhLmdldFJlc3VsdCgpLnZhbHVlQnVmZmVyKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXF1ZXN0LnNldFJlc3VsdFRvVW5kZWZpbmVk
KCk7Ci0gICAgfQotCi0gICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOwot
fQotCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RTdG9yZSYgb2JqZWN0U3RvcmUsIGNv
bnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRy
YW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQgKElEQk9iamVjdFN0b3JlKSIpOwotICAgIEFTU0VSVChp
c0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIXJhbmdlLmlzTnVsbCk7Ci0KLSAgICBSZWY8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBvYmplY3RTdG9yZSwg
KnRoaXMpOwotICAgIGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci0KLSAgICBzY2hlZHVsZU9w
ZXJhdGlvbihjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwg
JklEQlRyYW5zYWN0aW9uOjpkaWRHZXRDb3VudE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246Omdl
dENvdW50T25TZXJ2ZXIsIHJhbmdlKSk7Ci0KLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUmVm
PElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IHJhbmdlKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENv
dW50IChJREJJbmRleCkiKTsKLSAgICBBU1NFUlQoaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFy
YW5nZS5pc051bGwpOwotCi0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGVDb3VudChjb250ZXh0LCBpbmRleCwgKnRoaXMpOwotICAgIGFkZFJlcXVlc3QocmVx
dWVzdC5nZXQoKSk7Ci0KLSAgICBzY2hlZHVsZU9wZXJhdGlvbihjcmVhdGVUcmFuc2FjdGlvbk9w
ZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRHZXRDb3Vu
dE9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIsIHJhbmdlKSk7Ci0K
LSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRP
blNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
Z2V0Q291bnRPblNlcnZlciIpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLmdldENvdW50KG9w
ZXJhdGlvbiwga2V5UmFuZ2UpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRHZXRDb3Vu
dE9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3Vs
dERhdGEpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRHZXRDb3Vu
dE9uU2VydmVyIik7Ci0KLSAgICByZXF1ZXN0LnNldFJlc3VsdChyZXN1bHREYXRhLnJlc3VsdElu
dGVnZXIoKSk7Ci0gICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOwotfQot
Ci1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3Jl
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQotewotICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdERlbGV0ZVJlY29yZCIpOwotICAgIEFTU0VSVChpc0FjdGl2
ZSgpKTsKLSAgICBBU1NFUlQoIXJhbmdlLmlzTnVsbCk7Ci0KLSAgICBSZWY8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBvYmplY3RTdG9yZSwgKnRoaXMp
OwotICAgIGFkZFJlcXVlc3QocmVxdWVzdC5nZXQoKSk7Ci0KLSAgICBzY2hlZHVsZU9wZXJhdGlv
bihjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVxdWVzdC5nZXQoKSwgJklEQlRy
YW5zYWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlciwgJklEQlRyYW5zYWN0aW9uOjpkZWxl
dGVSZWNvcmRPblNlcnZlciwgcmFuZ2UpKTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotdm9p
ZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRp
b24mIG9wZXJhdGlvbiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKLXsKLSAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZVJlY29yZE9uU2VydmVyIik7Ci0K
LSAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRlUmVjb3JkKG9wZXJhdGlvbiwga2V5UmFuZ2Up
OwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVSZWNvcmRPblNlcnZlcihJREJS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlUmVjb3JkT25TZXJ2ZXIi
KTsKLQotICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsKLSAgICByZXF1ZXN0LnJl
cXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7Ci19Ci0KLVJlZjxJREJSZXF1ZXN0PiBJREJUcmFu
c2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlKQotewotICAgIExPRyhJbmRleGVk
REIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUiKTsKLSAgICBBU1NF
UlQoaXNBY3RpdmUoKSk7Ci0KLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVl
c3Q6OmNyZWF0ZShjb250ZXh0LCBvYmplY3RTdG9yZSwgKnRoaXMpOwotICAgIGFkZFJlcXVlc3Qo
cmVxdWVzdC5nZXQoKSk7Ci0KLSAgICB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIgPSBv
YmplY3RTdG9yZS5pbmZvKCkuaWRlbnRpZmllcigpOwotICAgIGF1dG8gb3BlcmF0aW9uID0gY3Jl
YXRlVHJhbnNhY3Rpb25PcGVyYXRpb24oKnRoaXMsIHJlcXVlc3QuZ2V0KCksICZJREJUcmFuc2Fj
dGlvbjo6ZGlkQ2xlYXJPYmplY3RTdG9yZU9uU2VydmVyLCAmSURCVHJhbnNhY3Rpb246OmNsZWFy
T2JqZWN0U3RvcmVPblNlcnZlciwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKLSAgICBzY2hlZHVs
ZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOwotCi0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OmNsZWFyT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2Fj
dGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y2xlYXJPYmpl
Y3RTdG9yZU9uU2VydmVyIik7Ci0KLSAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuY2xlYXJPYmplY3RT
dG9yZShvcGVyYXRpb24sIG9iamVjdFN0b3JlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb246OmRpZENsZWFyT2JqZWN0U3RvcmVPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6ZGlkQ2xlYXJPYmplY3RTdG9yZU9uU2VydmVyIik7Ci0KLSAgICBy
ZXF1ZXN0LnNldFJlc3VsdFRvVW5kZWZpbmVkKCk7Ci0gICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxl
dGVkKHJlc3VsdERhdGEpOwotfQotCi1SZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJl
cXVlc3RQdXRPckFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJPYmplY3RT
dG9yZSYgb2JqZWN0U3RvcmUsIElEQktleSoga2V5LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZh
bHVlLCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlKQot
ewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdFB1dE9yQWRkIik7
Ci0gICAgQVNTRVJUKGlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKLSAg
ICBBU1NFUlQob2JqZWN0U3RvcmUuaW5mbygpLmF1dG9JbmNyZW1lbnQoKSB8fCBrZXkpOwotCi0g
ICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
b2JqZWN0U3RvcmUsICp0aGlzKTsKLSAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwotCi0g
ICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywgcmVx
dWVzdC5nZXQoKSwgJklEQlRyYW5zYWN0aW9uOjpkaWRQdXRPckFkZE9uU2VydmVyLCAmSURCVHJh
bnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIsIGtleSwgJnZhbHVlLCBvdmVyd3JpdGVNb2RlKTsK
LSAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlvbikpOwotCi0gICAgcmV0dXJu
IHJlcXVlc3Q7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIoVHJh
bnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgUmVmUHRyPElEQktleT4ga2V5LCBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9y
ZU92ZXJ3cml0ZU1vZGUmIG92ZXJ3cml0ZU1vZGUpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyIik7Ci0KLSAgICBBU1NFUlQoIWlzUmVhZE9u
bHkoKSk7Ci0KLSAgICBzZXJ2ZXJDb25uZWN0aW9uKCkucHV0T3JBZGQob3BlcmF0aW9uLCBrZXks
IHZhbHVlLCBvdmVyd3JpdGVNb2RlKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkUHV0
T3JBZGRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiBy
ZXN1bHREYXRhKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkUHV0
T3JBZGRPblNlcnZlciIpOwotCi0gICAgcmVxdWVzdC5zZXRSZXN1bHQocmVzdWx0RGF0YS5yZXN1
bHRLZXkoKSk7Ci0gICAgcmVxdWVzdC5yZXF1ZXN0Q29tcGxldGVkKHJlc3VsdERhdGEpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9i
amVjdFN0b3JlTmFtZSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRl
bGV0ZU9iamVjdFN0b3JlIik7Ci0KLSAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwotCi0g
ICAgaWYgKGF1dG8gb2JqZWN0U3RvcmUgPSBtX3JlZmVyZW5jZWRPYmplY3RTdG9yZXMudGFrZShv
YmplY3RTdG9yZU5hbWUpKQotICAgICAgICBvYmplY3RTdG9yZS0+bWFya0FzRGVsZXRlZCgpOwot
Ci0gICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlvbk9wZXJhdGlvbigqdGhpcywg
JklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVPYmplY3RTdG9yZU9uU2VydmVyLCAmSURCVHJhbnNh
Y3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIsIG9iamVjdFN0b3JlTmFtZSk7Ci0gICAg
c2NoZWR1bGVPcGVyYXRpb24oV1RGTW92ZShvcGVyYXRpb24pKTsKLX0KLQotdm9pZCBJREJUcmFu
c2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYg
b3BlcmF0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKLXsKLSAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKLSAg
ICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLmRl
bGV0ZU9iamVjdFN0b3JlKG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVOYW1lKTsKLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25zdCBJREJSZXN1
bHREYXRhJiByZXN1bHREYXRhKQotewotICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6ZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlciIpOwotICAgIEFTU0VSVF9VTlVTRUQocmVz
dWx0RGF0YSwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RGVsZXRlT2JqZWN0
U3RvcmVTdWNjZXNzIHx8IHJlc3VsdERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkVycm9y
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXgodWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKLXsKLSAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4Iik7Ci0KLSAgICBBU1NFUlQoaXNW
ZXJzaW9uQ2hhbmdlKCkpOwotCi0gICAgYXV0byBvcGVyYXRpb24gPSBjcmVhdGVUcmFuc2FjdGlv
bk9wZXJhdGlvbigqdGhpcywgJklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9uU2VydmVy
LCAmSURCVHJhbnNhY3Rpb246OmRlbGV0ZUluZGV4T25TZXJ2ZXIsIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhOYW1lKTsKLSAgICBzY2hlZHVsZU9wZXJhdGlvbihXVEZNb3ZlKG9wZXJhdGlv
bikpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpkZWxldGVJbmRleE9uU2VydmVyKFRyYW5z
YWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQotewotICAgIExPRyhJbmRleGVkREIs
ICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlciIpOwotICAgIEFTU0VSVChpc1Zl
cnNpb25DaGFuZ2UoKSk7Ci0KLSAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRlSW5kZXgob3Bl
cmF0aW9uLCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGluZGV4TmFtZSk7Ci19Ci0KLXZvaWQgSURC
VHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4T25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYg
cmVzdWx0RGF0YSkKLXsKLSAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZERl
bGV0ZUluZGV4T25TZXJ2ZXIiKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3Vs
dERhdGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkRlbGV0ZUluZGV4U3VjY2VzcyB8fCByZXN1
bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7Ci19Ci0KLXZvaWQgSURCVHJh
bnNhY3Rpb246Om9wZXJhdGlvbkRpZENvbXBsZXRlKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVy
YXRpb24pCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuZ2V0KG9wZXJh
dGlvbi5pZGVudGlmaWVyKCkpID09ICZvcGVyYXRpb24pOwotICAgIG1fdHJhbnNhY3Rpb25PcGVy
YXRpb25NYXAucmVtb3ZlKG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpOwotCi0gICAgc2NoZWR1bGVP
cGVyYXRpb25UaW1lcigpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjplc3RhYmxpc2hPblNl
cnZlcigpCi17Ci0gICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjplc3RhYmxpc2hP
blNlcnZlciIpOwotCi0gICAgc2VydmVyQ29ubmVjdGlvbigpLmVzdGFibGlzaFRyYW5zYWN0aW9u
KCp0aGlzKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6YWN0aXZhdGUoKQotewotICAgIGlm
IChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0
ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6QWN0aXZlOwotfQotCi12b2lkIElEQlRy
YW5zYWN0aW9uOjpkZWFjdGl2YXRlKCkKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6
OlRyYW5zYWN0aW9uU3RhdGU6OkFjdGl2ZSkKLSAgICAgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25TdGF0ZTo6SW5hY3RpdmU7Ci0KLSAgICBzY2hlZHVsZU9wZXJhdGlvblRpbWVy
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25JbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVHJhbnNhY3Rpb25J
bXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNTQ4MWEuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlRyYW5zYWN0aW9u
SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIElEQlRyYW5zYWN0aW9uSW1wbF9oCi0jZGVmaW5lIElEQlRyYW5zYWN0aW9uSW1wbF9oCi0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlSW5m
by5oIgotI2luY2x1ZGUgIklEQkVycm9yLmgiCi0jaW5jbHVkZSAiSURCSW5kZXhJbXBsLmgiCi0j
aW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJbXBsLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24u
aCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkluZm8uaCIKLSNpbmNsdWRlICJJbmRleGVkREIu
aCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQ3Vyc29y
SW5mbzsKLWNsYXNzIElEQkluZGV4SW5mbzsKLWNsYXNzIElEQktleURhdGE7Ci1jbGFzcyBJREJP
YmplY3RTdG9yZUluZm87Ci1jbGFzcyBJREJSZXN1bHREYXRhOwotCi1zdHJ1Y3QgSURCS2V5UmFu
Z2VEYXRhOwotCi1uYW1lc3BhY2UgSURCQ2xpZW50IHsKLQotY2xhc3MgSURCQ3Vyc29yOwotY2xh
c3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJJbmRleDsKLWNsYXNzIElEQk9wZW5EQlJlcXVlc3Q7
Ci1jbGFzcyBUcmFuc2FjdGlvbk9wZXJhdGlvbjsKLQotY2xhc3MgSURCVHJhbnNhY3Rpb24gOiBw
dWJsaWMgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShJREJEYXRhYmFzZSYsIGNvbnN0IElEQlRyYW5zYWN0aW9u
SW5mbyYpOwotICAgIHN0YXRpYyBSZWY8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShJREJEYXRhYmFz
ZSYsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYsIElEQk9wZW5EQlJlcXVlc3QmKTsKLQotICAg
IH5JREJUcmFuc2FjdGlvbigpIGZpbmFsOwotCi0gICAgLy8gSURCVHJhbnNhY3Rpb24gSURMCi0g
ICAgY29uc3QgU3RyaW5nJiBtb2RlKCkgY29uc3QgZmluYWw7Ci0gICAgV2ViQ29yZTo6SURCRGF0
YWJhc2UqIGRiKCkgZmluYWw7Ci0gICAgUmVmUHRyPERPTUVycm9yPiBlcnJvcigpIGNvbnN0IGZp
bmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBmaW5hbDsKLSAgICB2
b2lkIGFib3J0KEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIGZpbmFsOwotCi0gICAgRXZlbnRU
YXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBJREJUcmFuc2FjdGlvbkV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsgfQotICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQotICAgIHZv
aWQgcmVmRXZlbnRUYXJnZXQoKSBmaW5hbCB7IHJlZigpOyB9Ci0gICAgdm9pZCBkZXJlZkV2ZW50
VGFyZ2V0KCkgZmluYWwgeyBkZXJlZigpOyB9Ci0gICAgdXNpbmcgRXZlbnRUYXJnZXQ6OmRpc3Bh
dGNoRXZlbnQ7Ci0gICAgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50JikgZmluYWw7Ci0KLSAgICBj
b25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBj
YW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHN0b3AoKSBmaW5hbDsK
LQotICAgIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbygpIGNvbnN0IHsgcmV0dXJuIG1f
aW5mbzsgfQotICAgIElEQkRhdGFiYXNlJiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2Uu
Z2V0KCk7IH0KLSAgICBjb25zdCBJREJEYXRhYmFzZSYgZGF0YWJhc2UoKSBjb25zdCB7IHJldHVy
biBtX2RhdGFiYXNlLmdldCgpOyB9Ci0gICAgSURCRGF0YWJhc2VJbmZvKiBvcmlnaW5hbERhdGFi
YXNlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mby5vcmlnaW5hbERhdGFiYXNlSW5mbygpOyB9
Ci0KLSAgICB2b2lkIGRpZFN0YXJ0KGNvbnN0IElEQkVycm9yJik7Ci0gICAgdm9pZCBkaWRBYm9y
dChjb25zdCBJREJFcnJvciYpOwotICAgIHZvaWQgZGlkQ29tbWl0KGNvbnN0IElEQkVycm9yJik7
Ci0KLSAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5mby5tb2Rl
KCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2U7IH0KLSAgICBi
b29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX2luZm8ubW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seTsgfQotICAgIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKLQotICAgIFJlZjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURC
T2JqZWN0U3RvcmVJbmZvJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBjcmVhdGVJ
bmRleChJREJPYmplY3RTdG9yZSYsIGNvbnN0IElEQkluZGV4SW5mbyYpOwotCi0gICAgUmVmPElE
QlJlcXVlc3Q+IHJlcXVlc3RQdXRPckFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2Jq
ZWN0U3RvcmUmLCBJREJLZXkqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBJbmRleGVkREI6Ok9i
amVjdFN0b3JlT3ZlcndyaXRlTW9kZSk7Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RHZXRS
ZWNvcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJik7Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3REZWxldGVSZWNvcmQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3JlJiwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJik7Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RDbGVhck9iamVjdFN0b3JlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJPYmplY3RTdG9yZSYpOwotICAgIFJlZjxJREJSZXF1
ZXN0PiByZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIElEQk9iamVjdFN0b3Jl
JiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RD
b3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCSW5kZXgmLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmKTsKLSAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdEdldFZhbHVlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIFJl
ZjxJREJSZXF1ZXN0PiByZXF1ZXN0R2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJ
bmRleCYsIGNvbnN0IElEQktleVJhbmdlRGF0YSYpOwotICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1
ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgSURCT2JqZWN0U3RvcmUmLCBj
b25zdCBJREJDdXJzb3JJbmZvJik7Ci0gICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3RPcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJJbmRleCYsIGNvbnN0IElEQkN1cnNvcklu
Zm8mKTsKLSAgICB2b2lkIGl0ZXJhdGVDdXJzb3IoSURCQ3Vyc29yJiwgY29uc3QgSURCS2V5RGF0
YSYsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotCi0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSk7Ci0gICAgdm9pZCBkZWxldGVJbmRleCh1aW50
NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKLQot
ICAgIHZvaWQgYWRkUmVxdWVzdChJREJSZXF1ZXN0Jik7Ci0gICAgdm9pZCByZW1vdmVSZXF1ZXN0
KElEQlJlcXVlc3QmKTsKLQotICAgIHZvaWQgYWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXJy
b3ImKTsKLQotICAgIElEQkNvbm5lY3Rpb25Ub1NlcnZlciYgc2VydmVyQ29ubmVjdGlvbigpOwot
Ci0gICAgdm9pZCBhY3RpdmF0ZSgpOwotICAgIHZvaWQgZGVhY3RpdmF0ZSgpOwotCi0gICAgdm9p
ZCBvcGVyYXRpb25EaWRDb21wbGV0ZShUcmFuc2FjdGlvbk9wZXJhdGlvbiYpOwotCi0gICAgYm9v
bCBpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSBjb25zdDsKLSAgICBib29sIGlzRmluaXNoZWQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6Rmlu
aXNoZWQ7IH0KLQotcHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbihJREJEYXRhYmFzZSYsIGNv
bnN0IElEQlRyYW5zYWN0aW9uSW5mbyYsIElEQk9wZW5EQlJlcXVlc3QqKTsKLQotICAgIHZvaWQg
Y29tbWl0KCk7Ci0KLSAgICB2b2lkIG5vdGlmeURpZEFib3J0KGNvbnN0IElEQkVycm9yJik7Ci0g
ICAgdm9pZCBmaW5pc2hBYm9ydE9yQ29tbWl0KCk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlT3BlcmF0
aW9uKFJlZlB0cjxUcmFuc2FjdGlvbk9wZXJhdGlvbj4mJik7Ci0gICAgdm9pZCBvcGVyYXRpb25U
aW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIGZpcmVPbkNvbXBsZXRlKCk7Ci0gICAgdm9pZCBmaXJl
T25BYm9ydCgpOwotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7Ci0KLSAgICBS
ZWY8SURCUmVxdWVzdD4gcmVxdWVzdEluZGV4UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
LCBJREJJbmRleCYsIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlLCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmKTsKLQotICAgIHZvaWQgY29tbWl0T25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24m
KTsKLSAgICB2b2lkIGFib3J0T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0cyhUcmFuc2FjdGlvbk9w
ZXJhdGlvbiYpOwotCi0gICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKFRyYW5zYWN0
aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJik7Ci0gICAgdm9pZCBkaWRD
cmVhdGVPYmplY3RTdG9yZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLQotICAgIHZv
aWQgY3JlYXRlSW5kZXhPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElEQklu
ZGV4SW5mbyYpOwotICAgIHZvaWQgZGlkQ3JlYXRlSW5kZXhPblNlcnZlcihjb25zdCBJREJSZXN1
bHREYXRhJik7Ci0KLSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmVPblNlcnZlcihUcmFuc2FjdGlv
bk9wZXJhdGlvbiYsIGNvbnN0IHVpbnQ2NF90JiBvYmplY3RTdG9yZUlkZW50aWZpZXIpOwotICAg
IHZvaWQgZGlkQ2xlYXJPYmplY3RTdG9yZU9uU2VydmVyKElEQlJlcXVlc3QmLCBjb25zdCBJREJS
ZXN1bHREYXRhJik7Ci0KLSAgICB2b2lkIHB1dE9yQWRkT25TZXJ2ZXIoVHJhbnNhY3Rpb25PcGVy
YXRpb24mLCBSZWZQdHI8SURCS2V5PiwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIGNv
bnN0IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlJik7Ci0gICAgdm9pZCBkaWRQ
dXRPckFkZE9uU2VydmVyKElEQlJlcXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAg
ICB2b2lkIGdldFJlY29yZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJik7Ci0gICAgdm9pZCBkaWRHZXRSZWNvcmRPblNlcnZlcihJREJSZXF1ZXN0
JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBnZXRDb3VudE9uU2VydmVyKFRy
YW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0gICAgdm9pZCBk
aWRHZXRDb3VudE9uU2VydmVyKElEQlJlcXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRhJik7Ci0K
LSAgICB2b2lkIGRlbGV0ZVJlY29yZE9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29u
c3QgSURCS2V5UmFuZ2VEYXRhJik7Ci0gICAgdm9pZCBkaWREZWxldGVSZWNvcmRPblNlcnZlcihJ
REJSZXF1ZXN0JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZU9uU2VydmVyKFRyYW5zYWN0aW9uT3BlcmF0aW9uJiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RTdG9yZU5hbWUpOwotICAgIHZvaWQgZGlkRGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihjb25z
dCBJREJSZXN1bHREYXRhJik7Ci0KLSAgICB2b2lkIGRlbGV0ZUluZGV4T25TZXJ2ZXIoVHJhbnNh
Y3Rpb25PcGVyYXRpb24mLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGluZGV4TmFtZSk7Ci0gICAgdm9pZCBkaWREZWxldGVJbmRleE9uU2VydmVy
KGNvbnN0IElEQlJlc3VsdERhdGEmKTsKLQotICAgIFJlZjxJREJSZXF1ZXN0PiBkb1JlcXVlc3RP
cGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWY8SURCQ3Vyc29yPiYmKTsKLSAg
ICB2b2lkIG9wZW5DdXJzb3JPblNlcnZlcihUcmFuc2FjdGlvbk9wZXJhdGlvbiYsIGNvbnN0IElE
QkN1cnNvckluZm8mKTsKLSAgICB2b2lkIGRpZE9wZW5DdXJzb3JPblNlcnZlcihJREJSZXF1ZXN0
JiwgY29uc3QgSURCUmVzdWx0RGF0YSYpOwotCi0gICAgdm9pZCBpdGVyYXRlQ3Vyc29yT25TZXJ2
ZXIoVHJhbnNhY3Rpb25PcGVyYXRpb24mLCBjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgdW5zaWdu
ZWQgbG9uZyYgY291bnQpOwotICAgIHZvaWQgZGlkSXRlcmF0ZUN1cnNvck9uU2VydmVyKElEQlJl
cXVlc3QmLCBjb25zdCBJREJSZXN1bHREYXRhJik7Ci0KLSAgICB2b2lkIHRyYW5zaXRpb25lZFRv
RmluaXNoaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZSk7Ci0KLSAgICB2b2lkIGVzdGFi
bGlzaE9uU2VydmVyKCk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsKLQot
ICAgIFJlZjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKLSAgICBJREJUcmFuc2FjdGlvbkluZm8g
bV9pbmZvOwotCi0gICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlIG1fc3RhdGUgeyBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkluYWN0aXZlIH07Ci0gICAgYm9vbCBtX3N0YXJ0ZWRP
blNlcnZlciB7IGZhbHNlIH07Ci0KLSAgICBJREJFcnJvciBtX2lkYkVycm9yOwotICAgIFJlZlB0
cjxET01FcnJvcj4gbV9kb21FcnJvcjsKLQotICAgIFRpbWVyIG1fb3BlcmF0aW9uVGltZXI7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVyPiBtX2FjdGl2YXRpb25UaW1lcjsKLQotICAgIFJlZlB0
cjxJREJPcGVuREJSZXF1ZXN0PiBtX29wZW5EQlJlcXVlc3Q7Ci0KLSAgICBEZXF1ZTxSZWZQdHI8
VHJhbnNhY3Rpb25PcGVyYXRpb24+PiBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWU7Ci0gICAg
RGVxdWU8UmVmUHRyPFRyYW5zYWN0aW9uT3BlcmF0aW9uPj4gbV9hYm9ydFF1ZXVlOwotICAgIEhh
c2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8VHJhbnNhY3Rpb25PcGVyYXRpb24+
PiBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxJREJPYmplY3RTdG9yZT4+IG1fcmVmZXJlbmNlZE9iamVjdFN0b3JlczsKLQotICAgIEhhc2hT
ZXQ8UmVmUHRyPElEQlJlcXVlc3Q+PiBtX29wZW5SZXF1ZXN0czsKLQotICAgIGJvb2wgbV9jb250
ZXh0U3RvcHBlZCB7IGZhbHNlIH07Ci19OwotCi1jbGFzcyBUcmFuc2FjdGlvbkFjdGl2YXRvciB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVHJhbnNhY3Rpb25BY3RpdmF0b3IpOwotcHVibGlj
OgotICAgIFRyYW5zYWN0aW9uQWN0aXZhdG9yKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
LSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAgICAgaWYg
KG1fdHJhbnNhY3Rpb24pCi0gICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5hY3RpdmF0ZSgpOwot
ICAgIH0KLQotICAgIH5UcmFuc2FjdGlvbkFjdGl2YXRvcigpCi0gICAgewotICAgICAgICBpZiAo
bV90cmFuc2FjdGlvbikKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRlYWN0aXZhdGUoKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBJREJDbGllbnQKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQlRyYW5zYWN0
aW9uSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9j
bGllbnQvSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYThmMmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmgiCi0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNw
YWNlIElEQkNsaWVudCB7Ci0KLUlEQlZlcnNpb25DaGFuZ2VFdmVudDo6SURCVmVyc2lvbkNoYW5n
ZUV2ZW50KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIsIHVp
bnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKQotICAgIDogV2ViQ29yZTo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KGV2ZW50
VHlwZSkKLSAgICAsIG1fcmVxdWVzdElkZW50aWZpZXIocmVxdWVzdElkZW50aWZpZXIpCi0gICAg
LCBtX29sZFZlcnNpb24ob2xkVmVyc2lvbikKLSAgICAsIG1fbmV3VmVyc2lvbihuZXdWZXJzaW9u
KQotewotfQotCi1PcHRpb25hbDx1aW50NjRfdD4gSURCVmVyc2lvbkNoYW5nZUV2ZW50OjpuZXdW
ZXJzaW9uKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fbmV3VmVyc2lvbikKLSAgICAgICAgcmV0dXJu
IE51bGxvcHQ7Ci0gICAgcmV0dXJuIG1fbmV3VmVyc2lvbjsKLX0KLQotRXZlbnRJbnRlcmZhY2Ug
SURCVmVyc2lvbkNoYW5nZUV2ZW50OjpldmVudEludGVyZmFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEQlZlcnNpb25DaGFuZ2VFdmVudEludGVyZmFjZVR5cGU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIElEQkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9jbGllbnQvSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvY2xpZW50L0lEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE5MTE1NS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvSURCVmVyc2lvbkNoYW5nZUV2ZW50
SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbF9oCi0jZGVmaW5lIElEQlZlcnNpb25DaGFuZ2VF
dmVudEltcGxfaAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJ
REJSZXNvdXJjZUlkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlRXZlbnQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIElEQkNsaWVudCB7Ci0KLWNsYXNz
IElEQlZlcnNpb25DaGFuZ2VFdmVudCBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpJREJWZXJzaW9u
Q2hhbmdlRXZlbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCVmVyc2lvbkNoYW5nZUV2
ZW50PiBjcmVhdGUodWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQoSURCUmVzb3VyY2VJZGVudGlmaWVyOjplbXB0
eVZhbHVlKCksIG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50VHlwZSkpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBSZWY8SURCVmVyc2lvbkNoYW5nZUV2ZW50PiBjcmVhdGUoY29uc3QgSURCUmVz
b3VyY2VJZGVudGlmaWVyJiByZXF1ZXN0SWRlbnRpZmllciwgdWludDY0X3Qgb2xkVmVyc2lvbiwg
dWludDY0X3QgbmV3VmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJWZXJzaW9uQ2hhbmdlRXZlbnQocmVx
dWVzdElkZW50aWZpZXIsIG9sZFZlcnNpb24sIG5ld1ZlcnNpb24sIGV2ZW50VHlwZSkpOwotICAg
IH0KLQotICAgIGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgcmVxdWVzdElkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RJZGVudGlmaWVyOyB9Ci0KLSAgICBib29sIGlzVmVy
c2lvbkNoYW5nZUV2ZW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcml2YXRl
OgotICAgIElEQlZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHJlcXVlc3RJZGVudGlmaWVyLCB1aW50NjRfdCBvbGRWZXJzaW9uLCB1aW50NjRfdCBuZXdWZXJz
aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSk7Ci0KLSAgICB1aW50NjRfdCBvbGRW
ZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9vbGRWZXJzaW9uOyB9Ci0gICAgT3B0
aW9uYWw8dWludDY0X3Q+IG5ld1ZlcnNpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBFdmVudElu
dGVyZmFjZSBldmVudEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyIG1fcmVxdWVzdElkZW50aWZpZXI7Ci0gICAgdWludDY0X3QgbV9vbGRWZXJz
aW9uOwotICAgIHVpbnQ2NF90IG1fbmV3VmVyc2lvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIElE
QkNsaWVudAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OklEQkNsaWVudDo6SURCVmVyc2lvbkNoYW5nZUV2ZW50KQotICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpFdmVudCYgZXZlbnQpIHsgcmV0dXJuIGV2
ZW50LmlzVmVyc2lvbkNoYW5nZUV2ZW50KCk7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5E
KCkKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQlZl
cnNpb25DaGFuZ2VFdmVudEltcGxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAKaW5k
ZXggZjY3YWQxZC4uYTZlYWQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvY2xpZW50L1RyYW5zYWN0aW9uT3BlcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uY3BwCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1
ZGUgIklEQkN1cnNvckltcGwuaCIKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogbmFtZXNwYWNlIElEQkNsaWVudCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9jbGllbnQvVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlv
bi5oCmluZGV4IGM5Mzk2MDUuLjNjMDllMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9wZXJhdGlvbi5o
CkBAIC0yOCw5ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2lu
Y2x1ZGUgIklEQlJlcXVlc3RJbXBsLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgogI2luY2x1
ZGUgIklEQlJlc291cmNlSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uSW1w
bC5oIgorI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QkN1cnNvckluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkN1cnNvckluZm8uY3BwCmluZGV4IDBlYjk0MTQuLjY3MGEzOTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCQ3Vyc29ySW5m
by5jcHAKQEAgLTI4LDE3ICsyOCwxNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkltcGwuaCIKKyNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbi5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUlEQkN1cnNvckluZm8gSURCQ3Vyc29ySW5mbzo6b2JqZWN0U3RvcmVDdXJzb3IoSURCQ2xpZW50
OjpJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJl
Y3Rpb24gZGlyZWN0aW9uKQorSURCQ3Vyc29ySW5mbyBJREJDdXJzb3JJbmZvOjpvYmplY3RTdG9y
ZUN1cnNvcihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIHJldHVybiB7IHRyYW5zYWN0aW9uLCBvYmpl
Y3RTdG9yZUlkZW50aWZpZXIsIHJhbmdlLCBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZTo6S2V5QW5kVmFsdWUgfTsKIH0KIAotSURCQ3Vyc29ySW5mbyBJREJDdXJzb3JJbmZvOjppbmRl
eEN1cnNvcihJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYgcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlv
biwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIHR5cGUpCitJREJDdXJzb3JJbmZvIElEQkN1cnNvcklu
Zm86OmluZGV4Q3Vyc29yKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2Jq
ZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYgcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbiwg
SW5kZXhlZERCOjpDdXJzb3JUeXBlIHR5cGUpCiB7CiAgICAgcmV0dXJuIHsgdHJhbnNhY3Rpb24s
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCByYW5nZSwgZGlyZWN0aW9u
LCB0eXBlIH07CiB9CkBAIC00Nyw3ICs0Nyw3IEBAIElEQkN1cnNvckluZm86OklEQkN1cnNvcklu
Zm8oKQogewogfQogCi1JREJDdXJzb3JJbmZvOjpJREJDdXJzb3JJbmZvKElEQkNsaWVudDo6SURC
VHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9u
IGRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIHR5cGUpCitJREJDdXJzb3JJbmZvOjpJ
REJDdXJzb3JJbmZvKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgdWludDY0X3Qgb2JqZWN0
U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSB0eXBlKQog
ICAgIDogbV9jdXJzb3JJZGVudGlmaWVyKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkK
ICAgICAsIG1fdHJhbnNhY3Rpb25JZGVudGlmaWVyKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlm
aWVyKCkpCiAgICAgLCBtX29iamVjdFN0b3JlSWRlbnRpZmllcihvYmplY3RTdG9yZUlkZW50aWZp
ZXIpCkBAIC01OSw3ICs1OSw3IEBAIElEQkN1cnNvckluZm86OklEQkN1cnNvckluZm8oSURCQ2xp
ZW50OjpJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2NF90IG9iCiB7CiB9CiAKLUlE
QkN1cnNvckluZm86OklEQkN1cnNvckluZm8oSURCQ2xpZW50OjpJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJ
ZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJbmRleGVkREI6OkN1cnNv
ckRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSB0eXBlKQorSURCQ3Vy
c29ySW5mbzo6SURCQ3Vyc29ySW5mbyhJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIHVpbnQ2
NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgdWludDY0X3QgaW5kZXhJZGVudGlmaWVyLCBjb25z
dCBJREJLZXlSYW5nZURhdGEmIHJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSB0eXBlKQogICAgIDogbV9jdXJzb3JJZGVudGlm
aWVyKHRyYW5zYWN0aW9uLnNlcnZlckNvbm5lY3Rpb24oKSkKICAgICAsIG1fdHJhbnNhY3Rpb25J
ZGVudGlmaWVyKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpCiAgICAgLCBtX29iamVj
dFN0b3JlSWRlbnRpZmllcihvYmplY3RTdG9yZUlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCQ3Vyc29ySW5mby5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkN1cnNvckluZm8uaAppbmRl
eCA5YTFjZWUyLi45ZmQ5OGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCQ3Vyc29ySW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJDdXJzb3JJbmZvLmgKQEAgLTMzLDkgKzMzLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3BhY2UgSURCQ2xpZW50IHsKIGNsYXNzIElEQlRy
YW5zYWN0aW9uOwotfQogCiBuYW1lc3BhY2UgSW5kZXhlZERCIHsKIGVudW0gY2xhc3MgQ3Vyc29y
RGlyZWN0aW9uOwpAQCAtNTIsOCArNTAsOCBAQCBlbnVtIGNsYXNzIEN1cnNvckR1cGxpY2l0eSB7
CiAKIGNsYXNzIElEQkN1cnNvckluZm8gewogcHVibGljOgotICAgIHN0YXRpYyBJREJDdXJzb3JJ
bmZvIG9iamVjdFN0b3JlQ3Vyc29yKElEQkNsaWVudDo6SURCVHJhbnNhY3Rpb24mLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4ZWRE
Qjo6Q3Vyc29yRGlyZWN0aW9uKTsKLSAgICBzdGF0aWMgSURCQ3Vyc29ySW5mbyBpbmRleEN1cnNv
cihJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uJiwgdWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUpOworICAgIHN0
YXRpYyBJREJDdXJzb3JJbmZvIG9iamVjdFN0b3JlQ3Vyc29yKElEQlRyYW5zYWN0aW9uJiwgdWlu
dDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCBjb25zdCBJREJLZXlSYW5nZURhdGEmLCBJbmRl
eGVkREI6OkN1cnNvckRpcmVjdGlvbik7CisgICAgc3RhdGljIElEQkN1cnNvckluZm8gaW5kZXhD
dXJzb3IoSURCVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVp
bnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSk7CiAKICAgICBJREJSZXNv
dXJjZUlkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29ySWRlbnRp
ZmllcjsgfQogICAgIHVpbnQ2NF90IHNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUlkZW50aWZpZXI7IH0KQEAgLTc0LDggKzcyLDggQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgSURCQ3Vyc29y
SW5mbyYpOwogCiBwcml2YXRlOgotICAgIElEQkN1cnNvckluZm8oSURCQ2xpZW50OjpJREJUcmFu
c2FjdGlvbiYsIHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFu
Z2VEYXRhJiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSk7Ci0gICAgSURCQ3Vyc29ySW5mbyhJREJDbGllbnQ6OklEQlRyYW5zYWN0aW9uJiwgdWludDY0
X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyLCB1aW50NjRfdCBpbmRleElkZW50aWZpZXIsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6
OkN1cnNvclR5cGUpOworICAgIElEQkN1cnNvckluZm8oSURCVHJhbnNhY3Rpb24mLCB1aW50NjRf
dCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIGNvbnN0IElEQktleVJhbmdlRGF0YSYsIEluZGV4ZWRE
Qjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUpOworICAgIElEQkN1cnNv
ckluZm8oSURCVHJhbnNhY3Rpb24mLCB1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIsIHVp
bnQ2NF90IGluZGV4SWRlbnRpZmllciwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSW5kZXhlZERC
OjpDdXJzb3JEaXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSk7CiAKICAgICBJREJDdXJz
b3JJbmZvKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYsIGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYsIHVpbnQ2NF90LCB1aW50NjRfdCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiwgSW5k
ZXhlZERCOjpDdXJzb3JTb3VyY2UsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBJbmRleGVk
REI6OkN1cnNvclR5cGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCUmVxdWVzdERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlcXVlc3REYXRhLmNwcAppbmRleCBhY2NhYTE0Li45YmM5
OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQv
SURCUmVxdWVzdERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5jcHAKQEAgLTI5LDcgKzI5LDggQEAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub1NlcnZlci5oIgot
I2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3RJbXBsLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzcsNyArMzgsNyBAQCBJREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEoKQogewog
fQogCi1JREJSZXF1ZXN0RGF0YTo6SURCUmVxdWVzdERhdGEoY29uc3QgSURCQ2xpZW50OjpJREJD
b25uZWN0aW9uVG9TZXJ2ZXImIGNvbm5lY3Rpb24sIGNvbnN0IElEQkNsaWVudDo6SURCT3BlbkRC
UmVxdWVzdCYgcmVxdWVzdCkKK0lEQlJlcXVlc3REYXRhOjpJREJSZXF1ZXN0RGF0YShjb25zdCBJ
REJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgY29uc3QgSURCT3Bl
bkRCUmVxdWVzdCYgcmVxdWVzdCkKICAgICA6IG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIo
Y29ubmVjdGlvbi5pZGVudGlmaWVyKCkpCiAgICAgLCBtX3JlcXVlc3RJZGVudGlmaWVyKHN0ZDo6
bWFrZV91bmlxdWU8SURCUmVzb3VyY2VJZGVudGlmaWVyPihjb25uZWN0aW9uLCByZXF1ZXN0KSkK
ICAgICAsIG1fZGF0YWJhc2VJZGVudGlmaWVyKHJlcXVlc3QuZGF0YWJhc2VJZGVudGlmaWVyKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
UmVxdWVzdERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJSZXF1ZXN0RGF0YS5oCmluZGV4IDc1ODlhZGYuLjA2ZDE1ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXF1ZXN0RGF0YS5o
CkBAIC0zNCwyMCArMzQsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJREJP
cGVuREJSZXF1ZXN0OworY2xhc3MgSURCVHJhbnNhY3Rpb247CisKIG5hbWVzcGFjZSBJbmRleGVk
REIgewogZW51bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7CiB9CiAKIG5hbWVzcGFjZSBJREJDbGll
bnQgewogY2xhc3MgSURCQ29ubmVjdGlvblRvU2VydmVyOwotY2xhc3MgSURCT3BlbkRCUmVxdWVz
dDsKLWNsYXNzIElEQlRyYW5zYWN0aW9uOwogY2xhc3MgVHJhbnNhY3Rpb25PcGVyYXRpb247CiB9
CiAKIGNsYXNzIElEQlJlcXVlc3REYXRhIHsKIHB1YmxpYzoKLSAgICBJREJSZXF1ZXN0RGF0YShj
b25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYsIGNvbnN0IElEQkNsaWVudDo6
SURCT3BlbkRCUmVxdWVzdCYpOworICAgIElEQlJlcXVlc3REYXRhKGNvbnN0IElEQkNsaWVudDo6
SURCQ29ubmVjdGlvblRvU2VydmVyJiwgY29uc3QgSURCT3BlbkRCUmVxdWVzdCYpOwogICAgIGV4
cGxpY2l0IElEQlJlcXVlc3REYXRhKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mKTsK
ICAgICBJREJSZXF1ZXN0RGF0YShjb25zdCBJREJSZXF1ZXN0RGF0YSYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVu
dGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJS
ZXNvdXJjZUlkZW50aWZpZXIuY3BwCmluZGV4IDI2YzZlNmMuLjc3M2M1NGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50
aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJSZXNvdXJjZUlkZW50aWZpZXIuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJJ
REJDb25uZWN0aW9uVG9DbGllbnQuaCIKICNpbmNsdWRlICJJREJDb25uZWN0aW9uVG9TZXJ2ZXIu
aCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0SW1wbC5oIgorI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02
NSw3ICs2NSw3IEBAIElEQlJlc291cmNlSWRlbnRpZmllcjo6SURCUmVzb3VyY2VJZGVudGlmaWVy
KGNvbnN0IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VyCiB7CiB9CiAKLUlEQlJlc291cmNl
SWRlbnRpZmllcjo6SURCUmVzb3VyY2VJZGVudGlmaWVyKGNvbnN0IElEQkNsaWVudDo6SURCQ29u
bmVjdGlvblRvU2VydmVyJiBjb25uZWN0aW9uLCBjb25zdCBJREJDbGllbnQ6OklEQlJlcXVlc3Qm
IHJlcXVlc3QpCitJREJSZXNvdXJjZUlkZW50aWZpZXI6OklEQlJlc291cmNlSWRlbnRpZmllcihj
b25zdCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgY29ubmVjdGlvbiwgY29uc3Qg
SURCUmVxdWVzdCYgcmVxdWVzdCkKICAgICA6IG1faWRiQ29ubmVjdGlvbklkZW50aWZpZXIoY29u
bmVjdGlvbi5pZGVudGlmaWVyKCkpCiAgICAgLCBtX3Jlc291cmNlTnVtYmVyKHJlcXVlc3QucmVz
b3VyY2VJZGVudGlmaWVyKCkubV9yZXNvdXJjZU51bWJlcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlkZW50aWZpZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJSZXNvdXJjZUlk
ZW50aWZpZXIuaAppbmRleCA0MTQxMzQ1Li4yNTE3ZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCUmVzb3VyY2VJZGVudGlmaWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlJlc291cmNlSWRl
bnRpZmllci5oCkBAIC0zMiw5ICszMiwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIElEQlJlcXVlc3Q7CisKIG5hbWVzcGFjZSBJREJDbGllbnQgewogY2xhc3MgSURCQ29ubmVj
dGlvblRvU2VydmVyOwotY2xhc3MgSURCUmVxdWVzdDsKIH0KIAogbmFtZXNwYWNlIElEQlNlcnZl
ciB7CkBAIC00NCw3ICs0NSw3IEBAIGNsYXNzIElEQkNvbm5lY3Rpb25Ub0NsaWVudDsKIGNsYXNz
IElEQlJlc291cmNlSWRlbnRpZmllciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyKGNvbnN0IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJik7Ci0g
ICAgSURCUmVzb3VyY2VJZGVudGlmaWVyKGNvbnN0IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRv
U2VydmVyJiwgY29uc3QgSURCQ2xpZW50OjpJREJSZXF1ZXN0Jik7CisgICAgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyKGNvbnN0IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiwgY29uc3Qg
SURCUmVxdWVzdCYpOwogICAgIGV4cGxpY2l0IElEQlJlc291cmNlSWRlbnRpZmllcihjb25zdCBJ
REJTZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwogCiAgICAgc3RhdGljIElEQlJlc291
cmNlSWRlbnRpZmllciBkZWxldGVkVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJUcmFuc2FjdGlvbkluZm8uY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlRyYW5zYWN0aW9uSW5mby5jcHAK
aW5kZXggMTZhNTJlNC4uM2NhYmQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0lEQlRyYW5zYWN0aW9uSW5mby5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQlRyYW5zYWN0aW9uSW5mby5jcHAKQEAg
LTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25JbXBsLmgiCisjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCmluZGV4IDYx
YzA3YTguLmZhZTEzMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwCkBAIC0zMiw3ICsz
Miw3IEBACiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2VydmVyLmgiCiAjaW5jbHVkZSAiSURC
Q3Vyc29ySW5mby5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlRGF0YS5oIgotI2luY2x1ZGUgIklE
Qk9wZW5EQlJlcXVlc3RJbXBsLmgiCisjaW5jbHVkZSAiSURCT3BlbkRCUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIklEQlJlcXVlc3REYXRhLmgiCiAjaW5jbHVkZSAiSURCUmVzdWx0RGF0YS5oIgogI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCA3MWQ5NzhiLi4w
ZTY0MzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSW5Qcm9jZXNzSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC0zMCw3ICszMCw3IEBACiAKICNp
bmNsdWRlICJJREJDb25uZWN0aW9uVG9DbGllbnQuaCIKICNpbmNsdWRlICJJREJDb25uZWN0aW9u
VG9TZXJ2ZXIuaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0SW1wbC5oIgorI2luY2x1ZGUg
IklEQk9wZW5EQlJlcXVlc3QuaCIKICNpbmNsdWRlICJJREJTZXJ2ZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTYyNTM5ZC4u
ODVkMDExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTk0NiwxMiArMTk0Niw2IEBACiAJCTUxMDE5MkQyMThCNkI5QUIwMDdG
QzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDE5MkQwMThCNkI5QUIwMDdGQzdBMSAvKiBJ
bWFnZUNvbnRyb2xzUm9vdEVsZW1lbnRNYWMuaCAqLzsgfTsKIAkJNTEwMTkyRDUxOEI2QjlCNzAw
N0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAxOTJEMzE4QjZCOUI3MDA3RkM3QTEgLyog
SW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmNwcCAqLzsgfTsKIAkJNTEwMTkyRDYxOEI2QjlCNzAw
N0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMTkyRDQxOEI2QjlCNzAwN0ZDN0ExIC8qIElt
YWdlQ29udHJvbHNSb290RWxlbWVudC5oICovOyB9OwotCQk1MTAzMTA0RjFCQThDQzAzMDAzMzI5
QzAgLyogSURCRmFjdG9yeUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwMzEwNEExQkE4QzZBNjAwMzMyOUMwIC8qIElEQkZhY3RvcnlJbXBs
LmNwcCAqLzsgfTsKLQkJNTEwMzEwNTAxQkE4Q0MwMzAwMzMyOUMwIC8qIElEQkZhY3RvcnlJbXBs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTAzMTA0
QjFCQThDNkE2MDAzMzI5QzAgLyogSURCRmFjdG9yeUltcGwuaCAqLzsgfTsKLQkJNTEwMzEwNUEx
QkE4REI1NjAwMzMyOUMwIC8qIElEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDMxMDU2MUJBOERCMzAwMDMzMjlD
MCAvKiBJREJPcGVuREJSZXF1ZXN0SW1wbC5jcHAgKi87IH07Ci0JCTUxMDMxMDVCMUJBOERCNTYw
MDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMzEwNTcxQkE4REIzMDAwMzMyOUMwIC8qIElEQk9w
ZW5EQlJlcXVlc3RJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJNTEwMzEwNUMxQkE4REI1NjAwMzMyOUMwIC8qIElEQlJlcXVlc3RJbXBsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDMxMDU4
MUJBOERCMzAwMDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5jcHAgKi87IH07Ci0JCTUxMDMxMDVE
MUJBOERCNTYwMDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMzEwNTkxQkE4REIzMDAwMzMyOUMwIC8qIElE
QlJlcXVlc3RJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTEwNkQ3QkQxOEJEQjc2RjAwMEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA2RDdC
QjE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0LmNwcCAqLzsgfTsKIAkJNTEw
NkQ3QkUxOEJEQjc2RjAwMEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNkQ3QkMxOEJEQjc2RjAwMEFC
MTY2IC8qIENvbnRleHRNZW51Q29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxMEE1OEU0MUJBQTQwQjEwMEMxOTI4MiAvKiBJblByb2Nl
c3NJREJTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEwQTU4RTIxQkFBNDBBRTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5jcHAg
Ki87IH07CkBAIC0yMDQ3LDggKzIwNDEsNiBAQAogCQk1MTYwMzA2QzBDQzQzNjIzMDBDOEFDMjUg
LyogRmlsZVN5c3RlbUNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjAzMDZCMENDNDM2MjMwMEM4QUMyNSAvKiBGaWxlU3lzdGVtQ0YuY3BwICov
OyB9OwogCQk1MTYwNzEyRTFCRDgzMDc4MDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbmZvLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjA3MTJD
MUJEODMwNzIwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUluZm8uY3BwICovOyB9OwogCQk1MTYw
NzEyRjFCRDgzMDc4MDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwNzEyRDFCRDgzMDcyMDBEQkM0
RjIgLyogSURCT2JqZWN0U3RvcmVJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE2MDcxMzAxQkQ4MzA4NjAwREJDNEYyIC8qIElEQk9iamVj
dFN0b3JlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTYwNzEyOTFCRDgzMDUzMDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCAq
LzsgfTsKLQkJNTE2MDcxMzExQkQ4MzA4NjAwREJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW1wbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MDcxMkEx
QkQ4MzA1MzAwREJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW1wbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNjA3MTMyMUJEODMwOEIwMERCQzRG
MiAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE2MDcxMkIxQkQ4MzA1MzAwREJDNEYyIC8qIFRyYW5zYWN0aW9u
T3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTE2MEY0OTgwQjBBQTc1RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MEY0OTcwQjBBQTc1
RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tICovOyB9OwogCQk1MTYyQzdGNDExRjc3RUZC
MDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJl
Z2lzdHJ5LmNwcCAqLzsgfTsKQEAgLTIxNjAsMTQgKzIxNTIsNiBAQAogCQk1MTk4RjdBOTFCQkRE
Mzg1MDBFMkNDNUYgLyogVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QTcxQkJERDM4MTAwRTJD
QzVGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTk4RjdBQzFCQkREM0VCMDBFMkNDNUYg
LyogSURCVHJhbnNhY3Rpb25JbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxOThGN0FBMUJCREQzRTMwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlv
bkluZm8uY3BwICovOyB9OwogCQk1MTk4RjdBRDFCQkREM0VCMDBFMkNDNUYgLyogSURCVHJhbnNh
Y3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTk4RjdBQjFCQkREM0UzMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTE5OEY3QjAxQkJE
RjVDODAwRTJDQzVGIC8qIElEQkRhdGFiYXNlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk4RjdBRTFCQkRGNTkyMDBFMkNDNUYgLyogSURC
RGF0YWJhc2VJbXBsLmNwcCAqLzsgfTsKLQkJNTE5OEY3QjExQkJERjVDODAwRTJDQzVGIC8qIElE
QkRhdGFiYXNlSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE5OEY3QUYxQkJERjU5MjAwRTJDQzVGIC8qIElEQkRhdGFiYXNlSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxOThGN0I0MUJC
RTAwM0MwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE5OEY3QjIxQkJFMDAxRDAwRTJDQzVGIC8q
IElEQlRyYW5zYWN0aW9uSW1wbC5jcHAgKi87IH07Ci0JCTUxOThGN0I1MUJCRTAwM0MwMEUyQ0M1
RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxOThGN0IzMUJCRTAwMUQwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlv
bkltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQk1MTk4RjdCODFCQzMxNDUxMDBFMkNDNUYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk4RjdC
NjFCQzMxNDE3MDBFMkNDNUYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5jcHAgKi87IH07
Ci0JCTUxOThGN0I5MUJDMzE0NTEwMEUyQ0M1RiAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk4RjdC
NzFCQzMxNDE3MDBFMkNDNUYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oICovOyB9Owot
CQk1MTk4RjdCRTFCQzMzOEFGMDBFMkNDNUYgLyogSURCQW55SW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTk4RjdCQzFCQzMzOEE5MDBFMkND
NUYgLyogSURCQW55SW1wbC5jcHAgKi87IH07Ci0JCTUxOThGN0JGMUJDMzM4QUYwMEUyQ0M1RiAv
KiBJREJBbnlJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTk4RjdCRDFCQzMzOEE5MDBFMkNDNUYgLyogSURCQW55SW1wbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxOThGN0MwMUJDNDg1Njcw
MEUyQ0M1RiAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NUZDQkMxQkI1Q0I3NzAwMTI4OThGIC8qIElE
QkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgKi87IH07CiAJCTUxOThGN0MxMUJDNDg1NjcwMEUyQ0M1
RiAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE1OEZEMUJCMDdBOTYwMEMxOTI4MiAvKiBJREJDb25uZWN0
aW9uVG9TZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MUEwNTIzMzEwNTg3NzRGMDBDQzlFOTUgLyogQ3JlZGVudGlhbFN0b3JhZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTA1MjMxMTA1
ODc3NEYwMENDOUU5NSAvKiBDcmVkZW50aWFsU3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMjM0LDE0ICsyMjE4LDggQEAKIAkJNTFF
RTdCM0ExQUE1MTIzMTAwRjkyQjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFRTdCMzkxQUE1MTIzMTAwRjky
QjIxIC8qIFJlc291cmNlTG9hZEluZm8uY3BwICovOyB9OwogCQk1MUVFQUE3MzFCRUZGQUIxMDAy
MTgwMDggLyogSW5kZXhWYWx1ZUVudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUVBQTcxMUJFRkZBNzkwMDIxODAwOCAvKiBJbmRleFZhbHVl
RW50cnkuY3BwICovOyB9OwogCQk1MUVFQUE3NDFCRUZGQUIxMDAyMTgwMDggLyogSW5kZXhWYWx1
ZUVudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUVFQUE3MjFCRUZGQTc5MDAyMTgwMDggLyogSW5kZXhWYWx1ZUVudHJ5LmggKi87IH07Ci0JCTUx
Rjc5OEU1MUJFODgwOTIwMDhBRTQ5MSAvKiBJREJDdXJzb3JJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjc5OEUxMUJFODgwODQwMDhBRTQ5
MSAvKiBJREJDdXJzb3JJbXBsLmNwcCAqLzsgfTsKLQkJNTFGNzk4RTYxQkU4ODA5MjAwOEFFNDkx
IC8qIElEQkN1cnNvckltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxRjc5OEUyMUJFODgwODQwMDhBRTQ5MSAvKiBJREJDdXJzb3JJbXBsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTFGNzk4RTcx
QkU4ODA5MjAwOEFFNDkxIC8qIElEQkluZGV4SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY3OThFMzFCRTg4MDg0MDA4QUU0OTEgLyogSURC
SW5kZXhJbXBsLmNwcCAqLzsgfTsKLQkJNTFGNzk4RTgxQkU4ODA5MjAwOEFFNDkxIC8qIElEQklu
ZGV4SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFGNzk4RTQxQkU4ODA4NDAwOEFFNDkxIC8qIElEQkluZGV4SW1wbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRjc5OEVGMUJFODgwRTcwMDhB
RTQ5MSAvKiBJREJJbmRleEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGNzk4RUIxQkU4ODBEMzAwOEFFNDkxIC8qIElEQkluZGV4SW5mby5j
cHAgKi87IH07CiAJCTUxRjc5OEYwMUJFODgwRTcwMDhBRTQ5MSAvKiBJREJJbmRleEluZm8uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjc5OEVDMUJF
ODgwRDMwMDhBRTQ5MSAvKiBJREJJbmRleEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUY3OThGMzFCRTg4Mzk0MDA4QUU0OTEgLyogSURC
Q3Vyc29yV2l0aFZhbHVlSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUY3OThGMTFCRTg4MzhEMDA4QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZh
bHVlSW1wbC5jcHAgKi87IH07Ci0JCTUxRjc5OEY0MUJFODgzOTQwMDhBRTQ5MSAvKiBJREJDdXJz
b3JXaXRoVmFsdWVJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUY3OThGMjFCRTg4MzhEMDA4QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlSW1w
bC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUx
RkEyRDc4MTUyMTMyQjMwMEMxQkEwQiAvKiBET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0ZCQTE4MTUxQUE3MUIwMEI1
Nzk1OSAvKiBET01XaW5kb3dFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUZCNTUwNDExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9z
ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUZCNTUwMjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi87IH07CiAJCTUxRkI1
NTA1MTEzRTNFOTEwMDgyMTE3NiAvKiBKU0Nsb3NlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQjU1MDMxMTNFM0U5MTAwODIxMTc2IC8q
IEpTQ2xvc2VFdmVudC5jcHAgKi87IH07CkBAIC05NDk5LDEyICs5NDc3LDYgQEAKIAkJNTEwMTky
RDMxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAxOTJENDE4QjZCOUI3MDA3RkM3
QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTAxOTJEODE4QjdEN0FCMDA3RkM3QTEgLyogaW1hZ2VDb250cm9sc01hYy5j
c3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IGltYWdlQ29udHJvbHNNYWMuY3NzOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTAzMTA0QTFCQThDNkE2MDAzMzI5QzAgLyogSURC
RmFjdG9yeUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURC
RmFjdG9yeUltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTAzMTA0QjFC
QThDNkE2MDAzMzI5QzAgLyogSURCRmFjdG9yeUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSURCRmFjdG9yeUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTEwMzEwNTYxQkE4REIzMDAwMzMyOUMwIC8qIElEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9wZW5EQlJlcXVlc3RJbXBs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEwMzEwNTcxQkE4REIzMDAwMzMy
OUMwIC8qIElEQk9wZW5EQlJlcXVlc3RJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQk9wZW5EQlJlcXVlc3RJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxMDMxMDU4MUJBOERCMzAwMDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJSZXF1ZXN0SW1wbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMDMxMDU5MUJBOERCMzAwMDMzMjlDMCAvKiBJREJS
ZXF1ZXN0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJSZXF1ZXN0
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTAzMTA1RTFCQThFMDkwMDAz
MzI5QzAgLyogSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElEQkRhdGFiYXNlSWRlbnRpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxMDMxMDVGMUJBOEUwOTAwMDMzMjlDMCAvKiBJREJEYXRhYmFzZUlk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRGF0YWJhc2VJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDZEN0JCMThCREI3
NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29udGV4dE1lbnVDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk2MTIsOCArOTU4NCw2IEBACiAJCTUxNUU1RkVGMTk1MTAxNDcwMDg2
Q0E1RSAvKiBQbGF0Zm9ybUdhbWVwYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1HYW1lcGFk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjAzMDBBMENDNDI1MTIwMEM4QUMy
NSAvKiBGaWxlU3lzdGVtUE9TSVguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRmlsZVN5c3RlbVBPU0lYLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE2MDMwNkIwQ0M0MzYyMzAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1DRi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3lzdGVtQ0YuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MTYwNzEyOTFCRDgzMDUzMDBEQkM0RjIgLyogSURCT2JqZWN0U3Rv
cmVJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQk9iamVj
dFN0b3JlSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjA3MTJBMUJE
ODMwNTMwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSURCT2JqZWN0U3RvcmVJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxNjA3MTJCMUJEODMwNTMwMERCQzRGMiAvKiBUcmFuc2FjdGlvbk9wZXJhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2FjdGlvbk9wZXJhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwNzEyQzFCRDgzMDcyMDBEQkM0
RjIgLyogSURCT2JqZWN0U3RvcmVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IElEQk9iamVjdFN0b3JlSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNjA3MTJEMUJEODMwNzIwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUluZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCT2JqZWN0U3RvcmVJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzA1LDE0ICs5Njc1LDYgQEAKIAkJNTE5OEY3
QTcxQkJERDM4MTAwRTJDQzVGIC8qIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTk4RjdBQTFCQkREM0UzMDBFMkND
NUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxOThGN0FCMUJCREQzRTMwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkluZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVHJhbnNhY3Rpb25JbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxOThGN0FFMUJCREY1OTIwMEUyQ0M1RiAvKiBJ
REJEYXRhYmFzZUltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SURCRGF0YWJhc2VJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5OEY3
QUYxQkJERjU5MjAwRTJDQzVGIC8qIElEQkRhdGFiYXNlSW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTE5OEY3QjIxQkJFMDAxRDAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9uSW1wbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJUcmFuc2FjdGlvbklt
cGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTk4RjdCMzFCQkUwMDFEMDBF
MkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElEQlRyYW5zYWN0aW9uSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MTk4RjdCNjFCQzMxNDE3MDBFMkNDNUYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJWZXJzaW9uQ2hhbmdl
RXZlbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5OEY3QjcxQkMz
MTQxNzAwRTJDQzVGIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MTk4RjdCQzFCQzMzOEE5MDBFMkNDNUYgLyogSURCQW55
SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJBbnlJbXBs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE5OEY3QkQxQkMzMzhBOTAwRTJD
QzVGIC8qIElEQkFueUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURC
QW55SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTlGRTBBMTBEQUQ0NDZF
MDBBMDhGMjEgLyogSFRNTEF0dHJpYnV0ZU5hbWVzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEhUTUxBdHRyaWJ1dGVOYW1lcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE5
RkUwQTIwREFENDQ2RTAwQTA4RjIxIC8qIEhUTUxUYWdOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBIVE1MVGFnTmFtZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QTA1MjMxMTA1ODc3NEYwMENDOUU5NSAvKiBDcmVkZW50aWFsU3RvcmFnZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDcmVkZW50aWFsU3RvcmFnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTgyMCwxNCArOTc4Miw4IEBACiAJCTUxRUVBQTcyMUJFRkZBNzkw
MDIxODAwOCAvKiBJbmRleFZhbHVlRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5kZXhWYWx1ZUVudHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
RjZBM0Q1MDY2M0JGMDQwMDREMjkxOSAvKiBIVE1MQ2FudmFzRWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MQ2FudmFz
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQk1MUY2QTNENjA2NjNCRjA0MDA0RDI5MTkgLyogSFRNTENhbnZhc0VsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SFRNTENhbnZhc0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07Ci0JCTUxRjc5OEUxMUJFODgwODQwMDhBRTQ5MSAvKiBJREJDdXJz
b3JJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQkN1cnNv
ckltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUY3OThFMjFCRTg4MDg0
MDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJDdXJzb3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRjc5
OEUzMUJFODgwODQwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSURCSW5kZXhJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTFGNzk4RTQxQkU4ODA4NDAwOEFFNDkxIC8qIElEQkluZGV4SW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJbmRleEltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGNzk4RUIxQkU4ODBEMzAwOEFFNDkxIC8qIElEQkluZGV4
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJJbmRleElu
Zm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUY3OThFQzFCRTg4MEQzMDA4
QUU0OTEgLyogSURCSW5kZXhJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkluZGV4SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUY3OThGMTFC
RTg4MzhEMDA4QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3JXaXRoVmFsdWVJbXBsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNzk4RjIxQkU4ODM4RDAwOEFFNDkxIC8qIElE
QkN1cnNvcldpdGhWYWx1ZUltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUZCNTUwMjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250
ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNzIyNiwzMSArMTcxODIsOSBAQAogCQk1MTAzMTA0MjFCQThDNjRDMDAz
MzI5QzAgLyogY2xpZW50ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQk1MTk4RjdCQzFCQzMzOEE5MDBFMkNDNUYgLyogSURCQW55SW1wbC5jcHAgKi8sCi0J
CQkJNTE5OEY3QkQxQkMzMzhBOTAwRTJDQzVGIC8qIElEQkFueUltcGwuaCAqLywKIAkJCQk1MTg1
RkNCQzFCQjVDQjc3MDAxMjg5OEYgLyogSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCAqLywKIAkJ
CQk1MTBBNThGRDFCQjA3QTk2MDBDMTkyODIgLyogSURCQ29ubmVjdGlvblRvU2VydmVyLmggKi8s
CiAJCQkJNTE4NUZDQkQxQkI1Q0I3NzAwMTI4OThGIC8qIElEQkNvbm5lY3Rpb25Ub1NlcnZlckRl
bGVnYXRlLmggKi8sCi0JCQkJNTFGNzk4RTExQkU4ODA4NDAwOEFFNDkxIC8qIElEQkN1cnNvcklt
cGwuY3BwICovLAotCQkJCTUxRjc5OEUyMUJFODgwODQwMDhBRTQ5MSAvKiBJREJDdXJzb3JJbXBs
LmggKi8sCi0JCQkJNTFGNzk4RjExQkU4ODM4RDAwOEFFNDkxIC8qIElEQkN1cnNvcldpdGhWYWx1
ZUltcGwuY3BwICovLAotCQkJCTUxRjc5OEYyMUJFODgzOEQwMDhBRTQ5MSAvKiBJREJDdXJzb3JX
aXRoVmFsdWVJbXBsLmggKi8sCi0JCQkJNTE5OEY3QUUxQkJERjU5MjAwRTJDQzVGIC8qIElEQkRh
dGFiYXNlSW1wbC5jcHAgKi8sCi0JCQkJNTE5OEY3QUYxQkJERjU5MjAwRTJDQzVGIC8qIElEQkRh
dGFiYXNlSW1wbC5oICovLAotCQkJCTUxMDMxMDRBMUJBOEM2QTYwMDMzMjlDMCAvKiBJREJGYWN0
b3J5SW1wbC5jcHAgKi8sCi0JCQkJNTEwMzEwNEIxQkE4QzZBNjAwMzMyOUMwIC8qIElEQkZhY3Rv
cnlJbXBsLmggKi8sCi0JCQkJNTFGNzk4RTMxQkU4ODA4NDAwOEFFNDkxIC8qIElEQkluZGV4SW1w
bC5jcHAgKi8sCi0JCQkJNTFGNzk4RTQxQkU4ODA4NDAwOEFFNDkxIC8qIElEQkluZGV4SW1wbC5o
ICovLAotCQkJCTUxNjA3MTI5MUJEODMwNTMwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUltcGwu
Y3BwICovLAotCQkJCTUxNjA3MTJBMUJEODMwNTMwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUlt
cGwuaCAqLywKLQkJCQk1MTAzMTA1NjFCQThEQjMwMDAzMzI5QzAgLyogSURCT3BlbkRCUmVxdWVz
dEltcGwuY3BwICovLAotCQkJCTUxMDMxMDU3MUJBOERCMzAwMDMzMjlDMCAvKiBJREJPcGVuREJS
ZXF1ZXN0SW1wbC5oICovLAotCQkJCTUxMDMxMDU4MUJBOERCMzAwMDMzMjlDMCAvKiBJREJSZXF1
ZXN0SW1wbC5jcHAgKi8sCi0JCQkJNTEwMzEwNTkxQkE4REIzMDAwMzMyOUMwIC8qIElEQlJlcXVl
c3RJbXBsLmggKi8sCi0JCQkJNTE5OEY3QjIxQkJFMDAxRDAwRTJDQzVGIC8qIElEQlRyYW5zYWN0
aW9uSW1wbC5jcHAgKi8sCi0JCQkJNTE5OEY3QjMxQkJFMDAxRDAwRTJDQzVGIC8qIElEQlRyYW5z
YWN0aW9uSW1wbC5oICovLAotCQkJCTUxOThGN0I2MUJDMzE0MTcwMEUyQ0M1RiAvKiBJREJWZXJz
aW9uQ2hhbmdlRXZlbnRJbXBsLmNwcCAqLywKLQkJCQk1MTk4RjdCNzFCQzMxNDE3MDBFMkNDNUYg
LyogSURCVmVyc2lvbkNoYW5nZUV2ZW50SW1wbC5oICovLAogCQkJCTUxRDdFRkVCMUJERUZBNDcw
MEU5M0UxMCAvKiBUcmFuc2FjdGlvbk9wZXJhdGlvbi5jcHAgKi8sCiAJCQkJNTE2MDcxMkIxQkQ4
MzA1MzAwREJDNEYyIC8qIFRyYW5zYWN0aW9uT3BlcmF0aW9uLmggKi8sCiAJCQkpOwpAQCAtMjYz
MTgsNyArMjYyNTIsNiBAQAogCQkJCTUxRTFFQ0MxMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVj
b3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NUJBQzJCMDEzNjBCQkFCMDA1REEyNTggLyogSWNv
blVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDNzgxQkI0QzRFODAwMTI4OThGIC8qIElE
QkFueS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE5OEY3QkYxQkMzMzhBRjAwRTJDQzVGIC8qIElE
QkFueUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQkE0QUNDMUJCQzVCREQwMERGM0Q2RCAv
KiBJREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1ODVBNjYzMTFENEZBQzUw
MDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1
RkNCOTFCQjRDQkY4MDAxMjg5OEYgLyogSURCQ29ubmVjdGlvblRvQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2MzI2LDI0ICsyNjI1OSwxOSBAQAogCQkJCTUxOThGN0MxMUJDNDg1NjcwMEUy
Q0M1RiAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNkQ3
RDcwMUJCNUYwQkQwMEFGN0M3NyAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDN0IxQkI0QzRFODAwMTI4OThGIC8qIElEQkN1cnNvci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNzk4RTYxQkU4ODA5MjAwOEFFNDkxIC8qIElEQkN1cnNv
ckltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzEzOEZDMUJGM0FERjQwMDBENUYwMSAvKiBJ
REJDdXJzb3JJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM3RTFCQjRDNEU4MDAxMjg5
OEYgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUY3OThGNDFC
RTg4Mzk0MDA4QUU0OTEgLyogSURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE4NUZDODExQkI0QzRFODAwMTI4OThGIC8qIElEQkRhdGFiYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTg1RkM4MzFCQjRDNEU4MDAxMjg5OEYgLyogSURCRGF0YWJhc2VFcnJvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDODUxQkI0QzRFODAwMTI4OThGIC8qIElEQkRhdGFi
YXNlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4NzFCQjRDNEU4MDAxMjg5
OEYgLyogSURCRGF0YWJhc2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTk4RjdC
MTFCQkRGNUM4MDBFMkNDNUYgLyogSURCRGF0YWJhc2VJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MUJBNEFDNDFCQkI1Q0Q4MDBERjNENkQgLyogSURCRGF0YWJhc2VJbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTQ4NDUzRjFCQjlEMDdFMDA2QTcyRUQgLyogSURCRXJyb3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxODVGQzhCMUJCNEM0RTgwMDEyODk4RiAvKiBJREJFdmVudERpc3BhdGNo
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzhEMUJCNEM0RTgwMDEyODk4RiAvKiBJREJG
YWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk2OUE2Q0JBRDFDNkJFNDJDMDBCODM2RTkgLyog
QWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMDMxMDUwMUJB
OENDMDMwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4
NUZDOEYxQkI0QzRFODAwMTI4OThGIC8qIElEQkdldFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE4NUZDOTExQkI0QzRFODAwMTI4OThGIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MUY3OThFODFCRTg4MDkyMDA4QUU0OTEgLyogSURCSW5kZXhJbXBsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUY3OThGMDFCRTg4MEU3MDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTg1RkM5NTFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTg1RkM5NzFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5RGF0YS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNjM1MSwyNCArMjYyNzksMTkgQEAKIAkJCQk1MTg1RkM5QjFC
QjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVG
QzlFMUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlSYW5nZURhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxODVGQ0EwMUJCNEM0RTgwMDEyODk4RiAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNTE2MDcxMzExQkQ4MzA4NjAwREJDNEYyIC8qIElEQk9iamVjdFN0b3JlSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MDcxMkYxQkQ4MzA3ODAwREJDNEYyIC8qIElEQk9i
amVjdFN0b3JlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQTQxQkI0QzRFODAwMTI4
OThGIC8qIElEQk9wZW5EQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMDMxMDVCMUJB
OERCNTYwMDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE4NUZDQTcxQkI0QzRFODAwMTI4OThGIC8qIElEQlJlY29yZElkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxODVGQ0E5MUJCNEM0RTgwMDEyODk4RiAvKiBJREJSZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTQxMjk5OTFDNjk3NjkwMDA1OUU3MTQgLyogSURCUmVxdWVz
dENvbXBsZXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwQTU4RkExQkFDQzdGMjAw
QzE5MjgyIC8qIElEQlJlcXVlc3REYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTAzMTA1RDFC
QThEQjU2MDAzMzI5QzAgLyogSURCUmVxdWVzdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
NDVCMTBBMUJDNDhFMkUwMEU4NjIxOSAvKiBJREJSZXNvdXJjZUlkZW50aWZpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxRDcyMzZEMUJCNjE3NDkwMDQ3OENBMyAvKiBJREJSZXN1bHREYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTFFQzEyODFDNTBBQUNBMDAzMkY5ODMgLyogSURCU2VyaWFs
aXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQkIxQkI0Q0JGODAwMTI4OThGIC8q
IElEQlNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQUQxQkI0QzRFODAwMTI4OThG
IC8qIElEQlRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTk4RjdCNTFCQkUwMDND
MDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTk4
RjdBRDFCQkREM0VCMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTg1RkNCMDFCQjRDNEU4MDAxMjg5OEYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTk4RjdCOTFCQzMxNDUxMDBFMkNDNUYgLyogSURCVmVy
c2lvbkNoYW5nZUV2ZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRBODE0RTAxQzczMzhF
QjAwQkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTcxRDU3QzBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRpZmllclJlcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlFOTExQzUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMDAyLDI3ICsyOTkyNSwyMSBAQAogCQkJCUIyNzUz
NThFMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFF
MUVDQzAwQzkxQzkwNDAwREMyNTVCIC8qIEljb25SZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE4NUZDNzcxQkI0QzRFODAwMTI4OThGIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1MTk4RjdCRTFCQzMzOEFGMDBFMkNDNUYgLyogSURCQW55SW1wbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDNTg1QTY2MjExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTZEN0Q3MTFCQjVGMEJEMDBBRjdDNzcgLyogSURC
Q29ubmVjdGlvblRvQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxOThGN0MwMUJDNDg1
NjcwMEUyQ0M1RiAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE4NUZDN0ExQkI0QzRFODAwMTI4OThGIC8qIElEQkN1cnNvci5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk1MUY3OThFNTFCRTg4MDkyMDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTcxMzhGQjFCRjNBREY0MDAwRDVGMDEgLyogSURCQ3Vyc29ySW5m
by5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM3RDFCQjRDNEU4MDAxMjg5OEYgLyogSURC
Q3Vyc29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRjc5OEYzMUJFODgzOTQw
MDhBRTQ5MSAvKiBJREJDdXJzb3JXaXRoVmFsdWVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxODVGQzgwMUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTg1RkM4NDFCQjRDNEU4MDAxMjg5OEYgLyogSURCRGF0YWJhc2VFeGNlcHRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDODYxQkI0QzRFODAwMTI4OThGIC8qIElEQkRh
dGFiYXNlSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTk4RjdCMDFCQkRGNUM4
MDBFMkNDNUYgLyogSURCRGF0YWJhc2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQkE0
QUMzMUJCQjVDRDgwMERGM0Q2RCAvKiBJREJEYXRhYmFzZUluZm8uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTE0ODQ1M0UxQkI5RDA3RTAwNkE3MkVEIC8qIElEQkVycm9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxODVGQzhBMUJCNEM0RTgwMDEyODk4RiAvKiBJREJFdmVudERpc3BhdGNoZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDOEMxQkI0QzRFODAwMTI4OThGIC8qIElEQkZh
Y3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwMzEwNEYxQkE4Q0MwMzAwMzMyOUMwIC8q
IElEQkZhY3RvcnlJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkYxQTc4MUMwN0VCNjYw
MDkwODIzOSAvKiBJREJHZXRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDOTAx
QkI0QzRFODAwMTI4OThGIC8qIElEQkluZGV4LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRjc5
OEU3MUJFODgwOTIwMDhBRTQ5MSAvKiBJREJJbmRleEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTFGNzk4RUYxQkU4ODBFNzAwOEFFNDkxIC8qIElEQkluZGV4SW5mby5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTg1RkM5NDFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxODVGQzk2MUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlEYXRhLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMzAwMzAsMjMgKzI5OTQ3LDE4IEBACiAJCQkJNTE4NUZDOUExQkI0
QzRFODAwMTI4OThGIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVG
QzlEMUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlSYW5nZURhdGEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTE4NUZDOUYxQkI0QzRFODAwMTI4OThGIC8qIElEQk9iamVjdFN0b3JlLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTUxNjA3MTMwMUJEODMwODYwMERCQzRGMiAvKiBJREJPYmplY3RTdG9y
ZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2MDcxMkUxQkQ4MzA3ODAwREJDNEYyIC8q
IElEQk9iamVjdFN0b3JlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkNBMzFCQjRD
NEU4MDAxMjg5OEYgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1
MTAzMTA1QTFCQThEQjU2MDAzMzI5QzAgLyogSURCT3BlbkRCUmVxdWVzdEltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTE4NUZDQTgxQkI0QzRFODAwMTI4OThGIC8qIElEQlJlcXVlc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0MTI5OTgxQzY5NzY5MDAwNTlFNzE0IC8qIElEQlJlcXVl
c3RDb21wbGV0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwQTU4RjkxQkFDQzdG
MjAwQzE5MjgyIC8qIElEQlJlcXVlc3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxMDMx
MDVDMUJBOERCNTYwMDMzMjlDMCAvKiBJREJSZXF1ZXN0SW1wbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTQ1QjEwOTFCQzQ4RTJFMDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDcyMzZDMUJCNjE3NDkwMDQ3OENBMyAvKiBJREJSZXN1
bHREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUVDMTI3MUM1MEFBQ0EwMDMyRjk4MyAv
KiBJREJTZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQ0JBMUJCNENC
RjgwMDEyODk4RiAvKiBJREJTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDQUMx
QkI0QzRFODAwMTI4OThGIC8qIElEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTUxOThGN0I0MUJCRTAwM0MwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTE5OEY3QUMxQkJERDNFQjAwRTJDQzVGIC8qIElEQlRyYW5zYWN0aW9u
SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkNBRjFCQjRDNEU4MDAxMjg5OEYgLyog
SURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxOThGN0I4MUJD
MzE0NTEwMEUyQ0M1RiAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0QTgxNERFMUM3MzM4RDEwMEJGODVBQyAvKiBJZENoYW5nZUludmFsaWRhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTcxRDU3QjBGMzM4MTkwMDBGOUNFNEUgLyogSWRl
bnRpZmllclJlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDM0NGMTdBNDE1QjAwNjNGMDAyNzZE
MzkgLyogSWRUYXJnZXRPYnNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcAppbmRleCA2M2YzNTVhLi5h
ZWI1ZDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNv
ckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JD
dXN0b20uY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAotI2luY2x1ZGUgIklEQkN1cnNvckltcGwuaCIKKyNpbmNsdWRlICJJREJDdXJzb3IuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMzYsMTEgKzM2LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2b2lkIEpTSURCQ3Vyc29yOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBpZiAoIXdyYXBwZWQoKS5pc01vZGVybkN1cnNvcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiBtb2Rlcm5DdXJzb3IgPSBzdGF0aWNfY2Fz
dDxJREJDbGllbnQ6OklEQkN1cnNvciY+KHdyYXBwZWQoKSk7Ci0gICAgaWYgKGF1dG8qIHJlcXVl
c3QgPSBtb2Rlcm5DdXJzb3IucmVxdWVzdCgpKQorICAgIGF1dG8mIGN1cnNvciA9IHN0YXRpY19j
YXN0PElEQkN1cnNvciY+KHdyYXBwZWQoKSk7CisgICAgaWYgKGF1dG8qIHJlcXVlc3QgPSBjdXJz
b3IucmVxdWVzdCgpKQogICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QocmVxdWVzdCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0
aFZhbHVlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29y
V2l0aFZhbHVlQ3VzdG9tLmNwcAppbmRleCBhNTliODc3Li5iYzYzZmE0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3Vz
dG9tLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKLSNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWVJbXBsLmgiCisjaW5jbHVkZSAiSURCQ3Vy
c29yV2l0aFZhbHVlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCSW5kZXhDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3RvbS5jcHAKaW5kZXggZTJjMmNjZS4uNGUx
NmE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJJbmRleEN1c3Rv
bS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
Ci0jaW5jbHVkZSAiSURCSW5kZXhJbXBsLmgiCisjaW5jbHVkZSAiSURCSW5kZXguaCIKIAogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMzYsMTAgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB2b2lkIEpTSURCSW5kZXg6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewotICAgIGlmICghd3JhcHBlZCgpLmlzTW9kZXJuKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmc3RhdGljX2Nhc3Q8SURCQ2xpZW50
OjpJREJJbmRleCY+KHdyYXBwZWQoKSkubW9kZXJuT2JqZWN0U3RvcmUoKSk7CisgICAgdmlzaXRv
ci5hZGRPcGFxdWVSb290KCZzdGF0aWNfY2FzdDxJREJJbmRleCY+KHdyYXBwZWQoKSkubW9kZXJu
T2JqZWN0U3RvcmUoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKaW5k
ZXggMzI1MWZmMi4uNzQ0ZDlhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNs
dWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRp
b24uaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVJ
bXBsLmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0lEQkluZGV4LmgiCiAjaW5jbHVkZSAiSlNJREJSZXF1ZXN0Lmgi
CkBAIC00NywxMCArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgSlNJREJPYmpl
Y3RTdG9yZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
Ci0gICAgaWYgKCF3cmFwcGVkKCkuaXNNb2Rlcm4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RhdGljX2Nhc3Q8SURCQ2xpZW50OjpJREJPYmplY3RTdG9yZSY+KHdyYXBwZWQoKSkudmlzaXRS
ZWZlcmVuY2VkSW5kZXhlcyh2aXNpdG9yKTsKKyAgICBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9y
ZSY+KHdyYXBwZWQoKSkudmlzaXRSZWZlcmVuY2VkSW5kZXhlcyh2aXNpdG9yKTsKIH0KIAogc3Rh
dGljIEpTVmFsdWUgcHV0T3JBZGQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBib29sIG92ZXJ3cml0
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuY3BwCmluZGV4IGQyOWI1MjcuLjk0MzMwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtMTg1LDEzICsx
ODUsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5y
ZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCByZXN1bHQgdHlwZS4iKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoIXJlcXVlc3RSZXN1
bHQtPmlzTGVnYWN5KCkpIHsKLSAgICAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+
cmVxdWVzdENhbGxiYWNrKCkuc2VuZEZhaWx1cmUoIk9ubHkgTGVnYWN5IElEQiBpcyBzdXBwb3J0
ZWQgcmlnaHQgbm93LiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKICAgICAg
ICAgLy8gRklYTUUgKHdlYmtpdC5vcmcvYi8xNTQ2ODYpIC0gUmVpbXBsZW1lbnQgdGhpcy4KLSAg
ICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5leGVjdXRlKCk7CisgICAgICAgIG1fZXhl
Y3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCkuc2VuZEZhaWx1cmUoIk1vZGVy
biBJREIgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
cHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiNDc5NGNkLi5mOGIzYzI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTYtMDMtMjggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgorCisgICAgICAgIE1vZGVybiBJREI6IFJlbW92ZSBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgZm9y
IGFsbCBJREIgRE9NIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTU5NTEKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVu
c2VuLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNv
bm5lY3Rpb25Ub1NlcnZlci5jcHA6CisKIDIwMTYtMDMtMjggIEJyaWFuIEJ1cmcgIDxiYnVyZ0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEF1dG9tYXRpb246IHJlcG9ydCB0aGUgYnJvd3Npbmcg
Y29udGV4dCdzIHdpbmRvdyBmcmFtZSAoc2l6ZSBhbmQgb3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rp
b25Ub1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAppbmRleCA2ZjY5MDExLi42ZDM3NWQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVk
REIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcApA
QCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSURCSW5kZXhJbmZvLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9JREJLZXlSYW5nZURhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lEQk9i
amVjdFN0b3JlSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSURCT3BlbkRCUmVxdWVzdEltcGwu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lEQk9wZW5EQlJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0lEQlJlcXVlc3REYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJSZXNvdXJjZUlkZW50
aWZpZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lEQlJlc3VsdERhdGEuaD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>