<?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>206196</bug_id>
          
          <creation_ts>2020-01-13 14:39:52 -0800</creation_ts>
          <short_desc>IndexedDB: speed up index records deletion</short_desc>
          <delta_ts>2020-01-28 15:17:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>jbedard</cc>
    
    <cc>jsbell</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1606059</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-01-13 14:39:52 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606113</commentid>
    <comment_count>1</comment_count>
      <attachid>387585</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-01-13 16:03:23 -0800</bug_when>
    <thetext>Created attachment 387585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606448</commentid>
    <comment_count>2</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-01-14 09:39:02 -0800</bug_when>
    <thetext>&lt;rdar://problem/53596307&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606558</commentid>
    <comment_count>3</comment_count>
      <attachid>387694</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-01-14 13:21:53 -0800</bug_when>
    <thetext>Created attachment 387694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607863</commentid>
    <comment_count>4</comment_count>
      <attachid>387694</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-01-16 21:10:33 -0800</bug_when>
    <thetext>Comment on attachment 387694
Patch

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

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.h:116
&gt; +    Optional&lt;bool&gt; ensureValidObjectStoreInfoTable();

This seems like a confusing return type? I can&apos;t tell from reading this function declaration what the return value would indicate,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608114</commentid>
    <comment_count>5</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-01-17 11:29:33 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; Comment on attachment 387694 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387694&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.h:116
&gt; &gt; +    Optional&lt;bool&gt; ensureValidObjectStoreInfoTable();
&gt; 
&gt; This seems like a confusing return type? I can&apos;t tell from reading this
&gt; function declaration what the return value would indicate,

ensureValidObjectStoreInfoTable return nullopt if the operation fails; the boolean indicates whether there is a schema change.

I will update the name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608154</commentid>
    <comment_count>6</comment_count>
      <attachid>388078</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-01-17 12:47:26 -0800</bug_when>
    <thetext>Created attachment 388078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608818</commentid>
    <comment_count>7</comment_count>
      <attachid>388078</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-01-20 12:16:37 -0800</bug_when>
    <thetext>Comment on attachment 388078
Patch

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

Comment on a small coding style issue, not the overall patch/technique, which seems excellent!

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:200
&gt; +    static NeverDestroyed&lt;WTF::String&gt; indexRecordsRecordIndexSchemaString(&quot;CREATE INDEX IndexRecordsRecordIndex ON IndexRecords (objectStoreID, objectStoreRecordID)&quot;);

Please use _s here to use ASCIILiteral to avoid copying the string’s data, and point to it instead. Also unclear why storing this in a global is a helpful optimization. Paying even this small permanent memory cost may not be worthwhile if there is other memory allocation/deallocation going on.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:238
&gt; +static const String v1ObjectStoreInfoSchema(const String&amp; tableName)

This should not take a const String&amp;. Instead take an ASCIILiteral so we don’t create/destroy a String for no reason. makeString can take all kinds of types besides String, including ASCIILiteral and const char*. But also, why compute these at runtime? They could be computed at compile time if we use macros. Finally, I am really unsure that caching these in globals is a useful thing to do. Spending all the memory all the time, but are these operations so fast that we can’t take the time to create/destroy a String?

All of this applies to the existing code too; just a mistake being repeated.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:255
&gt; +static const String v2ObjectStoreInfoSchema(const String&amp; tableName)

Same comment applies here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609198</commentid>
    <comment_count>8</comment_count>
      <attachid>388332</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-01-21 12:13:24 -0800</bug_when>
    <thetext>Created attachment 388332
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612042</commentid>
    <comment_count>9</comment_count>
      <attachid>388332</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2020-01-28 10:39:59 -0800</bug_when>
    <thetext>Comment on attachment 388332
Patch

I kind of cruised over the upgrade schema stuff since that is old hat boiler plate at this point.

lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612177</commentid>
    <comment_count>10</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-01-28 14:33:05 -0800</bug_when>
    <thetext>(In reply to Brady Eidson from comment #9)
&gt; Comment on attachment 388332 [details]
&gt; Patch
&gt; 
&gt; I kind of cruised over the upgrade schema stuff since that is old hat boiler
&gt; plate at this point.
&gt; 
&gt; lgtm

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612209</commentid>
    <comment_count>11</comment_count>
      <attachid>388332</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-28 15:17:42 -0800</bug_when>
    <thetext>Comment on attachment 388332
Patch

Clearing flags on attachment: 388332

Committed r255318: &lt;https://trac.webkit.org/changeset/255318&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612210</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-28 15:17:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387585</attachid>
            <date>2020-01-13 16:03:23 -0800</date>
            <delta_ts>2020-01-14 13:21:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206196-20200113160323.patch</filename>
            <type>text/plain</type>
            <size>61312</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NDMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU0NzE2YmMwZmExYWVh
YWI0NmNiMTE3ZWE1YTMyMGFhNTUyNzQyMC4uYzdjYjNiMmU0NTA2NDc3YTIzNTdlNWQzYzVlMmFm
MjRkZmNmZDY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDIwLTAxLTEzICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogc3BlZWQg
dXAgaW5kZXggcmVjb3JkcyBkZWxldGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSB0ZXN0IFBlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jh
c2ljL2luZGV4LWN1cnNvci1kZWxldGUtMi5odG1sIDcuNXggZmFzdGVyLgorCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpNZW1v
cnlJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OnYxSW5kZXhSZWNvcmRzUmVjb3Jk
SW5kZXhTY2hlbWEpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjp2MU9iamVjdFN0b3Jl
SW5mb1NjaGVtYSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OnYxT2JqZWN0U3RvcmVJ
bmZvU2NoZW1hQWx0ZXJuYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6djJPYmpl
Y3RTdG9yZUluZm9TY2hlbWEpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjp2Mk9iamVj
dFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3Jl
SW5mb1RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJ
bmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZEhhc0luZGV4UmVjb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURC
QmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRHZXRJbmRl
eFJlY29yZEZvck9uZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6ZGVsZXRlT25lSW5kZXhSZWNvcmQpOiBEZWxldGVkLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6YnVpbGRJbmRleFN0YXRlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkN1cnNvcjo6YmluZEFyZ3VtZW50cyk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFi
YXNlOjpjcmVhdGVJbmRleCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
QkRhdGFiYXNlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUluZm86OklE
QkRhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUluZm86OnNldE1h
eEluZGV4SUQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFz
ZUluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6Z2VuZXJhdGVOZXh0
SW5kZXhJRCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUluZm86OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUluZm86OmRlY29kZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUluZm86OmNyZWF0ZU5ld0luZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6YWRkRXhpc3RpbmdJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUluZm86Omlzb2xhdGVkQ29weSBjb25zdCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5oOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjphdXRvSW5jcmVtZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6ZW5jb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6bWF4SW5kZXhJRCBjb25zdCk6IERlbGV0ZWQu
CisKIDIwMjAtMDEtMTMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtMRkNdW0ludGVncmF0aW9uXSBlZGl0aW5nL3RleHQtaXRlcmF0b3IvZmluZFN0cmluZy5o
dG1sIGZhaWxzIG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlLmgKaW5kZXggYjQ1MDkxYmNmMjEyYzBlY2VhYzBmZDUzOGIwZWRiYjUwMzBhNGI2
My4uZWM5NzI1NzE0OWJiMWM0ZTZiY2IzZDEzMzhiOTQ1MDg3NGQxOWNlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCkBAIC04NCw3ICs4NCw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qg
ZmluYWw7CiAgICAgdm9pZCBzdG9wKCkgZmluYWw7CiAKLSAgICBjb25zdCBJREJEYXRhYmFzZUlu
Zm8mIGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KKyAgICBJREJEYXRhYmFzZUluZm8m
IGluZm8oKSB7IHJldHVybiBtX2luZm87IH0KICAgICB1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rp
b25JZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlm
aWVyOyB9CiAKICAgICBSZWY8SURCVHJhbnNhY3Rpb24+IHN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5z
YWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYsIElEQk9wZW5EQlJlcXVlc3QmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cAppbmRleCAzMTI0NDM0YTk4OTQ2YzJlMmIzNTI5MTAxYjdkNzg3NDZlYmI1YTYwLi4zMDM3MWRj
MWRjOWY2Mjk2NDIyMDkzMzc1MTkxMTM0NWM2MGRjMzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC00NzUsNyArNDc1
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUlu
ZGV4KEpTR2xvYmFsT2JqZWN0JiwgY29uc3QgU3QKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciwgIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24g
J0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgd2FzIGFuIGFycmF5IGFuZCB0
aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMgdHJ1ZS4iX3MgfTsKIAogICAgIC8vIEluc3RhbGwgdGhl
IG5ldyBJbmRleCBpbnRvIHRoZSBPYmplY3RTdG9yZSdzIGluZm8uCi0gICAgSURCSW5kZXhJbmZv
IGluZm8gPSBtX2luZm8uY3JlYXRlTmV3SW5kZXgobmFtZSwgV1RGTW92ZShrZXlQYXRoKSwgcGFy
YW1ldGVycy51bmlxdWUsIHBhcmFtZXRlcnMubXVsdGlFbnRyeSk7CisgICAgSURCSW5kZXhJbmZv
IGluZm8gPSBtX2luZm8uY3JlYXRlTmV3SW5kZXgobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmlu
Zm8oKS5nZW5lcmF0ZU5leHRJbmRleElEKCksIG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHBhcmFt
ZXRlcnMudW5pcXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOwogICAgIG1fdHJhbnNhY3Rpb24u
ZGF0YWJhc2UoKS5kaWRDcmVhdGVJbmRleEluZm8oaW5mbyk7CiAKICAgICAvLyBDcmVhdGUgdGhl
IGFjdHVhbCBJREJPYmplY3RTdG9yZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiwgd2hpY2ggYWxzbyBz
Y2hlZHVsZXMgdGhlIG9wZXJhdGlvbiBzZXJ2ZXIgc2lkZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tp
bmdTdG9yZS5jcHAKaW5kZXggNDM1MjIyOTIwMWMzYmQ3MDViYzZiZThjMGQ4ZjQ3NDk4ZTEwYWQ2
NC4uNDAxY2UzZDJiMTYxYmFkM2U3OTM5NzcxN2VkNWUyODg3NzA0MjYyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01l
bW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjp+TWVtb3J5SURCQmFja2luZ1N0b3JlKCkgPSBkZWZhdWx0OwogSURCRXJyb3IgTWVt
b3J5SURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFz
ZUluZm8mIGluZm8pCiB7CiAgICAgaWYgKCFtX2RhdGFiYXNlSW5mbykKLSAgICAgICAgbV9kYXRh
YmFzZUluZm8gPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFi
YXNlTmFtZSgpLCAwKTsKKyAgICAgICAgbV9kYXRhYmFzZUluZm8gPSBtYWtlVW5pcXVlPElEQkRh
dGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLCAwLCAwKTsKIAogICAgIGlu
Zm8gPSAqbV9kYXRhYmFzZUluZm87CiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKQEAgLTIzNiw4
ICsyMzYsMTAgQEAgSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgQ29uc3RyYWludEVycm9yIH07CiAKICAgICBhdXRvIGVycm9yID0gb2JqZWN0U3RvcmUt
PmNyZWF0ZUluZGV4KCpyYXdUcmFuc2FjdGlvbiwgaW5mbyk7Ci0gICAgaWYgKGVycm9yLmlzTnVs
bCgpKQorICAgIGlmIChlcnJvci5pc051bGwoKSkgewogICAgICAgICBvYmplY3RTdG9yZUluZm8t
PmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CisgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5zZXRNYXhJ
bmRleElEKGluZm8uaWRlbnRpZmllcigpKTsKKyAgICB9CiAKICAgICByZXR1cm4gZXJyb3I7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGZjYzQ4MWM1ZDVmMDM3YjU4
NTIwNTMxODJhYjI3MWJkOGJkZmYyNTYuLmYxMzIwZjcxOGUxZTExYzY4OTU3YWZiZGE3YjM2NTdj
NWYxZDZjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0xOTUsNiAr
MTk1LDEyIEBAIHN0YXRpYyBjb25zdCBTdHJpbmcmIHYxSW5kZXhSZWNvcmRzSW5kZXhTY2hlbWEo
KQogICAgIHJldHVybiBpbmRleFJlY29yZHNJbmRleFNjaGVtYVN0cmluZzsKIH0KIAorc3RhdGlj
IGNvbnN0IFN0cmluZyYgdjFJbmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSgpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFdURjo6U3RyaW5nPiBpbmRleFJlY29yZHNSZWNvcmRJbmRl
eFNjaGVtYVN0cmluZygiQ1JFQVRFIElOREVYIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4IE9OIElu
ZGV4UmVjb3JkcyAob2JqZWN0U3RvcmVJRCwgb2JqZWN0U3RvcmVSZWNvcmRJRCkiKTsKKyAgICBy
ZXR1cm4gaW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWFTdHJpbmc7Cit9CisKIHN0YXRpYyBj
b25zdCBTdHJpbmcgYmxvYlJlY29yZHNUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSkKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygiQ1JFQVRFIFRBQkxFICIsIHRhYmxlTmFtZSwg
IiAob2JqZWN0U3RvcmVSb3cgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBibG9i
VVJMIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKQEAgLTIyOSw2ICsyMzUsNDAg
QEAgc3RhdGljIGNvbnN0IFN0cmluZyYgYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQog
ICAgIHJldHVybiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZzsKIH0KIAorc3RhdGljIGNvbnN0
IFN0cmluZyB2MU9iamVjdFN0b3JlSW5mb1NjaGVtYShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkK
K3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ1JFQVRFIFRBQkxFICIsIHRhYmxlTmFtZSwgIiAo
aWQgSU5URUdFUiBQUklNQVJZIEtFWSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBP
TiBDT05GTElDVCBGQUlMLCBuYW1lIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklR
VUUgT04gQ09ORkxJQ1QgRkFJTCwga2V5UGF0aCBCTE9CIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwsIGF1dG9JbmMgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBtYXhJbmRleElE
IElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKK30KKworc3RhdGljIGNvbnN0
IFN0cmluZyYgdjFPYmplY3RTdG9yZUluZm9TY2hlbWEoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxXVEY6OlN0cmluZz4gdjFPYmplY3RTdG9yZUluZm9TY2hlbWFTdHJpbmcodjFPYmpl
Y3RTdG9yZUluZm9TY2hlbWEoIk9iamVjdFN0b3JlSW5mbyIpKTsKKyAgICByZXR1cm4gdjFPYmpl
Y3RTdG9yZUluZm9TY2hlbWFTdHJpbmc7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcmIHYxT2Jq
ZWN0U3RvcmVJbmZvU2NoZW1hQWx0ZXJuYXRlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiB2MU9iamVjdFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZVN0cmluZyh2MU9iamVj
dFN0b3JlSW5mb1NjaGVtYSgiXCJPYmplY3RTdG9yZUluZm9cIiIpKTsKKyAgICByZXR1cm4gdjFP
YmplY3RTdG9yZUluZm9TY2hlbWFBbHRlcm5hdGVTdHJpbmc7Cit9CisKK3N0YXRpYyBjb25zdCBT
dHJpbmcgdjJPYmplY3RTdG9yZUluZm9TY2hlbWEoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJsZU5hbWUsICIgKGlk
IElOVEVHRVIgUFJJTUFSWSBLRVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04g
Q09ORkxJQ1QgRkFJTCwgbmFtZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVF
IE9OIENPTkZMSUNUIEZBSUwsIGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
LCBhdXRvSW5jIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKK30KKworc3Rh
dGljIGNvbnN0IFN0cmluZyYgdjJPYmplY3RTdG9yZUluZm9TY2hlbWEoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxXVEY6OlN0cmluZz4gb2JqZWN0U3RvcmVJbmZvU2NoZW1hU3RyaW5n
KHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKCJPYmplY3RTdG9yZUluZm8iKSk7CisgICAgcmV0dXJu
IG9iamVjdFN0b3JlSW5mb1NjaGVtYVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyYg
djJPYmplY3RTdG9yZUluZm9TY2hlbWFBbHRlcm5hdGUoKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IG9iamVjdFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZVN0cmluZyh2Mk9i
amVjdFN0b3JlSW5mb1NjaGVtYSgiXCJPYmplY3RTdG9yZUluZm9cIiIpKTsKKyAgICByZXR1cm4g
b2JqZWN0U3RvcmVJbmZvU2NoZW1hQWx0ZXJuYXRlU3RyaW5nOworfQorCiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZVJvb3REaXJlY3RvcnkpCiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAg
LCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKQEAgLTUyNSw2ICs1NjUsNDYgQEAgYm9vbCBTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlk
SW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgoKQoreworICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKKyAg
ICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworCisgICAgU3RyaW5nIGN1cnJlbnRTY2hl
bWE7CisgICAgeworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURC
LCAiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgbmFtZT0nSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgnIik7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXgu
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQg
c3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKworICAgICAgICBpZiAoc3FsaXRlUmVz
dWx0ID09IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1
dGVDb21tYW5kKHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEoKSkpIHsKKyAgICAgICAg
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5k
ZXggaW5kZXggaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZv
ciB0aGUgSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXggaW5kZXguIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50
LmdldENvbHVtblRleHQoMCk7CisgICAgfQorCisgICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlz
RW1wdHkoKSk7CisKKyAgICBpZiAoY3VycmVudFNjaGVtYSA9PSB2MUluZGV4UmVjb3Jkc1JlY29y
ZEluZGV4U2NoZW1hKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbygpCiB7CiAgICAgQVNT
RVJUKG1fc3FsaXRlREIpOwpAQCAtNTM2LDcgKzYxNiw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJE
YXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0
aWFsCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmICghbV9zcWxpdGVE
Qi0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBPYmplY3RTdG9yZUluZm8gKGlkIElOVEVH
RVIgUFJJTUFSWSBLRVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJ
Q1QgRkFJTCwgbmFtZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENP
TkZMSUNUIEZBSUwsIGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBhdXRv
SW5jIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbWF4SW5kZXhJRCBJTlRFR0VS
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7CisgICAgaWYgKCFtX3NxbGl0ZURCLT5l
eGVjdXRlQ29tbWFuZCh2Mk9iamVjdFN0b3JlSW5mb1NjaGVtYSgpKSkgewogICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgT2JqZWN0U3RvcmVJbmZvIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3JNc2coKSk7CiAgICAgICAgIGNsb3NlU1FMaXRlREIoKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC01OTQsNyArNjc0LDY1IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsCiAgICAgfQog
CiAgICAgLy8gVGhpcyBpbml0aWFsIGRhdGFiYXNlIGluZm8gbWF0Y2hlcyB0aGUgZGVmYXVsdCB2
YWx1ZXMgd2UganVzdCBwdXQgaW50byB0aGUgbWV0YWRhdGEgZGF0YWJhc2UuCi0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8SURCRGF0YWJhc2VJbmZvPihtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCks
IDApOworICAgIHJldHVybiBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVy
LmRhdGFiYXNlTmFtZSgpLCAwLCAwKTsKK30KKworT3B0aW9uYWw8Ym9vbD4gU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjplbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1RhYmxlKCkKK3sKKyAgICBBU1NF
UlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKworICAg
IFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAgICAgLy8gRmV0Y2ggdGhlIHNjaGVt
YSBmb3IgT2JqZWN0U3RvcmVJbmZvIHRhYmxlLgorICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Rh
dGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUg
dGJsX25hbWU9J09iamVjdFN0b3JlSW5mbyciKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBw
cmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9yZUluZm8g
dGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisK
KyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisgICAgICAgIGlm
IChzcWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIE9iamVjdFN0
b3JlSW5mbyB0YWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIH0KKworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQo
MCk7CisgICAgfQorCisgICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSk7CisgICAg
aWYgKGN1cnJlbnRTY2hlbWEgPT0gdjJPYmplY3RTdG9yZUluZm9TY2hlbWEoKSB8fCBjdXJyZW50
U2NoZW1hID09IHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hQWx0ZXJuYXRlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRTY2hlbWEgPT0gdjFPYmpl
Y3RTdG9yZUluZm9TY2hlbWEoKSB8fCBjdXJyZW50U2NoZW1hID09IHYxT2JqZWN0U3RvcmVJbmZv
U2NoZW1hQWx0ZXJuYXRlKCkpOworCisgICAgLy8gRHJvcCBjb2x1bW4gbWF4SW5kZXhJRCBmcm9t
IHRhYmxlLgorICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKCptX3NxbGl0ZURCKTsK
KyAgICB0cmFuc2FjdGlvbi5iZWdpbigpOworCisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRl
Q29tbWFuZCh2Mk9iamVjdFN0b3JlSW5mb1NjaGVtYSgiX1RlbXBfT2JqZWN0U3RvcmVJbmZvIikp
KSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgT2JqZWN0
U3RvcmVJbmZvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RF
cnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgi
SU5TRVJUIElOVE8gX1RlbXBfT2JqZWN0U3RvcmVJbmZvIChpZCwgbmFtZSwga2V5UGF0aCwgYXV0
b0luYykgU0VMRUNUIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jIEZST00gT2JqZWN0U3RvcmVJ
bmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgbWlncmF0ZSBleGlzdGluZyBP
YmplY3RTdG9yZUluZm8gY29udGVudCAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIH0KKworICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkRST1Ag
VEFCTEUgT2JqZWN0U3RvcmVJbmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
ZHJvcCBleGlzdGluZyBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVD
b21tYW5kKCJBTFRFUiBUQUJMRSBfVGVtcF9PYmplY3RTdG9yZUluZm8gUkVOQU1FIFRPIE9iamVj
dFN0b3JlSW5mbyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHJlbmFtZSB0ZW1w
b3JhcnkgT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RF
cnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorCisgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8oKQpAQCAtNjI5LDEwICs3
NjcsMTYgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgfQogICAgIH0KIAotICAg
IGF1dG8gZGF0YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KGRhdGFiYXNl
TmFtZSwgZGF0YWJhc2VWZXJzaW9uKTsKKyAgICBhdXRvIGRhdGFiYXNlSW5mbyA9IG1ha2VVbmlx
dWU8SURCRGF0YWJhc2VJbmZvPihkYXRhYmFzZU5hbWUsIGRhdGFiYXNlVmVyc2lvbiwgMCk7CisK
KyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFibGUoKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBib29sIHNob3Vs
ZFVwZGF0ZUluZGV4SUQgPSByZXN1bHQudmFsdWUoKTsKIAogICAgIHsKLSAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0
b0luYywgbWF4SW5kZXhJRCBGUk9NIE9iamVjdFN0b3JlSW5mbzsiX3MpOworICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBrZXlQYXRoLCBh
dXRvSW5jIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7CiAgICAgICAgIGlmIChzcWwucHJlcGFy
ZSgpICE9IFNRTElURV9PSykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC02NjMs
MTAgKzgwNywxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgICAgICB9CiAgICAgfQog
CisgICAgdWludDY0X3QgbWF4SW5kZXhJRCA9IDA7CisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8dWlu
dDY0X3QsIHVpbnQ2NF90PiwgdWludDY0X3Q+IGluZGV4SURNYXA7CiAgICAgewogICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBvYmplY3RT
dG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsiX3Mp
OwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggcmVjb3JkcyBmcm9tIHRoZSBJbmRleElu
Zm8gdGFibGUuIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQogCiAg
ICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOwogICAgICAgICB3aGlsZSAocmVzdWx0ID09
IFNRTElURV9ST1cpIHsKQEAgLTY5Niw3ICs4NDQsMTMgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRh
dGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFz
ZUkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUluZGV4SUQpIHsKKyAgICAgICAgICAgICAgICBpbmRl
eElETWFwLnNldCh7IG9iamVjdFN0b3JlSUQsIGluZGV4SUQgfSwgKyttYXhJbmRleElEKTsKKyAg
ICAgICAgICAgICAgICBpbmRleElEID0gbWF4SW5kZXhJRDsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoeyBpbmRleElELCBvYmplY3RT
dG9yZUlELCBpbmRleE5hbWUsIFdURk1vdmUoaW5kZXhLZXlQYXRoLnZhbHVlKCkpLCB1bmlxdWUs
IG11bHRpRW50cnkgfSk7CisgICAgICAgICAgICBtYXhJbmRleElEID0gbWF4SW5kZXhJRCA8IGlu
ZGV4SUQgPyBpbmRleElEIDogbWF4SW5kZXhJRDsKIAogICAgICAgICAgICAgcmVzdWx0ID0gc3Fs
LnN0ZXAoKTsKICAgICAgICAgfQpAQCAtNzA1LDYgKzg1OSwzMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0Rh
dGFiYXNlSQogICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBmZXRjaGluZyBpbmRleCBpbmZv
IGZyb20gZGF0YWJhc2Ugb24gZGlzayIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIH0KKyAgICAgICAgZGF0YWJhc2VJbmZvLT5zZXRNYXhJbmRleElEKG1heEluZGV4SUQp
OworCisgICAgICAgIGlmICghc2hvdWxkVXBkYXRlSW5kZXhJRCkKKyAgICAgICAgICAgIHJldHVy
biBkYXRhYmFzZUluZm87CisKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGluZGV4SURNYXAp
IHsKKyAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJVUERBVEUg
SW5kZXhJbmZvIFNFVCBpZCA9ID8gV0hFUkUgaWQgPSA/IEFORCBvYmplY3RTdG9yZUlEID0gPzsi
X3MpOworICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBlbnRyeS52YWx1ZSkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgyLCBlbnRyeS5rZXkuc2Vjb25kKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDMsIGVudHJ5LmtleS5m
aXJzdCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHVwZGF0ZSBp
ZCBvZiBJbmRleEluZm8gdGFibGUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHJlY29yZFNxbCgq
bV9zcWxpdGVEQiwgIlVQREFURSBJbmRleFJlY29yZHMgU0VUIGluZGV4SUQgPSA/IFdIRVJFIGlu
ZGV4SUQgPSA/IEFORCBvYmplY3RTdG9yZUlEID0gPzsiX3MpOworICAgICAgICAgICAgaWYgKHJl
Y29yZFNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgcmVjb3Jk
U3FsLmJpbmRJbnQ2NCgxLCBlbnRyeS52YWx1ZSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAg
ICAgfHwgcmVjb3JkU3FsLmJpbmRJbnQ2NCgyLCBlbnRyeS5rZXkuc2Vjb25kKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgICAgICB8fCByZWNvcmRTcWwuYmluZEludDY0KDMsIGVudHJ5LmtleS5m
aXJzdCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgcmVjb3JkU3FsLnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHVw
ZGF0ZSBpbmRleElEIG9mIEluZGV4UmVjb3JkcyB0YWJsZSIpOworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0
dXJuIGRhdGFiYXNlSW5mbzsKQEAgLTgyMyw2ICsxMDAzLDEyIEBAIElEQkVycm9yIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZv
JiBpbmZvCiAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIGNy
ZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIGluZGV4IGluIGRhdGFiYXNlIl9zIH07
CiAgICAgfQogCisgICAgaWYgKCFlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGluZyBvciBtaWdyYXRpbmcgSW5kZXgg
UmVjb3JkcyBzZWNvbmQgaW5kZXggZm9yIGluIGRhdGFiYXNlIik7CisgICAgICAgIGNsb3NlU1FM
aXRlREIoKTsKKyAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRXJyb3Ig
Y3JlYXRpbmcgb3IgbWlncmF0aW5nIEluZGV4IFJlY29yZHMgc2Vjb25kIGluZGV4IGluIGRhdGFi
YXNlIl9zIH07CisgICAgfQorCiAgICAgaWYgKCFlbnN1cmVWYWxpZEJsb2JUYWJsZXMoKSkgewog
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIGNvbmZpcm1pbmcgQmxvYiBSZWNv
cmRzIHRhYmxlcyBpbiBkYXRhYmFzZSIpOwogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CkBAIC05
NTIsMTMgKzExMzgsMTIgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVP
YmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICB9CiAKICAgICB7
Ci0gICAgICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNyZWF0ZU9iamVjdFN0
b3JlSW5mbywgIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlSW5mbyBWQUxVRVMgKD8sID8sID8sID8s
ID8pOyJfcyk7CisgICAgICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkNyZWF0
ZU9iamVjdFN0b3JlSW5mbywgIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlSW5mbyBWQUxVRVMgKD8s
ID8sID8sID8pOyJfcyk7CiAgICAgICAgIGlmICghc3FsCiAgICAgICAgICAgICB8fCBzcWwtPmJp
bmRJbnQ2NCgxLCBpbmZvLmlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8
fCBzcWwtPmJpbmRUZXh0KDIsIGluZm8ubmFtZSgpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAg
IHx8IHNxbC0+YmluZEJsb2IoMywga2V5UGF0aEJsb2ItPmRhdGEoKSwga2V5UGF0aEJsb2ItPnNp
emUoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQoNCwgaW5mby5h
dXRvSW5jcmVtZW50KCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
NjQoNSwgaW5mby5tYXhJbmRleElEKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3Fs
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGFkZCBvYmplY3Qgc3RvcmUgJyVzJyB0byBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAt
ICVzIiwgaW5mby5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgIkNvdWxkIG5vdCBjcmVhdGUgb2JqZWN0IHN0b3JlIl9zIH07CkBA
IC0xMjIzLDYgKzE0MDgsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgIGF1dG8qIG9i
amVjdFN0b3JlID0gbV9kYXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKGlu
Zm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAg
ICAgb2JqZWN0U3RvcmUtPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CisgICAgbV9kYXRhYmFzZUlu
Zm8tPnNldE1heEluZGV4SUQoaW5mby5pZGVudGlmaWVyKCkpOwogCiAgICAgcmV0dXJuIElEQkVy
cm9yIHsgfTsKIH0KQEAgLTEyMzcsMTEgKzE0MjMsMTAgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjp1bmNoZWNrZWRIYXNJbmRleFJlY29yZChjb25zdCBJREJJbmRleEluZm8mIGlu
Zm8KICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHNl
cmlhbGl6ZSBJREJLZXkgdG8gY2hlY2sgZm9yIGluZGV4IHJlY29yZCBpbiBkYXRhYmFzZSJfcyB9
OwogICAgIH0KIAotICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6Okhhc0luZGV4
UmVjb3JkLCAiU0VMRUNUIHJvd2lkIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/
IEFORCBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ID0gQ0FTVCg/IEFTIFRFWFQpOyJfcyk7Cisg
ICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6SGFzSW5kZXhSZWNvcmQsICJTRUxF
Q1Qgcm93aWQgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIGtleSA9IENB
U1QoPyBBUyBURVhUKTsiX3MpOwogICAgIGlmICghc3FsCiAgICAgICAgIHx8IHNxbC0+YmluZElu
dDY0KDEsIGluZm8uaWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3FsLT5i
aW5kSW50NjQoMiwgaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywgaW5kZXhLZXlCdWZmZXItPmRhdGEoKSwgaW5kZXhL
ZXlCdWZmZXItPnNpemUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIHx8IHNxbC0+YmluZEJs
b2IoMiwgaW5kZXhLZXlCdWZmZXItPmRhdGEoKSwgaW5kZXhLZXlCdWZmZXItPnNpemUoKSkgIT0g
U1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigiRXJyb3IgY2hlY2tpbmcgZm9yIGluZGV4
IHJlY29yZCBpbiBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsICJFcnJvciBjaGVja2luZyBmb3IgaW5kZXggcmVjb3JkIGluIGRhdGFiYXNlIl9zIH07
CiAgICAgfQpAQCAtMTM1OSwxMCArMTU0NCw5IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAg
ICAgfQogCiAgICAgewotICAgICAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpE
ZWxldGVJbmRleFJlY29yZHMsICJERUxFVEUgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJ
RCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7CisgICAgICAgIGF1dG8qIHNxbCA9IGNh
Y2hlZFN0YXRlbWVudChTUUw6OkRlbGV0ZUluZGV4UmVjb3JkcywgIkRFTEVURSBGUk9NIEluZGV4
UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPzsiX3MpOwogICAgICAgICBpZiAoIXNxbAogICAgICAg
ICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgaW5kZXhJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sK
LSAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIG9iamVjdFN0b3JlSWRlbnRpZmllcikg
IT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZGVsZXRlIGluZGV4IHJlY29yZHMg
Zm9yIGluZGV4IGlkICUiIFBSSWk2NCAiIGZyb20gSW5kZXhSZWNvcmRzIHRhYmxlICglaSkgLSAl
cyIsIGluZGV4SWRlbnRpZmllciwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREIt
Pmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25F
cnJvciwgIkVycm9yIGRlbGV0aW5nIGluZGV4IHJlY29yZHMgZnJvbSBkYXRhYmFzZSJfcyB9OwpA
QCAtMTU4Miw2MSArMTc2NiwyMSBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRl
bGV0ZVJlY29yZChTUUxpdGVJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sCiAgICAgfQogCiAg
ICAgLy8gRGVsZXRlIHJlY29yZCBmcm9tIGluZGV4ZXMgc3RvcmUKLSAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKG1fc2VyaWFsaXphdGlvbkNvbnRleHQtPnZtKCkpOwotICAgIGF1dG8ganNWYWx1ZSA9
IGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhl
Y1N0YXRlKCksIHZhbHVlKTsKLSAgICBpZiAoanNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwotCi0gICAgZm9yIChhdXRvJiBvYmplY3RTdG9y
ZUluZm8gOiBtX2RhdGFiYXNlSW5mby0+b2JqZWN0U3RvcmVNYXAoKS52YWx1ZXMoKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIGluZGV4SW5mbyA6IG9iamVjdFN0b3JlSW5mby5pbmRleE1hcCgpLnZh
bHVlcygpKSB7Ci0gICAgICAgICAgICBJbmRleEtleSBpbmRleEtleTsKLSAgICAgICAgICAgIGdl
bmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShtX3NlcmlhbGl6YXRpb25Db250ZXh0LT5leGVjU3RhdGUo
KSwgaW5kZXhJbmZvLCBqc1ZhbHVlLCBpbmRleEtleSwgb2JqZWN0U3RvcmVJbmZvLmtleVBhdGgo
KSwga2V5RGF0YSk7Ci0gICAgICAgICAgICBpZiAoaW5kZXhLZXkuaXNOdWxsKCkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgeworICAgICAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0
ZW1lbnQoU1FMOjpEZWxldGVPYmplY3RTdG9yZUluZGV4UmVjb3JkLCAiREVMRVRFIEZST00gSW5k
ZXhSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBvYmplY3RTdG9yZVJlY29yZElE
ID0gPzsiX3MpOwogCi0gICAgICAgICAgICBpZiAoIWluZGV4SW5mby5tdWx0aUVudHJ5KCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGVycm9yID0gZGVsZXRlT25lSW5kZXhSZWNvcmQob2JqZWN0
U3RvcmVJRCwgcmVjb3JkSUQsIGluZGV4S2V5LmFzT25lS2V5KCkpOwotICAgICAgICAgICAgICAg
IGlmICghZXJyb3IuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleEtleXMgPSBp
bmRleEtleS5tdWx0aUVudHJ5KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBp
bmRleEtleXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlcnJvciA9IGRlbGV0ZU9uZUlu
ZGV4UmVjb3JkKG9iamVjdFN0b3JlSUQsIHJlY29yZElELCBrZXkpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IH0KKyAgICAgICAgaWYgKCFzcWwKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIG9i
amVjdFN0b3JlSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQo
MiwgcmVjb3JkSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSBy
ZWNvcmQgZnJvbSBpbmRleGVzIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgKCVpKSAtICVz
Iiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgIkZhaWxlZCB0byBkZWxldGUgaW5kZXggZW50cmllcyBmb3Igb2JqZWN0IHN0b3JlIHJlY29y
ZCJfcyB9OwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0K
IAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVPbmVJbmRleFJlY29yZChp
bnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVSZWNvcmRJRCwgY29uc3Qg
SURCS2V5RGF0YSYgaW5kZXhLZXkpCi17Ci0gICAgaWYgKCFpbmRleEtleS5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybiBJREJFcnJvciB7IH07Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBp
bmRleEtleUJ1ZmZlciA9IHNlcmlhbGl6ZUlEQktleURhdGEoaW5kZXhLZXkpOwotICAgIGlmICgh
aW5kZXhLZXlCdWZmZXIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZGVsZXRlIHJl
Y29yZCBmcm9tIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiAoQ291bGQgbm90IHNlcmlhbGl6ZSBp
bmRleCBrZXkpIiwgb2JqZWN0U3RvcmVJRCk7Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVu
a25vd25FcnJvciwgIkZhaWxlZCB0byBkZWxldGUgaW5kZXggZW50cmllcyBmb3Igb2JqZWN0IHN0
b3JlIHJlY29yZCJfcyB9OwotICAgIH0KLQotICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVu
dChTUUw6OkRlbGV0ZU9iamVjdFN0b3JlSW5kZXhSZWNvcmQsICJERUxFVEUgRlJPTSBJbmRleFJl
Y29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIG9iamVjdFN0b3JlUmVjb3JkSUQgPSA/
IEFORCBrZXkgPSBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKLSAgICBpZiAoIXNxbAotICAgICAgICB8
fCBzcWwtPmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc3FsLT5iaW5kSW50NjQoMiwgb2JqZWN0U3RvcmVSZWNvcmRJRCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywgaW5kZXhLZXlCdWZmZXItPmRhdGEoKSwgaW5kZXhL
ZXlCdWZmZXItPnNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNxbC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSByZWNv
cmQgZnJvbSBpbmRleGVzIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgKCVpKSAtICVzIiwg
b2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRmFp
bGVkIHRvIGRlbGV0ZSBpbmRleCBlbnRyaWVzIGZvciBvYmplY3Qgc3RvcmUgcmVjb3JkIl9zIH07
Ci0gICAgfQotCi0gICAgcmV0dXJuIElEQkVycm9yIHsgfTsKLX0KLQogSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURC
S2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpkZWxldGVSYW5nZSAtIHJhbmdlICVzLCBvYmplY3Qgc3RvcmUgJSIgUFJJ
dTY0LCBrZXlSYW5nZS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0U3RvcmVJ
RCk7CkBAIC0xNzQxLDEzICsxODg1LDExIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAg
fQogCiAgICAgaWYgKCFlcnJvci5pc051bGwoKSAmJiBhbnlSZWNvcmRzU3VjY2VlZGVkKSB7Ci0g
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUJ1ZmZlciA9IHNlcmlhbGl6ZUlEQktleURh
dGEoa2V5KTsKLQotICAgICAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpEZWxl
dGVPYmplY3RTdG9yZUluZGV4UmVjb3JkLCAiREVMRVRFIEZST00gSW5kZXhSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCB2YWx1ZSA9IENBU1QoPyBBUyBURVhUKTsiX3MpOworICAg
ICAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpEZWxldGVPYmplY3RTdG9yZUlu
ZGV4UmVjb3JkLCAiREVMRVRFIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQg
PSA/IEFORCBvYmplY3RTdG9yZVJlY29yZElEID0gPzsiX3MpOwogCiAgICAgICAgIGlmICghc3Fs
CiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBpbmZvLmlkZW50aWZpZXIoKSkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDIsIGtleUJ1ZmZlci0+ZGF0
YSgpLCBrZXlCdWZmZXItPnNpemUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzcWwt
PmJpbmRJbnQ2NCgyLCByZWNvcmRJRCkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJBZGRpbmcg
b25lIEluZGV4IHJlY29yZCBmYWlsZWQsIGJ1dCBmYWlsZWQgdG8gcmVtb3ZlIGFsbCBvdGhlcnMg
dGhhdCBwcmV2aW91c2x5IHN1Y2NlZWRlZCIpOwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9y
IHsgVW5rbm93bkVycm9yLCAiQWRkaW5nIG9uZSBJbmRleCByZWNvcmQgZmFpbGVkLCBidXQgZmFp
bGVkIHRvIHJlbW92ZSBhbGwgb3RoZXJzIHRoYXQgcHJldmlvdXNseSBzdWNjZWVkZWQiX3MgfTsK
QEAgLTIyODYsMTIgKzI0MjgsMTEgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1
bmNoZWNrZWRHZXRJbmRleFJlY29yZEZvck9uZUtleShpbnQ2NF90IGluZGV4SUQKICAgICAgICAg
cmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHNlcmlhbGl6ZSBJREJL
ZXkgdG8gbG9vayB1cCBvbmUgaW5kZXggcmVjb3JkIl9zIH07CiAgICAgfQogCi0gICAgYXV0byog
c3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0SW5kZXhSZWNvcmRGb3JPbmVLZXksICJTRUxF
Q1QgSW5kZXhSZWNvcmRzLnZhbHVlLCBSZWNvcmRzLnZhbHVlLCBSZWNvcmRzLnJlY29yZElEIEZS
T00gUmVjb3JkcyBJTk5FUiBKT0lOIEluZGV4UmVjb3JkcyBPTiBSZWNvcmRzLnJlY29yZElEID0g
SW5kZXhSZWNvcmRzLm9iamVjdFN0b3JlUmVjb3JkSUQgV0hFUkUgSW5kZXhSZWNvcmRzLmluZGV4
SUQgPSA/IEFORCBJbmRleFJlY29yZHMub2JqZWN0U3RvcmVJRCA9ID8gQU5EIEluZGV4UmVjb3Jk
cy5rZXkgPSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkgSW5kZXhSZWNvcmRzLmtleSwgSW5kZXhS
ZWNvcmRzLnZhbHVlIl9zKTsKKyAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpH
ZXRJbmRleFJlY29yZEZvck9uZUtleSwgIlNFTEVDVCBJbmRleFJlY29yZHMudmFsdWUsIFJlY29y
ZHMudmFsdWUsIFJlY29yZHMucmVjb3JkSUQgRlJPTSBSZWNvcmRzIElOTkVSIEpPSU4gSW5kZXhS
ZWNvcmRzIE9OIFJlY29yZHMub2JqZWN0U3RvcmVJRCA9IEluZGV4UmVjb3Jkcy5vYmplY3RTdG9y
ZUlEIEFORCBSZWNvcmRzLnJlY29yZElEID0gSW5kZXhSZWNvcmRzLm9iamVjdFN0b3JlUmVjb3Jk
SUQgV0hFUkUgSW5kZXhSZWNvcmRzLmluZGV4SUQgPSA/IEFORCBJbmRleFJlY29yZHMua2V5ID0g
Q0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIEluZGV4UmVjb3Jkcy5rZXksIEluZGV4UmVjb3Jkcy52
YWx1ZSJfcyk7CiAKICAgICBpZiAoIXNxbAogICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBp
bmRleElEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgb2JqZWN0
U3RvcmVJRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywgYnVmZmVy
LT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgfHwgc3Fs
LT5iaW5kQmxvYigyLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9P
SykgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBsb29rdXAgaW5kZXggcmVjb3JkIGlu
IGRhdGFiYXNlIik7CiAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIlVu
YWJsZSB0byBsb29rdXAgaW5kZXggcmVjb3JkIGluIGRhdGFiYXNlIl9zIH07CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDc1ZjdlOGQ0MDViMjVhMjExMzBkY2YyYTA2
ZTA3NTIyZDk2MzAzYmIuLjBjMmE5NzVmNmJjODBlMjRkM2NlNzljYjVmZGQ0ZWVkYWZjMDM0NWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKQEAgLTExMSwxMiArMTExLDEzIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpOwogICAgIGJvb2wgZW5z
dXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgpOwogICAgIGJvb2wgZW5zdXJlVmFsaWRJbmRleFJl
Y29yZHNJbmRleCgpOworICAgIGJvb2wgZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRl
eCgpOwogICAgIGJvb2wgZW5zdXJlVmFsaWRCbG9iVGFibGVzKCk7CisgICAgT3B0aW9uYWw8Ym9v
bD4gZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSgpOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJREJEYXRhYmFzZUluZm8+IGNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbygp
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IGV4dHJhY3RFeGlzdGluZ0Rh
dGFiYXNlSW5mbygpOwogCiAgICAgSURCRXJyb3IgZGVsZXRlUmVjb3JkKFNRTGl0ZUlEQlRyYW5z
YWN0aW9uJiwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBJREJLZXlEYXRhJik7Ci0gICAg
SURCRXJyb3IgZGVsZXRlT25lSW5kZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2
NF90IG9iamVjdFN0b3JlUmVjb3JkSUQsIGNvbnN0IElEQktleURhdGEmKTsKICAgICBJREJFcnJv
ciB1bmNoZWNrZWRHZXRLZXlHZW5lcmF0b3JWYWx1ZShpbnQ2NF90IG9iamVjdFN0b3JlSUQsIHVp
bnQ2NF90JiBvdXRWYWx1ZSk7CiAgICAgSURCRXJyb3IgdW5jaGVja2VkU2V0S2V5R2VuZXJhdG9y
VmFsdWUoaW50NjRfdCBvYmplY3RTdG9yZUlELCB1aW50NjRfdCB2YWx1ZSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJz
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkN1cnNvci5jcHAKaW5kZXggOTBjMGFkM2IyYTY4ZWRkMGFmYjA4ZTM0OGMyYjBkMjkyYjJiNDhi
NS4uMjFkZmY4NGY3NWZhNGI1OTY0NTVjNmZlNmM2ZDE1NTNhODI5ZjhhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkN1cnNvci5jcHAKQEAgLTEyMCw3ICsxMjAsNyBAQCBzdGF0aWMgU3RyaW5nIGJ1aWxkSW5kZXhT
dGF0ZW1lbnQoY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdQog
ewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKIAotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiU0VMRUNUIHJvd2lkLCBrZXksIHZhbHVlIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4
SUQgPSA/IEFORCBvYmplY3RTdG9yZUlEID0gPyBBTkQga2V5ICIpOworICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiU0VMRUNUIHJvd2lkLCBrZXksIHZhbHVlIEZST00gSW5kZXhSZWNvcmRzIFdI
RVJFIGluZGV4SUQgPSA/IEFORCBrZXkgIik7CiAgICAgaWYgKCFrZXlSYW5nZS5sb3dlcktleS5p
c051bGwoKSAmJiAha2V5UmFuZ2UubG93ZXJPcGVuKQogICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIj49Iik7CiAgICAgZWxzZQpAQCAtMjg5LDExICsyODksNiBAQCBib29sIFNRTGl0ZUlE
QkN1cnNvcjo6YmluZEFyZ3VtZW50cygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBpZiAobV9pbmRleElEICE9IElEQkluZGV4SW5mbzo6SW52YWxpZElkICYmIG1fc3RhdGVt
ZW50LT5iaW5kSW50NjQoY3VycmVudEJpbmRBcmd1bWVudCsrLCBtX29iamVjdFN0b3JlSUQpICE9
IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBiaW5kIG9iamVjdCBz
dG9yZSBpZCBhcmd1bWVudCBmb3IgYW4gaW5kZXggY3Vyc29yIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBzZXJpYWxp
emVJREJLZXlEYXRhKG1fY3VycmVudExvd2VyS2V5KTsKICAgICBpZiAobV9zdGF0ZW1lbnQtPmJp
bmRCbG9iKGN1cnJlbnRCaW5kQXJndW1lbnQrKywgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6
ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRl
IGN1cnNvciBzdGF0ZW1lbnQgKGxvd2VyIGtleSkiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CmluZGV4IGI3MmI2MzdiMTdmZGMwMzYyM2YxYTdhNDJiMjdiYTQ0Y2VmNWVmZTAuLmEwYTA1MTZm
NmZiY2M0ZTY4MGZjMmM5YTdmMDQ4NzkyMzU1M2NkZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmNwcApAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0
ZUJhY2tpbmdTdG9yZSh1aW50NjRfdCBkZWxldGVkVmVyc2lvbikKICAgICAvLyB3ZSB3b24ndCBo
YXZlIGEgbV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5mby4gSW4gdGhhdCBjYXNlLCB3ZSds
bCBtYW51ZmFjdHVyZSBvbmUgdXNpbmcgdGhlCiAgICAgLy8gcGFzc2VkIGluIGRlbGV0ZWRWZXJz
aW9uIGFyZ3VtZW50LgogICAgIGlmICghbV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5mbykK
LSAgICAgICAgbV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5mbyA9IG1ha2VVbmlxdWU8SURC
RGF0YWJhc2VJbmZvPihtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCksIGRlbGV0ZWRWZXJzaW9u
KTsKKyAgICAgICAgbV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5mbyA9IG1ha2VVbmlxdWU8
SURCRGF0YWJhc2VJbmZvPihtX2lkZW50aWZpZXIuZGF0YWJhc2VOYW1lKCksIGRlbGV0ZWRWZXJz
aW9uLCAwKTsKIAogICAgIGlmIChtX2N1cnJlbnRPcGVuREJSZXF1ZXN0KSB7CiAgICAgICAgIG1f
Y3VycmVudE9wZW5EQlJlcXVlc3QtPm5vdGlmeURpZERlbGV0ZURhdGFiYXNlKCptX21vc3RSZWNl
bnREZWxldGVkRGF0YWJhc2VJbmZvKTsKQEAgLTYzMyw2ICs2MzMsNyBAQCB2b2lkIFVuaXF1ZUlE
QkRhdGFiYXNlOjpjcmVhdGVJbmRleChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0cmFu
c2FjdGlvbiwgYwogICAgICAgICBhdXRvKiBvYmplY3RTdG9yZUluZm8gPSBtX2RhdGFiYXNlSW5m
by0+aW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIo
KSk7CiAgICAgICAgIEFTU0VSVChvYmplY3RTdG9yZUluZm8pOwogICAgICAgICBvYmplY3RTdG9y
ZUluZm8tPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7CisgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5z
ZXRNYXhJbmRleElEKGluZm8uaWRlbnRpZmllcigpKTsKICAgICB9CiAKICAgICBjYWxsYmFjayhl
cnJvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFy
ZWQvSURCRGF0YWJhc2VJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCmluZGV4IGVhMzEyY2NiN2RjYjNhODkzMDA5MWZm
NTBkMDg2MzRjZWRkNzFkMmEuLjg2MDNmZTY2YjA1ZDZjNDUyNjMxYTdkMjU5MjZjMmQwODdiOTA1
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJEYXRhYmFzZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JREJEYXRhYmFzZUluZm8uY3BwCkBAIC0zNiw5ICszNiwxMCBAQCBJREJEYXRhYmFz
ZUluZm86OklEQkRhdGFiYXNlSW5mbygpCiB7CiB9CiAKLUlEQkRhdGFiYXNlSW5mbzo6SURCRGF0
YWJhc2VJbmZvKGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbikKK0lEQkRhdGFi
YXNlSW5mbzo6SURCRGF0YWJhc2VJbmZvKGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVy
c2lvbiwgdWludDY0X3QgbWF4SW5kZXhJRCkKICAgICA6IG1fbmFtZShuYW1lKQogICAgICwgbV92
ZXJzaW9uKHZlcnNpb24pCisgICAgLCBtX21heEluZGV4SUQobWF4SW5kZXhJRCkKIHsKIH0KIApA
QCAtNDYsNiArNDcsNyBAQCBJREJEYXRhYmFzZUluZm86OklEQkRhdGFiYXNlSW5mbyhjb25zdCBJ
REJEYXRhYmFzZUluZm8mIG90aGVyLCBJc29sYXRlZENvcHlUYWcpCiAgICAgOiBtX25hbWUob3Ro
ZXIubV9uYW1lLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV92ZXJzaW9uKG90aGVyLm1fdmVyc2lv
bikKICAgICAsIG1fbWF4T2JqZWN0U3RvcmVJRChvdGhlci5tX21heE9iamVjdFN0b3JlSUQpCisg
ICAgLCBtX21heEluZGV4SUQob3RoZXIubV9tYXhJbmRleElEKQogewogICAgIGZvciAoY29uc3Qg
YXV0byYgZW50cnkgOiBvdGhlci5tX29iamVjdFN0b3JlTWFwKQogICAgICAgICBtX29iamVjdFN0
b3JlTWFwLnNldChlbnRyeS5rZXksIGVudHJ5LnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKQEAgLTE2
OCw2ICsxNzAsMTIgQEAgU3RyaW5nIElEQkRhdGFiYXNlSW5mbzo6bG9nZ2luZ1N0cmluZygpIGNv
bnN0CiAKICNlbmRpZgogCit2b2lkIElEQkRhdGFiYXNlSW5mbzo6c2V0TWF4SW5kZXhJRCh1aW50
NjRfdCBtYXhJbmRleElEKQoreworICAgIEFTU0VSVChtYXhJbmRleElEID4gbV9tYXhJbmRleElE
IHx8ICghbWF4SW5kZXhJRCAmJiAhbV9tYXhJbmRleElEKSk7CisgICAgbV9tYXhJbmRleElEID0g
bWF4SW5kZXhJRDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKaW5kZXggODIzNWJiODhjMzMy
ZDc3ZTNhOGU0NTUyYTNiYmZhMGE5MGIwZjU2Ni4uZTJlMTUyYWZiN2NjNDNiNzM1ZGEyY2MyNDg1
YTcyZjEzMDAwODNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaApAQCAtMzUsNyArMzUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJEYXRhYmFzZUluZm8gewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IElEQkRhdGFiYXNlSW5mbyhjb25z
dCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24pOworICAgIGV4cGxpY2l0IElEQkRhdGFi
YXNlSW5mbyhjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIHVpbnQ2NF90IG1h
eEluZGV4SUQpOwogCiAgICAgZW51bSBJc29sYXRlZENvcHlUYWcgeyBJc29sYXRlZENvcHkgfTsK
ICAgICBJREJEYXRhYmFzZUluZm8oY29uc3QgSURCRGF0YWJhc2VJbmZvJiwgSXNvbGF0ZWRDb3B5
VGFnKTsKQEAgLTY4LDYgKzY4LDkgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIElEQkRhdGFiYXNlSW5mbyYpOwogCisg
ICAgdm9pZCBzZXRNYXhJbmRleElEKHVpbnQ2NF90IG1heEluZGV4SUQpOworICAgIHVpbnQ2NF90
IGdlbmVyYXRlTmV4dEluZGV4SUQoKSB7IHJldHVybiArK21fbWF4SW5kZXhJRDsgfQorCiAjaWYg
IUxPR19ESVNBQkxFRAogICAgIFN0cmluZyBsb2dnaW5nU3RyaW5nKCkgY29uc3Q7CiAjZW5kaWYK
QEAgLTc5LDYgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIHVpbnQ2
NF90IG1fdmVyc2lvbiB7IDAgfTsKICAgICB1aW50NjRfdCBtX21heE9iamVjdFN0b3JlSUQgeyAw
IH07CisgICAgdWludDY0X3QgbV9tYXhJbmRleElEIHsgMCB9OwogCiAgICAgSGFzaE1hcDx1aW50
NjRfdCwgSURCT2JqZWN0U3RvcmVJbmZvPiBtX29iamVjdFN0b3JlTWFwOwogCkBAIC04Nyw3ICs5
MSw3IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBJREJEYXRhYmFz
ZUluZm86OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwg
bV9uYW1lIDw8IG1fdmVyc2lvbiA8PCBtX21heE9iamVjdFN0b3JlSUQgPDwgbV9vYmplY3RTdG9y
ZU1hcDsKKyAgICBlbmNvZGVyIDw8IG1fbmFtZSA8PCBtX3ZlcnNpb24gPDwgbV9tYXhPYmplY3RT
dG9yZUlEIDw8IG1fbWF4SW5kZXhJRCA8PCBtX29iamVjdFN0b3JlTWFwOwogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgpAQCAtMTAyLDYgKzEwNiw5IEBAIGJvb2wgSURCRGF0YWJhc2VJbmZv
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSURCRGF0YWJhc2VJbmZvJiBpbmZvKQogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX21heE9iamVjdFN0b3JlSUQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9tYXhJbmRleElEKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1f
b2JqZWN0U3RvcmVNYXApKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0
b3JlSW5mby5jcHAKaW5kZXggNWM3MjgyYTQ2MzhlYjRlNjcxYzUzZjFjNWZkY2YyYWYyNzJlYWM1
NS4uNGVhZDM4YmZiYzkxMTc4OWRiMjU3Njg5YzY1ZTAyOGFlZGZjYWM1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5m
by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9i
amVjdFN0b3JlSW5mby5jcHAKQEAgLTQzLDkgKzQzLDkgQEAgSURCT2JqZWN0U3RvcmVJbmZvOjpJ
REJPYmplY3RTdG9yZUluZm8odWludDY0X3QgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBuYW1l
LAogewogfQogCi1JREJJbmRleEluZm8gSURCT2JqZWN0U3RvcmVJbmZvOjpjcmVhdGVOZXdJbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgmJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwg
Ym9vbCBtdWx0aUVudHJ5KQorSURCSW5kZXhJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6Y3JlYXRl
TmV3SW5kZXgodWludDY0X3QgaW5kZXhJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJLZXlQYXRo
JiYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKIHsKLSAgICBJREJJbmRl
eEluZm8gaW5mbygrK21fbWF4SW5kZXhJRCwgbV9pZGVudGlmaWVyLCBuYW1lLCBXVEZNb3ZlKGtl
eVBhdGgpLCB1bmlxdWUsIG11bHRpRW50cnkpOworICAgIElEQkluZGV4SW5mbyBpbmZvKGluZGV4
SUQsIG1faWRlbnRpZmllciwgbmFtZSwgV1RGTW92ZShrZXlQYXRoKSwgdW5pcXVlLCBtdWx0aUVu
dHJ5KTsKICAgICBtX2luZGV4TWFwLnNldChpbmZvLmlkZW50aWZpZXIoKSwgaW5mbyk7CiAgICAg
cmV0dXJuIGluZm87CiB9CkBAIC01NCw5ICs1NCw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVJbmZv
OjphZGRFeGlzdGluZ0luZGV4KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykKIHsKICAgICBBU1NF
UlQoIW1faW5kZXhNYXAuY29udGFpbnMoaW5mby5pZGVudGlmaWVyKCkpKTsKIAotICAgIGlmIChp
bmZvLmlkZW50aWZpZXIoKSA+IG1fbWF4SW5kZXhJRCkKLSAgICAgICAgbV9tYXhJbmRleElEID0g
aW5mby5pZGVudGlmaWVyKCk7Ci0KICAgICBtX2luZGV4TWFwLnNldChpbmZvLmlkZW50aWZpZXIo
KSwgaW5mbyk7CiB9CiAKQEAgLTEwMSw4ICs5OCw2IEBAIElEQk9iamVjdFN0b3JlSW5mbyBJREJP
YmplY3RTdG9yZUluZm86Omlzb2xhdGVkQ29weSgpIGNvbnN0CiAgICAgZm9yIChhdXRvJiBpdGVy
YXRvciA6IG1faW5kZXhNYXApCiAgICAgICAgIHJlc3VsdC5tX2luZGV4TWFwLnNldChpdGVyYXRv
ci5rZXksIGl0ZXJhdG9yLnZhbHVlLmlzb2xhdGVkQ29weSgpKTsKIAotICAgIHJlc3VsdC5tX21h
eEluZGV4SUQgPSBtX21heEluZGV4SUQ7Ci0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0
U3RvcmVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURC
T2JqZWN0U3RvcmVJbmZvLmgKaW5kZXggZGNlOTViZTE5YTc3NjFmZDMzYTQwNzQ2MTJjOWZmYzNk
OGIxODY5OC4uMTdmZTQyMmJhNDU4ZWIxNjhjMWU1YWQ5MDhjYWZlNzcyYzc0NzYwYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0
b3JlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJPYmplY3RTdG9yZUluZm8uaApAQCAtNDMsMTMgKzQzLDEyIEBAIHB1YmxpYzoKICAgICBjb25z
dCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBjb25zdCBPcHRp
b25hbDxJREJLZXlQYXRoPiYga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UGF0aDsgfQog
ICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0luY3JlbWVudDsg
fQotICAgIHVpbnQ2NF90IG1heEluZGV4SUQoKSBjb25zdCB7IHJldHVybiBtX21heEluZGV4SUQ7
IH0KIAogICAgIHZvaWQgcmVuYW1lKGNvbnN0IFN0cmluZyYgbmV3TmFtZSkgeyBtX25hbWUgPSBu
ZXdOYW1lOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBJREJPYmplY3RTdG9yZUluZm8gaXNvbGF0
ZWRDb3B5KCkgY29uc3Q7CiAKLSAgICBJREJJbmRleEluZm8gY3JlYXRlTmV3SW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJLZXlQYXRoJiYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkp
OworICAgIElEQkluZGV4SW5mbyBjcmVhdGVOZXdJbmRleCh1aW50NjRfdCBpbmRleElELCBjb25z
dCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgmJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSk7CiAgICAgdm9pZCBhZGRFeGlzdGluZ0luZGV4KGNvbnN0IElEQkluZGV4SW5mbyYpOwogICAg
IGJvb2wgaGFzSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGhhc0lu
ZGV4KHVpbnQ2NF90IGluZGV4SWRlbnRpZmllcikgY29uc3Q7CkBAIC03NSw3ICs3NCw2IEBAIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBPcHRpb25hbDxJREJLZXlQYXRoPiBtX2tl
eVBhdGg7CiAgICAgYm9vbCBtX2F1dG9JbmNyZW1lbnQgeyBmYWxzZSB9OwotICAgIHVpbnQ2NF90
IG1fbWF4SW5kZXhJRCB7IDAgfTsKIAogICAgIEhhc2hNYXA8dWludDY0X3QsIElEQkluZGV4SW5m
bz4gbV9pbmRleE1hcDsKIH07CkBAIC04Myw3ICs4MSw3IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgogdm9pZCBJREJPYmplY3RTdG9yZUluZm86OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbV9pZGVudGlmaWVyIDw8IG1fbmFtZSA8
PCBtX2tleVBhdGggPDwgbV9hdXRvSW5jcmVtZW50IDw8IG1fbWF4SW5kZXhJRCA8PCBtX2luZGV4
TWFwOworICAgIGVuY29kZXIgPDwgbV9pZGVudGlmaWVyIDw8IG1fbmFtZSA8PCBtX2tleVBhdGgg
PDwgbV9hdXRvSW5jcmVtZW50IDw8IG1faW5kZXhNYXA7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CkBAIC0xMDEsOSArOTksNiBAQCBib29sIElEQk9iamVjdFN0b3JlSW5mbzo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGluZm8ubV9hdXRvSW5jcmVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fbWF4SW5kZXhJRCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX2luZGV4TWFw
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTYzZmIwZmM3ZjVkYzc3ZDRiNDEzYWUzOTkyNGU5MDM3
OGRhMWJkZS4uN2U3MDIxMDU5ODhkZmUyZjU2OTU4YjdjNDUyM2M5NGVlNTZiMzJhNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
IEBACisyMDIwLTAxLTEzICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAg
ICAgIEluZGV4ZWREQjogc3BlZWQgdXAgaW5kZXggcmVjb3JkcyBkZWxldGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MTk2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRl
MzogQWRkZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJP
YmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1t
OiBBZGRlZC4KKyAgICAgICAgKC1bSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjJNZXNzYWdl
SGFuZGxlciB1c2VyQ29udGVudENvbnRyb2xsZXI6ZGlkUmVjZWl2ZVNjcmlwdE1lc3NhZ2U6XSk6
CisgICAgICAgIChURVNUKToKKwogMjAyMC0wMS0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEV4cG9zZSBmcmFtZSBpbmZvcm1hdGlvbiBv
biBfV0tSZXNvdXJjZUxvYWRJbmZvCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ0ZDQzNGY3
YTIxNWQ3ZTI1YWQxMjJlOThmODcwM2Q3ZjdhOTY0MzMuLmY0ODI3ZWNhZjA1MTZiYmNiNmUxZDgy
MjlmOTQ4OTg4MWFhNDJmMWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MzgsMTEgKzcz
OCwxNCBAQAogCQk5MzY4QTI1RjIyOUVGQjQ3MDBBODI5Q0EgLyogbG9jYWwtc3RvcmFnZS1wcm9j
ZXNzLXN1c3BlbmRzLTIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzY4QTI1QzIyOUVGQjNBMDBBODI5Q0EgLyogbG9jYWwtc3RvcmFn
ZS1wcm9jZXNzLXN1c3BlbmRzLTIuaHRtbCAqLzsgfTsKIAkJOTM2RjcyODAxQ0Q3RDlFQzAwNjhB
MEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzZGNzI3RTFDRDdEOUQwMDA2OEEwRkIg
LyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5odG1sICovOyB9OwogCQk5MzZGNzI4MTFDRDdEOUVD
MDA2OEEwRkIgLyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5tcDQgaW4gQ29weSBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2RjcyN0YxQ0Q3RDlEMDAwNjhB
MEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8ubXA0ICovOyB9OworCQk5MzdCNTY5RTIzQ0Qy
M0RCMDAyQUU2NDAgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUzIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQkNCQzgxMjND
QzZFRjUwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTMgKi87IH07
CiAJCTkzOTlCQTA0MjM3MTExNDAwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAxMjM3
MTEwQUUwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5tbSAqLzsgfTsKIAkJOTM5OUJB
MDUyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5OUJBMDIyMzcx
MTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLmh0bWwgKi87IH07CiAJCTkzOTlC
QTA2MjM3MTExNEYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAz
MjM3MTEwQkYwMDgzOTJCRiAvKiBJbmRleGVkREJOb3RJblBhZ2VDYWNoZS5odG1sICovOyB9Owog
CQk5M0FGNEVDRTE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi87IH07CiAJCTkzQUY0RUQxMTUw
NkYxMzAwMDdGRDU3RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNGMTUwNkYxMjMwMDdGRDU3
RSAvKiBsb3RzLW9mLWltYWdlcy5odG1sICovOyB9OworCQk5M0JDQkM4MzIzQ0M2RjJBMDBDQTIy
MjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JDQkM4MDIzQ0M2RUU4MDBDQTIyMjEgLyog
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gKi87IH07CisJCTkzQkNCQzg0MjNDQzZG
NDQwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQkNCQzgyMjND
QzZFRjUwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5odG1sICovOyB9
OwogCQk5M0NGQTg2NzFDRUI5RTM4MDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzQ0ZBODY2MUNFQjlERTEwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwg
Ki87IH07CiAJCTkzRDExOUZDMjJDNjgwRjcwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13
aW5kb3ctcHJpdmF0ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzRDExOUZCMjJDNTcxMTIwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Ut
b3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovOyB9OwogCQk5M0UyQzU1NTFGRDMyMDQxMDBFMURG
NkEgLyogTGluZUVuZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0UyQzU1NDFGRDMyMDQxMDBFMURGNkEgLyogTGluZUVuZGluZy5jcHAgKi87
IH07CkBAIC0xMjk1LDYgKzEyOTgsOCBAQAogCQkJCTUxMDQ3NzczMUQyOThEREQwMDk3NDdFQiAv
KiBJREJEZWxldGVSZWNvdmVyeS5zcWxpdGUzLXNobSBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJ
CQk1MTA0Nzc3NDFEMjk4REREMDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy13
YWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJNTExMEZDRjExRTAxQ0Q2NDAwNkY4RDBCIC8q
IElEQkluZGV4VXBncmFkZVRvVjIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJCQk5MzdC
NTY5RTIzQ0QyM0RCMDAyQUU2NDAgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUz
IGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTkzQkNCQzg0MjNDQzZGNDQwMENBMjIyMSAvKiBJ
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCUY0MUFCOUE0MUVGNDY5NkIwMDgzRkEwOCAvKiBpbWFnZS1hbmQtY29udGVudGVkaXRhYmxl
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRjRFMEEyQjQyMTIyNDAyQjAwQUY3QzdG
IC8qIGltYWdlLWFuZC1maWxlLXVwbG9hZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJ
CUY0MUFCOUE1MUVGNDY5NkIwMDgzRkEwOCAvKiBpbWFnZS1hbmQtdGV4dGFyZWEuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLywKQEAgLTIxNjMsNiArMjE2OCw5IEBACiAJCTkzQUY0RUNBMTUwNkYw
MzUwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3Rmlyc3RWaXN1YWxseU5v
bkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dEZvckltYWdlc19CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQUY0RUNGMTUwNkYxMjMwMDdGRDU3RSAvKiBs
b3RzLW9mLWltYWdlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImxvdHMtb2Yt
aW1hZ2VzLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0JDQkM4MDIzQ0M2
RUU4MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
VG9WMi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNCQ0JDODEyM0NDNkVGNTAw
Q0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSBJREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTkzQkNCQzgyMjNDQzZFRjUwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
Mi5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gSURCT2JqZWN0U3RvcmVJbmZvVXBn
cmFkZVRvVjIuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDRkE4NjYxQ0VC
OURFMTAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9ICJhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0NGQTg2ODFDRUJDRkVEMDAwNTY1QTggLyogQ2FuZGlkYXRl
VGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYW5kaWRh
dGVUZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNEMTE5RkIyMkM1NzEx
MjAwOUJFM0M3IC8qIGxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUu
aHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTA2LDYgKzI5MTQsNyBAQAog
CQkJCTUxQUYyM0RFMUVGMUEzNzIwMDcyRjI4MSAvKiBJY29uTG9hZGluZ0RlbGVnYXRlLm1tICov
LAogCQkJCTUxMDQ3Nzc1MUQyOThFMDMwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5tbSAq
LywKIAkJCQk1MTEwRkNFRjFFMDFDQkFBMDA2RjhEMEIgLyogSURCSW5kZXhVcGdyYWRlVG9WMi5t
bSAqLywKKwkJCQk5M0JDQkM4MDIzQ0M2RUU4MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZv
VXBncmFkZVRvVjIubW0gKi8sCiAJCQkJNTFBNTg3ODQxRDI3MkVGMzAwNEJBOUFGIC8qIEluZGV4
ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0gKi8sCiAJCQkJQ0FCMEZGNTQyMjMzMkMzQTAwNkNB
NUIwIC8qIEluZGV4ZWREQkZpbGVOYW1lLm1tICovLAogCQkJCTkzOTlCQTAxMjM3MTEwQUUwMDgz
OTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5tbSAqLywKQEAgLTMzNzIsNiArMzM4MSw4IEBA
CiAJCQkJNTEwNDc3NzAxRDI5OEQ4NTAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0
ZTMtc2htICovLAogCQkJCTUxMDQ3NzcxMUQyOThEODUwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNv
dmVyeS5zcWxpdGUzLXdhbCAqLywKIAkJCQk1MTEwRkNGMDFFMDFDRDUzMDA2RjhEMEIgLyogSURC
SW5kZXhVcGdyYWRlVG9WMi5odG1sICovLAorCQkJCTkzQkNCQzgxMjNDQzZFRjUwMENBMjIyMSAv
KiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTMgKi8sCisJCQkJOTNCQ0JDODIyM0ND
NkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLmh0bWwgKi8sCiAJ
CQkJRjQxQUI5OTkxRUY0NjkyQzAwODNGQTA4IC8qIGltYWdlLWFuZC1jb250ZW50ZWRpdGFibGUu
aHRtbCAqLywKIAkJCQlGNEUwQTJCMzIxMjIzRjJEMDBBRjdDN0YgLyogaW1hZ2UtYW5kLWZpbGUt
dXBsb2FkLmh0bWwgKi8sCiAJCQkJRjQxQUI5OTMxRUY0NjkyQzAwODNGQTA4IC8qIGltYWdlLWFu
ZC10ZXh0YXJlYS5odG1sICovLApAQCAtNDcwOCw2ICs0NzE5LDcgQEAKIAkJCQk1MUFGMjNERjFF
RjFBMzczMDA3MkYyODEgLyogSWNvbkxvYWRpbmdEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTUxMDQ3Nzc4MUQyOTkyM0IwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTUxMTBGQ0ZBMUUwMUNEQjgwMDZGOEQwQiAvKiBJREJJbmRleFVwZ3Jh
ZGVUb1YyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTNCQ0JDODMyM0NDNkYyQTAwQ0EyMjIxIC8q
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFB
NTg3ODYxRDI3M0FBOTAwNEJBOUFGIC8qIEluZGV4ZWREQkRhdGFiYXNlUHJvY2Vzc0tpbGwubW0g
aW4gU291cmNlcyAqLywKIAkJCQlDQUIwRkY1NTIyMzMyQzU3MDA2Q0E1QjAgLyogSW5kZXhlZERC
RmlsZU5hbWUubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk5QkEwNDIzNzExMTQwMDA4MzkyQkYg
LyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0gaW4gU291cmNlcyAqLywKQEAgLTQ4NTAsNyArNDg2
Miw2IEBACiAJCQkJMkQyQkVCMkQyMjMyNEU1RjAwNTU0NENBIC8qIFJlcXVlc3RUZXh0SW5wdXRD
b250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0UwQzQxRDBBNjU0MjAwRkVCQ0YzIC8q
IFJlcXVpcmVzVXNlckFjdGlvbkZvclBsYXliYWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdGMEUxQTQxMUFFNjAwNDQ3QzRDIC8qIFJlc2l6ZVJldmVyc2VQYWdpbmF0ZWRXZWJWaWV3LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUNEMjdBMUMxMjNDNjYxRUQwMDZFMTFERCAvKiBXS1dlYlZp
ZXdQYXVzZVBsYXlpbmdBdWRpb1Rlc3RzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMEYx
QTQxMUFFNjAwNDQ3QzRDIC8qIFJlc2l6ZVdpbmRvd0FmdGVyQ3Jhc2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNCN0FGREMyM0M0NTI5NzAwRTQ5Q0YzIC8qIFJlc291cmNlTG9hZERlbGVnYXRl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFDOEUxQTUxRjI2QUY0QzAwQkY3MzFCIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3MubW0gaW4gU291cmNlcyAqLywKQEAgLTUwMzIsNiArNTA0Myw3IEBA
CiAJCQkJRDM0RTA4NzYxRTRFNDJFMTAwNUZGMTRBIC8qIFdLV2ViVmlld0dldENvbnRlbnRzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjRGQTkxODExRTYxODQ5QjAwN0I4QzFEIC8qIFdLV2ViVmll
d01hY0VkaXRpbmdUZXN0cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDQUNBREExMjMwNjIwQUUw
MDA3RDU0QyAvKiBXS1dlYlZpZXdPcGFxdWUubW0gaW4gU291cmNlcyAqLywKKwkJCQlDRDI3QTFD
MTIzQzY2MUVEMDA2RTExREQgLyogV0tXZWJWaWV3UGF1c2VQbGF5aW5nQXVkaW9UZXN0cy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTJEMDFEMDZFMjMyMThGRUUwMDM5QUEzQSAvKiBXS1dlYlZpZXdQ
cmludEZvcm1hdHRlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3QTlEQkU5MjEzQjRDOTMwMEQy
NjFBMiAvKiBXS1dlYlZpZXdTZXJ2ZXJUcnVzdEtWQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkz
RjU2REE5MUU1RjkxOUQwMDNFREU4NCAvKiBXS1dlYlZpZXdTbmFwc2hvdC5tbSBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NDQyNmVhMDQxMGI0MjM5ZTdiMTBmNmE4MzI1ZjBmODYzNDczZDJmCkdJVCBiaW5hcnkg
cGF0Y2gKbGl0ZXJhbCA2OTYzMgp6Y21lSSomMlFVZTkwJX57djdIeVVPYHEmVjMjaDxjYnliX1Nn
fUkkSDRIMCNITnZFaTMoeHZJPmtXbEJnPyZkOGAKenkyTDUlRyRheURUejFAdktZIzxgMEB7VFc9
VXRHMTFCWnpWNTt1Z18zQmRzJjtJWj92STdgeE9waD9UVm1mQWRhCnpwNkJRMWBTYEl0YCsycjRV
NUZae3U1NHpxVGJpaiU1SSskRmEheWVRQXAtdzcjRDZNRjdmKG8pNzUrKFUoIz9fcgp6ZEdvYTU+
JHlZeD93Zj8yPzdpPjE7flZYeytrTCVmckR3M35SYDttKV5SQUhteDVzcWZecWclTDFsdTcxMFNH
eyMKemxMUUx5RmkmNztoISlTNytGREFWKlowb3JYKzVpJW5RWUZuOy01KWByOz1lTUlXLSooRH5f
Kn07bXExS2VjZkUqCnpoNGpkKjV7Vl9sPWZlcGw3RWRhJTwhRHJpJENSMFBZJVVzXk5oKSh3aypL
bTlpKEZVXkpHTGpuaV94aT5AVGp0JAp6JnR+PHMkQGckQHB4e30qSkZxWkJpSUx2V2NYS3lWezRU
bng8O3skfXpVcnZ1c19JeGhSNk8xNTJePkY4Wjxrc2cKenVfOHAkbzApMllJYSp4WnRQQzMpMmlJ
Jj1ObyFsV2tfQGtLZ0p1cSslMlVGUEQlYlZCTWF7Z2JPaEBDPnRwWGRsCno8K08xbHVlVmR2dCRm
TmYhZjcreGooQm1nK1k9WldwfHtfKUo1MFJoJGFCMjkpZ0F8Ny1Jb3I/I1lBTGJEc2Y0Zgp6NF98
OER0VmFGRD5ROE45SCFzfC1zbnhMfT5HaWZxSFF0eDM0JU5vbDVEZlg7ZmVSemVJJnEhYT5VaUNU
LWNabGUKejZqJHF0YHdDO1NlTCN6Yz47b0Veb3UxV3JPM1VmPysyQ0M1YXZhZFF5dmlfX0pmTz1y
SXR0Wk9lQDlGNDleM2t5CnozNUwyX0hNZyF4dDdfZWI/IXA8amVjQmc4YzV8bXduWUI0MXJSUzsl
a0U0bXomQzJpXiYkXnQ1OSNGcVY0SmBIMQp6T30/QWghNTQqUTBmTVU2OVM5JDkpPWpEdlReKzlg
VyEyTU81dyUqeCVXclBoND1FZ1RjPik2aXcyLVNoQ0dfPTcKemNFZ3FgQyo0bjJtQWBQQDUpenBZ
K0JzKzFeOXtaKXhkVSR2KCE1YytWRHBvI3l3Q0MjYHRiJT14cHRBKlk8TlluCnp6cGwrey1GfDh9
K1RBeDtkfFVKYzFfdkZ0aDF5Yyh3QiVeSEdtTyNobmc0OXB8NTY4PmlBU1Q+e2gwVWZtZTxUdAp6
clJKPF56Zms3IWItbVEkd3l0RUMxI1pfejNxRzVtMGg/SDZFQl50WWJZeUR0U3FHKU8/JnczMlNe
TTQ+RUckdF4KenBzJFk+S2VXNExJY3hidGEyJUF6VmNPfTUpeXI3PlVNMXVmY2x4WS1eMyo4Uy0w
Xn13ZSFfYHRoX0o4Tkh2aGxeCnowU0dfPDB1WD16MVJ3d2IydFdWPTVPfHBkJldrU0VmMEdaMUQ8
eV5mTmVAcDV7Qyg5Jl82dnUzZWF8bn50VzNFMAp6aXY0OG5jVU12cXxMfG9fYUxHSlNCQFF7KUk/
aX41SU9CRjQ+V0ZodGViZmVWUjRhfShzNHVjXzM0NnFUO3ZaTmIKejAwOVU8MDBJenowMGJaYTBT
R188MHVYb3MxcEVeMXIhfXVCTD8rNG9eenJLa3BfaX1BbUclOGVZeTk4RVA4MFM2CnpgO3ZYa0Y3
cVQ3MnRXVj01UCQjI0FPSGFmS21ZO3xmQiohenopNj18clhsTXdgIVhOJUNrOUVBNFdnND5HUzdl
Uwp6ayV7Vyl7e0V6UkxVTDFDd2UjfGMwQXo8fkJ0YE4oLSpgMF9JVlNgfnc9RENCalJRS2U0aFZL
WW5lV15nUF58e3MKenBCJCFrSmheZWErTUwkLXpsK0A+Pn1VMWB5VCFnP3BZUlA+QU9IYWZLbVk7
fGZCKnlfMDA5VTwwMEkjQi12bk0wCnpMcnRGZUN5NDhxc1BacUprTkQkNllGPWlYaD5nbXFNQ2NQ
a1AyVTdxPE55MzB7bGZ3UTJ0V1Y9NVAkIyNBT0hhZgp6S21ZO3xmSXRUZTtRN0NVND0kUHAwU0df
PDB1WD16MVJ3d2IydFdWPTVHVl4rXlp6bWFrTH5+ZzJ0V1Y9NVAkIyMKekFPSGFmS21ZO3w9eGhO
enw5QUhCTWU4NXswU0dfPDB1WD16MVJ3d2IydFdWPW1WaDw/VXQpSSZgLU9lWUtIfnsyCno1UCQj
I0FPSGFmS21ZO3xmQip5XzAwOVUqNH1xaFNJS34jVi1UMnh5ZWNmQyNHZyY8e3N+IT0+NWpMeHQr
TTFUcgp6Rlk0S3hreDhvfmY7YnFpWT5hN0pkZDRvM3YmdENoJkNGUFNgJHxeWig4bytZWEM5JEUh
aCZ2VTgkMyFTZjtJangKenYzckY1JG5MWHk/QVBiZks8b25vNVAkIyNBT0hhZkttWTt8ZkIqeV8w
RCVKcWoqNFRue2BHKSNMPiFAJjdYanNHCnpkKGtmclI8fkklMlpZMW9oK092cXojOUotbV9nV0F7
MStBb0ttWTt8ZkIqeV8wMDlVPDAwSXp6MDBqUDx6PUdmPQp6Plc9S3koaSF1cm9+Oz8mVSl4UkBJ
ckclMUAySFM4X3FLSUVAcGhPME0/T2wrSX5ENzhldDM/JCRwODttOHR9SSMKejJ8UUNBWXk0a2Vl
LVFRO3xBaHF0NVAkIyNBT0hhZkttWTt8ZkIqeV8wRCVxP2FFWCkoZispJno+R31Ud1ZHcjEmCno0
cihCcDBzI20+MDBJenowMGJaYTBTR188MHVYcGYxZGZSK2VSOHNhJj9ecWVISW9MY2BUdF8/Wi1q
bHk7YHs+KAp6MVJ3d2IydFdWPTVQJCMjQU9IYWZLJWkzdS1WP3BAPiRMRU8qSzRGVl54YilWUHBD
fHR8REZuPldLWTdzbUB+NlIKemBpaF5mUjVFI2VoaE9iMDhDMGpgeVhzNiVCbjItRyRjMHpEVVNV
VHw8QEZZVW0rY0pnTUQ0I3NkNXpgVDhuPWwxCnpiUVNpby19KElpaGxEKzNmN1VleXN9Tyh5MVJ3
d2IydFdWPTVQJCMjQU9IYWZ5cUUlI0IrNjlhYiQxYm98ME11Zgp6PTtEOXZVKko+ISome3N2em5G
Jjx3VDF1JEFPSGFmS21ZO3xmQip5XzAwOVV6NVVeZVZOUE41WF8paTdiemQ/SCYKQXBhMXs+Cgps
aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLmh0bWwgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3Jh
ZGVUb1YyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE2ZmU3YWVlNGZjYWU3NTZlMTlkYmJlNmExMmRlOGQ5
MWE0YjM5OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbApAQCAtMCwwICsxLDM4
IEBACis8c2NyaXB0PgorCit2YXIgZGF0YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlaW5mby11cGdy
YWRlLXRlc3QiOwordmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1l
KTsKK3ZhciBkYjsKK29wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1l
c3NhZ2UoIlVuZXhwZWN0ZWQgdXBncmFkZSBuZWVkZWQiKTsKK30KKworb3BlblJlcXVlc3Qub25z
dWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5k
bGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiU3VjY2VzcyIpOworICAgIHZhciB0cmFuc2Fj
dGlvbiA9IGV2ZW50LnRhcmdldC5yZXN1bHQudHJhbnNhY3Rpb24oWydvYmplY3RTdG9yZScsICdh
bm90aGVyT2JqZWN0U3RvcmUnXSk7CisgICAgdmFyIGluZGV4Q291bnQgPSB0cmFuc2FjdGlvbi5v
YmplY3RTdG9yZSgnb2JqZWN0U3RvcmUnKS5pbmRleE5hbWVzOworICAgIGlmIChpbmRleGVzLmxl
bmd0aCAhPSAyKQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFu
ZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBjb3VudCBvZiBpbmRleGVzIGluIG9iamVjdFN0
b3JlICdvYmplY3RTdG9yZSc6ICIgKyBpbmRleGVzLmxlbmd0aCk7CisgICAgCisgICAgaW5kZXhD
b3VudCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdhbm90aGVyT2JqZWN0U3RvcmUnKS5pbmRl
eE5hbWVzOworICAgIGlmIChpbmRleGVzLmxlbmd0aCAhPSAxKQorICAgICAgICB3aW5kb3cud2Vi
a2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBj
b3VudCBvZiBpbmRleGVzIGluIG9iamVjdFN0b3JlICdhbm90aGVyT2JqZWN0U3RvcmUnOiAiICsg
aW5kZXhlcy5sZW5ndGgpOworCisgICAgcmVxID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ29i
amVjdFN0b3JlJykuaW5kZXgoJ2luZGV4S2V5JykuZ2V0KCJpbmRleEtleTEiKTsKKyAgICByZXEu
b25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKHJlcS5yZXN1bHQudmFs
dWUgIT0gInZhbHVlMSIpCisgICAgICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVy
cy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBnZXQgcmVzdWx0OiAiICsgIHJl
cS5yZXN1bHQudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3aW5kb3cud2Via2l0
Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiU3VjY2VzcyIpOworICAg
IH0KKyAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHdpbmRvdy53
ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJVbmV4cGVjdGVk
IGdldCByZXN1bHQ6ICIgKyAgcmVxLnJlc3VsdC52YWx1ZSk7CisgICAgfQorfQorCitvcGVuUmVx
dWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1lc3Nh
Z2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBvcGVuIGVycm9y
Iik7Cit9CisKKzwvc2NyaXB0PgorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
VG9WMi5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lZjFjMWU1MTM0MWNiMGMxZmMxMDU5YTM5ZjgxNWJhZDBjNjNk
ZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMCwwICsxLDgyIEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5o
IgorI2ltcG9ydCA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgorI2ltcG9ydCA8V2ViS2l0L19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHls
ZVNoZWV0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29sIHJlY2Vp
dmVkU2NyaXB0TWVzc2FnZTsKK3N0YXRpYyBSZXRhaW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0
U2NyaXB0TWVzc2FnZTsKKworQGludGVyZmFjZSBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
Mk1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3QgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMk1lc3NhZ2VI
YW5kbGVyCisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50Q29u
dHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZToo
V0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9
IHRydWU7CisgICAgbGFzdFNjcmlwdE1lc3NhZ2UgPSBtZXNzYWdlOworfQorQGVuZAorCitURVNU
KEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIpCit7CisgICAgUmV0YWlu
UHRyPElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyTWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIg
PSBhZG9wdE5TKFtbSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjJNZXNzYWdlSGFuZGxlciBh
bGxvY10gaW5pdF0pOworICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworCisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKworICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0U3RvcmVJbmZv
IHNjaGVtYSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgorICAgIE5TVVJMICp1cmwxID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdOworCisgICAgTlNTdHJpbmcgKmhhc2ggPSBXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpjb21wdXRlSGFzaEZvckZpbGVOYW1lKCJvYmplY3RzdG9yZWluZm8tdXBncmFk
ZS10ZXN0Iik7CisgICAgTlNTdHJpbmcgKm9yaWdpbkRpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dl
YktpdC9UZXN0V2ViS2l0QVBJL1dlYnNpdGVEYXRhL0luZGV4ZWREQi92MS9maWxlX18wLyI7Cisg
ICAgTlNTdHJpbmcgKmRhdGFiYXNlRGlyZWN0b3J5ID0gW1tvcmlnaW5EaXJlY3Rvcnkgc3RyaW5n
QnlBcHBlbmRpbmdTdHJpbmc6aGFzaF0gc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF07Cisg
ICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6ZGF0YWJhc2VEaXJl
Y3RvcnldOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0
VVJMOnRhcmdldFVSTCBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGFyZ2V0VVJMIHdpdGhJbnRlcm1lZGlhdGVEaXJl
Y3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKKworICAgIFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDp1cmwxIHRvVVJMOlt0YXJnZXRVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiSW5kZXhlZERCLnNxbGl0ZTMiXSBlcnJvcjpu
aWxdOworCisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBOU1VSTFJlcXVlc3QgKnJl
cXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMiIgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1d
OworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworCisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworCisgICAgRVhQRUNUX1dLX1NU
UkVRKEAiU3VjY2VzcyIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7Cit9CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDBmMDNmNTc5YTQ4ODFhOGQ2ZDk2NmEzMjhhOGY1NDBkN2Q3ODY2M2UuLjNiODU0MGNj
ZWM5MGI0Y2NlMDQ5NzhhNjNiODJiODNkYjJjMDlkMTIgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMjAtMDEtMTMgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW5kZXhlZERCOiBzcGVlZCB1cCBpbmRleCByZWNvcmRzIGRlbGV0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYxOTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEluZGV4ZWREQi9i
YXNpYy9pbmRleC1jdXJzb3ItZGVsZXRlLTIuaHRtbDogQWRkZWQuCisKIDIwMjAtMDEtMDggIFNp
aHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI0
MjkxMT8pOiBIaWdoIFNpZXJyYSBSZWxlYXNlIFdLMiBQZXJmIGJvdCB0aW1pbmcgb3V0IHdoaWxl
IHJ1bm5pbmcgSW5kZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1kZWxldGUt
Mi5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRl
bGV0ZS0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJmYmM1ZjM3NTUxYzk5ZTJiZjFiNmM2NWFhMTk4MGNi
MTU1ODViNwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jh
c2ljL2luZGV4LWN1cnNvci1kZWxldGUtMi5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVu
bmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9
IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDEwMDAwOworY29uc3QgbnVtYmVyT2ZJdGVtc1Rv
RGVsZXRlID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVh
ZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jdXJzb3ItZGVsZXRlLURCLTIi
OworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVu
Y3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3Ig
PSBudWxsOwordmFyIGRiID0gbnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZU
ZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0
aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9
IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1
bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7Cisg
ICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisK
K2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKwor
ZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhl
ZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQg
PSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Cisg
ICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScsIHsg
a2V5UGF0aDogJ3VuaXF1ZUluZGV4S2V5JyB9KTsKKyAgICAgICAgb2JqZWN0U3RvcmUuY3JlYXRl
SW5kZXgoJ3VuaXF1ZUluZGV4JywgJ3VuaXF1ZUluZGV4S2V5JywgeyB1bmlxdWU6IHRydWUgfSk7
CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleScpOwor
ICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxk
OworCisgICAgLy8gU3RvcmUgaXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0aW9uID0g
ZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9y
ZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQoeyB2YWx1
ZTogJ3ZhbHVlJywgdW5pcXVlSW5kZXhLZXk6ICJ1bmlxdWVJbmRleEtleSIgKyBpLCBpbmRleEtl
eTogImluZGV4IiArIChpJTIpIH0pOworCisgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7
CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIg
aW5kZXggPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUo
J3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgdmFyIGNvbXBsZXRlZERlbGV0ZXMgPSAwOwor
ICAgIGluZGV4Lm9wZW5DdXJzb3IoSURCS2V5UmFuZ2Uub25seSgnaW5kZXgxJykpLm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQu
cmVzdWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGN1cnNvci5kZWxldGUo
KS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlmICgrK2Nv
bXBsZXRlZERlbGV0ZXMgPT0gbnVtYmVyT2ZJdGVtc1RvRGVsZXRlKQorICAgICAgICAgICAgICAg
ICAgICBuZXh0U3RlcCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXJzb3IuY29u
dGludWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJm
VGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0
VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24s
IDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387694</attachid>
            <date>2020-01-14 13:21:53 -0800</date>
            <delta_ts>2020-01-17 12:47:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206196-20200114132153.patch</filename>
            <type>text/plain</type>
            <size>60565</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE3ZmE1OTQyOTljZDRj
MDAyM2M0YzMxYjc2MGZlZTY3NzliODQ4OS4uNWMwZjc5MmZiYmQ2OTcwYmJjMGY5YzM5NmM2MDQx
ZmJlNmVkMDAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIwLTAxLTE0ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogc3BlZWQg
dXAgaW5kZXggcmVjb3JkcyBkZWxldGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIGEgZmV3IHRoaW5ncyB0byBhY2NlbGVy
YXRlIGRlbGV0aW9uIGZvciBpbmRleCByZWNvcmRzOgorICAgICAgICAxLiBtYWtlIGluZGV4SUQg
dW5pcXVlIGluIGRhdGFiYXNlIGluc3RlYWQgb2Ygb2JqZWN0U3RvcmUKKyAgICAgICAgMi4gY3Jl
YXRlIGFuIGluZGV4IG9uIEluZGV4UmVjb3JkcyB0YWJsZQorICAgICAgICAzLiBvcHRpbWl6ZSBz
b21lIFNRTGl0ZSBzdGF0ZW1lbnRzIHRvIHRha2UgYWR2YW50YWdlIG9mIDEgYW5kIDIKKworICAg
ICAgICBUZXN0OiBJbmRleGVkREIuSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIKKworICAg
ICAgICBNYWtlIHRlc3QgUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vy
c29yLWRlbGV0ZS0yLmh0bWwgNy41eCBmYXN0ZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRl
eCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdT
dG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6djFJbmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OnYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6djFPYmplY3RTdG9yZUluZm9TY2hlbWFBbHRl
cm5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjp2Mk9iamVjdFN0b3JlSW5mb1Nj
aGVtYSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OnYyT2JqZWN0U3RvcmVJbmZvU2No
ZW1hQWx0ZXJuYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVBbmRQb3B1
bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJh
Y3RFeGlzdGluZ0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkSGFzSW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNv
cmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6
OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZEdldEluZGV4UmVjb3JkRm9yT25l
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVPbmVJbmRleFJlY29yZCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpidWlsZEluZGV4U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpiaW5kQXJndW1lbnRzKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUlu
ZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6SURCRGF0YWJhc2VJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6c2V0TWF4SW5kZXhJRCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VJbmZvOjpnZW5lcmF0ZU5leHRJbmRleElEKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlSW5mbzo6Y3JlYXRlTmV3SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVJbmZvOjphZGRFeGlzdGluZ0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlSW5mbzo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmg6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUluZm86OmF1dG9JbmNyZW1lbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVJbmZvOjptYXhJbmRleElEIGNvbnN0KTogRGVsZXRlZC4KKwogMjAyMC0wMS0x
NCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOZWVkIHdv
cmthcm91bmQgZm9yIGNyYXNoIGluIEludGVsIE9wZW5HTCBkcml2ZXIgcmVsYXRlZCB0byB0ZXh0
dXJlIGNvcHlpbmcgZmVlZGJhY2sgbG9vcHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5oCmluZGV4IGI0NTA5MWJjZjIxMmMwZWNlYWMwZmQ1MzhiMGVk
YmI1MDMwYTRiNjMuLmVjOTcyNTcxNDliYjFjNGU2YmNiM2QxMzM4Yjk0NTA4NzRkMTljZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaApAQCAt
ODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFt
ZSgpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgc3RvcCgpIGZpbmFsOwogCi0gICAgY29uc3QgSURC
RGF0YWJhc2VJbmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisgICAgSURCRGF0
YWJhc2VJbmZvJiBpbmZvKCkgeyByZXR1cm4gbV9pbmZvOyB9CiAgICAgdWludDY0X3QgZGF0YWJh
c2VDb25uZWN0aW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllcjsgfQogCiAgICAgUmVmPElEQlRyYW5zYWN0aW9uPiBzdGFydFZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mLCBJREJPcGVuREJSZXF1
ZXN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5jcHAKaW5kZXggMzEyNDQzNGE5ODk0NmMyZTJiMzUyOTEwMWI3ZDc4NzQ2ZWJiNWE2
MC4uMzAzNzFkYzFkYzlmNjI5NjQyMjA5MzM3NTE5MTEzNDVjNjBkYzM0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAt
NDc1LDcgKzQ3NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0CiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRl
SW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBrZXlQYXRoIGFyZ3VtZW50IHdhcyBhbiBh
cnJheSBhbmQgdGhlIG11bHRpRW50cnkgb3B0aW9uIGlzIHRydWUuIl9zIH07CiAKICAgICAvLyBJ
bnN0YWxsIHRoZSBuZXcgSW5kZXggaW50byB0aGUgT2JqZWN0U3RvcmUncyBpbmZvLgotICAgIElE
QkluZGV4SW5mbyBpbmZvID0gbV9pbmZvLmNyZWF0ZU5ld0luZGV4KG5hbWUsIFdURk1vdmUoa2V5
UGF0aCksIHBhcmFtZXRlcnMudW5pcXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOworICAgIElE
QkluZGV4SW5mbyBpbmZvID0gbV9pbmZvLmNyZWF0ZU5ld0luZGV4KG1fdHJhbnNhY3Rpb24uZGF0
YWJhc2UoKS5pbmZvKCkuZ2VuZXJhdGVOZXh0SW5kZXhJRCgpLCBuYW1lLCBXVEZNb3ZlKGtleVBh
dGgpLCBwYXJhbWV0ZXJzLnVuaXF1ZSwgcGFyYW1ldGVycy5tdWx0aUVudHJ5KTsKICAgICBtX3Ry
YW5zYWN0aW9uLmRhdGFiYXNlKCkuZGlkQ3JlYXRlSW5kZXhJbmZvKGluZm8pOwogCiAgICAgLy8g
Q3JlYXRlIHRoZSBhY3R1YWwgSURCT2JqZWN0U3RvcmUgZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdo
aWNoIGFsc28gc2NoZWR1bGVzIHRoZSBvcGVyYXRpb24gc2VydmVyIHNpZGUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2lu
Z1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDQzNTIyMjkyMDFjM2JkNzA1YmM2YmU4YzBkOGY0
NzQ5OGUxMGFkNjQuLjQwMWNlM2QyYjE2MWJhZDNlNzkzOTc3MTdlZDVlMjg4NzcwNDI2MmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJ
REJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIE1lbW9y
eUlEQkJhY2tpbmdTdG9yZTo6fk1lbW9yeUlEQkJhY2tpbmdTdG9yZSgpID0gZGVmYXVsdDsKIElE
QkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8o
SURCRGF0YWJhc2VJbmZvJiBpbmZvKQogewogICAgIGlmICghbV9kYXRhYmFzZUluZm8pCi0gICAg
ICAgIG1fZGF0YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KG1faWRlbnRp
Zmllci5kYXRhYmFzZU5hbWUoKSwgMCk7CisgICAgICAgIG1fZGF0YWJhc2VJbmZvID0gbWFrZVVu
aXF1ZTxJREJEYXRhYmFzZUluZm8+KG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSwgMCwgMCk7
CiAKICAgICBpbmZvID0gKm1fZGF0YWJhc2VJbmZvOwogICAgIHJldHVybiBJREJFcnJvciB7IH07
CkBAIC0yMzYsOCArMjM2LDEwIEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAgIHJl
dHVybiBJREJFcnJvciB7IENvbnN0cmFpbnRFcnJvciB9OwogCiAgICAgYXV0byBlcnJvciA9IG9i
amVjdFN0b3JlLT5jcmVhdGVJbmRleCgqcmF3VHJhbnNhY3Rpb24sIGluZm8pOwotICAgIGlmIChl
cnJvci5pc051bGwoKSkKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgb2JqZWN0
U3RvcmVJbmZvLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOworICAgICAgICBtX2RhdGFiYXNlSW5m
by0+c2V0TWF4SW5kZXhJRChpbmZvLmlkZW50aWZpZXIoKSk7CisgICAgfQogCiAgICAgcmV0dXJu
IGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCBmY2M0ODFj
NWQ1ZjAzN2I1ODUyMDUzMTgyYWIyNzFiZDhiZGZmMjU2Li5mMTMyMGY3MThlMWUxMWM2ODk1N2Fm
YmRhN2IzNjU3YzVmMWQ2YzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApA
QCAtMTk1LDYgKzE5NSwxMiBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiB2MUluZGV4UmVjb3Jkc0lu
ZGV4U2NoZW1hKCkKICAgICByZXR1cm4gaW5kZXhSZWNvcmRzSW5kZXhTY2hlbWFTdHJpbmc7CiB9
CiAKK3N0YXRpYyBjb25zdCBTdHJpbmcmIHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXVEY6OlN0cmluZz4gaW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXhTY2hlbWFTdHJpbmcoIkNSRUFURSBJTkRFWCBJbmRleFJlY29yZHNSZWNvcmRJ
bmRleCBPTiBJbmRleFJlY29yZHMgKG9iamVjdFN0b3JlSUQsIG9iamVjdFN0b3JlUmVjb3JkSUQp
Iik7CisgICAgcmV0dXJuIGluZGV4UmVjb3Jkc1JlY29yZEluZGV4U2NoZW1hU3RyaW5nOworfQor
CiBzdGF0aWMgY29uc3QgU3RyaW5nIGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpCiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0
YWJsZU5hbWUsICIgKG9iamVjdFN0b3JlUm93IElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1Qg
RkFJTCwgYmxvYlVSTCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7CkBAIC0yMjks
NiArMjM1LDQwIEBAIHN0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0
ZXJuYXRlKCkKICAgICByZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmc7CiB9CiAKK3N0
YXRpYyBjb25zdCBTdHJpbmcgdjFPYmplY3RTdG9yZUluZm9TY2hlbWEoY29uc3QgU3RyaW5nJiB0
YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJs
ZU5hbWUsICIgKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbmFtZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBD
T05GTElDVCBGQUlMLCBhdXRvSW5jIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwg
bWF4SW5kZXhJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7Cit9CisKK3N0
YXRpYyBjb25zdCBTdHJpbmcmIHYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+IHYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hU3Ry
aW5nKHYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hKCJPYmplY3RTdG9yZUluZm8iKSk7CisgICAgcmV0
dXJuIHYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hU3RyaW5nOworfQorCitzdGF0aWMgY29uc3QgU3Ry
aW5nJiB2MU9iamVjdFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZSgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gdjFPYmplY3RTdG9yZUluZm9TY2hlbWFBbHRlcm5hdGVTdHJp
bmcodjFPYmplY3RTdG9yZUluZm9TY2hlbWEoIlwiT2JqZWN0U3RvcmVJbmZvXCIiKSk7CisgICAg
cmV0dXJuIHYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hQWx0ZXJuYXRlU3RyaW5nOworfQorCitzdGF0
aWMgY29uc3QgU3RyaW5nIHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJDUkVBVEUgVEFCTEUgIiwgdGFibGVO
YW1lLCAiIChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwg
VU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5hbWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBG
QUlMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwgT04gQ09O
RkxJQ1QgRkFJTCwgYXV0b0luYyBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7
Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcmIHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+IG9iamVjdFN0b3JlSW5mb1Nj
aGVtYVN0cmluZyh2Mk9iamVjdFN0b3JlSW5mb1NjaGVtYSgiT2JqZWN0U3RvcmVJbmZvIikpOwor
ICAgIHJldHVybiBvYmplY3RTdG9yZUluZm9TY2hlbWFTdHJpbmc7Cit9CisKK3N0YXRpYyBjb25z
dCBTdHJpbmcmIHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hQWx0ZXJuYXRlKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBvYmplY3RTdG9yZUluZm9TY2hlbWFBbHRlcm5hdGVT
dHJpbmcodjJPYmplY3RTdG9yZUluZm9TY2hlbWEoIlwiT2JqZWN0U3RvcmVJbmZvXCIiKSk7Cisg
ICAgcmV0dXJuIG9iamVjdFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZVN0cmluZzsKK30KKwogU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5KQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lv
bklEKQogICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCkBAIC01MjUsNiArNTY1LDQ2IEBA
IGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4
KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpl
bnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKK3sKKyAgICBBU1NFUlQobV9zcWxp
dGVEQik7CisgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKworICAgIFN0cmluZyBj
dXJyZW50U2NoZW1hOworICAgIHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgq
bV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0lu
ZGV4UmVjb3Jkc1JlY29yZEluZGV4JyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBh
cmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZElu
ZGV4IGluZGV4LiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisKKyAgICAgICAgaWYg
KHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgaWYgKCFtX3NxbGl0
ZURCLT5leGVjdXRlQ29tbWFuZCh2MUluZGV4UmVjb3Jkc1JlY29yZEluZGV4U2NoZW1hKCkpKSB7
CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIEluZGV4UmVjb3Jk
c1JlY29yZEluZGV4IGluZGV4IGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxh
c3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNo
IHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4LiIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9
IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDApOworICAgIH0KKworICAgIEFTU0VSVCghY3VycmVu
dFNjaGVtYS5pc0VtcHR5KCkpOworCisgICAgaWYgKGN1cnJlbnRTY2hlbWEgPT0gdjFJbmRleFJl
Y29yZHNSZWNvcmRJbmRleFNjaGVtYSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8oKQog
ewogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKQEAgLTUzNiw3ICs2MTYsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBv
cHVsYXRlSW5pdGlhbAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAo
IW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVJbmZv
IChpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVF
IE9OIENPTkZMSUNUIEZBSUwsIG5hbWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVO
SVFVRSBPTiBDT05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1Qg
RkFJTCwgYXV0b0luYyBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG1heEluZGV4
SUQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAgIGlmICghbV9z
cWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQodjJPYmplY3RTdG9yZUluZm9TY2hlbWEoKSkpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIE9iamVjdFN0b3JlSW5mbyB0YWJsZSBp
biBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtNTk0LDcgKzY3NCw2NSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0
YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlh
bAogICAgIH0KIAogICAgIC8vIFRoaXMgaW5pdGlhbCBkYXRhYmFzZSBpbmZvIG1hdGNoZXMgdGhl
IGRlZmF1bHQgdmFsdWVzIHdlIGp1c3QgcHV0IGludG8gdGhlIG1ldGFkYXRhIGRhdGFiYXNlLgot
ICAgIHJldHVybiBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFi
YXNlTmFtZSgpLCAwKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KG1f
aWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSwgMCwgMCk7Cit9CisKK09wdGlvbmFsPGJvb2w+IFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSgpCit7
CisgICAgQVNTRVJUKG1fc3FsaXRlREIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4o
KSk7CisKKyAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKKyAgICB7CisgICAgICAgIC8vIEZldGNo
IHRoZSBzY2hlbWEgZm9yIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4KKyAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFz
dGVyIFdIRVJFIHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIik7CisgICAgICAgIGlmIChzdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0
U3RvcmVJbmZvIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgfQorCisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwor
ICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRo
ZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRD
b2x1bW5UZXh0KDApOworICAgIH0KKworICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5
KCkpOworICAgIGlmIChjdXJyZW50U2NoZW1hID09IHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKCkg
fHwgY3VycmVudFNjaGVtYSA9PSB2Mk9iamVjdFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50U2NoZW1h
ID09IHYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hKCkgfHwgY3VycmVudFNjaGVtYSA9PSB2MU9iamVj
dFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZSgpKTsKKworICAgIC8vIERyb3AgY29sdW1uIG1heElu
ZGV4SUQgZnJvbSB0YWJsZS4KKyAgICBTUUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbigqbV9z
cWxpdGVEQik7CisgICAgdHJhbnNhY3Rpb24uYmVnaW4oKTsKKworICAgIGlmICghbV9zcWxpdGVE
Qi0+ZXhlY3V0ZUNvbW1hbmQodjJPYmplY3RTdG9yZUluZm9TY2hlbWEoIl9UZW1wX09iamVjdFN0
b3JlSW5mbyIpKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9y
YXJ5IE9iamVjdFN0b3JlSW5mbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0
ZUNvbW1hbmQoIklOU0VSVCBJTlRPIF9UZW1wX09iamVjdFN0b3JlSW5mbyAoaWQsIG5hbWUsIGtl
eVBhdGgsIGF1dG9JbmMpIFNFTEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luYyBGUk9NIE9i
amVjdFN0b3JlSW5mbyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IG1pZ3JhdGUg
ZXhpc3RpbmcgT2JqZWN0U3RvcmVJbmZvIGNvbnRlbnQgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21t
YW5kKCJEUk9QIFRBQkxFIE9iamVjdFN0b3JlSW5mbyIpKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGRyb3AgZXhpc3RpbmcgT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIs
IG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKCFtX3NxbGl0ZURC
LT5leGVjdXRlQ29tbWFuZCgiQUxURVIgVEFCTEUgX1RlbXBfT2JqZWN0U3RvcmVJbmZvIFJFTkFN
RSBUTyBPYmplY3RTdG9yZUluZm8iKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBy
ZW5hbWUgdGVtcG9yYXJ5IE9iamVjdFN0b3JlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwor
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJbmZvKCkKQEAg
LTYyOSwxMCArNzY3LDE2IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBhdXRvIGRhdGFiYXNlSW5mbyA9IG1ha2VVbmlxdWU8SURCRGF0YWJhc2VJbmZv
PihkYXRhYmFzZU5hbWUsIGRhdGFiYXNlVmVyc2lvbik7CisgICAgYXV0byBkYXRhYmFzZUluZm8g
PSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oZGF0YWJhc2VOYW1lLCBkYXRhYmFzZVZlcnNp
b24sIDApOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVWYWxpZE9iamVjdFN0b3JlSW5mb1Rh
YmxlKCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Ym9vbCBzaG91bGRVcGRhdGVJbmRleElEID0gcmVzdWx0LnZhbHVlKCk7CiAKICAgICB7Ci0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIGtl
eVBhdGgsIGF1dG9JbmMsIG1heEluZGV4SUQgRlJPTSBPYmplY3RTdG9yZUluZm87Il9zKTsKKyAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwgbmFtZSwg
a2V5UGF0aCwgYXV0b0luYyBGUk9NIE9iamVjdFN0b3JlSW5mbzsiX3MpOwogICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApAQCAtNjYzLDEwICs4MDcsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4g
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAg
fQogICAgIH0KIAorICAgIHVpbnQ2NF90IG1heEluZGV4SUQgPSAwOworICAgIEhhc2hNYXA8c3Rk
OjpwYWlyPHVpbnQ2NF90LCB1aW50NjRfdD4sIHVpbnQ2NF90PiBpbmRleElETWFwOwogICAgIHsK
ICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBpZCwgbmFt
ZSwgb2JqZWN0U3RvcmVJRCwga2V5UGF0aCwgaXNVbmlxdWUsIG11bHRpRW50cnkgRlJPTSBJbmRl
eEluZm87Il9zKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAg
ICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHJlY29yZHMgZnJvbSB0
aGUgSW5kZXhJbmZvIHRhYmxlLiIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIH0KIAogICAgICAgICBpbnQgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKICAgICAgICAgd2hpbGUg
KHJlc3VsdCA9PSBTUUxJVEVfUk9XKSB7CkBAIC02OTYsNyArODQ0LDEzIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0
aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgIGlmIChzaG91bGRVcGRhdGVJbmRleElEKSB7CisgICAgICAgICAg
ICAgICAgaW5kZXhJRE1hcC5zZXQoeyBvYmplY3RTdG9yZUlELCBpbmRleElEIH0sICsrbWF4SW5k
ZXhJRCk7CisgICAgICAgICAgICAgICAgaW5kZXhJRCA9IG1heEluZGV4SUQ7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0luZGV4KHsgaW5kZXhJ
RCwgb2JqZWN0U3RvcmVJRCwgaW5kZXhOYW1lLCBXVEZNb3ZlKGluZGV4S2V5UGF0aC52YWx1ZSgp
KSwgdW5pcXVlLCBtdWx0aUVudHJ5IH0pOworICAgICAgICAgICAgbWF4SW5kZXhJRCA9IG1heElu
ZGV4SUQgPCBpbmRleElEID8gaW5kZXhJRCA6IG1heEluZGV4SUQ7CiAKICAgICAgICAgICAgIHJl
c3VsdCA9IHNxbC5zdGVwKCk7CiAgICAgICAgIH0KQEAgLTcwNSw2ICs4NTksMzIgQEAgc3RkOjp1
bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2luZ1N0b3JlOjpleHRyYWN0
RXhpc3RpbmdEYXRhYmFzZUkKICAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0Y2hpbmcg
aW5kZXggaW5mbyBmcm9tIGRhdGFiYXNlIG9uIGRpc2siKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9CisgICAgICAgIGRhdGFiYXNlSW5mby0+c2V0TWF4SW5kZXhJRCht
YXhJbmRleElEKTsKKworICAgICAgICBpZiAoIXNob3VsZFVwZGF0ZUluZGV4SUQpCisgICAgICAg
ICAgICByZXR1cm4gZGF0YWJhc2VJbmZvOworCisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBp
bmRleElETWFwKSB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURC
LCAiVVBEQVRFIEluZGV4SW5mbyBTRVQgaWQgPSA/IFdIRVJFIGlkID0gPyBBTkQgb2JqZWN0U3Rv
cmVJRCA9ID87Il9zKTsKKyAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgZW50cnkudmFsdWUpICE9IFNR
TElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMiwgZW50cnkua2V5LnNl
Y29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgzLCBl
bnRyeS5rZXkuZmlyc3QpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0
byB1cGRhdGUgaWQgb2YgSW5kZXhJbmZvIHRhYmxlIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBy
ZWNvcmRTcWwoKm1fc3FsaXRlREIsICJVUERBVEUgSW5kZXhSZWNvcmRzIFNFVCBpbmRleElEID0g
PyBXSEVSRSBpbmRleElEID0gPyBBTkQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKTsKKyAgICAgICAg
ICAgIGlmIChyZWNvcmRTcWwucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAg
IHx8IHJlY29yZFNxbC5iaW5kSW50NjQoMSwgZW50cnkudmFsdWUpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgICAgIHx8IHJlY29yZFNxbC5iaW5kSW50NjQoMiwgZW50cnkua2V5LnNlY29uZCkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgcmVjb3JkU3FsLmJpbmRJbnQ2NCgzLCBl
bnRyeS5rZXkuZmlyc3QpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHJlY29yZFNx
bC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVu
YWJsZSB0byB1cGRhdGUgaW5kZXhJRCBvZiBJbmRleFJlY29yZHMgdGFibGUiKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0K
IAogICAgIHJldHVybiBkYXRhYmFzZUluZm87CkBAIC04MjMsNiArMTAwMywxMiBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRh
dGFiYXNlSW5mbyYgaW5mbwogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3Is
ICJFcnJvciBjcmVhdGluZyBvciBtaWdyYXRpbmcgSW5kZXggUmVjb3JkcyBpbmRleCBpbiBkYXRh
YmFzZSJfcyB9OwogICAgIH0KIAorICAgIGlmICghZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNv
cmRJbmRleCgpKSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0
aW5nIEluZGV4IFJlY29yZHMgc2Vjb25kIGluZGV4IGZvciBpbiBkYXRhYmFzZSIpOworICAgICAg
ICBjbG9zZVNRTGl0ZURCKCk7CisgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJv
ciwgIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHNlY29uZCBpbmRl
eCBpbiBkYXRhYmFzZSJfcyB9OworICAgIH0KKwogICAgIGlmICghZW5zdXJlVmFsaWRCbG9iVGFi
bGVzKCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBjcmVhdGluZyBvciBjb25maXJtaW5n
IEJsb2IgUmVjb3JkcyB0YWJsZXMgaW4gZGF0YWJhc2UiKTsKICAgICAgICAgY2xvc2VTUUxpdGVE
QigpOwpAQCAtOTUyLDEzICsxMTM4LDEyIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAg
fQogCiAgICAgewotICAgICAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVh
dGVPYmplY3RTdG9yZUluZm8sICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZUluZm8gVkFMVUVTICg/
LCA/LCA/LCA/LCA/KTsiX3MpOworICAgICAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQo
U1FMOjpDcmVhdGVPYmplY3RTdG9yZUluZm8sICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZUluZm8g
VkFMVUVTICg/LCA/LCA/LCA/KTsiX3MpOwogICAgICAgICBpZiAoIXNxbAogICAgICAgICAgICAg
fHwgc3FsLT5iaW5kSW50NjQoMSwgaW5mby5pZGVudGlmaWVyKCkpICE9IFNRTElURV9PSwogICAg
ICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgyLCBpbmZvLm5hbWUoKSkgIT0gU1FMSVRFX09LCiAg
ICAgICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDMsIGtleVBhdGhCbG9iLT5kYXRhKCksIGtleVBh
dGhCbG9iLT5zaXplKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
KDQsIGluZm8uYXV0b0luY3JlbWVudCgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNx
bC0+YmluZEludDY0KDUsIGluZm8ubWF4SW5kZXhJRCgpKSAhPSBTUUxJVEVfT0sKICAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBhZGQgb2JqZWN0IHN0b3JlICclcycgdG8gT2JqZWN0U3RvcmVJbmZvIHRh
YmxlICglaSkgLSAlcyIsIGluZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxh
c3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1
cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9y
ZSJfcyB9OwpAQCAtMTIyMyw2ICsxNDA4LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAg
ICBhdXRvKiBvYmplY3RTdG9yZSA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmpl
Y3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKICAgICBBU1NFUlQob2JqZWN0
U3RvcmUpOwogICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOworICAgIG1f
ZGF0YWJhc2VJbmZvLT5zZXRNYXhJbmRleElEKGluZm8uaWRlbnRpZmllcigpKTsKIAogICAgIHJl
dHVybiBJREJFcnJvciB7IH07CiB9CkBAIC0xMjM3LDExICsxNDIzLDEwIEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvCiAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIlVu
YWJsZSB0byBzZXJpYWxpemUgSURCS2V5IHRvIGNoZWNrIGZvciBpbmRleCByZWNvcmQgaW4gZGF0
YWJhc2UiX3MgfTsKICAgICB9CiAKLSAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FM
OjpIYXNJbmRleFJlY29yZCwgIlNFTEVDVCByb3dpZCBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBp
bmRleElEID0gPyBBTkQgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA9IENBU1QoPyBBUyBURVhU
KTsiX3MpOworICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6Okhhc0luZGV4UmVj
b3JkLCAiU0VMRUNUIHJvd2lkIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/IEFO
RCBrZXkgPSBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKICAgICBpZiAoIXNxbAogICAgICAgICB8fCBz
cWwtPmJpbmRJbnQ2NCgxLCBpbmZvLmlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNxbC0+YmluZEludDY0KDIsIGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDMsIGluZGV4S2V5QnVmZmVyLT5kYXRh
KCksIGluZGV4S2V5QnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9PSykgeworICAgICAgICB8fCBz
cWwtPmJpbmRCbG9iKDIsIGluZGV4S2V5QnVmZmVyLT5kYXRhKCksIGluZGV4S2V5QnVmZmVyLT5z
aXplKCkpICE9IFNRTElURV9PSykgewogICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNoZWNraW5n
IGZvciBpbmRleCByZWNvcmQgaW4gZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuIElEQkVycm9y
IHsgVW5rbm93bkVycm9yLCAiRXJyb3IgY2hlY2tpbmcgZm9yIGluZGV4IHJlY29yZCBpbiBkYXRh
YmFzZSJfcyB9OwogICAgIH0KQEAgLTEzNTksMTAgKzE1NDQsOSBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhYwogICAgIH0KIAogICAgIHsKLSAgICAgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6RGVsZXRlSW5kZXhSZWNvcmRzLCAiREVMRVRFIEZST00gSW5kZXhSZWNvcmRzIFdI
RVJFIGluZGV4SUQgPSA/IEFORCBvYmplY3RTdG9yZUlEID0gPzsiX3MpOworICAgICAgICBhdXRv
KiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpEZWxldGVJbmRleFJlY29yZHMsICJERUxFVEUg
RlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9ID87Il9zKTsKICAgICAgICAgaWYgKCFz
cWwKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZGV4SWRlbnRpZmllcikgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZUlk
ZW50aWZpZXIpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSBpbmRl
eCByZWNvcmRzIGZvciBpbmRleCBpZCAlIiBQUklpNjQgIiBmcm9tIEluZGV4UmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBpbmRleElkZW50aWZpZXIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBVbmtub3duRXJyb3IsICJFcnJvciBkZWxldGluZyBpbmRleCByZWNvcmRzIGZyb20gZGF0YWJh
c2UiX3MgfTsKQEAgLTE1ODIsNjEgKzE3NjYsMjEgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpkZWxldGVSZWNvcmQoU1FMaXRlSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLAog
ICAgIH0KIAogICAgIC8vIERlbGV0ZSByZWNvcmQgZnJvbSBpbmRleGVzIHN0b3JlCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2tlcihtX3NlcmlhbGl6YXRpb25Db250ZXh0LT52bSgpKTsKLSAgICBhdXRv
IGpzVmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKG1fc2VyaWFsaXphdGlvbkNv
bnRleHQtPmV4ZWNTdGF0ZSgpLCB2YWx1ZSk7Ci0gICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKLQotICAgIGZvciAoYXV0byYg
b2JqZWN0U3RvcmVJbmZvIDogbV9kYXRhYmFzZUluZm8tPm9iamVjdFN0b3JlTWFwKCkudmFsdWVz
KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBpbmRleEluZm8gOiBvYmplY3RTdG9yZUluZm8uaW5k
ZXhNYXAoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgSW5kZXhLZXkgaW5kZXhLZXk7Ci0gICAg
ICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+
ZXhlY1N0YXRlKCksIGluZGV4SW5mbywganNWYWx1ZSwgaW5kZXhLZXksIG9iamVjdFN0b3JlSW5m
by5rZXlQYXRoKCksIGtleURhdGEpOwotICAgICAgICAgICAgaWYgKGluZGV4S2V5LmlzTnVsbCgp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHsKKyAgICAgICAgYXV0byogc3FsID0g
Y2FjaGVkU3RhdGVtZW50KFNRTDo6RGVsZXRlT2JqZWN0U3RvcmVJbmRleFJlY29yZCwgIkRFTEVU
RSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQgb2JqZWN0U3Rv
cmVSZWNvcmRJRCA9ID87Il9zKTsKIAotICAgICAgICAgICAgaWYgKCFpbmRleEluZm8ubXVsdGlF
bnRyeSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBlcnJvciA9IGRlbGV0ZU9uZUluZGV4UmVj
b3JkKG9iamVjdFN0b3JlSUQsIHJlY29yZElELCBpbmRleEtleS5hc09uZUtleSgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWVycm9yLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3I7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhLZXlzID0gaW5kZXhLZXkubXVsdGlFbnRyeSgpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0
byYga2V5IDogaW5kZXhLZXlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBk
ZWxldGVPbmVJbmRleFJlY29yZChvYmplY3RTdG9yZUlELCByZWNvcmRJRCwga2V5KTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICB9CisgICAgICAgIGlmICghc3FsCisgICAgICAgICAgICB8fCBzcWwtPmJpbmRJ
bnQ2NCgxLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+
YmluZEludDY0KDIsIHJlY29yZElEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBkZWxldGUgcmVjb3JkIGZyb20gaW5kZXhlcyBmb3Igb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAi
ICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBV
bmtub3duRXJyb3IsICJGYWlsZWQgdG8gZGVsZXRlIGluZGV4IGVudHJpZXMgZm9yIG9iamVjdCBz
dG9yZSByZWNvcmQiX3MgfTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBJREJFcnJv
ciB7IH07CiB9CiAKLUlEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT25lSW5k
ZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IG9iamVjdFN0b3JlUmVjb3Jk
SUQsIGNvbnN0IElEQktleURhdGEmIGluZGV4S2V5KQotewotICAgIGlmICghaW5kZXhLZXkuaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwotCi0gICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gaW5kZXhLZXlCdWZmZXIgPSBzZXJpYWxpemVJREJLZXlEYXRhKGluZGV4S2V5KTsK
LSAgICBpZiAoIWluZGV4S2V5QnVmZmVyKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGRlbGV0ZSByZWNvcmQgZnJvbSBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgKENvdWxkIG5vdCBz
ZXJpYWxpemUgaW5kZXgga2V5KSIsIG9iamVjdFN0b3JlSUQpOwotICAgICAgICByZXR1cm4gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQgdG8gZGVsZXRlIGluZGV4IGVudHJpZXMgZm9y
IG9iamVjdCBzdG9yZSByZWNvcmQiX3MgfTsKLSAgICB9Ci0KLSAgICBhdXRvKiBzcWwgPSBjYWNo
ZWRTdGF0ZW1lbnQoU1FMOjpEZWxldGVPYmplY3RTdG9yZUluZGV4UmVjb3JkLCAiREVMRVRFIEZS
T00gSW5kZXhSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBvYmplY3RTdG9yZVJl
Y29yZElEID0gPyBBTkQga2V5ID0gQ0FTVCg/IEFTIFRFWFQpOyJfcyk7Ci0gICAgaWYgKCFzcWwK
LSAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMSVRFX09L
Ci0gICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIG9iamVjdFN0b3JlUmVjb3JkSUQpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDMsIGluZGV4S2V5QnVmZmVyLT5kYXRh
KCksIGluZGV4S2V5QnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzcWwt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBk
ZWxldGUgcmVjb3JkIGZyb20gaW5kZXhlcyBmb3Igb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiICgl
aSkgLSAlcyIsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25F
cnJvciwgIkZhaWxlZCB0byBkZWxldGUgaW5kZXggZW50cmllcyBmb3Igb2JqZWN0IHN0b3JlIHJl
Y29yZCJfcyB9OwotICAgIH0KLQotICAgIHJldHVybiBJREJFcnJvciB7IH07Ci19Ci0KIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQs
IGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmFuZ2UgLSByYW5nZSAlcywgb2JqZWN0IHN0
b3JlICUiIFBSSXU2NCwga2V5UmFuZ2UubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9i
amVjdFN0b3JlSUQpOwpAQCAtMTc0MSwxMyArMTg4NSwxMSBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0
U3RvcgogICAgIH0KIAogICAgIGlmICghZXJyb3IuaXNOdWxsKCkgJiYgYW55UmVjb3Jkc1N1Y2Nl
ZWRlZCkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlCdWZmZXIgPSBzZXJpYWxp
emVJREJLZXlEYXRhKGtleSk7Ci0KLSAgICAgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVtZW50
KFNRTDo6RGVsZXRlT2JqZWN0U3RvcmVJbmRleFJlY29yZCwgIkRFTEVURSBGUk9NIEluZGV4UmVj
b3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQgdmFsdWUgPSBDQVNUKD8gQVMgVEVYVCk7
Il9zKTsKKyAgICAgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6RGVsZXRlT2Jq
ZWN0U3RvcmVJbmRleFJlY29yZCwgIkRFTEVURSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBvYmpl
Y3RTdG9yZUlEID0gPyBBTkQgb2JqZWN0U3RvcmVSZWNvcmRJRCA9ID87Il9zKTsKIAogICAgICAg
ICBpZiAoIXNxbAogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgaW5mby5pZGVudGlm
aWVyKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYigyLCBrZXlC
dWZmZXItPmRhdGEoKSwga2V5QnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgcmVjb3JkSUQpICE9IFNRTElURV9PSwogICAgICAgICAg
ICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiQWRkaW5nIG9uZSBJbmRleCByZWNvcmQgZmFpbGVkLCBidXQgZmFpbGVkIHRvIHJlbW92ZSBh
bGwgb3RoZXJzIHRoYXQgcHJldmlvdXNseSBzdWNjZWVkZWQiKTsKICAgICAgICAgICAgIHJldHVy
biBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkFkZGluZyBvbmUgSW5kZXggcmVjb3JkIGZhaWxl
ZCwgYnV0IGZhaWxlZCB0byByZW1vdmUgYWxsIG90aGVycyB0aGF0IHByZXZpb3VzbHkgc3VjY2Vl
ZGVkIl9zIH07CkBAIC0yMjg2LDEyICsyNDI4LDExIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6dW5jaGVja2VkR2V0SW5kZXhSZWNvcmRGb3JPbmVLZXkoaW50NjRfdCBpbmRleElE
CiAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIlVuYWJsZSB0byBzZXJp
YWxpemUgSURCS2V5IHRvIGxvb2sgdXAgb25lIGluZGV4IHJlY29yZCJfcyB9OwogICAgIH0KIAot
ICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEluZGV4UmVjb3JkRm9yT25l
S2V5LCAiU0VMRUNUIEluZGV4UmVjb3Jkcy52YWx1ZSwgUmVjb3Jkcy52YWx1ZSwgUmVjb3Jkcy5y
ZWNvcmRJRCBGUk9NIFJlY29yZHMgSU5ORVIgSk9JTiBJbmRleFJlY29yZHMgT04gUmVjb3Jkcy5y
ZWNvcmRJRCA9IEluZGV4UmVjb3Jkcy5vYmplY3RTdG9yZVJlY29yZElEIFdIRVJFIEluZGV4UmVj
b3Jkcy5pbmRleElEID0gPyBBTkQgSW5kZXhSZWNvcmRzLm9iamVjdFN0b3JlSUQgPSA/IEFORCBJ
bmRleFJlY29yZHMua2V5ID0gQ0FTVCg/IEFTIFRFWFQpIE9SREVSIEJZIEluZGV4UmVjb3Jkcy5r
ZXksIEluZGV4UmVjb3Jkcy52YWx1ZSJfcyk7CisgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6R2V0SW5kZXhSZWNvcmRGb3JPbmVLZXksICJTRUxFQ1QgSW5kZXhSZWNvcmRzLnZh
bHVlLCBSZWNvcmRzLnZhbHVlLCBSZWNvcmRzLnJlY29yZElEIEZST00gUmVjb3JkcyBJTk5FUiBK
T0lOIEluZGV4UmVjb3JkcyBPTiBSZWNvcmRzLm9iamVjdFN0b3JlSUQgPSBJbmRleFJlY29yZHMu
b2JqZWN0U3RvcmVJRCBBTkQgUmVjb3Jkcy5yZWNvcmRJRCA9IEluZGV4UmVjb3Jkcy5vYmplY3RT
dG9yZVJlY29yZElEIFdIRVJFIEluZGV4UmVjb3Jkcy5pbmRleElEID0gPyBBTkQgSW5kZXhSZWNv
cmRzLmtleSA9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBJbmRleFJlY29yZHMua2V5LCBJbmRl
eFJlY29yZHMudmFsdWUiX3MpOwogCiAgICAgaWYgKCFzcWwKICAgICAgICAgfHwgc3FsLT5iaW5k
SW50NjQoMSwgaW5kZXhJRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNxbC0+YmluZEludDY0
KDIsIG9iamVjdFN0b3JlSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzcWwtPmJpbmRCbG9i
KDMsIGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIHx8IHNxbC0+YmluZEJsb2IoMiwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSAh
PSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gbG9va3VwIGluZGV4
IHJlY29yZCBpbiBkYXRhYmFzZSIpOwogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsICJVbmFibGUgdG8gbG9va3VwIGluZGV4IHJlY29yZCBpbiBkYXRhYmFzZSJfcyB9Owog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCA3NWY3ZThkNDA1YjI1YTIx
MTMwZGNmMmEwNmUwNzUyMmQ5NjMwM2JiLi4wYzJhOTc1ZjZiYzgwZTI0ZDNjZTc5Y2I1ZmRkNGVl
ZGFmYzAzNDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC0xMTEsMTIgKzEx
MSwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKTsKICAg
ICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKICAgICBib29sIGVuc3VyZVZh
bGlkSW5kZXhSZWNvcmRzSW5kZXgoKTsKKyAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
UmVjb3JkSW5kZXgoKTsKICAgICBib29sIGVuc3VyZVZhbGlkQmxvYlRhYmxlcygpOworICAgIE9w
dGlvbmFsPGJvb2w+IGVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFibGUoKTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRh
YmFzZUluZm8oKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBleHRyYWN0
RXhpc3RpbmdEYXRhYmFzZUluZm8oKTsKIAogICAgIElEQkVycm9yIGRlbGV0ZVJlY29yZChTUUxp
dGVJREJUcmFuc2FjdGlvbiYsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCS2V5RGF0
YSYpOwotICAgIElEQkVycm9yIGRlbGV0ZU9uZUluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgaW50NjRfdCBvYmplY3RTdG9yZVJlY29yZElELCBjb25zdCBJREJLZXlEYXRhJik7CiAg
ICAgSURCRXJyb3IgdW5jaGVja2VkR2V0S2V5R2VuZXJhdG9yVmFsdWUoaW50NjRfdCBvYmplY3RT
dG9yZUlELCB1aW50NjRfdCYgb3V0VmFsdWUpOwogICAgIElEQkVycm9yIHVuY2hlY2tlZFNldEtl
eUdlbmVyYXRvclZhbHVlKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QgdmFsdWUpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IDkwYzBhZDNiMmE2OGVkZDBhZmIwOGUzNDhjMmIw
ZDI5MmIyYjQ4YjUuLjIxZGZmODRmNzVmYTRiNTk2NDU1YzZmZTZjNmQxNTUzYTgyOWY4YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJDdXJzb3IuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIFN0cmluZyBi
dWlsZEluZGV4U3RhdGVtZW50KGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UsIEluZGV4
ZWREQjo6Q3UKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAKLSAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIlNFTEVDVCByb3dpZCwga2V5LCB2YWx1ZSBGUk9NIEluZGV4UmVjb3JkcyBX
SEVSRSBpbmRleElEID0gPyBBTkQgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSAiKTsKKyAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlNFTEVDVCByb3dpZCwga2V5LCB2YWx1ZSBGUk9NIEluZGV4
UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ICIpOwogICAgIGlmICgha2V5UmFuZ2Uu
bG93ZXJLZXkuaXNOdWxsKCkgJiYgIWtleVJhbmdlLmxvd2VyT3BlbikKICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCI+PSIpOwogICAgIGVsc2UKQEAgLTI4OSwxMSArMjg5LDYgQEAgYm9v
bCBTUUxpdGVJREJDdXJzb3I6OmJpbmRBcmd1bWVudHMoKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgaWYgKG1faW5kZXhJRCAhPSBJREJJbmRleEluZm86OkludmFsaWRJZCAm
JiBtX3N0YXRlbWVudC0+YmluZEludDY0KGN1cnJlbnRCaW5kQXJndW1lbnQrKywgbV9vYmplY3RT
dG9yZUlEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYmlu
ZCBvYmplY3Qgc3RvcmUgaWQgYXJndW1lbnQgZm9yIGFuIGluZGV4IGN1cnNvciIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVy
ID0gc2VyaWFsaXplSURCS2V5RGF0YShtX2N1cnJlbnRMb3dlcktleSk7CiAgICAgaWYgKG1fc3Rh
dGVtZW50LT5iaW5kQmxvYihjdXJyZW50QmluZEFyZ3VtZW50KyssIGJ1ZmZlci0+ZGF0YSgpLCBi
dWZmZXItPnNpemUoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChsb3dlciBrZXkpIik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcAppbmRleCBiNzJiNjM3YjE3ZmRjMDM2MjNmMWE3YTQyYjI3YmE0NGNlZjVlZmUw
Li5hMGEwNTE2ZjZmYmNjNGU2ODBmYzJjOWE3ZjA0ODc5MjM1NTNjZGRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJ
REJEYXRhYmFzZS5jcHAKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNl
OjpkaWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCiAgICAgLy8g
d2Ugd29uJ3QgaGF2ZSBhIG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm8uIEluIHRoYXQg
Y2FzZSwgd2UnbGwgbWFudWZhY3R1cmUgb25lIHVzaW5nIHRoZQogICAgIC8vIHBhc3NlZCBpbiBk
ZWxldGVkVmVyc2lvbiBhcmd1bWVudC4KICAgICBpZiAoIW1fbW9zdFJlY2VudERlbGV0ZWREYXRh
YmFzZUluZm8pCi0gICAgICAgIG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm8gPSBtYWtl
VW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLCBkZWxl
dGVkVmVyc2lvbik7CisgICAgICAgIG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm8gPSBt
YWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLCBk
ZWxldGVkVmVyc2lvbiwgMCk7CiAKICAgICBpZiAobV9jdXJyZW50T3BlbkRCUmVxdWVzdCkgewog
ICAgICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5ub3RpZnlEaWREZWxldGVEYXRhYmFzZSgq
bV9tb3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5mbyk7CkBAIC02MzMsNiArNjMzLDcgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIGMKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9k
YXRhYmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKCkpOwogICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKICAgICAgICAg
b2JqZWN0U3RvcmVJbmZvLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOworICAgICAgICBtX2RhdGFi
YXNlSW5mby0+c2V0TWF4SW5kZXhJRChpbmZvLmlkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAg
Y2FsbGJhY2soZXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcAppbmRleCBlYTMxMmNjYjdkY2Iz
YTg5MzAwOTFmZjUwZDA4NjM0Y2VkZDcxZDJhLi44NjAzZmU2NmIwNWQ2YzQ1MjYzMWE3ZDI1OTI2
YzJkMDg3YjkwNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcApAQCAtMzYsOSArMzYsMTAgQEAg
SURCRGF0YWJhc2VJbmZvOjpJREJEYXRhYmFzZUluZm8oKQogewogfQogCi1JREJEYXRhYmFzZUlu
Zm86OklEQkRhdGFiYXNlSW5mbyhjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24p
CitJREJEYXRhYmFzZUluZm86OklEQkRhdGFiYXNlSW5mbyhjb25zdCBTdHJpbmcmIG5hbWUsIHVp
bnQ2NF90IHZlcnNpb24sIHVpbnQ2NF90IG1heEluZGV4SUQpCiAgICAgOiBtX25hbWUobmFtZSkK
ICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICwgbV9tYXhJbmRleElEKG1heEluZGV4SUQp
CiB7CiB9CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgSURCRGF0YWJhc2VJbmZvOjpJREJEYXRhYmFzZUlu
Zm8oY29uc3QgSURCRGF0YWJhc2VJbmZvJiBvdGhlciwgSXNvbGF0ZWRDb3B5VGFnKQogICAgIDog
bV9uYW1lKG90aGVyLm1fbmFtZS5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fdmVyc2lvbihvdGhl
ci5tX3ZlcnNpb24pCiAgICAgLCBtX21heE9iamVjdFN0b3JlSUQob3RoZXIubV9tYXhPYmplY3RT
dG9yZUlEKQorICAgICwgbV9tYXhJbmRleElEKG90aGVyLm1fbWF4SW5kZXhJRCkKIHsKICAgICBm
b3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogb3RoZXIubV9vYmplY3RTdG9yZU1hcCkKICAgICAgICAg
bV9vYmplY3RTdG9yZU1hcC5zZXQoZW50cnkua2V5LCBlbnRyeS52YWx1ZS5pc29sYXRlZENvcHko
KSk7CkBAIC0xNjgsNiArMTcwLDEyIEBAIFN0cmluZyBJREJEYXRhYmFzZUluZm86OmxvZ2dpbmdT
dHJpbmcoKSBjb25zdAogCiAjZW5kaWYKIAordm9pZCBJREJEYXRhYmFzZUluZm86OnNldE1heElu
ZGV4SUQodWludDY0X3QgbWF4SW5kZXhJRCkKK3sKKyAgICBBU1NFUlQobWF4SW5kZXhJRCA+IG1f
bWF4SW5kZXhJRCB8fCAoIW1heEluZGV4SUQgJiYgIW1fbWF4SW5kZXhJRCkpOworICAgIG1fbWF4
SW5kZXhJRCA9IG1heEluZGV4SUQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oCmluZGV4IDgy
MzViYjg4YzMzMmQ3N2UzYThlNDU1MmEzYmJmYTBhOTBiMGY1NjYuLmUyZTE1MmFmYjdjYzQzYjcz
NWRhMmNjMjQ4NWE3MmYxMzAwMDgzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKQEAgLTM1LDcgKzM1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCRGF0YWJhc2VJbmZvIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJREJEYXRhYmFz
ZUluZm8oY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uKTsKKyAgICBleHBsaWNp
dCBJREJEYXRhYmFzZUluZm8oY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uLCB1
aW50NjRfdCBtYXhJbmRleElEKTsKIAogICAgIGVudW0gSXNvbGF0ZWRDb3B5VGFnIHsgSXNvbGF0
ZWRDb3B5IH07CiAgICAgSURCRGF0YWJhc2VJbmZvKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIElz
b2xhdGVkQ29weVRhZyk7CkBAIC02OCw2ICs2OCw5IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBJREJEYXRhYmFzZUlu
Zm8mKTsKIAorICAgIHZvaWQgc2V0TWF4SW5kZXhJRCh1aW50NjRfdCBtYXhJbmRleElEKTsKKyAg
ICB1aW50NjRfdCBnZW5lcmF0ZU5leHRJbmRleElEKCkgeyByZXR1cm4gKyttX21heEluZGV4SUQ7
IH0KKwogI2lmICFMT0dfRElTQUJMRUQKICAgICBTdHJpbmcgbG9nZ2luZ1N0cmluZygpIGNvbnN0
OwogI2VuZGlmCkBAIC03OSw2ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsK
ICAgICB1aW50NjRfdCBtX3ZlcnNpb24geyAwIH07CiAgICAgdWludDY0X3QgbV9tYXhPYmplY3RT
dG9yZUlEIHsgMCB9OworICAgIHVpbnQ2NF90IG1fbWF4SW5kZXhJRCB7IDAgfTsKIAogICAgIEhh
c2hNYXA8dWludDY0X3QsIElEQk9iamVjdFN0b3JlSW5mbz4gbV9vYmplY3RTdG9yZU1hcDsKIApA
QCAtODcsNyArOTEsNyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQg
SURCRGF0YWJhc2VJbmZvOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBl
bmNvZGVyIDw8IG1fbmFtZSA8PCBtX3ZlcnNpb24gPDwgbV9tYXhPYmplY3RTdG9yZUlEIDw8IG1f
b2JqZWN0U3RvcmVNYXA7CisgICAgZW5jb2RlciA8PCBtX25hbWUgPDwgbV92ZXJzaW9uIDw8IG1f
bWF4T2JqZWN0U3RvcmVJRCA8PCBtX21heEluZGV4SUQgPDwgbV9vYmplY3RTdG9yZU1hcDsKIH0K
IAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTEwMiw2ICsxMDYsOSBAQCBib29sIElEQkRh
dGFiYXNlSW5mbzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElEQkRhdGFiYXNlSW5mbyYgaW5m
bykKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9tYXhPYmplY3RTdG9yZUlEKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fbWF4
SW5kZXhJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaW5mby5tX29iamVjdFN0b3JlTWFwKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0
U3RvcmVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJPYmplY3RTdG9yZUluZm8uY3BwCmluZGV4IDVjNzI4MmE0NjM4ZWI0ZTY3MWM1M2YxYzVmZGNm
MmFmMjcyZWFjNTUuLjRlYWQzOGJmYmM5MTE3ODlkYjI1NzY4OWM2NWUwMjhhZWRmY2FjNTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmpl
Y3RTdG9yZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJPYmplY3RTdG9yZUluZm8uY3BwCkBAIC00Myw5ICs0Myw5IEBAIElEQk9iamVjdFN0
b3JlSW5mbzo6SURCT2JqZWN0U3RvcmVJbmZvKHVpbnQ2NF90IGlkZW50aWZpZXIsIGNvbnN0IFN0
cmluZyYgbmFtZSwKIHsKIH0KIAotSURCSW5kZXhJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6Y3Jl
YXRlTmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJLZXlQYXRoJiYga2V5UGF0aCwgYm9v
bCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKK0lEQkluZGV4SW5mbyBJREJPYmplY3RTdG9yZUlu
Zm86OmNyZWF0ZU5ld0luZGV4KHVpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCS2V5UGF0aCYmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCiB7Ci0g
ICAgSURCSW5kZXhJbmZvIGluZm8oKyttX21heEluZGV4SUQsIG1faWRlbnRpZmllciwgbmFtZSwg
V1RGTW92ZShrZXlQYXRoKSwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAgICBJREJJbmRleEluZm8g
aW5mbyhpbmRleElELCBtX2lkZW50aWZpZXIsIG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHVuaXF1
ZSwgbXVsdGlFbnRyeSk7CiAgICAgbV9pbmRleE1hcC5zZXQoaW5mby5pZGVudGlmaWVyKCksIGlu
Zm8pOwogICAgIHJldHVybiBpbmZvOwogfQpAQCAtNTQsOSArNTQsNiBAQCB2b2lkIElEQk9iamVj
dFN0b3JlSW5mbzo6YWRkRXhpc3RpbmdJbmRleChjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7
CiAgICAgQVNTRVJUKCFtX2luZGV4TWFwLmNvbnRhaW5zKGluZm8uaWRlbnRpZmllcigpKSk7CiAK
LSAgICBpZiAoaW5mby5pZGVudGlmaWVyKCkgPiBtX21heEluZGV4SUQpCi0gICAgICAgIG1fbWF4
SW5kZXhJRCA9IGluZm8uaWRlbnRpZmllcigpOwotCiAgICAgbV9pbmRleE1hcC5zZXQoaW5mby5p
ZGVudGlmaWVyKCksIGluZm8pOwogfQogCkBAIC0xMDEsOCArOTgsNiBAQCBJREJPYmplY3RTdG9y
ZUluZm8gSURCT2JqZWN0U3RvcmVJbmZvOjppc29sYXRlZENvcHkoKSBjb25zdAogICAgIGZvciAo
YXV0byYgaXRlcmF0b3IgOiBtX2luZGV4TWFwKQogICAgICAgICByZXN1bHQubV9pbmRleE1hcC5z
ZXQoaXRlcmF0b3Iua2V5LCBpdGVyYXRvci52YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAKLSAgICBy
ZXN1bHQubV9tYXhJbmRleElEID0gbV9tYXhJbmRleElEOwotCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQk9iamVjdFN0b3JlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5oCmluZGV4IGRjZTk1YmUxOWE3NzYxZmQzM2E0MDc0
NjEyYzlmZmMzZDhiMTg2OTguLjE3ZmU0MjJiYTQ1OGViMTY4YzFlNWFkOTA4Y2FmZTc3MmM3NDc2
MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9J
REJPYmplY3RTdG9yZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmgKQEAgLTQzLDEzICs0MywxMiBAQCBwdWJsaWM6
CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAg
Y29uc3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2tl
eVBhdGg7IH0KICAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9J
bmNyZW1lbnQ7IH0KLSAgICB1aW50NjRfdCBtYXhJbmRleElEKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhJbmRleElEOyB9CiAKICAgICB2b2lkIHJlbmFtZShjb25zdCBTdHJpbmcmIG5ld05hbWUpIHsg
bV9uYW1lID0gbmV3TmFtZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgSURCT2JqZWN0U3RvcmVJ
bmZvIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCi0gICAgSURCSW5kZXhJbmZvIGNyZWF0ZU5ld0lu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aCYmLCBib29sIHVuaXF1ZSwgYm9vbCBt
dWx0aUVudHJ5KTsKKyAgICBJREJJbmRleEluZm8gY3JlYXRlTmV3SW5kZXgodWludDY0X3QgaW5k
ZXhJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJLZXlQYXRoJiYsIGJvb2wgdW5pcXVlLCBib29s
IG11bHRpRW50cnkpOwogICAgIHZvaWQgYWRkRXhpc3RpbmdJbmRleChjb25zdCBJREJJbmRleElu
Zm8mKTsKICAgICBib29sIGhhc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAg
Ym9vbCBoYXNJbmRleCh1aW50NjRfdCBpbmRleElkZW50aWZpZXIpIGNvbnN0OwpAQCAtNzUsNyAr
NzQsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8SURCS2V5
UGF0aD4gbV9rZXlQYXRoOwogICAgIGJvb2wgbV9hdXRvSW5jcmVtZW50IHsgZmFsc2UgfTsKLSAg
ICB1aW50NjRfdCBtX21heEluZGV4SUQgeyAwIH07CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBJ
REJJbmRleEluZm8+IG1faW5kZXhNYXA7CiB9OwpAQCAtODMsNyArODEsNyBAQCBwcml2YXRlOgog
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgSURCT2JqZWN0U3RvcmVJbmZvOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IG1faWRlbnRpZmllciA8
PCBtX25hbWUgPDwgbV9rZXlQYXRoIDw8IG1fYXV0b0luY3JlbWVudCA8PCBtX21heEluZGV4SUQg
PDwgbV9pbmRleE1hcDsKKyAgICBlbmNvZGVyIDw8IG1faWRlbnRpZmllciA8PCBtX25hbWUgPDwg
bV9rZXlQYXRoIDw8IG1fYXV0b0luY3JlbWVudCA8PCBtX2luZGV4TWFwOwogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgpAQCAtMTAxLDkgKzk5LDYgQEAgYm9vbCBJREJPYmplY3RTdG9yZUlu
Zm86OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fYXV0b0luY3JlbWVudCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX21heEluZGV4SUQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8u
bV9pbmRleE1hcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGE4YmU4YTA4NjRiZjI0M2QxMTFkNjg5
NjI0ZDQyNTQ0YTQ0MWI4NjUuLmZjM2UwZmJjOWRmOGZhZmUzOGU1ZGJjZTZhYjc3MzQwNWI3ZDg4
ZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAyMC0wMS0xNCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNv
bT4KKworICAgICAgICBJbmRleGVkREI6IHNwZWVkIHVwIGluZGV4IHJlY29yZHMgZGVsZXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjE5Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdy
YWRlLnNxbGl0ZTM6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdy
YWRlVG9WMi5tbTogQWRkZWQuCisgICAgICAgICgtW0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVU
b1YyTWVzc2FnZUhhbmRsZXIgdXNlckNvbnRlbnRDb250cm9sbGVyOmRpZFJlY2VpdmVTY3JpcHRN
ZXNzYWdlOl0pOgorICAgICAgICAoVEVTVCk6CisKIDIwMjAtMDEtMTQgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0ludGVncmF0aW9uXSBTdXBwb3J0
IHRoZSBmZWF0dXJlIGZsYWcgaW4gRHVtcFJlbmRlclRyZWUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYTJkNDFlNmMzZWJjMmZlOWJiNjBjMWE0NjI5MjgwZDcyODE1OTFiMy4uMDdhMTgzYTA2
NWZmN2UyYTAyYTNmOWQ3MDM5NGRlNmU2YzhlMzNlYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTc0MywxMSArNzQzLDE0IEBACiAJCTkzNjhBMjVGMjI5RUZCNDcwMEE4MjlDQSAvKiBsb2Nh
bC1zdG9yYWdlLXByb2Nlc3Mtc3VzcGVuZHMtMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNjhBMjVDMjI5RUZCM0EwMEE4MjlDQSAv
KiBsb2NhbC1zdG9yYWdlLXByb2Nlc3Mtc3VzcGVuZHMtMi5odG1sICovOyB9OwogCQk5MzZGNzI4
MDFDRDdEOUVDMDA2OEEwRkIgLyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNkY3MjdFMUNE
N0Q5RDAwMDY4QTBGQiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlvLmh0bWwgKi87IH07CiAJCTkz
NkY3MjgxMUNEN0Q5RUMwMDY4QTBGQiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlvLm1wNCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzZGNzI3
RjFDRDdEOUQwMDA2OEEwRkIgLyogbGFyZ2UtdmlkZW8td2l0aC1hdWRpby5tcDQgKi87IH07CisJ
CTkzN0I1NjlFMjNDRDIzREIwMDJBRTY0MCAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNx
bGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCQ0JDODEyM0NDNkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUu
c3FsaXRlMyAqLzsgfTsKIAkJOTM5OUJBMDQyMzcxMTE0MDAwODM5MkJGIC8qIEluZGV4ZWREQklu
UGFnZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM5OUJBMDEyMzcxMTBBRTAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLm1tICov
OyB9OwogCQk5Mzk5QkEwNTIzNzExMTRGMDA4MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5Mzk5QkEwMjIzNzExMEJGMDA4MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUuaHRtbCAq
LzsgfTsKIAkJOTM5OUJBMDYyMzcxMTE0RjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNh
Y2hlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM5OUJBMDMyMzcxMTBCRjAwODM5MkJGIC8qIEluZGV4ZWREQk5vdEluUGFnZUNhY2hl
Lmh0bWwgKi87IH07CiAJCTkzQUY0RUNFMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBO
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLzsgfTsK
IAkJOTNBRjRFRDExNTA2RjEzMDAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBRjRFQ0Yx
NTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi87IH07CisJCTkzQkNCQzgz
MjNDQzZGMkEwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQkNCQzgwMjNDQzZF
RTgwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSAqLzsgfTsKKwkJ
OTNCQ0JDODQyM0NDNkY0NDAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCQ0JDODIyM0NDNkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVU
b1YyLmh0bWwgKi87IH07CiAJCTkzQ0ZBODY3MUNFQjlFMzgwMDA1NjVBOCAvKiBhdXRvZm9jdXNl
ZC10ZXh0LWlucHV0Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNDRkE4NjYxQ0VCOURFMTAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRl
eHQtaW5wdXQuaHRtbCAqLzsgfTsKIAkJOTNEMTE5RkMyMkM2ODBGNzAwOUJFM0M3IC8qIGxvY2Fs
c3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNEMTE5RkIyMkM1NzExMjAwOUJFM0M3IC8q
IGxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRlLmh0bWwgKi87IH07CiAJCTkzRTJDNTU1
MUZEMzIwNDEwMEUxREY2QSAvKiBMaW5lRW5kaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTJDNTU0MUZEMzIwNDEwMEUxREY2QSAvKiBMaW5l
RW5kaW5nLmNwcCAqLzsgfTsKQEAgLTEzMDAsNiArMTMwMyw4IEBACiAJCQkJNTEwNDc3NzMxRDI5
OERERDAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtc2htIGluIENvcHkgUmVz
b3VyY2VzICovLAogCQkJCTUxMDQ3Nzc0MUQyOThEREQwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNv
dmVyeS5zcWxpdGUzLXdhbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTEwRkNGMTFFMDFD
RDY0MDA2RjhEMEIgLyogSURCSW5kZXhVcGdyYWRlVG9WMi5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovLAorCQkJCTkzN0I1NjlFMjNDRDIzREIwMDJBRTY0MCAvKiBJREJPYmplY3RTdG9yZUluZm9V
cGdyYWRlLnNxbGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJOTNCQ0JDODQyM0NDNkY0
NDAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCiAJCQkJRjQxQUI5QTQxRUY0Njk2QjAwODNGQTA4IC8qIGltYWdlLWFuZC1j
b250ZW50ZWRpdGFibGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlGNEUwQTJCNDIx
MjI0MDJCMDBBRjdDN0YgLyogaW1hZ2UtYW5kLWZpbGUtdXBsb2FkLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8sCiAJCQkJRjQxQUI5QTUxRUY0Njk2QjAwODNGQTA4IC8qIGltYWdlLWFuZC10ZXh0
YXJlYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMjE3OCw2ICsyMTgzLDkgQEAKIAkJ
OTNBRjRFQ0ExNTA2RjAzNTAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dEZvckltYWdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXNf
QnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBRjRFQ0YxNTA2RjEy
MzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBh
dGggPSAibG90cy1vZi1pbWFnZXMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTkzQkNCQzgwMjNDQzZFRTgwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
Mi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElEQk9iamVjdFN0
b3JlSW5mb1VwZ3JhZGVUb1YyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0JD
QkM4MTIzQ0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUz
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsg
cGF0aCA9IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTNCQ0JDODIyM0NDNkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3Jl
SW5mb1VwZ3JhZGVUb1YyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlVG9WMi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1s
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRt
bCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY4MUNFQkNGRUQwMDA1NjVB
OCAvKiBDYW5kaWRhdGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENhbmRpZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZh
dGUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2Utb3Blbi13
aW5kb3ctcHJpdmF0ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MjEs
NiArMjkyOSw3IEBACiAJCQkJNTFBRjIzREUxRUYxQTM3MjAwNzJGMjgxIC8qIEljb25Mb2FkaW5n
RGVsZWdhdGUubW0gKi8sCiAJCQkJNTEwNDc3NzUxRDI5OEUwMzAwOTc0N0VCIC8qIElEQkRlbGV0
ZVJlY292ZXJ5Lm1tICovLAogCQkJCTUxMTBGQ0VGMUUwMUNCQUEwMDZGOEQwQiAvKiBJREJJbmRl
eFVwZ3JhZGVUb1YyLm1tICovLAorCQkJCTkzQkNCQzgwMjNDQzZFRTgwMENBMjIyMSAvKiBJREJP
YmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSAqLywKIAkJCQk1MUE1ODc4NDFEMjcyRUYzMDA0
QkE5QUYgLyogSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSAqLywKIAkJCQlDQUIwRkY1
NDIyMzMyQzNBMDA2Q0E1QjAgLyogSW5kZXhlZERCRmlsZU5hbWUubW0gKi8sCiAJCQkJOTM5OUJB
MDEyMzcxMTBBRTAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLm1tICovLApAQCAtMzM4
Nyw2ICszMzk2LDggQEAKIAkJCQk1MTA0Nzc3MDFEMjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRl
UmVjb3Zlcnkuc3FsaXRlMy1zaG0gKi8sCiAJCQkJNTEwNDc3NzExRDI5OEQ4NTAwOTc0N0VCIC8q
IElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtd2FsICovLAogCQkJCTUxMTBGQ0YwMUUwMUNENTMw
MDZGOEQwQiAvKiBJREJJbmRleFVwZ3JhZGVUb1YyLmh0bWwgKi8sCisJCQkJOTNCQ0JDODEyM0ND
NkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyAqLywKKwkJ
CQk5M0JDQkM4MjIzQ0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRv
VjIuaHRtbCAqLywKIAkJCQlGNDFBQjk5OTFFRjQ2OTJDMDA4M0ZBMDggLyogaW1hZ2UtYW5kLWNv
bnRlbnRlZGl0YWJsZS5odG1sICovLAogCQkJCUY0RTBBMkIzMjEyMjNGMkQwMEFGN0M3RiAvKiBp
bWFnZS1hbmQtZmlsZS11cGxvYWQuaHRtbCAqLywKIAkJCQlGNDFBQjk5MzFFRjQ2OTJDMDA4M0ZB
MDggLyogaW1hZ2UtYW5kLXRleHRhcmVhLmh0bWwgKi8sCkBAIC00NzI4LDYgKzQ3MzksNyBAQAog
CQkJCTUxQUYyM0RGMUVGMUEzNzMwMDcyRjI4MSAvKiBJY29uTG9hZGluZ0RlbGVnYXRlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTEwNDc3NzgxRDI5OTIzQjAwOTc0N0VCIC8qIElEQkRlbGV0ZVJl
Y292ZXJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExMEZDRkExRTAxQ0RCODAwNkY4RDBCIC8q
IElEQkluZGV4VXBncmFkZVRvVjIubW0gaW4gU291cmNlcyAqLywKKwkJCQk5M0JDQkM4MzIzQ0M2
RjJBMDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MUE1ODc4NjFEMjczQUE5MDA0QkE5QUYgLyogSW5kZXhlZERCRGF0YWJhc2VQ
cm9jZXNzS2lsbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNBQjBGRjU1MjIzMzJDNTcwMDZDQTVC
MCAvKiBJbmRleGVkREJGaWxlTmFtZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTlCQTA0MjM3
MTExNDAwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5tbSBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
NDQyNmVhMDQxMGI0MjM5ZTdiMTBmNmE4MzI1ZjBmODYzNDczZDJmCkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCA2OTYzMgp6Y21lSSomMlFVZTkwJX57djdIeVVPYHEmVjMjaDxjYnliX1NnfUkkSDRI
MCNITnZFaTMoeHZJPmtXbEJnPyZkOGAKenkyTDUlRyRheURUejFAdktZIzxgMEB7VFc9VXRHMTFC
WnpWNTt1Z18zQmRzJjtJWj92STdgeE9waD9UVm1mQWRhCnpwNkJRMWBTYEl0YCsycjRVNUZae3U1
NHpxVGJpaiU1SSskRmEheWVRQXAtdzcjRDZNRjdmKG8pNzUrKFUoIz9fcgp6ZEdvYTU+JHlZeD93
Zj8yPzdpPjE7flZYeytrTCVmckR3M35SYDttKV5SQUhteDVzcWZecWclTDFsdTcxMFNHeyMKemxM
UUx5RmkmNztoISlTNytGREFWKlowb3JYKzVpJW5RWUZuOy01KWByOz1lTUlXLSooRH5fKn07bXEx
S2VjZkUqCnpoNGpkKjV7Vl9sPWZlcGw3RWRhJTwhRHJpJENSMFBZJVVzXk5oKSh3aypLbTlpKEZV
XkpHTGpuaV94aT5AVGp0JAp6JnR+PHMkQGckQHB4e30qSkZxWkJpSUx2V2NYS3lWezRUbng8O3sk
fXpVcnZ1c19JeGhSNk8xNTJePkY4Wjxrc2cKenVfOHAkbzApMllJYSp4WnRQQzMpMmlJJj1ObyFs
V2tfQGtLZ0p1cSslMlVGUEQlYlZCTWF7Z2JPaEBDPnRwWGRsCno8K08xbHVlVmR2dCRmTmYhZjcr
eGooQm1nK1k9WldwfHtfKUo1MFJoJGFCMjkpZ0F8Ny1Jb3I/I1lBTGJEc2Y0Zgp6NF98OER0VmFG
RD5ROE45SCFzfC1zbnhMfT5HaWZxSFF0eDM0JU5vbDVEZlg7ZmVSemVJJnEhYT5VaUNULWNabGUK
ejZqJHF0YHdDO1NlTCN6Yz47b0Veb3UxV3JPM1VmPysyQ0M1YXZhZFF5dmlfX0pmTz1ySXR0Wk9l
QDlGNDleM2t5CnozNUwyX0hNZyF4dDdfZWI/IXA8amVjQmc4YzV8bXduWUI0MXJSUzsla0U0bXom
QzJpXiYkXnQ1OSNGcVY0SmBIMQp6T30/QWghNTQqUTBmTVU2OVM5JDkpPWpEdlReKzlgVyEyTU81
dyUqeCVXclBoND1FZ1RjPik2aXcyLVNoQ0dfPTcKemNFZ3FgQyo0bjJtQWBQQDUpenBZK0JzKzFe
OXtaKXhkVSR2KCE1YytWRHBvI3l3Q0MjYHRiJT14cHRBKlk8TlluCnp6cGwrey1GfDh9K1RBeDtk
fFVKYzFfdkZ0aDF5Yyh3QiVeSEdtTyNobmc0OXB8NTY4PmlBU1Q+e2gwVWZtZTxUdAp6clJKPF56
Zms3IWItbVEkd3l0RUMxI1pfejNxRzVtMGg/SDZFQl50WWJZeUR0U3FHKU8/JnczMlNeTTQ+RUck
dF4KenBzJFk+S2VXNExJY3hidGEyJUF6VmNPfTUpeXI3PlVNMXVmY2x4WS1eMyo4Uy0wXn13ZSFf
YHRoX0o4Tkh2aGxeCnowU0dfPDB1WD16MVJ3d2IydFdWPTVPfHBkJldrU0VmMEdaMUQ8eV5mTmVA
cDV7Qyg5Jl82dnUzZWF8bn50VzNFMAp6aXY0OG5jVU12cXxMfG9fYUxHSlNCQFF7KUk/aX41SU9C
RjQ+V0ZodGViZmVWUjRhfShzNHVjXzM0NnFUO3ZaTmIKejAwOVU8MDBJenowMGJaYTBTR188MHVY
b3MxcEVeMXIhfXVCTD8rNG9eenJLa3BfaX1BbUclOGVZeTk4RVA4MFM2CnpgO3ZYa0Y3cVQ3MnRX
Vj01UCQjI0FPSGFmS21ZO3xmQiohenopNj18clhsTXdgIVhOJUNrOUVBNFdnND5HUzdlUwp6ayV7
Vyl7e0V6UkxVTDFDd2UjfGMwQXo8fkJ0YE4oLSpgMF9JVlNgfnc9RENCalJRS2U0aFZLWW5lV15n
UF58e3MKenBCJCFrSmheZWErTUwkLXpsK0A+Pn1VMWB5VCFnP3BZUlA+QU9IYWZLbVk7fGZCKnlf
MDA5VTwwMEkjQi12bk0wCnpMcnRGZUN5NDhxc1BacUprTkQkNllGPWlYaD5nbXFNQ2NQa1AyVTdx
PE55MzB7bGZ3UTJ0V1Y9NVAkIyNBT0hhZgp6S21ZO3xmSXRUZTtRN0NVND0kUHAwU0dfPDB1WD16
MVJ3d2IydFdWPTVHVl4rXlp6bWFrTH5+ZzJ0V1Y9NVAkIyMKekFPSGFmS21ZO3w9eGhOenw5QUhC
TWU4NXswU0dfPDB1WD16MVJ3d2IydFdWPW1WaDw/VXQpSSZgLU9lWUtIfnsyCno1UCQjI0FPSGFm
S21ZO3xmQip5XzAwOVUqNH1xaFNJS34jVi1UMnh5ZWNmQyNHZyY8e3N+IT0+NWpMeHQrTTFUcgp6
Rlk0S3hreDhvfmY7YnFpWT5hN0pkZDRvM3YmdENoJkNGUFNgJHxeWig4bytZWEM5JEUhaCZ2VTgk
MyFTZjtJangKenYzckY1JG5MWHk/QVBiZks8b25vNVAkIyNBT0hhZkttWTt8ZkIqeV8wRCVKcWoq
NFRue2BHKSNMPiFAJjdYanNHCnpkKGtmclI8fkklMlpZMW9oK092cXojOUotbV9nV0F7MStBb0tt
WTt8ZkIqeV8wMDlVPDAwSXp6MDBqUDx6PUdmPQp6Plc9S3koaSF1cm9+Oz8mVSl4UkBJckclMUAy
SFM4X3FLSUVAcGhPME0/T2wrSX5ENzhldDM/JCRwODttOHR9SSMKejJ8UUNBWXk0a2VlLVFRO3xB
aHF0NVAkIyNBT0hhZkttWTt8ZkIqeV8wRCVxP2FFWCkoZispJno+R31Ud1ZHcjEmCno0cihCcDBz
I20+MDBJenowMGJaYTBTR188MHVYcGYxZGZSK2VSOHNhJj9ecWVISW9MY2BUdF8/Wi1qbHk7YHs+
KAp6MVJ3d2IydFdWPTVQJCMjQU9IYWZLJWkzdS1WP3BAPiRMRU8qSzRGVl54YilWUHBDfHR8REZu
PldLWTdzbUB+NlIKemBpaF5mUjVFI2VoaE9iMDhDMGpgeVhzNiVCbjItRyRjMHpEVVNVVHw8QEZZ
VW0rY0pnTUQ0I3NkNXpgVDhuPWwxCnpiUVNpby19KElpaGxEKzNmN1VleXN9Tyh5MVJ3d2IydFdW
PTVQJCMjQU9IYWZ5cUUlI0IrNjlhYiQxYm98ME11Zgp6PTtEOXZVKko+ISome3N2em5GJjx3VDF1
JEFPSGFmS21ZO3xmQip5XzAwOVV6NVVeZVZOUE41WF8paTdiemQ/SCYKQXBhMXs+CgpsaXRlcmFs
IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLmh0bWwgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTE2ZmU3YWVlNGZjYWU3NTZlMTlkYmJlNmExMmRlOGQ5MWE0YjM5
OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbApAQCAtMCwwICsxLDM4IEBACis8
c2NyaXB0PgorCit2YXIgZGF0YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlaW5mby11cGdyYWRlLXRl
c3QiOwordmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKK3Zh
ciBkYjsKK29wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2Uo
IlVuZXhwZWN0ZWQgdXBncmFkZSBuZWVkZWQiKTsKK30KKworb3BlblJlcXVlc3Qub25zdWNjZXNz
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50
ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiU3VjY2VzcyIpOworICAgIHZhciB0cmFuc2FjdGlvbiA9
IGV2ZW50LnRhcmdldC5yZXN1bHQudHJhbnNhY3Rpb24oWydvYmplY3RTdG9yZScsICdhbm90aGVy
T2JqZWN0U3RvcmUnXSk7CisgICAgdmFyIGluZGV4Q291bnQgPSB0cmFuc2FjdGlvbi5vYmplY3RT
dG9yZSgnb2JqZWN0U3RvcmUnKS5pbmRleE5hbWVzOworICAgIGlmIChpbmRleGVzLmxlbmd0aCAh
PSAyKQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5w
b3N0TWVzc2FnZSgiVW5leHBlY3RlZCBjb3VudCBvZiBpbmRleGVzIGluIG9iamVjdFN0b3JlICdv
YmplY3RTdG9yZSc6ICIgKyBpbmRleGVzLmxlbmd0aCk7CisgICAgCisgICAgaW5kZXhDb3VudCA9
IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdhbm90aGVyT2JqZWN0U3RvcmUnKS5pbmRleE5hbWVz
OworICAgIGlmIChpbmRleGVzLmxlbmd0aCAhPSAxKQorICAgICAgICB3aW5kb3cud2Via2l0Lm1l
c3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBjb3VudCBv
ZiBpbmRleGVzIGluIG9iamVjdFN0b3JlICdhbm90aGVyT2JqZWN0U3RvcmUnOiAiICsgaW5kZXhl
cy5sZW5ndGgpOworCisgICAgcmVxID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ29iamVjdFN0
b3JlJykuaW5kZXgoJ2luZGV4S2V5JykuZ2V0KCJpbmRleEtleTEiKTsKKyAgICByZXEub25zdWNj
ZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKHJlcS5yZXN1bHQudmFsdWUgIT0g
InZhbHVlMSIpCisgICAgICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0
SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBnZXQgcmVzdWx0OiAiICsgIHJlcS5yZXN1
bHQudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3Nh
Z2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiU3VjY2VzcyIpOworICAgIH0KKyAg
ICByZXEub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHdpbmRvdy53ZWJraXQu
bWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJVbmV4cGVjdGVkIGdldCBy
ZXN1bHQ6ICIgKyAgcmVxLnJlc3VsdC52YWx1ZSk7CisgICAgfQorfQorCitvcGVuUmVxdWVzdC5v
bmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5k
bGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBvcGVuIGVycm9yIik7Cit9
CisKKzwvc2NyaXB0PgorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lZjFjMWU1MTM0MWNiMGMxZmMxMDU5YTM5ZjgxNWJhZDBjNjNkZDU1Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMCwwICsxLDgyIEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5oIgorI2lt
cG9ydCA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tQcm9j
ZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxl
clByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHlsZVNoZWV0
Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29sIHJlY2VpdmVkU2Ny
aXB0TWVzc2FnZTsKK3N0YXRpYyBSZXRhaW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0U2NyaXB0
TWVzc2FnZTsKKworQGludGVyZmFjZSBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMk1lc3Nh
Z2VIYW5kbGVyIDogTlNPYmplY3QgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMk1lc3NhZ2VIYW5kbGVy
CisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50Q29udHJvbGxl
ciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTooV0tTY3Jp
cHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IHRydWU7
CisgICAgbGFzdFNjcmlwdE1lc3NhZ2UgPSBtZXNzYWdlOworfQorQGVuZAorCitURVNUKEluZGV4
ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIpCit7CisgICAgUmV0YWluUHRyPElE
Qk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyTWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIgPSBhZG9w
dE5TKFtbSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjJNZXNzYWdlSGFuZGxlciBhbGxvY10g
aW5pdF0pOworICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25maWd1cmF0
aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAg
ICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRNZXNzYWdl
SGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworCisgICAgW2NvbmZp
Z3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNzXTsKKwor
ICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0U3RvcmVJbmZvIHNjaGVt
YSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgorICAgIE5TVVJMICp1cmwxID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUi
IHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdOworCisgICAgTlNTdHJpbmcgKmhhc2ggPSBXZWJDb3JlOjpTUUxpdGVGaWxlU3lz
dGVtOjpjb21wdXRlSGFzaEZvckZpbGVOYW1lKCJvYmplY3RzdG9yZWluZm8tdXBncmFkZS10ZXN0
Iik7CisgICAgTlNTdHJpbmcgKm9yaWdpbkRpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9U
ZXN0V2ViS2l0QVBJL1dlYnNpdGVEYXRhL0luZGV4ZWREQi92MS9maWxlX18wLyI7CisgICAgTlNT
dHJpbmcgKmRhdGFiYXNlRGlyZWN0b3J5ID0gW1tvcmlnaW5EaXJlY3Rvcnkgc3RyaW5nQnlBcHBl
bmRpbmdTdHJpbmc6aGFzaF0gc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF07CisgICAgTlNV
UkwgKnRhcmdldFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6ZGF0YWJhc2VEaXJlY3Rvcnld
OworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOnRh
cmdldFVSTCBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
Y3JlYXRlRGlyZWN0b3J5QXRVUkw6dGFyZ2V0VVJMIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3Rvcmll
czpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBk
ZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDp1cmwxIHRvVVJMOlt0YXJnZXRVUkwgVVJMQnlB
cHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiSW5kZXhlZERCLnNxbGl0ZTMiXSBlcnJvcjpuaWxdOwor
CisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3Qg
PSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJM
Rm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMiIgd2l0aEV4dGVuc2lv
bjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKEAi
U3VjY2VzcyIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7Cit9CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDBmMDNmNTc5YTQ4ODFhOGQ2ZDk2NmEzMjhhOGY1NDBkN2Q3ODY2M2UuLmZmNjc2NmUwY2Y3OWEz
MzZkZjJmNWY5MDQ4NjYzMjE4NTYyMjcwYzQgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
Q2hhbmdlTG9nCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMjAtMDEtMTQgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAg
ICAgSW5kZXhlZERCOiBzcGVlZCB1cCBpbmRleCByZWNvcmRzIGRlbGV0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYxOTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEluZGV4ZWREQi9iYXNpYy9p
bmRleC1jdXJzb3ItZGVsZXRlLTIuaHRtbDogQWRkZWQuCisKIDIwMjAtMDEtMDggIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI0MjkxMT8p
OiBIaWdoIFNpZXJyYSBSZWxlYXNlIFdLMiBQZXJmIGJvdCB0aW1pbmcgb3V0IHdoaWxlIHJ1bm5p
bmcgSW5kZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1kZWxldGUtMi5odG1s
IGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRlbGV0ZS0y
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmJmYmM1ZjM3NTUxYzk5ZTJiZjFiNmM2NWFhMTk4MGNiMTU1ODVi
NwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2lu
ZGV4LWN1cnNvci1kZWxldGUtMi5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVubmVyLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9IDIwOwor
Y29uc3QgbnVtYmVyT2ZJdGVtcyA9IDEwMDAwOworY29uc3QgbnVtYmVyT2ZJdGVtc1RvRGVsZXRl
ID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0
aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jdXJzb3ItZGVsZXRlLURCLTIiOworaW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVuY3Rpb24o
KSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3IgPSBudWxs
OwordmFyIGRiID0gbnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZUZXN0UnVu
bmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0aW9uQ291
bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9IG51bGw7
CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1bm5lci5n
YygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7CisgICAgdGVz
dEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisKK2Z1bmN0
aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKworZnVuY3Rp
b24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9w
ZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5j
dGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAg
IHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScsIHsga2V5UGF0
aDogJ3VuaXF1ZUluZGV4S2V5JyB9KTsKKyAgICAgICAgb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgo
J3VuaXF1ZUluZGV4JywgJ3VuaXF1ZUluZGV4S2V5JywgeyB1bmlxdWU6IHRydWUgfSk7CisgICAg
ICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleScpOworICAgIH0K
KyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxkOworCisg
ICAgLy8gU3RvcmUgaXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0aW9uID0gZGIudHJh
bnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9yZSA9IHRy
YW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bnVtYmVyT2ZJdGVtczsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQoeyB2YWx1ZTogJ3Zh
bHVlJywgdW5pcXVlSW5kZXhLZXk6ICJ1bmlxdWVJbmRleEtleSIgKyBpLCBpbmRleEtleTogImlu
ZGV4IiArIChpJTIpIH0pOworCisgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgIG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7CisKKyAg
ICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIgaW5kZXgg
PSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUoJ3N0b3Jl
JykuaW5kZXgoJ2luZGV4Jyk7CisgICAgdmFyIGNvbXBsZXRlZERlbGV0ZXMgPSAwOworICAgIGlu
ZGV4Lm9wZW5DdXJzb3IoSURCS2V5UmFuZ2Uub25seSgnaW5kZXgxJykpLm9uc3VjY2VzcyA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQucmVzdWx0
OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGN1cnNvci5kZWxldGUoKS5vbnN1
Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlmICgrK2NvbXBsZXRl
ZERlbGV0ZXMgPT0gbnVtYmVyT2ZJdGVtc1RvRGVsZXRlKQorICAgICAgICAgICAgICAgICAgICBu
ZXh0U3RlcCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXJzb3IuY29udGludWUo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJmVGVzdFJ1
bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0VGltZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24sIDApOwor
fQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388078</attachid>
            <date>2020-01-17 12:47:26 -0800</date>
            <delta_ts>2020-01-21 12:13:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206196-20200117124725.patch</filename>
            <type>text/plain</type>
            <size>61825</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQwZjU0MzU3Y2YyNmQ0
Njg4Nzk1ZjY2NDdkODZkZDFhNTBkNTZmMi4uY2Q5YjczYjhlOTU0MTZmOWIxN2MxMzRkYzc1Mzkz
OWQyMDAxYTc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDIwLTAxLTE3ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogc3BlZWQg
dXAgaW5kZXggcmVjb3JkcyBkZWxldGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIGEgZmV3IHRoaW5ncyB0byBhY2NlbGVy
YXRlIGRlbGV0aW9uIGZvciBpbmRleCByZWNvcmRzOgorICAgICAgICAxLiBtYWtlIGluZGV4SUQg
dW5pcXVlIGluIGRhdGFiYXNlIGluc3RlYWQgb2Ygb2JqZWN0U3RvcmUKKyAgICAgICAgMi4gY3Jl
YXRlIGFuIGluZGV4IG9uIEluZGV4UmVjb3JkcyB0YWJsZQorICAgICAgICAzLiBvcHRpbWl6ZSBz
b21lIFNRTGl0ZSBzdGF0ZW1lbnRzIHRvIHRha2UgYWR2YW50YWdlIG9mIDEgYW5kIDIKKworICAg
ICAgICBUZXN0OiBJbmRleGVkREIuSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIKKworICAg
ICAgICBNYWtlIHRlc3QgUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vy
c29yLWRlbGV0ZS0yLmh0bWwgNy41eCBmYXN0ZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRl
eCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdT
dG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tpbmdT
dG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6djFJbmRleFJlY29yZHNSZWNvcmRJbmRleFNjaGVtYSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OnYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6djFPYmplY3RTdG9yZUluZm9TY2hlbWFBbHRl
cm5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjp2Mk9iamVjdFN0b3JlSW5mb1Nj
aGVtYSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OnYyT2JqZWN0U3RvcmVJbmZvU2No
ZW1hQWx0ZXJuYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVBbmRQb3B1
bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJh
Y3RFeGlzdGluZ0RhdGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkSGFzSW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNv
cmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6
OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZEdldEluZGV4UmVjb3JkRm9yT25l
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVPbmVJbmRleFJlY29yZCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpidWlsZEluZGV4U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpiaW5kQXJndW1lbnRzKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUlu
ZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6SURCRGF0YWJhc2VJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6c2V0TWF4SW5kZXhJRCk6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VJbmZvOjpnZW5lcmF0ZU5leHRJbmRleElEKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlSW5mbzo6Y3JlYXRlTmV3SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVJbmZvOjphZGRFeGlzdGluZ0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlSW5mbzo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmg6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZUluZm86OmF1dG9JbmNyZW1lbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVJbmZvOjptYXhJbmRleElEIGNvbnN0KTogRGVsZXRlZC4KKwogMjAyMC0wMS0x
NyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10g
T3B0aW1pemUgTGluZUJ1aWxkZXI6OmFwcGVuZFRleHRDb250ZW50IGZvciB0aGUgbW9zdCBjb21t
b24gaW5saW5lIGNvbnRlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5oCmluZGV4IGI0NTA5MWJjZjIxMmMwZWNlYWMwZmQ1MzhiMGVkYmI1MDMwYTRi
NjMuLmVjOTcyNTcxNDliYjFjNGU2YmNiM2QxMzM4Yjk0NTA4NzRkMTljZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaApAQCAtODQsNyArODQs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0
IGZpbmFsOwogICAgIHZvaWQgc3RvcCgpIGZpbmFsOwogCi0gICAgY29uc3QgSURCRGF0YWJhc2VJ
bmZvJiBpbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CisgICAgSURCRGF0YWJhc2VJbmZv
JiBpbmZvKCkgeyByZXR1cm4gbV9pbmZvOyB9CiAgICAgdWludDY0X3QgZGF0YWJhc2VDb25uZWN0
aW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRp
ZmllcjsgfQogCiAgICAgUmVmPElEQlRyYW5zYWN0aW9uPiBzdGFydFZlcnNpb25DaGFuZ2VUcmFu
c2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mLCBJREJPcGVuREJSZXF1ZXN0Jik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAKaW5kZXggMzEyNDQzNGE5ODk0NmMyZTJiMzUyOTEwMWI3ZDc4NzQ2ZWJiNWE2MC4uMzAzNzFk
YzFkYzlmNjI5NjQyMjA5MzM3NTE5MTEzNDVjNjBkYzM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtNDc1LDcgKzQ3
NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJJbmRleD4+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJ
bmRleChKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IsICJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9u
ICdJREJPYmplY3RTdG9yZSc6IFRoZSBrZXlQYXRoIGFyZ3VtZW50IHdhcyBhbiBhcnJheSBhbmQg
dGhlIG11bHRpRW50cnkgb3B0aW9uIGlzIHRydWUuIl9zIH07CiAKICAgICAvLyBJbnN0YWxsIHRo
ZSBuZXcgSW5kZXggaW50byB0aGUgT2JqZWN0U3RvcmUncyBpbmZvLgotICAgIElEQkluZGV4SW5m
byBpbmZvID0gbV9pbmZvLmNyZWF0ZU5ld0luZGV4KG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHBh
cmFtZXRlcnMudW5pcXVlLCBwYXJhbWV0ZXJzLm11bHRpRW50cnkpOworICAgIElEQkluZGV4SW5m
byBpbmZvID0gbV9pbmZvLmNyZWF0ZU5ld0luZGV4KG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5p
bmZvKCkuZ2VuZXJhdGVOZXh0SW5kZXhJRCgpLCBuYW1lLCBXVEZNb3ZlKGtleVBhdGgpLCBwYXJh
bWV0ZXJzLnVuaXF1ZSwgcGFyYW1ldGVycy5tdWx0aUVudHJ5KTsKICAgICBtX3RyYW5zYWN0aW9u
LmRhdGFiYXNlKCkuZGlkQ3JlYXRlSW5kZXhJbmZvKGluZm8pOwogCiAgICAgLy8gQ3JlYXRlIHRo
ZSBhY3R1YWwgSURCT2JqZWN0U3RvcmUgZnJvbSB0aGUgdHJhbnNhY3Rpb24sIHdoaWNoIGFsc28g
c2NoZWR1bGVzIHRoZSBvcGVyYXRpb24gc2VydmVyIHNpZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IDQzNTIyMjkyMDFjM2JkNzA1YmM2YmU4YzBkOGY0NzQ5OGUxMGFk
NjQuLjQwMWNlM2QyYjE2MWJhZDNlNzkzOTc3MTdlZDVlMjg4NzcwNDI2MmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5n
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIE1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6fk1lbW9yeUlEQkJhY2tpbmdTdG9yZSgpID0gZGVmYXVsdDsKIElEQkVycm9yIE1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJh
c2VJbmZvJiBpbmZvKQogewogICAgIGlmICghbV9kYXRhYmFzZUluZm8pCi0gICAgICAgIG1fZGF0
YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KG1faWRlbnRpZmllci5kYXRh
YmFzZU5hbWUoKSwgMCk7CisgICAgICAgIG1fZGF0YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJREJE
YXRhYmFzZUluZm8+KG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSwgMCwgMCk7CiAKICAgICBp
bmZvID0gKm1fZGF0YWJhc2VJbmZvOwogICAgIHJldHVybiBJREJFcnJvciB7IH07CkBAIC0yMzYs
OCArMjM2LDEwIEBAIElEQkVycm9yIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAgIHJldHVybiBJREJF
cnJvciB7IENvbnN0cmFpbnRFcnJvciB9OwogCiAgICAgYXV0byBlcnJvciA9IG9iamVjdFN0b3Jl
LT5jcmVhdGVJbmRleCgqcmF3VHJhbnNhY3Rpb24sIGluZm8pOwotICAgIGlmIChlcnJvci5pc051
bGwoKSkKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKICAgICAgICAgb2JqZWN0U3RvcmVJbmZv
LT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOworICAgICAgICBtX2RhdGFiYXNlSW5mby0+c2V0TWF4
SW5kZXhJRChpbmZvLmlkZW50aWZpZXIoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIGVycm9yOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCBmY2M0ODFjNWQ1ZjAzN2I1
ODUyMDUzMTgyYWIyNzFiZDhiZGZmMjU2Li5jOGVhYmI1NDE4ZjZjYjJlYTY0MmIxMWRlZjA2YmM0
YzYxZDYyZTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMTk1LDYg
KzE5NSwxMiBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiB2MUluZGV4UmVjb3Jkc0luZGV4U2NoZW1h
KCkKICAgICByZXR1cm4gaW5kZXhSZWNvcmRzSW5kZXhTY2hlbWFTdHJpbmc7CiB9CiAKK3N0YXRp
YyBjb25zdCBTdHJpbmcmIHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hlbWEoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXVEY6OlN0cmluZz4gaW5kZXhSZWNvcmRzUmVjb3JkSW5k
ZXhTY2hlbWFTdHJpbmcoIkNSRUFURSBJTkRFWCBJbmRleFJlY29yZHNSZWNvcmRJbmRleCBPTiBJ
bmRleFJlY29yZHMgKG9iamVjdFN0b3JlSUQsIG9iamVjdFN0b3JlUmVjb3JkSUQpIik7CisgICAg
cmV0dXJuIGluZGV4UmVjb3Jkc1JlY29yZEluZGV4U2NoZW1hU3RyaW5nOworfQorCiBzdGF0aWMg
Y29uc3QgU3RyaW5nIGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoY29uc3QgU3RyaW5nJiB0YWJsZU5h
bWUpCiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJsZU5hbWUs
ICIgKG9iamVjdFN0b3JlUm93IElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgYmxv
YlVSTCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7CkBAIC0yMjksNiArMjM1LDQw
IEBAIHN0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkK
ICAgICByZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmc7CiB9CiAKK3N0YXRpYyBjb25z
dCBTdHJpbmcgdjFPYmplY3RTdG9yZUluZm9TY2hlbWEoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUp
Cit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJsZU5hbWUsICIg
KGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUg
T04gQ09ORkxJQ1QgRkFJTCwgbmFtZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5J
UVVFIE9OIENPTkZMSUNUIEZBSUwsIGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBG
QUlMLCBhdXRvSW5jIElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbWF4SW5kZXhJ
RCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7Cit9CisKK3N0YXRpYyBjb25z
dCBTdHJpbmcmIHYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8V1RGOjpTdHJpbmc+IHYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hU3RyaW5nKHYxT2Jq
ZWN0U3RvcmVJbmZvU2NoZW1hKCJPYmplY3RTdG9yZUluZm8iKSk7CisgICAgcmV0dXJuIHYxT2Jq
ZWN0U3RvcmVJbmZvU2NoZW1hU3RyaW5nOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiB2MU9i
amVjdFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gdjFPYmplY3RTdG9yZUluZm9TY2hlbWFBbHRlcm5hdGVTdHJpbmcodjFPYmpl
Y3RTdG9yZUluZm9TY2hlbWEoIlwiT2JqZWN0U3RvcmVJbmZvXCIiKSk7CisgICAgcmV0dXJuIHYx
T2JqZWN0U3RvcmVJbmZvU2NoZW1hQWx0ZXJuYXRlU3RyaW5nOworfQorCitzdGF0aWMgY29uc3Qg
U3RyaW5nIHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQor
eworICAgIHJldHVybiBtYWtlU3RyaW5nKCJDUkVBVEUgVEFCTEUgIiwgdGFibGVOYW1lLCAiIChp
ZCBJTlRFR0VSIFBSSU1BUlkgS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9O
IENPTkZMSUNUIEZBSUwsIG5hbWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFV
RSBPTiBDT05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCwgYXV0b0luYyBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7Cit9CisKK3N0
YXRpYyBjb25zdCBTdHJpbmcmIHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+IG9iamVjdFN0b3JlSW5mb1NjaGVtYVN0cmlu
Zyh2Mk9iamVjdFN0b3JlSW5mb1NjaGVtYSgiT2JqZWN0U3RvcmVJbmZvIikpOworICAgIHJldHVy
biBvYmplY3RTdG9yZUluZm9TY2hlbWFTdHJpbmc7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcm
IHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hQWx0ZXJuYXRlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBvYmplY3RTdG9yZUluZm9TY2hlbWFBbHRlcm5hdGVTdHJpbmcodjJP
YmplY3RTdG9yZUluZm9TY2hlbWEoIlwiT2JqZWN0U3RvcmVJbmZvXCIiKSk7CisgICAgcmV0dXJu
IG9iamVjdFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZVN0cmluZzsKK30KKwogU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VSb290RGlyZWN0b3J5KQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAg
ICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCkBAIC01MjUsNiArNTY1LDQ2IEBAIGJvb2wgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxp
ZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCkKK3sKKyAgICBBU1NFUlQobV9zcWxpdGVEQik7Cisg
ICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKKworICAgIFN0cmluZyBjdXJyZW50U2No
ZW1hOworICAgIHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVE
QiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jk
c1JlY29yZEluZGV4JyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4
LiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaW50
IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisKKyAgICAgICAgaWYgKHNxbGl0ZVJl
c3VsdCA9PSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVj
dXRlQ29tbWFuZCh2MUluZGV4UmVjb3Jkc1JlY29yZEluZGV4U2NoZW1hKCkpKSB7CisgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIEluZGV4UmVjb3Jkc1JlY29yZElu
ZGV4IGluZGV4IGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4LiIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDApOworICAgIH0KKworICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5p
c0VtcHR5KCkpOworCisgICAgaWYgKGN1cnJlbnRTY2hlbWEgPT0gdjFJbmRleFJlY29yZHNSZWNv
cmRJbmRleFNjaGVtYSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8oKQogewogICAgIEFT
U0VSVChtX3NxbGl0ZURCKTsKQEAgLTUzNiw3ICs2MTYsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURC
RGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5p
dGlhbAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoIW1fc3FsaXRl
REItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT2JqZWN0U3RvcmVJbmZvIChpZCBJTlRF
R0VSIFBSSU1BUlkgS0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZM
SUNUIEZBSUwsIG5hbWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBD
T05GTElDVCBGQUlMLCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgYXV0
b0luYyBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG1heEluZGV4SUQgSU5URUdF
UiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsiKSkgeworICAgIGlmICghbV9zcWxpdGVEQi0+
ZXhlY3V0ZUNvbW1hbmQodjJPYmplY3RTdG9yZUluZm9TY2hlbWEoKSkpIHsKICAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIE9iamVjdFN0b3JlSW5mbyB0YWJsZSBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOwogICAgICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNTk0LDcgKzY3NCw2NSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZv
PiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbAogICAgIH0K
IAogICAgIC8vIFRoaXMgaW5pdGlhbCBkYXRhYmFzZSBpbmZvIG1hdGNoZXMgdGhlIGRlZmF1bHQg
dmFsdWVzIHdlIGp1c3QgcHV0IGludG8gdGhlIG1ldGFkYXRhIGRhdGFiYXNlLgotICAgIHJldHVy
biBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgp
LCAwKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KG1faWRlbnRpZmll
ci5kYXRhYmFzZU5hbWUoKSwgMCwgMCk7Cit9CisKK09wdGlvbmFsPElzU2NoZW1hVXBncmFkZWQ+
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSgp
Cit7CisgICAgQVNTRVJUKG1fc3FsaXRlREIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09w
ZW4oKSk7CisKKyAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKKyAgICB7CisgICAgICAgIC8vIEZl
dGNoIHRoZSBzY2hlbWEgZm9yIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4KKyAgICAgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVf
bWFzdGVyIFdIRVJFIHRibF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIik7CisgICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2Jq
ZWN0U3RvcmVJbmZvIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgfQorCisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgp
OworICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAg
IExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9y
IHRoZSBPYmplY3RTdG9yZUluZm8gdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApOworICAgIH0KKworICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0Vt
cHR5KCkpOworICAgIGlmIChjdXJyZW50U2NoZW1hID09IHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1h
KCkgfHwgY3VycmVudFNjaGVtYSA9PSB2Mk9iamVjdFN0b3JlSW5mb1NjaGVtYUFsdGVybmF0ZSgp
KQorICAgICAgICByZXR1cm4geyBJc1NjaGVtYVVwZ3JhZGVkOjpObyB9OworCisgICAgUkVMRUFT
RV9BU1NFUlQoY3VycmVudFNjaGVtYSA9PSB2MU9iamVjdFN0b3JlSW5mb1NjaGVtYSgpIHx8IGN1
cnJlbnRTY2hlbWEgPT0gdjFPYmplY3RTdG9yZUluZm9TY2hlbWFBbHRlcm5hdGUoKSk7CisKKyAg
ICAvLyBEcm9wIGNvbHVtbiBtYXhJbmRleElEIGZyb20gdGFibGUuCisgICAgU1FMaXRlVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24oKm1fc3FsaXRlREIpOworICAgIHRyYW5zYWN0aW9uLmJlZ2luKCk7
CisKKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKHYyT2JqZWN0U3RvcmVJbmZv
U2NoZW1hKCJfVGVtcF9PYmplY3RTdG9yZUluZm8iKSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBPYmplY3RTdG9yZUluZm8gdGFibGUgaW4gZGF0YWJh
c2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBp
ZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJJTlNFUlQgSU5UTyBfVGVtcF9PYmplY3RT
dG9yZUluZm8gKGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jKSBTRUxFQ1QgaWQsIG5hbWUsIGtl
eVBhdGgsIGF1dG9JbmMgRlJPTSBPYmplY3RTdG9yZUluZm8iKSkgeworICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBtaWdyYXRlIGV4aXN0aW5nIE9iamVjdFN0b3JlSW5mbyBjb250ZW50ICgl
aSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKCFt
X3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBUQUJMRSBPYmplY3RTdG9yZUluZm8iKSkg
eworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkcm9wIGV4aXN0aW5nIE9iamVjdFN0b3Jl
SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0K
KworICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1w
X09iamVjdFN0b3JlSW5mbyBSRU5BTUUgVE8gT2JqZWN0U3RvcmVJbmZvIikpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgcmVuYW1lIHRlbXBvcmFyeSBPYmplY3RTdG9yZUluZm8gdGFi
bGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICB0
cmFuc2FjdGlvbi5jb21taXQoKTsKKworICAgIHJldHVybiB7IElzU2NoZW1hVXBncmFkZWQ6Olll
cyB9OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbygpCkBAIC02MjksMTAgKzc2Nywx
NiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0
byBkYXRhYmFzZUluZm8gPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4oZGF0YWJhc2VOYW1l
LCBkYXRhYmFzZVZlcnNpb24pOworICAgIGF1dG8gZGF0YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJ
REJEYXRhYmFzZUluZm8+KGRhdGFiYXNlTmFtZSwgZGF0YWJhc2VWZXJzaW9uLCAwKTsKKworICAg
IGF1dG8gcmVzdWx0ID0gZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSgpOworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGJvb2wgc2hvdWxkVXBk
YXRlSW5kZXhJRCA9IChyZXN1bHQudmFsdWUoKSA9PSBJc1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwog
CiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCAiU0VMRUNU
IGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jLCBtYXhJbmRleElEIEZST00gT2JqZWN0U3RvcmVJ
bmZvOyJfcyk7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxF
Q1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJPTSBPYmplY3RTdG9yZUluZm87Il9zKTsK
ICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKQEAgLTY2MywxMCArODA3LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJE
YXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJh
c2VJCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1aW50NjRfdCBtYXhJbmRleElEID0gMDsKKyAg
ICBIYXNoTWFwPHN0ZDo6cGFpcjx1aW50NjRfdCwgdWludDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJ
RE1hcDsKICAgICB7CiAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsICJT
RUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtleVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVu
dHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBy
ZWNvcmRzIGZyb20gdGhlIEluZGV4SW5mbyB0YWJsZS4iKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CiAKICAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CiAg
ICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVykgewpAQCAtNjk2LDcgKzg0NCwxMyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlSW5kZXhJRCkg
eworICAgICAgICAgICAgICAgIGluZGV4SURNYXAuc2V0KHsgb2JqZWN0U3RvcmVJRCwgaW5kZXhJ
RCB9LCArK21heEluZGV4SUQpOworICAgICAgICAgICAgICAgIGluZGV4SUQgPSBtYXhJbmRleElE
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJ
bmRleCh7IGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGluZGV4TmFtZSwgV1RGTW92ZShpbmRleEtl
eVBhdGgudmFsdWUoKSksIHVuaXF1ZSwgbXVsdGlFbnRyeSB9KTsKKyAgICAgICAgICAgIG1heElu
ZGV4SUQgPSBtYXhJbmRleElEIDwgaW5kZXhJRCA/IGluZGV4SUQgOiBtYXhJbmRleElEOwogCiAg
ICAgICAgICAgICByZXN1bHQgPSBzcWwuc3RlcCgpOwogICAgICAgICB9CkBAIC03MDUsNiArODU5
LDMyIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgICAgICBMT0dfRVJST1IoIkVy
cm9yIGZldGNoaW5nIGluZGV4IGluZm8gZnJvbSBkYXRhYmFzZSBvbiBkaXNrIik7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQorICAgICAgICBkYXRhYmFzZUluZm8tPnNl
dE1heEluZGV4SUQobWF4SW5kZXhJRCk7CisKKyAgICAgICAgaWYgKCFzaG91bGRVcGRhdGVJbmRl
eElEKQorICAgICAgICAgICAgcmV0dXJuIGRhdGFiYXNlSW5mbzsKKworICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogaW5kZXhJRE1hcCkgeworICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNx
bCgqbV9zcWxpdGVEQiwgIlVQREFURSBJbmRleEluZm8gU0VUIGlkID0gPyBXSEVSRSBpZCA9ID8g
QU5EIG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIGVudHJ5
LnZhbHVlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDIs
IGVudHJ5LmtleS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC5i
aW5kSW50NjQoMywgZW50cnkua2V5LmZpcnN0KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAg
ICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gdXBkYXRlIGlkIG9mIEluZGV4SW5mbyB0YWJsZSIpOworICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgcmVjb3JkU3FsKCptX3NxbGl0ZURCLCAiVVBEQVRFIEluZGV4UmVjb3JkcyBT
RVQgaW5kZXhJRCA9ID8gV0hFUkUgaW5kZXhJRCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyJf
cyk7CisgICAgICAgICAgICBpZiAocmVjb3JkU3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgICAgICB8fCByZWNvcmRTcWwuYmluZEludDY0KDEsIGVudHJ5LnZhbHVlKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCByZWNvcmRTcWwuYmluZEludDY0KDIsIGVudHJ5
LmtleS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHJlY29yZFNxbC5i
aW5kSW50NjQoMywgZW50cnkua2V5LmZpcnN0KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAg
ICB8fCByZWNvcmRTcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gdXBkYXRlIGluZGV4SUQgb2YgSW5kZXhSZWNvcmRzIHRhYmxl
Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gZGF0YWJhc2VJbmZvOwpAQCAtODIzLDYgKzEwMDMs
MTIgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFi
YXNlSW5mbyhJREJEYXRhYmFzZUluZm8mIGluZm8KICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsg
VW5rbm93bkVycm9yLCAiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIEluZGV4IFJlY29yZHMg
aW5kZXggaW4gZGF0YWJhc2UiX3MgfTsKICAgICB9CiAKKyAgICBpZiAoIWVuc3VyZVZhbGlkSW5k
ZXhSZWNvcmRzUmVjb3JkSW5kZXgoKSkgeworICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0
aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHNlY29uZCBpbmRleCBmb3IgaW4gZGF0YWJh
c2UiKTsKKyAgICAgICAgY2xvc2VTUUxpdGVEQigpOworICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBVbmtub3duRXJyb3IsICJFcnJvciBjcmVhdGluZyBvciBtaWdyYXRpbmcgSW5kZXggUmVjb3Jk
cyBzZWNvbmQgaW5kZXggaW4gZGF0YWJhc2UiX3MgfTsKKyAgICB9CisKICAgICBpZiAoIWVuc3Vy
ZVZhbGlkQmxvYlRhYmxlcygpKSB7CiAgICAgICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcg
b3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMgdGFibGVzIGluIGRhdGFiYXNlIik7CiAgICAgICAg
IGNsb3NlU1FMaXRlREIoKTsKQEAgLTk1MiwxMyArMTEzOCwxMiBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdAogICAgIH0KIAogICAgIHsKLSAgICAgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVt
ZW50KFNRTDo6Q3JlYXRlT2JqZWN0U3RvcmVJbmZvLCAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVJ
bmZvIFZBTFVFUyAoPywgPywgPywgPywgPyk7Il9zKTsKKyAgICAgICAgYXV0byogc3FsID0gY2Fj
aGVkU3RhdGVtZW50KFNRTDo6Q3JlYXRlT2JqZWN0U3RvcmVJbmZvLCAiSU5TRVJUIElOVE8gT2Jq
ZWN0U3RvcmVJbmZvIFZBTFVFUyAoPywgPywgPywgPyk7Il9zKTsKICAgICAgICAgaWYgKCFzcWwK
ICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRlbnRpZmllcigpKSAhPSBT
UUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgaW5mby5uYW1lKCkpICE9
IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYigzLCBrZXlQYXRoQmxvYi0+
ZGF0YSgpLCBrZXlQYXRoQmxvYi0+c2l6ZSgpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8
IHNxbC0+YmluZEludCg0LCBpbmZvLmF1dG9JbmNyZW1lbnQoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCg1LCBpbmZvLm1heEluZGV4SUQoKSkgIT0gU1FMSVRF
X09LCiAgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWRkIG9iamVjdCBzdG9yZSAnJXMnIHRvIE9iamVj
dFN0b3JlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBpbmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQ291bGQgbm90IGNyZWF0
ZSBvYmplY3Qgc3RvcmUiX3MgfTsKQEAgLTEyMjMsNiArMTQwOCw3IEBAIElEQkVycm9yIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjCiAgICAgYXV0byogb2JqZWN0U3RvcmUgPSBtX2RhdGFiYXNlSW5mby0+aW5mb0Zv
ckV4aXN0aW5nT2JqZWN0U3RvcmUoaW5mby5vYmplY3RTdG9yZUlkZW50aWZpZXIoKSk7CiAgICAg
QVNTRVJUKG9iamVjdFN0b3JlKTsKICAgICBvYmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleChp
bmZvKTsKKyAgICBtX2RhdGFiYXNlSW5mby0+c2V0TWF4SW5kZXhJRChpbmZvLmlkZW50aWZpZXIo
KSk7CiAKICAgICByZXR1cm4gSURCRXJyb3IgeyB9OwogfQpAQCAtMTIzNywxMSArMTQyMywxMCBA
QCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZEhhc0luZGV4UmVjb3Jk
KGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbwogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJVbmFibGUgdG8gc2VyaWFsaXplIElEQktleSB0byBjaGVjayBmb3IgaW5kZXgg
cmVjb3JkIGluIGRhdGFiYXNlIl9zIH07CiAgICAgfQogCi0gICAgYXV0byogc3FsID0gY2FjaGVk
U3RhdGVtZW50KFNRTDo6SGFzSW5kZXhSZWNvcmQsICJTRUxFQ1Qgcm93aWQgRlJPTSBJbmRleFJl
Y29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkgPSBD
QVNUKD8gQVMgVEVYVCk7Il9zKTsKKyAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FM
OjpIYXNJbmRleFJlY29yZCwgIlNFTEVDVCByb3dpZCBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBp
bmRleElEID0gPyBBTkQga2V5ID0gQ0FTVCg/IEFTIFRFWFQpOyJfcyk7CiAgICAgaWYgKCFzcWwK
ICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgaW5mby5pZGVudGlmaWVyKCkpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCBpbmZvLm9iamVjdFN0b3JlSWRlbnRp
ZmllcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3FsLT5iaW5kQmxvYigzLCBpbmRleEtl
eUJ1ZmZlci0+ZGF0YSgpLCBpbmRleEtleUJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgfHwgc3FsLT5iaW5kQmxvYigyLCBpbmRleEtleUJ1ZmZlci0+ZGF0YSgpLCBpbmRl
eEtleUJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciBjaGVja2luZyBmb3IgaW5kZXggcmVjb3JkIGluIGRhdGFiYXNlIik7CiAgICAgICAgIHJl
dHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIGNoZWNraW5nIGZvciBpbmRleCBy
ZWNvcmQgaW4gZGF0YWJhc2UiX3MgfTsKICAgICB9CkBAIC0xMzU5LDEwICsxNTQ0LDkgQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICB9CiAKICAgICB7Ci0gICAgICAgIGF1dG8qIHNxbCA9
IGNhY2hlZFN0YXRlbWVudChTUUw6OkRlbGV0ZUluZGV4UmVjb3JkcywgIkRFTEVURSBGUk9NIElu
ZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQgb2JqZWN0U3RvcmVJRCA9ID87Il9zKTsK
KyAgICAgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6RGVsZXRlSW5kZXhSZWNv
cmRzLCAiREVMRVRFIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/OyJfcyk7CiAg
ICAgICAgIGlmICghc3FsCiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBpbmRleElk
ZW50aWZpZXIpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwg
b2JqZWN0U3RvcmVJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBkZWxldGUgaW5kZXggcmVjb3JkcyBmb3IgaW5kZXggaWQgJSIgUFJJaTY0ICIgZnJvbSBJbmRl
eFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgaW5kZXhJZGVudGlmaWVyLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0
dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRXJyb3IgZGVsZXRpbmcgaW5kZXggcmVjb3Jk
cyBmcm9tIGRhdGFiYXNlIl9zIH07CkBAIC0xNTgyLDYxICsxNzY2LDIxIEBAIElEQkVycm9yIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmVjb3JkKFNRTGl0ZUlEQlRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwKICAgICB9CiAKICAgICAvLyBEZWxldGUgcmVjb3JkIGZyb20gaW5kZXhlcyBz
dG9yZQotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+dm0o
KSk7Ci0gICAgYXV0byBqc1ZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShtX3Nl
cmlhbGl6YXRpb25Db250ZXh0LT5leGVjU3RhdGUoKSwgdmFsdWUpOwotICAgIGlmIChqc1ZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBJREJFcnJvciB7IH07Ci0KLSAg
ICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlSW5mbyA6IG1fZGF0YWJhc2VJbmZvLT5vYmplY3RTdG9y
ZU1hcCgpLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgaW5kZXhJbmZvIDogb2JqZWN0
U3RvcmVJbmZvLmluZGV4TWFwKCkudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIEluZGV4S2V5IGlu
ZGV4S2V5OwotICAgICAgICAgICAgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVlKG1fc2VyaWFsaXph
dGlvbkNvbnRleHQtPmV4ZWNTdGF0ZSgpLCBpbmRleEluZm8sIGpzVmFsdWUsIGluZGV4S2V5LCBv
YmplY3RTdG9yZUluZm8ua2V5UGF0aCgpLCBrZXlEYXRhKTsKLSAgICAgICAgICAgIGlmIChpbmRl
eEtleS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICB7CisgICAgICAg
IGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChTUUw6OkRlbGV0ZU9iamVjdFN0b3JlSW5kZXhS
ZWNvcmQsICJERUxFVEUgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8g
QU5EIG9iamVjdFN0b3JlUmVjb3JkSUQgPSA/OyJfcyk7CiAKLSAgICAgICAgICAgIGlmICghaW5k
ZXhJbmZvLm11bHRpRW50cnkoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBkZWxl
dGVPbmVJbmRleFJlY29yZChvYmplY3RTdG9yZUlELCByZWNvcmRJRCwgaW5kZXhLZXkuYXNPbmVL
ZXkoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5pc051bGwoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIGluZGV4S2V5cyA9IGluZGV4S2V5Lm11bHRpRW50cnkoKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8mIGtleSA6IGluZGV4S2V5cykgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGVycm9yID0gZGVsZXRlT25lSW5kZXhSZWNvcmQob2JqZWN0U3RvcmVJRCwgcmVjb3JkSUQs
IGtleSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIXNxbAorICAgICAgICAgICAg
fHwgc3FsLT5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCByZWNvcmRJRCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgZGVsZXRlIHJlY29yZCBmcm9tIGluZGV4ZXMgZm9yIG9iamVjdCBzdG9y
ZSAlIiBQUklpNjQgIiAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUlELCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJu
IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRmFpbGVkIHRvIGRlbGV0ZSBpbmRleCBlbnRyaWVz
IGZvciBvYmplY3Qgc3RvcmUgcmVjb3JkIl9zIH07CiAgICAgICAgIH0KICAgICB9CiAKICAgICBy
ZXR1cm4gSURCRXJyb3IgeyB9OwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmRlbGV0ZU9uZUluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBvYmpl
Y3RTdG9yZVJlY29yZElELCBjb25zdCBJREJLZXlEYXRhJiBpbmRleEtleSkKLXsKLSAgICBpZiAo
IWluZGV4S2V5LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgfTsKLQotICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGluZGV4S2V5QnVmZmVyID0gc2VyaWFsaXplSURCS2V5RGF0
YShpbmRleEtleSk7Ci0gICAgaWYgKCFpbmRleEtleUJ1ZmZlcikgewotICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCBkZWxldGUgcmVjb3JkIGZyb20gb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAi
IChDb3VsZCBub3Qgc2VyaWFsaXplIGluZGV4IGtleSkiLCBvYmplY3RTdG9yZUlEKTsKLSAgICAg
ICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRmFpbGVkIHRvIGRlbGV0ZSBpbmRl
eCBlbnRyaWVzIGZvciBvYmplY3Qgc3RvcmUgcmVjb3JkIl9zIH07Ci0gICAgfQotCi0gICAgYXV0
byogc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6RGVsZXRlT2JqZWN0U3RvcmVJbmRleFJlY29y
ZCwgIkRFTEVURSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQg
b2JqZWN0U3RvcmVSZWNvcmRJRCA9ID8gQU5EIGtleSA9IENBU1QoPyBBUyBURVhUKTsiX3MpOwot
ICAgIGlmICghc3FsCi0gICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIG9iamVjdFN0b3JlSUQp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZVJl
Y29yZElEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3FsLT5iaW5kQmxvYigzLCBpbmRleEtl
eUJ1ZmZlci0+ZGF0YSgpLCBpbmRleEtleUJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3QgZGVsZXRlIHJlY29yZCBmcm9tIGluZGV4ZXMgZm9yIG9iamVjdCBzdG9yZSAl
IiBQUklpNjQgIiAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUlELCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQgdG8gZGVsZXRlIGluZGV4IGVudHJpZXMgZm9yIG9i
amVjdCBzdG9yZSByZWNvcmQiX3MgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSURCRXJyb3IgeyB9
OwotfQotCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJhbmdlKGNvbnN0
IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBv
YmplY3RTdG9yZUlELCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlKQogewogICAgIExP
RyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJhbmdlIC0gcmFuZ2Ug
JXMsIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIGtleVJhbmdlLmxvZ2dpbmdTdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBvYmplY3RTdG9yZUlEKTsKQEAgLTE3NDEsMTMgKzE4ODUsMTEgQEAgSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNv
bnN0IElEQk9iamVjdFN0b3IKICAgICB9CiAKICAgICBpZiAoIWVycm9yLmlzTnVsbCgpICYmIGFu
eVJlY29yZHNTdWNjZWVkZWQpIHsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5QnVm
ZmVyID0gc2VyaWFsaXplSURCS2V5RGF0YShrZXkpOwotCi0gICAgICAgIGF1dG8qIHNxbCA9IGNh
Y2hlZFN0YXRlbWVudChTUUw6OkRlbGV0ZU9iamVjdFN0b3JlSW5kZXhSZWNvcmQsICJERUxFVEUg
RlJPTSBJbmRleFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIHZhbHVlID0gQ0FT
VCg/IEFTIFRFWFQpOyJfcyk7CisgICAgICAgIGF1dG8qIHNxbCA9IGNhY2hlZFN0YXRlbWVudChT
UUw6OkRlbGV0ZU9iamVjdFN0b3JlSW5kZXhSZWNvcmQsICJERUxFVEUgRlJPTSBJbmRleFJlY29y
ZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIG9iamVjdFN0b3JlUmVjb3JkSUQgPSA/OyJf
cyk7CiAKICAgICAgICAgaWYgKCFzcWwKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEs
IGluZm8uaWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC0+Ymlu
ZEJsb2IoMiwga2V5QnVmZmVyLT5kYXRhKCksIGtleUJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIHJlY29yZElEKSAhPSBTUUxJVEVf
T0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAg
ICAgICBMT0dfRVJST1IoIkFkZGluZyBvbmUgSW5kZXggcmVjb3JkIGZhaWxlZCwgYnV0IGZhaWxl
ZCB0byByZW1vdmUgYWxsIG90aGVycyB0aGF0IHByZXZpb3VzbHkgc3VjY2VlZGVkIik7CiAgICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJBZGRpbmcgb25lIEluZGV4
IHJlY29yZCBmYWlsZWQsIGJ1dCBmYWlsZWQgdG8gcmVtb3ZlIGFsbCBvdGhlcnMgdGhhdCBwcmV2
aW91c2x5IHN1Y2NlZWRlZCJfcyB9OwpAQCAtMjI4NiwxMiArMjQyOCwxMSBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZEdldEluZGV4UmVjb3JkRm9yT25lS2V5KGlu
dDY0X3QgaW5kZXhJRAogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJV
bmFibGUgdG8gc2VyaWFsaXplIElEQktleSB0byBsb29rIHVwIG9uZSBpbmRleCByZWNvcmQiX3Mg
fTsKICAgICB9CiAKLSAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpHZXRJbmRl
eFJlY29yZEZvck9uZUtleSwgIlNFTEVDVCBJbmRleFJlY29yZHMudmFsdWUsIFJlY29yZHMudmFs
dWUsIFJlY29yZHMucmVjb3JkSUQgRlJPTSBSZWNvcmRzIElOTkVSIEpPSU4gSW5kZXhSZWNvcmRz
IE9OIFJlY29yZHMucmVjb3JkSUQgPSBJbmRleFJlY29yZHMub2JqZWN0U3RvcmVSZWNvcmRJRCBX
SEVSRSBJbmRleFJlY29yZHMuaW5kZXhJRCA9ID8gQU5EIEluZGV4UmVjb3Jkcy5vYmplY3RTdG9y
ZUlEID0gPyBBTkQgSW5kZXhSZWNvcmRzLmtleSA9IENBU1QoPyBBUyBURVhUKSBPUkRFUiBCWSBJ
bmRleFJlY29yZHMua2V5LCBJbmRleFJlY29yZHMudmFsdWUiX3MpOworICAgIGF1dG8qIHNxbCA9
IGNhY2hlZFN0YXRlbWVudChTUUw6OkdldEluZGV4UmVjb3JkRm9yT25lS2V5LCAiU0VMRUNUIElu
ZGV4UmVjb3Jkcy52YWx1ZSwgUmVjb3Jkcy52YWx1ZSwgUmVjb3Jkcy5yZWNvcmRJRCBGUk9NIFJl
Y29yZHMgSU5ORVIgSk9JTiBJbmRleFJlY29yZHMgT04gUmVjb3Jkcy5vYmplY3RTdG9yZUlEID0g
SW5kZXhSZWNvcmRzLm9iamVjdFN0b3JlSUQgQU5EIFJlY29yZHMucmVjb3JkSUQgPSBJbmRleFJl
Y29yZHMub2JqZWN0U3RvcmVSZWNvcmRJRCBXSEVSRSBJbmRleFJlY29yZHMuaW5kZXhJRCA9ID8g
QU5EIEluZGV4UmVjb3Jkcy5rZXkgPSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkgSW5kZXhSZWNv
cmRzLmtleSwgSW5kZXhSZWNvcmRzLnZhbHVlIl9zKTsKIAogICAgIGlmICghc3FsCiAgICAgICAg
IHx8IHNxbC0+YmluZEludDY0KDEsIGluZGV4SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBz
cWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c3FsLT5iaW5kQmxvYigzLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpICE9IFNRTElU
RV9PSykgeworICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDIsIGJ1ZmZlci0+ZGF0YSgpLCBidWZm
ZXItPnNpemUoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGxvb2t1cCBpbmRleCByZWNvcmQgaW4gZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIGxvb2t1cCBpbmRleCByZWNvcmQgaW4gZGF0
YWJhc2UiX3MgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNzVm
N2U4ZDQwNWIyNWEyMTEzMGRjZjJhMDZlMDc1MjJkOTYzMDNiYi4uY2UyOWQyY2ZjZmI0MWZhYjZi
ZDMwNWJiZTJkY2YwNDU2ZmI2ZDgyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApA
QCAtNDQsNiArNDQsOCBAQCBjbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7CiAKIG5hbWVzcGFjZSBJREJT
ZXJ2ZXIgewogCitlbnVtIGNsYXNzIElzU2NoZW1hVXBncmFkZWQgOiBib29sIHsgTm8sIFllcyB9
OworCiBjbGFzcyBJREJTZXJpYWxpemF0aW9uQ29udGV4dDsKIGNsYXNzIFNRTGl0ZUlEQkN1cnNv
cjsKIApAQCAtMTExLDEyICsxMTMsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIGVuc3VyZVZhbGlk
UmVjb3Jkc1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKCk7
CiAgICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7CisgICAgYm9vbCBlbnN1
cmVWYWxpZEluZGV4UmVjb3Jkc1JlY29yZEluZGV4KCk7CiAgICAgYm9vbCBlbnN1cmVWYWxpZEJs
b2JUYWJsZXMoKTsKKyAgICBPcHRpb25hbDxJc1NjaGVtYVVwZ3JhZGVkPiBlbnN1cmVWYWxpZE9i
amVjdFN0b3JlSW5mb1RhYmxlKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5m
bz4gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKCk7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJbmZvKCk7CiAK
ICAgICBJREJFcnJvciBkZWxldGVSZWNvcmQoU1FMaXRlSURCVHJhbnNhY3Rpb24mLCBpbnQ2NF90
IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleURhdGEmKTsKLSAgICBJREJFcnJvciBkZWxldGVP
bmVJbmRleFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVS
ZWNvcmRJRCwgY29uc3QgSURCS2V5RGF0YSYpOwogICAgIElEQkVycm9yIHVuY2hlY2tlZEdldEtl
eUdlbmVyYXRvclZhbHVlKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QmIG91dFZhbHVl
KTsKICAgICBJREJFcnJvciB1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JWYWx1ZShpbnQ2NF90IG9i
amVjdFN0b3JlSUQsIHVpbnQ2NF90IHZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAppbmRl
eCA5MGMwYWQzYjJhNjhlZGQwYWZiMDhlMzQ4YzJiMGQyOTJiMmI0OGI1Li4yMWRmZjg0Zjc1ZmE0
YjU5NjQ1NWM2ZmU2YzZkMTU1M2E4MjlmOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcApAQCAt
MTIwLDcgKzEyMCw3IEBAIHN0YXRpYyBTdHJpbmcgYnVpbGRJbmRleFN0YXRlbWVudChjb25zdCBJ
REJLZXlSYW5nZURhdGEmIGtleVJhbmdlLCBJbmRleGVkREI6OkN1CiB7CiAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwogCi0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJTRUxFQ1Qgcm93aWQs
IGtleSwgdmFsdWUgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIG9iamVj
dFN0b3JlSUQgPSA/IEFORCBrZXkgIik7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJTRUxF
Q1Qgcm93aWQsIGtleSwgdmFsdWUgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9ID8g
QU5EIGtleSAiKTsKICAgICBpZiAoIWtleVJhbmdlLmxvd2VyS2V5LmlzTnVsbCgpICYmICFrZXlS
YW5nZS5sb3dlck9wZW4pCiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPj0iKTsKICAg
ICBlbHNlCkBAIC0yODksMTEgKzI4OSw2IEBAIGJvb2wgU1FMaXRlSURCQ3Vyc29yOjpiaW5kQXJn
dW1lbnRzKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChtX2luZGV4
SUQgIT0gSURCSW5kZXhJbmZvOjpJbnZhbGlkSWQgJiYgbV9zdGF0ZW1lbnQtPmJpbmRJbnQ2NChj
dXJyZW50QmluZEFyZ3VtZW50KyssIG1fb2JqZWN0U3RvcmVJRCkgIT0gU1FMSVRFX09LKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGJpbmQgb2JqZWN0IHN0b3JlIGlkIGFyZ3VtZW50
IGZvciBhbiBpbmRleCBjdXJzb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQog
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHNlcmlhbGl6ZUlEQktleURhdGEobV9j
dXJyZW50TG93ZXJLZXkpOwogICAgIGlmIChtX3N0YXRlbWVudC0+YmluZEJsb2IoY3VycmVudEJp
bmRBcmd1bWVudCsrLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9P
SykgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgY3Vyc29yIHN0YXRlbWVu
dCAobG93ZXIga2V5KSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggYjcyYjYzN2Ix
N2ZkYzAzNjIzZjFhN2E0MmIyN2JhNDRjZWY1ZWZlMC4uYTBhMDUxNmY2ZmJjYzRlNjgwZmMyYzlh
N2YwNDg3OTIzNTUzY2RkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0zMDksNyAr
MzA5LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlQmFja2luZ1N0b3JlKHVp
bnQ2NF90IGRlbGV0ZWRWZXJzaW9uKQogICAgIC8vIHdlIHdvbid0IGhhdmUgYSBtX21vc3RSZWNl
bnREZWxldGVkRGF0YWJhc2VJbmZvLiBJbiB0aGF0IGNhc2UsIHdlJ2xsIG1hbnVmYWN0dXJlIG9u
ZSB1c2luZyB0aGUKICAgICAvLyBwYXNzZWQgaW4gZGVsZXRlZFZlcnNpb24gYXJndW1lbnQuCiAg
ICAgaWYgKCFtX21vc3RSZWNlbnREZWxldGVkRGF0YWJhc2VJbmZvKQotICAgICAgICBtX21vc3RS
ZWNlbnREZWxldGVkRGF0YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KG1f
aWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSwgZGVsZXRlZFZlcnNpb24pOworICAgICAgICBtX21v
c3RSZWNlbnREZWxldGVkRGF0YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+
KG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSwgZGVsZXRlZFZlcnNpb24sIDApOwogCiAgICAg
aWYgKG1fY3VycmVudE9wZW5EQlJlcXVlc3QpIHsKICAgICAgICAgbV9jdXJyZW50T3BlbkRCUmVx
dWVzdC0+bm90aWZ5RGlkRGVsZXRlRGF0YWJhc2UoKm1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFz
ZUluZm8pOwpAQCAtNjMzLDYgKzYzMyw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0
ZUluZGV4KFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjCiAgICAg
ICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3Rp
bmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKICAgICAgICAgQVNT
RVJUKG9iamVjdFN0b3JlSW5mbyk7CiAgICAgICAgIG9iamVjdFN0b3JlSW5mby0+YWRkRXhpc3Rp
bmdJbmRleChpbmZvKTsKKyAgICAgICAgbV9kYXRhYmFzZUluZm8tPnNldE1heEluZGV4SUQoaW5m
by5pZGVudGlmaWVyKCkpOwogICAgIH0KIAogICAgIGNhbGxiYWNrKGVycm9yKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUlu
Zm8uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFi
YXNlSW5mby5jcHAKaW5kZXggZWEzMTJjY2I3ZGNiM2E4OTMwMDkxZmY1MGQwODYzNGNlZGQ3MWQy
YS4uODYwM2ZlNjZiMDVkNmM0NTI2MzFhN2QyNTkyNmMyZDA4N2I5MDVkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFi
YXNlSW5mby5jcHAKQEAgLTM2LDkgKzM2LDEwIEBAIElEQkRhdGFiYXNlSW5mbzo6SURCRGF0YWJh
c2VJbmZvKCkKIHsKIH0KIAotSURCRGF0YWJhc2VJbmZvOjpJREJEYXRhYmFzZUluZm8oY29uc3Qg
U3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uKQorSURCRGF0YWJhc2VJbmZvOjpJREJEYXRh
YmFzZUluZm8oY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uLCB1aW50NjRfdCBt
YXhJbmRleElEKQogICAgIDogbV9uYW1lKG5hbWUpCiAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikK
KyAgICAsIG1fbWF4SW5kZXhJRChtYXhJbmRleElEKQogewogfQogCkBAIC00Niw2ICs0Nyw3IEBA
IElEQkRhdGFiYXNlSW5mbzo6SURCRGF0YWJhc2VJbmZvKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYg
b3RoZXIsIElzb2xhdGVkQ29weVRhZykKICAgICA6IG1fbmFtZShvdGhlci5tX25hbWUuaXNvbGF0
ZWRDb3B5KCkpCiAgICAgLCBtX3ZlcnNpb24ob3RoZXIubV92ZXJzaW9uKQogICAgICwgbV9tYXhP
YmplY3RTdG9yZUlEKG90aGVyLm1fbWF4T2JqZWN0U3RvcmVJRCkKKyAgICAsIG1fbWF4SW5kZXhJ
RChvdGhlci5tX21heEluZGV4SUQpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG90
aGVyLm1fb2JqZWN0U3RvcmVNYXApCiAgICAgICAgIG1fb2JqZWN0U3RvcmVNYXAuc2V0KGVudHJ5
LmtleSwgZW50cnkudmFsdWUuaXNvbGF0ZWRDb3B5KCkpOwpAQCAtMTY4LDYgKzE3MCwxMiBAQCBT
dHJpbmcgSURCRGF0YWJhc2VJbmZvOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKIAogI2VuZGlmCiAK
K3ZvaWQgSURCRGF0YWJhc2VJbmZvOjpzZXRNYXhJbmRleElEKHVpbnQ2NF90IG1heEluZGV4SUQp
Cit7CisgICAgQVNTRVJUKG1heEluZGV4SUQgPiBtX21heEluZGV4SUQgfHwgKCFtYXhJbmRleElE
ICYmICFtX21heEluZGV4SUQpKTsKKyAgICBtX21heEluZGV4SUQgPSBtYXhJbmRleElEOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJEYXRhYmFzZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3No
YXJlZC9JREJEYXRhYmFzZUluZm8uaAppbmRleCA4MjM1YmI4OGMzMzJkNzdlM2E4ZTQ1NTJhM2Ji
ZmEwYTkwYjBmNTY2Li5lMmUxNTJhZmI3Y2M0M2I3MzVkYTJjYzI0ODVhNzJmMTMwMDA4M2Q2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0
YWJhc2VJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkRhdGFiYXNlSW5mby5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIElEQkRhdGFiYXNlSW5mbyB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgSURCRGF0YWJhc2VJbmZvKGNvbnN0IFN0cmluZyYgbmFtZSwg
dWludDY0X3QgdmVyc2lvbik7CisgICAgZXhwbGljaXQgSURCRGF0YWJhc2VJbmZvKGNvbnN0IFN0
cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbiwgdWludDY0X3QgbWF4SW5kZXhJRCk7CiAKICAg
ICBlbnVtIElzb2xhdGVkQ29weVRhZyB7IElzb2xhdGVkQ29weSB9OwogICAgIElEQkRhdGFiYXNl
SW5mbyhjb25zdCBJREJEYXRhYmFzZUluZm8mLCBJc29sYXRlZENvcHlUYWcpOwpAQCAtNjgsNiAr
NjgsOSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBib29s
IGRlY29kZShEZWNvZGVyJiwgSURCRGF0YWJhc2VJbmZvJik7CiAKKyAgICB2b2lkIHNldE1heElu
ZGV4SUQodWludDY0X3QgbWF4SW5kZXhJRCk7CisgICAgdWludDY0X3QgZ2VuZXJhdGVOZXh0SW5k
ZXhJRCgpIHsgcmV0dXJuICsrbV9tYXhJbmRleElEOyB9CisKICNpZiAhTE9HX0RJU0FCTEVECiAg
ICAgU3RyaW5nIGxvZ2dpbmdTdHJpbmcoKSBjb25zdDsKICNlbmRpZgpAQCAtNzksNiArODIsNyBA
QCBwcml2YXRlOgogICAgIFN0cmluZyBtX25hbWU7CiAgICAgdWludDY0X3QgbV92ZXJzaW9uIHsg
MCB9OwogICAgIHVpbnQ2NF90IG1fbWF4T2JqZWN0U3RvcmVJRCB7IDAgfTsKKyAgICB1aW50NjRf
dCBtX21heEluZGV4SUQgeyAwIH07CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBJREJPYmplY3RT
dG9yZUluZm8+IG1fb2JqZWN0U3RvcmVNYXA7CiAKQEAgLTg3LDcgKzkxLDcgQEAgcHJpdmF0ZToK
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIElEQkRhdGFiYXNlSW5mbzo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8PCBtX25hbWUgPDwgbV92ZXJz
aW9uIDw8IG1fbWF4T2JqZWN0U3RvcmVJRCA8PCBtX29iamVjdFN0b3JlTWFwOworICAgIGVuY29k
ZXIgPDwgbV9uYW1lIDw8IG1fdmVyc2lvbiA8PCBtX21heE9iamVjdFN0b3JlSUQgPDwgbV9tYXhJ
bmRleElEIDw8IG1fb2JqZWN0U3RvcmVNYXA7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
CkBAIC0xMDIsNiArMTA2LDkgQEAgYm9vbCBJREJEYXRhYmFzZUluZm86OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBJREJEYXRhYmFzZUluZm8mIGluZm8pCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpbmZvLm1fbWF4T2JqZWN0U3RvcmVJRCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX21heEluZGV4SUQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9vYmplY3RTdG9yZU1hcCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5mby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcAppbmRl
eCA1YzcyODJhNDYzOGViNGU2NzFjNTNmMWM1ZmRjZjJhZjI3MmVhYzU1Li40ZWFkMzhiZmJjOTEx
Nzg5ZGIyNTc2ODljNjVlMDI4YWVkZmNhYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmNw
cApAQCAtNDMsOSArNDMsOSBAQCBJREJPYmplY3RTdG9yZUluZm86OklEQk9iamVjdFN0b3JlSW5m
byh1aW50NjRfdCBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIG5hbWUsCiB7CiB9CiAKLUlEQklu
ZGV4SW5mbyBJREJPYmplY3RTdG9yZUluZm86OmNyZWF0ZU5ld0luZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCS2V5UGF0aCYmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkp
CitJREJJbmRleEluZm8gSURCT2JqZWN0U3RvcmVJbmZvOjpjcmVhdGVOZXdJbmRleCh1aW50NjRf
dCBpbmRleElELCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQktleVBhdGgmJiBrZXlQYXRoLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQogewotICAgIElEQkluZGV4SW5mbyBpbmZvKCsrbV9t
YXhJbmRleElELCBtX2lkZW50aWZpZXIsIG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHVuaXF1ZSwg
bXVsdGlFbnRyeSk7CisgICAgSURCSW5kZXhJbmZvIGluZm8oaW5kZXhJRCwgbV9pZGVudGlmaWVy
LCBuYW1lLCBXVEZNb3ZlKGtleVBhdGgpLCB1bmlxdWUsIG11bHRpRW50cnkpOwogICAgIG1faW5k
ZXhNYXAuc2V0KGluZm8uaWRlbnRpZmllcigpLCBpbmZvKTsKICAgICByZXR1cm4gaW5mbzsKIH0K
QEAgLTU0LDkgKzU0LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUluZm86OmFkZEV4aXN0aW5nSW5k
ZXgoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvKQogewogICAgIEFTU0VSVCghbV9pbmRleE1hcC5j
b250YWlucyhpbmZvLmlkZW50aWZpZXIoKSkpOwogCi0gICAgaWYgKGluZm8uaWRlbnRpZmllcigp
ID4gbV9tYXhJbmRleElEKQotICAgICAgICBtX21heEluZGV4SUQgPSBpbmZvLmlkZW50aWZpZXIo
KTsKLQogICAgIG1faW5kZXhNYXAuc2V0KGluZm8uaWRlbnRpZmllcigpLCBpbmZvKTsKIH0KIApA
QCAtMTAxLDggKzk4LDYgQEAgSURCT2JqZWN0U3RvcmVJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6
aXNvbGF0ZWRDb3B5KCkgY29uc3QKICAgICBmb3IgKGF1dG8mIGl0ZXJhdG9yIDogbV9pbmRleE1h
cCkKICAgICAgICAgcmVzdWx0Lm1faW5kZXhNYXAuc2V0KGl0ZXJhdG9yLmtleSwgaXRlcmF0b3Iu
dmFsdWUuaXNvbGF0ZWRDb3B5KCkpOwogCi0gICAgcmVzdWx0Lm1fbWF4SW5kZXhJRCA9IG1fbWF4
SW5kZXhJRDsKLQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RTdG9yZUluZm8u
aAppbmRleCBkY2U5NWJlMTlhNzc2MWZkMzNhNDA3NDYxMmM5ZmZjM2Q4YjE4Njk4Li4xN2ZlNDIy
YmE0NThlYjE2OGMxZTVhZDkwOGNhZmU3NzJjNzQ3NjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQk9iamVjdFN0b3JlSW5m
by5oCkBAIC00MywxMyArNDMsMTIgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyYgbmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+
JiBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9rZXlQYXRoOyB9CiAgICAgYm9vbCBhdXRvSW5j
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9hdXRvSW5jcmVtZW50OyB9Ci0gICAgdWludDY0X3Qg
bWF4SW5kZXhJRCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4SW5kZXhJRDsgfQogCiAgICAgdm9pZCBy
ZW5hbWUoY29uc3QgU3RyaW5nJiBuZXdOYW1lKSB7IG1fbmFtZSA9IG5ld05hbWU7IH0KIAogICAg
IFdFQkNPUkVfRVhQT1JUIElEQk9iamVjdFN0b3JlSW5mbyBpc29sYXRlZENvcHkoKSBjb25zdDsK
IAotICAgIElEQkluZGV4SW5mbyBjcmVhdGVOZXdJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElE
QktleVBhdGgmJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7CisgICAgSURCSW5kZXhJ
bmZvIGNyZWF0ZU5ld0luZGV4KHVpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCS2V5UGF0aCYmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KTsKICAgICB2b2lkIGFk
ZEV4aXN0aW5nSW5kZXgoY29uc3QgSURCSW5kZXhJbmZvJik7CiAgICAgYm9vbCBoYXNJbmRleChj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzSW5kZXgodWludDY0X3QgaW5k
ZXhJZGVudGlmaWVyKSBjb25zdDsKQEAgLTc1LDcgKzc0LDYgQEAgcHJpdmF0ZToKICAgICBTdHJp
bmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPElEQktleVBhdGg+IG1fa2V5UGF0aDsKICAgICBib29s
IG1fYXV0b0luY3JlbWVudCB7IGZhbHNlIH07Ci0gICAgdWludDY0X3QgbV9tYXhJbmRleElEIHsg
MCB9OwogCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgSURCSW5kZXhJbmZvPiBtX2luZGV4TWFwOwog
fTsKQEAgLTgzLDcgKzgxLDcgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2
b2lkIElEQk9iamVjdFN0b3JlSW5mbzo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7
Ci0gICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXIgPDwgbV9uYW1lIDw8IG1fa2V5UGF0aCA8PCBt
X2F1dG9JbmNyZW1lbnQgPDwgbV9tYXhJbmRleElEIDw8IG1faW5kZXhNYXA7CisgICAgZW5jb2Rl
ciA8PCBtX2lkZW50aWZpZXIgPDwgbV9uYW1lIDw8IG1fa2V5UGF0aCA8PCBtX2F1dG9JbmNyZW1l
bnQgPDwgbV9pbmRleE1hcDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTEwMSw5
ICs5OSw2IEBAIGJvb2wgSURCT2JqZWN0U3RvcmVJbmZvOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
ciwgSURCT2JqZWN0U3RvcmVJbmZvJiBpbmZvKQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5m
by5tX2F1dG9JbmNyZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGluZm8ubV9tYXhJbmRleElEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1faW5kZXhNYXApKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA3MDMzZmE0ZGU3ZmUxMWIyMjZjNWVkYzQ2ZDk2Y2Y4OGIwYTlkNTJmLi4yYjkxYjBj
ZGVkOWNhMzAwMDlkMTIwNDY5YTUzMjJjNGE1N2IwOGI2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDEtMTcg
IFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgSW5kZXhlZERCOiBz
cGVlZCB1cCBpbmRleCByZWNvcmRzIGRlbGV0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYxOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUzOiBBZGRlZC4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGVUb1YyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW06IEFkZGVkLgorICAgICAg
ICAoLVtJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMk1lc3NhZ2VIYW5kbGVyIHVzZXJDb250
ZW50Q29udHJvbGxlcjpkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZTpdKToKKyAgICAgICAgKFRFU1Qp
OgorCiAyMDIwLTAxLTE2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlbGFuZCBieXRlY29kZSBjaGVja3BvaW50cyBzaW5jZSBidWdzIGhhdmUgYmVl
biBmaXhlZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2N2Y5Zjk4ODRhNTcyZDlhNDYyNjUz
NDQ1OGU0NWJkMGZlM2MzZDgwLi4xYzRkYzg1M2EwNjVmMmEyYzNjNDczMWY1N2E0ZWVkZDkyYmQ1
MTM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzQ1LDExICs3NDUsMTQgQEAKIAkJOTM2
OEEyNUYyMjlFRkI0NzAwQTgyOUNBIC8qIGxvY2FsLXN0b3JhZ2UtcHJvY2Vzcy1zdXNwZW5kcy0y
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTM2OEEyNUMyMjlFRkIzQTAwQTgyOUNBIC8qIGxvY2FsLXN0b3JhZ2UtcHJvY2Vzcy1zdXNw
ZW5kcy0yLmh0bWwgKi87IH07CiAJCTkzNkY3MjgwMUNEN0Q5RUMwMDY4QTBGQiAvKiBsYXJnZS12
aWRlby13aXRoLWF1ZGlvLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM2RjcyN0UxQ0Q3RDlEMDAwNjhBMEZCIC8qIGxhcmdlLXZpZGVv
LXdpdGgtYXVkaW8uaHRtbCAqLzsgfTsKIAkJOTM2RjcyODExQ0Q3RDlFQzAwNjhBMEZCIC8qIGxh
cmdlLXZpZGVvLXdpdGgtYXVkaW8ubXA0IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNkY3MjdGMUNEN0Q5RDAwMDY4QTBGQiAvKiBsYXJnZS12
aWRlby13aXRoLWF1ZGlvLm1wNCAqLzsgfTsKKwkJOTM3QjU2OUUyM0NEMjNEQjAwMkFFNjQwIC8q
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JDQkM4MTIzQ0M2RUY1MDBDQTIyMjEg
LyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUzICovOyB9OwogCQk5Mzk5QkEwNDIz
NzExMTQwMDA4MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEwMTIzNzExMEFFMDA4MzkyQkYg
LyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0gKi87IH07CiAJCTkzOTlCQTA1MjM3MTExNEYwMDgz
OTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAyMjM3MTEwQkYwMDgzOTJCRiAv
KiBJbmRleGVkREJJblBhZ2VDYWNoZS5odG1sICovOyB9OwogCQk5Mzk5QkEwNjIzNzExMTRGMDA4
MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEwMzIzNzExMEJGMDA4Mzky
QkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCAqLzsgfTsKIAkJOTNBRjRFQ0UxNTA2
RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19C
dW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dEZvckltYWdlc19CdW5kbGUuY3BwICovOyB9OwogCQk5M0FGNEVEMTE1MDZGMTMwMDA3RkQ1N0Ug
LyogbG90cy1vZi1pbWFnZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1N0UgLyogbG90cy1vZi1p
bWFnZXMuaHRtbCAqLzsgfTsKKwkJOTNCQ0JDODMyM0NDNkYyQTAwQ0EyMjIxIC8qIElEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNCQ0JDODAyM0NDNkVFODAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3Jl
SW5mb1VwZ3JhZGVUb1YyLm1tICovOyB9OworCQk5M0JDQkM4NDIzQ0M2RjQ0MDBDQTIyMjEgLyog
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JDQkM4MjIzQ0M2RUY1MDBDQTIyMjEg
LyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbCAqLzsgfTsKIAkJOTNDRkE4Njcx
Q0VCOUUzODAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0NGQTg2NjFDRUI5
REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sICovOyB9OwogCQk5M0Qx
MTlGQzIyQzY4MEY3MDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXByaXZhdGUu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93LXBy
aXZhdGUuaHRtbCAqLzsgfTsKIAkJOTNFMkM1NTUxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNF
MkM1NTQxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICovOyB9OwpAQCAtMTE1Nyw3
ICsxMTYwLDYgQEAKIAkJCWRzdFBhdGggPSBUZXN0V2ViS2l0QVBJLnJlc291cmNlczsKIAkJCWRz
dFN1YmZvbGRlclNwZWMgPSA3OwogCQkJZmlsZXMgPSAoCi0JCQkJNDZDM0FFQjMyM0QwRTUyOTAw
MUIwNjgwIC8qIGJlZm9yZXVubG9hZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTU1
QTgxN0ZGMjE4MTAyMUEwMDA0QTM5QSAvKiAxMDB4MTAwLXJlZC50Z2EgaW4gQ29weSBSZXNvdXJj
ZXMgKi8sCiAJCQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8qIDE4LWNoYXJhY3RlcnMuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1NUE4MTgwMDIxODEwMjIxMDAwNEEzOUEgLyog
NDAweDQwMC1ncmVlbi5wbmcgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC0xMjA0LDYgKzEyMDYs
NyBAQAogCQkJCTJFMTRBNTI5MUQzRkU5NkIwMDEwRjM1QiAvKiBhdXRvcGxheWluZy12aWRlby13
aXRoLWF1ZGlvLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRjQxQUI5QTAxRUY0Njk2
QjAwODNGQTA4IC8qIGJhY2tncm91bmQtaW1hZ2UtbGluay1hbmQtaW5wdXQuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLywKIAkJCQk0NjRDNzY0RDIzMERGODVDMDBBRkIwMjAgLyogQmFkU2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbnMtNC5zcWxpdGUzIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJ
CTQ2QzNBRUIzMjNEMEU1MjkwMDFCMDY4MCAvKiBiZWZvcmV1bmxvYWQuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLywKIAkJCQkyREU3MUIwMDFENDlDM0VEMDA5MDQwOTQgLyogYmxpbmtpbmctZGl2
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJN0M0ODZCQTExQUExMjU2NzAwM0Y2RjlC
IC8qIGJ1bmRsZS1maWxlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMjZERjVBNjMx
NUEyQTI3RTAwMzY4OUMyIC8qIENhbmNlbExvYWRGcm9tUmVzb3VyY2VMb2FkRGVsZWdhdGUuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTEzMDMsNiArMTMwNiw4IEBACiAJCQkJNTEwNDc3
NzMxRDI5OERERDAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtc2htIGluIENv
cHkgUmVzb3VyY2VzICovLAogCQkJCTUxMDQ3Nzc0MUQyOThEREQwMDk3NDdFQiAvKiBJREJEZWxl
dGVSZWNvdmVyeS5zcWxpdGUzLXdhbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQk1MTEwRkNG
MTFFMDFDRDY0MDA2RjhEMEIgLyogSURCSW5kZXhVcGdyYWRlVG9WMi5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLAorCQkJCTkzN0I1NjlFMjNDRDIzREIwMDJBRTY0MCAvKiBJREJPYmplY3RTdG9y
ZUluZm9VcGdyYWRlLnNxbGl0ZTMgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJOTNCQ0JDODQy
M0NDNkY0NDAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRjQxQUI5QTQxRUY0Njk2QjAwODNGQTA4IC8qIGltYWdl
LWFuZC1jb250ZW50ZWRpdGFibGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlGNEUw
QTJCNDIxMjI0MDJCMDBBRjdDN0YgLyogaW1hZ2UtYW5kLWZpbGUtdXBsb2FkLmh0bWwgaW4gQ29w
eSBSZXNvdXJjZXMgKi8sCiAJCQkJRjQxQUI5QTUxRUY0Njk2QjAwODNGQTA4IC8qIGltYWdlLWFu
ZC10ZXh0YXJlYS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtMjE4NCw2ICsyMTg5LDkg
QEAKIAkJOTNBRjRFQ0ExNTA2RjAzNTAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0
eUxheW91dEZvckltYWdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJbWFnZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRDE1MDZGMDY0MDA3RkQ1N0UgLyogTmV3Rmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JJ
bWFnZXNfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBRjRFQ0Yx
NTA2RjEyMzAwN0ZENTdFIC8qIGxvdHMtb2YtaW1hZ2VzLmh0bWwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0
bWw7IHBhdGggPSAibG90cy1vZi1pbWFnZXMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTkzQkNCQzgwMjNDQzZFRTgwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdy
YWRlVG9WMi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElEQk9i
amVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5M0JDQkM4MTIzQ0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5z
cWxpdGUzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
ZmlsZTsgcGF0aCA9IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNCQ0JDODIyM0NDNkVGNTAwQ0EyMjIxIC8qIElEQk9iamVj
dFN0b3JlSW5mb1VwZ3JhZGVUb1YyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJ
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1
dC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImF1dG9mb2N1c2VkLXRleHQtaW5w
dXQuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY4MUNFQkNGRUQw
MDA1NjVBOCAvKiBDYW5kaWRhdGVUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IENhbmRpZGF0ZVRlc3RzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4td2luZG93
LXByaXZhdGUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb2NhbHN0b3JhZ2Ut
b3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI5MjcsNiArMjkzNSw3IEBACiAJCQkJNTFBRjIzREUxRUYxQTM3MjAwNzJGMjgxIC8qIEljb25M
b2FkaW5nRGVsZWdhdGUubW0gKi8sCiAJCQkJNTEwNDc3NzUxRDI5OEUwMzAwOTc0N0VCIC8qIElE
QkRlbGV0ZVJlY292ZXJ5Lm1tICovLAogCQkJCTUxMTBGQ0VGMUUwMUNCQUEwMDZGOEQwQiAvKiBJ
REJJbmRleFVwZ3JhZGVUb1YyLm1tICovLAorCQkJCTkzQkNCQzgwMjNDQzZFRTgwMENBMjIyMSAv
KiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSAqLywKIAkJCQk1MUE1ODc4NDFEMjcy
RUYzMDA0QkE5QUYgLyogSW5kZXhlZERCRGF0YWJhc2VQcm9jZXNzS2lsbC5tbSAqLywKIAkJCQlD
QUIwRkY1NDIyMzMyQzNBMDA2Q0E1QjAgLyogSW5kZXhlZERCRmlsZU5hbWUubW0gKi8sCiAJCQkJ
OTM5OUJBMDEyMzcxMTBBRTAwODM5MkJGIC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLm1tICovLApA
QCAtMzM5Myw2ICszNDAyLDggQEAKIAkJCQk1MTA0Nzc3MDFEMjk4RDg1MDA5NzQ3RUIgLyogSURC
RGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy1zaG0gKi8sCiAJCQkJNTEwNDc3NzExRDI5OEQ4NTAwOTc0
N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtd2FsICovLAogCQkJCTUxMTBGQ0YwMUUw
MUNENTMwMDZGOEQwQiAvKiBJREJJbmRleFVwZ3JhZGVUb1YyLmh0bWwgKi8sCisJCQkJOTNCQ0JD
ODEyM0NDNkVGNTAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyAq
LywKKwkJCQk5M0JDQkM4MjIzQ0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBn
cmFkZVRvVjIuaHRtbCAqLywKIAkJCQlGNDFBQjk5OTFFRjQ2OTJDMDA4M0ZBMDggLyogaW1hZ2Ut
YW5kLWNvbnRlbnRlZGl0YWJsZS5odG1sICovLAogCQkJCUY0RTBBMkIzMjEyMjNGMkQwMEFGN0M3
RiAvKiBpbWFnZS1hbmQtZmlsZS11cGxvYWQuaHRtbCAqLywKIAkJCQlGNDFBQjk5MzFFRjQ2OTJD
MDA4M0ZBMDggLyogaW1hZ2UtYW5kLXRleHRhcmVhLmh0bWwgKi8sCkBAIC00NzM2LDYgKzQ3NDcs
NyBAQAogCQkJCTUxQUYyM0RGMUVGMUEzNzMwMDcyRjI4MSAvKiBJY29uTG9hZGluZ0RlbGVnYXRl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwNDc3NzgxRDI5OTIzQjAwOTc0N0VCIC8qIElEQkRl
bGV0ZVJlY292ZXJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExMEZDRkExRTAxQ0RCODAwNkY4
RDBCIC8qIElEQkluZGV4VXBncmFkZVRvVjIubW0gaW4gU291cmNlcyAqLywKKwkJCQk5M0JDQkM4
MzIzQ0M2RjJBMDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gaW4g
U291cmNlcyAqLywKIAkJCQk1MUE1ODc4NjFEMjczQUE5MDA0QkE5QUYgLyogSW5kZXhlZERCRGF0
YWJhc2VQcm9jZXNzS2lsbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNBQjBGRjU1MjIzMzJDNTcw
MDZDQTVCMCAvKiBJbmRleGVkREJGaWxlTmFtZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTlC
QTA0MjM3MTExNDAwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5tbSBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NDQyNmVhMDQxMGI0MjM5ZTdiMTBmNmE4MzI1ZjBmODYzNDczZDJmCkdJVCBiaW5hcnkg
cGF0Y2gKbGl0ZXJhbCA2OTYzMgp6Y21lSSomMlFVZTkwJX57djdIeVVPYHEmVjMjaDxjYnliX1Nn
fUkkSDRIMCNITnZFaTMoeHZJPmtXbEJnPyZkOGAKenkyTDUlRyRheURUejFAdktZIzxgMEB7VFc9
VXRHMTFCWnpWNTt1Z18zQmRzJjtJWj92STdgeE9waD9UVm1mQWRhCnpwNkJRMWBTYEl0YCsycjRV
NUZae3U1NHpxVGJpaiU1SSskRmEheWVRQXAtdzcjRDZNRjdmKG8pNzUrKFUoIz9fcgp6ZEdvYTU+
JHlZeD93Zj8yPzdpPjE7flZYeytrTCVmckR3M35SYDttKV5SQUhteDVzcWZecWclTDFsdTcxMFNH
eyMKemxMUUx5RmkmNztoISlTNytGREFWKlowb3JYKzVpJW5RWUZuOy01KWByOz1lTUlXLSooRH5f
Kn07bXExS2VjZkUqCnpoNGpkKjV7Vl9sPWZlcGw3RWRhJTwhRHJpJENSMFBZJVVzXk5oKSh3aypL
bTlpKEZVXkpHTGpuaV94aT5AVGp0JAp6JnR+PHMkQGckQHB4e30qSkZxWkJpSUx2V2NYS3lWezRU
bng8O3skfXpVcnZ1c19JeGhSNk8xNTJePkY4Wjxrc2cKenVfOHAkbzApMllJYSp4WnRQQzMpMmlJ
Jj1ObyFsV2tfQGtLZ0p1cSslMlVGUEQlYlZCTWF7Z2JPaEBDPnRwWGRsCno8K08xbHVlVmR2dCRm
TmYhZjcreGooQm1nK1k9WldwfHtfKUo1MFJoJGFCMjkpZ0F8Ny1Jb3I/I1lBTGJEc2Y0Zgp6NF98
OER0VmFGRD5ROE45SCFzfC1zbnhMfT5HaWZxSFF0eDM0JU5vbDVEZlg7ZmVSemVJJnEhYT5VaUNU
LWNabGUKejZqJHF0YHdDO1NlTCN6Yz47b0Veb3UxV3JPM1VmPysyQ0M1YXZhZFF5dmlfX0pmTz1y
SXR0Wk9lQDlGNDleM2t5CnozNUwyX0hNZyF4dDdfZWI/IXA8amVjQmc4YzV8bXduWUI0MXJSUzsl
a0U0bXomQzJpXiYkXnQ1OSNGcVY0SmBIMQp6T30/QWghNTQqUTBmTVU2OVM5JDkpPWpEdlReKzlg
VyEyTU81dyUqeCVXclBoND1FZ1RjPik2aXcyLVNoQ0dfPTcKemNFZ3FgQyo0bjJtQWBQQDUpenBZ
K0JzKzFeOXtaKXhkVSR2KCE1YytWRHBvI3l3Q0MjYHRiJT14cHRBKlk8TlluCnp6cGwrey1GfDh9
K1RBeDtkfFVKYzFfdkZ0aDF5Yyh3QiVeSEdtTyNobmc0OXB8NTY4PmlBU1Q+e2gwVWZtZTxUdAp6
clJKPF56Zms3IWItbVEkd3l0RUMxI1pfejNxRzVtMGg/SDZFQl50WWJZeUR0U3FHKU8/JnczMlNe
TTQ+RUckdF4KenBzJFk+S2VXNExJY3hidGEyJUF6VmNPfTUpeXI3PlVNMXVmY2x4WS1eMyo4Uy0w
Xn13ZSFfYHRoX0o4Tkh2aGxeCnowU0dfPDB1WD16MVJ3d2IydFdWPTVPfHBkJldrU0VmMEdaMUQ8
eV5mTmVAcDV7Qyg5Jl82dnUzZWF8bn50VzNFMAp6aXY0OG5jVU12cXxMfG9fYUxHSlNCQFF7KUk/
aX41SU9CRjQ+V0ZodGViZmVWUjRhfShzNHVjXzM0NnFUO3ZaTmIKejAwOVU8MDBJenowMGJaYTBT
R188MHVYb3MxcEVeMXIhfXVCTD8rNG9eenJLa3BfaX1BbUclOGVZeTk4RVA4MFM2CnpgO3ZYa0Y3
cVQ3MnRXVj01UCQjI0FPSGFmS21ZO3xmQiohenopNj18clhsTXdgIVhOJUNrOUVBNFdnND5HUzdl
Uwp6ayV7Vyl7e0V6UkxVTDFDd2UjfGMwQXo8fkJ0YE4oLSpgMF9JVlNgfnc9RENCalJRS2U0aFZL
WW5lV15nUF58e3MKenBCJCFrSmheZWErTUwkLXpsK0A+Pn1VMWB5VCFnP3BZUlA+QU9IYWZLbVk7
fGZCKnlfMDA5VTwwMEkjQi12bk0wCnpMcnRGZUN5NDhxc1BacUprTkQkNllGPWlYaD5nbXFNQ2NQ
a1AyVTdxPE55MzB7bGZ3UTJ0V1Y9NVAkIyNBT0hhZgp6S21ZO3xmSXRUZTtRN0NVND0kUHAwU0df
PDB1WD16MVJ3d2IydFdWPTVHVl4rXlp6bWFrTH5+ZzJ0V1Y9NVAkIyMKekFPSGFmS21ZO3w9eGhO
enw5QUhCTWU4NXswU0dfPDB1WD16MVJ3d2IydFdWPW1WaDw/VXQpSSZgLU9lWUtIfnsyCno1UCQj
I0FPSGFmS21ZO3xmQip5XzAwOVUqNH1xaFNJS34jVi1UMnh5ZWNmQyNHZyY8e3N+IT0+NWpMeHQr
TTFUcgp6Rlk0S3hreDhvfmY7YnFpWT5hN0pkZDRvM3YmdENoJkNGUFNgJHxeWig4bytZWEM5JEUh
aCZ2VTgkMyFTZjtJangKenYzckY1JG5MWHk/QVBiZks8b25vNVAkIyNBT0hhZkttWTt8ZkIqeV8w
RCVKcWoqNFRue2BHKSNMPiFAJjdYanNHCnpkKGtmclI8fkklMlpZMW9oK092cXojOUotbV9nV0F7
MStBb0ttWTt8ZkIqeV8wMDlVPDAwSXp6MDBqUDx6PUdmPQp6Plc9S3koaSF1cm9+Oz8mVSl4UkBJ
ckclMUAySFM4X3FLSUVAcGhPME0/T2wrSX5ENzhldDM/JCRwODttOHR9SSMKejJ8UUNBWXk0a2Vl
LVFRO3xBaHF0NVAkIyNBT0hhZkttWTt8ZkIqeV8wRCVxP2FFWCkoZispJno+R31Ud1ZHcjEmCno0
cihCcDBzI20+MDBJenowMGJaYTBTR188MHVYcGYxZGZSK2VSOHNhJj9ecWVISW9MY2BUdF8/Wi1q
bHk7YHs+KAp6MVJ3d2IydFdWPTVQJCMjQU9IYWZLJWkzdS1WP3BAPiRMRU8qSzRGVl54YilWUHBD
fHR8REZuPldLWTdzbUB+NlIKemBpaF5mUjVFI2VoaE9iMDhDMGpgeVhzNiVCbjItRyRjMHpEVVNV
VHw8QEZZVW0rY0pnTUQ0I3NkNXpgVDhuPWwxCnpiUVNpby19KElpaGxEKzNmN1VleXN9Tyh5MVJ3
d2IydFdWPTVQJCMjQU9IYWZ5cUUlI0IrNjlhYiQxYm98ME11Zgp6PTtEOXZVKko+ISome3N2em5G
Jjx3VDF1JEFPSGFmS21ZO3xmQip5XzAwOVV6NVVeZVZOUE41WF8paTdiemQ/SCYKQXBhMXs+Cgps
aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLmh0bWwgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3Jh
ZGVUb1YyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE2ZmU3YWVlNGZjYWU3NTZlMTlkYmJlNmExMmRlOGQ5
MWE0YjM5OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbApAQCAtMCwwICsxLDM4
IEBACis8c2NyaXB0PgorCit2YXIgZGF0YWJhc2VOYW1lID0gIm9iamVjdHN0b3JlaW5mby11cGdy
YWRlLXRlc3QiOwordmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGF0YWJhc2VOYW1l
KTsKK3ZhciBkYjsKK29wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVzdEhhbmRsZXIucG9zdE1l
c3NhZ2UoIlVuZXhwZWN0ZWQgdXBncmFkZSBuZWVkZWQiKTsKK30KKworb3BlblJlcXVlc3Qub25z
dWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5k
bGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiU3VjY2VzcyIpOworICAgIHZhciB0cmFuc2Fj
dGlvbiA9IGV2ZW50LnRhcmdldC5yZXN1bHQudHJhbnNhY3Rpb24oWydvYmplY3RTdG9yZScsICdh
bm90aGVyT2JqZWN0U3RvcmUnXSk7CisgICAgdmFyIGluZGV4Q291bnQgPSB0cmFuc2FjdGlvbi5v
YmplY3RTdG9yZSgnb2JqZWN0U3RvcmUnKS5pbmRleE5hbWVzOworICAgIGlmIChpbmRleGVzLmxl
bmd0aCAhPSAyKQorICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFu
ZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBjb3VudCBvZiBpbmRleGVzIGluIG9iamVjdFN0
b3JlICdvYmplY3RTdG9yZSc6ICIgKyBpbmRleGVzLmxlbmd0aCk7CisgICAgCisgICAgaW5kZXhD
b3VudCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdhbm90aGVyT2JqZWN0U3RvcmUnKS5pbmRl
eE5hbWVzOworICAgIGlmIChpbmRleGVzLmxlbmd0aCAhPSAxKQorICAgICAgICB3aW5kb3cud2Vi
a2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBj
b3VudCBvZiBpbmRleGVzIGluIG9iamVjdFN0b3JlICdhbm90aGVyT2JqZWN0U3RvcmUnOiAiICsg
aW5kZXhlcy5sZW5ndGgpOworCisgICAgcmVxID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ29i
amVjdFN0b3JlJykuaW5kZXgoJ2luZGV4S2V5JykuZ2V0KCJpbmRleEtleTEiKTsKKyAgICByZXEu
b25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKHJlcS5yZXN1bHQudmFs
dWUgIT0gInZhbHVlMSIpCisgICAgICAgICAgICB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVy
cy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBnZXQgcmVzdWx0OiAiICsgIHJl
cS5yZXN1bHQudmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3aW5kb3cud2Via2l0
Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiU3VjY2VzcyIpOworICAg
IH0KKyAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHdpbmRvdy53
ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJVbmV4cGVjdGVk
IGdldCByZXN1bHQ6ICIgKyAgcmVxLnJlc3VsdC52YWx1ZSk7CisgICAgfQorfQorCitvcGVuUmVx
dWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Via2l0Lm1lc3Nh
Z2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCBvcGVuIGVycm9y
Iik7Cit9CisKKzwvc2NyaXB0PgorCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
VG9WMi5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lZjFjMWU1MTM0MWNiMGMxZmMxMDU5YTM5ZjgxNWJhZDBjNjNk
ZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbQpAQCAtMCwwICsxLDgyIEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorCisjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdC5o
IgorI2ltcG9ydCA8V2ViQ29yZS9TUUxpdGVGaWxlU3lzdGVtLmg+CisjaW1wb3J0IDxXZWJLaXQv
V0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9u
UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYktpdC5oPgorI2ltcG9ydCA8V2ViS2l0L19X
S1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L19XS1VzZXJTdHls
ZVNoZWV0Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBib29sIHJlY2Vp
dmVkU2NyaXB0TWVzc2FnZTsKK3N0YXRpYyBSZXRhaW5QdHI8V0tTY3JpcHRNZXNzYWdlPiBsYXN0
U2NyaXB0TWVzc2FnZTsKKworQGludGVyZmFjZSBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9W
Mk1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3QgPFdLU2NyaXB0TWVzc2FnZUhhbmRsZXI+CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMk1lc3NhZ2VI
YW5kbGVyCisKKy0gKHZvaWQpdXNlckNvbnRlbnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50Q29u
dHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJvbGxlciBkaWRSZWNlaXZlU2NyaXB0TWVzc2FnZToo
V0tTY3JpcHRNZXNzYWdlICopbWVzc2FnZQoreworICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9
IHRydWU7CisgICAgbGFzdFNjcmlwdE1lc3NhZ2UgPSBtZXNzYWdlOworfQorQGVuZAorCitURVNU
KEluZGV4ZWREQiwgSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIpCit7CisgICAgUmV0YWlu
UHRyPElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyTWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIg
PSBhZG9wdE5TKFtbSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjJNZXNzYWdlSGFuZGxlciBh
bGxvY10gaW5pdF0pOworICAgIFJldGFpblB0cjxXS1dlYlZpZXdDb25maWd1cmF0aW9uPiBjb25m
aWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
KTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9sbGVyXSBhZGRTY3JpcHRN
ZXNzYWdlSGFuZGxlcjpoYW5kbGVyLmdldCgpIG5hbWU6QCJ0ZXN0SGFuZGxlciJdOworCisgICAg
W2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJvY2Vzc1Bvb2wgX3Rlcm1pbmF0ZU5ldHdvcmtQcm9jZXNz
XTsKKworICAgIC8vIENvcHkgZGF0YWJhc2UgZmlsZXMgd2l0aCBvbGQgT2JqZWN0U3RvcmVJbmZv
IHNjaGVtYSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LgorICAgIE5TVVJMICp1cmwxID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIklEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGUiIHdpdGhFeHRlbnNpb246QCJzcWxpdGUzIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0
QVBJLnJlc291cmNlcyJdOworCisgICAgTlNTdHJpbmcgKmhhc2ggPSBXZWJDb3JlOjpTUUxpdGVG
aWxlU3lzdGVtOjpjb21wdXRlSGFzaEZvckZpbGVOYW1lKCJvYmplY3RzdG9yZWluZm8tdXBncmFk
ZS10ZXN0Iik7CisgICAgTlNTdHJpbmcgKm9yaWdpbkRpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dl
YktpdC9UZXN0V2ViS2l0QVBJL1dlYnNpdGVEYXRhL0luZGV4ZWREQi92MS9maWxlX18wLyI7Cisg
ICAgTlNTdHJpbmcgKmRhdGFiYXNlRGlyZWN0b3J5ID0gW1tvcmlnaW5EaXJlY3Rvcnkgc3RyaW5n
QnlBcHBlbmRpbmdTdHJpbmc6aGFzaF0gc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF07Cisg
ICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6ZGF0YWJhc2VEaXJl
Y3RvcnldOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0
VVJMOnRhcmdldFVSTCBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGFyZ2V0VVJMIHdpdGhJbnRlcm1lZGlhdGVEaXJl
Y3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsKKworICAgIFtbTlNGaWxlTWFu
YWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDp1cmwxIHRvVVJMOlt0YXJnZXRVUkwg
VVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiSW5kZXhlZERCLnNxbGl0ZTMiXSBlcnJvcjpu
aWxdOworCisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBOU1VSTFJlcXVlc3QgKnJl
cXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMiIgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1d
OworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworCisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZyZWNlaXZlZFNjcmlwdE1lc3NhZ2UpOworCisgICAgRVhQRUNUX1dLX1NU
UkVRKEAiU3VjY2VzcyIsIFtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7Cit9CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDBmMDNmNTc5YTQ4ODFhOGQ2ZDk2NmEzMjhhOGY1NDBkN2Q3ODY2M2UuLjhiMDlkMzRm
NTk3NGJjNDJmYmY1MWE1YWY4ODlhZWExODg2ODhlZDMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMjAtMDEtMTcgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW5kZXhlZERCOiBzcGVlZCB1cCBpbmRleCByZWNvcmRzIGRlbGV0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYxOTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEluZGV4ZWREQi9i
YXNpYy9pbmRleC1jdXJzb3ItZGVsZXRlLTIuaHRtbDogQWRkZWQuCisKIDIwMjAtMDEtMDggIFNp
aHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI0
MjkxMT8pOiBIaWdoIFNpZXJyYSBSZWxlYXNlIFdLMiBQZXJmIGJvdCB0aW1pbmcgb3V0IHdoaWxl
IHJ1bm5pbmcgSW5kZXhlZERCL2xhcmdlLW51bWJlci1vZi1pbnNlcnRzLmh0bWwKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1kZWxldGUt
Mi5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRl
bGV0ZS0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmJmYmM1ZjM3NTUxYzk5ZTJiZjFiNmM2NWFhMTk4MGNi
MTU1ODViNwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2Jh
c2ljL2luZGV4LWN1cnNvci1kZWxldGUtMi5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcnVu
bmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2NvbnN0IG51bWJlck9mSXRlcmF0aW9ucyA9
IDIwOworY29uc3QgbnVtYmVyT2ZJdGVtcyA9IDEwMDAwOworY29uc3QgbnVtYmVyT2ZJdGVtc1Rv
RGVsZXRlID0gNTAwMDsKKworLy8gRGVsZXRlIGRhdGFiYXNlKHMpIGZvciB0aGUgdGVzdCBhaGVh
ZCBvZiB0aW1lLgordmFyIGRhdGFiYXNlTmFtZSA9ICJpbmRleC1jdXJzb3ItZGVsZXRlLURCLTIi
OworaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkub25zdWNjZXNzID0gZnVu
Y3Rpb24oKSB7CisgICAgc3RhcnRJdGVyYXRpb24oKTsKK30KKwordmFyIHRlc3RHZW5lcmF0b3Ig
PSBudWxsOwordmFyIGRiID0gbnVsbDsKK3ZhciB0cmFuc2FjdGlvbiA9IG51bGw7CisKK1BlcmZU
ZXN0UnVubmVyLnByZXBhcmVUb01lYXN1cmVWYWx1ZXNBc3luYyh7CisgICAgY3VzdG9tSXRlcmF0
aW9uQ291bnQ6IG51bWJlck9mSXRlcmF0aW9ucywKKyAgICB1bml0OiAnbXMnLAorICAgIGRvbmU6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24gPSBudWxsOworICAgICAgICBkYiA9
IG51bGw7CisgICAgICAgIHRlc3RHZW5lcmF0b3IgPSBudWxsOworICAgICAgICBQZXJmVGVzdFJ1
bm5lci5nYygpOworICAgIH0KK30pOworCitmdW5jdGlvbiBzdGFydEl0ZXJhdGlvbigpCit7Cisg
ICAgdGVzdEdlbmVyYXRvciA9IHJ1bkl0ZXJhdGlvbigpOworICAgIG5leHRTdGVwKCk7Cit9CisK
K2Z1bmN0aW9uIG5leHRTdGVwKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yLm5leHQoKTsKK30KKwor
ZnVuY3Rpb24gKnJ1bkl0ZXJhdGlvbigpCit7CisgICAgdmFyIG9wZW5SZXF1ZXN0ID0gaW5kZXhl
ZERCLm9wZW4oZGF0YWJhc2VOYW1lKTsKKyAgICBvcGVuUmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQg
PSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Cisg
ICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScsIHsg
a2V5UGF0aDogJ3VuaXF1ZUluZGV4S2V5JyB9KTsKKyAgICAgICAgb2JqZWN0U3RvcmUuY3JlYXRl
SW5kZXgoJ3VuaXF1ZUluZGV4JywgJ3VuaXF1ZUluZGV4S2V5JywgeyB1bmlxdWU6IHRydWUgfSk7
CisgICAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleCcsICdpbmRleEtleScpOwor
ICAgIH0KKyAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBuZXh0U3RlcDsKKworICAgIHlpZWxk
OworCisgICAgLy8gU3RvcmUgaXRlbXMgZm9yIGRlbGV0aW9uLgorICAgIHRyYW5zYWN0aW9uID0g
ZGIudHJhbnNhY3Rpb24oJ3N0b3JlJywgJ3JlYWR3cml0ZScpOworICAgIHZhciBvYmplY3RTdG9y
ZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZScpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbnVtYmVyT2ZJdGVtczsgKytpKQorICAgICAgICBvYmplY3RTdG9yZS5wdXQoeyB2YWx1
ZTogJ3ZhbHVlJywgdW5pcXVlSW5kZXhLZXk6ICJ1bmlxdWVJbmRleEtleSIgKyBpLCBpbmRleEtl
eTogImluZGV4IiArIChpJTIpIH0pOworCisgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIG5leHRTdGVwKCk7CisgICAgfQorCisgICAgeWllbGQ7
CisKKyAgICB2YXIgc3RhcnRUaW1lID0gUGVyZlRlc3RSdW5uZXIubm93KCk7CisKKyAgICB2YXIg
aW5kZXggPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRlJykub2JqZWN0U3RvcmUo
J3N0b3JlJykuaW5kZXgoJ2luZGV4Jyk7CisgICAgdmFyIGNvbXBsZXRlZERlbGV0ZXMgPSAwOwor
ICAgIGluZGV4Lm9wZW5DdXJzb3IoSURCS2V5UmFuZ2Uub25seSgnaW5kZXgxJykpLm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHZhciBjdXJzb3IgPSBldmVudC50YXJnZXQu
cmVzdWx0OworICAgICAgICBpZihjdXJzb3IpIHsKKyAgICAgICAgICAgIGN1cnNvci5kZWxldGUo
KS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlmICgrK2Nv
bXBsZXRlZERlbGV0ZXMgPT0gbnVtYmVyT2ZJdGVtc1RvRGVsZXRlKQorICAgICAgICAgICAgICAg
ICAgICBuZXh0U3RlcCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXJzb3IuY29u
dGludWUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHlpZWxkOworCisgICAgaWYgKCFQZXJm
VGVzdFJ1bm5lci5tZWFzdXJlVmFsdWVBc3luYyhQZXJmVGVzdFJ1bm5lci5ub3coKSAtIHN0YXJ0
VGltZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRpbWVvdXQoc3RhcnRJdGVyYXRpb24s
IDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388332</attachid>
            <date>2020-01-21 12:13:24 -0800</date>
            <delta_ts>2020-01-28 15:17:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206196-20200121121324.patch</filename>
            <type>text/plain</type>
            <size>59982</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmVhNDFhNTRiNzcwOGQ4
OWUwMDQ3NTFmZDdkNTRjNGU3NzMxYTYwNS4uNjg1MzFlY2QwODk1MmJhYTI1ZTg3MjViNWEwYTA2
YTczNzJiNzEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIwLTAxLTIxICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIEluZGV4ZWREQjogc3BlZWQg
dXAgaW5kZXggcmVjb3JkcyBkZWxldGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MTk2CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81MzU5NjMw
Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGRvZXMgYSBmZXcgdGhpbmdzIHRvIGFjY2VsZXJhdGUgZGVsZXRpb24gZm9yIGluZGV4
IHJlY29yZHM6CisgICAgICAgIDEuIG1ha2UgaW5kZXhJRCB1bmlxdWUgaW4gZGF0YWJhc2UgaW5z
dGVhZCBvZiBvYmplY3RTdG9yZQorICAgICAgICAyLiBjcmVhdGUgYW4gaW5kZXggb24gSW5kZXhS
ZWNvcmRzIHRhYmxlCisgICAgICAgIDMuIG9wdGltaXplIHNvbWUgU1FMaXRlIHN0YXRlbWVudHMg
dG8gdGFrZSBhZHZhbnRhZ2Ugb2YgMSBhbmQgMgorCisgICAgICAgIFRlc3Q6IEluZGV4ZWREQi5J
REJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMgorCisgICAgICAgIE1ha2UgdGVzdCBQZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3ItZGVsZXRlLTIuaHRtbCA3LjV4
IGZhc3Rlci4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6TWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERh
dGFiYXNlSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeUlEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpjcmVhdGVWMU9iamVjdFN0b3JlSW5mb1NjaGVtYSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OmNyZWF0ZVYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jk
c1JlY29yZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlk
T2JqZWN0U3RvcmVJbmZvVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbyk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxp
c2hEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkSGFzSW5kZXhS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURC
QmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hl
Y2tlZEdldEluZGV4UmVjb3JkRm9yT25lS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVPbmVJbmRleFJlY29yZCk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9y
ZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpidWlsZEluZGV4U3RhdGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjpiaW5kQXJndW1l
bnRzKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkRGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlSW5mbzo6SURCRGF0YWJhc2VJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
SW5mbzo6c2V0TWF4SW5kZXhJRCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0lEQkRhdGFiYXNlSW5mby5oOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VJbmZvOjpn
ZW5lcmF0ZU5leHRJbmRleElEKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlSW5mbzo6ZGVjb2Rl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3RvcmVJbmZv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6Y3JlYXRlTmV3SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjphZGRFeGlzdGluZ0lu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlSW5mbzo6aXNvbGF0ZWRDb3B5
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3Rv
cmVJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUluZm86OmF1dG9JbmNy
ZW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVJbmZvOjptYXhJbmRleElEIGNvbnN0
KTogRGVsZXRlZC4KKwogMjAyMC0wMS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIE1pbm9yIGltcHJvdmVtZW50cyB0byBTdG9yYWdlQXJlYU1hcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXggYjQ1MDkx
YmNmMjEyYzBlY2VhYzBmZDUzOGIwZWRiYjUwMzBhNGI2My4uZWM5NzI1NzE0OWJiMWM0ZTZiY2Iz
ZDEzMzhiOTQ1MDg3NGQxOWNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5oCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBj
aGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBzdG9wKCkg
ZmluYWw7CiAKLSAgICBjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8oKSBjb25zdCB7IHJldHVy
biBtX2luZm87IH0KKyAgICBJREJEYXRhYmFzZUluZm8mIGluZm8oKSB7IHJldHVybiBtX2luZm87
IH0KICAgICB1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyOyB9CiAKICAgICBSZWY8SURCVHJh
bnNhY3Rpb24+IHN0YXJ0VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0
aW9uSW5mbyYsIElEQk9wZW5EQlJlcXVlc3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCAzMTI0NDM0YTk4OTQ2YzJl
MmIzNTI5MTAxYjdkNzg3NDZlYmI1YTYwLi4zMDM3MWRjMWRjOWY2Mjk2NDIyMDkzMzc1MTkxMTM0
NWM2MGRjMzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwCkBAIC00NzUsNyArNDc1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QkluZGV4Pj4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KEpTR2xvYmFsT2JqZWN0JiwgY29u
c3QgU3QKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIkZh
aWxlZCB0byBleGVjdXRlICdjcmVhdGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtl
eVBhdGggYXJndW1lbnQgd2FzIGFuIGFycmF5IGFuZCB0aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMg
dHJ1ZS4iX3MgfTsKIAogICAgIC8vIEluc3RhbGwgdGhlIG5ldyBJbmRleCBpbnRvIHRoZSBPYmpl
Y3RTdG9yZSdzIGluZm8uCi0gICAgSURCSW5kZXhJbmZvIGluZm8gPSBtX2luZm8uY3JlYXRlTmV3
SW5kZXgobmFtZSwgV1RGTW92ZShrZXlQYXRoKSwgcGFyYW1ldGVycy51bmlxdWUsIHBhcmFtZXRl
cnMubXVsdGlFbnRyeSk7CisgICAgSURCSW5kZXhJbmZvIGluZm8gPSBtX2luZm8uY3JlYXRlTmV3
SW5kZXgobV90cmFuc2FjdGlvbi5kYXRhYmFzZSgpLmluZm8oKS5nZW5lcmF0ZU5leHRJbmRleElE
KCksIG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHBhcmFtZXRlcnMudW5pcXVlLCBwYXJhbWV0ZXJz
Lm11bHRpRW50cnkpOwogICAgIG1fdHJhbnNhY3Rpb24uZGF0YWJhc2UoKS5kaWRDcmVhdGVJbmRl
eEluZm8oaW5mbyk7CiAKICAgICAvLyBDcmVhdGUgdGhlIGFjdHVhbCBJREJPYmplY3RTdG9yZSBm
cm9tIHRoZSB0cmFuc2FjdGlvbiwgd2hpY2ggYWxzbyBzY2hlZHVsZXMgdGhlIG9wZXJhdGlvbiBz
ZXJ2ZXIgc2lkZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNDM1MjIy
OTIwMWMzYmQ3MDViYzZiZThjMGQ4ZjQ3NDk4ZTEwYWQ2NC4uNDAxY2UzZDJiMTYxYmFkM2U3OTM5
NzcxN2VkNWUyODg3NzA0MjYyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAK
QEAgLTU3LDcgKzU3LDcgQEAgTWVtb3J5SURCQmFja2luZ1N0b3JlOjp+TWVtb3J5SURCQmFja2lu
Z1N0b3JlKCkgPSBkZWZhdWx0OwogSURCRXJyb3IgTWVtb3J5SURCQmFja2luZ1N0b3JlOjpnZXRP
ckVzdGFibGlzaERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mIGluZm8pCiB7CiAgICAgaWYg
KCFtX2RhdGFiYXNlSW5mbykKLSAgICAgICAgbV9kYXRhYmFzZUluZm8gPSBtYWtlVW5pcXVlPElE
QkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLCAwKTsKKyAgICAgICAg
bV9kYXRhYmFzZUluZm8gPSBtYWtlVW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVy
LmRhdGFiYXNlTmFtZSgpLCAwLCAwKTsKIAogICAgIGluZm8gPSAqbV9kYXRhYmFzZUluZm87CiAg
ICAgcmV0dXJuIElEQkVycm9yIHsgfTsKQEAgLTIzNiw4ICsyMzYsMTAgQEAgSURCRXJyb3IgTWVt
b3J5SURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWMKICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgQ29uc3RyYWludEVycm9yIH07
CiAKICAgICBhdXRvIGVycm9yID0gb2JqZWN0U3RvcmUtPmNyZWF0ZUluZGV4KCpyYXdUcmFuc2Fj
dGlvbiwgaW5mbyk7Ci0gICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgIGlmIChlcnJvci5pc051
bGwoKSkgewogICAgICAgICBvYmplY3RTdG9yZUluZm8tPmFkZEV4aXN0aW5nSW5kZXgoaW5mbyk7
CisgICAgICAgIG1fZGF0YWJhc2VJbmZvLT5zZXRNYXhJbmRleElEKGluZm8uaWRlbnRpZmllcigp
KTsKKyAgICB9CiAKICAgICByZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuY3BwCmluZGV4IGZjYzQ4MWM1ZDVmMDM3YjU4NTIwNTMxODJhYjI3MWJkOGJkZmYyNTYu
LmJmMzgyZTY0YWFlNjNmODU2MTY1MzE3ZTVkNjYwZGQ4OWE0ZGY0NjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC02MCw2ICs2MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2NvbnN0
ZXhwciBhdXRvIG9iamVjdFN0b3JlSW5mb1RhYmxlTmFtZSA9ICJPYmplY3RTdG9yZUluZm8iX3M7
Citjb25zdGV4cHIgYXV0byBvYmplY3RTdG9yZUluZm9UYWJsZU5hbWVBbHRlcm5hdGUgPSAiXCJP
YmplY3RTdG9yZUluZm9cIiJfczsKK2NvbnN0ZXhwciBhdXRvIHYyT2JqZWN0U3RvcmVJbmZvU2No
ZW1hID0gIkNSRUFURSBUQUJMRSBPYmplY3RTdG9yZUluZm8gKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbmFt
ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUws
IGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBhdXRvSW5jIElOVEVHRVIg
Tk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiX3M7Citjb25zdGV4cHIgYXV0byB2MUluZGV4UmVj
b3Jkc1JlY29yZEluZGV4U2NoZW1hID0gIkNSRUFURSBJTkRFWCBJbmRleFJlY29yZHNSZWNvcmRJ
bmRleCBPTiBJbmRleFJlY29yZHMgKG9iamVjdFN0b3JlSUQsIG9iamVjdFN0b3JlUmVjb3JkSUQp
Il9zOworCiAvLyBDdXJyZW50IHZlcnNpb24gb2YgdGhlIG1ldGFkYXRhIHNjaGVtYSBiZWluZyB1
c2VkIGluIHRoZSBtZXRhZGF0YSBkYXRhYmFzZS4KIHN0YXRpYyBjb25zdCBpbnQgY3VycmVudE1l
dGFkYXRhVmVyc2lvbiA9IDE7CiAKQEAgLTIyOSw2ICsyMzQsMTYgQEAgc3RhdGljIGNvbnN0IFN0
cmluZyYgYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQogICAgIHJldHVybiBibG9iRmls
ZXNUYWJsZVNjaGVtYVN0cmluZzsKIH0KIAorc3RhdGljIFN0cmluZyBjcmVhdGVWMU9iamVjdFN0
b3JlSW5mb1NjaGVtYShBU0NJSUxpdGVyYWwgdGFibGVOYW1lKQoreworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJDUkVBVEUgVEFCTEUgIiwgdGFibGVOYW1lLCAiIChpZCBJTlRFR0VSIFBSSU1BUlkg
S0VZIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIG5h
bWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlM
LCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgYXV0b0luYyBJTlRFR0VS
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG1heEluZGV4SUQgSU5URUdFUiBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMKSIpOworfQorCitzdGF0aWMgU3RyaW5nIGNyZWF0ZVYyT2JqZWN0U3Rv
cmVJbmZvU2NoZW1hKEFTQ0lJTGl0ZXJhbCB0YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VT
dHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJsZU5hbWUsICIgKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbmFt
ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUws
IGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBhdXRvSW5jIElOVEVHRVIg
Tk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKK30KKwogU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBJ
REJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VS
b290RGlyZWN0b3J5KQogICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwgbV9pZGVu
dGlmaWVyKGlkZW50aWZpZXIpCkBAIC01MjUsNiArNTQwLDQ2IEBAIGJvb2wgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK2Jvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEluZGV4UmVj
b3Jkc1JlY29yZEluZGV4KCkKK3sKKyAgICBBU1NFUlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJU
KG1fc3FsaXRlREItPmlzT3BlbigpKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAg
IHsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVD
VCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWU9J0luZGV4UmVjb3Jkc1JlY29yZElu
ZGV4JyIpOworICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZl
dGNoIHNjaGVtYSBmb3IgdGhlIEluZGV4UmVjb3Jkc1JlY29yZEluZGV4IGluZGV4LiIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaW50IHNxbGl0ZVJl
c3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisKKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBT
UUxJVEVfRE9ORSkgeworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFu
ZCh2MUluZGV4UmVjb3Jkc1JlY29yZEluZGV4U2NoZW1hKSkgeworICAgICAgICAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBJbmRleFJlY29yZHNSZWNvcmRJbmRleCBpbmRleCBp
biBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBJbmRl
eFJlY29yZHNSZWNvcmRJbmRleCBpbmRleC4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
VGV4dCgwKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsK
KworICAgIGlmIChjdXJyZW50U2NoZW1hID09IHYxSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXhTY2hl
bWEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBzdGQ6
OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbygpCiB7CiAgICAgQVNTRVJUKG1fc3FsaXRl
REIpOwpAQCAtNTM2LDcgKzU5MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNv
bW1hbmQoIkNSRUFURSBUQUJMRSBPYmplY3RTdG9yZUluZm8gKGlkIElOVEVHRVIgUFJJTUFSWSBL
RVkgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbmFt
ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUws
IGtleVBhdGggQkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBhdXRvSW5jIElOVEVHRVIg
Tk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbWF4SW5kZXhJRCBJTlRFR0VSIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwpOyIpKSB7CisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFu
ZCh2Mk9iamVjdFN0b3JlSW5mb1NjaGVtYSkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIE9iamVjdFN0b3JlSW5mbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAg
ICAgICBjbG9zZVNRTGl0ZURCKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNTk0LDcg
KzY0OSw2NSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbAogICAgIH0KIAogICAgIC8vIFRoaXMg
aW5pdGlhbCBkYXRhYmFzZSBpbmZvIG1hdGNoZXMgdGhlIGRlZmF1bHQgdmFsdWVzIHdlIGp1c3Qg
cHV0IGludG8gdGhlIG1ldGFkYXRhIGRhdGFiYXNlLgotICAgIHJldHVybiBtYWtlVW5pcXVlPElE
QkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLCAwKTsKKyAgICByZXR1
cm4gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUo
KSwgMCwgMCk7Cit9CisKK09wdGlvbmFsPElzU2NoZW1hVXBncmFkZWQ+IFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6ZW5zdXJlVmFsaWRPYmplY3RTdG9yZUluZm9UYWJsZSgpCit7CisgICAgQVNTRVJU
KG1fc3FsaXRlREIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CisKKyAgICBT
dHJpbmcgY3VycmVudFNjaGVtYTsKKyAgICB7CisgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEg
Zm9yIE9iamVjdFN0b3JlSW5mbyB0YWJsZS4KKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRl
bWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRi
bF9uYW1lPSdPYmplY3RTdG9yZUluZm8nIik7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJl
cGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgT2JqZWN0U3RvcmVJbmZvIHRh
YmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisg
ICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworICAgICAgICBpZiAo
c3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJy
b3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYmplY3RTdG9y
ZUluZm8gdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDAp
OworICAgIH0KKworICAgIEFTU0VSVCghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkpOworICAgIGlm
IChjdXJyZW50U2NoZW1hID09IHYyT2JqZWN0U3RvcmVJbmZvU2NoZW1hIHx8IGN1cnJlbnRTY2hl
bWEgPT0gY3JlYXRlVjJPYmplY3RTdG9yZUluZm9TY2hlbWEob2JqZWN0U3RvcmVJbmZvVGFibGVO
YW1lQWx0ZXJuYXRlKSkKKyAgICAgICAgcmV0dXJuIHsgSXNTY2hlbWFVcGdyYWRlZDo6Tm8gfTsK
KworICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRTY2hlbWEgPT0gY3JlYXRlVjFPYmplY3RTdG9y
ZUluZm9TY2hlbWEob2JqZWN0U3RvcmVJbmZvVGFibGVOYW1lKSB8fCBjdXJyZW50U2NoZW1hID09
IGNyZWF0ZVYxT2JqZWN0U3RvcmVJbmZvU2NoZW1hKG9iamVjdFN0b3JlSW5mb1RhYmxlTmFtZUFs
dGVybmF0ZSkpOworCisgICAgLy8gRHJvcCBjb2x1bW4gbWF4SW5kZXhJRCBmcm9tIHRhYmxlLgor
ICAgIFNRTGl0ZVRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKCptX3NxbGl0ZURCKTsKKyAgICB0cmFu
c2FjdGlvbi5iZWdpbigpOworCisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChj
cmVhdGVWMk9iamVjdFN0b3JlSW5mb1NjaGVtYSgiX1RlbXBfT2JqZWN0U3RvcmVJbmZvIl9zKSkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBPYmplY3RT
dG9yZUluZm8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKCJJ
TlNFUlQgSU5UTyBfVGVtcF9PYmplY3RTdG9yZUluZm8gKGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRv
SW5jKSBTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJPTSBPYmplY3RTdG9yZUlu
Zm8iKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBtaWdyYXRlIGV4aXN0aW5nIE9i
amVjdFN0b3JlSW5mbyBjb250ZW50ICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgfQorCisgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiRFJPUCBU
QUJMRSBPYmplY3RTdG9yZUluZm8iKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBk
cm9wIGV4aXN0aW5nIE9iamVjdFN0b3JlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNv
bW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1wX09iamVjdFN0b3JlSW5mbyBSRU5BTUUgVE8gT2JqZWN0
U3RvcmVJbmZvIikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVuYW1lIHRlbXBv
cmFyeSBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKworICAgIHJldHVy
biB7IElzU2NoZW1hVXBncmFkZWQ6OlllcyB9OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0
YWJhc2VJbmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNl
SW5mbygpCkBAIC02MjksMTAgKzc0MiwxNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJ
bmZvPiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgYXV0byBkYXRhYmFzZUluZm8gPSBtYWtlVW5pcXVlPElEQkRh
dGFiYXNlSW5mbz4oZGF0YWJhc2VOYW1lLCBkYXRhYmFzZVZlcnNpb24pOworICAgIGF1dG8gZGF0
YWJhc2VJbmZvID0gbWFrZVVuaXF1ZTxJREJEYXRhYmFzZUluZm8+KGRhdGFiYXNlTmFtZSwgZGF0
YWJhc2VWZXJzaW9uLCAwKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlVmFsaWRPYmplY3RT
dG9yZUluZm9UYWJsZSgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGJvb2wgc2hvdWxkVXBkYXRlSW5kZXhJRCA9IChyZXN1bHQudmFsdWUoKSA9PSBJ
c1NjaGVtYVVwZ3JhZGVkOjpZZXMpOwogCiAgICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3FsKCptX3NxbGl0ZURCLCAiU0VMRUNUIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jLCBtYXhJ
bmRleElEIEZST00gT2JqZWN0U3RvcmVJbmZvOyJfcyk7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVu
dCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmMgRlJP
TSBPYmplY3RTdG9yZUluZm87Il9zKTsKICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTY2MywxMCArNzgyLDE0
IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB1aW50
NjRfdCBtYXhJbmRleElEID0gMDsKKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjx1aW50NjRfdCwgdWlu
dDY0X3Q+LCB1aW50NjRfdD4gaW5kZXhJRE1hcDsKICAgICB7CiAgICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzcWwoKm1fc3FsaXRlREIsICJTRUxFQ1QgaWQsIG5hbWUsIG9iamVjdFN0b3JlSUQsIGtl
eVBhdGgsIGlzVW5pcXVlLCBtdWx0aUVudHJ5IEZST00gSW5kZXhJbmZvOyJfcyk7Ci0gICAgICAg
IGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCByZWNvcmRzIGZyb20gdGhlIEluZGV4SW5mbyB0YWJsZS4i
KTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CiAKICAgICAgICAgaW50
IHJlc3VsdCA9IHNxbC5zdGVwKCk7CiAgICAgICAgIHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JP
VykgewpAQCAtNjk2LDcgKzgxOSwxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZv
PiBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBp
ZiAoc2hvdWxkVXBkYXRlSW5kZXhJRCkgeworICAgICAgICAgICAgICAgIGluZGV4SURNYXAuc2V0
KHsgb2JqZWN0U3RvcmVJRCwgaW5kZXhJRCB9LCArK21heEluZGV4SUQpOworICAgICAgICAgICAg
ICAgIGluZGV4SUQgPSBtYXhJbmRleElEOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBv
YmplY3RTdG9yZS0+YWRkRXhpc3RpbmdJbmRleCh7IGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIGlu
ZGV4TmFtZSwgV1RGTW92ZShpbmRleEtleVBhdGgudmFsdWUoKSksIHVuaXF1ZSwgbXVsdGlFbnRy
eSB9KTsKKyAgICAgICAgICAgIG1heEluZGV4SUQgPSBtYXhJbmRleElEIDwgaW5kZXhJRCA/IGlu
ZGV4SUQgOiBtYXhJbmRleElEOwogCiAgICAgICAgICAgICByZXN1bHQgPSBzcWwuc3RlcCgpOwog
ICAgICAgICB9CkBAIC03MDUsNiArODM0LDMyIEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFz
ZUluZm8+IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJCiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGZldGNoaW5nIGluZGV4IGluZm8gZnJvbSBkYXRh
YmFzZSBvbiBkaXNrIik7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQor
ICAgICAgICBkYXRhYmFzZUluZm8tPnNldE1heEluZGV4SUQobWF4SW5kZXhJRCk7CisKKyAgICAg
ICAgaWYgKCFzaG91bGRVcGRhdGVJbmRleElEKQorICAgICAgICAgICAgcmV0dXJuIGRhdGFiYXNl
SW5mbzsKKworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogaW5kZXhJRE1hcCkgeworICAgICAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgIlVQREFURSBJbmRleEluZm8g
U0VUIGlkID0gPyBXSEVSRSBpZCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7CisgICAg
ICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8
fCBzcWwuYmluZEludDY0KDEsIGVudHJ5LnZhbHVlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAg
ICAgICB8fCBzcWwuYmluZEludDY0KDIsIGVudHJ5LmtleS5zZWNvbmQpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMywgZW50cnkua2V5LmZpcnN0KSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdXBkYXRlIGlkIG9mIEluZGV4
SW5mbyB0YWJsZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgcmVjb3JkU3FsKCptX3NxbGl0ZURC
LCAiVVBEQVRFIEluZGV4UmVjb3JkcyBTRVQgaW5kZXhJRCA9ID8gV0hFUkUgaW5kZXhJRCA9ID8g
QU5EIG9iamVjdFN0b3JlSUQgPSA/OyJfcyk7CisgICAgICAgICAgICBpZiAocmVjb3JkU3FsLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCByZWNvcmRTcWwuYmluZElu
dDY0KDEsIGVudHJ5LnZhbHVlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCByZWNv
cmRTcWwuYmluZEludDY0KDIsIGVudHJ5LmtleS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgICAgIHx8IHJlY29yZFNxbC5iaW5kSW50NjQoMywgZW50cnkua2V5LmZpcnN0KSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCByZWNvcmRTcWwuc3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gdXBkYXRlIGluZGV4
SUQgb2YgSW5kZXhSZWNvcmRzIHRhYmxlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gZGF0YWJh
c2VJbmZvOwpAQCAtODIzLDYgKzk3OCwxMiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwogICAg
ICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJvciBjcmVhdGluZyBvciBt
aWdyYXRpbmcgSW5kZXggUmVjb3JkcyBpbmRleCBpbiBkYXRhYmFzZSJfcyB9OwogICAgIH0KIAor
ICAgIGlmICghZW5zdXJlVmFsaWRJbmRleFJlY29yZHNSZWNvcmRJbmRleCgpKSB7CisgICAgICAg
IExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgbWlncmF0aW5nIEluZGV4IFJlY29yZHMgc2Vj
b25kIGluZGV4IGZvciBpbiBkYXRhYmFzZSIpOworICAgICAgICBjbG9zZVNRTGl0ZURCKCk7Cisg
ICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIGNyZWF0aW5nIG9y
IG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHNlY29uZCBpbmRleCBpbiBkYXRhYmFzZSJfcyB9Owor
ICAgIH0KKwogICAgIGlmICghZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkpIHsKICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBjcmVhdGluZyBvciBjb25maXJtaW5nIEJsb2IgUmVjb3JkcyB0YWJsZXMg
aW4gZGF0YWJhc2UiKTsKICAgICAgICAgY2xvc2VTUUxpdGVEQigpOwpAQCAtOTUyLDEzICsxMTEz
LDEyIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgfQogCiAgICAgewotICAgICAgICBh
dXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVPYmplY3RTdG9yZUluZm8sICJJ
TlNFUlQgSU5UTyBPYmplY3RTdG9yZUluZm8gVkFMVUVTICg/LCA/LCA/LCA/LCA/KTsiX3MpOwor
ICAgICAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpDcmVhdGVPYmplY3RTdG9y
ZUluZm8sICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZUluZm8gVkFMVUVTICg/LCA/LCA/LCA/KTsi
X3MpOwogICAgICAgICBpZiAoIXNxbAogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwg
aW5mby5pZGVudGlmaWVyKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5iaW5k
VGV4dCgyLCBpbmZvLm5hbWUoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwtPmJp
bmRCbG9iKDMsIGtleVBhdGhCbG9iLT5kYXRhKCksIGtleVBhdGhCbG9iLT5zaXplKCkpICE9IFNR
TElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDQsIGluZm8uYXV0b0luY3JlbWVu
dCgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDUsIGluZm8u
bWF4SW5kZXhJRCgpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhZGQgb2Jq
ZWN0IHN0b3JlICclcycgdG8gT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIGluZm8u
bmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSJfcyB9OwpAQCAtMTIyMyw2ICsx
MzgzLDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICBhdXRvKiBvYmplY3RTdG9yZSA9
IG1fZGF0YWJhc2VJbmZvLT5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0
b3JlSWRlbnRpZmllcigpKTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUpOwogICAgIG9iamVjdFN0
b3JlLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOworICAgIG1fZGF0YWJhc2VJbmZvLT5zZXRNYXhJ
bmRleElEKGluZm8uaWRlbnRpZmllcigpKTsKIAogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9
CkBAIC0xMjM3LDExICsxMzk4LDEwIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
dW5jaGVja2VkSGFzSW5kZXhSZWNvcmQoY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvCiAgICAgICAg
IHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIlVuYWJsZSB0byBzZXJpYWxpemUgSURC
S2V5IHRvIGNoZWNrIGZvciBpbmRleCByZWNvcmQgaW4gZGF0YWJhc2UiX3MgfTsKICAgICB9CiAK
LSAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpIYXNJbmRleFJlY29yZCwgIlNF
TEVDVCByb3dpZCBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQgb2JqZWN0
U3RvcmVJRCA9ID8gQU5EIGtleSA9IENBU1QoPyBBUyBURVhUKTsiX3MpOworICAgIGF1dG8qIHNx
bCA9IGNhY2hlZFN0YXRlbWVudChTUUw6Okhhc0luZGV4UmVjb3JkLCAiU0VMRUNUIHJvd2lkIEZS
T00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/IEFORCBrZXkgPSBDQVNUKD8gQVMgVEVY
VCk7Il9zKTsKICAgICBpZiAoIXNxbAogICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBpbmZv
LmlkZW50aWZpZXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIs
IGluZm8ub2JqZWN0U3RvcmVJZGVudGlmaWVyKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBz
cWwtPmJpbmRCbG9iKDMsIGluZGV4S2V5QnVmZmVyLT5kYXRhKCksIGluZGV4S2V5QnVmZmVyLT5z
aXplKCkpICE9IFNRTElURV9PSykgeworICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDIsIGluZGV4
S2V5QnVmZmVyLT5kYXRhKCksIGluZGV4S2V5QnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9PSykg
ewogICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNoZWNraW5nIGZvciBpbmRleCByZWNvcmQgaW4g
ZGF0YWJhc2UiKTsKICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRXJy
b3IgY2hlY2tpbmcgZm9yIGluZGV4IHJlY29yZCBpbiBkYXRhYmFzZSJfcyB9OwogICAgIH0KQEAg
LTEzNTksMTAgKzE1MTksOSBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgIH0KIAogICAg
IHsKLSAgICAgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6RGVsZXRlSW5kZXhS
ZWNvcmRzLCAiREVMRVRFIEZST00gSW5kZXhSZWNvcmRzIFdIRVJFIGluZGV4SUQgPSA/IEFORCBv
YmplY3RTdG9yZUlEID0gPzsiX3MpOworICAgICAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1l
bnQoU1FMOjpEZWxldGVJbmRleFJlY29yZHMsICJERUxFVEUgRlJPTSBJbmRleFJlY29yZHMgV0hF
UkUgaW5kZXhJRCA9ID87Il9zKTsKICAgICAgICAgaWYgKCFzcWwKICAgICAgICAgICAgIHx8IHNx
bC0+YmluZEludDY0KDEsIGluZGV4SWRlbnRpZmllcikgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNRTElURV9P
SwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSBpbmRleCByZWNvcmRzIGZvciBpbmRleCBp
ZCAlIiBQUklpNjQgIiBmcm9tIEluZGV4UmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBpbmRleElk
ZW50aWZpZXIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJv
ciBkZWxldGluZyBpbmRleCByZWNvcmRzIGZyb20gZGF0YWJhc2UiX3MgfTsKQEAgLTE1ODIsNjEg
KzE3NDEsMjEgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQo
U1FMaXRlSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLAogICAgIH0KIAogICAgIC8vIERlbGV0
ZSByZWNvcmQgZnJvbSBpbmRleGVzIHN0b3JlCi0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihtX3Nl
cmlhbGl6YXRpb25Db250ZXh0LT52bSgpKTsKLSAgICBhdXRvIGpzVmFsdWUgPSBkZXNlcmlhbGl6
ZUlEQlZhbHVlVG9KU1ZhbHVlKG1fc2VyaWFsaXphdGlvbkNvbnRleHQtPmV4ZWNTdGF0ZSgpLCB2
YWx1ZSk7Ci0gICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0
dXJuIElEQkVycm9yIHsgfTsKLQotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmVJbmZvIDogbV9k
YXRhYmFzZUluZm8tPm9iamVjdFN0b3JlTWFwKCkudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChh
dXRvJiBpbmRleEluZm8gOiBvYmplY3RTdG9yZUluZm8uaW5kZXhNYXAoKS52YWx1ZXMoKSkgewot
ICAgICAgICAgICAgSW5kZXhLZXkgaW5kZXhLZXk7Ci0gICAgICAgICAgICBnZW5lcmF0ZUluZGV4
S2V5Rm9yVmFsdWUobV9zZXJpYWxpemF0aW9uQ29udGV4dC0+ZXhlY1N0YXRlKCksIGluZGV4SW5m
bywganNWYWx1ZSwgaW5kZXhLZXksIG9iamVjdFN0b3JlSW5mby5rZXlQYXRoKCksIGtleURhdGEp
OwotICAgICAgICAgICAgaWYgKGluZGV4S2V5LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgIHsKKyAgICAgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6
RGVsZXRlT2JqZWN0U3RvcmVJbmRleFJlY29yZCwgIkRFTEVURSBGUk9NIEluZGV4UmVjb3JkcyBX
SEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQgb2JqZWN0U3RvcmVSZWNvcmRJRCA9ID87Il9zKTsK
IAotICAgICAgICAgICAgaWYgKCFpbmRleEluZm8ubXVsdGlFbnRyeSgpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBlcnJvciA9IGRlbGV0ZU9uZUluZGV4UmVjb3JkKG9iamVjdFN0b3JlSUQsIHJl
Y29yZElELCBpbmRleEtleS5hc09uZUtleSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVycm9y
LmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhLZXlzID0gaW5kZXhLZXkubXVs
dGlFbnRyeSgpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogaW5kZXhLZXlzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBkZWxldGVPbmVJbmRleFJlY29yZChv
YmplY3RTdG9yZUlELCByZWNvcmRJRCwga2V5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFl
cnJvci5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9CisgICAgICAg
IGlmICghc3FsCisgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlE
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIHJlY29yZElE
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxldGUgcmVjb3JkIGZyb20g
aW5kZXhlcyBmb3Igb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiICglaSkgLSAlcyIsIG9iamVjdFN0
b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQg
dG8gZGVsZXRlIGluZGV4IGVudHJpZXMgZm9yIG9iamVjdCBzdG9yZSByZWNvcmQiX3MgfTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLUlEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT25lSW5kZXhSZWNvcmQoaW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBpbnQ2NF90IG9iamVjdFN0b3JlUmVjb3JkSUQsIGNvbnN0IElEQktleURhdGEm
IGluZGV4S2V5KQotewotICAgIGlmICghaW5kZXhLZXkuaXNWYWxpZCgpKQotICAgICAgICByZXR1
cm4gSURCRXJyb3IgeyB9OwotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gaW5kZXhLZXlCdWZm
ZXIgPSBzZXJpYWxpemVJREJLZXlEYXRhKGluZGV4S2V5KTsKLSAgICBpZiAoIWluZGV4S2V5QnVm
ZmVyKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSByZWNvcmQgZnJvbSBv
YmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgKENvdWxkIG5vdCBzZXJpYWxpemUgaW5kZXgga2V5KSIs
IG9iamVjdFN0b3JlSUQpOwotICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3Is
ICJGYWlsZWQgdG8gZGVsZXRlIGluZGV4IGVudHJpZXMgZm9yIG9iamVjdCBzdG9yZSByZWNvcmQi
X3MgfTsKLSAgICB9Ci0KLSAgICBhdXRvKiBzcWwgPSBjYWNoZWRTdGF0ZW1lbnQoU1FMOjpEZWxl
dGVPYmplY3RTdG9yZUluZGV4UmVjb3JkLCAiREVMRVRFIEZST00gSW5kZXhSZWNvcmRzIFdIRVJF
IG9iamVjdFN0b3JlSUQgPSA/IEFORCBvYmplY3RTdG9yZVJlY29yZElEID0gPyBBTkQga2V5ID0g
Q0FTVCg/IEFTIFRFWFQpOyJfcyk7Ci0gICAgaWYgKCFzcWwKLSAgICAgICAgfHwgc3FsLT5iaW5k
SW50NjQoMSwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNxbC0+Ymlu
ZEludDY0KDIsIG9iamVjdFN0b3JlUmVjb3JkSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBz
cWwtPmJpbmRCbG9iKDMsIGluZGV4S2V5QnVmZmVyLT5kYXRhKCksIGluZGV4S2V5QnVmZmVyLT5z
aXplKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxldGUgcmVjb3JkIGZyb20gaW5k
ZXhlcyBmb3Igb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiICglaSkgLSAlcyIsIG9iamVjdFN0b3Jl
SUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkZhaWxlZCB0byBkZWxl
dGUgaW5kZXggZW50cmllcyBmb3Igb2JqZWN0IHN0b3JlIHJlY29yZCJfcyB9OwotICAgIH0KLQot
ICAgIHJldHVybiBJREJFcnJvciB7IH07Ci19Ci0KIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlUmFuZ2UoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHVpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYga2V5UmFuZ2UpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlUmFuZ2UgLSByYW5nZSAlcywgb2JqZWN0IHN0b3JlICUiIFBSSXU2NCwga2V5UmFu
Z2UubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9iamVjdFN0b3JlSUQpOwpAQCAtMTc0
MSwxMyArMTg2MCwxMSBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFs
bEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgIH0KIAogICAgIGlm
ICghZXJyb3IuaXNOdWxsKCkgJiYgYW55UmVjb3Jkc1N1Y2NlZWRlZCkgewotICAgICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBrZXlCdWZmZXIgPSBzZXJpYWxpemVJREJLZXlEYXRhKGtleSk7Ci0K
LSAgICAgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6RGVsZXRlT2JqZWN0U3Rv
cmVJbmRleFJlY29yZCwgIkRFTEVURSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9y
ZUlEID0gPyBBTkQgdmFsdWUgPSBDQVNUKD8gQVMgVEVYVCk7Il9zKTsKKyAgICAgICAgYXV0byog
c3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6RGVsZXRlT2JqZWN0U3RvcmVJbmRleFJlY29yZCwg
IkRFTEVURSBGUk9NIEluZGV4UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBBTkQgb2Jq
ZWN0U3RvcmVSZWNvcmRJRCA9ID87Il9zKTsKIAogICAgICAgICBpZiAoIXNxbAogICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgaW5mby5pZGVudGlmaWVyKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc3FsLT5iaW5kQmxvYigyLCBrZXlCdWZmZXItPmRhdGEoKSwga2V5QnVm
ZmVyLT5zaXplKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQo
MiwgcmVjb3JkSUQpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQWRkaW5nIG9uZSBJbmRleCBy
ZWNvcmQgZmFpbGVkLCBidXQgZmFpbGVkIHRvIHJlbW92ZSBhbGwgb3RoZXJzIHRoYXQgcHJldmlv
dXNseSBzdWNjZWVkZWQiKTsKICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25F
cnJvciwgIkFkZGluZyBvbmUgSW5kZXggcmVjb3JkIGZhaWxlZCwgYnV0IGZhaWxlZCB0byByZW1v
dmUgYWxsIG90aGVycyB0aGF0IHByZXZpb3VzbHkgc3VjY2VlZGVkIl9zIH07CkBAIC0yMjg2LDEy
ICsyNDAzLDExIEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkR2V0
SW5kZXhSZWNvcmRGb3JPbmVLZXkoaW50NjRfdCBpbmRleElECiAgICAgICAgIHJldHVybiBJREJF
cnJvciB7IFVua25vd25FcnJvciwgIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5IHRvIGxvb2sg
dXAgb25lIGluZGV4IHJlY29yZCJfcyB9OwogICAgIH0KIAotICAgIGF1dG8qIHNxbCA9IGNhY2hl
ZFN0YXRlbWVudChTUUw6OkdldEluZGV4UmVjb3JkRm9yT25lS2V5LCAiU0VMRUNUIEluZGV4UmVj
b3Jkcy52YWx1ZSwgUmVjb3Jkcy52YWx1ZSwgUmVjb3Jkcy5yZWNvcmRJRCBGUk9NIFJlY29yZHMg
SU5ORVIgSk9JTiBJbmRleFJlY29yZHMgT04gUmVjb3Jkcy5yZWNvcmRJRCA9IEluZGV4UmVjb3Jk
cy5vYmplY3RTdG9yZVJlY29yZElEIFdIRVJFIEluZGV4UmVjb3Jkcy5pbmRleElEID0gPyBBTkQg
SW5kZXhSZWNvcmRzLm9iamVjdFN0b3JlSUQgPSA/IEFORCBJbmRleFJlY29yZHMua2V5ID0gQ0FT
VCg/IEFTIFRFWFQpIE9SREVSIEJZIEluZGV4UmVjb3Jkcy5rZXksIEluZGV4UmVjb3Jkcy52YWx1
ZSJfcyk7CisgICAgYXV0byogc3FsID0gY2FjaGVkU3RhdGVtZW50KFNRTDo6R2V0SW5kZXhSZWNv
cmRGb3JPbmVLZXksICJTRUxFQ1QgSW5kZXhSZWNvcmRzLnZhbHVlLCBSZWNvcmRzLnZhbHVlLCBS
ZWNvcmRzLnJlY29yZElEIEZST00gUmVjb3JkcyBJTk5FUiBKT0lOIEluZGV4UmVjb3JkcyBPTiBS
ZWNvcmRzLm9iamVjdFN0b3JlSUQgPSBJbmRleFJlY29yZHMub2JqZWN0U3RvcmVJRCBBTkQgUmVj
b3Jkcy5yZWNvcmRJRCA9IEluZGV4UmVjb3Jkcy5vYmplY3RTdG9yZVJlY29yZElEIFdIRVJFIElu
ZGV4UmVjb3Jkcy5pbmRleElEID0gPyBBTkQgSW5kZXhSZWNvcmRzLmtleSA9IENBU1QoPyBBUyBU
RVhUKSBPUkRFUiBCWSBJbmRleFJlY29yZHMua2V5LCBJbmRleFJlY29yZHMudmFsdWUiX3MpOwog
CiAgICAgaWYgKCFzcWwKICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgaW5kZXhJRCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIG9iamVjdFN0b3JlSUQpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBzcWwtPmJpbmRCbG9iKDMsIGJ1ZmZlci0+ZGF0YSgpLCBi
dWZmZXItPnNpemUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIHx8IHNxbC0+YmluZEJsb2Io
MiwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxJVEVfT0spIHsKICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gbG9va3VwIGluZGV4IHJlY29yZCBpbiBkYXRhYmFzZSIp
OwogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gbG9v
a3VwIGluZGV4IHJlY29yZCBpbiBkYXRhYmFzZSJfcyB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuaAppbmRleCA3NWY3ZThkNDA1YjI1YTIxMTMwZGNmMmEwNmUwNzUyMmQ5NjMw
M2JiLi5jZTI5ZDJjZmNmYjQxZmFiNmJkMzA1YmJlMmRjZjA0NTZmYjZkODJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2lu
Z1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC00NCw2ICs0NCw4IEBAIGNsYXNzIFNRTGl0ZVN0YXRl
bWVudDsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2VudW0gY2xhc3MgSXNTY2hlbWFVcGdy
YWRlZCA6IGJvb2wgeyBObywgWWVzIH07CisKIGNsYXNzIElEQlNlcmlhbGl6YXRpb25Db250ZXh0
OwogY2xhc3MgU1FMaXRlSURCQ3Vyc29yOwogCkBAIC0xMTEsMTIgKzExMywxMyBAQCBwcml2YXRl
OgogICAgIGJvb2wgZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKTsKICAgICBib29sIGVuc3VyZVZh
bGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKICAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
SW5kZXgoKTsKKyAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzUmVjb3JkSW5kZXgoKTsK
ICAgICBib29sIGVuc3VyZVZhbGlkQmxvYlRhYmxlcygpOworICAgIE9wdGlvbmFsPElzU2NoZW1h
VXBncmFkZWQ+IGVuc3VyZVZhbGlkT2JqZWN0U3RvcmVJbmZvVGFibGUoKTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFz
ZUluZm8oKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBleHRyYWN0RXhp
c3RpbmdEYXRhYmFzZUluZm8oKTsKIAogICAgIElEQkVycm9yIGRlbGV0ZVJlY29yZChTUUxpdGVJ
REJUcmFuc2FjdGlvbiYsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCS2V5RGF0YSYp
OwotICAgIElEQkVycm9yIGRlbGV0ZU9uZUluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgaW50NjRfdCBvYmplY3RTdG9yZVJlY29yZElELCBjb25zdCBJREJLZXlEYXRhJik7CiAgICAg
SURCRXJyb3IgdW5jaGVja2VkR2V0S2V5R2VuZXJhdG9yVmFsdWUoaW50NjRfdCBvYmplY3RTdG9y
ZUlELCB1aW50NjRfdCYgb3V0VmFsdWUpOwogICAgIElEQkVycm9yIHVuY2hlY2tlZFNldEtleUdl
bmVyYXRvclZhbHVlKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QgdmFsdWUpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IDkwYzBhZDNiMmE2OGVkZDBhZmIwOGUzNDhjMmIwZDI5
MmIyYjQ4YjUuLjIxZGZmODRmNzVmYTRiNTk2NDU1YzZmZTZjNmQxNTUzYTgyOWY4YTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJD
dXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJDdXJzb3IuY3BwCkBAIC0xMjAsNyArMTIwLDcgQEAgc3RhdGljIFN0cmluZyBidWls
ZEluZGV4U3RhdGVtZW50KGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UsIEluZGV4ZWRE
Qjo6Q3UKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAKLSAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIlNFTEVDVCByb3dpZCwga2V5LCB2YWx1ZSBGUk9NIEluZGV4UmVjb3JkcyBXSEVS
RSBpbmRleElEID0gPyBBTkQgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSAiKTsKKyAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIlNFTEVDVCByb3dpZCwga2V5LCB2YWx1ZSBGUk9NIEluZGV4UmVj
b3JkcyBXSEVSRSBpbmRleElEID0gPyBBTkQga2V5ICIpOwogICAgIGlmICgha2V5UmFuZ2UubG93
ZXJLZXkuaXNOdWxsKCkgJiYgIWtleVJhbmdlLmxvd2VyT3BlbikKICAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI+PSIpOwogICAgIGVsc2UKQEAgLTI4OSwxMSArMjg5LDYgQEAgYm9vbCBT
UUxpdGVJREJDdXJzb3I6OmJpbmRBcmd1bWVudHMoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgaWYgKG1faW5kZXhJRCAhPSBJREJJbmRleEluZm86OkludmFsaWRJZCAmJiBt
X3N0YXRlbWVudC0+YmluZEludDY0KGN1cnJlbnRCaW5kQXJndW1lbnQrKywgbV9vYmplY3RTdG9y
ZUlEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYmluZCBv
YmplY3Qgc3RvcmUgaWQgYXJndW1lbnQgZm9yIGFuIGluZGV4IGN1cnNvciIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0g
c2VyaWFsaXplSURCS2V5RGF0YShtX2N1cnJlbnRMb3dlcktleSk7CiAgICAgaWYgKG1fc3RhdGVt
ZW50LT5iaW5kQmxvYihjdXJyZW50QmluZEFyZ3VtZW50KyssIGJ1ZmZlci0+ZGF0YSgpLCBidWZm
ZXItPnNpemUoKSkgIT0gU1FMSVRFX09LKSB7CiAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChsb3dlciBrZXkpIik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFi
YXNlLmNwcAppbmRleCBiNzJiNjM3YjE3ZmRjMDM2MjNmMWE3YTQyYjI3YmE0NGNlZjVlZmUwLi5h
MGEwNTE2ZjZmYmNjNGU2ODBmYzJjOWE3ZjA0ODc5MjM1NTNjZGRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5jcHAKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpk
aWREZWxldGVCYWNraW5nU3RvcmUodWludDY0X3QgZGVsZXRlZFZlcnNpb24pCiAgICAgLy8gd2Ug
d29uJ3QgaGF2ZSBhIG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm8uIEluIHRoYXQgY2Fz
ZSwgd2UnbGwgbWFudWZhY3R1cmUgb25lIHVzaW5nIHRoZQogICAgIC8vIHBhc3NlZCBpbiBkZWxl
dGVkVmVyc2lvbiBhcmd1bWVudC4KICAgICBpZiAoIW1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFz
ZUluZm8pCi0gICAgICAgIG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm8gPSBtYWtlVW5p
cXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLCBkZWxldGVk
VmVyc2lvbik7CisgICAgICAgIG1fbW9zdFJlY2VudERlbGV0ZWREYXRhYmFzZUluZm8gPSBtYWtl
VW5pcXVlPElEQkRhdGFiYXNlSW5mbz4obV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpLCBkZWxl
dGVkVmVyc2lvbiwgMCk7CiAKICAgICBpZiAobV9jdXJyZW50T3BlbkRCUmVxdWVzdCkgewogICAg
ICAgICBtX2N1cnJlbnRPcGVuREJSZXF1ZXN0LT5ub3RpZnlEaWREZWxldGVEYXRhYmFzZSgqbV9t
b3N0UmVjZW50RGVsZXRlZERhdGFiYXNlSW5mbyk7CkBAIC02MzMsNiArNjMzLDcgQEAgdm9pZCBV
bmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXgoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIGMKICAgICAgICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gbV9kYXRh
YmFzZUluZm8tPmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVu
dGlmaWVyKCkpOwogICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmVJbmZvKTsKICAgICAgICAgb2Jq
ZWN0U3RvcmVJbmZvLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOworICAgICAgICBtX2RhdGFiYXNl
SW5mby0+c2V0TWF4SW5kZXhJRChpbmZvLmlkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAgY2Fs
bGJhY2soZXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcAppbmRleCBlYTMxMmNjYjdkY2IzYTg5
MzAwOTFmZjUwZDA4NjM0Y2VkZDcxZDJhLi44NjAzZmU2NmIwNWQ2YzQ1MjYzMWE3ZDI1OTI2YzJk
MDg3YjkwNWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmNwcApAQCAtMzYsOSArMzYsMTAgQEAgSURC
RGF0YWJhc2VJbmZvOjpJREJEYXRhYmFzZUluZm8oKQogewogfQogCi1JREJEYXRhYmFzZUluZm86
OklEQkRhdGFiYXNlSW5mbyhjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24pCitJ
REJEYXRhYmFzZUluZm86OklEQkRhdGFiYXNlSW5mbyhjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2
NF90IHZlcnNpb24sIHVpbnQ2NF90IG1heEluZGV4SUQpCiAgICAgOiBtX25hbWUobmFtZSkKICAg
ICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICwgbV9tYXhJbmRleElEKG1heEluZGV4SUQpCiB7
CiB9CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgSURCRGF0YWJhc2VJbmZvOjpJREJEYXRhYmFzZUluZm8o
Y29uc3QgSURCRGF0YWJhc2VJbmZvJiBvdGhlciwgSXNvbGF0ZWRDb3B5VGFnKQogICAgIDogbV9u
YW1lKG90aGVyLm1fbmFtZS5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fdmVyc2lvbihvdGhlci5t
X3ZlcnNpb24pCiAgICAgLCBtX21heE9iamVjdFN0b3JlSUQob3RoZXIubV9tYXhPYmplY3RTdG9y
ZUlEKQorICAgICwgbV9tYXhJbmRleElEKG90aGVyLm1fbWF4SW5kZXhJRCkKIHsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGVudHJ5IDogb3RoZXIubV9vYmplY3RTdG9yZU1hcCkKICAgICAgICAgbV9v
YmplY3RTdG9yZU1hcC5zZXQoZW50cnkua2V5LCBlbnRyeS52YWx1ZS5pc29sYXRlZENvcHkoKSk7
CkBAIC0xNjgsNiArMTcwLDEyIEBAIFN0cmluZyBJREJEYXRhYmFzZUluZm86OmxvZ2dpbmdTdHJp
bmcoKSBjb25zdAogCiAjZW5kaWYKIAordm9pZCBJREJEYXRhYmFzZUluZm86OnNldE1heEluZGV4
SUQodWludDY0X3QgbWF4SW5kZXhJRCkKK3sKKyAgICBBU1NFUlQobWF4SW5kZXhJRCA+IG1fbWF4
SW5kZXhJRCB8fCAoIW1heEluZGV4SUQgJiYgIW1fbWF4SW5kZXhJRCkpOworICAgIG1fbWF4SW5k
ZXhJRCA9IG1heEluZGV4SUQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkRhdGFiYXNlSW5mby5oCmluZGV4IDgyMzVi
Yjg4YzMzMmQ3N2UzYThlNDU1MmEzYmJmYTBhOTBiMGY1NjYuLmUyZTE1MmFmYjdjYzQzYjczNWRh
MmNjMjQ4NWE3MmYxMzAwMDgzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NoYXJlZC9JREJEYXRhYmFzZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCRGF0YWJhc2VJbmZvLmgKQEAgLTM1LDcgKzM1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCRGF0YWJhc2VJbmZvIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJREJEYXRhYmFzZUlu
Zm8oY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uKTsKKyAgICBleHBsaWNpdCBJ
REJEYXRhYmFzZUluZm8oY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2ZXJzaW9uLCB1aW50
NjRfdCBtYXhJbmRleElEKTsKIAogICAgIGVudW0gSXNvbGF0ZWRDb3B5VGFnIHsgSXNvbGF0ZWRD
b3B5IH07CiAgICAgSURCRGF0YWJhc2VJbmZvKGNvbnN0IElEQkRhdGFiYXNlSW5mbyYsIElzb2xh
dGVkQ29weVRhZyk7CkBAIC02OCw2ICs2OCw5IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBJREJEYXRhYmFzZUluZm8m
KTsKIAorICAgIHZvaWQgc2V0TWF4SW5kZXhJRCh1aW50NjRfdCBtYXhJbmRleElEKTsKKyAgICB1
aW50NjRfdCBnZW5lcmF0ZU5leHRJbmRleElEKCkgeyByZXR1cm4gKyttX21heEluZGV4SUQ7IH0K
KwogI2lmICFMT0dfRElTQUJMRUQKICAgICBTdHJpbmcgbG9nZ2luZ1N0cmluZygpIGNvbnN0Owog
I2VuZGlmCkBAIC03OSw2ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKICAg
ICB1aW50NjRfdCBtX3ZlcnNpb24geyAwIH07CiAgICAgdWludDY0X3QgbV9tYXhPYmplY3RTdG9y
ZUlEIHsgMCB9OworICAgIHVpbnQ2NF90IG1fbWF4SW5kZXhJRCB7IDAgfTsKIAogICAgIEhhc2hN
YXA8dWludDY0X3QsIElEQk9iamVjdFN0b3JlSW5mbz4gbV9vYmplY3RTdG9yZU1hcDsKIApAQCAt
ODcsNyArOTEsNyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgSURC
RGF0YWJhc2VJbmZvOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNv
ZGVyIDw8IG1fbmFtZSA8PCBtX3ZlcnNpb24gPDwgbV9tYXhPYmplY3RTdG9yZUlEIDw8IG1fb2Jq
ZWN0U3RvcmVNYXA7CisgICAgZW5jb2RlciA8PCBtX25hbWUgPDwgbV92ZXJzaW9uIDw8IG1fbWF4
T2JqZWN0U3RvcmVJRCA8PCBtX21heEluZGV4SUQgPDwgbV9vYmplY3RTdG9yZU1hcDsKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KQEAgLTEwMiw2ICsxMDYsOSBAQCBib29sIElEQkRhdGFi
YXNlSW5mbzo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElEQkRhdGFiYXNlSW5mbyYgaW5mbykK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9tYXhPYmplY3RTdG9yZUlEKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fbWF4SW5k
ZXhJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
aW5mby5tX29iamVjdFN0b3JlTWFwKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCT2JqZWN0U3Rv
cmVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJP
YmplY3RTdG9yZUluZm8uY3BwCmluZGV4IDVjNzI4MmE0NjM4ZWI0ZTY3MWM1M2YxYzVmZGNmMmFm
MjcyZWFjNTUuLjRlYWQzOGJmYmM5MTE3ODlkYjI1NzY4OWM2NWUwMjhhZWRmY2FjNTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJPYmplY3RT
dG9yZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JREJPYmplY3RTdG9yZUluZm8uY3BwCkBAIC00Myw5ICs0Myw5IEBAIElEQk9iamVjdFN0b3Jl
SW5mbzo6SURCT2JqZWN0U3RvcmVJbmZvKHVpbnQ2NF90IGlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwKIHsKIH0KIAotSURCSW5kZXhJbmZvIElEQk9iamVjdFN0b3JlSW5mbzo6Y3JlYXRl
TmV3SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJLZXlQYXRoJiYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSkKK0lEQkluZGV4SW5mbyBJREJPYmplY3RTdG9yZUluZm86
OmNyZWF0ZU5ld0luZGV4KHVpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
S2V5UGF0aCYmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnkpCiB7Ci0gICAg
SURCSW5kZXhJbmZvIGluZm8oKyttX21heEluZGV4SUQsIG1faWRlbnRpZmllciwgbmFtZSwgV1RG
TW92ZShrZXlQYXRoKSwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKKyAgICBJREJJbmRleEluZm8gaW5m
byhpbmRleElELCBtX2lkZW50aWZpZXIsIG5hbWUsIFdURk1vdmUoa2V5UGF0aCksIHVuaXF1ZSwg
bXVsdGlFbnRyeSk7CiAgICAgbV9pbmRleE1hcC5zZXQoaW5mby5pZGVudGlmaWVyKCksIGluZm8p
OwogICAgIHJldHVybiBpbmZvOwogfQpAQCAtNTQsOSArNTQsNiBAQCB2b2lkIElEQk9iamVjdFN0
b3JlSW5mbzo6YWRkRXhpc3RpbmdJbmRleChjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7CiAg
ICAgQVNTRVJUKCFtX2luZGV4TWFwLmNvbnRhaW5zKGluZm8uaWRlbnRpZmllcigpKSk7CiAKLSAg
ICBpZiAoaW5mby5pZGVudGlmaWVyKCkgPiBtX21heEluZGV4SUQpCi0gICAgICAgIG1fbWF4SW5k
ZXhJRCA9IGluZm8uaWRlbnRpZmllcigpOwotCiAgICAgbV9pbmRleE1hcC5zZXQoaW5mby5pZGVu
dGlmaWVyKCksIGluZm8pOwogfQogCkBAIC0xMDEsOCArOTgsNiBAQCBJREJPYmplY3RTdG9yZUlu
Zm8gSURCT2JqZWN0U3RvcmVJbmZvOjppc29sYXRlZENvcHkoKSBjb25zdAogICAgIGZvciAoYXV0
byYgaXRlcmF0b3IgOiBtX2luZGV4TWFwKQogICAgICAgICByZXN1bHQubV9pbmRleE1hcC5zZXQo
aXRlcmF0b3Iua2V5LCBpdGVyYXRvci52YWx1ZS5pc29sYXRlZENvcHkoKSk7CiAKLSAgICByZXN1
bHQubV9tYXhJbmRleElEID0gbV9tYXhJbmRleElEOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lE
Qk9iamVjdFN0b3JlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0lEQk9iamVjdFN0b3JlSW5mby5oCmluZGV4IGRjZTk1YmUxOWE3NzYxZmQzM2E0MDc0NjEy
YzlmZmMzZDhiMTg2OTguLjE3ZmU0MjJiYTQ1OGViMTY4YzFlNWFkOTA4Y2FmZTc3MmM3NDc2MGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJP
YmplY3RTdG9yZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSURCT2JqZWN0U3RvcmVJbmZvLmgKQEAgLTQzLDEzICs0MywxMiBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgY29u
c3QgT3B0aW9uYWw8SURCS2V5UGF0aD4mIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2tleVBh
dGg7IH0KICAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2F1dG9JbmNy
ZW1lbnQ7IH0KLSAgICB1aW50NjRfdCBtYXhJbmRleElEKCkgY29uc3QgeyByZXR1cm4gbV9tYXhJ
bmRleElEOyB9CiAKICAgICB2b2lkIHJlbmFtZShjb25zdCBTdHJpbmcmIG5ld05hbWUpIHsgbV9u
YW1lID0gbmV3TmFtZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgSURCT2JqZWN0U3RvcmVJbmZv
IGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCi0gICAgSURCSW5kZXhJbmZvIGNyZWF0ZU5ld0luZGV4
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCS2V5UGF0aCYmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0
aUVudHJ5KTsKKyAgICBJREJJbmRleEluZm8gY3JlYXRlTmV3SW5kZXgodWludDY0X3QgaW5kZXhJ
RCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJLZXlQYXRoJiYsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnkpOwogICAgIHZvaWQgYWRkRXhpc3RpbmdJbmRleChjb25zdCBJREJJbmRleEluZm8m
KTsKICAgICBib29sIGhhc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgYm9v
bCBoYXNJbmRleCh1aW50NjRfdCBpbmRleElkZW50aWZpZXIpIGNvbnN0OwpAQCAtNzUsNyArNzQs
NiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8SURCS2V5UGF0
aD4gbV9rZXlQYXRoOwogICAgIGJvb2wgbV9hdXRvSW5jcmVtZW50IHsgZmFsc2UgfTsKLSAgICB1
aW50NjRfdCBtX21heEluZGV4SUQgeyAwIH07CiAKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBJREJJ
bmRleEluZm8+IG1faW5kZXhNYXA7CiB9OwpAQCAtODMsNyArODEsNyBAQCBwcml2YXRlOgogdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgSURCT2JqZWN0U3RvcmVJbmZvOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IG1faWRlbnRpZmllciA8PCBt
X25hbWUgPDwgbV9rZXlQYXRoIDw8IG1fYXV0b0luY3JlbWVudCA8PCBtX21heEluZGV4SUQgPDwg
bV9pbmRleE1hcDsKKyAgICBlbmNvZGVyIDw8IG1faWRlbnRpZmllciA8PCBtX25hbWUgPDwgbV9r
ZXlQYXRoIDw8IG1fYXV0b0luY3JlbWVudCA8PCBtX2luZGV4TWFwOwogfQogCiB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgpAQCAtMTAxLDkgKzk5LDYgQEAgYm9vbCBJREJPYmplY3RTdG9yZUluZm86
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJPYmplY3RTdG9yZUluZm8mIGluZm8pCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShpbmZvLm1fYXV0b0luY3JlbWVudCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW5mby5tX21heEluZGV4SUQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGluZm8ubV9p
bmRleE1hcCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDM0YWE0YjA4YzBhZTdiZTA4NzIwZjU0YzQ5
ZDg4N2I3NTc0ZTYzMDQuLjE0MzIzNjU2MGFlMzVjZWZiZWExYzgwMDAzZGE5OTg0NjgwZDg1YTUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMC0wMS0yMSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4K
KworICAgICAgICBJbmRleGVkREI6IHNwZWVkIHVwIGluZGV4IHJlY29yZHMgZGVsZXRpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjE5NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
LnNxbGl0ZTM6IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbDogQWRkZWQuCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RTdG9yZUluZm9VcGdyYWRl
VG9WMi5tbTogQWRkZWQuCisgICAgICAgICgtW0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1Yy
TWVzc2FnZUhhbmRsZXIgdXNlckNvbnRlbnRDb250cm9sbGVyOmRpZFJlY2VpdmVTY3JpcHRNZXNz
YWdlOl0pOgorICAgICAgICAoVEVTVCk6CisKIDIwMjAtMDEtMjEgIFNpaHVpIExpdSAgPHNpaHVp
X2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBXZWJTUUwgZXZlcnl3aGVyZSBieSBk
ZWZhdWx0IGV4Y2VwdCBpbiB0ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZmQ3MWZl
ODNkNzMwNTUxNWQyZDY0MDE1ZjM3OTVjODM0NTg0NzNlLi5kMDY5ZTJlNmNlMjU3MTkxM2UxNjE4
NjViYzlhNTkyMTRiYTFjZDVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzQ2LDExICs3
NDYsMTQgQEAKIAkJOTM2OEEyNUYyMjlFRkI0NzAwQTgyOUNBIC8qIGxvY2FsLXN0b3JhZ2UtcHJv
Y2Vzcy1zdXNwZW5kcy0yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM2OEEyNUMyMjlFRkIzQTAwQTgyOUNBIC8qIGxvY2FsLXN0b3Jh
Z2UtcHJvY2Vzcy1zdXNwZW5kcy0yLmh0bWwgKi87IH07CiAJCTkzNkY3MjgwMUNEN0Q5RUMwMDY4
QTBGQiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlvLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2RjcyN0UxQ0Q3RDlEMDAwNjhBMEZC
IC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8uaHRtbCAqLzsgfTsKIAkJOTM2RjcyODExQ0Q3RDlF
QzAwNjhBMEZCIC8qIGxhcmdlLXZpZGVvLXdpdGgtYXVkaW8ubXA0IGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNkY3MjdGMUNEN0Q5RDAwMDY4
QTBGQiAvKiBsYXJnZS12aWRlby13aXRoLWF1ZGlvLm1wNCAqLzsgfTsKKwkJOTM3QjU2OUUyM0NE
MjNEQjAwMkFFNjQwIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRlMyBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JDQkM4MTIz
Q0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUzICovOyB9
OwogCQk5Mzk5QkEwNDIzNzExMTQwMDA4MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEwMTIz
NzExMEFFMDA4MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0gKi87IH07CiAJCTkzOTlC
QTA1MjM3MTExNEYwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTlCQTAyMjM3
MTEwQkYwMDgzOTJCRiAvKiBJbmRleGVkREJJblBhZ2VDYWNoZS5odG1sICovOyB9OwogCQk5Mzk5
QkEwNjIzNzExMTRGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzk5QkEw
MzIzNzExMEJGMDA4MzkyQkYgLyogSW5kZXhlZERCTm90SW5QYWdlQ2FjaGUuaHRtbCAqLzsgfTsK
IAkJOTNBRjRFQ0UxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvckltYWdlc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTNBRjRFQ0QxNTA2RjA2NDAwN0ZENTdFIC8qIE5ld0ZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwICovOyB9OwogCQk5M0FGNEVEMTE1
MDZGMTMwMDA3RkQ1N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1
N0UgLyogbG90cy1vZi1pbWFnZXMuaHRtbCAqLzsgfTsKKwkJOTNCQ0JDODMyM0NDNkYyQTAwQ0Ey
MjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCQ0JDODAyM0NDNkVFODAwQ0EyMjIxIC8q
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tICovOyB9OworCQk5M0JDQkM4NDIzQ0M2
RjQ0MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0JDQkM4MjIz
Q0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbCAqLzsg
fTsKIAkJOTNDRkE4NjcxQ0VCOUUzODAwMDU2NUE4IC8qIGF1dG9mb2N1c2VkLXRleHQtaW5wdXQu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0NGQTg2NjFDRUI5REUxMDAwNTY1QTggLyogYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1s
ICovOyB9OwogCQk5M0QxMTlGQzIyQzY4MEY3MDA5QkUzQzcgLyogbG9jYWxzdG9yYWdlLW9wZW4t
d2luZG93LXByaXZhdGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5M0QxMTlGQjIyQzU3MTEyMDA5QkUzQzcgLyogbG9jYWxzdG9yYWdl
LW9wZW4td2luZG93LXByaXZhdGUuaHRtbCAqLzsgfTsKIAkJOTNFMkM1NTUxRkQzMjA0MTAwRTFE
RjZBIC8qIExpbmVFbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNFMkM1NTQxRkQzMjA0MTAwRTFERjZBIC8qIExpbmVFbmRpbmcuY3BwICov
OyB9OwpAQCAtMTMwNCw2ICsxMzA3LDggQEAKIAkJCQk1MTA0Nzc3MzFEMjk4REREMDA5NzQ3RUIg
LyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy1zaG0gaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJ
CQkJNTEwNDc3NzQxRDI5OERERDAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMt
d2FsIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTUxMTBGQ0YxMUUwMUNENjQwMDZGOEQwQiAv
KiBJREJJbmRleFVwZ3JhZGVUb1YyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCisJCQkJOTM3
QjU2OUUyM0NEMjNEQjAwMkFFNjQwIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGUuc3FsaXRl
MyBpbiBDb3B5IFJlc291cmNlcyAqLywKKwkJCQk5M0JDQkM4NDIzQ0M2RjQ0MDBDQTIyMjEgLyog
SURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywK
IAkJCQlGNDFBQjlBNDFFRjQ2OTZCMDA4M0ZBMDggLyogaW1hZ2UtYW5kLWNvbnRlbnRlZGl0YWJs
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUY0RTBBMkI0MjEyMjQwMkIwMEFGN0M3
RiAvKiBpbWFnZS1hbmQtZmlsZS11cGxvYWQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJ
CQlGNDFBQjlBNTFFRjQ2OTZCMDA4M0ZBMDggLyogaW1hZ2UtYW5kLXRleHRhcmVhLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8sCkBAIC0yMTg2LDYgKzIxOTEsOSBAQAogCQk5M0FGNEVDQTE1MDZG
MDM1MDA3RkQ1N0UgLyogTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9ySW1hZ2VzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld0ZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dEZvckltYWdlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQUY0RUNEMTUwNkYwNjQwMDdGRDU3RSAvKiBOZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXRGb3JJbWFnZXNfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckltYWdlc19CdW5kbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FGNEVDRjE1MDZGMTIzMDA3RkQ1N0UgLyog
bG90cy1vZi1pbWFnZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJsb3RzLW9m
LWltYWdlcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNCQ0JDODAyM0ND
NkVFODAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSURCT2JqZWN0U3RvcmVJbmZvVXBncmFk
ZVRvVjIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzQkNCQzgxMjNDQzZFRjUw
MENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlLnNxbGl0ZTMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gSURCT2Jq
ZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5M0JDQkM4MjIzQ0M2RUY1MDBDQTIyMjEgLyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRv
VjIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IElEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGVUb1YyLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQ0ZBODY2MUNF
QjlERTEwMDA1NjVBOCAvKiBhdXRvZm9jdXNlZC10ZXh0LWlucHV0Lmh0bWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAiYXV0b2ZvY3VzZWQtdGV4dC1pbnB1dC5odG1sIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDRkE4NjgxQ0VCQ0ZFRDAwMDU2NUE4IC8qIENhbmRpZGF0
ZVRlc3RzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuZGlk
YXRlVGVzdHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRDExOUZCMjJDNTcx
MTIwMDlCRTNDNyAvKiBsb2NhbHN0b3JhZ2Utb3Blbi13aW5kb3ctcHJpdmF0ZS5odG1sICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5odG1sOyBwYXRoID0gImxvY2Fsc3RvcmFnZS1vcGVuLXdpbmRvdy1wcml2YXRl
Lmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkyOSw2ICsyOTM3LDcgQEAK
IAkJCQk1MUFGMjNERTFFRjFBMzcyMDA3MkYyODEgLyogSWNvbkxvYWRpbmdEZWxlZ2F0ZS5tbSAq
LywKIAkJCQk1MTA0Nzc3NTFEMjk4RTAzMDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkubW0g
Ki8sCiAJCQkJNTExMEZDRUYxRTAxQ0JBQTAwNkY4RDBCIC8qIElEQkluZGV4VXBncmFkZVRvVjIu
bW0gKi8sCisJCQkJOTNCQ0JDODAyM0NDNkVFODAwQ0EyMjIxIC8qIElEQk9iamVjdFN0b3JlSW5m
b1VwZ3JhZGVUb1YyLm1tICovLAogCQkJCTUxQTU4Nzg0MUQyNzJFRjMwMDRCQTlBRiAvKiBJbmRl
eGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1tICovLAogCQkJCUNBQjBGRjU0MjIzMzJDM0EwMDZD
QTVCMCAvKiBJbmRleGVkREJGaWxlTmFtZS5tbSAqLywKIAkJCQk5Mzk5QkEwMTIzNzExMEFFMDA4
MzkyQkYgLyogSW5kZXhlZERCSW5QYWdlQ2FjaGUubW0gKi8sCkBAIC0zMzk2LDYgKzM0MDUsOCBA
QAogCQkJCTUxMDQ3NzcwMUQyOThEODUwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5zcWxp
dGUzLXNobSAqLywKIAkJCQk1MTA0Nzc3MTFEMjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVj
b3Zlcnkuc3FsaXRlMy13YWwgKi8sCiAJCQkJNTExMEZDRjAxRTAxQ0Q1MzAwNkY4RDBCIC8qIElE
QkluZGV4VXBncmFkZVRvVjIuaHRtbCAqLywKKwkJCQk5M0JDQkM4MTIzQ0M2RUY1MDBDQTIyMjEg
LyogSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUzICovLAorCQkJCTkzQkNCQzgyMjND
QzZFRjUwMENBMjIyMSAvKiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5odG1sICovLAog
CQkJCUY0MUFCOTk5MUVGNDY5MkMwMDgzRkEwOCAvKiBpbWFnZS1hbmQtY29udGVudGVkaXRhYmxl
Lmh0bWwgKi8sCiAJCQkJRjRFMEEyQjMyMTIyM0YyRDAwQUY3QzdGIC8qIGltYWdlLWFuZC1maWxl
LXVwbG9hZC5odG1sICovLAogCQkJCUY0MUFCOTkzMUVGNDY5MkMwMDgzRkEwOCAvKiBpbWFnZS1h
bmQtdGV4dGFyZWEuaHRtbCAqLywKQEAgLTQ3MzksNiArNDc1MCw3IEBACiAJCQkJNTFBRjIzREYx
RUYxQTM3MzAwNzJGMjgxIC8qIEljb25Mb2FkaW5nRGVsZWdhdGUubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MTA0Nzc3ODFEMjk5MjNCMDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkubW0gaW4g
U291cmNlcyAqLywKIAkJCQk1MTEwRkNGQTFFMDFDREI4MDA2RjhEMEIgLyogSURCSW5kZXhVcGdy
YWRlVG9WMi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTkzQkNCQzgzMjNDQzZGMkEwMENBMjIyMSAv
KiBJREJPYmplY3RTdG9yZUluZm9VcGdyYWRlVG9WMi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
QTU4Nzg2MUQyNzNBQTkwMDRCQTlBRiAvKiBJbmRleGVkREJEYXRhYmFzZVByb2Nlc3NLaWxsLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0FCMEZGNTUyMjMzMkM1NzAwNkNBNUIwIC8qIEluZGV4ZWRE
QkZpbGVOYW1lLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5OUJBMDQyMzcxMTE0MDAwODM5MkJG
IC8qIEluZGV4ZWREQkluUGFnZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1Vw
Z3JhZGUuc3FsaXRlMyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
T2JqZWN0U3RvcmVJbmZvVXBncmFkZS5zcWxpdGUzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0NDI2ZWEwNDEwYjQy
MzllN2IxMGY2YTgzMjVmMGY4NjM0NzNkMmYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDY5NjMy
CnpjbWVJKiYyUVVlOTAlfnt2N0h5VU9gcSZWMyNoPGNieWJfU2d9SSRINEgwI0hOdkVpMyh4dkk+
a1dsQmc/JmQ4YAp6eTJMNSVHJGF5RFR6MUB2S1kjPGAwQHtUVz1VdEcxMUJaelY1O3VnXzNCZHMm
O0laP3ZJN2B4T3BoP1RWbWZBZGEKenA2QlExYFNgSXRgKzJyNFU1Rlp7dTU0enFUYmlqJTVJKyRG
YSF5ZVFBcC13NyNENk1GN2Yobyk3NSsoVSgjP19yCnpkR29hNT4keVl4P3dmPzI/N2k+MTt+Vlh7
K2tMJWZyRHczflJgO20pXlJBSG14NXNxZl5xZyVMMWx1NzEwU0d7Iwp6bExRTHlGaSY3O2ghKVM3
K0ZEQVYqWjBvclgrNWklblFZRm47LTUpYHI7PWVNSVctKihEfl8qfTttcTFLZWNmRSoKemg0amQq
NXtWX2w9ZmVwbDdFZGElPCFEcmkkQ1IwUFklVXNeTmgpKHdrKkttOWkoRlVeSkdMam5pX3hpPkBU
anQkCnomdH48cyRAZyRAcHh7fSpKRnFaQmlJTHZXY1hLeVZ7NFRueDw7eyR9elVydnVzX0l4aFI2
TzE1Ml4+RjhaPGtzZwp6dV84cCRvMCkyWUlhKnhadFBDMykyaUkmPU5vIWxXa19Aa0tnSnVxKyUy
VUZQRCViVkJNYXtnYk9oQEM+dHBYZGwKejwrTzFsdWVWZHZ0JGZOZiFmNyt4aihCbWcrWT1aV3B8
e18pSjUwUmgkYUIyOSlnQXw3LUlvcj8jWUFMYkRzZjRmCno0X3w4RHRWYUZEPlE4TjlIIXN8LXNu
eEx9PkdpZnFIUXR4MzQlTm9sNURmWDtmZVJ6ZUkmcSFhPlVpQ1QtY1psZQp6NmokcXRgd0M7U2VM
I3pjPjtvRV5vdTFXck8zVWY/KzJDQzVhdmFkUXl2aV9fSmZPPXJJdHRaT2VAOUY0OV4za3kKejM1
TDJfSE1nIXh0N19lYj8hcDxqZWNCZzhjNXxtd25ZQjQxclJTOyVrRTRteiZDMmleJiRedDU5I0Zx
VjRKYEgxCnpPfT9BaCE1NCpRMGZNVTY5UzkkOSk9akR2VF4rOWBXITJNTzV3JSp4JVdyUGg0PUVn
VGM+KTZpdzItU2hDR189Nwp6Y0VncWBDKjRuMm1BYFBANSl6cFkrQnMrMV45e1opeGRVJHYoITVj
K1ZEcG8jeXdDQyNgdGIlPXhwdEEqWTxOWW4KenpwbCt7LUZ8OH0rVEF4O2R8VUpjMV92RnRoMXlj
KHdCJV5IR21PI2huZzQ5cHw1Njg+aUFTVD57aDBVZm1lPFR0CnpyUko8XnpmazchYi1tUSR3eXRF
QzEjWl96M3FHNW0waD9INkVCXnRZYll5RHRTcUcpTz8mdzMyU15NND5FRyR0Xgp6cHMkWT5LZVc0
TEljeGJ0YTIlQXpWY099NSl5cjc+VU0xdWZjbHhZLV4zKjhTLTBefXdlIV9gdGhfSjhOSHZobF4K
ejBTR188MHVYPXoxUnd3YjJ0V1Y9NU98cGQmV2tTRWYwR1oxRDx5XmZOZUBwNXtDKDkmXzZ2dTNl
YXxufnRXM0UwCnppdjQ4bmNVTXZxfEx8b19hTEdKU0JAUXspST9pfjVJT0JGND5XRmh0ZWJmZVZS
NGF9KHM0dWNfMzQ2cVQ7dlpOYgp6MDA5VTwwMEl6ejAwYlphMFNHXzwwdVhvczFwRV4xciF9dUJM
Pys0b156cktrcF9pfUFtRyU4ZVl5OThFUDgwUzYKemA7dlhrRjdxVDcydFdWPTVQJCMjQU9IYWZL
bVk7fGZCKiF6eik2PXxyWGxNd2AhWE4lQ2s5RUE0V2c0PkdTN2VTCnprJXtXKXt7RXpSTFVMMUN3
ZSN8YzBBejx+QnRgTigtKmAwX0lWU2B+dz1EQ0JqUlFLZTRoVktZbmVXXmdQXnx7cwp6cEIkIWtK
aF5lYStNTCQtemwrQD4+fVUxYHlUIWc/cFlSUD5BT0hhZkttWTt8ZkIqeV8wMDlVPDAwSSNCLXZu
TTAKekxydEZlQ3k0OHFzUFpxSmtORCQ2WUY9aVhoPmdtcU1DY1BrUDJVN3E8TnkzMHtsZndRMnRX
Vj01UCQjI0FPSGFmCnpLbVk7fGZJdFRlO1E3Q1U0PSRQcDBTR188MHVYPXoxUnd3YjJ0V1Y9NUdW
XiteWnptYWtMfn5nMnRXVj01UCQjIwp6QU9IYWZLbVk7fD14aE56fDlBSEJNZTg1ezBTR188MHVY
PXoxUnd3YjJ0V1Y9bVZoPD9VdClJJmAtT2VZS0h+ezIKejVQJCMjQU9IYWZLbVk7fGZCKnlfMDA5
VSo0fXFoU0lLfiNWLVQyeHllY2ZDI0dnJjx7c34hPT41akx4dCtNMVRyCnpGWTRLeGt4OG9+Zjti
cWlZPmE3SmRkNG8zdiZ0Q2gmQ0ZQU2AkfF5aKDhvK1lYQzkkRSFoJnZVOCQzIVNmO0lqeAp6djNy
RjUkbkxYeT9BUGJmSzxvbm81UCQjI0FPSGFmS21ZO3xmQip5XzBEJUpxaio0VG57YEcpI0w+IUAm
N1hqc0cKemQoa2ZyUjx+SSUyWlkxb2grT3ZxeiM5Si1tX2dXQXsxK0FvS21ZO3xmQip5XzAwOVU8
MDBJenowMGpQPHo9R2Y9Cno+Vz1LeShpIXVyb347PyZVKXhSQElyRyUxQDJIUzhfcUtJRUBwaE8w
TT9PbCtJfkQ3OGV0Mz8kJHA4O204dH1JIwp6MnxRQ0FZeTRrZWUtUVE7fEFocXQ1UCQjI0FPSGFm
S21ZO3xmQip5XzBEJXE/YUVYKShmKykmej5HfVR3VkdyMSYKejRyKEJwMHMjbT4wMEl6ejAwYlph
MFNHXzwwdVhwZjFkZlIrZVI4c2EmP15xZUhJb0xjYFR0Xz9aLWpseTtgez4oCnoxUnd3YjJ0V1Y9
NVAkIyNBT0hhZkslaTN1LVY/cEA+JExFTypLNEZWXnhiKVZQcEN8dHxERm4+V0tZN3NtQH42Ugp6
YGloXmZSNUUjZWhoT2IwOEMwamB5WHM2JUJuMi1HJGMwekRVU1VUfDxARllVbStjSmdNRDQjc2Q1
emBUOG49bDEKemJRU2lvLX0oSWlobEQrM2Y3VWV5c31PKHkxUnd3YjJ0V1Y9NVAkIyNBT0hhZnlx
RSUjQis2OWFiJDFib3wwTXVmCno9O0Q5dlUqSj4hKiZ7c3Z6bkYmPHdUMXUkQU9IYWZLbVk7fGZC
KnlfMDA5VXo1VV5lVk5QTjVYXylpN2J6ZD9IJgpBcGExez4KCmxpdGVyYWwgMApIY21WP2QwMDAw
MQoKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
T2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMTZmZTdhZWU0ZmNhZTc1NmUxOWRiYmU2YTEyZGU4ZDkxYTRiMzk5Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JREJPYmplY3RT
dG9yZUluZm9VcGdyYWRlVG9WMi5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzxzY3JpcHQ+CisKK3Zh
ciBkYXRhYmFzZU5hbWUgPSAib2JqZWN0c3RvcmVpbmZvLXVwZ3JhZGUtdGVzdCI7Cit2YXIgb3Bl
blJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5hbWUpOwordmFyIGRiOworb3BlblJl
cXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB3aW5kb3cud2Vi
a2l0Lm1lc3NhZ2VIYW5kbGVycy50ZXN0SGFuZGxlci5wb3N0TWVzc2FnZSgiVW5leHBlY3RlZCB1
cGdyYWRlIG5lZWRlZCIpOworfQorCitvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihl
dmVudCkgeworICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBv
c3RNZXNzYWdlKCJTdWNjZXNzIik7CisgICAgdmFyIHRyYW5zYWN0aW9uID0gZXZlbnQudGFyZ2V0
LnJlc3VsdC50cmFuc2FjdGlvbihbJ29iamVjdFN0b3JlJywgJ2Fub3RoZXJPYmplY3RTdG9yZSdd
KTsKKyAgICB2YXIgaW5kZXhDb3VudCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdvYmplY3RT
dG9yZScpLmluZGV4TmFtZXM7CisgICAgaWYgKGluZGV4ZXMubGVuZ3RoICE9IDIpCisgICAgICAg
IHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJV
bmV4cGVjdGVkIGNvdW50IG9mIGluZGV4ZXMgaW4gb2JqZWN0U3RvcmUgJ29iamVjdFN0b3JlJzog
IiArIGluZGV4ZXMubGVuZ3RoKTsKKyAgICAKKyAgICBpbmRleENvdW50ID0gdHJhbnNhY3Rpb24u
b2JqZWN0U3RvcmUoJ2Fub3RoZXJPYmplY3RTdG9yZScpLmluZGV4TmFtZXM7CisgICAgaWYgKGlu
ZGV4ZXMubGVuZ3RoICE9IDEpCisgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJz
LnRlc3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJVbmV4cGVjdGVkIGNvdW50IG9mIGluZGV4ZXMgaW4g
b2JqZWN0U3RvcmUgJ2Fub3RoZXJPYmplY3RTdG9yZSc6ICIgKyBpbmRleGVzLmxlbmd0aCk7CisK
KyAgICByZXEgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnb2JqZWN0U3RvcmUnKS5pbmRleCgn
aW5kZXhLZXknKS5nZXQoImluZGV4S2V5MSIpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlv
bihldmVudCkgeworICAgICAgICBpZiAocmVxLnJlc3VsdC52YWx1ZSAhPSAidmFsdWUxIikKKyAg
ICAgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5kbGVyLnBvc3RN
ZXNzYWdlKCJVbmV4cGVjdGVkIGdldCByZXN1bHQ6ICIgKyAgcmVxLnJlc3VsdC52YWx1ZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRl
c3RIYW5kbGVyLnBvc3RNZXNzYWdlKCJTdWNjZXNzIik7CisgICAgfQorICAgIHJlcS5vbmVycm9y
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgd2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxl
cnMudGVzdEhhbmRsZXIucG9zdE1lc3NhZ2UoIlVuZXhwZWN0ZWQgZ2V0IHJlc3VsdDogIiArICBy
ZXEucmVzdWx0LnZhbHVlKTsKKyAgICB9Cit9CisKK29wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBmdW5j
dGlvbihldmVudCkgeworICAgIHdpbmRvdy53ZWJraXQubWVzc2FnZUhhbmRsZXJzLnRlc3RIYW5k
bGVyLnBvc3RNZXNzYWdlKCJVbmV4cGVjdGVkIG9wZW4gZXJyb3IiKTsKK30KKworPC9zY3JpcHQ+
CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSURC
T2JqZWN0U3RvcmVJbmZvVXBncmFkZVRvVjIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0lEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmVmMWMxZTUxMzQxY2IwYzFmYzEwNTlhMzlmODE1YmFkMGM2M2RkNTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lEQk9iamVjdFN0b3Jl
SW5mb1VwZ3JhZGVUb1YyLm1tCkBAIC0wLDAgKzEsODIgQEAKKy8qCisqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpbXBvcnQg
IlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0LmgiCisjaW1wb3J0IDxXZWJDb3Jl
L1NRTGl0ZUZpbGVTeXN0ZW0uaD4KKyNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV2ViS2l0Lmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLVXNlclN0eWxlU2hlZXQuaD4KKyNpbXBvcnQg
PHd0Zi9SZXRhaW5QdHIuaD4KKworc3RhdGljIGJvb2wgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlOwor
c3RhdGljIFJldGFpblB0cjxXS1NjcmlwdE1lc3NhZ2U+IGxhc3RTY3JpcHRNZXNzYWdlOworCitA
aW50ZXJmYWNlIElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyTWVzc2FnZUhhbmRsZXIgOiBO
U09iamVjdCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4KK0BlbmQKKworQGltcGxlbWVudGF0aW9u
IElEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyTWVzc2FnZUhhbmRsZXIKKworLSAodm9pZCl1
c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNlckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRl
bnRDb250cm9sbGVyIGRpZFJlY2VpdmVTY3JpcHRNZXNzYWdlOihXS1NjcmlwdE1lc3NhZ2UgKilt
ZXNzYWdlCit7CisgICAgcmVjZWl2ZWRTY3JpcHRNZXNzYWdlID0gdHJ1ZTsKKyAgICBsYXN0U2Ny
aXB0TWVzc2FnZSA9IG1lc3NhZ2U7Cit9CitAZW5kCisKK1RFU1QoSW5kZXhlZERCLCBJREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlVG9WMikKK3sKKyAgICBSZXRhaW5QdHI8SURCT2JqZWN0U3RvcmVJ
bmZvVXBncmFkZVRvVjJNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciA9IGFkb3B0TlMoW1tJREJPYmpl
Y3RTdG9yZUluZm9VcGdyYWRlVG9WMk1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAg
UmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtbY29uZmlndXJh
dGlvbiB1c2VyQ29udGVudENvbnRyb2xsZXJdIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIl07CisKKyAgICBbY29uZmlndXJhdGlvbi5nZXQo
KS5wcm9jZXNzUG9vbCBfdGVybWluYXRlTmV0d29ya1Byb2Nlc3NdOworCisgICAgLy8gQ29weSBk
YXRhYmFzZSBmaWxlcyB3aXRoIG9sZCBPYmplY3RTdG9yZUluZm8gc2NoZW1hIHRvIHRoZSBkYXRh
YmFzZSBkaXJlY3RvcnkuCisgICAgTlNVUkwgKnVybDEgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAiSURCT2JqZWN0U3RvcmVJbmZvVXBncmFkZSIgd2l0aEV4dGVuc2lv
bjpAInNxbGl0ZTMiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisK
KyAgICBOU1N0cmluZyAqaGFzaCA9IFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmNvbXB1dGVI
YXNoRm9yRmlsZU5hbWUoIm9iamVjdHN0b3JlaW5mby11cGdyYWRlLXRlc3QiKTsKKyAgICBOU1N0
cmluZyAqb3JpZ2luRGlyZWN0b3J5ID0gQCJ+L0xpYnJhcnkvV2ViS2l0L1Rlc3RXZWJLaXRBUEkv
V2Vic2l0ZURhdGEvSW5kZXhlZERCL3YxL2ZpbGVfXzAvIjsKKyAgICBOU1N0cmluZyAqZGF0YWJh
c2VEaXJlY3RvcnkgPSBbW29yaWdpbkRpcmVjdG9yeSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpo
YXNoXSBzdHJpbmdCeUV4cGFuZGluZ1RpbGRlSW5QYXRoXTsKKyAgICBOU1VSTCAqdGFyZ2V0VVJM
ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpkYXRhYmFzZURpcmVjdG9yeV07CisgICAgW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGFyZ2V0VVJMIGVycm9y
Om5pbF07CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3Rv
cnlBdFVSTDp0YXJnZXRVUkwgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1
dGVzOm5pbCBlcnJvcjpuaWxdOworCisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBjb3B5SXRlbUF0VVJMOnVybDEgdG9VUkw6W3RhcmdldFVSTCBVUkxCeUFwcGVuZGluZ1BhdGhD
b21wb25lbnQ6QCJJbmRleGVkREIuc3FsaXRlMyJdIGVycm9yOm5pbF07CisKKyAgICBSZXRhaW5Q
dHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKKworICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpA
IklEQk9iamVjdFN0b3JlSW5mb1VwZ3JhZGVUb1YyIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3Vi
ZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisgICAgW3dlYlZpZXcgbG9h
ZFJlcXVlc3Q6cmVxdWVzdF07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnJlY2Vp
dmVkU2NyaXB0TWVzc2FnZSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJTdWNjZXNzIiwgW2xh
c3RTY3JpcHRNZXNzYWdlIGJvZHldKTsKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
Q2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGYwM2Y1NzlhNDg4
MWE4ZDZkOTY2YTMyOGE4ZjU0MGQ3ZDc4NjYzZS4uZWUyNTk5Zjc2MGIyYWViZDg1ZDg3MjMwNmVm
Mzk4ZWI5MDQwZWYzMSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0wMS0y
MSAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KKworICAgICAgICBJbmRleGVkREI6
IHNwZWVkIHVwIGluZGV4IHJlY29yZHMgZGVsZXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjE5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogSW5kZXhlZERCL2Jhc2ljL2luZGV4LWN1cnNvci1k
ZWxldGUtMi5odG1sOiBBZGRlZC4KKwogMjAyMC0wMS0wOCAgU2lodWkgTGl1ICA8c2lodWlfbGl1
QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjQyOTExPyk6IEhpZ2ggU2llcnJh
IFJlbGVhc2UgV0syIFBlcmYgYm90IHRpbWluZyBvdXQgd2hpbGUgcnVubmluZyBJbmRleGVkREIv
bGFyZ2UtbnVtYmVyLW9mLWluc2VydHMuaHRtbApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRlbGV0ZS0yLmh0bWwgYi9QZXJmb3JtYW5j
ZVRlc3RzL0luZGV4ZWREQi9iYXNpYy9pbmRleC1jdXJzb3ItZGVsZXRlLTIuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42YmZiYzVmMzc1NTFjOTllMmJmMWI2YzY1YWExOTgwY2IxNTU4NWI3Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvYmFzaWMvaW5kZXgtY3Vyc29yLWRl
bGV0ZS0yLmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKworY29uc3QgbnVtYmVyT2ZJdGVyYXRpb25zID0gMjA7Citjb25zdCBudW1iZXJP
Zkl0ZW1zID0gMTAwMDA7Citjb25zdCBudW1iZXJPZkl0ZW1zVG9EZWxldGUgPSA1MDAwOworCisv
LyBEZWxldGUgZGF0YWJhc2UocykgZm9yIHRoZSB0ZXN0IGFoZWFkIG9mIHRpbWUuCit2YXIgZGF0
YWJhc2VOYW1lID0gImluZGV4LWN1cnNvci1kZWxldGUtREItMiI7CitpbmRleGVkREIuZGVsZXRl
RGF0YWJhc2UoZGF0YWJhc2VOYW1lKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICBzdGFy
dEl0ZXJhdGlvbigpOworfQorCit2YXIgdGVzdEdlbmVyYXRvciA9IG51bGw7Cit2YXIgZGIgPSBu
dWxsOwordmFyIHRyYW5zYWN0aW9uID0gbnVsbDsKKworUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRv
TWVhc3VyZVZhbHVlc0FzeW5jKHsKKyAgICBjdXN0b21JdGVyYXRpb25Db3VudDogbnVtYmVyT2ZJ
dGVyYXRpb25zLAorICAgIHVuaXQ6ICdtcycsCisgICAgZG9uZTogZnVuY3Rpb24gKCkgeworICAg
ICAgICB0cmFuc2FjdGlvbiA9IG51bGw7CisgICAgICAgIGRiID0gbnVsbDsKKyAgICAgICAgdGVz
dEdlbmVyYXRvciA9IG51bGw7CisgICAgICAgIFBlcmZUZXN0UnVubmVyLmdjKCk7CisgICAgfQor
fSk7CisKK2Z1bmN0aW9uIHN0YXJ0SXRlcmF0aW9uKCkKK3sKKyAgICB0ZXN0R2VuZXJhdG9yID0g
cnVuSXRlcmF0aW9uKCk7CisgICAgbmV4dFN0ZXAoKTsKK30KKworZnVuY3Rpb24gbmV4dFN0ZXAo
KQoreworICAgIHRlc3RHZW5lcmF0b3IubmV4dCgpOworfQorCitmdW5jdGlvbiAqcnVuSXRlcmF0
aW9uKCkKK3sKKyAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYXRhYmFzZU5h
bWUpOworICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgdmFyIG9iamVjdFN0
b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJywgeyBrZXlQYXRoOiAndW5pcXVlSW5k
ZXhLZXknIH0pOworICAgICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgndW5pcXVlSW5kZXgn
LCAndW5pcXVlSW5kZXhLZXknLCB7IHVuaXF1ZTogdHJ1ZSB9KTsKKyAgICAgICAgb2JqZWN0U3Rv
cmUuY3JlYXRlSW5kZXgoJ2luZGV4JywgJ2luZGV4S2V5Jyk7CisgICAgfQorICAgIG9wZW5SZXF1
ZXN0Lm9uc3VjY2VzcyA9IG5leHRTdGVwOworCisgICAgeWllbGQ7CisKKyAgICAvLyBTdG9yZSBp
dGVtcyBmb3IgZGVsZXRpb24uCisgICAgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3Rv
cmUnLCAncmVhZHdyaXRlJyk7CisgICAgdmFyIG9iamVjdFN0b3JlID0gdHJhbnNhY3Rpb24ub2Jq
ZWN0U3RvcmUoJ3N0b3JlJyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJPZkl0ZW1z
OyArK2kpCisgICAgICAgIG9iamVjdFN0b3JlLnB1dCh7IHZhbHVlOiAndmFsdWUnLCB1bmlxdWVJ
bmRleEtleTogInVuaXF1ZUluZGV4S2V5IiArIGksIGluZGV4S2V5OiAiaW5kZXgiICsgKGklMikg
fSk7CisKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgICAgbmV4dFN0ZXAoKTsKKyAgICB9CisKKyAgICB5aWVsZDsKKworICAgIHZhciBzdGFydFRp
bWUgPSBQZXJmVGVzdFJ1bm5lci5ub3coKTsKKworICAgIHZhciBpbmRleCA9IGRiLnRyYW5zYWN0
aW9uKCdzdG9yZScsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZSgnc3RvcmUnKS5pbmRleCgnaW5k
ZXgnKTsKKyAgICB2YXIgY29tcGxldGVkRGVsZXRlcyA9IDA7CisgICAgaW5kZXgub3BlbkN1cnNv
cihJREJLZXlSYW5nZS5vbmx5KCdpbmRleDEnKSkub25zdWNjZXNzID0gZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgICAgIGlm
KGN1cnNvcikgeworICAgICAgICAgICAgY3Vyc29yLmRlbGV0ZSgpLm9uc3VjY2VzcyA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKCsrY29tcGxldGVkRGVsZXRlcyA9PSBu
dW1iZXJPZkl0ZW1zVG9EZWxldGUpCisgICAgICAgICAgICAgICAgICAgIG5leHRTdGVwKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgeWllbGQ7CisKKyAgICBpZiAoIVBlcmZUZXN0UnVubmVyLm1lYXN1cmVW
YWx1ZUFzeW5jKFBlcmZUZXN0UnVubmVyLm5vdygpIC0gc3RhcnRUaW1lKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2V0VGltZW91dChzdGFydEl0ZXJhdGlvbiwgMCk7Cit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>