<?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>101415</bug_id>
          
          <creation_ts>2012-11-06 17:50:12 -0800</creation_ts>
          <short_desc>IndexedDB: Combine IDBBackingStore and IDBLevelDBBackingStore</short_desc>
          <delta_ts>2012-11-09 16:02:12 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>101488</dependson>
    
    <dependson>101790</dependson>
          <blocked>101668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alec Flett">alecflett</reporter>
          <assigned_to name="Alec Flett">alecflett</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>jsbell</cc>
    
    <cc>peter+ews</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>760252</commentid>
    <comment_count>0</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-06 17:50:12 -0800</bug_when>
    <thetext>IndexedDB: Combine IDBBackingStore and IDBLevelDBBackingStore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760256</commentid>
    <comment_count>1</comment_count>
      <attachid>172687</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-06 18:02:38 -0800</bug_when>
    <thetext>Created attachment 172687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760259</commentid>
    <comment_count>2</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-06 18:03:51 -0800</bug_when>
    <thetext>jsbell/dgrogan - this is a decent sized refactor, but do you mind taking a look? It&apos;s mechanical, but check the changelog for the exact details. Beyond the reduction in code complexity, this also removes roughly 200 lines of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760262</commentid>
    <comment_count>3</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-06 18:07:31 -0800</bug_when>
    <thetext>oh, and jsbell this will most certainly conflict with bug 100700 - I&apos;m happy to wait for that to land and deal with the fallout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760266</commentid>
    <comment_count>4</comment_count>
      <attachid>172687</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-06 18:19:06 -0800</bug_when>
    <thetext>Comment on attachment 172687
Patch

Attachment 172687 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14660522</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760274</commentid>
    <comment_count>5</comment_count>
      <attachid>172687</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-11-06 18:38:45 -0800</bug_when>
    <thetext>Comment on attachment 172687
Patch

Attachment 172687 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14732979</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760276</commentid>
    <comment_count>6</comment_count>
      <attachid>172687</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-06 18:40:51 -0800</bug_when>
    <thetext>Comment on attachment 172687
Patch

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

Just a cursory look

&gt; Source/WebCore/ChangeLog:23
&gt; +        owner, IDBCursorBackendImpl.

I think you mean IDBTransactionBackendImpl?

&gt; Source/WebCore/ChangeLog:25
&gt; +        4) Shortened the name of a few classes/methods (e.g.

Could you do 4, 5, and 6 in separate patches?  Maybe 3 too?

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:-408
&gt; -        backingStoreCursor-&gt;close();

This line seems scary, why don&apos;t we have to close the backingStoreCursor anymore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760307</commentid>
    <comment_count>7</comment_count>
      <attachid>172687</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-06 19:31:38 -0800</bug_when>
    <thetext>Comment on attachment 172687
Patch

Attachment 172687 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14760198</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760337</commentid>
    <comment_count>8</comment_count>
      <attachid>172687</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-06 20:23:24 -0800</bug_when>
    <thetext>Comment on attachment 172687
Patch

Attachment 172687 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14731952</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760954</commentid>
    <comment_count>9</comment_count>
      <attachid>172856</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-07 12:10:25 -0800</bug_when>
    <thetext>Created attachment 172856
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760959</commentid>
    <comment_count>10</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-07 12:13:41 -0800</bug_when>
    <thetext>ok, I&apos;ve broken this up into 3 patches. The first 2 are reasonably simple, and this bug has the &quot;final&quot; bit that couldn&apos;t be split up any further... but as you&apos;ll see it is way easier to read now.

Regarding closing the cursor - so IDBLevelDBBackingStore::Cursor::close() was a no-op - so I nuked it - if anything it demonstrates why having so many layers of abstraction and interfaces obfuscate and clutter up other code - it&apos;s hard for us to figure out what parts of what interfaces are actually dead or not!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762043</commentid>
    <comment_count>11</comment_count>
      <attachid>172856</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 12:14:28 -0800</bug_when>
    <thetext>Comment on attachment 172856
Patch

jsbell/dgrogan - care to take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762044</commentid>
    <comment_count>12</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 12:14:52 -0800</bug_when>
    <thetext>(FYI, this patch won&apos;t apply cleanly to chromium until the next webkit roll)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762072</commentid>
    <comment_count>13</comment_count>
      <attachid>173096</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 12:38:47 -0800</bug_when>
    <thetext>Created attachment 173096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762091</commentid>
    <comment_count>14</comment_count>
      <attachid>173101</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 13:01:49 -0800</bug_when>
    <thetext>Created attachment 173101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762092</commentid>
    <comment_count>15</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 13:02:33 -0800</bug_when>
    <thetext>my changelogs went haywire in the last patch. I also fixed the histogram enums back the way they were. Patch is otherwise the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762338</commentid>
    <comment_count>16</comment_count>
      <attachid>173153</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 17:05:46 -0800</bug_when>
    <thetext>Created attachment 173153
Patch

Update after bug 100700 landed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762401</commentid>
    <comment_count>17</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-08 18:15:20 -0800</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762409</commentid>
    <comment_count>18</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 18:30:36 -0800</bug_when>
    <thetext>tony@ - another refactor for ya. r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763101</commentid>
    <comment_count>19</comment_count>
      <attachid>173153</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-09 09:45:59 -0800</bug_when>
    <thetext>Comment on attachment 173153
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763242</commentid>
    <comment_count>20</comment_count>
      <attachid>173153</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 12:47:43 -0800</bug_when>
    <thetext>Comment on attachment 173153
Patch

Clearing flags on attachment: 173153

Committed r134101: &lt;http://trac.webkit.org/changeset/134101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763243</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 12:47:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763267</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 13:27:12 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 101790</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763287</commentid>
    <comment_count>23</comment_count>
      <attachid>173357</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-09 13:52:26 -0800</bug_when>
    <thetext>Created attachment 173357
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763299</commentid>
    <comment_count>24</comment_count>
      <attachid>173357</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 14:05:59 -0800</bug_when>
    <thetext>Comment on attachment 173357
Patch for landing

Rejecting attachment 173357 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/14680479</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763307</commentid>
    <comment_count>25</comment_count>
      <attachid>173362</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-09 14:19:05 -0800</bug_when>
    <thetext>Created attachment 173362
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763389</commentid>
    <comment_count>26</comment_count>
      <attachid>173362</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 15:24:37 -0800</bug_when>
    <thetext>Comment on attachment 173362
Patch for landing

Rejecting attachment 173362 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
nt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...
Updating OpenSource
From http://git.chromium.org/external/Webkit
   955bc47..a388f5d  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 134117 = 5609c0bf5278e86109c3d178cfb12786bf7f48d5
last_rev is higher!: 134117 &gt;= 134113 at /usr/lib/git-core/git-svn line 1523

Died at Tools/Scripts/update-webkit line 154.

Full output: http://queues.webkit.org/results/14775735</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763394</commentid>
    <comment_count>27</comment_count>
      <attachid>173362</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-09 15:30:59 -0800</bug_when>
    <thetext>Comment on attachment 173362
Patch for landing

trying again - I think the git mirror got wedged or something</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763412</commentid>
    <comment_count>28</comment_count>
      <attachid>173362</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 16:02:06 -0800</bug_when>
    <thetext>Comment on attachment 173362
Patch for landing

Clearing flags on attachment: 173362

Committed r134129: &lt;http://trac.webkit.org/changeset/134129&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763413</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 16:02:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172687</attachid>
            <date>2012-11-06 18:02:38 -0800</date>
            <delta_ts>2012-11-07 12:10:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101415-20121106180050.patch</filename>
            <type>text/plain</type>
            <size>194917</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWE5OTA0MTgwYjk5NWU5
MWQ4N2ViMTJlOWIyMDA5NGQ1NjBhMTIwNi4uNDZkY2YyMDNmZWU4MWZjZTBiMmJkOWEyZTgwYjI1
YjYwMGI4ZjMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NCBAQAorMjAxMi0xMS0wNiAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBD
b21iaW5lIElEQkJhY2tpbmdTdG9yZSBhbmQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29tYmluZSBhYnN0cmFj
dCBpbnRlcmZhY2UgSURCQmFja2luZ1N0b3JlIHdpdGggaXRzIG9ubHkKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24sIElEQkxldmVsREJCYWNraW5nU3RvcmUsIHRvIHJlZHVjZSBjb2RlCisgICAgICAg
IGNvbXBsZXhpdHkuIFRoZSBsZWdhY3kgc3RydWN0dXJlIGV4aXN0ZWQgdG8gc3VwcG9ydCBhIFNR
TExpdGUKKyAgICAgICAgSURCQmFja2luZ1N0b3JlLCBidXQgaXQgaXMgbm8gbG9uZ2VyIHdvcnRo
IHRoZSBjb21wbGV4aXR5IHRvCisgICAgICAgIHN1cHBvcnQgdGhpcyBhYnN0cmFjdGlvbi4KKwor
ICAgICAgICBDaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEpIE1lcmdpbmcgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSBpbnRvIElEQkJhY2tpbmdTdG9yZS4KKworICAgICAgICAyKSBNZXJnZSB0b2dl
dGhlciBJREJCYWNraW5nU3RvcmUncyBpbm5lciBjbGFzc2VzOiBDdXJzb3IsCisgICAgICAgIFRy
YW5zYWN0aW9uLCBhbmQgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGZpZXIgd2l0aCB0aGVpciByZXNw
ZWN0aXZlCisgICAgICAgIHN1YmNsYXNzZXMgaW4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS4KKyAg
ICAgICAgCisgICAgICAgIDMpIFNpbXBsaWZ5aW5nIHRoZSBpbm5lciBUcmFuc2FjdGlvbiBjbGFz
cyB0byBub3QgYmUgcmVmY291bnRlZCBvcgorICAgICAgICB2aXJ0dWFsaXplZCwgdG8gYWxsb3cg
aXQgdG8gYmUgYSBzaW1wbGUgY29uY3JldGUgbWVtYmVyIG9mIGl0cworICAgICAgICBvd25lciwg
SURCQ3Vyc29yQmFja2VuZEltcGwuCisKKyAgICAgICAgNCkgU2hvcnRlbmVkIHRoZSBuYW1lIG9m
IGEgZmV3IGNsYXNzZXMvbWV0aG9kcyAoZS5nLgorICAgICAgICBPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIganVzdCBiZWNhbWUgUmVjb3JkSWRlbnRpZmllciBhbmQKKyAgICAgICAgZ2V0T2Jq
ZWN0U3RvcmVSZWNvcmQgYmVjYW1lIGdldFJlY29yZCwgdG8gbmFtZSBhIGZldykKKworICAgICAg
ICA1KSBSZW1vdmVkL3NpbXBsaWZpZWQgc29tZSBjYXN0aW5nIGFuZCBjb25zdHJ1Y3RvcnMgd2hl
cmUgaXQgbWFkZQorICAgICAgICB0aGUgY29kZSBzaW1wbGVyLCBvciB3YXMgcmVxdWlyZWQgZm9y
IG1vY2tpbmcuIChzZWUKKyAgICAgICAgSURCRmFrZUJhY2tpbmdTdG9yZSBpbiB0aGUgY2hyb21p
dW0gdGVzdHMpCisKKyAgICAgICAgNikgUmVtb3ZlZCBzb21lIGRlYWQgY29kZSBsaWtlIFJlY29y
ZENhbGxiYWNrL2ZvckVhY2hPYmplY3RTdG9yZVJlY29yZC4KKworICAgICAgICBObyBuZXcgdGVz
dHMgYXMgdGhpcyBpcyBwdXJlbHkgYSByZWZhY3Rvci4KKworICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVjb3JkSW50ZXJuYWxFcnJvcik6CisgICAgICAg
IChXZWJDb3JlOjpnZXRCb29sKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEJvb2wpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0SW50KToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEludCk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRWYXJJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cHV0VmFySW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpwdXRTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6cHV0SURCS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpj
b21wYXJlS2V5cyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlSW5kZXhLZXlzKToKKyAgICAg
ICAgKENvbXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGFyYXRvcjo6Y29tcGFyZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wYXJhdG9yOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzU2NoZW1hS25vd24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0VXBNZXRhZGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRNYXhPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6fklEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRE
YXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0SURC
RGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpnZXROZXdEYXRhYmFzZUlkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRh
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFi
YXNlSW50VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnVwZGF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldE1heE9iamVjdFN0b3JlSWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmdldE5ld1ZlcnNpb25OdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0
c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tJbmRleEFuZE1ldGFEYXRh
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRNYXhJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnB1
dEluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kR3JlYXRlc3RLZXlM
ZXNzVGhhbk9yRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxl
dGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6dmVyc2lvbkV4aXN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpmaXJzdFNlZWspOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmFkdmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmhhdmVFbnRlcmVkUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmlzUGFzdEJvdW5k
cyk6CisgICAgICAgIChPYmplY3RTdG9yZUtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjbG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpPYmpl
Y3RTdG9yZUtleUN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0
b3JlS2V5Q3Vyc29ySW1wbDo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cpOgorICAgICAg
ICAoT2JqZWN0U3RvcmVDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3Jl
Q3Vyc29ySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlQ3Vyc29y
SW1wbDo6Y2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjp2
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6Ok9iamVjdFN0
b3JlQ3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6
OmxvYWRDdXJyZW50Um93KToKKyAgICAgICAgKEluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmRleEtleUN1cnNvckltcGw6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5
Q3Vyc29ySW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBs
OjpwcmltYXJ5S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6cmVj
b3JkSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6Oklu
ZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6
OmxvYWRDdXJyZW50Um93KToKKyAgICAgICAgKEluZGV4Q3Vyc29ySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRl
eEN1cnNvckltcGw6OmNsb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6
dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpwcmltYXJ5S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6cmVjb3JkSWRlbnRpZmllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OkluZGV4Q3Vyc29ySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKyAgICAgICAg
KFdlYkNvcmU6Om9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpp
bmRleEN1cnNvck9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpv
cGVuT2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
OjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVj
b3JkSWRlbnRpZmllcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllcjo6flJlY29yZElkZW50aWZpZXIpOgorICAgICAgICAoUmVjb3Jk
SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElk
ZW50aWZpZXI6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpS
ZWNvcmRJZGVudGlmaWVyOjpwcmltYXJ5S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6c2V0UHJpbWFyeUtleSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OnZlcnNpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpzZXRWZXJzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6
UmVjb3JkSWRlbnRpZmllcik6CisgICAgICAgIChUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KToKKyAgICAgICAgKEN1cnNvck9wdGlvbnMpOgorICAgICAgICAoQ3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6fkN1cnNvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yQmFja2VuZEltcGw6OmNsb3NlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tl
bmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2Vu
ZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5k
SW1wbDo6Z2V0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1w
bDo6Z2V0S2V5SW50ZXJuYWwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUlu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNv
dW50SW50ZXJuYWwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisKIDIwMTItMTEtMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGxheWVyIGJvcmRlcnMgdG8gY2xlYW5pbmcg
YXBwZWFyIGFuZCBkaXNhcHBlYXIgb24gc3dpdGNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IGJmOTNjZWMwNDdjMDU0Yzg4M2RmOGQyNGRkMzViMDQyZjI5Y2M4MGIuLmE5YzJlZmUy
ZDczNjU3ZWEzMjBmYjVmZTA1YmVjMmZlZDRjMzcyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMTEtMDYgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogQ29tYmluZSBJREJCYWNraW5nU3Rv
cmUgYW5kIElEQkxldmVsREJCYWNraW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTQxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBJREJGYWtlQmFja2luZ1N0b3JlIHRvIGFjY291
bnQgZm9yIG5ldyBtZXRob2QgbmFtZXMgYW5kCisgICAgICAgIGNvbnN0cnVjdG9yIHNpZ25hdHVy
ZXMuCisKKyAgICAgICAgKiB0ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisKIDIwMTItMTEt
MDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4
IGxheWVyIGJvcmRlcnMgdG8gY2xlYW5pbmcgYXBwZWFyIGFuZCBkaXNhcHBlYXIgb24gc3dpdGNo
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMjE0ODAzOTk4NDM0MTVkMzhkNmQ1ZmIzY2I3YzM2ZTUy
NThmOWNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDE3ODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCisKKworI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIFVTRShMRVZFTERCKQorCisjaW5jbHVkZSAiRmlsZVN5
c3RlbS5oIgorI2luY2x1ZGUgIkhpc3RvZ3JhbVN1cHBvcnQuaCIKKyNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEltcGwuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJLZXlQ
YXRoLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQ29k
aW5nLmgiCisjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgi
CisjaW5jbHVkZSAiTGV2ZWxEQkNvbXBhcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCRGF0YWJh
c2UuaCIKKyNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJMZXZlbERCU2xp
Y2UuaCIKKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7CisKK2NvbnN0IGludDY0
X3QgS2V5R2VuZXJhdG9ySW5pdGlhbE51bWJlciA9IDE7IC8vIEZyb20gdGhlIEluZGV4ZWREQiBz
cGVjaWZpY2F0aW9uLgorCitlbnVtIElEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHsK
KyAgICBJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IsCisgICAgSURCQmFja2luZ1N0b3JlV3JpdGVF
cnJvciwKKyAgICBJREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yLAorICAgIElEQkJhY2tp
bmdTdG9yZUludGVybmFsRXJyb3JNYXgsCit9Oworc3RhdGljIGlubGluZSB2b2lkIHJlY29yZElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgdHlwZSkKK3sKKyAg
ICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVk
REIuQmFja2luZ1N0b3JlLkludGVybmFsRXJyb3IiLCB0eXBlLCBJREJCYWNraW5nU3RvcmVJbnRl
cm5hbEVycm9yTWF4KTsKK30KKworLy8gVXNlIHRvIHNpZ25hbCBjb25kaXRpb25zIHRoYXQgdXN1
YWxseSBpbmRpY2F0ZSBkZXZlbG9wZXIgZXJyb3IsIGJ1dCBjb3VsZCBiZSBjYXVzZWQgYnkgZGF0
YSBjb3JydXB0aW9uLgorLy8gQSBtYWNybyBpcyB1c2VkIGluc3RlYWQgb2YgYW4gaW5saW5lIGZ1
bmN0aW9uIHNvIHRoYXQgdGhlIGFzc2VydCBhbmQgbG9nIHJlcG9ydCB0aGUgbGluZSBudW1iZXIu
CisjZGVmaW5lIEludGVybmFsRXJyb3IodHlwZSkgXAorICAgIGRvIHsgXAorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgXAorICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWRE
QiBFcnJvcjogJXMiLCAjdHlwZSk7IFwKKyAgICAgICAgcmVjb3JkSW50ZXJuYWxFcnJvcih0eXBl
KTsgXAorICAgIH0gd2hpbGUgKDApCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rp
b24+CitzdGF0aWMgYm9vbCBnZXRCb29sKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYga2V5LCBib29sJiBmb3VuZEJvb2wpCit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3Vs
dDsKKyAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmb3VuZEJvb2wgPSBkZWNvZGVCb29sKHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5k
KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgREJPclRyYW5z
YWN0aW9uPgorc3RhdGljIGJvb2wgcHV0Qm9vbChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGtleSwgYm9vbCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gZGItPnB1dChrZXks
IGVuY29kZUJvb2wodmFsdWUpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2Fj
dGlvbj4KK3N0YXRpYyBib29sIGdldEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGtleSwgaW50NjRfdCYgZm91bmRJbnQpCit7CisgICAgVmVjdG9yPGNoYXI+IHJl
c3VsdDsKKyAgICBpZiAoIWRiLT5nZXQoa2V5LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBmb3VuZEludCA9IGRlY29kZUludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVu
ZCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFu
c2FjdGlvbj4KK3N0YXRpYyBib29sIHB1dEludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGtleSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUgPj0g
MCk7CisgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBkYi0+cHV0KGtleSwgZW5jb2RlSW50KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBEQk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBnZXRWYXJJbnQoREJPclRyYW5zYWN0aW9u
KiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGludDY0X3QmIGZvdW5kSW50KQoreworICAg
IFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgaWYgKCFkYi0+Z2V0KGtleSwgcmVzdWx0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGRlY29kZVZhckludChyZXN1bHQuYmVn
aW4oKSwgcmVzdWx0LmVuZCgpLCBmb3VuZEludCkgPT0gcmVzdWx0LmVuZCgpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgorc3RhdGljIGJvb2wgcHV0VmFySW50KERC
T3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90IHZhbHVl
KQoreworICAgIHJldHVybiBkYi0+cHV0KGtleSwgZW5jb2RlVmFySW50KHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBnZXRTdHJp
bmcoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIFN0cmluZyYg
Zm91bmRTdHJpbmcpCit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIWRiLT5n
ZXQoa2V5LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZFN0cmlu
ZyA9IGRlY29kZVN0cmluZyhyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KK3N0YXRp
YyBib29sIHB1dFN0cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4g
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICghZGItPnB1dChrZXksIGVuY29k
ZVN0cmluZyh2YWx1ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgYm9vbCBw
dXRJREJLZXlQYXRoKERCT3JUcmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXks
IGNvbnN0IElEQktleVBhdGgmIHZhbHVlKQoreworICAgIGlmICghZGItPnB1dChrZXksIGVuY29k
ZUlEQktleVBhdGgodmFsdWUpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVLZXlzKGNvbnN0IExldmVsREJTbGljZSYgYSwg
Y29uc3QgTGV2ZWxEQlNsaWNlJiBiKQoreworICAgIHJldHVybiBjb21wYXJlKGEsIGIpOworfQor
CitzdGF0aWMgaW50IGNvbXBhcmVJbmRleEtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25z
dCBMZXZlbERCU2xpY2UmIGIpCit7CisgICAgcmV0dXJuIGNvbXBhcmUoYSwgYiwgdHJ1ZSk7Cit9
CisKK2NsYXNzIENvbXBhcmF0b3IgOiBwdWJsaWMgTGV2ZWxEQkNvbXBhcmF0b3IgeworcHVibGlj
OgorICAgIHZpcnR1YWwgaW50IGNvbXBhcmUoY29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBM
ZXZlbERCU2xpY2UmIGIpIGNvbnN0IHsgcmV0dXJuIElEQkxldmVsREJDb2Rpbmc6OmNvbXBhcmUo
YSwgYik7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiAi
aWRiX2NtcDEiOyB9Cit9OworCitjb25zdCBpbnQ2NF90IGxhdGVzdFNjaGVtYVZlcnNpb24gPSAx
Oworc3RhdGljIGJvb2wgaXNTY2hlbWFLbm93bihMZXZlbERCRGF0YWJhc2UqIGRiKQoreworICAg
IGludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDA7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG1ldGFE
YXRhS2V5ID0gU2NoZW1hVmVyc2lvbktleTo6ZW5jb2RlKCk7CisgICAgaWYgKCFnZXRJbnQoZGIs
IG1ldGFEYXRhS2V5LCBzY2hlbWFWZXJzaW9uKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIHNjaGVtYVZlcnNpb24gPD0gbGF0ZXN0U2NoZW1hVmVyc2lvbjsKK30KKworc3RhdGlj
IGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmIG9y
aWdpbikKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWV0YURhdGFLZXkgPSBTY2hlbWFWZXJz
aW9uS2V5OjplbmNvZGUoKTsKKworICAgIGludDY0X3Qgc2NoZW1hVmVyc2lvbiA9IDA7CisgICAg
aWYgKCFnZXRJbnQoZGIsIG1ldGFEYXRhS2V5LCBzY2hlbWFWZXJzaW9uKSkgeworICAgICAgICBz
Y2hlbWFWZXJzaW9uID0gbGF0ZXN0U2NoZW1hVmVyc2lvbjsKKyAgICAgICAgaWYgKCFwdXRJbnQo
ZGIsIG1ldGFEYXRhS2V5LCBsYXRlc3RTY2hlbWFWZXJzaW9uKSkgeworICAgICAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChzY2hlbWFW
ZXJzaW9uIDw9IGxhdGVzdFNjaGVtYVZlcnNpb24pOworICAgICAgICBpZiAoIXNjaGVtYVZlcnNp
b24pIHsKKyAgICAgICAgICAgIHNjaGVtYVZlcnNpb24gPSBsYXRlc3RTY2hlbWFWZXJzaW9uOwor
ICAgICAgICAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBMZXZl
bERCVHJhbnNhY3Rpb246OmNyZWF0ZShkYik7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+cHV0
KG1ldGFEYXRhS2V5LCBlbmNvZGVJbnQoc2NoZW1hVmVyc2lvbikpOworCisgICAgICAgICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktl
eUZvck9yaWdpbihvcmlnaW4pOworICAgICAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BL
ZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JPcmlnaW4ob3JpZ2luKTsKKyAg
ICAgICAgICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9y
KCk7CisgICAgICAgICAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAm
JiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgeworICAg
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKKyAgICAgICAgICAgICAgICBib29sIG9r
ID0gdHJhbnNhY3Rpb24tPmdldChpdC0+a2V5KCksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW9rKSB7CisgICAgICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0
b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgZGF0YWJhc2VJZCA9IGRlY29kZUludCh2
YWx1ZS5iZWdpbigpLCB2YWx1ZS5lbmQoKSk7CisgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IGludFZlcnNpb25LZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pOworICAgICAgICAgICAgICAgIHRy
YW5zYWN0aW9uLT5wdXQoaW50VmVyc2lvbktleSwgZW5jb2RlVmFySW50KElEQkRhdGFiYXNlTWV0
YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uKSk7CisgICAgICAgICAgICAgICAgb2sgPSB0cmFuc2Fj
dGlvbi0+Z2V0KGl0LT5rZXkoKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghb2spIHsK
KyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJy
b3IpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCBvayA9IHRyYW5zYWN0aW9uLT5jb21t
aXQoKTsKKyAgICAgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVChzY2hl
bWFWZXJzaW9uID09IGxhdGVzdFNjaGVtYVZlcnNpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+CitzdGF0aWMgaW50NjRfdCBn
ZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIsIGludDY0X3QgZGF0YWJhc2VJ
ZCkKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFi
YXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpN
YXhPYmplY3RTdG9yZUlkKTsKKyAgICByZXR1cm4gZ2V0TWF4T2JqZWN0U3RvcmVJZChkYiwgbWF4
T2JqZWN0U3RvcmVJZEtleSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rp
b24+CitzdGF0aWMgaW50NjRfdCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiog
ZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYgbWF4T2JqZWN0U3RvcmVJZEtleSkKK3sKKyAgICBpbnQ2
NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsKKyAgICBpZiAoIWdldEludChkYiwgbWF4T2JqZWN0
U3RvcmVJZEtleSwgbWF4T2JqZWN0U3RvcmVJZCkpCisgICAgICAgIG1heE9iamVjdFN0b3JlSWQg
PSAwOworCisgICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0gMCk7CisgICAgcmV0dXJuIG1h
eE9iamVjdFN0b3JlSWQ7Cit9CisKK0lEQkJhY2tpbmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBQ
YXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKKyAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQorICAgICwgbV9kYihkYikKK3sKKyAgICBt
X2ZhY3RvcnktPmFkZElEQkJhY2tpbmdTdG9yZShpZGVudGlmaWVyLCB0aGlzKTsKK30KKworSURC
QmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3RvcmUoKQoreworfQorCitJREJCYWNraW5nU3RvcmU6
On5JREJCYWNraW5nU3RvcmUoKQoreworICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCQmFja2luZ1N0
b3JlKG1faWRlbnRpZmllcik7CisKKyAgICAvLyBtX2RiJ3MgZGVzdHJ1Y3RvciB1c2VzIG1fY29t
cGFyYXRvci4gVGhlIG9yZGVyIG9mIGRlc3RydWN0aW9uIGlzIGltcG9ydGFudC4KKyAgICBtX2Ri
LmNsZWFyKCk7CisgICAgbV9jb21wYXJhdG9yLmNsZWFyKCk7Cit9CisKK2VudW0gSURCQmFja2lu
Z1N0b3JlT3BlblJlc3VsdCB7CisgICAgSURCQmFja2luZ1N0b3JlT3Blbk1lbW9yeSwKKyAgICBJ
REJCYWNraW5nU3RvcmVPcGVuU3VjY2VzcywKKyAgICBJREJCYWNraW5nU3RvcmVPcGVuRmFpbGVk
RGlyZWN0b3J5LAorICAgIElEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRVbmtub3duU2NoZW1hLAor
ICAgIElEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwRGVzdHJveUZhaWxlZCwKKyAgICBJREJCYWNr
aW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlbkZhaWxlZCwKKyAgICBJREJCYWNraW5nU3RvcmVPcGVu
Q2xlYW51cFJlb3BlblN1Y2Nlc3MsCisgICAgSURCQmFja2luZ1N0b3JlT3Blbk1heCwKK307CisK
K1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJp
dHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBjb25z
dCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3Rvcnkp
Cit7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW4iKTsKKyAgICBTdHJpbmcg
cGF0aEJhc2UgPSBwYXRoQmFzZUFyZzsKKworICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4g
Y29tcGFyYXRvciA9IGFkb3B0UHRyKG5ldyBDb21wYXJhdG9yKCkpOworICAgIE93blB0cjxMZXZl
bERCRGF0YWJhc2U+IGRiOworCisgICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkgeworICAgICAg
ICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVk
REIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJCYWNraW5nU3RvcmVPcGVuTWVtb3J5LCBJ
REJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgZGIgPSBMZXZlbERCRGF0YWJhc2U6Om9w
ZW5Jbk1lbW9yeShjb21wYXJhdG9yLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
IW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigi
VW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAlcyIsIHBhdGhCYXNlLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51
bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURC
QmFja2luZ1N0b3JlT3BlbkZhaWxlZERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3JlT3Blbk1heCk7
CisgICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChw
YXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVk
ZGIubGV2ZWxkYiIpOworCisgICAgICAgIGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgs
IGNvbXBhcmF0b3IuZ2V0KCkpOworICAgICAgICBpZiAoZGIgJiYgIWlzU2NoZW1hS25vd24oZGIu
Z2V0KCkpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3Jl
IGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRpbmcgaXQgYXMgZmFpbHVyZSB0byBvcGVuIik7Cisg
ICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29y
ZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJCYWNraW5nU3RvcmVPcGVu
RmFpbGVkVW5rbm93blNjaGVtYSwgSURCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgICAg
ICBkYi5yZWxlYXNlKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGIpCisgICAgICAgICAg
ICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVk
REIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJCYWNraW5nU3RvcmVPcGVuU3VjY2Vzcywg
SURCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBvcGVuIGZhaWxlZCwgYXR0ZW1wdGluZyBj
bGVhbnVwIik7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBMZXZlbERCRGF0YWJhc2U6OmRl
c3Ryb3kocGF0aCk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGNsZWFudXAgZmFpbGVkIik7Cisg
ICAgICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldl
YkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCQmFja2luZ1N0b3Jl
T3BlbkNsZWFudXBEZXN0cm95RmFpbGVkLCBJREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUg
Y2xlYW51cCBzdWNjZWVkZWQsIHJlb3BlbmluZyIpOworICAgICAgICAgICAgZGIgPSBMZXZlbERC
RGF0YWJhc2U6Om9wZW4ocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7CisgICAgICAgICAgICBpZiAo
IWRiKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9y
ZSByZW9wZW4gYWZ0ZXIgcmVjb3ZlcnkgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgSGlzdG9n
cmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tp
bmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5GYWls
ZWQsIElEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAgICAgICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEhp
c3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5C
YWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwUmVvcGVu
U3VjY2VzcywgSURCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIWRiKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7
CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIGNvbXBhcmF0b3IgbmFtZSBjaGFuZ2VzLgorCisgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVmKG5ldyBJREJCYWNr
aW5nU3RvcmUoZmlsZUlkZW50aWZpZXIsIGZhY3RvcnksIGRiLnJlbGVhc2UoKSkpKTsKKyAgICBi
YWNraW5nU3RvcmUtPm1fY29tcGFyYXRvciA9IGNvbXBhcmF0b3IucmVsZWFzZSgpOworCisgICAg
aWYgKCFzZXRVcE1ldGFkYXRhKGJhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSwgZmlsZUlkZW50aWZp
ZXIpKQorICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CisKKyAg
ICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKK30KKworVmVjdG9yPFN0cmluZz4gSURC
QmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBm
b3VuZE5hbWVzOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IERhdGFiYXNlTmFt
ZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7CisgICAgY29uc3QgVmVj
dG9yPGNoYXI+IHN0b3BLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JPcmln
aW4obV9pZGVudGlmaWVyKTsKKworICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7CisK
KyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7
CisgICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtl
eXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKKyAgICAgICAgY29uc3Qg
Y2hhciogcCA9IGl0LT5rZXkoKS5iZWdpbigpOworICAgICAgICBjb25zdCBjaGFyKiBsaW1pdCA9
IGl0LT5rZXkoKS5lbmQoKTsKKworICAgICAgICBEYXRhYmFzZU5hbWVLZXkgZGF0YWJhc2VOYW1l
S2V5OworICAgICAgICBwID0gRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRh
YmFzZU5hbWVLZXkpOworICAgICAgICBBU1NFUlQocCk7CisKKyAgICAgICAgZm91bmROYW1lcy5h
cHBlbmQoZGF0YWJhc2VOYW1lS2V5LmRhdGFiYXNlTmFtZSgpKTsKKyAgICB9CisgICAgcmV0dXJu
IGZvdW5kTmFtZXM7Cit9CisKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSogbWV0YWRhdGEp
Cit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2Rl
KG1faWRlbnRpZmllciwgbmFtZSk7CisKKyAgICBib29sIG9rID0gZ2V0SW50KG1fZGIuZ2V0KCks
IGtleSwgbWV0YWRhdGEtPmlkKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5Ojpl
bmNvZGUobWV0YWRhdGEtPmlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIG1l
dGFkYXRhLT52ZXJzaW9uKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3Io
SURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIG9rID0gZ2V0VmFySW50KG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVu
Y29kZShtZXRhZGF0YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwg
bWV0YWRhdGEtPmludFZlcnNpb24pOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChtZXRhZGF0YS0+aW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRh
OjpEZWZhdWx0SW50VmVyc2lvbikKKyAgICAgICAgbWV0YWRhdGEtPmludFZlcnNpb24gPSBJREJE
YXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247CisKKyAgICBtZXRhZGF0YS0+bWF4T2JqZWN0
U3RvcmVJZCA9IGdldE1heE9iamVjdFN0b3JlSWQobV9kYi5nZXQoKSwgbWV0YWRhdGEtPmlkKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlk
KExldmVsREJEYXRhYmFzZSogZGIpCit7CisgICAgaW50NjRfdCBtYXhEYXRhYmFzZUlkID0gLTE7
CisgICAgaWYgKCFnZXRJbnQoZGIsIE1heERhdGFiYXNlSWRLZXk6OmVuY29kZSgpLCBtYXhEYXRh
YmFzZUlkKSkKKyAgICAgICAgbWF4RGF0YWJhc2VJZCA9IDA7CisKKyAgICBBU1NFUlQobWF4RGF0
YWJhc2VJZCA+PSAwKTsKKworICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IG1heERhdGFiYXNlSWQg
KyAxOworICAgIGlmICghcHV0SW50KGRiLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgZGF0
YWJhc2VJZCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBkYXRhYmFzZUlkOwor
fQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9u
LCBpbnQ2NF90JiByb3dJZCkKK3sKKyAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5n
ZXQoKSk7CisgICAgaWYgKHJvd0lkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRp
ZmllciwgbmFtZSk7CisgICAgaWYgKCFwdXRJbnQobV9kYi5nZXQoKSwga2V5LCByb3dJZCkpIHsK
KyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXB1dFN0cmluZyhtX2RiLmdldCgpLCBE
YXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVz
ZXJWZXJzaW9uKSwgdmVyc2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5n
U3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
aW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCisgICAgICAg
IGludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbjsKKyAg
ICBpZiAoIXB1dFZhckludChtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUo
cm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwgaW50VmVyc2lvbikp
IHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJ
REJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRW
ZXJzaW9uKQoreworICAgIGlmIChpbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5v
SW50VmVyc2lvbikKKyAgICAgICAgaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRl
ZmF1bHRJbnRWZXJzaW9uOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaW50VmVyc2lvbiA+PSAw
LCAiaW50VmVyc2lvbiB3YXMgJWxsZCIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oaW50VmVyc2lv
bikpOworICAgIGlmICghcHV0VmFySW50KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246Omxl
dmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5Ojpl
bmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwgaW50VmVy
c2lvbikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9y
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbikKK3sKKyAgICBpZiAoIXB1dFN0cmluZyhJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lv
biksIHZlcnNpb24pKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3Jp
dGVFcnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBl
bmQpCit7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3Jl
YXRlSXRlcmF0b3IoKTsKKyAgICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsgaXQtPmlzVmFsaWQoKSAm
JiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4dCgpKSB7CisgICAgICAg
IGlmICghdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKSB7CisgICAgICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9v
bCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UiKTsKKyAgICBP
d25QdHI8TGV2ZWxEQldyaXRlT25seVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IExldmVsREJX
cml0ZU9ubHlUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fZGIuZ2V0KCkpOworCisgICAgSURCRGF0YWJh
c2VNZXRhZGF0YSBtZXRhZGF0YTsKKyAgICBpZiAoIWdldElEQkRhdGFiYXNlTWV0YURhdGEobmFt
ZSwgJm1ldGFkYXRhKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUobWV0YWRhdGEuaWQs
IERhdGFiYXNlTWV0YURhdGFLZXk6Ok9yaWdpbk5hbWUpOworICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdG9wS2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRhLmlkICsgMSwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6T3JpZ2luTmFtZSk7CisgICAgT3duUHRyPExldmVsREJJdGVy
YXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoc3Rh
cnRLZXkpOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkg
PCAwOyBpdC0+bmV4dCgpKQorICAgICAgICB0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSk7
CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUo
bV9pZGVudGlmaWVyLCBuYW1lKTsKKyAgICB0cmFuc2FjdGlvbi0+cmVtb3ZlKGtleSk7CisKKyAg
ICByZXR1cm4gdHJhbnNhY3Rpb24tPmNvbW1pdCgpOworfQorCitzdGF0aWMgYm9vbCBjaGVja09i
amVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0
IFZlY3RvcjxjaGFyPiYgc3RvcEtleSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1l
dGFEYXRhVHlwZSkKK3sKKyAgICBpZiAoIWl0LT5pc1ZhbGlkKCkgfHwgY29tcGFyZUtleXMoaXQt
PmtleSgpLCBzdG9wS2V5KSA+PSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5IG1ldGFEYXRhS2V5OworICAgIGNvbnN0IGNoYXIqIHAgPSBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUoaXQtPmtleSgpLmJlZ2luKCksIGl0LT5rZXkoKS5l
bmQoKSwgJm1ldGFEYXRhS2V5KTsKKyAgICBBU1NFUlRfVU5VU0VEKHAsIHApOworICAgIGlmICht
ZXRhRGF0YUtleS5vYmplY3RTdG9yZUlkKCkgIT0gb2JqZWN0U3RvcmVJZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSAhPSBtZXRhRGF0
YVR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworVmVj
dG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3Rv
cmVzKGludDY0X3QgZGF0YWJhc2VJZCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9y
ZTo6Z2V0T2JqZWN0U3RvcmVzIik7CisgICAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+
IG9iamVjdFN0b3JlczsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwgMCk7CisgICAgY29uc3QgVmVj
dG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXko
ZGF0YWJhc2VJZCk7CisKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNy
ZWF0ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNlZWsoc3RhcnRLZXkpOworICAgIHdoaWxlIChpdC0+
aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwKSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgY29uc3QgY2hh
ciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7CisKKyAgICAgICAgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleSBtZXRhRGF0YUtleTsKKyAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRl
Y29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKKyAgICAgICAgQVNTRVJUKHApOworICAgICAg
ICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6TmFtZSkgeworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFk
RXJyb3IpOworICAgICAgICAgICAgLy8gUG9zc2libGUgc3RhbGUgbWV0YWRhdGEsIGJ1dCBkb24n
dCBmYWlsIHRoZSBsb2FkLgorICAgICAgICAgICAgaXQtPm5leHQoKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbWV0
YURhdGFLZXkub2JqZWN0U3RvcmVJZCgpOworCisgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIGJ5
IGRpcmVjdCBrZXkgbG9va3VwIHJhdGhlciB0aGFuIGl0ZXJhdGlvbiwgdG8gc2ltcGxpZnkuCisg
ICAgICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWUgPSBkZWNvZGVTdHJpbmcoaXQtPnZhbHVlKCku
YmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOworCisgICAgICAgIGl0LT5uZXh0KCk7CisgICAg
ICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtl
eSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5UGF0aCkpIHsKKyAg
ICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIElEQktleVBhdGgga2V5UGF0aCA9IGRl
Y29kZUlEQktleVBhdGgoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwor
CisgICAgICAgIGl0LT5uZXh0KCk7CisgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1l
dGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6QXV0b0luY3JlbWVudCkpIHsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3Io
SURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IGRlY29kZUJvb2woaXQtPnZhbHVlKCkuYmVn
aW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOworCisgICAgICAgIGl0LT5uZXh0KCk7IC8vIElzIGV2
aWNhdGJsZS4KKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0
LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpF
dmljdGFibGUpKSB7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJl
YWRFcnJvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGl0LT5u
ZXh0KCk7IC8vIExhc3QgdmVyc2lvbi4KKyAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5k
TWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjpMYXN0VmVyc2lvbikpIHsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3Io
SURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgaXQtPm5leHQoKTsgLy8gTWF4aW11bSBpbmRleCBpZCBhbGxvY2F0ZWQuCisg
ICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3Rv
cEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TWF4SW5kZXhJZCkp
IHsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGludDY0X3QgbWF4SW5kZXhJ
ZCA9IGRlY29kZUludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisK
KyAgICAgICAgaXQtPm5leHQoKTsgLy8gW29wdGlvbmFsXSBoYXMga2V5IHBhdGggKGlzIG5vdCBu
dWxsKQorICAgICAgICBpZiAoY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQo
KSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6SGFzS2V5
UGF0aCkpIHsKKyAgICAgICAgICAgIGJvb2wgaGFzS2V5UGF0aCA9IGRlY29kZUJvb2woaXQtPnZh
bHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOworICAgICAgICAgICAgLy8gVGhpcyBj
aGVjayBhY2NvdW50cyBmb3IgdHdvIGxheWVycyBvZiBsZWdhY3kgY29kaW5nOgorICAgICAgICAg
ICAgLy8gKDEpIEluaXRpYWxseSwgaGFzS2V5UGF0aCB3YXMgYWRkZWQgdG8gZGlzdGluZ3Vpc2gg
bnVsbCB2cy4gc3RyaW5nLgorICAgICAgICAgICAgLy8gKDIpIExhdGVyLCBudWxsIHZzLiBzdHJp
bmcgdnMuIGFycmF5IHdhcyBzdG9yZWQgaW4gdGhlIGtleVBhdGggaXRzZWxmLgorICAgICAgICAg
ICAgLy8gU28gdGhpcyBjaGVjayBpcyBvbmx5IHJlbGV2YW50IGZvciBzdHJpbmctdHlwZSBrZXlQ
YXRocy4KKyAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAoa2V5UGF0aC50eXBlKCkgPT0g
SURCS2V5UGF0aDo6U3RyaW5nVHlwZSAmJiAha2V5UGF0aC5zdHJpbmcoKS5pc0VtcHR5KCkpKSB7
CisgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3Ip
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFoYXNLZXlQYXRoKQorICAgICAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKCk7Cisg
ICAgICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBrZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gLTE7CisgICAgICAgIGlmIChjaGVja09iamVjdFN0b3Jl
QW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKSkgeworICAgICAgICAg
ICAga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciA9IGRlY29kZUludChpdC0+dmFsdWUoKS5iZWdp
bigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogUmV0dXJuIGtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIsIGNhY2hlIGluIG9iamVjdCBzdG9yZSwgYW5kIHdyaXRl
IGxhemlseSB0byBiYWNraW5nIHN0b3JlLgorICAgICAgICAgICAgLy8gRm9yIG5vdywganVzdCBh
c3NlcnQgdGhhdCBpZiBpdCB3YXMgd3JpdHRlbiBpdCB3YXMgdmFsaWQuCisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIsIGtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIgPj0gS2V5R2VuZXJhdG9ySW5pdGlhbE51bWJlcik7CisgICAgICAgICAgICBpdC0+
bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgb2JqZWN0U3RvcmVzLmFwcGVuZChJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhKG9iamVjdFN0b3JlTmFtZSwgb2JqZWN0U3RvcmVJZCwga2V5UGF0aCwg
YXV0b0luY3JlbWVudCwgbWF4SW5kZXhJZCkpOworICAgIH0KKyAgICByZXR1cm4gb2JqZWN0U3Rv
cmVzOworfQorCitzdGF0aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBtYXhPYmplY3RTdG9yZUlkS2V5ID0gRGF0
YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6
Ok1heE9iamVjdFN0b3JlSWQpOworICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9IGdldE1h
eE9iamVjdFN0b3JlSWQodHJhbnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXkpOworCisgICAg
aWYgKG9iamVjdFN0b3JlSWQgPD0gbWF4T2JqZWN0U3RvcmVJZCkgeworICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGlmICghcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9y
ZUlkS2V5LCBvYmplY3RTdG9yZUlkKSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tp
bmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKKyAgICBMZXZlbERCVHJhbnNh
Y3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIGlmICghc2V0TWF4T2Jq
ZWN0U3RvcmVJZChsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtl
eSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpOYW1lKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hh
cj4ga2V5UGF0aEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlQYXRoKTsKKyAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gYXV0b0luY3JlbWVudEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjpBdXRvSW5jcmVtZW50KTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXZpY3RhYmxlS2V5
ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OkV2aWN0YWJsZSk7CisgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Okxhc3RWZXJz
aW9uKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3Jl
TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjpNYXhJbmRleElkKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaGFzS2V5
UGF0aEtleSAgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6SGFzS2V5UGF0aCk7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CisgICAgY29uc3QgVmVj
dG9yPGNoYXI+IG5hbWVzS2V5ID0gT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG5hbWUpOworCisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24s
IG5hbWVLZXksIG5hbWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIG9rID0gcHV0SURCS2V5UGF0aChsZXZlbERCVHJhbnNhY3Rpb24sIGtleVBhdGhLZXks
IGtleVBhdGgpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNr
aW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgYXV0b0luY3JlbWVudEtleSwgYXV0b0lu
Y3JlbWVudCk7CisgICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tp
bmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
b2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBldmljdGFibGVLZXksIGZhbHNlKTsKKyAg
ICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVF
cnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9IHB1dEludChs
ZXZlbERCVHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9uS2V5LCAxKTsKKyAgICBpZiAoIW9rKSB7Cisg
ICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rp
b24sIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKKyAgICBpZiAoIW9rKSB7CisgICAg
ICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9IHB1dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9u
LCBoYXNLZXlQYXRoS2V5LCAha2V5UGF0aC5pc051bGwoKSk7CisgICAgaWYgKCFvaykgeworICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9u
LCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVy
KTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBvayA9IHB1
dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKKyAgICBp
ZiAoIW9rKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
T2JqZWN0U3RvcmUiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOworCisgICAgU3RyaW5nIG9iamVjdFN0b3JlTmFtZTsKKyAgICBnZXRTdHJp
bmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSksIG9i
amVjdFN0b3JlTmFtZSk7CisKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlv
biwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIDApLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCkpKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KKyAg
ICB9CisKKyAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShPYmplY3RTdG9yZU5hbWVzS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lKSk7CisKKyAgICBpZiAoIWRlbGV0
ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGVNYXhLZXko
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURC
QmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9y
dCBlcnJvci4KKyAgICB9CisgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24s
IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAw
KSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQpKSkgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3Ip
OworICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCisgICAgfQorCisgICAg
Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7
Cit9CisKK1N0cmluZyBJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIElEQl9UUkFDRSgiSURCQmFj
a2luZ1N0b3JlOjpnZXRSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJL
ZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBrZXkpOworICAgIFZlY3RvcjxjaGFyPiBkYXRhOworCisgICAgaWYgKCFsZXZlbERCVHJhbnNh
Y3Rpb24tPmdldChsZXZlbGRiS2V5LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgaW50NjRfdCB2ZXJzaW9uOworICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQo
ZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKTsKKyAgICBpZiAoIXApIHsKKyAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgfQorICAgICh2b2lkKSB2ZXJzaW9uOworCisgICAgcmV0dXJuIGRl
Y29kZVN0cmluZyhwLCBkYXRhLmVuZCgpKTsKK30KKworc3RhdGljIGludDY0X3QgZ2V0TmV3VmVy
c2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
bGFzdFZlcnNpb25LZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TGFzdFZlcnNpb24pOwor
CisgICAgaW50NjRfdCBsYXN0VmVyc2lvbiA9IC0xOworICAgIGlmICghZ2V0SW50KHRyYW5zYWN0
aW9uLCBsYXN0VmVyc2lvbktleSwgbGFzdFZlcnNpb24pKQorICAgICAgICBsYXN0VmVyc2lvbiA9
IDA7CisKKyAgICBBU1NFUlQobGFzdFZlcnNpb24gPj0gMCk7CisKKyAgICBpbnQ2NF90IHZlcnNp
b24gPSBsYXN0VmVyc2lvbiArIDE7CisgICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwg
bGFzdFZlcnNpb25LZXksIHZlcnNpb24pOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKKwor
ICAgIEFTU0VSVCh2ZXJzaW9uID4gbGFzdFZlcnNpb24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQg
aG93IHdlIHdhbnQgdG8gaGFuZGxlIHRoZSBvdmVyZmxvdyBzY2VuYXJpby4KKworICAgIHJldHVy
biB2ZXJzaW9uOworfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCit7CisgICAgSURCX1RSQUNF
KCJJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCIpOworICAgIEFTU0VSVChrZXkuaXNWYWxpZCgp
KTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
OworICAgIGludDY0X3QgdmVyc2lvbiA9IGdldE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxEQlRyYW5z
YWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gb2JqZWN0U3RvcmVkYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKKworICAgIFZlY3RvcjxjaGFyPiB2OworICAgIHYu
YXBwZW5kKGVuY29kZVZhckludCh2ZXJzaW9uKSk7CisgICAgdi5hcHBlbmQoZW5jb2RlU3RyaW5n
KHZhbHVlKSk7CisKKyAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+cHV0KG9iamVjdFN0b3Jl
ZGF0YUtleSwgdikpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0
ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKKyAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+cHV0
KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lvbikpKSB7CisgICAgICAgIEludGVybmFs
RXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktl
eShrZXkpKTsKKyAgICByZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgSURCX1RSQUNFKCJJREJCYWNr
aW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFy
dEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNvZGUoKTsK
KyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7CisKKyAgICBkZWxldGVSYW5nZShsZXZlbERC
VHJhbnNhY3Rpb24sIHN0YXJ0S2V5LCBzdG9wS2V5KTsKK30KKwordm9pZCBJREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29y
ZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCit7CisgICAgSURCX1RSQUNFKCJJREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZVJlY29yZCIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxE
QlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5z
YWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0
U3RvcmVEYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgcmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKyAgICBsZXZlbERC
VHJhbnNhY3Rpb24tPnJlbW92ZShvYmplY3RTdG9yZURhdGFLZXkpOworCisgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCByZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAg
IGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5KTsKK30KKworCitpbnQ2
NF90IElEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNh
Y3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIpOworCisgICAgaW50NjRfdCBrZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyID0gLTE7CisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAgICBpZiAobGV2ZWxEQlRyYW5z
YWN0aW9uLT5nZXQoa2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSkpCisgICAgICAg
IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIgPSBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRh
LmVuZCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gUHJldmlvdXNseSwgdGhlIGtleSBnZW5l
cmF0b3Igc3RhdGUgd2FzIG5vdCBzdG9yZWQgZXhwbGljaXRseSBidXQgZGVyaXZlZCBmcm9tIHRo
ZQorICAgICAgICAvLyBtYXhpbXVtIG51bWVyaWMga2V5IHByZXNlbnQgaW4gZXhpc3RpbmcgZGF0
YS4gVGhpcyB2aW9sYXRlcyB0aGUgc3BlYyBhcyB0aGUgZGF0YSBtYXkKKyAgICAgICAgLy8gYmUg
Y2xlYXJlZCBidXQgdGhlIGtleSBnZW5lcmF0b3Igc3RhdGUgbXVzdCBiZSBwcmVzZXJ2ZWQuCisg
ICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIG1pbklEQktleSgpKTsKKyAgICAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7CisKKyAgICAgICAgT3duUHRy
PExldmVsREJJdGVyYXRvcj4gaXQgPSBsZXZlbERCVHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9y
KCk7CisgICAgICAgIGludDY0X3QgbWF4TnVtZXJpY0tleSA9IDA7CisKKyAgICAgICAgZm9yIChp
dC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgp
LCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHAg
PSBpdC0+a2V5KCkuYmVnaW4oKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQt
PmtleSgpLmVuZCgpOworCisgICAgICAgICAgICBPYmplY3RTdG9yZURhdGFLZXkgZGF0YUtleTsK
KyAgICAgICAgICAgIHAgPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJmRh
dGFLZXkpOworICAgICAgICAgICAgQVNTRVJUKHApOworCisgICAgICAgICAgICBpZiAoZGF0YUtl
eS51c2VyS2V5KCktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IG4gPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihkYXRhS2V5LnVzZXJLZXkoKS0+
bnVtYmVyKCkpOworICAgICAgICAgICAgICAgIGlmIChuID4gbWF4TnVtZXJpY0tleSkKKyAgICAg
ICAgICAgICAgICAgICAgbWF4TnVtZXJpY0tleSA9IG47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID0gbWF4TnVtZXJpY0tleSAr
IDE7CisgICAgfQorCisgICAgcmV0dXJuIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXI7Cit9CisK
K2Jvb2wgSURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBj
aGVja0N1cnJlbnQpCit7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rp
b24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKTsKKworICAgIGlmIChjaGVja0N1cnJlbnQpIHsKKyAgICAgICAgaW50NjRf
dCBjdXJyZW50TnVtYmVyID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlv
biwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGlmIChuZXdOdW1iZXIgPD0g
Y3VycmVudE51bWJlcikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOworICAgIGJvb2wgb2sg
PSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5
LCBuZXdOdW1iZXIpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJC
YWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2Jq
ZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwg
UmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKQoreworICAgIElEQl9UUkFD
RSgiSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7CisgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CisgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisKKyAg
ICBpZiAoIWxldmVsREJUcmFuc2FjdGlvbi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQ2NF90IHZlcnNpb247CisgICAgaWYgKCFkZWNvZGVW
YXJJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm91bmRSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29k
ZUlEQktleShrZXkpKTsKKyAgICBmb3VuZFJlY29yZElkZW50aWZpZXItPnNldFZlcnNpb24odmVy
c2lvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrSW5kZXhBbmRN
ZXRhRGF0YUtleShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hhcj4m
IHN0b3BLZXksIGludDY0X3QgaW5kZXhJZCwgdW5zaWduZWQgY2hhciBtZXRhRGF0YVR5cGUpCit7
CisgICAgaWYgKCFpdC0+aXNWYWxpZCgpIHx8IGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtl
eSkgPj0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW5kZXhNZXRhRGF0YUtleSBt
ZXRhRGF0YUtleTsKKyAgICBjb25zdCBjaGFyKiBwID0gSW5kZXhNZXRhRGF0YUtleTo6ZGVjb2Rl
KGl0LT5rZXkoKS5iZWdpbigpLCBpdC0+a2V5KCkuZW5kKCksICZtZXRhRGF0YUtleSk7CisgICAg
QVNTRVJUX1VOVVNFRChwLCBwKTsKKyAgICBpZiAobWV0YURhdGFLZXkuaW5kZXhJZCgpICE9IGlu
ZGV4SWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobWV0YURhdGFLZXkubWV0YURh
dGFUeXBlKCkgIT0gbWV0YURhdGFUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKworVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9y
ZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkK
K3sKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyIpOworICAgIFZl
Y3RvcjxJREJJbmRleE1ldGFkYXRhPiBpbmRleGVzOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBz
dGFydEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCAwLCAwKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEluZGV4TWV0YURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsgMSwgMCwgMCk7CisKKyAg
ICBBU1NFUlQoaW5kZXhlcy5pc0VtcHR5KCkpOworCisgICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGl0LT5zZWVrKHN0YXJ0S2V5KTsK
KyAgICB3aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BL
ZXkpIDwgMCkgeworICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgpLmVuZCgpOworCisgICAgICAgIElu
ZGV4TWV0YURhdGFLZXkgbWV0YURhdGFLZXk7CisgICAgICAgIHAgPSBJbmRleE1ldGFEYXRhS2V5
OjpkZWNvZGUocCwgbGltaXQsICZtZXRhRGF0YUtleSk7CisgICAgICAgIEFTU0VSVChwKTsKKyAg
ICAgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9IEluZGV4TWV0YURhdGFLZXk6
Ok5hbWUpIHsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVy
cm9yKTsKKyAgICAgICAgICAgIC8vIFBvc3NpYmxlIHN0YWxlIG1ldGFkYXRhIGR1ZSB0byBodHRw
Oi8vd2Via2l0Lm9yZy9iLzg1NTU3IGJ1dCBkb24ndCBmYWlsIHRoZSBsb2FkLgorICAgICAgICAg
ICAgaXQtPm5leHQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRklYTUU6IERvIHRoaXMgYnkgZGlyZWN0IGtleSBsb29rdXAgcmF0aGVyIHRoYW4gaXRl
cmF0aW9uLCB0byBzaW1wbGlmeS4KKyAgICAgICAgaW50NjRfdCBpbmRleElkID0gbWV0YURhdGFL
ZXkuaW5kZXhJZCgpOworICAgICAgICBTdHJpbmcgaW5kZXhOYW1lID0gZGVjb2RlU3RyaW5nKGl0
LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKKworICAgICAgICBpdC0+bmV4
dCgpOyAvLyB1bmlxdWUgZmxhZworICAgICAgICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtl
eShpdC5nZXQoKSwgc3RvcEtleSwgaW5kZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6VW5pcXVlKSkg
eworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBpbmRleFVuaXF1ZSA9
IGRlY29kZUJvb2woaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOworCisg
ICAgICAgIGl0LT5uZXh0KCk7IC8vIGtleVBhdGgKKyAgICAgICAgaWYgKCFjaGVja0luZGV4QW5k
TWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6
OktleVBhdGgpKSB7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJl
YWRFcnJvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBJREJLZXlQ
YXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52
YWx1ZSgpLmVuZCgpKTsKKworICAgICAgICBpdC0+bmV4dCgpOyAvLyBbb3B0aW9uYWxdIG11bHRp
RW50cnkgZmxhZworICAgICAgICBib29sIGluZGV4TXVsdGlFbnRyeSA9IGZhbHNlOworICAgICAg
ICBpZiAoY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElk
LCBJbmRleE1ldGFEYXRhS2V5OjpNdWx0aUVudHJ5KSkgeworICAgICAgICAgICAgaW5kZXhNdWx0
aUVudHJ5ID0gZGVjb2RlQm9vbChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQo
KSk7CisgICAgICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXhl
cy5hcHBlbmQoSURCSW5kZXhNZXRhZGF0YShpbmRleE5hbWUsIGluZGV4SWQsIGtleVBhdGgsIGlu
ZGV4VW5pcXVlLCBpbmRleE11bHRpRW50cnkpKTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4ZXM7
Cit9CisKK3N0YXRpYyBib29sIHNldE1heEluZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCkKK3sKKyAgICBpbnQ2NF90IG1heEluZGV4SWQgPSAtMTsKKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpNYXhJ
bmRleElkKTsKKyAgICBpZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4
SW5kZXhJZCkpCisgICAgICAgIG1heEluZGV4SWQgPSBNaW5pbXVtSW5kZXhJZDsKKworICAgIGlm
IChpbmRleElkIDw9IG1heEluZGV4SWQpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNr
aW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBpbmRleElkKSkg
eworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIElE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpCit7CisgICAgSURCX1RSQUNF
KCJJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4Iik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9u
KiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZl
bERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBpZiAoIXNldE1heEluZGV4SWQo
bGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVLZXkg
PSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6TmFtZSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHVu
aXF1ZUtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpVbmlxdWUpOworICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBrZXlQYXRoS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OktleVBhdGgpOworICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBtdWx0aUVudHJ5S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6
Ok11bHRpRW50cnkpOworCisgICAgYm9vbCBvayA9IHB1dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rp
b24sIG5hbWVLZXksIG5hbWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIG9rID0gcHV0Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIHVuaXF1ZUtleSwgaXNV
bmlxdWUpOworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5n
U3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG9r
ID0gcHV0SURCS2V5UGF0aChsZXZlbERCVHJhbnNhY3Rpb24sIGtleVBhdGhLZXksIGtleVBhdGgp
OworICAgIGlmICghb2spIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVX
cml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG9rID0gcHV0
Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIG11bHRpRW50cnlLZXksIGlzTXVsdGlFbnRyeSk7Cisg
ICAgaWYgKCFvaykgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRl
RXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlSW5kZXgiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOworCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4TWV0
YURhdGFTdGFydCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAwKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhNZXRhRGF0
YUVuZCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkKTsKKworICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0
aW9uLCBpbmRleE1ldGFEYXRhU3RhcnQsIGluZGV4TWV0YURhdGFFbmQpKSB7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhU3RhcnQgPSBJbmRleERh
dGFLZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsK
KyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhRW5kID0gSW5kZXhEYXRhS2V5OjplbmNv
ZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CisKKyAgICBpZiAo
IWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgaW5kZXhEYXRhU3RhcnQsIGluZGV4RGF0
YUVuZCkpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1
dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29y
ZElkZW50aWZpZXIpCit7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OnB1dEluZGV4
RGF0YUZvclJlY29yZCIpOworICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQo
aW5kZXhJZCA+PSBNaW5pbXVtSW5kZXhJZCk7CisKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRl
eERhdGFLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCBlbmNvZGVJREJLZXkoa2V5KSwgcmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtl
eSgpKTsKKworICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIGRhdGEuYXBwZW5kKGVuY29kZVZh
ckludChyZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKKyAgICBkYXRhLmFwcGVuZChyZWNv
cmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworCisgICAgcmV0dXJuIGxldmVsREJUcmFuc2Fj
dGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7Cit9CisKK3N0YXRpYyBib29sIGZpbmRHcmVh
dGVzdEtleUxlc3NUaGFuT3JFcXVhbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+JiBmb3VuZEtleSkKK3sKKyAg
ICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRv
cigpOworICAgIGl0LT5zZWVrKHRhcmdldCk7CisKKyAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgaXQtPnNlZWtUb0xhc3QoKTsKKyAgICAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHdoaWxlIChjb21wYXJlSW5k
ZXhLZXlzKGl0LT5rZXkoKSwgdGFyZ2V0KSA+IDApIHsKKyAgICAgICAgaXQtPnByZXYoKTsKKyAg
ICAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGRvIHsKKyAgICAgICAgZm91bmRLZXkuY2xlYXIoKTsKKyAgICAgICAgZm91bmRL
ZXkuYXBwZW5kKGl0LT5rZXkoKS5iZWdpbigpLCBpdC0+a2V5KCkuZW5kKCkgLSBpdC0+a2V5KCku
YmVnaW4oKSk7CisKKyAgICAgICAgLy8gVGhlcmUgY2FuIGJlIHNldmVyYWwgaW5kZXgga2V5cyB0
aGF0IGNvbXBhcmUgZXF1YWwuIFdlIHdhbnQgdGhlIGxhc3Qgb25lLgorICAgICAgICBpdC0+bmV4
dCgpOworICAgIH0gd2hpbGUgKGl0LT5pc1ZhbGlkKCkgJiYgIWNvbXBhcmVJbmRleEtleXMoaXQt
PmtleSgpLCB0YXJnZXQpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIElEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBSZWNvcmRJZGVudGlmaWVy
KikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpc24ndCBuZWVkZWQgc2luY2Ugd2UgaW52YWxpZGF0
ZSBpbmRleCBkYXRhIHZpYSB0aGUgdmVyc2lvbiBudW1iZXIgbWVjaGFuaXNtLgorICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCB2ZXJzaW9uRXhpc3RzKExldmVsREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IHZlcnNpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXkp
Cit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgZW5jb2RlZFByaW1hcnlLZXkpOworICAgIFZlY3Rv
cjxjaGFyPiBkYXRhOworCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+Z2V0KGtleSwgZGF0YSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBkZWNvZGVJbnQoZGF0YS5iZWdpbigp
LCBkYXRhLmVuZCgpKSA9PSB2ZXJzaW9uOworfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6Zmlu
ZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkp
Cit7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4Iik7Cisg
ICAgQVNTRVJUKGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuaXNFbXB0eSgpKTsKKworICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXkpOworICAgIE93blB0cjxMZXZlbERCSXRlcmF0
b3I+IGl0ID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGl0LT5z
ZWVrKGxldmVsZGJLZXkpOworCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoIWl0LT5pc1Zh
bGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChjb21wYXJlSW5k
ZXhLZXlzKGl0LT5rZXkoKSwgbGV2ZWxkYktleSkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGludDY0X3QgdmVyc2lvbjsKKyAgICAgICAgY29uc3QgY2hhciogcCA9
IGRlY29kZVZhckludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVy
c2lvbik7CisgICAgICAgIGlmICghcCkgeworICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJC
YWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYXBwZW5kKHAsIGl0LT52YWx1ZSgp
LmVuZCgpIC0gcCk7CisKKyAgICAgICAgaWYgKCF2ZXJzaW9uRXhpc3RzKGxldmVsREJUcmFuc2Fj
dGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgdmVyc2lvbiwgZm91bmRFbmNvZGVkUHJp
bWFyeUtleSkpIHsKKyAgICAgICAgICAgIC8vIERlbGV0ZSBzdGFsZSBpbmRleCBkYXRhIGVudHJ5
IGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKGl0
LT5rZXkoKSk7CisgICAgICAgICAgICBpdC0+bmV4dCgpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQ
dHI8SURCS2V5PiBJREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkp
Cit7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRl
eCIpOworCisgICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7CisgICAgaWYg
KGZpbmRLZXlJbkluZGV4KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCBrZXksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7CisgICAgICAgIFJlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXk7CisgICAgICAgIGRlY29kZUlEQktleShmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuZW5kKCksIHByaW1hcnlLZXkp
OworICAgICAgICByZXR1cm4gcHJpbWFyeUtleS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGlu
ZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQoreworICAgIElEQl9UUkFD
RSgiSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7CisKKyAgICBWZWN0b3I8Y2hh
cj4gZm91bmRFbmNvZGVkUHJpbWFyeUtleTsKKyAgICBpZiAoIWZpbmRLZXlJbkluZGV4KHRyYW5z
YWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBpbmRleEtleSwgZm91
bmRFbmNvZGVkUHJpbWFyeUtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlY29k
ZUlEQktleShmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmJlZ2luKCksIGZvdW5kRW5jb2RlZFByaW1h
cnlLZXkuZW5kKCksIGZvdW5kUHJpbWFyeUtleSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0lE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3IoY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJz
b3IqIG90aGVyKQorICAgIDogbV90cmFuc2FjdGlvbihvdGhlci0+bV90cmFuc2FjdGlvbikKKyAg
ICAsIG1fY3Vyc29yT3B0aW9ucyhvdGhlci0+bV9jdXJzb3JPcHRpb25zKQorICAgICwgbV9jdXJy
ZW50S2V5KG90aGVyLT5tX2N1cnJlbnRLZXkpCit7CisgICAgaWYgKG90aGVyLT5tX2l0ZXJhdG9y
KSB7CisgICAgICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigp
OworCisgICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRvci0+aXNWYWxpZCgpKSB7CisgICAgICAg
ICAgICBtX2l0ZXJhdG9yLT5zZWVrKG90aGVyLT5tX2l0ZXJhdG9yLT5rZXkoKSk7CisgICAgICAg
ICAgICBBU1NFUlQobV9pdGVyYXRvci0+aXNWYWxpZCgpKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Zmlyc3RTZWVrKCkKK3sKKyAgICBtX2l0
ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKKyAgICBpZiAobV9jdXJz
b3JPcHRpb25zLmZvcndhcmQpCisgICAgICAgIG1faXRlcmF0b3ItPnNlZWsobV9jdXJzb3JPcHRp
b25zLmxvd0tleSk7CisgICAgZWxzZQorICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG1fY3Vyc29y
T3B0aW9ucy5oaWdoS2V5KTsKKworICAgIHJldHVybiBjb250aW51ZUZ1bmN0aW9uKDAsIFJlYWR5
KTsKK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBs
b25nIGNvdW50KQoreworICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgIGlmICghY29udGlu
dWVGdW5jdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Y29udGludWVGdW5j
dGlvbihjb25zdCBJREJLZXkqIGtleSwgSXRlcmF0b3JTdGF0ZSBuZXh0U3RhdGUpCit7CisgICAg
UmVmUHRyPElEQktleT4gcHJldmlvdXNLZXkgPSBtX2N1cnJlbnRLZXk7CisKKyAgICAvLyBXaGVu
IGl0ZXJhdGluZyB3aXRoIFBSRVZfTk9fRFVQTElDQVRFLCBzcGVjIHJlcXVpcmVzIHRoYXQgdGhl
CisgICAgLy8gdmFsdWUgd2UgeWllbGQgZm9yIGVhY2gga2V5IGlzIHRoZSBmaXJzdCBkdXBsaWNh
dGUgaW4gZm9yd2FyZHMKKyAgICAvLyBvcmRlci4KKyAgICBSZWZQdHI8SURCS2V5PiBsYXN0RHVw
bGljYXRlS2V5OworCisgICAgYm9vbCBmb3J3YXJkID0gbV9jdXJzb3JPcHRpb25zLmZvcndhcmQ7
CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChuZXh0U3RhdGUgPT0gU2VlaykgeworICAg
ICAgICAgICAgaWYgKGZvcndhcmQpCisgICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+bmV4dCgp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPnByZXYoKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXh0U3RhdGUgPSBTZWVrOyAvLyBmb3Igc3Vi
c2VxdWVudCBpdGVyYXRpb25zCisKKyAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgICAgIGlmICghZm9yd2FyZCAmJiBsYXN0RHVwbGljYXRlS2V5LmdldCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB3YWxrIGZvcndhcmQgYmVjYXVzZSB3ZSBo
aXQgdGhlIGVuZCBvZgorICAgICAgICAgICAgICAgIC8vIHRoZSBkYXRhLgorICAgICAgICAgICAg
ICAgIGZvcndhcmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXNQYXN0Qm91bmRzKCkpIHsKKyAgICAgICAgICAgIGlmICghZm9yd2FyZCAmJiBsYXN0RHVw
bGljYXRlS2V5LmdldCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB3YWxrIGZv
cndhcmQgYmVjYXVzZSBub3cgd2UncmUgYmV5b25kIHRoZQorICAgICAgICAgICAgICAgIC8vIGJv
dW5kcyBkZWZpbmVkIGJ5IHRoZSBjdXJzb3IuCisgICAgICAgICAgICAgICAgZm9yd2FyZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaGF2ZUVudGVyZWRS
YW5nZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gVGhlIHJvdyBtYXkg
bm90IGxvYWQgYmVjYXVzZSB0aGVyZSdzIGEgc3RhbGUgZW50cnkgaW4gdGhlCisgICAgICAgIC8v
IGluZGV4LiBUaGlzIGlzIG5vdCBmYXRhbC4KKyAgICAgICAgaWYgKCFsb2FkQ3VycmVudFJvdygp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGtleSkgeworICAgICAgICAg
ICAgaWYgKGZvcndhcmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50S2V5LT5pc0xl
c3NUaGFuKGtleSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoa2V5LT5pc0xlc3NUaGFuKG1fY3VycmVudEtl
eS5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy51bmlxdWUpIHsKKworICAg
ICAgICAgICAgaWYgKG1fY3VycmVudEtleS0+aXNFcXVhbChwcmV2aW91c0tleS5nZXQoKSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgYWJsZSB0byB3YWxrIGZvcndh
cmQgYWxsIHRoZSB3YXkKKyAgICAgICAgICAgICAgICAvLyB0byB0aGUgcHJldmlvdXMga2V5Lgor
ICAgICAgICAgICAgICAgIEFTU0VSVCghbGFzdER1cGxpY2F0ZUtleS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZm9y
d2FyZCkgeworICAgICAgICAgICAgICAgIGlmICghbGFzdER1cGxpY2F0ZUtleS5nZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBsYXN0RHVwbGljYXRlS2V5ID0gbV9jdXJyZW50S2V5OworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIHdhbGsgZm9yd2FyZCBiZWNhdXNlIHdlIGhpdCB0aGUgYm91
bmRhcnkKKyAgICAgICAgICAgICAgICAvLyBiZXR3ZWVuIGtleSByYW5nZXMuCisgICAgICAgICAg
ICAgICAgaWYgKCFsYXN0RHVwbGljYXRlS2V5LT5pc0VxdWFsKG1fY3VycmVudEtleS5nZXQoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yd2FyZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIEFTU0VSVCghbGFzdER1cGxpY2F0ZUtleS5nZXQoKSB8fCAoZm9yd2FyZCAmJiBsYXN0RHVw
bGljYXRlS2V5LT5pc0VxdWFsKG1fY3VycmVudEtleS5nZXQoKSkpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6aGF2ZUVudGVyZWRSYW5nZSgp
IGNvbnN0Cit7CisgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7CisgICAgICAgIGlm
IChtX2N1cnNvck9wdGlvbnMubG93T3BlbikKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlSW5k
ZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA+IDA7CisK
KyAgICAgICAgcmV0dXJuIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vy
c29yT3B0aW9ucy5sb3dLZXkpID49IDA7CisgICAgfQorICAgIGlmIChtX2N1cnNvck9wdGlvbnMu
aGlnaE9wZW4pCisgICAgICAgIHJldHVybiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtl
eSgpLCBtX2N1cnNvck9wdGlvbnMuaGlnaEtleSkgPCAwOworCisgICAgcmV0dXJuIGNvbXBhcmVJ
bmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA8PSAw
OworfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjppc1Bhc3RCb3VuZHMoKSBjb25z
dAoreworICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkgeworICAgICAgICBpZiAobV9j
dXJzb3JPcHRpb25zLmhpZ2hPcGVuKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVJbmRleEtl
eXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA+PSAwOworICAg
ICAgICByZXR1cm4gY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JP
cHRpb25zLmhpZ2hLZXkpID4gMDsKKyAgICB9CisKKyAgICBpZiAobV9jdXJzb3JPcHRpb25zLmxv
d09wZW4pCisgICAgICAgIHJldHVybiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgp
LCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8PSAwOworICAgIHJldHVybiBjb21wYXJlSW5kZXhL
ZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5KSA8IDA7Cit9CisK
K2NsYXNzIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6
OkN1cnNvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVLZXlD
dXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwodGhpcykpOworICAg
IH0KKworICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmlydHVhbCBTdHJpbmcg
dmFsdWUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVy
PiByZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lk
ZW50aWZpZXI7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOworCitw
cml2YXRlOgorICAgIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9u
cyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcih0cmFu
c2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKKyAgICB7CisgICAgfQorCisgICAgT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsKGNvbnN0IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCogb3RoZXIpCisgICAg
ICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3Iob3RoZXIpCisgICAgeworICAgIH0KKworICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsK
K307CisKK2Jvb2wgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCit7
CisgICAgY29uc3QgY2hhcioga2V5UG9zaXRpb24gPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigp
OworICAgIGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7CisK
KyAgICBPYmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5OworICAgIGtleVBvc2l0
aW9uID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0LCAm
b2JqZWN0U3RvcmVEYXRhS2V5KTsKKyAgICBpZiAoIWtleVBvc2l0aW9uKSB7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIG1fY3VycmVudEtleSA9IG9iamVjdFN0b3JlRGF0YUtleS51c2Vy
S2V5KCk7CisKKyAgICBpbnQ2NF90IHZlcnNpb247CisgICAgY29uc3QgY2hhciogdmFsdWVQb3Np
dGlvbiA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCksIG1faXRlcmF0
b3ItPnZhbHVlKCkuZW5kKCksIHZlcnNpb24pOworICAgIGlmICghdmFsdWVQb3NpdGlvbikgewor
ICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyByZS1lbmNvZGVzIHdo
YXQgd2FzIGp1c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KKyAgICBtX2lkZW50aWZpZXIg
PSBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXko
Km1fY3VycmVudEtleSksIHZlcnNpb24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NsYXNz
IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNvciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBj
cmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwg
Y3Vyc29yT3B0aW9ucykpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodGhpcykpOworICAgIH0KKworICAgIC8vIElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnRWYWx1ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIoKSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKKyAgICB9CisgICAgdmlydHVhbCBib29s
IGxvYWRDdXJyZW50Um93KCk7CisKK3ByaXZhdGU6CisgICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBs
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9
CisKKyAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoY29uc3QgT2JqZWN0U3RvcmVDdXJzb3JJbXBs
KiBvdGhlcikKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcihvdGhlcikKKyAgICAg
ICAgLCBtX2N1cnJlbnRWYWx1ZShvdGhlci0+bV9jdXJyZW50VmFsdWUpCisgICAgeworICAgIH0K
KworICAgIFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpSZWNvcmRJZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7Cit9OworCitib29sIE9iamVjdFN0b3Jl
Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQoreworICAgIGNvbnN0IGNoYXIqIGtleVBvc2l0
aW9uID0gbV9pdGVyYXRvci0+a2V5KCkuYmVnaW4oKTsKKyAgICBjb25zdCBjaGFyKiBrZXlMaW1p
dCA9IG1faXRlcmF0b3ItPmtleSgpLmVuZCgpOworCisgICAgT2JqZWN0U3RvcmVEYXRhS2V5IG9i
amVjdFN0b3JlRGF0YUtleTsKKyAgICBrZXlQb3NpdGlvbiA9IE9iamVjdFN0b3JlRGF0YUtleTo6
ZGVjb2RlKGtleVBvc2l0aW9uLCBrZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0YUtleSk7CisgICAg
aWYgKCFrZXlQb3NpdGlvbikgeworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9y
ZVJlYWRFcnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX2N1cnJl
bnRLZXkgPSBvYmplY3RTdG9yZURhdGFLZXkudXNlcktleSgpOworCisgICAgaW50NjRfdCB2ZXJz
aW9uOworICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQobV9pdGVy
YXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9u
KTsKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJC
YWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBh
bmQgb3B0aW1pemUuCisgICAgbV9pZGVudGlmaWVyID0gSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJ
ZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsK
KworICAgIG1fY3VycmVudFZhbHVlID0gZGVjb2RlU3RyaW5nKHZhbHVlUG9zaXRpb24sIG1faXRl
cmF0b3ItPnZhbHVlKCkuZW5kKCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NsYXNzIElu
ZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNvciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2
ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJz
b3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9u
cykpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEtl
eUN1cnNvckltcGwodGhpcykpOworICAgIH0KKworICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRp
ZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBi
b29sIGxvYWRDdXJyZW50Um93KCk7CisKK3ByaXZhdGU6CisgICAgSW5kZXhLZXlDdXJzb3JJbXBs
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIHsKKyAgICB9
CisKKyAgICBJbmRleEtleUN1cnNvckltcGwoY29uc3QgSW5kZXhLZXlDdXJzb3JJbXBsKiBvdGhl
cikKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcihvdGhlcikKKyAgICAgICAgLCBt
X3ByaW1hcnlLZXkob3RoZXItPm1fcHJpbWFyeUtleSkKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPElEQktleT4gbV9wcmltYXJ5S2V5OworfTsKKworYm9vbCBJbmRleEtleUN1cnNvckltcGw6
OmxvYWRDdXJyZW50Um93KCkKK3sKKyAgICBjb25zdCBjaGFyKiBrZXlQb3NpdGlvbiA9IG1faXRl
cmF0b3ItPmtleSgpLmJlZ2luKCk7CisgICAgY29uc3QgY2hhcioga2V5TGltaXQgPSBtX2l0ZXJh
dG9yLT5rZXkoKS5lbmQoKTsKKworICAgIEluZGV4RGF0YUtleSBpbmRleERhdGFLZXk7CisgICAg
a2V5UG9zaXRpb24gPSBJbmRleERhdGFLZXk6OmRlY29kZShrZXlQb3NpdGlvbiwga2V5TGltaXQs
ICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJyZW50S2V5ID0gaW5kZXhEYXRhS2V5LnVzZXJL
ZXkoKTsKKworICAgIGludDY0X3QgaW5kZXhEYXRhVmVyc2lvbjsKKyAgICBjb25zdCBjaGFyKiB2
YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwg
bV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7CisgICAgaWYgKCF2
YWx1ZVBvc2l0aW9uKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVh
ZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZhbHVlUG9zaXRp
b24gPSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQo
KSwgbV9wcmltYXJ5S2V5KTsKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVmVjdG9yPGNoYXI+IHByaW1hcnlMZXZlbERCS2V5ID0gT2JqZWN0
U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5kZXhEYXRhS2V5LmRhdGFiYXNlSWQoKSwgaW5kZXhEYXRh
S2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1fcHJpbWFyeUtleSk7CisKKyAgICBWZWN0b3I8Y2hhcj4g
cmVzdWx0OworICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KHByaW1hcnlMZXZlbERCS2V5LCBy
ZXN1bHQpKSB7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9yLT5rZXko
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQ2NF90IG9iamVjdFN0
b3JlRGF0YVZlcnNpb247CisgICAgY29uc3QgY2hhciogdCA9IGRlY29kZVZhckludChyZXN1bHQu
YmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBvYmplY3RTdG9yZURhdGFWZXJzaW9uKTsKKyAgICBpZiAo
IXQpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG9iamVjdFN0b3JlRGF0YVZl
cnNpb24gIT0gaW5kZXhEYXRhVmVyc2lvbikgeworICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZW1v
dmUobV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2NsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBJREJC
YWNraW5nU3RvcmU6OkN1cnNvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5k
ZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbCh0cmFu
c2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gY2xvbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwodGhpcykpOworICAgIH0KKworICAgIC8vIElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIo
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIGJvb2wgbG9hZEN1cnJl
bnRSb3coKTsKKworcHJpdmF0ZToKKyAgICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9w
dGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3Io
dHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgeworICAgIH0KKworICAgIEluZGV4Q3Vy
c29ySW1wbChjb25zdCBJbmRleEN1cnNvckltcGwqIG90aGVyKQorICAgICAgICA6IElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yKG90aGVyKQorICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhlci0+bV9w
cmltYXJ5S2V5KQorICAgICAgICAsIG1fdmFsdWUob3RoZXItPm1fdmFsdWUpCisgICAgICAgICwg
bV9wcmltYXJ5TGV2ZWxEQktleShvdGhlci0+bV9wcmltYXJ5TGV2ZWxEQktleSkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQktleT4gbV9wcmltYXJ5S2V5OworICAgIFN0cmluZyBtX3Zh
bHVlOworICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlMZXZlbERCS2V5OworfTsKKworYm9vbCBJ
bmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKK3sKKyAgICBjb25zdCBjaGFyKiBrZXlQ
b3NpdGlvbiA9IG1faXRlcmF0b3ItPmtleSgpLmJlZ2luKCk7CisgICAgY29uc3QgY2hhcioga2V5
TGltaXQgPSBtX2l0ZXJhdG9yLT5rZXkoKS5lbmQoKTsKKworICAgIEluZGV4RGF0YUtleSBpbmRl
eERhdGFLZXk7CisgICAga2V5UG9zaXRpb24gPSBJbmRleERhdGFLZXk6OmRlY29kZShrZXlQb3Np
dGlvbiwga2V5TGltaXQsICZpbmRleERhdGFLZXkpOworCisgICAgbV9jdXJyZW50S2V5ID0gaW5k
ZXhEYXRhS2V5LnVzZXJLZXkoKTsKKworICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBt
X2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCk7CisgICAgY29uc3QgY2hhciogdmFsdWVMaW1pdCA9
IG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCk7CisKKyAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNp
b247CisgICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludCh2YWx1ZVBvc2l0aW9uLCB2YWx1
ZUxpbWl0LCBpbmRleERhdGFWZXJzaW9uKTsKKyAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKKyAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFs
dWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgbV9wcmltYXJ5S2V5KTsKKyAgICBpZiAoIXZhbHVlUG9z
aXRpb24pIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3Ip
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9wcmltYXJ5TGV2ZWxEQktl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGluZGV4RGF0YUtleS5kYXRhYmFzZUlkKCks
IGluZGV4RGF0YUtleS5vYmplY3RTdG9yZUlkKCksICptX3ByaW1hcnlLZXkpOworCisgICAgVmVj
dG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmdldChtX3ByaW1hcnlM
ZXZlbERCS2V5LCByZXN1bHQpKSB7CisgICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0
ZXJhdG9yLT5rZXkoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQ2
NF90IG9iamVjdFN0b3JlRGF0YVZlcnNpb247CisgICAgY29uc3QgY2hhciogdCA9IGRlY29kZVZh
ckludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBvYmplY3RTdG9yZURhdGFWZXJzaW9u
KTsKKyAgICBpZiAoIXQpIHsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG9iamVj
dFN0b3JlRGF0YVZlcnNpb24gIT0gaW5kZXhEYXRhVmVyc2lvbikgeworICAgICAgICBtX3RyYW5z
YWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgbV92YWx1ZSA9IGRlY29kZVN0cmluZyh0LCByZXN1bHQuZW5kKCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIG9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVj
dGlvbiBkaXJlY3Rpb24sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQoreworICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5s
b3dlcigpOworICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwor
ICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhU
X05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKKyAgICBjdXJz
b3JPcHRpb25zLnVuaXF1ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJ
Q0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7CisKKyAg
ICBpZiAoIWxvd2VyQm91bmQpIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBPYmpl
Y3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5JREJL
ZXkoKSk7CisgICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IHRydWU7IC8vIE5vdCBpbmNs
dWRlZC4KKyAgICB9IGVsc2UgeworICAgICAgICBjdXJzb3JPcHRpb25zLmxvd0tleSA9IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpyYW5nZS0+
bG93ZXIoKSk7CisgICAgICAgIGN1cnNvck9wdGlvbnMubG93T3BlbiA9IHJhbmdlLT5sb3dlck9w
ZW4oKTsKKyAgICB9CisKKyAgICBpZiAoIXVwcGVyQm91bmQpIHsKKyAgICAgICAgY3Vyc29yT3B0
aW9ucy5oaWdoS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgbWF4SURCS2V5KCkpOworCisgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmZv
cndhcmQpCisgICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gdHJ1ZTsgLy8gTm90
IGluY2x1ZGVkLgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgYSBrZXkg
dGhhdCBleGlzdHMuCisgICAgICAgICAgICBpZiAoIWZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JF
cXVhbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhp
Z2hLZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGN1cnNv
ck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGN1cnNvck9wdGlvbnMuaGlnaEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsICpyYW5nZS0+dXBwZXIoKSk7CisgICAgICAgIGN1cnNv
ck9wdGlvbnMuaGlnaE9wZW4gPSByYW5nZS0+dXBwZXJPcGVuKCk7CisKKyAgICAgICAgaWYgKCFj
dXJzb3JPcHRpb25zLmZvcndhcmQpIHsKKyAgICAgICAgICAgIC8vIEZvciByZXZlcnNlIGN1cnNv
cnMsIHdlIG5lZWQgYSBrZXkgdGhhdCBleGlzdHMuCisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
Zm91bmRIaWdoS2V5OworICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9y
RXF1YWwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgZm91bmRIaWdoS2V5KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSB0
YXJnZXQga2V5IHNob3VsZCBub3QgYmUgaW5jbHVkZWQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhIHNt
YWxsZXIga2V5LCB3ZSBzaG91bGQgaW5jbHVkZSB0aGF0LgorICAgICAgICAgICAgaWYgKGN1cnNv
ck9wdGlvbnMuaGlnaE9wZW4gJiYgY29tcGFyZUluZGV4S2V5cyhmb3VuZEhpZ2hLZXksIGN1cnNv
ck9wdGlvbnMuaGlnaEtleSkgPCAwKQorICAgICAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGln
aE9wZW4gPSBmYWxzZTsKKworICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoS2V5ID0gZm91
bmRIaWdoS2V5OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgaW5kZXhDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
LCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykK
K3sKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24pOworICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdl
ICYmIHJhbmdlLT5sb3dlcigpOworICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdl
LT51cHBlcigpOworICAgIGN1cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURC
Q3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhU
KTsKKyAgICBjdXJzb3JPcHRpb25zLnVuaXF1ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpO
RVhUX05PX0RVUExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJ
Q0FURSk7CisKKyAgICBpZiAoIWxvd2VyQm91bmQpIHsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5s
b3dLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkKTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7IC8v
IEluY2x1ZGVkLgorICAgIH0gZWxzZSB7CisgICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0g
SW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
KnJhbmdlLT5sb3dlcigpKTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2Ut
Pmxvd2VyT3BlbigpOworICAgIH0KKworICAgIGlmICghdXBwZXJCb3VuZCkgeworICAgICAgICBj
dXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKKyAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdo
T3BlbiA9IGZhbHNlOyAvLyBJbmNsdWRlZC4KKworICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMu
Zm9yd2FyZCkgeyAvLyBXZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgorICAgICAgICAgICAgaWYg
KCFmaW5kR3JlYXRlc3RLZXlMZXNzVGhhbk9yRXF1YWwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlv
bnMuaGlnaEtleSwgY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJ
bmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAq
cmFuZ2UtPnVwcGVyKCkpOworICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2Ut
PnVwcGVyT3BlbigpOworCisgICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7CisgICAg
ICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFsKHRyYW5zYWN0aW9uLCBjdXJz
b3JPcHRpb25zLmhpZ2hLZXksIGZvdW5kSGlnaEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBr
ZXkgaW4gdGhlIHNldCBvZiBub24tdW5pcXVlIGtleXMuCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNsdWRl
ZCwgYnV0IHdlIGVuZCB1cCB3aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRlIHRo
YXQuCisgICAgICAgIGlmIChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtl
eXMoZm91bmRIaWdoS2V5LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKKyAgICAgICAgICAg
IGN1cnNvck9wdGlvbnMuaGlnaE9wZW4gPSBmYWxzZTsKKworICAgICAgICBjdXJzb3JPcHRpb25z
LmhpZ2hLZXkgPSBmb3VuZEhpZ2hLZXk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkJhY2tpbmdTdG9yZTo6b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
SURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvciIpOworICAg
IExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAg
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAg
ICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJz
b3IgPSBPYmplY3RTdG9yZUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1
cnNvck9wdGlvbnMpOworICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVL
ZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSog
cmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yIik7CisgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIGlmICgh
b2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCisgICAgICAg
IHJldHVybiAwOworICAgIFJlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGN1cnNvciA9
IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vy
c29yT3B0aW9ucyk7CisgICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNv
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
SURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvciIpOworICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURC
QmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBp
ZiAoIWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3Ig
PSBJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9w
dGlvbnMpOworICAgIGlmICghY3Vyc29yLT5maXJzdFNlZWsoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdl
KiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIElEQl9UUkFD
RSgiSURCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IiKTsKKyAgICBMZXZlbERCVHJhbnNh
Y3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgaWYgKCFpbmRleEN1
cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJ
bXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKKyAgICBpZiAo
IWN1cnNvci0+Zmlyc3RTZWVrKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGN1
cnNvci5yZWxlYXNlKCk7Cit9CisKK0lEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5z
YWN0aW9uKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQorICAgIDogbV9iYWNraW5nU3Rv
cmUoYmFja2luZ1N0b3JlKQoreworfQorCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmJlZ2luKCkKK3sKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmJlZ2luIik7CisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0
aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0
KCkpOworfQorCitib29sIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCit7
CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQiKTsK
KyAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CisgICAgYm9vbCByZXN1bHQgPSBtX3RyYW5zYWN0
aW9uLT5jb21taXQoKTsKKyAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjaygp
Cit7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFj
ayIpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5yb2xs
YmFjaygpOworICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oCmluZGV4IGJmYzM4NzZhMzRmZDdiMzU4Y2ZkN2RiMGM5NjJlOTk4ODQz
YmJjYjYuLmM0NTZmYjg2NjYxYjMyNzliYzA3YzU0ZmMzNjRlNTEyM2Y5ZGNmMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBA
IC0yNyw2OSArMjcsNjUgQEAKICNkZWZpbmUgSURCQmFja2luZ1N0b3JlX2gKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIFVTRShMRVZFTERCKQogCiAjaW5jbHVkZSAiSURCQ3Vy
c29yLmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgi
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rp
b24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIExldmVsREJDb21wYXJhdG9yOworY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOworY2xhc3MgTGV2
ZWxEQlRyYW5zYWN0aW9uOworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwogY2xhc3MgSURC
S2V5OwogY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLXN0cnVjdCBJ
REJEYXRhYmFzZU1ldGFkYXRhOwogCiBjbGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVm
Q291bnRlZDxJREJCYWNraW5nU3RvcmU+IHsKIHB1YmxpYzoKICAgICBjbGFzcyBUcmFuc2FjdGlv
bjsKKyAgICBjbGFzcyBSZWNvcmRJZGVudGlmaWVyOworICAgIGNsYXNzIEN1cnNvcjsKIAotICAg
IHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHt9OwotCi0gICAgdmlydHVhbCBWZWN0b3I8U3Ry
aW5nPiBnZXREYXRhYmFzZU5hbWVzKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSogZm91
bmRNZXRhZGF0YSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWZXJzaW9uLCBpbnQ2
NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVw
ZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGlu
dDY0X3QgaW50VmVyc2lvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFz
ZU1ldGFEYXRhKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSkgPSAwOwotCi0gICAgdmlydHVhbCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4g
Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0
U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkgPSAwOwotCi0gICAgY2xhc3MgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiB7CisgICAgY2xhc3Mg
UmVjb3JkSWRlbnRpZmllciA6IHB1YmxpYyBSZWZDb3VudGVkPFJlY29yZElkZW50aWZpZXI+IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOwot
ICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7fQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoY29uc3QgVmVjdG9y
PGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBSZWNvcmRJZGVudGlmaWVyKHByaW1hcnlLZXksIHZlcnNpb24pKTsgfQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgUmVjb3JkSWRlbnRpZmllcigpKTsgfQorICAgICAgICB2aXJ0dWFsIH5SZWNvcmRJZGVu
dGlmaWVyKCkgeyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX3ByaW1hcnlLZXkuaXNFbXB0eSgpOyB9CisgICAgICAgIFZlY3RvcjxjaGFyPiBwcmlt
YXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CisgICAgICAgIHZvaWQgc2V0
UHJpbWFyeUtleShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXkpIHsgbV9wcmltYXJ5S2V5
ID0gcHJpbWFyeUtleTsgfQorICAgICAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVy
biBtX3ZlcnNpb247IH0KKyAgICAgICAgdm9pZCBzZXRWZXJzaW9uKGludDY0X3QgdmVyc2lvbikg
eyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWNvcmRJ
ZGVudGlmaWVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9u
KSA6IG1fcHJpbWFyeUtleShwcmltYXJ5S2V5KSwgbV92ZXJzaW9uKHZlcnNpb24pIHsgQVNTRVJU
KCFwcmltYXJ5S2V5LmlzRW1wdHkoKSk7IH0KKyAgICAgICAgUmVjb3JkSWRlbnRpZmllcigpIDog
bV9wcmltYXJ5S2V5KCksIG1fdmVyc2lvbigtMSkgeyB9CisKKyAgICAgICAgVmVjdG9yPGNoYXI+
IG1fcHJpbWFyeUtleTsgLy8gRklYTUU6IE1ha2UgaXQgbW9yZSBjbGVhciB0aGF0IHRoaXMgaXMg
dGhlICplbmNvZGVkKiB2ZXJzaW9uIG9mIHRoZSBrZXkuCisgICAgICAgIGludDY0X3QgbV92ZXJz
aW9uOwogICAgIH07Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsK
LSAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikgPSAwOwogCi0gICAgY2xhc3MgT2JqZWN0
U3RvcmVSZWNvcmRDYWxsYmFjayB7CisgICAgY2xhc3MgVHJhbnNhY3Rpb24gewogICAgIHB1Ymxp
YzoKLSAgICAgICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIqLCBjb25zdCBTdHJpbmcmIHZhbHVlKSA9IDA7Ci0gICAgICAgICB2aXJ0dWFs
IH5PYmplY3RTdG9yZVJlY29yZENhbGxiYWNrKCkge307CisgICAgICAgIFRyYW5zYWN0aW9uKElE
QkJhY2tpbmdTdG9yZSopOworICAgICAgICB2b2lkIGJlZ2luKCk7CisgICAgICAgIGJvb2wgY29t
bWl0KCk7CisgICAgICAgIHZvaWQgcm9sbGJhY2soKTsKKworICAgICAgICBzdGF0aWMgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKFRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRyYW5zYWN0
aW9uKj4odHJhbnNhY3Rpb24pLT5tX3RyYW5zYWN0aW9uLmdldCgpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBJREJCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOworICAg
ICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogICAgIH07Ci0g
ICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29y
ZENhbGxiYWNrJikgPSAwOwotCi0gICAgdmlydHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4g
Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0
aUVudHJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KFRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0lu
SW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURC
S2V5PiYgZm91bmRQcmltYXJ5S2V5KSA9IDA7CiAKICAgICBjbGFzcyBDdXJzb3IgOiBwdWJsaWMg
UmVmQ291bnRlZDxDdXJzb3I+IHsKICAgICBwdWJsaWM6CkBAIC05OCwzNCArOTQsOTkgQEAgcHVi
bGljOgogICAgICAgICAgICAgU2VlawogICAgICAgICB9OwogCisgICAgICAgIHN0cnVjdCBDdXJz
b3JPcHRpb25zIHsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBsb3dLZXk7CisgICAgICAgICAg
ICBib29sIGxvd09wZW47CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gaGlnaEtleTsKKyAgICAg
ICAgICAgIGJvb2wgaGlnaE9wZW47CisgICAgICAgICAgICBib29sIGZvcndhcmQ7CisgICAgICAg
ICAgICBib29sIHVuaXF1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBDdXJzb3IoTGV2ZWxEQlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9u
cykKKyAgICAgICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKKyAgICAgICAgICAg
ICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICBDdXJzb3IoY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IqIG90aGVyKTsKKwor
ICAgICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
S2V5OyB9CisgICAgICAgIGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqID0gMCwg
SXRlcmF0b3JTdGF0ZSA9IFNlZWspOworICAgICAgICBib29sIGFkdmFuY2UodW5zaWduZWQgbG9u
Zyk7CisgICAgICAgIGJvb2wgZmlyc3RTZWVrKCk7CisKICAgICAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gY2xvbmUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhZHZhbmNlKHVu
c2lnbmVkIGxvbmcpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGNvbnRpbnVlRnVuY3Rpb24o
Y29uc3QgSURCS2V5KiA9IDAsIEl0ZXJhdG9yU3RhdGUgPSBTZWVrKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBTdHJpbmcg
dmFsdWUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH07
Ci0gICAgfTsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB2
YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlY29yZElkZW50
aWZpZXI+IHJlY29yZElkZW50aWZpZXIoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgfkN1cnNvcigp
IHsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSos
IElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNv
cj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
LCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJz
b3I+IG9wZW5JbmRleEN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKIAotICAgIGNsYXNzIFRyYW5zYWN0aW9uIDogcHVi
bGljIFJlZkNvdW50ZWQ8VHJhbnNhY3Rpb24+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgflRyYW5zYWN0aW9uKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpID0gMDsK
LSAgICAgICAgdmlydHVhbCBib29sIGNvbW1pdCgpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHJvbGxiYWNrKCkgPSAwOworICAgIHByb3RlY3RlZDoKKyAgICAgICAgYm9vbCBpc1Bhc3RCb3Vu
ZHMoKSBjb25zdDsKKyAgICAgICAgYm9vbCBoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3Q7CisKKyAg
ICAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOworICAgICAgICBjb25zdCBD
dXJzb3JPcHRpb25zIG1fY3Vyc29yT3B0aW9uczsKKyAgICAgICAgT3duUHRyPExldmVsREJJdGVy
YXRvcj4gbV9pdGVyYXRvcjsKKyAgICAgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5Owog
ICAgIH07Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2Fj
dGlvbigpID0gMDsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3Bl
bihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYg
ZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOworICAgIHZpcnR1YWwgfklE
QkJhY2tpbmdTdG9yZSgpOworCisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXREYXRhYmFz
ZU5hbWVzKCk7CisgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKik7CisgICAgdmlydHVhbCBib29sIGNy
ZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOworICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7CisgICAgdmlydHVh
bCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFs
IFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBk
YXRhYmFzZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9J
bmNyZW1lbnQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYpOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKik7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3Jk
SWRlbnRpZmllciopOworICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUs
IGJvb2wgY2hlY2tDdXJyZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZpZXIqIGZv
dW5kUmVjb3JkSWRlbnRpZmllcik7CisKKyAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFk
YXRhPiBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNV
bmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworICAgIHZpcnR1YWwgYm9vbCBwdXRJ
bmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4g
Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRy
PElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7
CisKK3Byb3RlY3RlZDoKKyAgICBJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4p
OworCisgICAgLy8gU2hvdWxkIG9ubHkgdXNlZCBmb3IgbW9ja2luZy4KKyAgICBJREJCYWNraW5n
U3RvcmUoKTsKKworcHJpdmF0ZToKKyAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5k
RW5jb2RlZFByaW1hcnlLZXkpOworCisgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKKyAgICBSZWZQ
dHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CisgICAgT3duUHRyPExldmVsREJE
YXRhYmFzZT4gbV9kYjsKKyAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRv
cjsKKwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKworI2VuZGlmIC8v
IFVTRShMRVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjZW5k
aWYgLy8gSURCQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCA0MjhjYzA0MTJj
MmI2MzQ0NDA3NDAzMmY4MmNlNWI4NzlkZThiYjIyLi5iNDk0NGNhODk1YzhkMDJkMDE1NGUwNWQ2
MTUzNjczMWMwNWEzY2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCkBAIC0xOTgsOCArMTk4LDYgQEAg
dm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y2xvc2UoKQogewogICAgIElEQl9UUkFDRSgiSURC
Q3Vyc29yQmFja2VuZEltcGw6OmNsb3NlIik7CiAgICAgbV9jbG9zZWQgPSB0cnVlOwotICAgIGlm
IChtX2N1cnNvcikKLSAgICAgICAgbV9jdXJzb3ItPmNsb3NlKCk7CiAgICAgbV9jdXJzb3IuY2xl
YXIoKTsKICAgICBtX3NhdmVkQ3Vyc29yLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApp
bmRleCA1NWM4ZGFiNGE3ODE2NjY5ZmMxODdiMzIxODI2YzczYmM3M2I5Njc1Li40ZWJjZGFiMjg1
MTJhNDFjNzk0NjFlNmQyMDk0MzQ1MmRlOGQ4MmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAg
LTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24u
aCIKLSNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMTM1LDcgKzEzNCw3IEBAIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFz
c1JlZlB0cjxTCiAgICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+dmFsdWU7CiAgICAgZWxzZSB7
CiAjaWYgVVNFKExFVkVMREIpCi0gICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3RvcnksIGZpbGVJ
ZGVudGlmaWVyLCB0aGlzKTsKKyAgICAgICAgYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3Jl
OjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmll
ciwgdGhpcyk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oZGF0YURpcmVjdG9yeSk7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCA0MDJiNzU5
ZGNhMWJiM2M4Zjc2ZGU1YWU2M2ZmZmE5MDM3ODUzNTRlLi40Y2RiNTgwNWM3MmUyZDFhNGMzOTQw
ZmI2MzcyOTQzYmQ5YWZjODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMTI2LDcgKzEyNiw2IEBA
IHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJJCiAgICAgZG8gewogICAgICAgICArK2NvdW50OwogICAg
IH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0gICAg
YmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGNv
dW50KTsKIH0KIApAQCAtMTU1LDEyICsxNTQsMTEgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBs
OjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBrZXkgPSBiYWNraW5nU3Rv
cmVDdXJzb3ItPmtleSgpOwotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAg
ICAgfQogCiAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGluZGV4LT5iYWNraW5nU3Rv
cmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKIAotICAgIFN0cmluZyB2YWx1ZSA9IGluZGV4
LT5iYWNraW5nU3RvcmUoKS0+Z2V0T2JqZWN0U3RvcmVSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVj
dFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1hcnlLZXkpOworICAgIFN0cmluZyB2YWx1ZSA9IGlu
ZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJh
Y2tlbmQtPmlkKCksICpwcmltYXJ5S2V5KTsKIAogICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewog
ICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOwpAQCAtMTg5LDExICsxODcsOSBAQCB2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZQogICAgIFJlZlB0cjxJREJLZXk+IGtleVJlc3VsdCA9IGluZGV4
LT5iYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmpl
Y3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqYmFja2luZ1N0b3JlQ3Vyc29yLT5r
ZXkoKSk7CiAgICAgaWYgKCFrZXlSZXN1bHQpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCkpOwotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3It
PmNsb3NlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3Moa2V5UmVzdWx0LmdldCgpKTsKLSAgICBiYWNraW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiB9
CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZWE1ZDU5ZmUzZTg0MWNiMjRlMTliM2ZiNjJhM2ZmMzVlYjM3MDY4My4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5
MDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJMZXZl
bERCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiSURCVHJhY2luZy5oIgotCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJIaXN0b2dyYW1T
dXBwb3J0LmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCi0jaW5jbHVkZSAi
SURCS2V5LmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgIklEQktleVJhbmdl
LmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkNvZGluZy5oIgotI2luY2x1ZGUgIklEQk1ldGFkYXRh
LmgiCi0jaW5jbHVkZSAiTGV2ZWxEQkNvbXBhcmF0b3IuaCIKLSNpbmNsdWRlICJMZXZlbERCRGF0
YWJhc2UuaCIKLSNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJMZXZlbERC
U2xpY2UuaCIKLSNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBJ
REJMZXZlbERCQ29kaW5nOwotCi1jb25zdCBpbnQ2NF90IEtleUdlbmVyYXRvckluaXRpYWxOdW1i
ZXIgPSAxOyAvLyBGcm9tIHRoZSBJbmRleGVkREIgc3BlY2lmaWNhdGlvbi4KLQotZW51bSBJREJM
ZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgewotICAgIElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3IsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3Is
Ci0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IsCi0gICAgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgsCi19Owotc3RhdGljIGlubGluZSB2b2lk
IHJlY29yZEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JU
eXBlIHR5cGUpCi17Ci0gICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24o
IldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5JbnRlcm5hbEVycm9yIiwgdHlwZSwgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgpOwotfQotCi0vLyBVc2UgdG8gc2ln
bmFsIGNvbmRpdGlvbnMgdGhhdCB1c3VhbGx5IGluZGljYXRlIGRldmVsb3BlciBlcnJvciwgYnV0
IGNvdWxkIGJlIGNhdXNlZCBieSBkYXRhIGNvcnJ1cHRpb24uCi0vLyBBIG1hY3JvIGlzIHVzZWQg
aW5zdGVhZCBvZiBhbiBpbmxpbmUgZnVuY3Rpb24gc28gdGhhdCB0aGUgYXNzZXJ0IGFuZCBsb2cg
cmVwb3J0IHRoZSBsaW5lIG51bWJlci4KLSNkZWZpbmUgSW50ZXJuYWxFcnJvcih0eXBlKSBcCi0g
ICAgZG8geyBcCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBcCi0gICAgICAgIExPR19F
UlJPUigiSW50ZXJuYWwgSW5kZXhlZERCIEVycm9yOiAlcyIsICN0eXBlKTsgXAotICAgICAgICBy
ZWNvcmRJbnRlcm5hbEVycm9yKHR5cGUpOyBcCi0gICAgfSB3aGlsZSAoMCkKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBib29sIGdldEJvb2woREJPclRyYW5z
YWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNoYXI+JiBrZXksIGJvb2wmIGZvdW5kQm9vbCkKLXsK
LSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvdW5kQm9vbCA9IGRlY29kZUJvb2wocmVz
dWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgYm9vbCBwdXRCb29sKERCT3JU
cmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBib29sIHZhbHVlKQotewot
ICAgIHJldHVybiBkYi0+cHV0KGtleSwgZW5jb2RlQm9vbCh2YWx1ZSkpOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGljIGJvb2wgZ2V0SW50KERCT3JUcmFu
c2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90JiBmb3VuZEludCkK
LXsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghZGItPmdldChrZXksIHJlc3Vs
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvdW5kSW50ID0gZGVjb2RlSW50KHJl
c3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgREJPclRyYW5zYWN0aW9uPgotc3RhdGljIGJvb2wgcHV0SW50KERCT3JU
cmFuc2FjdGlvbiogZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiYga2V5LCBpbnQ2NF90IHZhbHVlKQot
ewotICAgIEFTU0VSVCh2YWx1ZSA+PSAwKTsKLSAgICBpZiAodmFsdWUgPCAwKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRiLT5wdXQoa2V5LCBlbmNvZGVJbnQodmFsdWUpKTsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlvbj4KLXN0YXRpYyBib29sIGdl
dFZhckludChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGtleSwgaW50
NjRfdCYgZm91bmRJbnQpCi17Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKLSAgICBpZiAoIWRi
LT5nZXQoa2V5LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
ZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIGZvdW5kSW50KSA9PSBy
ZXN1bHQuZW5kKCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1z
dGF0aWMgYm9vbCBwdXRWYXJJbnQoREJPclRyYW5zYWN0aW9uKiBkYiwgY29uc3QgVmVjdG9yPGNo
YXI+JiBrZXksIGludDY0X3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGRiLT5wdXQoa2V5LCBlbmNv
ZGVWYXJJbnQodmFsdWUpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFuc2FjdGlv
bj4KLXN0YXRpYyBib29sIGdldFN0cmluZyhEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0
b3I8Y2hhcj4mIGtleSwgU3RyaW5nJiBmb3VuZFN0cmluZykKLXsKLSAgICBWZWN0b3I8Y2hhcj4g
cmVzdWx0OwotICAgIGlmICghZGItPmdldChrZXksIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGZvdW5kU3RyaW5nID0gZGVjb2RlU3RyaW5nKHJlc3VsdC5iZWdpbigpLCBy
ZXN1bHQuZW5kKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
REJPclRyYW5zYWN0aW9uPgotc3RhdGljIGJvb2wgcHV0U3RyaW5nKERCT3JUcmFuc2FjdGlvbiog
ZGIsIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKCFkYi0+cHV0KGtleSwgZW5jb2RlU3RyaW5nKHZhbHVlKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIERCT3JUcmFu
c2FjdGlvbj4KLXN0YXRpYyBib29sIHB1dElEQktleVBhdGgoREJPclRyYW5zYWN0aW9uKiBkYiwg
Y29uc3QgVmVjdG9yPGNoYXI+IGtleSwgY29uc3QgSURCS2V5UGF0aCYgdmFsdWUpCi17Ci0gICAg
aWYgKCFkYi0+cHV0KGtleSwgZW5jb2RlSURCS2V5UGF0aCh2YWx1ZSkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbnQgY29tcGFyZUtleXMo
Y29uc3QgTGV2ZWxEQlNsaWNlJiBhLCBjb25zdCBMZXZlbERCU2xpY2UmIGIpCi17Ci0gICAgcmV0
dXJuIGNvbXBhcmUoYSwgYik7Ci19Ci0KLXN0YXRpYyBpbnQgY29tcGFyZUluZGV4S2V5cyhjb25z
dCBMZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJTbGljZSYgYikKLXsKLSAgICByZXR1cm4g
Y29tcGFyZShhLCBiLCB0cnVlKTsKLX0KLQotY2xhc3MgQ29tcGFyYXRvciA6IHB1YmxpYyBMZXZl
bERCQ29tcGFyYXRvciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBpbnQgY29tcGFyZShjb25zdCBM
ZXZlbERCU2xpY2UmIGEsIGNvbnN0IExldmVsREJTbGljZSYgYikgY29uc3QgeyByZXR1cm4gSURC
TGV2ZWxEQkNvZGluZzo6Y29tcGFyZShhLCBiKTsgfQotICAgIHZpcnR1YWwgY29uc3QgY2hhciog
bmFtZSgpIGNvbnN0IHsgcmV0dXJuICJpZGJfY21wMSI7IH0KLX07Ci0KLWNvbnN0IGludDY0X3Qg
bGF0ZXN0U2NoZW1hVmVyc2lvbiA9IDE7Ci1zdGF0aWMgYm9vbCBpc1NjaGVtYUtub3duKExldmVs
REJEYXRhYmFzZSogZGIpCi17Ci0gICAgaW50NjRfdCBzY2hlbWFWZXJzaW9uID0gMDsKLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gbWV0YURhdGFLZXkgPSBTY2hlbWFWZXJzaW9uS2V5OjplbmNvZGUo
KTsKLSAgICBpZiAoIWdldEludChkYiwgbWV0YURhdGFLZXksIHNjaGVtYVZlcnNpb24pKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gc2NoZW1hVmVyc2lvbiA8PSBsYXRlc3RTY2hl
bWFWZXJzaW9uOwotfQotCi1zdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFz
ZSogZGIsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBt
ZXRhRGF0YUtleSA9IFNjaGVtYVZlcnNpb25LZXk6OmVuY29kZSgpOwotCi0gICAgaW50NjRfdCBz
Y2hlbWFWZXJzaW9uID0gMDsKLSAgICBpZiAoIWdldEludChkYiwgbWV0YURhdGFLZXksIHNjaGVt
YVZlcnNpb24pKSB7Ci0gICAgICAgIHNjaGVtYVZlcnNpb24gPSBsYXRlc3RTY2hlbWFWZXJzaW9u
OwotICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0YURhdGFLZXksIGxhdGVzdFNjaGVtYVZlcnNp
b24pKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVX
cml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChzY2hlbWFWZXJzaW9uIDw9IGxhdGVzdFNjaGVtYVZlcnNp
b24pOwotICAgICAgICBpZiAoIXNjaGVtYVZlcnNpb24pIHsKLSAgICAgICAgICAgIHNjaGVtYVZl
cnNpb24gPSBsYXRlc3RTY2hlbWFWZXJzaW9uOwotICAgICAgICAgICAgUmVmUHRyPExldmVsREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZShkYik7
Ci0gICAgICAgICAgICB0cmFuc2FjdGlvbi0+cHV0KG1ldGFEYXRhS2V5LCBlbmNvZGVJbnQoc2No
ZW1hVmVyc2lvbikpOwotCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkg
PSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdpbihvcmlnaW4pOwotICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29k
ZVN0b3BLZXlGb3JPcmlnaW4ob3JpZ2luKTsKLSAgICAgICAgICAgIE93blB0cjxMZXZlbERCSXRl
cmF0b3I+IGl0ID0gZGItPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgICAgICAgICBmb3IgKGl0LT5z
ZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0
b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiB2
YWx1ZTsKLSAgICAgICAgICAgICAgICBib29sIG9rID0gdHJhbnNhY3Rpb24tPmdldChpdC0+a2V5
KCksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaW50IGRhdGFiYXNlSWQgPSBkZWNvZGVJbnQodmFsdWUuYmVnaW4oKSwgdmFsdWUu
ZW5kKCkpOwotICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBpbnRWZXJzaW9uS2V5ID0gRGF0
YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6
OlVzZXJJbnRWZXJzaW9uKTsKLSAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+cHV0KGludFZl
cnNpb25LZXksIGVuY29kZVZhckludChJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVy
c2lvbikpOwotICAgICAgICAgICAgICAgIG9rID0gdHJhbnNhY3Rpb24tPmdldChpdC0+a2V5KCks
IHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBib29sIG9rID0gdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgICAg
ICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChzY2hlbWFWZXJz
aW9uID09IGxhdGVzdFNjaGVtYVZlcnNpb24pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1zdGF0aWMgaW50NjRfdCBnZXRNYXhP
YmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIsIGludDY0X3QgZGF0YWJhc2VJZCkKLXsK
LSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpNYXhPYmpl
Y3RTdG9yZUlkKTsKLSAgICByZXR1cm4gZ2V0TWF4T2JqZWN0U3RvcmVJZChkYiwgbWF4T2JqZWN0
U3RvcmVJZEtleSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBEQk9yVHJhbnNhY3Rpb24+Ci1z
dGF0aWMgaW50NjRfdCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIsIGNv
bnN0IFZlY3RvcjxjaGFyPiYgbWF4T2JqZWN0U3RvcmVJZEtleSkKLXsKLSAgICBpbnQ2NF90IG1h
eE9iamVjdFN0b3JlSWQgPSAtMTsKLSAgICBpZiAoIWdldEludChkYiwgbWF4T2JqZWN0U3RvcmVJ
ZEtleSwgbWF4T2JqZWN0U3RvcmVJZCkpCi0gICAgICAgIG1heE9iamVjdFN0b3JlSWQgPSAwOwot
Ci0gICAgQVNTRVJUKG1heE9iamVjdFN0b3JlSWQgPj0gMCk7Ci0gICAgcmV0dXJuIG1heE9iamVj
dFN0b3JlSWQ7Ci19Ci0KLUlEQkxldmVsREJCYWNraW5nU3RvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZh
Y3RvcnksIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYikKLSAgICA6IG1faWRlbnRpZmll
cihpZGVudGlmaWVyKQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi0gICAgLCBtX2RiKGRiKQot
ewotICAgIG1fZmFjdG9yeS0+YWRkSURCQmFja2luZ1N0b3JlKGlkZW50aWZpZXIsIHRoaXMpOwot
fQotCi1JREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpCi17
Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJREJCYWNraW5nU3RvcmUobV9pZGVudGlmaWVyKTsKLQot
ICAgIC8vIG1fZGIncyBkZXN0cnVjdG9yIHVzZXMgbV9jb21wYXJhdG9yLiBUaGUgb3JkZXIgb2Yg
ZGVzdHJ1Y3Rpb24gaXMgaW1wb3J0YW50LgotICAgIG1fZGIuY2xlYXIoKTsKLSAgICBtX2NvbXBh
cmF0b3IuY2xlYXIoKTsKLX0KLQotZW51bSBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlblJlc3Vs
dCB7Ci0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NZW1vcnksCi0gICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZU9wZW5TdWNjZXNzLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVu
RmFpbGVkRGlyZWN0b3J5LAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5r
bm93blNjaGVtYSwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBEZXN0cm95
RmFpbGVkLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlbkZhaWxl
ZCwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLAot
ICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4LAotfTsKLQotUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4q
IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBjb25zdCBTdHJpbmcm
IGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCi17Ci0gICAg
SURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuIik7Ci0gICAgU3RyaW5nIHBh
dGhCYXNlID0gcGF0aEJhc2VBcmc7Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNv
bXBhcmF0b3IgPSBhZG9wdFB0cihuZXcgQ29tcGFyYXRvcigpKTsKLSAgICBPd25QdHI8TGV2ZWxE
QkRhdGFiYXNlPiBkYjsKLQotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
SGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERC
LkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NZW1v
cnksIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgZGIgPSBMZXZlbERC
RGF0YWJhc2U6Om9wZW5Jbk1lbW9yeShjb21wYXJhdG9yLmdldCgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKLSAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAlcyIs
IHBhdGhCYXNlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6
aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVu
U3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWREaXJlY3RvcnksIElEQkxl
dmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBwYXRoID0g
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7Ci0KLSAgICAgICAgZGIgPSBM
ZXZlbERCRGF0YWJhc2U6Om9wZW4ocGF0aCwgY29tcGFyYXRvci5nZXQoKSk7Ci0gICAgICAgIGlm
IChkYiAmJiAhaXNTY2hlbWFLbm93bihkYi5nZXQoKSkpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgaGFkIHVua25vd24gc2NoZW1hLCB0cmVhdGluZyBp
dCBhcyBmYWlsdXJlIHRvIG9wZW4iKTsKLSAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhp
c3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0
YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwotICAgICAgICAgICAgZGIucmVsZWFzZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRiKQotICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9y
dDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5P
cGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5TdWNjZXNzLCBJREJMZXZlbERC
QmFja2luZ1N0b3JlT3Blbk1heCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgTE9HX0VS
Uk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBvcGVuIGZhaWxlZCwgYXR0ZW1wdGluZyBjbGVh
bnVwIik7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBMZXZlbERCRGF0YWJhc2U6OmRlc3Ry
b3kocGF0aCk7Ci0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGNsZWFudXAgZmFpbGVkIik7Ci0gICAg
ICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNv
cmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZU9wZW5DbGVhbnVwRGVzdHJveUZhaWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5N
YXgpOwotICAgICAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4o
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFj
a2luZyBzdG9yZSBjbGVhbnVwIHN1Y2NlZWRlZCwgcmVvcGVuaW5nIik7Ci0gICAgICAgICAgICBk
YiA9IExldmVsREJEYXRhYmFzZTo6b3BlbihwYXRoLCBjb21wYXJhdG9yLmdldCgpKTsKLSAgICAg
ICAgICAgIGlmICghZGIpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBi
YWNraW5nIHN0b3JlIHJlb3BlbiBhZnRlciByZWNvdmVyeSBmYWlsZWQiKTsKLSAgICAgICAgICAg
ICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRl
eGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Bl
bkNsZWFudXBSZW9wZW5GYWlsZWQsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJh
dGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZl
bERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlT3Blbk1heCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWRiKQotICAgICAg
ICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7Ci0KLSAgICAvLyBGSVhNRTog
SGFuZGxlIGNvbXBhcmF0b3IgbmFtZSBjaGFuZ2VzLgotCi0gICAgUmVmUHRyPElEQkxldmVsREJC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShhZG9wdFJlZihuZXcgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZShmaWxlSWRlbnRpZmllciwgZmFjdG9yeSwgZGIucmVsZWFzZSgpKSkpOwotICAgIGJhY2tp
bmdTdG9yZS0+bV9jb21wYXJhdG9yID0gY29tcGFyYXRvci5yZWxlYXNlKCk7Ci0KLSAgICBpZiAo
IXNldFVwTWV0YWRhdGEoYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpLCBmaWxlSWRlbnRpZmllcikp
Ci0gICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKLQotICAgIHJl
dHVybiBiYWNraW5nU3RvcmUucmVsZWFzZSgpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5n
PiBmb3VuZE5hbWVzOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IERhdGFiYXNl
TmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7Ci0gICAgY29uc3Qg
VmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZVN0b3BLZXlGb3JP
cmlnaW4obV9pZGVudGlmaWVyKTsKLQotICAgIEFTU0VSVChmb3VuZE5hbWVzLmlzRW1wdHkoKSk7
Ci0KLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9y
KCk7Ci0gICAgZm9yIChpdC0+c2VlayhzdGFydEtleSk7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFy
ZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgY29u
c3QgY2hhciogcCA9IGl0LT5rZXkoKS5iZWdpbigpOwotICAgICAgICBjb25zdCBjaGFyKiBsaW1p
dCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAgICBEYXRhYmFzZU5hbWVLZXkgZGF0YWJhc2VO
YW1lS2V5OwotICAgICAgICBwID0gRGF0YWJhc2VOYW1lS2V5OjpkZWNvZGUocCwgbGltaXQsICZk
YXRhYmFzZU5hbWVLZXkpOwotICAgICAgICBBU1NFUlQocCk7Ci0KLSAgICAgICAgZm91bmROYW1l
cy5hcHBlbmQoZGF0YWJhc2VOYW1lS2V5LmRhdGFiYXNlTmFtZSgpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZvdW5kTmFtZXM7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEq
IG1ldGFkYXRhKQotewotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVL
ZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwotCi0gICAgYm9vbCBvayA9IGdldEludCht
X2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZl
cnNpb24pLCBtZXRhZGF0YS0+dmVyc2lvbik7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBnZXRWYXJJbnQobV9kYi5nZXQoKSwgRGF0YWJh
c2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6
VXNlckludFZlcnNpb24pLCBtZXRhZGF0YS0+aW50VmVyc2lvbik7Ci0gICAgaWYgKCFvaykgewot
ICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtZXRhZGF0YS0+aW50VmVyc2lv
biA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbikKLSAgICAgICAgbWV0
YWRhdGEtPmludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb247Ci0K
LSAgICBtZXRhZGF0YS0+bWF4T2JqZWN0U3RvcmVJZCA9IGdldE1heE9iamVjdFN0b3JlSWQobV9k
Yi5nZXQoKSwgbWV0YWRhdGEtPmlkKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
aW50NjRfdCBnZXROZXdEYXRhYmFzZUlkKExldmVsREJEYXRhYmFzZSogZGIpCi17Ci0gICAgaW50
NjRfdCBtYXhEYXRhYmFzZUlkID0gLTE7Ci0gICAgaWYgKCFnZXRJbnQoZGIsIE1heERhdGFiYXNl
SWRLZXk6OmVuY29kZSgpLCBtYXhEYXRhYmFzZUlkKSkKLSAgICAgICAgbWF4RGF0YWJhc2VJZCA9
IDA7Ci0KLSAgICBBU1NFUlQobWF4RGF0YWJhc2VJZCA+PSAwKTsKLQotICAgIGludDY0X3QgZGF0
YWJhc2VJZCA9IG1heERhdGFiYXNlSWQgKyAxOwotICAgIGlmICghcHV0SW50KGRiLCBNYXhEYXRh
YmFzZUlkS2V5OjplbmNvZGUoKSwgZGF0YWJhc2VJZCkpCi0gICAgICAgIHJldHVybiAtMTsKLQot
ICAgIHJldHVybiBkYXRhYmFzZUlkOwotfQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCi17Ci0gICAg
cm93SWQgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOwotICAgIGlmIChyb3dJZCA8IDAp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBE
YXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwotICAgIGlmICghcHV0
SW50KG1fZGIuZ2V0KCksIGtleSwgcm93SWQpKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGlmICghcHV0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6
OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9u
KSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVy
cm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoaW50VmVyc2lvbiA9
PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCi0gICAgICAgIGludFZlcnNpb24g
PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbjsKLSAgICBpZiAoIXB1dFZh
ckludChtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFi
YXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwgaW50VmVyc2lvbikpIHsKLSAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGlu
dFZlcnNpb24pCi17Ci0gICAgaWYgKGludFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6
Tm9JbnRWZXJzaW9uKQotICAgICAgICBpbnRWZXJzaW9uID0gSURCRGF0YWJhc2VNZXRhZGF0YTo6
RGVmYXVsdEludFZlcnNpb247Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpbnRWZXJzaW9uID49
IDAsICJpbnRWZXJzaW9uIHdhcyAlbGxkIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihpbnRWZXJz
aW9uKSk7Ci0gICAgaWYgKCFwdXRWYXJJbnQoVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlv
bkZyb20odHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERh
dGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwgaW50VmVyc2lvbikpIHsKLSAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKQotewotICAgIGlmICghcHV0U3RyaW5nKFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2Rl
KHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIHZlcnNpb24pKSB7Ci0g
ICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0
YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5kKQotewotICAg
IE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9y
KCk7Ci0gICAgZm9yIChpdC0+c2VlayhiZWdpbik7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtl
eXMoaXQtPmtleSgpLCBlbmQpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAgICBpZiAoIXRyYW5z
YWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi1ib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNl
Iik7Ci0gICAgT3duUHRyPExldmVsREJXcml0ZU9ubHlUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24g
PSBMZXZlbERCV3JpdGVPbmx5VHJhbnNhY3Rpb246OmNyZWF0ZShtX2RiLmdldCgpKTsKLQotICAg
IElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGE7Ci0gICAgaWYgKCFnZXRJREJEYXRhYmFzZU1l
dGFEYXRhKG5hbWUsICZtZXRhZGF0YSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY29u
c3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1l
dGFkYXRhLmlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpPcmlnaW5OYW1lKTsKLSAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gc3RvcEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShtZXRhZGF0
YS5pZCArIDEsIERhdGFiYXNlTWV0YURhdGFLZXk6Ok9yaWdpbk5hbWUpOwotICAgIE93blB0cjxM
ZXZlbERCSXRlcmF0b3I+IGl0ID0gbV9kYi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBmb3IgKGl0
LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkKLSAgICAgICAgdHJhbnNhY3Rpb24tPnJlbW92ZShp
dC0+a2V5KCkpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtl
eTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7Ci0gICAgdHJhbnNhY3Rpb24tPnJlbW92ZShr
ZXkpOwotCi0gICAgcmV0dXJuIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKLX0KLQotc3RhdGljIGJv
b2wgY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShjb25zdCBMZXZlbERCSXRlcmF0b3Iq
IGl0LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHN0b3BLZXksIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBtZXRhRGF0YVR5cGUpCi17Ci0gICAgaWYgKCFpdC0+aXNWYWxpZCgpIHx8IGNvbXBh
cmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPj0gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKLSAgICBjb25zdCBjaGFy
KiBwID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZGVjb2RlKGl0LT5rZXkoKS5iZWdpbigpLCBp
dC0+a2V5KCkuZW5kKCksICZtZXRhRGF0YUtleSk7Ci0gICAgQVNTRVJUX1VOVVNFRChwLCBwKTsK
LSAgICBpZiAobWV0YURhdGFLZXkub2JqZWN0U3RvcmVJZCgpICE9IG9iamVjdFN0b3JlSWQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkg
IT0gbWV0YURhdGFUeXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLVZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkKQotewotICAgIElEQl9UUkFD
RSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzIik7Ci0gICAgVmVjdG9y
PElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IG9iamVjdFN0b3JlczsKLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgMSwgMCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7Ci0KLSAgICBPd25QdHI8TGV2ZWxE
Qkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgaXQtPnNlZWsoc3Rh
cnRLZXkpOwotICAgIHdoaWxlIChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXko
KSwgc3RvcEtleSkgPCAwKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHAgPSBpdC0+a2V5KCkuYmVn
aW4oKTsKLSAgICAgICAgY29uc3QgY2hhciogbGltaXQgPSBpdC0+a2V5KCkuZW5kKCk7Ci0KLSAg
ICAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSBtZXRhRGF0YUtleTsKLSAgICAgICAgcCA9IE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKLSAg
ICAgICAgQVNTRVJUKHApOwotICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkg
IT0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSkgewotICAgICAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKLSAgICAgICAgICAgIC8vIFBv
c3NpYmxlIHN0YWxlIG1ldGFkYXRhLCBidXQgZG9uJ3QgZmFpbCB0aGUgbG9hZC4KLSAgICAgICAg
ICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKTsK
LQotICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyBieSBkaXJlY3Qga2V5IGxvb2t1cCByYXRoZXIg
dGhhbiBpdGVyYXRpb24sIHRvIHNpbXBsaWZ5LgotICAgICAgICBTdHJpbmcgb2JqZWN0U3RvcmVO
YW1lID0gZGVjb2RlU3RyaW5nKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgp
KTsKLQotICAgICAgICBpdC0+bmV4dCgpOwotICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVB
bmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OktleVBhdGgpKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgSURCS2V5UGF0aCBrZXlQYXRoID0gZGVjb2RlSURCS2V5UGF0aChpdC0+
dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7Ci0KLSAgICAgICAgaXQtPm5leHQo
KTsKLSAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgp
LCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpBdXRvSW5j
cmVtZW50KSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJv
b2wgYXV0b0luY3JlbWVudCA9IGRlY29kZUJvb2woaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZh
bHVlKCkuZW5kKCkpOwotCi0gICAgICAgIGl0LT5uZXh0KCk7IC8vIElzIGV2aWNhdGJsZS4KLSAg
ICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9w
S2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpFdmljdGFibGUpKSB7
Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJy
b3IpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpdC0+bmV4dCgp
OyAvLyBMYXN0IHZlcnNpb24uCi0gICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFE
YXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6TGFzdFZlcnNpb24pKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBNYXhpbXVtIGluZGV4IGlkIGFsbG9jYXRlZC4K
LSAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBz
dG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpNYXhJbmRleElk
KSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVh
ZEVycm9yKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGludDY0X3Qg
bWF4SW5kZXhJZCA9IGRlY29kZUludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5l
bmQoKSk7Ci0KLSAgICAgICAgaXQtPm5leHQoKTsgLy8gW29wdGlvbmFsXSBoYXMga2V5IHBhdGgg
KGlzIG5vdCBudWxsKQotICAgICAgICBpZiAoY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlw
ZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6SGFzS2V5UGF0aCkpIHsKLSAgICAgICAgICAgIGJvb2wgaGFzS2V5UGF0aCA9IGRlY29kZUJv
b2woaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotICAgICAgICAgICAg
Ly8gVGhpcyBjaGVjayBhY2NvdW50cyBmb3IgdHdvIGxheWVycyBvZiBsZWdhY3kgY29kaW5nOgot
ICAgICAgICAgICAgLy8gKDEpIEluaXRpYWxseSwgaGFzS2V5UGF0aCB3YXMgYWRkZWQgdG8gZGlz
dGluZ3Vpc2ggbnVsbCB2cy4gc3RyaW5nLgotICAgICAgICAgICAgLy8gKDIpIExhdGVyLCBudWxs
IHZzLiBzdHJpbmcgdnMuIGFycmF5IHdhcyBzdG9yZWQgaW4gdGhlIGtleVBhdGggaXRzZWxmLgot
ICAgICAgICAgICAgLy8gU28gdGhpcyBjaGVjayBpcyBvbmx5IHJlbGV2YW50IGZvciBzdHJpbmct
dHlwZSBrZXlQYXRocy4KLSAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAoa2V5UGF0aC50
eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSAmJiAha2V5UGF0aC5zdHJpbmcoKS5pc0Vt
cHR5KCkpKSB7Ci0gICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCkKLSAgICAgICAgICAgICAgICBrZXlQYXRoID0g
SURCS2V5UGF0aCgpOwotICAgICAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGludDY0X3Qga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciA9IC0xOwotICAgICAgICBpZiAo
Y2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0
U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cikpIHsKLSAgICAgICAgICAgIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIgPSBkZWNvZGVJbnQo
aXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwotICAgICAgICAgICAgLy8g
RklYTUU6IFJldHVybiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyLCBjYWNoZSBpbiBvYmplY3Qg
c3RvcmUsIGFuZCB3cml0ZSBsYXppbHkgdG8gYmFja2luZyBzdG9yZS4KLSAgICAgICAgICAgIC8v
IEZvciBub3csIGp1c3QgYXNzZXJ0IHRoYXQgaWYgaXQgd2FzIHdyaXR0ZW4gaXQgd2FzIHZhbGlk
LgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyLCBr
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID49IEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIpOwot
ICAgICAgICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG9iamVjdFN0b3Jl
cy5hcHBlbmQoSURCT2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU5hbWUsIG9iamVjdFN0
b3JlSWQsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1heEluZGV4SWQpKTsKLSAgICB9Ci0gICAg
cmV0dXJuIG9iamVjdFN0b3JlczsKLX0KLQotc3RhdGljIGJvb2wgc2V0TWF4T2JqZWN0U3RvcmVJ
ZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4T2JqZWN0
U3RvcmVJZEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRh
YmFzZU1ldGFEYXRhS2V5OjpNYXhPYmplY3RTdG9yZUlkKTsKLSAgICBpbnQ2NF90IG1heE9iamVj
dFN0b3JlSWQgPSBnZXRNYXhPYmplY3RTdG9yZUlkKHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9y
ZUlkS2V5KTsKLQotICAgIGlmIChvYmplY3RTdG9yZUlkIDw9IG1heE9iamVjdFN0b3JlSWQpIHsK
LSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lF
cnJvcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFwdXRJbnQodHJh
bnNhY3Rpb24sIG1heE9iamVjdFN0b3JlSWRLZXksIG9iamVjdFN0b3JlSWQpKSB7Ci0gICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBi
b29sIGF1dG9JbmNyZW1lbnQpCi17Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxE
QlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNh
Y3Rpb24pOwotICAgIGlmICghc2V0TWF4T2JqZWN0U3RvcmVJZChsZXZlbERCVHJhbnNhY3Rpb24s
IGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpO
YW1lKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5UGF0aEtleSA9IE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjpLZXlQYXRoKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gYXV0b0luY3JlbWVu
dEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpBdXRvSW5jcmVtZW50KTsKLSAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gZXZpY3RhYmxlS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OkV2
aWN0YWJsZSk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6Okxhc3RWZXJzaW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
bWF4SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpNYXhJbmRleElkKTsKLSAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gaGFzS2V5UGF0aEtleSAgPSBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6SGFzS2V5UGF0aCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG5hbWVzS2V5ID0gT2JqZWN0U3Rv
cmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG5hbWUpOwotCi0gICAgYm9vbCBvayA9IHB1
dFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVLZXksIG5hbWUpOwotICAgIGlmICghb2sp
IHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dElEQktleVBh
dGgobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQYXRoS2V5LCBrZXlQYXRoKTsKLSAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJy
b3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJbnQobGV2
ZWxEQlRyYW5zYWN0aW9uLCBhdXRvSW5jcmVtZW50S2V5LCBhdXRvSW5jcmVtZW50KTsKLSAgICBp
ZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdy
aXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJ
bnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBldmljdGFibGVLZXksIGZhbHNlKTsKLSAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJy
b3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgb2sgPSBwdXRJbnQobGV2
ZWxEQlRyYW5zYWN0aW9uLCBsYXN0VmVyc2lvbktleSwgMSk7Ci0gICAgaWYgKCFvaykgewotICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFu
c2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgTWluaW11bUluZGV4SWQpOwotICAgIGlmICghb2spIHsK
LSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBvayA9IHB1dEJvb2wobGV2ZWxE
QlRyYW5zYWN0aW9uLCBoYXNLZXlQYXRoS2V5LCAha2V5UGF0aC5pc051bGwoKSk7Ci0gICAgaWYg
KCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0
ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50
KGxldmVsREJUcmFuc2FjdGlvbiwga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgS2V5R2Vu
ZXJhdG9ySW5pdGlhbE51bWJlcik7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbmFtZXNL
ZXksIG9iamVjdFN0b3JlSWQpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17
Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotCi0gICAgU3RyaW5n
IG9iamVjdFN0b3JlTmFtZTsKLSAgICBnZXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSksIG9iamVjdFN0b3JlTmFtZSk7Ci0KLSAgICBpZiAo
IWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLCBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKSB7Ci0gICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAg
ICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCi0gICAgfQotCi0gICAgbGV2ZWxEQlRy
YW5zYWN0aW9uLT5yZW1vdmUoT2JqZWN0U3RvcmVOYW1lc0tleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlTmFtZSkpOwotCi0gICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNh
Y3Rpb24sIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCAwKSwgSW5kZXhGcmVlTGlzdEtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQpKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVX
cml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgotICAg
IH0KLSAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApLCBJbmRleE1ldGFE
YXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpKSB7Ci0gICAg
ICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAg
ICAgICByZXR1cm47IC8vIEZJWE1FOiBSZXBvcnQgZXJyb3IuCi0gICAgfQotCi0gICAgY2xlYXJP
YmplY3RTdG9yZSh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7Ci19Ci0K
LVN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQotewotICAgIElEQl9U
UkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQiKTsKLSAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLQotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwga2V5KTsKLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLQotICAgIGlmICgh
bGV2ZWxEQlRyYW5zYWN0aW9uLT5nZXQobGV2ZWxkYktleSwgZGF0YSkpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIGludDY0X3QgdmVyc2lvbjsKLSAgICBjb25zdCBjaGFyKiBwID0g
ZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgaWYg
KCFwKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRF
cnJvcik7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0gICAgKHZvaWQpIHZlcnNp
b247Ci0KLSAgICByZXR1cm4gZGVjb2RlU3RyaW5nKHAsIGRhdGEuZW5kKCkpOwotfQotCi1uYW1l
c3BhY2UgewotY2xhc3MgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgSURCQmFja2lu
Z1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIgewotcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoY29uc3QgVmVjdG9y
PGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihwcmltYXJ5S2V5LCB2ZXJzaW9uKSk7IH0KLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IExldmVsREJSZWNvcmRJZGVudGlmaWVyKCkpOyB9Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleS5pc0VtcHR5KCk7
IH0KLSAgICBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFy
eUtleTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeUtleShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1h
cnlLZXkpIHsgbV9wcmltYXJ5S2V5ID0gcHJpbWFyeUtleTsgfQotICAgIGludDY0X3QgdmVyc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQotICAgIHZvaWQgc2V0VmVyc2lvbihpbnQ2
NF90IHZlcnNpb24pIHsgbV92ZXJzaW9uID0gdmVyc2lvbjsgfQotCi1wcml2YXRlOgotICAgIExl
dmVsREJSZWNvcmRJZGVudGlmaWVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50
NjRfdCB2ZXJzaW9uKSA6IG1fcHJpbWFyeUtleShwcmltYXJ5S2V5KSwgbV92ZXJzaW9uKHZlcnNp
b24pIHsgQVNTRVJUKCFwcmltYXJ5S2V5LmlzRW1wdHkoKSk7IH0KLSAgICBMZXZlbERCUmVjb3Jk
SWRlbnRpZmllcigpIDogbV9wcmltYXJ5S2V5KCksIG1fdmVyc2lvbigtMSkge30KLQotICAgIFZl
Y3RvcjxjaGFyPiBtX3ByaW1hcnlLZXk7IC8vIEZJWE1FOiBNYWtlIGl0IG1vcmUgY2xlYXIgdGhh
dCB0aGlzIGlzIHRoZSAqZW5jb2RlZCogdmVyc2lvbiBvZiB0aGUga2V5LgotICAgIGludDY0X3Qg
bV92ZXJzaW9uOwotfTsKLX0KLQotc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkKLXsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25L
ZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TGFzdFZlcnNpb24pOwotCi0gICAgaW50NjRf
dCBsYXN0VmVyc2lvbiA9IC0xOwotICAgIGlmICghZ2V0SW50KHRyYW5zYWN0aW9uLCBsYXN0VmVy
c2lvbktleSwgbGFzdFZlcnNpb24pKQotICAgICAgICBsYXN0VmVyc2lvbiA9IDA7Ci0KLSAgICBB
U1NFUlQobGFzdFZlcnNpb24gPj0gMCk7Ci0KLSAgICBpbnQ2NF90IHZlcnNpb24gPSBsYXN0VmVy
c2lvbiArIDE7Ci0gICAgYm9vbCBvayA9IHB1dEludCh0cmFuc2FjdGlvbiwgbGFzdFZlcnNpb25L
ZXksIHZlcnNpb24pOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQotICAgIEFTU0VSVCh2
ZXJzaW9uID4gbGFzdFZlcnNpb24pOyAvLyBGSVhNRTogVGhpbmsgYWJvdXQgaG93IHdlIHdhbnQg
dG8gaGFuZGxlIHRoZSBvdmVyZmxvdyBzY2VuYXJpby4KLQotICAgIHJldHVybiB2ZXJzaW9uOwot
fQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikK
LXsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3Jl
UmVjb3JkIik7Ci0gICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwotICAgIExldmVsREJUcmFuc2Fj
dGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlv
bkZyb20odHJhbnNhY3Rpb24pOwotICAgIGludDY0X3QgdmVyc2lvbiA9IGdldE5ld1ZlcnNpb25O
dW1iZXIobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKLSAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVkYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKLQotICAgIFZlY3Rv
cjxjaGFyPiB2OwotICAgIHYuYXBwZW5kKGVuY29kZVZhckludCh2ZXJzaW9uKSk7Ci0gICAgdi5h
cHBlbmQoZW5jb2RlU3RyaW5nKHZhbHVlKSk7Ci0KLSAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlv
bi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwgdikpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNF
bnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7Ci0gICAgaWYg
KCFsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChleGlzdHNFbnRyeUtleSwgZW5jb2RlSW50KHZlcnNp
b24pKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0
ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIExldmVsREJSZWNv
cmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PExldmVs
REJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7Ci0gICAgbGV2ZWxEQlJlY29y
ZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOwotICAgIGxldmVs
REJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQotewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiog
bGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEtleVByZWZp
eChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNvZGUoKTsKLSAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsg
MSwgMCkuZW5jb2RlKCk7Ci0KLSAgICBkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIHN0
YXJ0S2V5LCBzdG9wS2V5KTsKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW52
YWxpZFJlY29yZElkZW50aWZpZXIoKQotewotICAgIHJldHVybiBMZXZlbERCUmVjb3JkSWRlbnRp
Zmllcjo6Y3JlYXRlKCk7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
T2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZCIpOwot
ICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246
OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IExldmVsREJS
ZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNv
bnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVEYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZp
ZXItPnByaW1hcnlLZXkoKSk7Ci0gICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0
U3RvcmVEYXRhS2V5KTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9
IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxE
QlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7Ci0gICAgbGV2ZWxEQlRyYW5zYWN0aW9u
LT5yZW1vdmUoZXhpc3RzRW50cnlLZXkpOwotfQotCi0KLWludDY0X3QgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpCi17Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24g
PSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0KLSAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSA9IE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKTsKLQotICAgIGlu
dDY0X3Qga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciA9IC0xOwotICAgIFZlY3RvcjxjaGFyPiBk
YXRhOwotCi0gICAgaWYgKGxldmVsREJUcmFuc2FjdGlvbi0+Z2V0KGtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXJLZXksIGRhdGEpKQotICAgICAgICBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyID0g
ZGVjb2RlSW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IC8vIFByZXZpb3VzbHksIHRoZSBrZXkgZ2VuZXJhdG9yIHN0YXRlIHdhcyBub3Qgc3RvcmVkIGV4
cGxpY2l0bHkgYnV0IGRlcml2ZWQgZnJvbSB0aGUKLSAgICAgICAgLy8gbWF4aW11bSBudW1lcmlj
IGtleSBwcmVzZW50IGluIGV4aXN0aW5nIGRhdGEuIFRoaXMgdmlvbGF0ZXMgdGhlIHNwZWMgYXMg
dGhlIGRhdGEgbWF5Ci0gICAgICAgIC8vIGJlIGNsZWFyZWQgYnV0IHRoZSBrZXkgZ2VuZXJhdG9y
IHN0YXRlIG11c3QgYmUgcHJlc2VydmVkLgotICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rh
cnRLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBtaW5JREJLZXkoKSk7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0g
T2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbWF4
SURCS2V5KCkpOwotCi0gICAgICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbGV2ZWxE
QlRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgICAgICBpbnQ2NF90IG1heE51bWVy
aWNLZXkgPSAwOwotCi0gICAgICAgIGZvciAoaXQtPnNlZWsoc3RhcnRLZXkpOyBpdC0+aXNWYWxp
ZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPCAwOyBpdC0+bmV4dCgpKSB7
Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAg
ICAgICBjb25zdCBjaGFyKiBsaW1pdCA9IGl0LT5rZXkoKS5lbmQoKTsKLQotICAgICAgICAgICAg
T2JqZWN0U3RvcmVEYXRhS2V5IGRhdGFLZXk7Ci0gICAgICAgICAgICBwID0gT2JqZWN0U3RvcmVE
YXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZkYXRhS2V5KTsKLSAgICAgICAgICAgIEFTU0VSVChw
KTsKLQotICAgICAgICAgICAgaWYgKGRhdGFLZXkudXNlcktleSgpLT50eXBlKCkgPT0gSURCS2V5
OjpOdW1iZXJUeXBlKSB7Ci0gICAgICAgICAgICAgICAgaW50NjRfdCBuID0gc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZGF0YUtleS51c2VyS2V5KCktPm51bWJlcigpKTsKLSAgICAgICAgICAgICAgICBp
ZiAobiA+IG1heE51bWVyaWNLZXkpCi0gICAgICAgICAgICAgICAgICAgIG1heE51bWVyaWNLZXkg
PSBuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAga2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlciA9IG1heE51bWVyaWNLZXkgKyAxOwotICAgIH0KLQotICAgIHJldHVybiBrZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyOwotfQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKLXsKLSAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZl
bERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLQotICAgIGlmIChjaGVja0N1cnJlbnQp
IHsKLSAgICAgICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7Ci0gICAgICAg
IGlmIChuZXdOdW1iZXIgPD0gY3VycmVudE51bWJlcikKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIpOwotICAgIGJvb2wgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlHZW5lcmF0
b3JDdXJyZW50TnVtYmVyS2V5LCBuZXdOdW1iZXIpOwotICAgIGlmICghb2spIHsKLSAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKLSAgICBMZXZlbERCVHJhbnNh
Y3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rp
b25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9
IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtl
eSk7Ci0gICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0KLSAgICBpZiAoIWxldmVsREJUcmFuc2FjdGlv
bi0+Z2V0KGxldmVsZGJLZXksIGRhdGEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
bnQ2NF90IHZlcnNpb247Ci0gICAgaWYgKCFkZWNvZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRh
LmVuZCgpLCB2ZXJzaW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTGV2ZWxEQlJl
Y29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8TGV2
ZWxEQlJlY29yZElkZW50aWZpZXIqPihmb3VuZFJlY29yZElkZW50aWZpZXIpOwotICAgIGxldmVs
REJSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKLSAg
ICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0
U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29y
ZENhbGxiYWNrJiBjYWxsYmFjaykKLXsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtaW5JREJLZXkoKSk7Ci0gICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBtYXhJREJLZXkoKSk7Ci0KLSAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IGxldmVsREJUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsK
LSAgICBmb3IgKGl0LT5zZWVrKHN0YXJ0S2V5KTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5
cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMDsgaXQtPm5leHQoKSkgewotICAgICAgICBjb25zdCBj
aGFyKiBwID0gaXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0g
aXQtPmtleSgpLmVuZCgpOwotICAgICAgICBPYmplY3RTdG9yZURhdGFLZXkgZGF0YUtleTsKLSAg
ICAgICAgcCA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmZGF0YUtleSk7
Ci0gICAgICAgIEFTU0VSVChwKTsKLQotICAgICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5
ID0gZGF0YUtleS51c2VyS2V5KCk7Ci0KLSAgICAgICAgaW50NjRfdCB2ZXJzaW9uOwotICAgICAg
ICBjb25zdCBjaGFyKiBxID0gZGVjb2RlVmFySW50KGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52
YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKLSAgICAgICAgaWYgKCFxKSB7Ci0gICAgICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPExldmVsREJSZWNv
cmRJZGVudGlmaWVyPiByaSA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2Rl
SURCS2V5KCpwcmltYXJ5S2V5KSwgdmVyc2lvbik7Ci0gICAgICAgIFN0cmluZyBpZGJWYWx1ZSA9
IGRlY29kZVN0cmluZyhxLCBpdC0+dmFsdWUoKS5lbmQoKSk7Ci0KLSAgICAgICAgaWYgKCFjYWxs
YmFjay5jYWxsYmFjayhyaS5nZXQoKSwgaWRiVmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBjaGVja0lu
ZGV4QW5kTWV0YURhdGFLZXkoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9y
PGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFU
eXBlKQotewotICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IHN0b3BLZXkpID49IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEluZGV4TWV0YURh
dGFLZXkgbWV0YURhdGFLZXk7Ci0gICAgY29uc3QgY2hhciogcCA9IEluZGV4TWV0YURhdGFLZXk6
OmRlY29kZShpdC0+a2V5KCkuYmVnaW4oKSwgaXQtPmtleSgpLmVuZCgpLCAmbWV0YURhdGFLZXkp
OwotICAgIEFTU0VSVF9VTlVTRUQocCwgcCk7Ci0gICAgaWYgKG1ldGFEYXRhS2V5LmluZGV4SWQo
KSAhPSBpbmRleElkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1ldGFEYXRhS2V5
Lm1ldGFEYXRhVHlwZSgpICE9IG1ldGFEYXRhVHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi0KLVZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQotewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Z2V0SW5kZXhlcyIpOwotICAgIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBpbmRleGVzOwotICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RvcEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkICsgMSwgMCwgMCk7Ci0KLSAgICBBU1NFUlQoaW5kZXhlcy5pc0VtcHR5KCkpOwotCi0gICAg
T3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBtX2RiLT5jcmVhdGVJdGVyYXRvcigpOwotICAg
IGl0LT5zZWVrKHN0YXJ0S2V5KTsKLSAgICB3aGlsZSAoaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJl
S2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpIDwgMCkgewotICAgICAgICBjb25zdCBjaGFyKiBwID0g
aXQtPmtleSgpLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpbWl0ID0gaXQtPmtleSgp
LmVuZCgpOwotCi0gICAgICAgIEluZGV4TWV0YURhdGFLZXkgbWV0YURhdGFLZXk7Ci0gICAgICAg
IHAgPSBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZtZXRhRGF0YUtleSk7Ci0g
ICAgICAgIEFTU0VSVChwKTsKLSAgICAgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgp
ICE9IEluZGV4TWV0YURhdGFLZXk6Ok5hbWUpIHsKLSAgICAgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7Ci0gICAgICAgICAgICAvLyBQb3NzaWJs
ZSBzdGFsZSBtZXRhZGF0YSBkdWUgdG8gaHR0cDovL3dlYmtpdC5vcmcvYi84NTU1NyBidXQgZG9u
J3QgZmFpbCB0aGUgbG9hZC4KLSAgICAgICAgICAgIGl0LT5uZXh0KCk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIGJ5IGRpcmVj
dCBrZXkgbG9va3VwIHJhdGhlciB0aGFuIGl0ZXJhdGlvbiwgdG8gc2ltcGxpZnkuCi0gICAgICAg
IGludDY0X3QgaW5kZXhJZCA9IG1ldGFEYXRhS2V5LmluZGV4SWQoKTsKLSAgICAgICAgU3RyaW5n
IGluZGV4TmFtZSA9IGRlY29kZVN0cmluZyhpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUo
KS5lbmQoKSk7Ci0KLSAgICAgICAgaXQtPm5leHQoKTsgLy8gdW5pcXVlIGZsYWcKLSAgICAgICAg
aWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXksIGluZGV4SWQs
IEluZGV4TWV0YURhdGFLZXk6OlVuaXF1ZSkpIHsKLSAgICAgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBib29sIGluZGV4VW5pcXVlID0gZGVjb2RlQm9vbChpdC0+dmFsdWUo
KS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7Ci0KLSAgICAgICAgaXQtPm5leHQoKTsgLy8g
a2V5UGF0aAotICAgICAgICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwg
c3RvcEtleSwgaW5kZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6S2V5UGF0aCkpIHsKLSAgICAgICAg
ICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBk
ZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsK
LQotICAgICAgICBpdC0+bmV4dCgpOyAvLyBbb3B0aW9uYWxdIG11bHRpRW50cnkgZmxhZwotICAg
ICAgICBib29sIGluZGV4TXVsdGlFbnRyeSA9IGZhbHNlOwotICAgICAgICBpZiAoY2hlY2tJbmRl
eEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRh
S2V5OjpNdWx0aUVudHJ5KSkgewotICAgICAgICAgICAgaW5kZXhNdWx0aUVudHJ5ID0gZGVjb2Rl
Qm9vbChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7Ci0gICAgICAgICAg
ICBpdC0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5kZXhlcy5hcHBlbmQoSURCSW5k
ZXhNZXRhZGF0YShpbmRleE5hbWUsIGluZGV4SWQsIGtleVBhdGgsIGluZGV4VW5pcXVlLCBpbmRl
eE11bHRpRW50cnkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4ZXM7Ci19Ci0KLXN0YXRpYyBi
b29sIHNldE1heEluZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLXsK
LSAgICBpbnQ2NF90IG1heEluZGV4SWQgPSAtMTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbWF4
SW5kZXhJZEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpNYXhJbmRleElkKTsKLSAgICBp
ZiAoIWdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4SW5kZXhJZCkpCi0gICAg
ICAgIG1heEluZGV4SWQgPSBNaW5pbXVtSW5kZXhJZDsKLQotICAgIGlmIChpbmRleElkIDw9IG1h
eEluZGV4SWQpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
Q29uc2lzdGVuY3lFcnJvcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIXB1dEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgaW5kZXhJZCkpIHsKLSAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0
aCYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpCi17Ci0gICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCIpOwotICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIGlmICghc2V0TWF4SW5kZXhJZChsZXZl
bERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbmFtZUtleSA9IElu
ZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCBJbmRleE1ldGFEYXRhS2V5OjpOYW1lKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gdW5pcXVl
S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OlVuaXF1ZSk7Ci0gICAgY29uc3QgVmVjdG9yPGNo
YXI+IGtleVBhdGhLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwgaW5kZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6S2V5UGF0aCk7Ci0gICAgY29u
c3QgVmVjdG9yPGNoYXI+IG11bHRpRW50cnlLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6TXVs
dGlFbnRyeSk7Ci0KLSAgICBib29sIG9rID0gcHV0U3RyaW5nKGxldmVsREJUcmFuc2FjdGlvbiwg
bmFtZUtleSwgbmFtZSk7Ci0gICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIG9rID0gcHV0Qm9vbChsZXZlbERCVHJhbnNhY3Rpb24sIHVuaXF1ZUtleSwg
aXNVbmlxdWUpOwotICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBvayA9IHB1dElEQktleVBhdGgobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlQYXRoS2V5
LCBrZXlQYXRoKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgb2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgbXVsdGlFbnRyeUtleSwg
aXNNdWx0aUVudHJ5KTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpCi17Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRl
eCIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotCi0gICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGluZGV4TWV0YURhdGFTdGFydCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAwKTsKLSAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gaW5kZXhNZXRhRGF0YUVuZCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtl
eShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLQotICAgIGlmICghZGVsZXRl
UmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRleE1ldGFEYXRhU3RhcnQsIGluZGV4TWV0YURh
dGFFbmQpKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdy
aXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPGNo
YXI+IGluZGV4RGF0YVN0YXJ0ID0gSW5kZXhEYXRhS2V5OjplbmNvZGVNaW5LZXkoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4
RGF0YUVuZCA9IEluZGV4RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQpOwotCi0gICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rp
b24sIGluZGV4RGF0YVN0YXJ0LCBpbmRleERhdGFFbmQpKSB7Ci0gICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJl
Y29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiBrZXksIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRl
bnRpZmllcikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dElu
ZGV4RGF0YUZvclJlY29yZCIpOwotICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKLSAgICBBU1NF
UlQoaW5kZXhJZCA+PSBNaW5pbXVtSW5kZXhJZCk7Ci0gICAgY29uc3QgTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2
ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlmaWVyKTsKLQotICAgIExldmVsREJU
cmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERh
dGFLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBp
bmRleElkLCBlbmNvZGVJREJLZXkoa2V5KSwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1h
cnlLZXkoKSk7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChlbmNv
ZGVWYXJJbnQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnZlcnNpb24oKSkpOwotICAgIGRhdGEu
YXBwZW5kKGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwotCi0gICAgcmV0
dXJuIGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7Ci19Ci0KLXN0
YXRpYyBib29sIGZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHRhcmdldCwgVmVjdG9yPGNoYXI+
JiBmb3VuZEtleSkKLXsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0
aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGl0LT5zZWVrKHRhcmdldCk7Ci0KLSAgICBpZiAo
IWl0LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaXQtPnNlZWtUb0xhc3QoKTsKLSAgICAgICAgaWYg
KCFpdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHdoaWxlIChjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgdGFyZ2V0KSA+IDApIHsKLSAgICAg
ICAgaXQtPnByZXYoKTsKLSAgICAgICAgaWYgKCFpdC0+aXNWYWxpZCgpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGRvIHsKLSAgICAgICAgZm91bmRLZXkuY2xlYXIo
KTsKLSAgICAgICAgZm91bmRLZXkuYXBwZW5kKGl0LT5rZXkoKS5iZWdpbigpLCBpdC0+a2V5KCku
ZW5kKCkgLSBpdC0+a2V5KCkuYmVnaW4oKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUgY2FuIGJlIHNl
dmVyYWwgaW5kZXgga2V5cyB0aGF0IGNvbXBhcmUgZXF1YWwuIFdlIHdhbnQgdGhlIGxhc3Qgb25l
LgotICAgICAgICBpdC0+bmV4dCgpOwotICAgIH0gd2hpbGUgKGl0LT5pc1ZhbGlkKCkgJiYgIWNv
bXBhcmVJbmRleEtleXMoaXQtPmtleSgpLCB0YXJnZXQpKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCwgaW50NjRfdCwgaW50NjRf
dCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikKLXsKLSAgICAvLyBGSVhNRTog
VGhpcyBpc24ndCBuZWVkZWQgc2luY2Ugd2UgaW52YWxpZGF0ZSBpbmRleCBkYXRhIHZpYSB0aGUg
dmVyc2lvbiBudW1iZXIgbWVjaGFuaXNtLgotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMg
Ym9vbCB2ZXJzaW9uRXhpc3RzKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IHZlcnNpb24sIGNv
bnN0IFZlY3RvcjxjaGFyPiYgZW5jb2RlZFByaW1hcnlLZXkpCi17Ci0gICAgY29uc3QgVmVjdG9y
PGNoYXI+IGtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgZW5jb2RlZFByaW1hcnlLZXkpOwotICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotCi0gICAg
aWYgKCF0cmFuc2FjdGlvbi0+Z2V0KGtleSwgZGF0YSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKSA9PSB2ZXJz
aW9uOwotfQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
IGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KQotewotICAgIElEQl9U
UkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgiKTsKLSAgICBBU1NF
UlQoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5pc0VtcHR5KCkpOwotCi0gICAgTGV2ZWxEQlRyYW5z
YWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0
aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkg
PSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCBrZXkpOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gbGV2ZWxEQlRyYW5zYWN0
aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGl0LT5zZWVrKGxldmVsZGJLZXkpOwotCi0gICAg
Zm9yICg7OykgewotICAgICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjb21wYXJlSW5kZXhLZXlzKGl0LT5rZXkoKSwgbGV2ZWxk
YktleSkgPiAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGludDY0X3Qg
dmVyc2lvbjsKLSAgICAgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChpdC0+dmFsdWUo
KS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7Ci0gICAgICAgIGlmICghcCkg
ewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmb3Vu
ZEVuY29kZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHApOwotCi0g
ICAgICAgIGlmICghdmVyc2lvbkV4aXN0cyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIHZlcnNpb24sIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7Ci0gICAg
ICAgICAgICAvLyBEZWxldGUgc3RhbGUgaW5kZXggZGF0YSBlbnRyeSBhbmQgY29udGludWUuCi0g
ICAgICAgICAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpOwotICAgICAg
ICAgICAgaXQtPm5leHQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKLXsKLSAgICBJ
REJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCIp
OwotCi0gICAgVmVjdG9yPGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7Ci0gICAgaWYgKGZp
bmRLZXlJbkluZGV4KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRl
eElkLCBrZXksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXk7Ci0gICAgICAgIGRlY29kZUlEQktleShmb3VuZEVuY29kZWRQcmltYXJ5
S2V5LmJlZ2luKCksIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuZW5kKCksIHByaW1hcnlLZXkpOwot
ICAgICAgICByZXR1cm4gcHJpbWFyeUtleS5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IDA7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkKLXsKLSAgICBJREJf
VFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgiKTsKLQotICAg
IFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwotICAgIGlmICghZmluZEtleUlu
SW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGlu
ZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgZGVjb2RlSURCS2V5KGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYmVnaW4oKSwgZm91bmRF
bmNvZGVkUHJpbWFyeUtleS5lbmQoKSwgZm91bmRQcmltYXJ5S2V5KTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotbmFtZXNwYWNlIHsKLQotc3RydWN0IEN1cnNvck9wdGlvbnMgewotICAgIFZlY3Rv
cjxjaGFyPiBsb3dLZXk7Ci0gICAgYm9vbCBsb3dPcGVuOwotICAgIFZlY3RvcjxjaGFyPiBoaWdo
S2V5OwotICAgIGJvb2wgaGlnaE9wZW47Ci0gICAgYm9vbCBmb3J3YXJkOwotICAgIGJvb2wgdW5p
cXVlOwotfTsKLQotY2xhc3MgQ3Vyc29ySW1wbENvbW1vbiA6IHB1YmxpYyBJREJCYWNraW5nU3Rv
cmU6OkN1cnNvciB7Ci1wdWJsaWM6Ci0gICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAg
ICB2aXJ0dWFsIGJvb2wgYWR2YW5jZSh1bnNpZ25lZCBsb25nKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqID0gMCwgSXRlcmF0b3JTdGF0ZSA9IFNlZWsp
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVu
dEtleTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJl
dHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xvc2UoKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpID0g
MDsKLSAgICBib29sIGZpcnN0U2VlaygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ3Vyc29ySW1wbENv
bW1vbihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25z
JiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0g
ICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgIH0KLQot
ICAgIEN1cnNvckltcGxDb21tb24oY29uc3QgQ3Vyc29ySW1wbENvbW1vbiogb3RoZXIpCi0gICAg
ICAgIDogbV90cmFuc2FjdGlvbihvdGhlci0+bV90cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2N1
cnNvck9wdGlvbnMob3RoZXItPm1fY3Vyc29yT3B0aW9ucykKLSAgICAgICAgLCBtX2N1cnJlbnRL
ZXkob3RoZXItPm1fY3VycmVudEtleSkKLSAgICB7Ci0gICAgICAgIGlmIChvdGhlci0+bV9pdGVy
YXRvcikgewotICAgICAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0
ZXJhdG9yKCk7Ci0KLSAgICAgICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRvci0+aXNWYWxpZCgp
KSB7Ci0gICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+bV9pdGVyYXRvci0+
a2V5KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB+Q3Vyc29ySW1w
bENvbW1vbigpIHt9Ci0KLSAgICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OwotICAgIGJvb2wg
aGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0OwotCi0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3Ry
YW5zYWN0aW9uOwotICAgIEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOwotICAgIE93blB0
cjxMZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0b3I7Ci0gICAgUmVmUHRyPElEQktleT4gbV9jdXJy
ZW50S2V5OwotfTsKLQotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWsoKQotewotICAg
IG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGlmICht
X2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKLSAgICAgICAgbV9pdGVyYXRvci0+c2VlayhtX2N1cnNv
ck9wdGlvbnMubG93S2V5KTsKLSAgICBlbHNlCi0gICAgICAgIG1faXRlcmF0b3ItPnNlZWsobV9j
dXJzb3JPcHRpb25zLmhpZ2hLZXkpOwotCi0gICAgcmV0dXJuIGNvbnRpbnVlRnVuY3Rpb24oMCwg
UmVhZHkpOwotfQotCi1ib29sIEN1cnNvckltcGxDb21tb246OmFkdmFuY2UodW5zaWduZWQgbG9u
ZyBjb3VudCkKLXsKLSAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICBpZiAoIWNvbnRpbnVl
RnVuY3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25z
dCBJREJLZXkqIGtleSwgSXRlcmF0b3JTdGF0ZSBuZXh0U3RhdGUpCi17Ci0gICAgUmVmUHRyPElE
QktleT4gcHJldmlvdXNLZXkgPSBtX2N1cnJlbnRLZXk7Ci0KLSAgICAvLyBXaGVuIGl0ZXJhdGlu
ZyB3aXRoIFBSRVZfTk9fRFVQTElDQVRFLCBzcGVjIHJlcXVpcmVzIHRoYXQgdGhlCi0gICAgLy8g
dmFsdWUgd2UgeWllbGQgZm9yIGVhY2gga2V5IGlzIHRoZSBmaXJzdCBkdXBsaWNhdGUgaW4gZm9y
d2FyZHMKLSAgICAvLyBvcmRlci4KLSAgICBSZWZQdHI8SURCS2V5PiBsYXN0RHVwbGljYXRlS2V5
OwotCi0gICAgYm9vbCBmb3J3YXJkID0gbV9jdXJzb3JPcHRpb25zLmZvcndhcmQ7Ci0KLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIGlmIChuZXh0U3RhdGUgPT0gU2VlaykgewotICAgICAgICAgICAg
aWYgKGZvcndhcmQpCi0gICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+bmV4dCgpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPnByZXYoKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBuZXh0U3RhdGUgPSBTZWVrOyAvLyBmb3Igc3Vic2VxdWVudCBp
dGVyYXRpb25zCi0KLSAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgICAgIGlmICghZm9yd2FyZCAmJiBsYXN0RHVwbGljYXRlS2V5LmdldCgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gV2UgbmVlZCB0byB3YWxrIGZvcndhcmQgYmVjYXVzZSB3ZSBoaXQgdGhlIGVu
ZCBvZgotICAgICAgICAgICAgICAgIC8vIHRoZSBkYXRhLgotICAgICAgICAgICAgICAgIGZvcndh
cmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNQYXN0
Qm91bmRzKCkpIHsKLSAgICAgICAgICAgIGlmICghZm9yd2FyZCAmJiBsYXN0RHVwbGljYXRlS2V5
LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB3YWxrIGZvcndhcmQgYmVj
YXVzZSBub3cgd2UncmUgYmV5b25kIHRoZQotICAgICAgICAgICAgICAgIC8vIGJvdW5kcyBkZWZp
bmVkIGJ5IHRoZSBjdXJzb3IuCi0gICAgICAgICAgICAgICAgZm9yd2FyZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaGF2ZUVudGVyZWRSYW5nZSgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gVGhlIHJvdyBtYXkgbm90IGxvYWQg
YmVjYXVzZSB0aGVyZSdzIGEgc3RhbGUgZW50cnkgaW4gdGhlCi0gICAgICAgIC8vIGluZGV4LiBU
aGlzIGlzIG5vdCBmYXRhbC4KLSAgICAgICAgaWYgKCFsb2FkQ3VycmVudFJvdygpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGtleSkgewotICAgICAgICAgICAgaWYgKGZv
cndhcmQpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50S2V5LT5pc0xlc3NUaGFuKGtl
eSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiAoa2V5LT5pc0xlc3NUaGFuKG1fY3VycmVudEtleS5nZXQoKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy51bmlxdWUpIHsKLQotICAgICAgICAgICAg
aWYgKG1fY3VycmVudEtleS0+aXNFcXVhbChwcmV2aW91c0tleS5nZXQoKSkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgYWJsZSB0byB3YWxrIGZvcndhcmQgYWxsIHRo
ZSB3YXkKLSAgICAgICAgICAgICAgICAvLyB0byB0aGUgcHJldmlvdXMga2V5LgotICAgICAgICAg
ICAgICAgIEFTU0VSVCghbGFzdER1cGxpY2F0ZUtleS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZm9yd2FyZCkgewot
ICAgICAgICAgICAgICAgIGlmICghbGFzdER1cGxpY2F0ZUtleS5nZXQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBsYXN0RHVwbGljYXRlS2V5ID0gbV9jdXJyZW50S2V5OwotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIHdhbGsgZm9yd2FyZCBiZWNhdXNlIHdlIGhpdCB0aGUgYm91bmRhcnkKLSAg
ICAgICAgICAgICAgICAvLyBiZXR3ZWVuIGtleSByYW5nZXMuCi0gICAgICAgICAgICAgICAgaWYg
KCFsYXN0RHVwbGljYXRlS2V5LT5pc0VxdWFsKG1fY3VycmVudEtleS5nZXQoKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VS
VCghbGFzdER1cGxpY2F0ZUtleS5nZXQoKSB8fCAoZm9yd2FyZCAmJiBsYXN0RHVwbGljYXRlS2V5
LT5pc0VxdWFsKG1fY3VycmVudEtleS5nZXQoKSkpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBDdXJzb3JJbXBsQ29tbW9uOjpoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3QKLXsKLSAgICBp
ZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpIHsKLSAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9u
cy5sb3dPcGVuKQotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRv
ci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpID4gMDsKLQotICAgICAgICByZXR1cm4g
Y29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tl
eSkgPj0gMDsKLSAgICB9Ci0gICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbikKLSAgICAg
ICAgcmV0dXJuIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0
aW9ucy5oaWdoS2V5KSA8IDA7Ci0KLSAgICByZXR1cm4gY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJh
dG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDw9IDA7Ci19Ci0KLWJvb2wgQ3Vy
c29ySW1wbENvbW1vbjo6aXNQYXN0Qm91bmRzKCkgY29uc3QKLXsKLSAgICBpZiAobV9jdXJzb3JP
cHRpb25zLmZvcndhcmQpIHsKLSAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5oaWdoT3BlbikK
LSAgICAgICAgICAgIHJldHVybiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBt
X2N1cnNvck9wdGlvbnMuaGlnaEtleSkgPj0gMDsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVJbmRl
eEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5oaWdoS2V5KSA+IDA7Ci0g
ICAgfQotCi0gICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuKQotICAgICAgICByZXR1cm4g
Y29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tl
eSkgPD0gMDsKLSAgICByZXR1cm4gY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwg
bV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPCAwOwotfQotCi1jbGFzcyBPYmplY3RTdG9yZUtleUN1
cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVLZXlDdXJzb3JJ
bXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCh0aGlzKSk7Ci0g
ICAgfQotCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVl
KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSBPVkVSUklERQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1faWRlbnRpZmllcjsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50
Um93KCk7Ci0KLXByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlv
bnMpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9u
cykKLSAgICB7Ci0gICAgfQotCi0gICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKGNvbnN0IE9i
amVjdFN0b3JlS2V5Q3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1v
bihvdGhlcikKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlm
aWVyPiBtX2lkZW50aWZpZXI7Ci19OwotCi1ib29sIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6
bG9hZEN1cnJlbnRSb3coKQotewotICAgIGNvbnN0IGNoYXIqIGtleVBvc2l0aW9uID0gbV9pdGVy
YXRvci0+a2V5KCkuYmVnaW4oKTsKLSAgICBjb25zdCBjaGFyKiBrZXlMaW1pdCA9IG1faXRlcmF0
b3ItPmtleSgpLmVuZCgpOwotCi0gICAgT2JqZWN0U3RvcmVEYXRhS2V5IG9iamVjdFN0b3JlRGF0
YUtleTsKLSAgICBrZXlQb3NpdGlvbiA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKGtleVBv
c2l0aW9uLCBrZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0YUtleSk7Ci0gICAgaWYgKCFrZXlQb3Np
dGlvbikgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFk
RXJyb3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9jdXJyZW50S2V5
ID0gb2JqZWN0U3RvcmVEYXRhS2V5LnVzZXJLZXkoKTsKLQotICAgIGludDY0X3QgdmVyc2lvbjsK
LSAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3It
PnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7Ci0g
ICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBGSVhNRTogVGhpcyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVjb2RlZDsgdHJ5
IGFuZCBvcHRpbWl6ZS4KLSAgICBtX2lkZW50aWZpZXIgPSBMZXZlbERCUmVjb3JkSWRlbnRpZmll
cjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIEN1
cnNvckltcGxDb21tb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0
b3JlQ3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0
aW9ucykpOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6
OkN1cnNvcj4gY2xvbmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmpl
Y3RTdG9yZUN1cnNvckltcGwodGhpcykpOwotICAgIH0KLQotICAgIC8vIEN1cnNvckltcGxDb21t
b24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSBPVkVSUklERQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKLSAgICB9Ci0gICAgdmlydHVhbCBib29s
IGxvYWRDdXJyZW50Um93KCk7Ci0KLXByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBs
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1
cnNvck9wdGlvbnMpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vy
c29yT3B0aW9ucykKLSAgICB7Ci0gICAgfQotCi0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKGNv
bnN0IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENv
bW1vbihvdGhlcikKLSAgICAgICAgLCBtX2N1cnJlbnRWYWx1ZShvdGhlci0+bV9jdXJyZW50VmFs
dWUpCi0gICAgewotICAgIH0KLQotICAgIFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKLSAgICBSZWZQ
dHI8TGV2ZWxEQlJlY29yZElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsKLX07Ci0KLWJvb2wgT2Jq
ZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhciog
a2V5UG9zaXRpb24gPSBtX2l0ZXJhdG9yLT5rZXkoKS5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIq
IGtleUxpbWl0ID0gbV9pdGVyYXRvci0+a2V5KCkuZW5kKCk7Ci0KLSAgICBPYmplY3RTdG9yZURh
dGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5OwotICAgIGtleVBvc2l0aW9uID0gT2JqZWN0U3RvcmVE
YXRhS2V5OjpkZWNvZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0LCAmb2JqZWN0U3RvcmVEYXRhS2V5
KTsKLSAgICBpZiAoIWtleVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBtX2N1cnJlbnRLZXkgPSBvYmplY3RTdG9yZURhdGFLZXkudXNlcktleSgpOwotCi0g
ICAgaW50NjRfdCB2ZXJzaW9uOwotICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNv
ZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgp
LmVuZCgpLCB2ZXJzaW9uKTsKLSAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3
YXMganVzdCBkZWNvZGVkOyB0cnkgYW5kIG9wdGltaXplLgotICAgIG1faWRlbnRpZmllciA9IExl
dmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkp
LCB2ZXJzaW9uKTsKLQotICAgIG1fY3VycmVudFZhbHVlID0gZGVjb2RlU3RyaW5nKHZhbHVlUG9z
aXRpb24sIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWNsYXNzIEluZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGNyZWF0
ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEtl
eUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGNsb25lKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKHRoaXMpKTsK
LSAgICB9Ci0KLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBTdHJpbmcgdmFs
dWUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5
OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJv
dygpOwotCi1wcml2YXRlOgotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAg
ICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCi0gICAg
ewotICAgIH0KLQotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChjb25zdCBJbmRleEtleUN1cnNvcklt
cGwqIG90aGVyKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCi0gICAgICAgICwg
bV9wcmltYXJ5S2V5KG90aGVyLT5tX3ByaW1hcnlLZXkpCi0gICAgewotICAgIH0KLQotICAgIFJl
ZlB0cjxJREJLZXk+IG1fcHJpbWFyeUtleTsKLX07Ci0KLWJvb2wgSW5kZXhLZXlDdXJzb3JJbXBs
Ojpsb2FkQ3VycmVudFJvdygpCi17Ci0gICAgY29uc3QgY2hhcioga2V5UG9zaXRpb24gPSBtX2l0
ZXJhdG9yLT5rZXkoKS5iZWdpbigpOwotICAgIGNvbnN0IGNoYXIqIGtleUxpbWl0ID0gbV9pdGVy
YXRvci0+a2V5KCkuZW5kKCk7Ci0KLSAgICBJbmRleERhdGFLZXkgaW5kZXhEYXRhS2V5OwotICAg
IGtleVBvc2l0aW9uID0gSW5kZXhEYXRhS2V5OjpkZWNvZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0
LCAmaW5kZXhEYXRhS2V5KTsKLQotICAgIG1fY3VycmVudEtleSA9IGluZGV4RGF0YUtleS51c2Vy
S2V5KCk7Ci0KLSAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247Ci0gICAgY29uc3QgY2hhciog
dmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCks
IG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIGluZGV4RGF0YVZlcnNpb24pOwotICAgIGlmICgh
dmFsdWVQb3NpdGlvbikgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5n
U3RvcmVSZWFkRXJyb3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmFs
dWVQb3NpdGlvbiA9IGRlY29kZUlEQktleSh2YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1
ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkpOwotICAgIGlmICghdmFsdWVQb3NpdGlvbikgewotICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVmVjdG9yPGNoYXI+IHByaW1hcnlMZXZl
bERCS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoaW5kZXhEYXRhS2V5LmRhdGFiYXNl
SWQoKSwgaW5kZXhEYXRhS2V5Lm9iamVjdFN0b3JlSWQoKSwgKm1fcHJpbWFyeUtleSk7Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+Z2V0KHByaW1h
cnlMZXZlbERCS2V5LCByZXN1bHQpKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZSht
X2l0ZXJhdG9yLT5rZXkoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
bnQ2NF90IG9iamVjdFN0b3JlRGF0YVZlcnNpb247Ci0gICAgY29uc3QgY2hhciogdCA9IGRlY29k
ZVZhckludChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBvYmplY3RTdG9yZURhdGFWZXJz
aW9uKTsKLSAgICBpZiAoIXQpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChvYmplY3RTdG9yZURhdGFWZXJzaW9uICE9IGluZGV4RGF0YVZlcnNpb24pIHsKLSAgICAg
ICAgbV90cmFuc2FjdGlvbi0+cmVtb3ZlKG1faXRlcmF0b3ItPmtleSgpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1jbGFzcyBJbmRleEN1
cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBj
dXJzb3JPcHRpb25zKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBjbG9uZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluZGV4Q3Vyc29ySW1wbCh0aGlzKSk7Ci0gICAgfQotCi0gICAgLy8gQ3Vyc29ySW1wbENv
bW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX3ByaW1h
cnlLZXk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9Ci0gICAgYm9vbCBsb2FkQ3VycmVudFJvdygp
OwotCi1wcml2YXRlOgotICAgIEluZGV4Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6
IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCi0gICAgewotICAg
IH0KLQotICAgIEluZGV4Q3Vyc29ySW1wbChjb25zdCBJbmRleEN1cnNvckltcGwqIG90aGVyKQot
ICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCi0gICAgICAgICwgbV9wcmltYXJ5S2V5
KG90aGVyLT5tX3ByaW1hcnlLZXkpCi0gICAgICAgICwgbV92YWx1ZShvdGhlci0+bV92YWx1ZSkK
LSAgICAgICAgLCBtX3ByaW1hcnlMZXZlbERCS2V5KG90aGVyLT5tX3ByaW1hcnlMZXZlbERCS2V5
KQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCS2V5PiBtX3ByaW1hcnlLZXk7Ci0gICAg
U3RyaW5nIG1fdmFsdWU7Ci0gICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUxldmVsREJLZXk7Ci19
OwotCi1ib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQotewotICAgIGNvbnN0
IGNoYXIqIGtleVBvc2l0aW9uID0gbV9pdGVyYXRvci0+a2V5KCkuYmVnaW4oKTsKLSAgICBjb25z
dCBjaGFyKiBrZXlMaW1pdCA9IG1faXRlcmF0b3ItPmtleSgpLmVuZCgpOwotCi0gICAgSW5kZXhE
YXRhS2V5IGluZGV4RGF0YUtleTsKLSAgICBrZXlQb3NpdGlvbiA9IEluZGV4RGF0YUtleTo6ZGVj
b2RlKGtleVBvc2l0aW9uLCBrZXlMaW1pdCwgJmluZGV4RGF0YUtleSk7Ci0KLSAgICBtX2N1cnJl
bnRLZXkgPSBpbmRleERhdGFLZXkudXNlcktleSgpOwotCi0gICAgY29uc3QgY2hhciogdmFsdWVQ
b3NpdGlvbiA9IG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKTsKLSAgICBjb25zdCBjaGFyKiB2
YWx1ZUxpbWl0ID0gbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKTsKLQotICAgIGludDY0X3QgaW5k
ZXhEYXRhVmVyc2lvbjsKLSAgICB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KHZhbHVlUG9z
aXRpb24sIHZhbHVlTGltaXQsIGluZGV4RGF0YVZlcnNpb24pOwotICAgIGlmICghdmFsdWVQb3Np
dGlvbikgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFk
RXJyb3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHZhbHVlUG9zaXRpb24g
PSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgbV9wcmltYXJ5S2V5KTsK
LSAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIG1fcHJpbWFyeUxldmVsREJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShp
bmRleERhdGFLZXkuZGF0YWJhc2VJZCgpLCBpbmRleERhdGFLZXkub2JqZWN0U3RvcmVJZCgpLCAq
bV9wcmltYXJ5S2V5KTsKLQotICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7Ci0gICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5nZXQobV9wcmltYXJ5TGV2ZWxEQktleSwgcmVzdWx0KSkgewotICAgICAgICBt
X3RyYW5zYWN0aW9uLT5yZW1vdmUobV9pdGVyYXRvci0+a2V5KCkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOwotICAg
IGNvbnN0IGNoYXIqIHQgPSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQo
KSwgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbik7Ci0gICAgaWYgKCF0KSB7Ci0gICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAob2JqZWN0U3RvcmVEYXRhVmVyc2lvbiAhPSBpbmRl
eERhdGFWZXJzaW9uKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJlbW92ZShtX2l0ZXJhdG9y
LT5rZXkoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3ZhbHVlID0g
ZGVjb2RlU3RyaW5nKHQsIHJlc3VsdC5lbmQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yT3B0
aW9ucyYgY3Vyc29yT3B0aW9ucykKLXsKLSAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiBy
YW5nZS0+bG93ZXIoKTsKLSAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBw
ZXIoKTsKLSAgICBjdXJzb3JPcHRpb25zLmZvcndhcmQgPSAoZGlyZWN0aW9uID09IElEQkN1cnNv
cjo6TkVYVF9OT19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVCk7Ci0g
ICAgY3Vyc29yT3B0aW9ucy51bmlxdWUgPSAoZGlyZWN0aW9uID09IElEQkN1cnNvcjo6TkVYVF9O
T19EVVBMSUNBVEUgfHwgZGlyZWN0aW9uID09IElEQkN1cnNvcjo6UFJFVl9OT19EVVBMSUNBVEUp
OwotCi0gICAgaWYgKCFsb3dlckJvdW5kKSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
bWluSURCS2V5KCkpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSB0cnVlOyAvLyBO
b3QgaW5jbHVkZWQuCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkg
PSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAq
cmFuZ2UtPmxvd2VyKCkpOwotICAgICAgICBjdXJzb3JPcHRpb25zLmxvd09wZW4gPSByYW5nZS0+
bG93ZXJPcGVuKCk7Ci0gICAgfQotCi0gICAgaWYgKCF1cHBlckJvdW5kKSB7Ci0gICAgICAgIGN1
cnNvck9wdGlvbnMuaGlnaEtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIG1heElEQktleSgpKTsKLQotICAgICAgICBpZiAoY3Vyc29yT3B0
aW9ucy5mb3J3YXJkKQotICAgICAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IHRydWU7
IC8vIE5vdCBpbmNsdWRlZC4KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBuZWVk
IGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlMZXNz
VGhhbk9yRXF1YWwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgY3Vyc29yT3B0
aW9ucy5oaWdoS2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAqcmFuZ2UtPnVwcGVyKCkpOwotICAgICAg
ICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwotCi0gICAgICAg
IGlmICghY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7Ci0gICAgICAgICAgICAvLyBGb3IgcmV2ZXJz
ZSBjdXJzb3JzLCB3ZSBuZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IGZvdW5kSGlnaEtleTsKLSAgICAgICAgICAgIGlmICghZmluZEdyZWF0ZXN0S2V5TGVz
c1RoYW5PckVxdWFsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXksIGZvdW5kSGln
aEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyBJ
ZiB0aGUgdGFyZ2V0IGtleSBzaG91bGQgbm90IGJlIGluY2x1ZGVkLCBidXQgd2UgZW5kIHVwIHdp
dGggYSBzbWFsbGVyIGtleSwgd2Ugc2hvdWxkIGluY2x1ZGUgdGhhdC4KLSAgICAgICAgICAgIGlm
IChjdXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5
LCBjdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKLSAgICAgICAgICAgICAgICBjdXJzb3JPcHRp
b25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGlnaEtl
eSA9IGZvdW5kSGlnaEtleTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbiwgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLXsKLSAgICBBU1NFUlQodHJh
bnNhY3Rpb24pOwotICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigp
OwotICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwotICAgIGN1
cnNvck9wdGlvbnMuZm9yd2FyZCA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RV
UExJQ0FURSB8fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUKTsKLSAgICBjdXJzb3JPcHRp
b25zLnVuaXF1ZSA9IChkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpORVhUX05PX0RVUExJQ0FURSB8
fCBkaXJlY3Rpb24gPT0gSURCQ3Vyc29yOjpQUkVWX05PX0RVUExJQ0FURSk7Ci0KLSAgICBpZiAo
IWxvd2VyQm91bmQpIHsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dLZXkgPSBJbmRleERhdGFL
ZXk6OmVuY29kZU1pbktleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLSAg
ICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gZmFsc2U7IC8vIEluY2x1ZGVkLgotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGN1cnNvck9wdGlvbnMubG93S2V5ID0gSW5kZXhEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgKnJhbmdlLT5sb3dlcigpKTsK
LSAgICAgICAgY3Vyc29yT3B0aW9ucy5sb3dPcGVuID0gcmFuZ2UtPmxvd2VyT3BlbigpOwotICAg
IH0KLQotICAgIGlmICghdXBwZXJCb3VuZCkgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hL
ZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkKTsKLSAgICAgICAgY3Vyc29yT3B0aW9ucy5oaWdoT3BlbiA9IGZhbHNlOyAvLyBJ
bmNsdWRlZC4KLQotICAgICAgICBpZiAoIWN1cnNvck9wdGlvbnMuZm9yd2FyZCkgeyAvLyBXZSBu
ZWVkIGEga2V5IHRoYXQgZXhpc3RzLgotICAgICAgICAgICAgaWYgKCFmaW5kR3JlYXRlc3RLZXlM
ZXNzVGhhbk9yRXF1YWwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMuaGlnaEtleSwgY3Vyc29y
T3B0aW9ucy5oaWdoS2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBJbmRleERhdGFLZXk6OmVuY29k
ZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCAqcmFuZ2UtPnVwcGVyKCkpOwot
ICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hPcGVuID0gcmFuZ2UtPnVwcGVyT3BlbigpOwotCi0g
ICAgICAgIFZlY3RvcjxjaGFyPiBmb3VuZEhpZ2hLZXk7Ci0gICAgICAgIGlmICghZmluZEdyZWF0
ZXN0S2V5TGVzc1RoYW5PckVxdWFsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zLmhpZ2hLZXks
IGZvdW5kSGlnaEtleSkpIC8vIFNlZWsgdG8gdGhlICpsYXN0KiBrZXkgaW4gdGhlIHNldCBvZiBu
b24tdW5pcXVlIGtleXMuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIHRhcmdldCBrZXkgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCwgYnV0IHdlIGVuZCB1cCB3
aXRoIGEgc21hbGxlciBrZXksIHdlIHNob3VsZCBpbmNsdWRlIHRoYXQuCi0gICAgICAgIGlmIChj
dXJzb3JPcHRpb25zLmhpZ2hPcGVuICYmIGNvbXBhcmVJbmRleEtleXMoZm91bmRIaWdoS2V5LCBj
dXJzb3JPcHRpb25zLmhpZ2hLZXkpIDwgMCkKLSAgICAgICAgICAgIGN1cnNvck9wdGlvbnMuaGln
aE9wZW4gPSBmYWxzZTsKLQotICAgICAgICBjdXJzb3JPcHRpb25zLmhpZ2hLZXkgPSBmb3VuZEhp
Z2hLZXk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KLQotUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFu
Z2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgSURCX1RS
QUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKLSAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBDdXJzb3JPcHRpb25zIGN1
cnNvck9wdGlvbnM7Ci0gICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JPcHRpb25zKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPE9iamVjdFN0b3Jl
Q3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxE
QlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKLSAgICBpZiAoIWN1cnNvci0+Zmlyc3RTZWVr
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0
aW9uKQotewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVj
dFN0b3JlS2V5Q3Vyc29yIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNh
Y3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7
Ci0gICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotICAgIGlmICghb2JqZWN0U3RvcmVD
dXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIFJlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3Jl
S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7
Ci0gICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIElEQl9U
UkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yIik7Ci0gICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29yT3B0aW9ucyBjdXJz
b3JPcHRpb25zOwotICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlv
biwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwg
Y3Vyc29yT3B0aW9ucykpCi0gICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxJbmRleEtleUN1
cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFu
c2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7Ci0gICAgaWYgKCFjdXJzb3ItPmZpcnN0U2VlaygpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwotfQotCi1Q
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGly
ZWN0aW9uKQotewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbklu
ZGV4Q3Vyc29yIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24g
PSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAg
Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwotICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25z
KGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
cmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCi0gICAgICAgIHJldHVybiAwOwotICAg
IFJlZlB0cjxJbmRleEN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRl
KGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7Ci0gICAgaWYgKCFjdXJzb3ItPmZp
cnN0U2VlaygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBjdXJzb3IucmVsZWFz
ZSgpOwotfQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKCkKLXsKLSAgICByZXR1cm4gVHJh
bnNhY3Rpb246OmNyZWF0ZSh0aGlzKTsKLX0KLQotUGFzc1JlZlB0cjxJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmNyZWF0ZShJREJMZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlvbihiYWNraW5nU3RvcmUpKTsKLX0KLQotSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNr
aW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9y
ZSkKLXsKLX0KLQotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVn
aW4oKQotewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmJlZ2luIik7Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKLSAgICBtX3RyYW5zYWN0
aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0
KCkpOwotfQotCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21t
aXQoKQotewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmNvbW1pdCIpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLSAgICBib29sIHJlc3Vs
dCA9IG1fdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpyb2xsYmFjaygpCi17Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2siKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlv
bik7Ci0gICAgbV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKLSAgICBtX3RyYW5zYWN0aW9uLmNs
ZWFyKCk7Ci19Ci0KLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhp
c3RzKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBwYXRoQmFzZUFyZykKLXsKLSAgICBTdHJpbmcgcGF0aEJhc2UgPSBwYXRoQmFzZUFy
ZzsKLQotICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIHNhbWUgTGV2ZWxE
QiBkYXRhYmFzZSBmb3IgYWxsIG9yaWdpbnMuCi0gICAgU3RyaW5nIHBhdGggPSBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZp
ZXIoKSArICIuaW5kZXhlZGRiLmxldmVsZGIiKTsKLQotICAgIC8vIEZJWE1FOiB0aGlzIGlzIGNo
ZWNraW5nIGZvciBwcmVzZW5jZSBvZiB0aGUgZG9tYWluLCBub3QgdGhlIGRhdGFiYXNlIGl0c2Vs
ZgotICAgIHJldHVybiBmaWxlRXhpc3RzKHBhdGgrIi9DVVJSRU5UIik7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyNmQ2ZjkwYTliOWNjM2M0MzlmYWI5MjFiZDU3M2M2YjdhMGExODUzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
X2gKLSNkZWZpbmUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKLWNsYXNzIExldmVsREJEYXRhYmFzZTsKLWNsYXNzIExl
dmVsREJUcmFuc2FjdGlvbjsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsKLQotY2xhc3Mg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9y
aWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZp
ZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwotICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNr
aW5nU3RvcmUoKTsKLQotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VOYW1l
cygpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSopOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJ
REJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJz
aW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKLSAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgdmlydHVhbCBWZWN0
b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJh
c2VJZCk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVt
ZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBj
cmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9i
amVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmly
dHVhbCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGludDY0X3Qg
Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1
YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
LCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOwotCi0gICAgdmlydHVhbCBWZWN0b3I8SURC
SW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5
KTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1
cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1
cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNv
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Bl
bkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24oKTsKLQotICAgIHN0YXRpYyBib29sIGJh
Y2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBwYXRoQmFzZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBJREJMZXZlbERCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwg
UGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+KTsKLQotcHJpdmF0ZToKLSAgICBib29sIGZpbmRL
ZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpOwotCi0gICAgU3RyaW5nIG1f
aWRlbnRpZmllcjsKLSAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7
Ci0gICAgT3duUHRyPExldmVsREJEYXRhYmFzZT4gbV9kYjsKLSAgICBPd25QdHI8TGV2ZWxEQkNv
bXBhcmF0b3I+IG1fY29tcGFyYXRvcjsKLQotICAgIGNsYXNzIFRyYW5zYWN0aW9uIDogcHVibGlj
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZShJREJMZXZlbERCQmFja2luZ1N0b3Jl
Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBiZWdpbigpOwotICAgICAgICB2aXJ0dWFsIGJvb2wg
Y29tbWl0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpOwotCi0gICAgICAgIHN0
YXRpYyBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbio+
KHRyYW5zYWN0aW9uKS0+bV90cmFuc2FjdGlvbi5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgVHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOwotICAg
ICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUmVm
UHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKLSAgICB9OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0KLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLSNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIElEQkxldmVsREJCYWNraW5n
U3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA5NzZhZDBiZGI3Yjk3Yjhi
ZGFiNzIyMmU5OTA2OTVkZWNjYmE1YTYyLi4xMmMzNzNmZTA2MjEwNjM0MWY4ZDMyM2Y5MGNmODJk
MGE4MzljZWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtODksMTAgKzg5LDkg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOwotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3ItPmNsb3NlKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHdpcmVEYXRhID0g
b2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRPYmplY3RTdG9yZVJlY29yZCh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQo
KSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkpOworICAgIFN0cmluZyB3aXJlRGF0YSA9IG9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwgKmtleSk7CiAgICAgaWYgKHdpcmVEYXRhLmlzTnVsbCgpKSB7CiAgICAgICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE2MCw3ICsxNTksNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgd3JpdGVJbmRl
eEtleXMoY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
IHJlY29yZElkZW50aWZpZXIsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpIGNvbnN0CisgICAgYm9vbCB3cml0ZUluZGV4S2V5cyhjb25z
dCBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIElE
QkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQp
IGNvbnN0CiAgICAgewogICAgICAgICBpbnQ2NF90IGluZGV4SWQgPSBtX2luZGV4TWV0YWRhdGEu
aWQ7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmRleEtleXMuc2l6ZSgpOyAr
K2kpIHsKQEAgLTIzNyw3ICsyMzYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwogICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogCiAgICAgLy8gRklYTUU6IFRo
aXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUg
aWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KLSAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIgPSBi
YWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0g
SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKTsKICAgICBpZiAoIWJh
Y2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCksICpwcmltYXJ5S2V5LCByZWNv
cmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzMwLDcgKzMyOSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
CiAKICAgICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsKIAotICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmll
ciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50
aWZpZXIoKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBy
ZWNvcmRJZGVudGlmaWVyID0gSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpjcmVh
dGUoKTsKICAgICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlk
KCksICprZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNP
TlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikp
OwogICAgICAgICByZXR1cm47CkBAIC0zNDUsNyArMzQ0LDcgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjwKIAogICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24u
ICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBl
cnJvci4KIAotICAgIGlmICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5wdXRPYmplY3RT
dG9yZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHZhbHVlLT50b1dp
cmVTdHJpbmcoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKKyAgICBpZiAoIW9iamVjdFN0
b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQo
KSwgKmtleSwgdmFsdWUtPnRvV2lyZVN0cmluZygpLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkg
ewogICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3Jp
dGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpOwogICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoZXJyb3IpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwpAQCAtMzg4LDI0
ICszODcsMjIgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlv
bihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW4KIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewog
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwi
KTsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXI+IHJlY29yZElkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3Jk
SWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBr
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vy
c29yKSB7CiAKICAgICAgICAgZG8gewotICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJh
Y2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CisgICAgICAg
ICAgICByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlm
aWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5k
ZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAh
PSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERh
dGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+a2V5LCByZWNvcmRJ
ZGVudGlmaWVyLmdldCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3Ms
IHN1Y2Nlc3MpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBvYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9y
ZS0+aWQoKSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CisgICAgICAgICAgICBvYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlk
KCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwogCiAgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdT
dG9yZUN1cnNvci0+Y29udGludWVGdW5jdGlvbigwKSk7Ci0KLSAgICAgICAgYmFja2luZ1N0b3Jl
Q3Vyc29yLT5jbG9zZSgpOwogICAgIH0KIAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CkBA
IC01ODEsNyArNTc4LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHQKICAgICAgICAgKytjb3Vu
dDsKICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkp
OwogCi0gICAgYmFja2luZ1N0b3JlQ3Vyc29yLT5jbG9zZSgpOwogICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGNvdW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBlMTY1
MmQ2OTVkZjg1MzQxYjM2MDg2ZDg2NzliMTM3NDQwMmZmOGViLi5iYTg3NWExNzJmNzZiM2ZmNjU5
NjJlNmE5OTk2ZGQzMzNmZWJiYmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAt
NDksNyArNDksNyBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZQogICAgICwgbV9tb2RlKG1vZGUp
CiAgICAgLCBtX3N0YXRlKFVudXNlZCkKICAgICAsIG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAg
LCBtX3RyYW5zYWN0aW9uKGRhdGFiYXNlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlVHJhbnNhY3Rp
b24oKSkKKyAgICAsIG1fdHJhbnNhY3Rpb24oZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpLmdldCgp
KQogICAgICwgbV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRh
c2tUaW1lckZpcmVkKQogICAgICwgbV90YXNrRXZlbnRUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6dGFza0V2ZW50VGltZXJGaXJlZCkKICAgICAsIG1fcGVuZGluZ1ByZWVt
cHRpdmVFdmVudHMoMCkKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAg
bV90YXNrRXZlbnRUaW1lci5zdG9wKCk7CiAKICAgICBpZiAod2FzUnVubmluZykKLSAgICAgICAg
bV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbi5yb2xsYmFj
aygpOwogCiAgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgogICAgIHdoaWxlICgh
bV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCiAgICAgYm9vbCB1bnVzZWQgPSBtX3N0
YXRlID09IFVudXNlZDsKICAgICBtX3N0YXRlID0gRmluaXNoZWQ7CiAKLSAgICBib29sIGNvbW1p
dHRlZCA9IHVudXNlZCB8fCBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBib29sIGNvbW1p
dHRlZCA9IHVudXNlZCB8fCBtX3RyYW5zYWN0aW9uLmNvbW1pdCgpOwogCiAgICAgLy8gQmFja2lu
ZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMpIG11c3QgYmUgcmVsZWFzZWQgYmVm
b3JlIHNjcmlwdCBjYWxsYmFja3MKICAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3JpcHQgY2Fs
bGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5nIHN0b3Jl
CkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNr
VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPioKICAgICBBU1NFUlQo
IWlzVGFza1F1ZXVlRW1wdHkoKSk7CiAKICAgICBpZiAobV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcp
IHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICAgICAgbV90cmFuc2FjdGlv
bi5iZWdpbigpOwogICAgICAgICBtX3N0YXRlID0gUnVubmluZzsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuaAppbmRleCA0ZTRkZGVjYzExMjM2OTZjYTQ2NTc1M2RiNWYxMjkyYmMzY2Uz
NjgxLi5jOGZiYmY1M2NjZGIyYTFmMzQxZGRlNzI4OWRmODI4YjYwODEwYjA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFBl
bmRpbmdFdmVudHMoaW50KTsKICAgICB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgpIHsgbV9wZW5k
aW5nUHJlZW1wdGl2ZUV2ZW50cysrOyB9CiAgICAgdm9pZCBkaWRDb21wbGV0ZVByZWVtcHRpdmVF
dmVudCgpIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJl
ZW1wdGl2ZUV2ZW50cyA+PSAwKTsgfQotICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsg
fQorICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCkgeyByZXR1cm4gJm1fdHJhbnNhY3Rpb247IH0KIAogcHJpdmF0ZToKICAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMs
IHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKQEAgLTEwMSw3
ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7
CiAgICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7CiAKLSAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247CiAKICAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0
aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgogICAgIFRpbWVyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IG1fdGFza1RpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNhYzcyNTJh
MzNhOTk4YWY0YjU2OGVhMWU2MjI2NjBiZDBhODBiZTYuLjEzZjI5NWI0OGZiYzE3ZmZiMWFiZjYz
MDAyNGU2OWVmNDMyYWM4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE1NDAsOCArMTU0MCw3IEBA
CiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaCcsCiAgICAgICAg
ICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAnLAogICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaCcsCi0gICAgICAgICAgICAn
TW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAnLAotICAgICAgICAg
ICAgJ01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaCcsCiAgICAgICAgICAgICAnTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXggMWYxNjQwODQxMDY3YmRjZWFkMGY4
ZGRkODJhOTI3MjU1NzYyMTkyZS4uNGY5ZTkzZTFmNDkzNTY1MGM2MWE2NTI5ZmZmMzc1YmZkMmE0
OTVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFj
a2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFj
a2luZ1N0b3JlLmgKQEAgLTQzLDIzICs0MywyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGNyZWF0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYs
IGJvb2wgYXV0b0luY3JlbWVudCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgfQogCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29y
ZElkZW50aWZpZXIoKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcj4oKTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVS
ZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5JikgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jikg
T1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3Jk
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSBP
VkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29y
ZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKSBPVkVSUklERSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKSBPVkVSUklE
RSB7IH0KICAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBP
VkVSUklERSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQp
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0lu
T2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBm
b3VuZFJlY29yZElkZW50aWZpZXIpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUmVjb3JkSWRl
bnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZVJlY29yZENhbGxiYWNrJikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgZm9yRWFjaFJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBSZWNvcmRDYWxsYmFjayYpIE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBnZXRJbmRleGVz
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IHJl
dHVybiBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4oKTsgfQogICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KSBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IFJlY29yZElkZW50aWZpZXIqKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8SURC
S2V5PigpOyB9CiAgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5
S2V5KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172856</attachid>
            <date>2012-11-07 12:10:25 -0800</date>
            <delta_ts>2012-11-08 12:38:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101415-20121107120836.patch</filename>
            <type>text/plain</type>
            <size>111923</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTRhNTNlYjZjOTQ3Yzdi
MTBmMjVlNmE5Y2IxZGRjOTNjZmY4NjkzNS4uYTE0MzQxM2E2Mzg2YTA2Y2I5YjdmYTczNThmZDRj
ZTk4YWMwYmQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0MyBAQAogMjAxMi0xMS0wNyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgSW5kZXhlZERCOiBD
b21iaW5lIElEQkJhY2tpbmdTdG9yZSBhbmQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29tYmluZSBhYnN0cmFj
dCBpbnRlcmZhY2UgSURCQmFja2luZ1N0b3JlIHdpdGggaXRzIG9ubHkKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24sIElEQkxldmVsREJCYWNraW5nU3RvcmUsIHRvIHJlZHVjZSBjb2RlCisgICAgICAg
IGNvbXBsZXhpdHkuIFRoZSBsZWdhY3kgc3RydWN0dXJlIGV4aXN0ZWQgdG8gc3VwcG9ydCBhIFNR
TExpdGUKKyAgICAgICAgSURCQmFja2luZ1N0b3JlLCBidXQgaXQgaXMgbm8gbG9uZ2VyIHdvcnRo
IHRoZSBjb21wbGV4aXR5IHRvCisgICAgICAgIHN1cHBvcnQgdGhpcyBhYnN0cmFjdGlvbi4KKwor
ICAgICAgICBDaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEpIE1lcmdpbmcgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSBpbnRvIElEQkJhY2tpbmdTdG9yZS4KKworICAgICAgICAyKSBNZXJnZSB0b2dl
dGhlciBJREJCYWNraW5nU3RvcmUncyBpbm5lciBjbGFzc2VzOiBDdXJzb3IsCisgICAgICAgIFRy
YW5zYWN0aW9uLCBhbmQgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGZpZXIgd2l0aCB0aGVpciByZXNw
ZWN0aXZlCisgICAgICAgIHN1YmNsYXNzZXMgaW4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS4KKwor
ICAgICAgICAzKSBTaW1wbGlmeWluZyB0aGUgaW5uZXIgVHJhbnNhY3Rpb24gY2xhc3MgdG8gbm90
IGJlIHJlZmNvdW50ZWQgb3IKKyAgICAgICAgdmlydHVhbGl6ZWQsIHRvIGFsbG93IGl0IHRvIGJl
IGEgc2ltcGxlIGNvbmNyZXRlIG1lbWJlciBvZiBpdHMKKyAgICAgICAgb3duZXIsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMgcHVy
ZWx5IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVjb3JkSW50ZXJuYWxFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRVcE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjp+SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRNYXhPYmplY3RT
dG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5P
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldEluZGV4
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4SW5kZXhJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
QmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OkN1cnNvcjo6Zmlyc3RTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yOjpoYXZlRW50ZXJlZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjppc1Bhc3RCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUpOgorICAgICAgICAoT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpP
YmplY3RTdG9yZUtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RT
dG9yZUN1cnNvckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUN1cnNvckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6Ok9iamVjdFN0b3JlQ3Vyc29ySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKToKKyAg
ICAgICAgKEluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1
cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6
cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OnJlY29y
ZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjpJbmRl
eEtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChJbmRleEN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhD
dXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnBy
aW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpyZWNvcmRJZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6SW5kZXhDdXJzb3JJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OmluZGV4Q3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoUmVjb3JkSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZp
ZXI6On5SZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpzZXRQcmltYXJ5S2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6dmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6
OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJ
ZGVudGlmaWVyOjpSZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20pOgorICAgICAgICAoQ3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpwcmltYXJ5S2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjp+Q3Vyc29yKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworMjAxMi0xMS0wNyAgQWxlYyBG
bGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgSW5kZXhlZERCOiBSZW5h
bWUgbWV0aG9kcyBhbmQgcmVtb3ZlIGRlYWQgY29kZSBmcm9tIElEQkJhY2tpbmdTdG9yZQogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDg4CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYThmYWQ5MjE4YzM2NzY1YjYxNTRjZWE2NWQzZTRl
MTE1ZTlmZDFhMC4uM2U1MDZkNzA3M2U5YzhiZmNiNTdlYmM4MTZhYzhlOTljYzNhMWUxYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNiBAQAogMjAxMi0xMS0wNyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgSW5kZXhlZERCOiBD
b21iaW5lIElEQkJhY2tpbmdTdG9yZSBhbmQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIG1ldGhvZCB0
aGF0IGlzIG5vIGxvbmdlciBpbiB0aGUgYmFzZSBjbGFzcy4KKworICAgICAgICAqIHRlc3RzL0lE
QkZha2VCYWNraW5nU3RvcmUuaDoKKworMjAxMi0xMS0wNyAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0
dEBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgSW5kZXhlZERCOiBSZW5hbWUgbWV0aG9kcyBhbmQg
cmVtb3ZlIGRlYWQgY29kZSBmcm9tIElEQkJhY2tpbmdTdG9yZQogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDg4CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDZiNWE2
MmEwNzZlMWZhZjVjZTQxODMyNzg3YTczYTQxOWVkY2JjNDQuLjk0OTA4ZmM2YzI0MTMwNTczNmQ1
OWE3YzEyYmYxOTZkMTcxMWRkNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1
ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0j
aWYgVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiSGlz
dG9ncmFtU3VwcG9ydC5oIgpAQCAtMzUsNyArMzQsNiBAQAogI2luY2x1ZGUgIklEQktleS5oIgog
I2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1
ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5n
LmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKICNpbmNsdWRlICJJREJUcmFjaW5nLmgiCkBA
IC01MywxNSArNTEsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7CiAKIGNv
bnN0IGludDY0X3QgS2V5R2VuZXJhdG9ySW5pdGlhbE51bWJlciA9IDE7IC8vIEZyb20gdGhlIElu
ZGV4ZWREQiBzcGVjaWZpY2F0aW9uLgogCi1lbnVtIElEQkxldmVsREJCYWNraW5nU3RvcmVJbnRl
cm5hbEVycm9yVHlwZSB7Ci0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvciwKLSAg
ICBJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvciwKLSAgICBJREJMZXZlbERCQmFja2lu
Z1N0b3JlQ29uc2lzdGVuY3lFcnJvciwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJu
YWxFcnJvck1heCwKK2VudW0gSURCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgeworICAg
IElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvciwKKyAgICBJREJCYWNraW5nU3RvcmVXcml0ZUVycm9y
LAorICAgIElEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IsCisgICAgSURCQmFja2luZ1N0
b3JlSW50ZXJuYWxFcnJvck1heCwKIH07Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVjb3JkSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgdHlwZSkKK3N0
YXRpYyBpbmxpbmUgdm9pZCByZWNvcmRJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZUludGVy
bmFsRXJyb3JUeXBlIHR5cGUpCiB7Ci0gICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51
bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5JbnRlcm5hbEVycm9yIiwg
dHlwZSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgpOworICAgIEhpc3Rv
Z3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNr
aW5nU3RvcmUuSW50ZXJuYWxFcnJvciIsIHR5cGUsIElEQkJhY2tpbmdTdG9yZUludGVybmFsRXJy
b3JNYXgpOwogfQogCiAvLyBVc2UgdG8gc2lnbmFsIGNvbmRpdGlvbnMgdGhhdCB1c3VhbGx5IGlu
ZGljYXRlIGRldmVsb3BlciBlcnJvciwgYnV0IGNvdWxkIGJlIGNhdXNlZCBieSBkYXRhIGNvcnJ1
cHRpb24uCkBAIC0xODcsNyArMTg1LDcgQEAgc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZl
bERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKICAgICBpZiAoIWdldEludChk
YiwgbWV0YURhdGFLZXksIHNjaGVtYVZlcnNpb24pKSB7CiAgICAgICAgIHNjaGVtYVZlcnNpb24g
PSBsYXRlc3RTY2hlbWFWZXJzaW9uOwogICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0YURhdGFL
ZXksIGxhdGVzdFNjaGVtYVZlcnNpb24pKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFsRXJy
b3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjA0LDcgKzIwMiw3IEBAIHN0YXRpYyBib29s
IHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4p
CiAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IHZhbHVlOwogICAgICAgICAgICAgICAgIGJv
b2wgb2sgPSB0cmFuc2FjdGlvbi0+Z2V0KGl0LT5rZXkoKSwgdmFsdWUpOwogICAgICAgICAgICAg
ICAgIGlmICghb2spIHsKLSAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGludCBkYXRhYmFz
ZUlkID0gZGVjb2RlSW50KHZhbHVlLmJlZ2luKCksIHZhbHVlLmVuZCgpKTsKQEAgLTIxMiwxMyAr
MjEwLDEzIEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwg
Y29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPnB1dChp
bnRWZXJzaW9uS2V5LCBlbmNvZGVWYXJJbnQoSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdElu
dFZlcnNpb24pKTsKICAgICAgICAgICAgICAgICBvayA9IHRyYW5zYWN0aW9uLT5nZXQoaXQtPmtl
eSgpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAg
ICAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sIG9rID0gdHJhbnNhY3Rpb24tPmNvbW1pdCgp
OwogICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICAgICAgICAgIEludGVy
bmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDcsNyArMjQ1LDcgQEAg
c3RhdGljIGludDY0X3QgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBj
b25zdCBWZWN0b3I8Y2hhcj4mIG1heE8KICAgICByZXR1cm4gbWF4T2JqZWN0U3RvcmVJZDsKIH0K
IAotSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZShjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgUGFzc093
blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiKQorSURCQmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3Rv
cmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3Rv
cnksIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYikKICAgICA6IG1faWRlbnRpZmllcihp
ZGVudGlmaWVyKQogICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCiAgICAgLCBtX2RiKGRiKQpAQCAt
MjU1LDcgKzI1MywxMSBAQCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdAogICAgIG1fZmFjdG9yeS0+
YWRkSURCQmFja2luZ1N0b3JlKGlkZW50aWZpZXIsIHRoaXMpOwogfQogCi1JREJMZXZlbERCQmFj
a2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpCitJREJCYWNraW5nU3RvcmU6OklE
QkJhY2tpbmdTdG9yZSgpCit7Cit9CisKK0lEQkJhY2tpbmdTdG9yZTo6fklEQkJhY2tpbmdTdG9y
ZSgpCiB7CiAgICAgbV9mYWN0b3J5LT5yZW1vdmVJREJCYWNraW5nU3RvcmUobV9pZGVudGlmaWVy
KTsKIApAQCAtMjY0LDMyICsyNjYsMzIgQEAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxl
dmVsREJCYWNraW5nU3RvcmUoKQogICAgIG1fY29tcGFyYXRvci5jbGVhcigpOwogfQogCi1lbnVt
IElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuUmVzdWx0IHsKLSAgICBJREJMZXZlbERCQmFja2lu
Z1N0b3JlT3Blbk1lbW9yeSwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlblN1Y2Nlc3Ms
Ci0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWREaXJlY3RvcnksCi0gICAgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRVbmtub3duU2NoZW1hLAotICAgIElEQkxldmVs
REJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cERlc3Ryb3lGYWlsZWQsCi0gICAgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZU9wZW5DbGVhbnVwUmVvcGVuRmFpbGVkLAotICAgIElEQkxldmVsREJCYWNraW5n
U3RvcmVPcGVuQ2xlYW51cFJlb3BlblN1Y2Nlc3MsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZU9wZW5NYXgsCitlbnVtIElEQkJhY2tpbmdTdG9yZU9wZW5SZXN1bHQgeworICAgIElEQkJhY2tp
bmdTdG9yZU9wZW5NZW1vcnksCisgICAgSURCQmFja2luZ1N0b3JlT3BlblN1Y2Nlc3MsCisgICAg
SURCQmFja2luZ1N0b3JlT3BlbkZhaWxlZERpcmVjdG9yeSwKKyAgICBJREJCYWNraW5nU3RvcmVP
cGVuRmFpbGVkVW5rbm93blNjaGVtYSwKKyAgICBJREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cERl
c3Ryb3lGYWlsZWQsCisgICAgSURCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5GYWlsZWQs
CisgICAgSURCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLAorICAgIElEQkJh
Y2tpbmdTdG9yZU9wZW5NYXgsCiB9OwogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIs
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSkKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBJREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVy
LCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuIik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3Rv
cmU6Om9wZW4iKTsKICAgICBTdHJpbmcgcGF0aEJhc2UgPSBwYXRoQmFzZUFyZzsKIAogICAgIE93
blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gY29tcGFyYXRvciA9IGFkb3B0UHRyKG5ldyBDb21wYXJh
dG9yKCkpOwogICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiOwogCiAgICAgaWYgKHBhdGhC
YXNlLmlzRW1wdHkoKSkgewotICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVt
ZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlT3Blbk1lbW9yeSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5N
YXgpOworICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2Vi
Q29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJCYWNraW5nU3RvcmVP
cGVuTWVtb3J5LCBJREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKICAgICAgICAgZGIgPSBMZXZlbERC
RGF0YWJhc2U6Om9wZW5Jbk1lbW9yeShjb21wYXJhdG9yLmdldCgpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAlcyIs
IHBhdGhCYXNlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6
aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVu
U3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWREaXJlY3RvcnksIElEQkxl
dmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3Bl
blN0YXR1cyIsIElEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWREaXJlY3RvcnksIElEQkJhY2tpbmdT
dG9yZU9wZW5NYXgpOwogICAgICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPigpOwogICAgICAgICB9CiAKQEAgLTI5OCwxOCArMzAwLDE4IEBAIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2lu
KiBzZWN1cml0CiAgICAgICAgIGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBh
cmF0b3IuZ2V0KCkpOwogICAgICAgICBpZiAoZGIgJiYgIWlzU2NoZW1hS25vd24oZGIuZ2V0KCkp
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1
bmtub3duIHNjaGVtYSwgdHJlYXRpbmcgaXQgYXMgZmFpbHVyZSB0byBvcGVuIik7Ci0gICAgICAg
ICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRl
eGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Bl
bkZhaWxlZFVua25vd25TY2hlbWEsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAg
ICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3Jl
LkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkJhY2tpbmdTdG9yZU9wZW5G
YWlsZWRVbmtub3duU2NoZW1hLCBJREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKICAgICAgICAgICAg
IGRiLnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChkYikKLSAgICAgICAgICAg
IEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWRE
Qi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuU3Vj
Y2VzcywgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAgICAgICAgSGlzdG9n
cmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tp
bmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCQmFja2luZ1N0b3JlT3BlblN1Y2Nlc3MsIElEQkJhY2tp
bmdTdG9yZU9wZW5NYXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
SW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgb3BlbiBmYWlsZWQsIGF0dGVtcHRpbmcgY2xlYW51cCIp
OwogICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gTGV2ZWxEQkRhdGFiYXNlOjpkZXN0cm95KHBh
dGgpOwogICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJJbmRleGVkREIgYmFja2luZyBzdG9yZSBjbGVhbnVwIGZhaWxlZCIpOwotICAgICAgICAg
ICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLklu
ZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuQ2xlYW51cERlc3Ryb3lGYWlsZWQsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsK
KyAgICAgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigi
V2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJCYWNraW5nU3Rv
cmVPcGVuQ2xlYW51cERlc3Ryb3lGYWlsZWQsIElEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKICAgICAg
ICAgICAgIH0KIApAQCAtMzE3LDEwICszMTksMTAgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXQK
ICAgICAgICAgICAgIGRiID0gTGV2ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3Iu
Z2V0KCkpOwogICAgICAgICAgICAgaWYgKCFkYikgewogICAgICAgICAgICAgICAgIExPR19FUlJP
UigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUgcmVvcGVuIGFmdGVyIHJlY292ZXJ5IGZhaWxlZCIp
OwotICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9u
KCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJC
YWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlbkZhaWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZU9wZW5NYXgpOworICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVu
dW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElE
QkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwUmVvcGVuRmFpbGVkLCBJREJCYWNraW5nU3RvcmVPcGVu
TWF4KTsKICAgICAgICAgICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dy
YW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMi
LCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLCBJREJMZXZl
bERCQmFja2luZ1N0b3JlT3Blbk1heCk7CisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0Ojpo
aXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5T
dGF0dXMiLCBJREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlblN1Y2Nlc3MsIElEQkJhY2tp
bmdTdG9yZU9wZW5NYXgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjksNyArMzMxLDcgQEAg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4o
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXQKIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgY29tcGFyYXRv
ciBuYW1lIGNoYW5nZXMuCiAKLSAgICBSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlKGFkb3B0UmVmKG5ldyBJREJMZXZlbERCQmFja2luZ1N0b3JlKGZpbGVJZGVudGlm
aWVyLCBmYWN0b3J5LCBkYi5yZWxlYXNlKCkpKSk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVmKG5ldyBJREJCYWNraW5nU3RvcmUoZmlsZUlkZW50aWZp
ZXIsIGZhY3RvcnksIGRiLnJlbGVhc2UoKSkpKTsKICAgICBiYWNraW5nU3RvcmUtPm1fY29tcGFy
YXRvciA9IGNvbXBhcmF0b3IucmVsZWFzZSgpOwogCiAgICAgaWYgKCFzZXRVcE1ldGFkYXRhKGJh
Y2tpbmdTdG9yZS0+bV9kYi5nZXQoKSwgZmlsZUlkZW50aWZpZXIpKQpAQCAtMzM4LDcgKzM0MCw3
IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0CiAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxl
YXNlKCk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERh
dGFiYXNlTmFtZXMoKQorVmVjdG9yPFN0cmluZz4gSURCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFz
ZU5hbWVzKCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBmb3VuZE5hbWVzOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBzdGFydEtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3Jp
Z2luKG1faWRlbnRpZmllcik7CkBAIC0zNjAsNyArMzYyLDcgQEAgVmVjdG9yPFN0cmluZz4gSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VOYW1lcygpCiAgICAgcmV0dXJuIGZvdW5k
TmFtZXM7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqIG1ldGFkYXRh
KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKiBtZXRhZGF0YSkKIHsKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBu
YW1lKTsKIApAQCAtMzcwLDEzICszNzIsMTMgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWIKIAog
ICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29k
ZShtZXRhZGF0YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgbWV0YWRh
dGEtPnZlcnNpb24pOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJC
YWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgb2sgPSBnZXRWYXJJbnQobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2Rl
KG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBtZXRh
ZGF0YS0+aW50VmVyc2lvbik7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgaWYgKG1ldGFkYXRhLT5pbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRl
ZmF1bHRJbnRWZXJzaW9uKQpAQCAtNDAyLDcgKzQwNCw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5l
d0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYikKICAgICByZXR1cm4gZGF0YWJhc2VJZDsK
IH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGlu
dFZlcnNpb24sIGludDY0X3QmIHJvd0lkKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCiB7CiAgICAgcm93SWQgPSBn
ZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOwogICAgIGlmIChyb3dJZCA8IDApCkBAIC00MTAs
MzggKzQxMiwzOCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogCiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7
CiAgICAgaWYgKCFwdXRJbnQobV9kYi5nZXQoKSwga2V5LCByb3dJZCkpIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgaWYgKCFwdXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiks
IHZlcnNpb24pKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRl
RXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChpbnRWZXJzaW9u
ID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKICAgICAgICAgaW50VmVyc2lv
biA9IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uOwogICAgIGlmICghcHV0
VmFySW50KG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0
YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBpbnRWZXJzaW9uKSkgewotICAgICAg
ICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVy
c2lvbikKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24o
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQs
IGludDY0X3QgaW50VmVyc2lvbikKIHsKICAgICBpZiAoaW50VmVyc2lvbiA9PSBJREJEYXRhYmFz
ZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCiAgICAgICAgIGludFZlcnNpb24gPSBJREJEYXRhYmFz
ZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbjsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlu
dFZlcnNpb24gPj0gMCwgImludFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KGludFZlcnNpb24pKTsKLSAgICBpZiAoIXB1dFZhckludChUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29k
ZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBpbnRWZXJzaW9u
KSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVy
cm9yKTsKKyAgICBpZiAoIXB1dFZhckludChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6
ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGludFZl
cnNpb24pKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRh
dGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKLSAgICBpZiAoIXB1dFN0
cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERh
dGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNl
clZlcnNpb24pLCB2ZXJzaW9uKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICBpZiAoIXB1dFN0cmluZyhJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0
YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2Vy
VmVyc2lvbiksIHZlcnNpb24pKSB7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0
b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ1Myw3
ICs0NTUsNyBAQCBzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZwogICAgIE93blB0cjxMZXZlbERCSXRl
cmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+
c2VlayhiZWdpbik7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBlbmQp
IDwgMDsgaXQtPm5leHQoKSkgewogICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQt
PmtleSgpKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlV3JpdGVFcnJvcik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9y
ZVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQpAQCAtNDYyLDkgKzQ2NCw5IEBAIHN0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnCiB9CiAKIAotYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5h
bWUpCitib29sIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0
YWJhc2UiKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2Ui
KTsKICAgICBPd25QdHI8TGV2ZWxEQldyaXRlT25seVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9
IExldmVsREJXcml0ZU9ubHlUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fZGIuZ2V0KCkpOwogCiAgICAg
SURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YTsKQEAgLTQ5OCw5ICs1MDAsOSBAQCBzdGF0aWMg
Ym9vbCBjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJdGVyYXRv
ciogaXQsIGNvbnN0IFZlYwogICAgIHJldHVybiB0cnVlOwogfQogCi1WZWN0b3I8SURCT2JqZWN0
U3RvcmVNZXRhZGF0YT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGlu
dDY0X3QgZGF0YWJhc2VJZCkKK1ZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNr
aW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpCiB7Ci0gICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMiKTsKKyAgICBJ
REJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzIik7CiAgICAgVmVjdG9y
PElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IG9iamVjdFN0b3JlczsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgMSwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CkBAIC01MTUsNyArNTE3LDcgQEAg
VmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3JlcyhpbnQ2NF90IGQKICAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKICAgICAgICAgQVNTRVJUKHApOwog
ICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6TmFtZSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2lu
Z1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIC8vIFBvc3NpYmxlIHN0YWxlIG1ldGFkYXRh
LCBidXQgZG9uJ3QgZmFpbCB0aGUgbG9hZC4KICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTUyOCwzMyArNTMwLDMzIEBAIFZlY3RvcjxJREJPYmplY3RT
dG9yZU1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50
NjRfdCBkCiAKICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0
b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFs
RXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIElEQktleVBhdGgga2V5UGF0aCA9IGRlY29kZUlEQktleVBhdGgoaXQt
PnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5uZXh0
KCk7CiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQo
KSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6QXV0b0lu
Y3JlbWVudCkpIHsKLSAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVJlYWRFcnJvcik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9y
ZVJlYWRFcnJvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBib29s
IGF1dG9JbmNyZW1lbnQgPSBkZWNvZGVCb29sKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1
ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBJcyBldmljYXRibGUuCiAgICAg
ICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtl
eSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6RXZpY3RhYmxlKSkgewot
ICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
KTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8g
TGFzdCB2ZXJzaW9uLgogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5
cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6Okxhc3RWZXJzaW9uKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFj
a2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgaXQtPm5leHQoKTsgLy8gTWF4aW11bSBpbmRleCBpZCBhbGxvY2F0ZWQuCiAgICAgICAg
IGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TWF4SW5kZXhJZCkpIHsKLSAg
ICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7
CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpbnQ2NF90IG1heEluZGV4SWQg
PSBkZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwpAQCAt
NTY3LDcgKzU2OSw3IEBAIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkCiAgICAgICAgICAgICAvLyAo
MikgTGF0ZXIsIG51bGwgdnMuIHN0cmluZyB2cy4gYXJyYXkgd2FzIHN0b3JlZCBpbiB0aGUga2V5
UGF0aCBpdHNlbGYuCiAgICAgICAgICAgICAvLyBTbyB0aGlzIGNoZWNrIGlzIG9ubHkgcmVsZXZh
bnQgZm9yIHN0cmluZy10eXBlIGtleVBhdGhzLgogICAgICAgICAgICAgaWYgKCFoYXNLZXlQYXRo
ICYmIChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlICYmICFrZXlQYXRo
LnN0cmluZygpLmlzRW1wdHkoKSkpIHsKLSAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICAgICAgICAgIEludGVybmFs
RXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCkKQEAgLTU5NSwyMCAr
NTk3LDIwIEBAIHN0YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzCiAgICAgaW50NjRfdCBtYXhPYmplY3RT
dG9yZUlkID0gZ2V0TWF4T2JqZWN0U3RvcmVJZCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJ
ZEtleSk7CiAKICAgICBpZiAob2JqZWN0U3RvcmVJZCA8PSBtYXhPYmplY3RTdG9yZUlkKSB7Ci0g
ICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJy
b3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJy
b3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghcHV0SW50KHRyYW5z
YWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBvYmplY3RTdG9yZUlkKSkgewotICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQ
YXRoJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSIpOwotICAgIExldmVsREJUcmFu
c2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpj
cmVhdGVPYmplY3RTdG9yZSIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7CiAgICAgaWYgKCFzZXRNYXhPYmplY3RTdG9yZUlkKGxldmVsREJU
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNjI0LDkyICs2MjYsOTIgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmEKIAog
ICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1lS2V5LCBuYW1l
KTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9y
ZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBw
dXRJREJLZXlQYXRoKGxldmVsREJUcmFuc2FjdGlvbiwga2V5UGF0aEtleSwga2V5UGF0aCk7CiAg
ICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0
ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50
KGxldmVsREJUcmFuc2FjdGlvbiwgYXV0b0luY3JlbWVudEtleSwgYXV0b0luY3JlbWVudCk7CiAg
ICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0
ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50
KGxldmVsREJUcmFuc2FjdGlvbiwgZXZpY3RhYmxlS2V5LCBmYWxzZSk7CiAgICAgaWYgKCFvaykg
ewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9y
KTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFu
c2FjdGlvbiwgbGFzdFZlcnNpb25LZXksIDEpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG1heElu
ZGV4SWRLZXksIE1pbmltdW1JbmRleElkKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgaGFzS2V5
UGF0aEtleSwgIWtleVBhdGguaXNOdWxsKCkpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIGtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXJLZXksIEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIpOwogICAg
IGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVF
cnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEludChs
ZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVzS2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJy
b3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3Jl
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0
aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZU9iamVjdFN0b3JlIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rp
b24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKTsKIAogICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWU7CiAgICAgZ2V0U3Ry
aW5nKGxldmVsREJUcmFuc2FjdGlvbiwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUpLCBv
YmplY3RTdG9yZU5hbWUpOwogCiAgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rp
b24sIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQpKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3Rv
cmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgog
ICAgIH0KIAogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKE9iamVjdFN0b3JlTmFtZXNL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZU5hbWUpKTsKIAogICAgIGlmICghZGVs
ZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtl
eShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3Io
SURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJl
cG9ydCBlcnJvci4KICAgICB9CiAgICAgaWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rp
b24sIEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAw
LCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQpKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVX
cml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVy
cm9yKTsKICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogICAgIH0KIAog
ICAgIGNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQpOwogfQogCi1TdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXkpCitTdHJpbmcgSURCQmFj
a2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmIGtleSkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dFJlY29yZCIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0g
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElE
Ql9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNh
Y3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwpAQCAtNzIwLDcg
KzcyMiw3IEBAIFN0cmluZyBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgaW50NjRfdCB2ZXJzaW9uOwog
ICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgp
LCB2ZXJzaW9uKTsKICAgICBpZiAoIXApIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogICAg
ICh2b2lkKSB2ZXJzaW9uOwpAQCAtNzI4LDI3ICs3MzAsNiBAQCBTdHJpbmcgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aQogICAgIHJldHVybiBkZWNvZGVTdHJpbmcocCwgZGF0YS5lbmQoKSk7CiB9CiAKLW5hbWVz
cGFjZSB7Ci1jbGFzcyBMZXZlbERCUmVjb3JkSWRlbnRpZmllciA6IHB1YmxpYyBJREJCYWNraW5n
U3RvcmU6OlJlY29yZElkZW50aWZpZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExldmVsREJSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmlt
YXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVj
b3JkSWRlbnRpZmllcihwcmltYXJ5S2V5LCB2ZXJzaW9uKSk7IH0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IExldmVsREJSZWNvcmRJZGVudGlmaWVyKCkpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleS5pc0VtcHR5KCk7IH0KLSAgICBWZWN0
b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAg
IHZvaWQgc2V0UHJpbWFyeUtleShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXkpIHsgbV9w
cmltYXJ5S2V5ID0gcHJpbWFyeUtleTsgfQotICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fdmVyc2lvbjsgfQotICAgIHZvaWQgc2V0VmVyc2lvbihpbnQ2NF90IHZlcnNpb24p
IHsgbV92ZXJzaW9uID0gdmVyc2lvbjsgfQotCi1wcml2YXRlOgotICAgIExldmVsREJSZWNvcmRJ
ZGVudGlmaWVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9u
KSA6IG1fcHJpbWFyeUtleShwcmltYXJ5S2V5KSwgbV92ZXJzaW9uKHZlcnNpb24pIHsgQVNTRVJU
KCFwcmltYXJ5S2V5LmlzRW1wdHkoKSk7IH0KLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcigp
IDogbV9wcmltYXJ5S2V5KCksIG1fdmVyc2lvbigtMSkgeyB9Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
bV9wcmltYXJ5S2V5OyAvLyBGSVhNRTogTWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0
aGUgKmVuY29kZWQqIHZlcnNpb24gb2YgdGhlIGtleS4KLSAgICBpbnQ2NF90IG1fdmVyc2lvbjsK
LX07Ci19Ci0KIHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpCiB7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6Okxhc3RWZXJzaW9uKTsKQEAgLTc2OCwxMSArNzQ5LDExIEBAIHN0
YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhCiAgICAgcmV0dXJuIHZlcnNpb247CiB9CiAKLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7Ci0gICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQiKTsKKyAgICBJREJfVFJB
Q0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlk
KCkpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIExldmVsREJU
cmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgaW50NjRfdCB2
ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51bWJlcihsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQpOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZWRh
dGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBrZXkpOwogCkBAIC03ODEsNTQgKzc2Miw0NyBAQCBib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bgogICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOwogCiAgICAgaWYgKCFsZXZlbERC
VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpKSB7Ci0gICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhp
c3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAg
IGlmICghbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2
ZXJzaW9uKSkpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVF
cnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBMZXZlbERCUmVjb3Jk
SWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERC
UmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotICAgIGxldmVsREJSZWNvcmRJ
ZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKLSAgICBsZXZlbERC
UmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKKyAgICByZWNvcmRJZGVudGlm
aWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKKyAgICByZWNvcmRJZGVudGlm
aWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKQordm9pZCBJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2
ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJh
bnNhY3Rpb24pOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgMCkuZW5jb2RlKCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCArIDEsIDApLmVu
Y29kZSgpOwogCiAgICAgZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBzdGFydEtleSwg
c3RvcEtleSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlm
aWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmll
cigpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsK
LSAgICByZXR1cm4gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgpOwotfQorICAgIElE
Ql9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCi12b2lkIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgSURCX1RS
QUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQiKTsKLSAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRp
ZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERC
UmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotCi0gICAgY29uc3QgVmVjdG9y
PGNoYXI+IG9iamVjdFN0b3JlRGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5
S2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZURhdGFLZXkgPSBPYmpl
Y3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByZWNvcmRJ
ZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3Zl
KG9iamVjdFN0b3JlRGF0YUtleSk7CiAKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50
cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgcmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKICAgICBs
ZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7CiB9CiAKIAotaW50NjRf
dCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2ludDY0X3QgSURCQmFja2luZ1N0b3JlOjpnZXRL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsK
LSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9u
OjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNh
Y3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVjdG9y
PGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAKQEAgLTg2OCw5ICs4NDIsOSBAQCBp
bnQ2NF90IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIoSURCQmFja2luZ1N0b3JlOjpUcgogICAgIHJldHVybiBrZXlHZW5lcmF0b3JDdXJyZW50TnVt
YmVyOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
bmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjptYXli
ZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCiB7Ci0gICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRy
YW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZl
bERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGlmIChjaGVja0N1cnJlbnQpIHsKICAg
ICAgICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CkBAIC04ODEsMTYgKzg1
NSwxNiBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcgogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBr
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Oktl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOwogICAgIGJvb2wgb2sgPSBwdXRJbnQobGV2ZWxEQlRy
YW5zYWN0aW9uLCBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBuZXdOdW1iZXIpOwogICAg
IGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVF
cnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJZGVu
dGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZTo6a2V5
RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYga2V5LCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiB7Ci0g
ICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0
b3JlIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFu
c2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RS
QUNFKCJJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKKyAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIApA
QCAtOTAxLDkgKzg3NSw4IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3Rz
SW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uCiAgICAgaWYgKCFkZWNv
ZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJ
ZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihmb3VuZFJl
Y29yZElkZW50aWZpZXIpOwotICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5
S2V5KGVuY29kZUlEQktleShrZXkpKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0
VmVyc2lvbih2ZXJzaW9uKTsKKyAgICBmb3VuZFJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlL
ZXkoZW5jb2RlSURCS2V5KGtleSkpOworICAgIGZvdW5kUmVjb3JkSWRlbnRpZmllci0+c2V0VmVy
c2lvbih2ZXJzaW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTIzLDkgKzg5Niw5IEBA
IHN0YXRpYyBib29sIGNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShjb25zdCBMZXZlbERCSXRlcmF0
b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hhCiB9CiAKIAotVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCitWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2lu
Z1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhl
cyIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzIik7CiAgICAg
VmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGluZGV4ZXM7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIDAsIDApOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhNZXRh
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsKQEAg
LTk0Miw3ICs5MTUsNyBAQCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsCiAgICAgICAgIHAgPSBJbmRl
eE1ldGFEYXRhS2V5OjpkZWNvZGUocCwgbGltaXQsICZtZXRhRGF0YUtleSk7CiAgICAgICAgIEFT
U0VSVChwKTsKICAgICAgICAgaWYgKG1ldGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9IEluZGV4
TWV0YURhdGFLZXk6Ok5hbWUpIHsKLSAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJh
Y2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgICAgICAvLyBQb3NzaWJsZSBzdGFsZSBtZXRh
ZGF0YSBkdWUgdG8gaHR0cDovL3dlYmtpdC5vcmcvYi84NTU1NyBidXQgZG9uJ3QgZmFpbCB0aGUg
bG9hZC4KICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTk1NCwxNCArOTI3LDE0IEBAIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwKIAogICAgICAgICBpdC0+
bmV4dCgpOyAvLyB1bmlxdWUgZmxhZwogICAgICAgICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0
YUtleShpdC5nZXQoKSwgc3RvcEtleSwgaW5kZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6VW5pcXVl
KSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVh
ZEVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVy
cm9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgaW5kZXhV
bmlxdWUgPSBkZWNvZGVCb29sKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgp
KTsKIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBrZXlQYXRoCiAgICAgICAgIGlmICghY2hlY2tJ
bmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFE
YXRhS2V5OjpLZXlQYXRoKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFj
a2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIElEQktleVBhdGgga2V5UGF0aCA9IGRlY29kZUlEQktleVBhdGgoaXQtPnZhbHVlKCkuYmVn
aW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwpAQCAtOTg2LDIxICs5NTksMjEgQEAgc3RhdGljIGJv
b2wgc2V0TWF4SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGkKICAgICAgICAgbWF4SW5kZXhJZCA9IE1pbmltdW1JbmRleElkOwogCiAg
ICAgaWYgKGluZGV4SWQgPD0gbWF4SW5kZXhJZCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIGlmICghcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5
LCBpbmRleElkKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0
ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRy
eSkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkKIHsKLSAg
ICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4Iik7Ci0gICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZUluZGV4Iik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNh
Y3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBpZiAoIXNldE1heEluZGV4SWQobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0xMDExLDQxICs5ODQsNDEgQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGkKIAogICAgIGJvb2wgb2sgPSBwdXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1l
S2V5LCBuYW1lKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJh
Y2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgb2sgPSBwdXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgdW5pcXVlS2V5LCBpc1VuaXF1ZSk7
CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5n
U3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVX
cml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0
SURCS2V5UGF0aChsZXZlbERCVHJhbnNhY3Rpb24sIGtleVBhdGhLZXksIGtleVBhdGgpOwogICAg
IGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVF
cnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEJvb2wo
bGV2ZWxEQlRyYW5zYWN0aW9uLCBtdWx0aUVudHJ5S2V5LCBpc011bHRpRW50cnkpOwogICAgIGlm
ICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3Jp
dGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpk
ZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkK
IHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4Iik7
Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4Iik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBs
ZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBp
bmRleE1ldGFEYXRhU3RhcnQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4
TWV0YURhdGFFbmQgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CiAKICAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJU
cmFuc2FjdGlvbiwgaW5kZXhNZXRhRGF0YVN0YXJ0LCBpbmRleE1ldGFEYXRhRW5kKSkgewotICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTA1MywyNCArMTAyNiwyMyBAQCB2b2lkIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aQogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFFbmQgPSBJbmRleERhdGFL
ZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKIAog
ICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRleERhdGFTdGFydCwg
aW5kZXhEYXRhRW5kKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5n
U3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVX
cml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAotYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBSZWNvcmRJ
ZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dElu
ZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29yZElk
ZW50aWZpZXIpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJ
bmRleERhdGFGb3JSZWNvcmQiKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0
SW5kZXhEYXRhRm9yUmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwogICAgIEFT
U0VSVChpbmRleElkID49IE1pbmltdW1JbmRleElkKTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3Jk
SWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBM
ZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwogCi0gICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRy
YW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4
RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGVuY29kZUlEQktleShrZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJp
bWFyeUtleSgpKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJh
bnNhY3Rpb24pOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFLZXkgPSBJbmRleERh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBlbmNvZGVJ
REJLZXkoa2V5KSwgcmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKIAogICAgIFZlY3Rv
cjxjaGFyPiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKGVuY29kZVZhckludChsZXZlbERCUmVjb3Jk
SWRlbnRpZmllci0+dmVyc2lvbigpKSk7Ci0gICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElk
ZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisgICAgZGF0YS5hcHBlbmQoZW5jb2RlVmFySW50KHJl
Y29yZElkZW50aWZpZXItPnZlcnNpb24oKSkpOworICAgIGRhdGEuYXBwZW5kKHJlY29yZElkZW50
aWZpZXItPnByaW1hcnlLZXkoKSk7CiAKICAgICByZXR1cm4gbGV2ZWxEQlRyYW5zYWN0aW9uLT5w
dXQoaW5kZXhEYXRhS2V5LCBkYXRhKTsKIH0KQEAgLTExMDMsNyArMTA3NSw3IEBAIHN0YXRpYyBi
b29sIGZpbmRHcmVhdGVzdEtleUxlc3NUaGFuT3JFcXVhbChMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBSZWNvcmRJZGVudGlm
aWVyKikKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNv
bnN0IFJlY29yZElkZW50aWZpZXIqKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzbid0IG5lZWRl
ZCBzaW5jZSB3ZSBpbnZhbGlkYXRlIGluZGV4IGRhdGEgdmlhIHRoZSB2ZXJzaW9uIG51bWJlciBt
ZWNoYW5pc20uCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTIwLDEyICsxMDkyLDEyIEBAIHN0YXRp
YyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpCiAgICAgcmV0dXJuIGRlY29kZUludChkYXRhLmJlZ2luKCksIGRh
dGEuZW5kKCkpID09IHZlcnNpb247CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlL
ZXkpCitib29sIElEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8
Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCIpOworICAgIElEQl9UUkFDRSgiSURCQmFj
a2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCIpOwogICAgIEFTU0VSVChmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5LmlzRW1wdHkoKSk7CiAKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
OwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5KTsKICAgICBPd25QdHI8
TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGxldmVsREJUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3Io
KTsKICAgICBpdC0+c2VlayhsZXZlbGRiS2V5KTsKQEAgLTExMzksNyArMTExMSw3IEBAIGJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhCiAgICAgICAgIGludDY0X3QgdmVyc2lvbjsKICAgICAgICAgY29u
c3QgY2hhciogcCA9IGRlY29kZVZhckludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUo
KS5lbmQoKSwgdmVyc2lvbik7CiAgICAgICAgIGlmICghcCkgewotICAgICAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmFwcGVu
ZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAtIHApOwpAQCAtMTE1NSw5ICsxMTI3LDkgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2EKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQorUGFzc1JlZlB0
cjxJREJLZXk+IElEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkK
IHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlW
aWFJbmRleCIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5
VmlhSW5kZXgiKTsKIAogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5Owog
ICAgIGlmIChmaW5kS2V5SW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwga2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewpAQCAtMTE2OSw5
ICsxMTQxLDkgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmUKICAgICByZXR1cm4gMDsKIH0KIAot
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5
LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQorYm9vbCBJREJCYWNraW5nU3RvcmU6
OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1h
cnlLZXkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlz
dHNJbkluZGV4Iik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
SW5kZXgiKTsKIAogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwogICAg
IGlmICghZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGluZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKQEAgLTExODEs
NjQgKzExNTMsMjIgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbklu
ZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW4KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotbmFtZXNwYWNlIHsKLQotc3RydWN0IEN1cnNvck9wdGlvbnMgewotICAgIFZlY3Rvcjxj
aGFyPiBsb3dLZXk7Ci0gICAgYm9vbCBsb3dPcGVuOwotICAgIFZlY3RvcjxjaGFyPiBoaWdoS2V5
OwotICAgIGJvb2wgaGlnaE9wZW47Ci0gICAgYm9vbCBmb3J3YXJkOwotICAgIGJvb2wgdW5pcXVl
OwotfTsKLQotY2xhc3MgQ3Vyc29ySW1wbENvbW1vbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6
OkN1cnNvciB7Ci1wdWJsaWM6Ci0gICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2
aXJ0dWFsIGJvb2wgYWR2YW5jZSh1bnNpZ25lZCBsb25nKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29u
dGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqID0gMCwgSXRlcmF0b3JTdGF0ZSA9IFNlZWspOwot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtl
eTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVy
biBtX2N1cnJlbnRLZXk7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBvYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1
cnJlbnRSb3coKSA9IDA7Ci0gICAgYm9vbCBmaXJzdFNlZWsoKTsKLQotcHJvdGVjdGVkOgotICAg
IEN1cnNvckltcGxDb21tb24oTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQotICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQotICAg
IHsKLSAgICB9Ci0KLSAgICBDdXJzb3JJbXBsQ29tbW9uKGNvbnN0IEN1cnNvckltcGxDb21tb24q
IG90aGVyKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24ob3RoZXItPm1fdHJhbnNhY3Rpb24pCi0g
ICAgICAgICwgbV9jdXJzb3JPcHRpb25zKG90aGVyLT5tX2N1cnNvck9wdGlvbnMpCi0gICAgICAg
ICwgbV9jdXJyZW50S2V5KG90aGVyLT5tX2N1cnJlbnRLZXkpCi0gICAgewotICAgICAgICBpZiAo
b3RoZXItPm1faXRlcmF0b3IpIHsKLSAgICAgICAgICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0
aW9uLT5jcmVhdGVJdGVyYXRvcigpOworSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcihj
b25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvciogb3RoZXIpCisgICAgOiBtX3RyYW5zYWN0aW9u
KG90aGVyLT5tX3RyYW5zYWN0aW9uKQorICAgICwgbV9jdXJzb3JPcHRpb25zKG90aGVyLT5tX2N1
cnNvck9wdGlvbnMpCisgICAgLCBtX2N1cnJlbnRLZXkob3RoZXItPm1fY3VycmVudEtleSkKK3sK
KyAgICBpZiAob3RoZXItPm1faXRlcmF0b3IpIHsKKyAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJh
bnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAKLSAgICAgICAgICAgIGlmIChvdGhlci0+bV9p
dGVyYXRvci0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+c2Vlayhv
dGhlci0+bV9pdGVyYXRvci0+a2V5KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChtX2l0ZXJh
dG9yLT5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAob3RoZXItPm1faXRl
cmF0b3ItPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+
bV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICAgICAgQVNTRVJUKG1faXRlcmF0b3ItPmlzVmFs
aWQoKSk7CiAgICAgICAgIH0KICAgICB9Cit9CiAKLSAgICB2aXJ0dWFsIH5DdXJzb3JJbXBsQ29t
bW9uKCkgeyB9Ci0KLSAgICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OwotICAgIGJvb2wgaGF2
ZUVudGVyZWRSYW5nZSgpIGNvbnN0OwotCi0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5z
YWN0aW9uOwotICAgIEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOwotICAgIE93blB0cjxM
ZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0b3I7Ci0gICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50
S2V5OwotfTsKLQotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWsoKQorYm9vbCBJREJC
YWNraW5nU3RvcmU6OkN1cnNvcjo6Zmlyc3RTZWVrKCkKIHsKICAgICBtX2l0ZXJhdG9yID0gbV90
cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZv
cndhcmQpCkBAIC0xMjQ5LDcgKzExNzksNyBAQCBib29sIEN1cnNvckltcGxDb21tb246OmZpcnN0
U2VlaygpCiAgICAgcmV0dXJuIGNvbnRpbnVlRnVuY3Rpb24oMCwgUmVhZHkpOwogfQogCi1ib29s
IEN1cnNvckltcGxDb21tb246OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCkKK2Jvb2wgSURC
QmFja2luZ1N0b3JlOjpDdXJzb3I6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCkKIHsKICAg
ICB3aGlsZSAoY291bnQtLSkgewogICAgICAgICBpZiAoIWNvbnRpbnVlRnVuY3Rpb24oKSkKQEAg
LTEyNTgsNyArMTE4OCw3IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6YWR2YW5jZSh1bnNpZ25l
ZCBsb25nIGNvdW50KQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEN1cnNvckltcGxDb21t
b246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXksIEl0ZXJhdG9yU3RhdGUgbmV4
dFN0YXRlKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihj
b25zdCBJREJLZXkqIGtleSwgSXRlcmF0b3JTdGF0ZSBuZXh0U3RhdGUpCiB7CiAgICAgUmVmUHRy
PElEQktleT4gcHJldmlvdXNLZXkgPSBtX2N1cnJlbnRLZXk7CiAKQEAgLTEzNTAsNyArMTI4MCw3
IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkq
IGtleSwgSXRlcmF0b3JTdGF0ZSBuZXh0U3RhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
Q3Vyc29ySW1wbENvbW1vbjo6aGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0Citib29sIElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yOjpoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAobV9j
dXJzb3JPcHRpb25zLmZvcndhcmQpIHsKICAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5sb3dP
cGVuKQpAQCAtMTM2NCw3ICsxMjk0LDcgQEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpoYXZlRW50
ZXJlZFJhbmdlKCkgY29uc3QKICAgICByZXR1cm4gY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9y
LT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDw9IDA7CiB9CiAKLWJvb2wgQ3Vyc29y
SW1wbENvbW1vbjo6aXNQYXN0Qm91bmRzKCkgY29uc3QKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpD
dXJzb3I6OmlzUGFzdEJvdW5kcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5m
b3J3YXJkKSB7CiAgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4pCkBAIC0xMzc3
LDkgKzEzMDcsOSBAQCBib29sIEN1cnNvckltcGxDb21tb246OmlzUGFzdEJvdW5kcygpIGNvbnN0
CiAgICAgcmV0dXJuIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29y
T3B0aW9ucy5sb3dLZXkpIDwgMDsKIH0KIAotY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBs
IDogcHVibGljIEN1cnNvckltcGxDb21tb24geworY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJ
bXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25z
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3JlYXRl
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1
cnNvck9wdGlvbnMpKTsKICAgICB9CkBAIC0xMzg5LDI2ICsxMzE5LDI2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwodGhpcykp
OwogICAgIH0KIAotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2
YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFCisgICAgLy8gSURCQmFja2luZ1N0b3Jl
OjpDdXJzb3IKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIoKSBPVkVSUklE
RQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKICAgICB9CiAgICAgdmlydHVh
bCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVLZXlD
dXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9w
dGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2Fj
dGlvbiwgY3Vyc29yT3B0aW9ucykKKyAgICBPYmplY3RTdG9yZUtleUN1cnNvckltcGwoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6
OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgIDogSURCQmFja2luZ1N0b3Jl
OjpDdXJzb3IodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCiAgICAgewogICAgIH0KIAogICAg
IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUtleUN1cnNvckltcGwq
IG90aGVyKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisgICAgICAgIDogSURC
QmFja2luZ1N0b3JlOjpDdXJzb3Iob3RoZXIpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxM
ZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gbV9pZGVudGlmaWVyOworICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsKIH07CiAKIGJvb2wgT2Jq
ZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCkBAIC0xNDE5LDcgKzEzNDks
NyBAQCBib29sIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAg
IE9iamVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7CiAgICAga2V5UG9zaXRpb24g
PSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShrZXlQb3NpdGlvbiwga2V5TGltaXQsICZvYmpl
Y3RTdG9yZURhdGFLZXkpOwogICAgIGlmICgha2V5UG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0xNDI4LDE5ICsxMzU4LDE5IEBAIGJvb2wgT2JqZWN0U3RvcmVLZXlDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0
IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5i
ZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXZh
bHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFk
RXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRo
aXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0g
ICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJ
REJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOworICAgIG1faWRlbnRpZmllciA9IElEQkJh
Y2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJy
ZW50S2V5KSwgdmVyc2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2xhc3MgT2JqZWN0
U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21tb24geworY2xhc3MgT2JqZWN0
U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJz
b3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4g
Y3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodHJhbnNhY3Rpb24s
IGN1cnNvck9wdGlvbnMpKTsKICAgICB9CkBAIC0xNDUwLDI4ICsxMzgwLDI4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodGhpcykp
OwogICAgIH0KIAotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2
YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKCkgT1ZFUlJJREUKKyAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgorICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBy
ZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVybiBtX2lkZW50
aWZpZXI7CiAgICAgfQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOwogCiBwcml2
YXRlOgotICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IEN1
cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgT2JqZWN0U3Rv
cmVDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJh
Y2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAg
ICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQog
ICAgIHsKICAgICB9CiAKICAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoY29uc3QgT2JqZWN0U3Rv
cmVDdXJzb3JJbXBsKiBvdGhlcikKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQor
ICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKG90aGVyKQogICAgICAgICAsIG1fY3Vy
cmVudFZhbHVlKG90aGVyLT5tX2N1cnJlbnRWYWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgU3Ry
aW5nIG1fY3VycmVudFZhbHVlOwotICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4g
bV9pZGVudGlmaWVyOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZp
ZXI+IG1faWRlbnRpZmllcjsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2Fk
Q3VycmVudFJvdygpCkBAIC0xNDgyLDcgKzE0MTIsNyBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29y
SW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIE9iamVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9y
ZURhdGFLZXk7CiAgICAga2V5UG9zaXRpb24gPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShr
ZXlQb3NpdGlvbiwga2V5TGltaXQsICZvYmplY3RTdG9yZURhdGFLZXkpOwogICAgIGlmICgha2V5
UG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJy
b3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDkxLDIxICsxNDIxLDIx
IEBAIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50
NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJ
bnQobV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgp
LCB2ZXJzaW9uKTsKICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29k
ZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0gICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOwor
ICAgIG1faWRlbnRpZmllciA9IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3Jl
YXRlKGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CiAKICAgICBtX2N1cnJl
bnRWYWx1ZSA9IGRlY29kZVN0cmluZyh2YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgp
LmVuZCgpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1jbGFzcyBJbmRleEtleUN1cnNvcklt
cGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CitjbGFzcyBJbmRleEtleUN1cnNvckltcGwg
OiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9w
dGlvbnMmIGN1cnNvck9wdGlvbnMpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEluZGV4S2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOwogICAgIH0K
QEAgLTE1MTUsMjAgKzE0NDUsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0aGlzKSk7CiAgICAgfQogCi0gICAgLy8gQ3Vyc29ySW1w
bENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgLy8gSURC
QmFja2luZ1N0b3JlOjpDdXJzb3IKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7
IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlm
aWVyPiByZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7
IH0KICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAogcHJpdmF0ZToKLSAgICBJ
bmRleEtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9u
KHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNv
cjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgOiBJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKICAgICB7CiAgICAgfQogCiAg
ICAgSW5kZXhLZXlDdXJzb3JJbXBsKGNvbnN0IEluZGV4S2V5Q3Vyc29ySW1wbCogb3RoZXIpCi0g
ICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihvdGhlcikKKyAgICAgICAgOiBJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcihvdGhlcikKICAgICAgICAgLCBtX3ByaW1hcnlLZXkob3RoZXItPm1fcHJpbWFy
eUtleSkKICAgICB7CiAgICAgfQpAQCAtMTU0OSwxMyArMTQ3OSwxMyBAQCBib29sIEluZGV4S2V5
Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3QgaW5kZXhEYXRhVmVyc2lv
bjsKICAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRlcmF0
b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgaW5kZXhEYXRh
VmVyc2lvbik7CiAgICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CisgICAgICAgIEludGVybmFsRXJy
b3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgbV9p
dGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgbV9wcmltYXJ5S2V5KTsKICAgICBpZiAoIXZhbHVlUG9z
aXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVh
ZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3Ip
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNTcwLDcgKzE1MDAsNyBAQCBi
b29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFySW50KHJl
c3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24pOwogICAg
IGlmICghdCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJv
cik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1ODIsOSArMTUxMiw5IEBA
IGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWNsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9u
IHsKK2NsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNv
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjcmVh
dGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYg
Y3Vyc29yT3B0aW9ucykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNy
ZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JP
cHRpb25zKSk7CiAgICAgfQpAQCAtMTU5NCwyMCArMTUyNCwyMCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBsKHRoaXMpKTsKICAgICB9CiAKLSAg
ICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJldHVy
biBtX3ZhbHVlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgp
IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigp
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgLy8gSURCQmFja2luZ1N0
b3JlOjpDdXJzb3IKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29u
c3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CiAgICAgYm9vbCBsb2FkQ3VycmVudFJvdygpOwog
CiBwcml2YXRlOgotICAgIEluZGV4Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IEN1
cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgSW5kZXhDdXJz
b3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQogICAgIHsK
ICAgICB9CiAKICAgICBJbmRleEN1cnNvckltcGwoY29uc3QgSW5kZXhDdXJzb3JJbXBsKiBvdGhl
cikKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICA6IElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yKG90aGVyKQogICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhlci0+bV9w
cmltYXJ5S2V5KQogICAgICAgICAsIG1fdmFsdWUob3RoZXItPm1fdmFsdWUpCiAgICAgICAgICwg
bV9wcmltYXJ5TGV2ZWxEQktleShvdGhlci0+bV9wcmltYXJ5TGV2ZWxEQktleSkKQEAgLTE2MzUs
MTIgKzE1NjUsMTIgQEAgYm9vbCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAg
ICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247CiAgICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZh
ckludCh2YWx1ZVBvc2l0aW9uLCB2YWx1ZUxpbWl0LCBpbmRleERhdGFWZXJzaW9uKTsKICAgICBp
ZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHZhbHVlUG9z
aXRpb24gPSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgbV9wcmltYXJ5
S2V5KTsKICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkBAIC0xNjU1LDcgKzE1ODUsNyBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRS
b3coKQogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFy
KiB0ID0gZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0
b3JlRGF0YVZlcnNpb24pOwogICAgIGlmICghdCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTE2NjgsNyArMTU5OCw3IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25z
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6
RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKK2Jvb2wg
b2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlS
YW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiB7CiAgICAgYm9vbCBs
b3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5k
ID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CkBAIC0xNzE1LDcgKzE2NDUsNyBAQCBib29sIG9i
amVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGluZGV4Q3Vyc29y
T3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yT3B0aW9u
cyYgY3Vyc29yT3B0aW9ucykKK2Jvb2wgaW5kZXhDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0
aW9ucyYgY3Vyc29yT3B0aW9ucykKIHsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24pOwogICAgIGJv
b2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwpAQCAtMTc1OCwxMyArMTY4
OCwxMSBAQCBib29sIGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludAogICAgIHJldHVybiB0cnVlOwogfQogCi19
Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCQmFja2luZ1N0b3JlOjpv
cGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAg
ICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNv
ciIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIEN1cnNvck9w
dGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJh
bnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rp
b25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29y
T3B0aW9ucyBjdXJzb3JPcHRpb25zOwogICAgIGlmICghb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25z
KGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRp
cmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxP
YmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3Jl
YXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CkBAIC0xNzc0LDExICsxNzAy
LDExIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24g
ZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCQmFja2lu
Z1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmpl
Y3RTdG9yZUtleUN1cnNvciIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
OwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBJREJfVFJBQ0UoIklEQkJh
Y2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yIik7CisgICAgTGV2ZWxEQlRyYW5z
YWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
OjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwogICAgIGlmICghb2JqZWN0
U3RvcmVDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVy
biAwOwogICAgIFJlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVj
dFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0
aW9ucyk7CkBAIC0xNzg4LDExICsxNzE2LDExIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1CiAg
ICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1
cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0g
ICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3Ii
KTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBDdXJzb3JPcHRp
b25zIGN1cnNvck9wdGlvbnM7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW5J
bmRleEtleUN1cnNvciIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJv
bSh0cmFuc2FjdGlvbik7CisgICAgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlv
bnMgY3Vyc29yT3B0aW9uczsKICAgICBpZiAoIWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZlbERCVHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJl
Y3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8SW5k
ZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZl
bERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpOwpAQCAtMTgwMiwxMSArMTczMCwxMSBAQCBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuSW5kZXhLZXlDdXJzb3IoSQogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQog
Ci1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24g
ZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCQmFja2lu
Z1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
b3BlbkluZGV4Q3Vyc29yIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNh
Y3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7
Ci0gICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIElEQl9UUkFDRSgiSURCQmFj
a2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
OjpDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CiAgICAgaWYgKCFpbmRleEN1cnNvck9wdGlv
bnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElk
LCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVh
dGUobGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKQEAgLTE4MTYsNjAgKzE3NDQs
MzUgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKElEQkIKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2Uo
KTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbigpCi17Ci0gICAgcmV0dXJuIFRyYW5z
YWN0aW9uOjpjcmVhdGUodGhpcyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpj
cmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQotewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb24oYmFja2luZ1N0b3JlKSk7Ci19Ci0KLUlEQkxldmVs
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUpCitJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFu
c2FjdGlvbihJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKICAgICA6IG1fYmFja2luZ1N0
b3JlKGJhY2tpbmdTdG9yZSkKIHsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbjo6YmVnaW4oKQordm9pZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpi
ZWdpbigpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbjo6YmVnaW4iKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmJlZ2luIik7CiAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKICAgICBtX3RyYW5zYWN0
aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0
KCkpOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21t
aXQoKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQogewotICAg
IElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCIp
OworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0Iik7
CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwogICAgIGJvb2wgcmVzdWx0ID0gbV90cmFuc2Fj
dGlvbi0+Y29tbWl0KCk7CiAgICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJv
bGxiYWNrKCkKK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQog
ewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJv
bGxiYWNrIik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpy
b2xsYmFjayIpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKICAgICBtX3RyYW5zYWN0aW9u
LT5yb2xsYmFjaygpOwogICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAotYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnKQot
ewotICAgIFN0cmluZyBwYXRoQmFzZSA9IHBhdGhCYXNlQXJnOwotCi0gICAgaWYgKHBhdGhCYXNl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBldmVudHVhbGx5IHVzZSB0aGUgc2FtZSBMZXZlbERCIGRhdGFiYXNlIGZvciBhbGwgb3Jp
Z2lucy4KLSAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFz
ZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2
ZWxkYiIpOwotCi0gICAgLy8gRklYTUU6IHRoaXMgaXMgY2hlY2tpbmcgZm9yIHByZXNlbmNlIG9m
IHRoZSBkb21haW4sIG5vdCB0aGUgZGF0YWJhc2UgaXRzZWxmCi0gICAgcmV0dXJuIGZpbGVFeGlz
dHMocGF0aCsiL0NVUlJFTlQiKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gVVNFKExFVkVMREIpCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5o
CmluZGV4IDNjOTQ1MWNjMDc0YzIwZTZmMjE3YzQ5NDg3YTNkODM1MmYyNzAyYWQuLjI1MmRlZTFm
NWEyODkxZjc0Njc2ZTE1YmI3M2UzMDE5MzVhODVhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC0yOSw2MCArMjksNzMg
QEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkN1cnNvci5o
IgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiTGV2ZWxEQlRyYW5zYWN0aW9uLmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBM
ZXZlbERCQ29tcGFyYXRvcjsKK2NsYXNzIExldmVsREJEYXRhYmFzZTsKK2NsYXNzIExldmVsREJU
cmFuc2FjdGlvbjsKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsKIGNsYXNzIElEQktleTsK
IGNsYXNzIElEQktleVJhbmdlOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1zdHJ1Y3QgSURCRGF0
YWJhc2VNZXRhZGF0YTsKIAogY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNvdW50
ZWQ8SURCQmFja2luZ1N0b3JlPiB7CiBwdWJsaWM6CiAgICAgY2xhc3MgVHJhbnNhY3Rpb247CiAK
LSAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKSB7fTsKKyAgICB2aXJ0dWFsIH5JREJCYWNr
aW5nU3RvcmUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4o
U2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZp
bGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqKTsKIAotICAgIHZpcnR1YWwgVmVj
dG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VOYW1lcygpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRh
dGEqIGZvdW5kTWV0YWRhdGEpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJh
c2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVmVyc2lv
biwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oVHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJv
d0lkLCBpbnQ2NF90IGludFZlcnNpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGdldERhdGFiYXNl
TmFtZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCk7CisgICAgdmlydHVh
bCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVh
bCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKTsKKyAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZpcnR1YWwg
VmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRh
dGFiYXNlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIFZl
Y3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRh
YmFzZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNy
ZW1lbnQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpOwogCiAgICAgY2xhc3MgUmVjb3JkSWRlbnRpZmllciA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
Y29yZElkZW50aWZpZXI+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgPSAwOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlm
aWVyPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNp
b24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNvcmRJZGVudGlmaWVyKHByaW1hcnlLZXksIHZl
cnNpb24pKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVjb3JkSWRlbnRpZmllcigpKTsgfQogICAg
ICAgICB2aXJ0dWFsIH5SZWNvcmRJZGVudGlmaWVyKCkgeyB9CisKKyAgICAgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXkuaXNFbXB0eSgpOyB9Cisg
ICAgICAgIFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5
S2V5OyB9CisgICAgICAgIHZvaWQgc2V0UHJpbWFyeUtleShjb25zdCBWZWN0b3I8Y2hhcj4mIHBy
aW1hcnlLZXkpIHsgbV9wcmltYXJ5S2V5ID0gcHJpbWFyeUtleTsgfQorICAgICAgICBpbnQ2NF90
IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICAgICAgdm9pZCBzZXRW
ZXJzaW9uKGludDY0X3QgdmVyc2lvbikgeyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBSZWNvcmRJZGVudGlmaWVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJp
bWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSA6IG1fcHJpbWFyeUtleShwcmltYXJ5S2V5KSwgbV92
ZXJzaW9uKHZlcnNpb24pIHsgQVNTRVJUKCFwcmltYXJ5S2V5LmlzRW1wdHkoKSk7IH0KKyAgICAg
ICAgUmVjb3JkSWRlbnRpZmllcigpIDogbV9wcmltYXJ5S2V5KCksIG1fdmVyc2lvbigtMSkgeyB9
CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUtleTsgLy8gRklYTUU6IE1ha2UgaXQg
bW9yZSBjbGVhciB0aGF0IHRoaXMgaXMgdGhlICplbmNvZGVkKiB2ZXJzaW9uIG9mIHRoZSBrZXku
CisgICAgICAgIGludDY0X3QgbV92ZXJzaW9uOwogICAgIH07Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPFJlY29yZElkZW50aWZpZXI+IGNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkgPSAw
OwotCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIFJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0
U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZWNvcmQoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRl
bnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNv
cmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsKLQotICAgIHZpcnR1YWwg
VmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgo
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBi
b29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVj
b3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9y
UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0
c0luSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8
SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRS
ZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGludDY0
X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZp
cnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7CisgICAgdmlydHVh
bCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOworCisgICAgdmly
dHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSk7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBSZWNvcmRJZGVudGlmaWVy
Kik7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29s
IGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOwogCiAg
ICAgY2xhc3MgQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7CiAgICAgcHVibGlj
OgpAQCAtOTEsMzMgKzEwNCw4NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBTZWVrCiAgICAgICAg
IH07CiAKKyAgICAgICAgc3RydWN0IEN1cnNvck9wdGlvbnMgeworICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IGxvd0tleTsKKyAgICAgICAgICAgIGJvb2wgbG93T3BlbjsKKyAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPiBoaWdoS2V5OworICAgICAgICAgICAgYm9vbCBoaWdoT3BlbjsKKyAgICAgICAg
ICAgIGJvb2wgZm9yd2FyZDsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlOworICAgICAgICB9Owor
CisgICAgICAgIEN1cnNvcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBD
dXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICAgICAgOiBtX3RyYW5zYWN0aW9u
KHRyYW5zYWN0aW9uKQorICAgICAgICAgICAgLCBtX2N1cnNvck9wdGlvbnMoY3Vyc29yT3B0aW9u
cykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIEN1cnNvcihjb25zdCBJREJCYWNraW5n
U3RvcmU6OkN1cnNvciogb3RoZXIpOworCisgICAgICAgIFBhc3NSZWZQdHI8SURCS2V5PiBrZXko
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KKyAgICAgICAgYm9vbCBjb250aW51ZUZ1
bmN0aW9uKGNvbnN0IElEQktleSogPSAwLCBJdGVyYXRvclN0YXRlID0gU2Vlayk7CisgICAgICAg
IGJvb2wgYWR2YW5jZSh1bnNpZ25lZCBsb25nKTsKKyAgICAgICAgYm9vbCBmaXJzdFNlZWsoKTsK
KwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBjbG9uZSgpID0gMDsKLSAgICAg
ICAgdmlydHVhbCBib29sIGFkdmFuY2UodW5zaWduZWQgbG9uZykgPSAwOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqID0gMCwgSXRlcmF0b3JTdGF0
ZSA9IFNlZWspID0gMDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkg
PSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgPSAw
OwotICAgICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigp
ID0gMDsKLSAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9OworICAgICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5
OyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworICAgICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcigpID0g
MDsKKyAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBs
b2FkQ3VycmVudFJvdygpID0gMDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgYm9vbCBpc1Bh
c3RCb3VuZHMoKSBjb25zdDsKKyAgICAgICAgYm9vbCBoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3Q7
CisKKyAgICAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOworICAgICAgICBj
b25zdCBDdXJzb3JPcHRpb25zIG1fY3Vyc29yT3B0aW9uczsKKyAgICAgICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gbV9pdGVyYXRvcjsKKyAgICAgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50
S2V5OwogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0
U3RvcmVDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAw
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNv
cihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJD
dXJzb3I6OkRpcmVjdGlvbik7CiAKLSAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPFRyYW5zYWN0aW9uPiB7CisgICAgY2xhc3MgVHJhbnNhY3Rpb24gewogICAgIHB1Ymxp
YzoKLSAgICAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb24oKSB7IH0KLSAgICAgICAgdmlydHVhbCB2
b2lkIGJlZ2luKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY29tbWl0KCkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSA9IDA7CisgICAgICAgIFRyYW5zYWN0aW9uKElE
QkJhY2tpbmdTdG9yZSopOworICAgICAgICB2b2lkIGJlZ2luKCk7CisgICAgICAgIGJvb2wgY29t
bWl0KCk7CisgICAgICAgIHZvaWQgcm9sbGJhY2soKTsKKworICAgICAgICBzdGF0aWMgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKFRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRyYW5zYWN0
aW9uKj4odHJhbnNhY3Rpb24pLT5tX3RyYW5zYWN0aW9uLmdldCgpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBJREJCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOworICAg
ICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogICAgIH07Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpID0g
MDsKKworcHJvdGVjdGVkOgorICAgIElEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNl
Pik7CisKKyAgICAvLyBTaG91bGQgb25seSB1c2VkIGZvciBtb2NraW5nLgorICAgIElEQkJhY2tp
bmdTdG9yZSgpOworCitwcml2YXRlOgorICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91
bmRFbmNvZGVkUHJpbWFyeUtleSk7CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworICAgIFJl
ZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKKyAgICBPd25QdHI8TGV2ZWxE
QkRhdGFiYXNlPiBtX2RiOworICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJh
dG9yOworCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjZW5kaWYgLy8gSURCQmFja2luZ1N0b3JlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDU1YzhkYWI0YTc4MTY2NjlmYzE4N2IzMjE4MjZjNzNi
YzczYjk2NzUuLmVhYTczM2E1MjhlZjQ1NGFjMzgwZWMyZjBjNjFkNDUxM2NiZjcwOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIklEQkJhY2tpbmdT
dG9yZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUu
aCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xMzQsMTIgKzEz
Myw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTCiAgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdT
dG9yZU1hcC5lbmQoKSkKICAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT52YWx1ZTsKICAgICBl
bHNlIHsKLSNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwg
ZmlsZUlkZW50aWZpZXIsIHRoaXMpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRhdGFE
aXJlY3RvcnkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgorICAgICAg
ICBiYWNraW5nU3RvcmUgPSBJREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0
KCksIGRhdGFEaXJlY3RvcnksIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKICAgICB9CiAKICAgICBp
ZiAoYmFja2luZ1N0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxY2IyNzI1MTRhMWYyODEyMDM1MDgzNTNhMzk0MjEwNzIzYzRiMzg0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gK
LSNkZWZpbmUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5o
IgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBMZXZlbERCQ29tcGFyYXRvcjsKLWNsYXNzIExldmVsREJEYXRhYmFzZTsKLWNsYXNzIExldmVs
REJUcmFuc2FjdGlvbjsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsKLQotY2xhc3MgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIs
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwotICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNraW5n
U3RvcmUoKTsKLQotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VOYW1lcygp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSopOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKLSAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgdmlydHVhbCBWZWN0b3I8
SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJ
ZCk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJl
Y29yZElkZW50aWZpZXIoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRl
bnRpZmllciopOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IFJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJh
dG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgYm9vbCBtYXli
ZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0
c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVu
dGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwotCi0gICAgdmlydHVhbCBWZWN0b3I8SURC
SW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICB2aXJ0dWFs
IGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVh
bCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5k
ZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhL
ZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOwotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24pOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVU
cmFuc2FjdGlvbigpOwotCi0gICAgc3RhdGljIGJvb2wgYmFja2luZ1N0b3JlRXhpc3RzKFNlY3Vy
aXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlKTsK
LQotcHJvdGVjdGVkOgotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBQYXNzT3duUHRyPExldmVsREJEYXRh
YmFzZT4pOwotCi1wcml2YXRlOgotICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRF
bmNvZGVkUHJpbWFyeUtleSk7Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwotICAgIFJlZlB0
cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKLSAgICBPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBtX2RiOwotICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJhdG9y
OwotCi0gICAgY2xhc3MgVHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUcmFuc2Fj
dGlvbj4gY3JlYXRlKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGJlZ2luKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjb21taXQoKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHJvbGxiYWNrKCk7Ci0KLSAgICAgICAgc3RhdGljIExldmVsREJUcmFuc2FjdGlv
biogbGV2ZWxEQlRyYW5zYWN0aW9uRnJvbShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKj4odHJhbnNhY3Rpb24pLT5tX3RyYW5z
YWN0aW9uLmdldCgpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBUcmFuc2Fj
dGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKik7Ci0gICAgICAgIElEQkxldmVsREJCYWNraW5n
U3RvcmUqIG1fYmFja2luZ1N0b3JlOwotICAgICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9u
PiBtX3RyYW5zYWN0aW9uOwotICAgIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jZW5kaWYgLy8gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCmluZGV4IDQ2NDBjMTNkZDJlM2M3N2IyZGU4MGNjMGRiN2FkYmY1OTAzZTAz
ZjUuLjEyYzM3M2ZlMDYyMTA2MzQxZjhkMzIzZjkwY2Y4MmQwYTgzOWNlYTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlL
ZXksIGMKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24g
PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVk
IHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9
IGJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOworICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIg
PSBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgpOwogICAgIGlmICgh
YmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnByaW1hcnlLZXksIHJl
Y29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwog
ICAgICAgICByZXR1cm47CkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjwKIAogICAgIEFTU0VSVChrZXkgJiYga2V5LT5pc1ZhbGlkKCkpOwogCi0gICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IG9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsK
KyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVu
dGlmaWVyID0gSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKTsKICAg
ICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXks
IHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRf
RVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAg
ICByZXR1cm47CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAKICAg
ICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAKICAgICAgICAgZG8gewotICAgICAgICAgICAg
cmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKCk7CisgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3Jl
Q3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1f
aW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0
KSB7CiAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCBpdC0+a2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAKaW5kZXggZTE2NTJkNjk1ZGY4NTM0MWIzNjA4NmQ4Njc5YjEzNzQ0MDJmZjhlYi4u
YmE4NzVhMTcyZjc2YjNmZjY1OTYyZTZhOTk5NmRkMzMzZmViYmJkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamUK
ICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9zdGF0ZShVbnVzZWQpCiAgICAgLCBtX2RhdGFi
YXNlKGRhdGFiYXNlKQotICAgICwgbV90cmFuc2FjdGlvbihkYXRhYmFzZS0+YmFja2luZ1N0b3Jl
KCktPmNyZWF0ZVRyYW5zYWN0aW9uKCkpCisgICAgLCBtX3RyYW5zYWN0aW9uKGRhdGFiYXNlLT5i
YWNraW5nU3RvcmUoKS5nZXQoKSkKICAgICAsIG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCkKICAgICAsIG1fdGFza0V2ZW50VGltZXIo
dGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQpCiAg
ICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9p
ZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IGVycm9yKQogICAgIG1fdGFza0V2ZW50VGltZXIuc3RvcCgpOwogCiAgICAgaWYgKHdh
c1J1bm5pbmcpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgICAgIG1f
dHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKIAogICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlm
IGFueS4KICAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7CkBAIC0yMTYs
NyArMjE2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQogICAg
IGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVzZWQ7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGVk
OwogCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV90cmFuc2FjdGlvbi0+Y29tbWl0
KCk7CisgICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV90cmFuc2FjdGlvbi5jb21taXQo
KTsKIAogICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBt
dXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCiAgICAgLy8gYXJlIGZpcmVk
LCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxv
dyB0aGUgYmFja2luZyBzdG9yZQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4qCiAgICAgQVNTRVJUKCFpc1Rhc2tRdWV1ZUVtcHR5KCkpOwogCiAgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPmJlZ2luKCk7Cisg
ICAgICAgIG1fdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggNGU0ZGRlY2MxMTIzNjk2Y2E0
NjU3NTNkYjVmMTI5MmJjM2NlMzY4MS4uYzhmYmJmNTNjY2RiMmExZjM0MWRkZTcyODlkZjgyOGI2
MDgxMGIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNjgsNyArNjgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhZGRQZW5kaW5nRXZlbnRzKGludCk7CiAgICAgdm9pZCBhZGRQcmVlbXB0
aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQogICAgIHZvaWQgZGlk
Q29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsg
QVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KLSAgICBJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuIG1f
dHJhbnNhY3Rpb24uZ2V0KCk7IH0KKyAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBi
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuICZtX3RyYW5zYWN0aW9uOyB9CiAKIHBy
aXZhdGU6CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRf
dD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKik7CkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBUYXNrUXVldWUgbV9w
cmVlbXB0aXZlVGFza1F1ZXVlOwogICAgIFRhc2tRdWV1ZSBtX2Fib3J0VGFza1F1ZXVlOwogCi0g
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Cisg
ICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiBtX3RyYW5zYWN0aW9uOwogCiAgICAgLy8g
RklYTUU6IGRlbGV0ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KICAg
ICBUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1YWNi
NzM5OTQ2ZTVlZmQ1ZjA3ZDBjMTkxZWVmYjI3ZWU1YzcyODBmLi43ZWJiMjY1NGI5Yjg2Y2YzNWUx
MGE5ZTQ5NTY4ZDk4YTg3OWJkYmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDc0LDcgKzM0NzQsNyBAQAogCQk5NzEyQTVE
RjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eVBhdGguaCAqLzsgfTsKIAkJOTcxMkE1RTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJB
NTg5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAgKi87IH07CiAJCTk3MTJBNUUz
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eVJhbmdlLmggKi87IH07Ci0JCTk3MTJBNUU1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5n
U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgKi87IH07CisJ
CTk3MTJBNUU1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThDMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCAqLzsgfTsKIAkJOTcx
MkE1RTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThEMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmggKi87IH07CiAJCTk3MTJBNUU3MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJMZXZlbERCQ29kaW5nLmNwcCAqLzsgfTsKIAkJOTcxMkE1RTgxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkxldmVsREJDb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNThGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmgg
Ki87IH07CkBAIC0xMDcwNCw4ICsxMDcwNCw4IEBACiAJCTk3MTJBNTg5MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBJREJLZXlSYW5nZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNThBMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJL
ZXlSYW5nZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OEIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eVJhbmdlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJLZXlSYW5nZS5pZGw7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQmFja2luZ1N0b3JlLmNw
cDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNr
aW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4QzE1MDA0RURBMDA0
OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDsgcGF0aCA9IE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJMZXZlbERCQmFj
a2luZ1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNThFMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IElEQkxldmVsREJDb2RpbmcuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkNvZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJB
NThGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IElEQkxldmVsREJDb2RpbmcuaDsgcGF0aCA9IE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTcxMkE1OTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9iamVjdFN0b3JlLmNwcDsgcGF0aCA9IE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE3ODk3LDcgKzE3ODk3LDcgQEAKIAkJCQk5NzEyQTU4OTE1MDA0RURBMDA0OEFG
MTAgLyogSURCS2V5UmFuZ2UuY3BwICovLAogCQkJCTk3MTJBNThBMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJLZXlSYW5nZS5oICovLAogCQkJCTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJL
ZXlSYW5nZS5pZGwgKi8sCi0JCQkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tp
bmdTdG9yZS5jcHAgKi8sCisJCQkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwICovLAogCQkJCTk3MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJOTcxMkE1OEUxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovLAogCQkJCTk3MTJBNThGMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi8sCkBAIC0yNzAyOSw3ICsyNzAyOSw3IEBACiAJCQkJ
OTcxMkE1REIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5NzEyQTVERTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5NzEyQTVFMjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJOTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVFNTE1MDA0RURBMDA0OEFGMTAgLyogSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVFNzE1MDA0
RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
NzEyQTVFOTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTcxMkE1RUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IDRlMzdkM2VhYTkwNGY2YjkyMmYyOGQy
MGI4OWVlMGIxZDUwYzFiZjkuLjAyZDJkNWQ0MjBjZjMzMzkxODUwNTQ2OGQ0NTk1ZGEzM2RhODlh
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oCkBAIC00Myw4ICs0Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCBhdXRvSW5jcmVtZW50KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfTsKICAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSBP
VkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+KCk7IH0KLQogICAg
IHZpcnR1YWwgU3RyaW5nIGdldFJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVy
biBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jiwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9
CkBAIC02NSw4ICs2Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRp
cmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7
IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5JbmRleEN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vy
c29yPigpOyB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRy
YW5zYWN0aW9uKCkgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4oKTsg
fQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173096</attachid>
            <date>2012-11-08 12:38:47 -0800</date>
            <delta_ts>2012-11-08 13:01:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101415-20121108123656.patch</filename>
            <type>text/plain</type>
            <size>121547</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzOTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjU2M2RkMmQ0ZDIyNmYz
ZTJmMDA2NGJkODc3MzAwNGFlYWQxNmJlZS4uZjk5MWEzM2NhNDkxMTFkMDVjN2RhMmNjZTE5YzFh
ZjQ4MDQwNGU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3MiBAQAorMjAxMi0xMS0wNyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBD
b21iaW5lIElEQkJhY2tpbmdTdG9yZSBhbmQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29tYmluZSBhYnN0cmFj
dCBpbnRlcmZhY2UgSURCQmFja2luZ1N0b3JlIHdpdGggaXRzIG9ubHkKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24sIElEQkxldmVsREJCYWNraW5nU3RvcmUsIHRvIHJlZHVjZSBjb2RlCisgICAgICAg
IGNvbXBsZXhpdHkuIFRoZSBsZWdhY3kgc3RydWN0dXJlIGV4aXN0ZWQgdG8gc3VwcG9ydCBhIFNR
TExpdGUKKyAgICAgICAgSURCQmFja2luZ1N0b3JlLCBidXQgaXQgaXMgbm8gbG9uZ2VyIHdvcnRo
IHRoZSBjb21wbGV4aXR5IHRvCisgICAgICAgIHN1cHBvcnQgdGhpcyBhYnN0cmFjdGlvbi4KKwor
ICAgICAgICBDaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEpIE1lcmdpbmcgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSBpbnRvIElEQkJhY2tpbmdTdG9yZS4KKworICAgICAgICAyKSBNZXJnZSB0b2dl
dGhlciBJREJCYWNraW5nU3RvcmUncyBpbm5lciBjbGFzc2VzOiBDdXJzb3IsCisgICAgICAgIFRy
YW5zYWN0aW9uLCBhbmQgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGZpZXIgd2l0aCB0aGVpciByZXNw
ZWN0aXZlCisgICAgICAgIHN1YmNsYXNzZXMgaW4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS4KKwor
ICAgICAgICAzKSBTaW1wbGlmeWluZyB0aGUgaW5uZXIgVHJhbnNhY3Rpb24gY2xhc3MgdG8gbm90
IGJlIHJlZmNvdW50ZWQgb3IKKyAgICAgICAgdmlydHVhbGl6ZWQsIHRvIGFsbG93IGl0IHRvIGJl
IGEgc2ltcGxlIGNvbmNyZXRlIG1lbWJlciBvZiBpdHMKKyAgICAgICAgb3duZXIsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMgcHVy
ZWx5IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVjb3JkSW50ZXJuYWxFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRVcE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjp+SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRNYXhPYmplY3RT
dG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5P
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldEluZGV4
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4SW5kZXhJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
QmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OkN1cnNvcjo6Zmlyc3RTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yOjpoYXZlRW50ZXJlZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjppc1Bhc3RCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUpOgorICAgICAgICAoT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpP
YmplY3RTdG9yZUtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RT
dG9yZUN1cnNvckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUN1cnNvckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6Ok9iamVjdFN0b3JlQ3Vyc29ySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKToKKyAg
ICAgICAgKEluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1
cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6
cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OnJlY29y
ZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjpJbmRl
eEtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChJbmRleEN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhD
dXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnBy
aW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpyZWNvcmRJZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6SW5kZXhDdXJzb3JJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OmluZGV4Q3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoUmVjb3JkSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZp
ZXI6On5SZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpzZXRQcmltYXJ5S2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6dmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6
OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJ
ZGVudGlmaWVyOjpSZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20pOgorICAgICAgICAoQ3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpwcmltYXJ5S2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjp+Q3Vyc29yKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworMjAxMi0xMS0wNyAgQWxlYyBG
bGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZW5h
bWUgbWV0aG9kcyBhbmQgcmVtb3ZlIGRlYWQgY29kZSBmcm9tIElEQkJhY2tpbmdTdG9yZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDg4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gcHJlcGFyYXRp
b24gZm9yIG1lcmdpbmcgSURCQmFja2luZ1N0b3JlIGFuZCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OgorCisgICAgICAgIDEpIHJlbmFtZSBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIgdG8gUmVj
b3JkSWRlbnRpZmllcgorICAgICAgICAyKSByZW1vdmUgSURCQmFja2luZ1N0b3JlOjpmb3JFYWNo
UmVjb3JkIGFuZCBmcmllbmRzCisgICAgICAgIDMpIHJlbW92ZSBJREJCYWNraW5nU3RvcmU6OkN1
cnNvcjo6Y2xvc2UsIHNpbmNlIGl0IHdhcyBhbiBlbXB0eSBtZXRob2QuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIGFzIHRoaXMgaXMgcHVyZWx5IGNvZGUgY2xlYW51cC4KKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW52YWxpZFJlY29y
ZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmtleUV4aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6On5SZWNvcmRJZGVudGlmaWVyKToK
KyAgICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNsb3NlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmNv
dW50SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5
SW50ZXJuYWwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuaDoKKyAgICAgICAgKElEQkxldmVsREJCYWNraW5nU3RvcmUpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpzZXRJbmRleEtleXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCk6CisKKzIwMTItMTEtMDcgIEFsZWMgRmxldHQg
IDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUHJlcGFyZSBm
b3IgSURCQmFja2luZ1N0b3JlIG1lcmdlIGJ5IHJlbmFtaW5nIElEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDE0ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW5hbWUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgdG8gSURCQmFja2luZ1N0b3JlLmNwcCBp
bgorICAgICAgICBwcmVwYXJhdGlvbiBmb3IgbWVyZ2luZyB0aGVzZSBjbGFzc2VzLiBUaGlzIHdp
bGwgbWFrZSB0aGUgbWVyZ2UKKyAgICAgICAgZGlmZnMgc2FuZS4gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0MTUKKyAgICAgICAgZm9yIHRoZSBmaW5hbCBn
b2FsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBpcyBqdXN0IGEgcmVuYW1lIGFu
ZCBtaW5vciBzdHlsZSBmaXguCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVjb3JkSW50ZXJuYWxFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRCb29sKToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0SW50KToKKyAgICAgICAgKFdlYkNvcmU6OnB1dEludCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRWYXJJbnQpOgorICAgICAgICAoV2ViQ29yZTo6cHV0VmFySW50KToKKyAgICAgICAgKFdlYkNv
cmU6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpwdXRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6cHV0SURCS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlS2V5cyk6
CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlSW5kZXhLZXlzKToKKyAgICAgICAgKENvbXBhcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGFyYXRvcjo6Y29tcGFyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wYXJhdG9yOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2NoZW1hS25v
d24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0VXBNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRNYXhPYmplY3RTdG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5nU3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3RGF0YWJhc2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZVJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldE1heE9iamVjdFN0b3JlSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3VmVyc2lvbk51bWJlcik6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlu
dmFsaWRSZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5n
U3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdl
YkNvcmU6OmNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldE1h
eEluZGV4SWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVs
ZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0
SW5kZXhEYXRhRm9yUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRHcmVhdGVzdEtleUxl
c3NUaGFuT3JFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6dmVyc2lvbkV4
aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5
SW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQ
cmltYXJ5S2V5VmlhSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0
cyk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKwogMjAxMi0xMS0wOCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgNC42OE1CIGJlbG93IFJlbmRlclN0eWxlOjpmaWx0ZXIoKSBv
biBNZW1idXN0ZXIzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5NmFmZWM5ZThhODRh
NGVhNGU1N2ZhY2IwMGYwNzMwY2Y2MGNmY2M2Li5mYzZlYTAzODY4Yjg1YTE3ZjNmZTY0Y2IwNDQ3
MDA1NWZkNDMzNGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBA
CisyMDEyLTExLTA3ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBJbmRleGVkREI6IENvbWJpbmUgSURCQmFja2luZ1N0b3JlIGFuZCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDE0MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmUgbWV0aG9kIHRoYXQgaXMgbm8gbG9uZ2VyIGluIHRoZSBiYXNlIGNsYXNzLgorCisg
ICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgorCisyMDEyLTExLTA3ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFJl
bmFtZSBtZXRob2RzIGFuZCByZW1vdmUgZGVhZCBjb2RlIGZyb20gSURCQmFja2luZ1N0b3JlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0ODgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgSURC
RmFrZUJhY2tpbmdTdG9yZSB0byByZWZsZWN0IG1ldGhvZCBjaGFuZ2VzIGluIElEQkJhY2tpbmdT
dG9yZS4KKworICAgICAgICAqIHRlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaDoKKwogMjAxMi0x
MS0wOCAgRGFuIENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBDbGVhbnVw
IElEQkJpbmRpbmdVdGlsaXRpZXNUZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRl
eCBmYTZiYjEyY2NiZGIzMTlmNWFhMTQyMDY4ZTQ1ZWFiNTdmN2ZiZjE5Li5lZDAxMDViMzM0NDEw
YTc3MDI4MzQ0YjkyMmUwOTRlYjMwNDFhOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KQEAgLTE4MzMsNiArMTgzMyw3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2Uu
aCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmggXAorCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIFwKQEAgLTE4NzIsOCArMTg3Myw2
IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleVJhbmdlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5UmFuZ2UuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQ29kaW5nLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkNvZGluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJNZXRhZGF0YS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDZiNWE2MmEwNzZlMWZhZjVjZTQxODMyNzg3YTcz
YTQxOWVkY2JjNDQuLjk0OTA4ZmM2YzI0MTMwNTczNmQ1OWE3YzEyYmYxOTZkMTcxMWRkNzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0
b3JlLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgog
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCiAKICNpbmNs
dWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiSGlzdG9ncmFtU3VwcG9ydC5oIgpAQCAtMzUs
NyArMzQsNiBAQAogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIK
ICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3Rv
cmUuaCIKICNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRh
dGEuaCIKICNpbmNsdWRlICJJREJUcmFjaW5nLmgiCkBAIC01MywxNSArNTEsMTUgQEAgdXNpbmcg
bmFtZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7CiAKIGNvbnN0IGludDY0X3QgS2V5R2VuZXJhdG9y
SW5pdGlhbE51bWJlciA9IDE7IC8vIEZyb20gdGhlIEluZGV4ZWREQiBzcGVjaWZpY2F0aW9uLgog
Ci1lbnVtIElEQkxldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVycm9yVHlwZSB7Ci0gICAgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvciwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvciwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvciwK
LSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvck1heCwKK2VudW0gSURCQmFj
a2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgeworICAgIElEQkJhY2tpbmdTdG9yZVJlYWRFcnJv
ciwKKyAgICBJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yLAorICAgIElEQkJhY2tpbmdTdG9yZUNv
bnNpc3RlbmN5RXJyb3IsCisgICAgSURCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvck1heCwKIH07
Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVjb3JkSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgdHlwZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWNvcmRJ
bnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JUeXBlIHR5cGUpCiB7Ci0g
ICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUuSW5kZXhl
ZERCLkJhY2tpbmdTdG9yZS5JbnRlcm5hbEVycm9yIiwgdHlwZSwgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZUludGVybmFsRXJyb3JNYXgpOworICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVu
dW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuSW50ZXJuYWxFcnJvciIs
IHR5cGUsIElEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgpOwogfQogCiAvLyBVc2UgdG8g
c2lnbmFsIGNvbmRpdGlvbnMgdGhhdCB1c3VhbGx5IGluZGljYXRlIGRldmVsb3BlciBlcnJvciwg
YnV0IGNvdWxkIGJlIGNhdXNlZCBieSBkYXRhIGNvcnJ1cHRpb24uCkBAIC0xODcsNyArMTg1LDcg
QEAgc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBT
dHJpbmcmIG9yaWdpbikKICAgICBpZiAoIWdldEludChkYiwgbWV0YURhdGFLZXksIHNjaGVtYVZl
cnNpb24pKSB7CiAgICAgICAgIHNjaGVtYVZlcnNpb24gPSBsYXRlc3RTY2hlbWFWZXJzaW9uOwog
ICAgICAgICBpZiAoIXB1dEludChkYiwgbWV0YURhdGFLZXksIGxhdGVzdFNjaGVtYVZlcnNpb24p
KSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0
ZUVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewpAQCAtMjA0LDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRh
dGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IHZhbHVlOwogICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cmFuc2FjdGlvbi0+Z2V0
KGl0LT5rZXkoKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAg
ICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFk
RXJyb3IpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGludCBkYXRhYmFzZUlkID0gZGVjb2RlSW50KHZhbHVlLmJl
Z2luKCksIHZhbHVlLmVuZCgpKTsKQEAgLTIxMiwxMyArMjEwLDEzIEBAIHN0YXRpYyBib29sIHNl
dFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAg
ICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24tPnB1dChpbnRWZXJzaW9uS2V5LCBlbmNvZGVWYXJJ
bnQoSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pKTsKICAgICAgICAgICAg
ICAgICBvayA9IHRyYW5zYWN0aW9uLT5nZXQoaXQtPmtleSgpLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICAgICAgICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBib29sIG9rID0gdHJhbnNhY3Rpb24tPmNvbW1pdCgpOwogICAgICAgICAgICAgaWYgKCFvaykg
ewotICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdy
aXRlRXJyb3IpOworICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0yNDcsNyArMjQ1LDcgQEAgc3RhdGljIGludDY0X3QgZ2V0TWF4T2Jq
ZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIG1heE8K
ICAgICByZXR1cm4gbWF4T2JqZWN0U3RvcmVJZDsKIH0KIAotSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRi
KQorSURCQmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIFBhc3NPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBkYikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9mYWN0
b3J5KGZhY3RvcnkpCiAgICAgLCBtX2RiKGRiKQpAQCAtMjU1LDcgKzI1MywxMSBAQCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgSURCRmFjdAogICAgIG1fZmFjdG9yeS0+YWRkSURCQmFja2luZ1N0b3JlKGlkZW50
aWZpZXIsIHRoaXMpOwogfQogCi1JREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSgpCitJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZSgpCit7Cit9CisK
K0lEQkJhY2tpbmdTdG9yZTo6fklEQkJhY2tpbmdTdG9yZSgpCiB7CiAgICAgbV9mYWN0b3J5LT5y
ZW1vdmVJREJCYWNraW5nU3RvcmUobV9pZGVudGlmaWVyKTsKIApAQCAtMjY0LDMyICsyNjYsMzIg
QEAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5nU3RvcmUoKQogICAg
IG1fY29tcGFyYXRvci5jbGVhcigpOwogfQogCi1lbnVtIElEQkxldmVsREJCYWNraW5nU3RvcmVP
cGVuUmVzdWx0IHsKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1lbW9yeSwKLSAgICBJ
REJMZXZlbERCQmFja2luZ1N0b3JlT3BlblN1Y2Nlc3MsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZU9wZW5GYWlsZWREaXJlY3RvcnksCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5G
YWlsZWRVbmtub3duU2NoZW1hLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51
cERlc3Ryb3lGYWlsZWQsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVwUmVv
cGVuRmFpbGVkLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJlb3BlblN1
Y2Nlc3MsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgsCitlbnVtIElEQkJhY2tp
bmdTdG9yZU9wZW5SZXN1bHQgeworICAgIElEQkJhY2tpbmdTdG9yZU9wZW5NZW1vcnksCisgICAg
SURCQmFja2luZ1N0b3JlT3BlblN1Y2Nlc3MsCisgICAgSURCQmFja2luZ1N0b3JlT3BlbkZhaWxl
ZERpcmVjdG9yeSwKKyAgICBJREJCYWNraW5nU3RvcmVPcGVuRmFpbGVkVW5rbm93blNjaGVtYSwK
KyAgICBJREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cERlc3Ryb3lGYWlsZWQsCisgICAgSURCQmFj
a2luZ1N0b3JlT3BlbkNsZWFudXBSZW9wZW5GYWlsZWQsCisgICAgSURCQmFja2luZ1N0b3JlT3Bl
bkNsZWFudXBSZW9wZW5TdWNjZXNzLAorICAgIElEQkJhY2tpbmdTdG9yZU9wZW5NYXgsCiB9Owog
Ci1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VB
cmcsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCog
ZmFjdG9yeSkKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9w
ZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNl
QXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwq
IGZhY3RvcnkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVu
Iik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW4iKTsKICAgICBTdHJpbmcg
cGF0aEJhc2UgPSBwYXRoQmFzZUFyZzsKIAogICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4g
Y29tcGFyYXRvciA9IGFkb3B0UHRyKG5ldyBDb21wYXJhdG9yKCkpOwogICAgIE93blB0cjxMZXZl
bERCRGF0YWJhc2U+IGRiOwogCiAgICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkgewotICAgICAg
ICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVk
REIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1l
bW9yeSwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAgICBIaXN0b2dyYW1T
dXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0
b3JlLk9wZW5TdGF0dXMiLCBJREJCYWNraW5nU3RvcmVPcGVuTWVtb3J5LCBJREJCYWNraW5nU3Rv
cmVPcGVuTWF4KTsKICAgICAgICAgZGIgPSBMZXZlbERCRGF0YWJhc2U6Om9wZW5Jbk1lbW9yeShj
b21wYXJhdG9yLmdldCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1ha2VBbGxEaXJl
Y3RvcmllcyhwYXRoQmFzZSkpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNy
ZWF0ZSBJbmRleGVkREIgZGF0YWJhc2UgcGF0aCAlcyIsIHBhdGhCYXNlLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldl
YkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZU9wZW5GYWlsZWREaXJlY3RvcnksIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4
KTsKKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJX
ZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkJhY2tpbmdTdG9y
ZU9wZW5GYWlsZWREaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAgICAg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPigpOwogICAgICAgICB9CiAKQEAg
LTI5OCwxOCArMzAwLDE4IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0CiAgICAgICAgIGRiID0g
TGV2ZWxEQkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwogICAgICAgICBp
ZiAoZGIgJiYgIWlzU2NoZW1hS25vd24oZGIuZ2V0KCkpKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkluZGV4ZWREQiBiYWNraW5nIHN0b3JlIGhhZCB1bmtub3duIHNjaGVtYSwgdHJlYXRpbmcg
aXQgYXMgZmFpbHVyZSB0byBvcGVuIik7Ci0gICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0Ojpo
aXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5T
dGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3BlbkZhaWxlZFVua25vd25TY2hlbWEsIElE
QkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBv
cnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUu
T3BlblN0YXR1cyIsIElEQkJhY2tpbmdTdG9yZU9wZW5GYWlsZWRVbmtub3duU2NoZW1hLCBJREJC
YWNraW5nU3RvcmVPcGVuTWF4KTsKICAgICAgICAgICAgIGRiLnJlbGVhc2UoKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChkYikKLSAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3Rv
Z3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1
cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuU3VjY2VzcywgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZU9wZW5NYXgpOworICAgICAgICAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51
bWVyYXRpb24oIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS5PcGVuU3RhdHVzIiwgSURC
QmFja2luZ1N0b3JlT3BlblN1Y2Nlc3MsIElEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJhY2tpbmcgc3RvcmUg
b3BlbiBmYWlsZWQsIGF0dGVtcHRpbmcgY2xlYW51cCIpOwogICAgICAgICAgICAgYm9vbCBzdWNj
ZXNzID0gTGV2ZWxEQkRhdGFiYXNlOjpkZXN0cm95KHBhdGgpOwogICAgICAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVkREIgYmFja2luZyBz
dG9yZSBjbGVhbnVwIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgIEhpc3RvZ3JhbVN1cHBvcnQ6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuT3Bl
blN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cERlc3Ryb3lGYWlsZWQs
IElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKKyAgICAgICAgICAgICAgICBIaXN0b2dy
YW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2lu
Z1N0b3JlLk9wZW5TdGF0dXMiLCBJREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cERlc3Ryb3lGYWls
ZWQsIElEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAgICAgICAgICAgIHJldHVybiBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4oKTsKICAgICAgICAgICAgIH0KIApAQCAtMzE3LDEwICsz
MTksMTAgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXQKICAgICAgICAgICAgIGRiID0gTGV2ZWxE
QkRhdGFiYXNlOjpvcGVuKHBhdGgsIGNvbXBhcmF0b3IuZ2V0KCkpOwogICAgICAgICAgICAgaWYg
KCFkYikgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiSW5kZXhlZERCIGJhY2tpbmcgc3Rv
cmUgcmVvcGVuIGFmdGVyIHJlY292ZXJ5IGZhaWxlZCIpOwotICAgICAgICAgICAgICAgIEhpc3Rv
Z3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4ZWREQi5CYWNr
aW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuQ2xlYW51cFJl
b3BlbkZhaWxlZCwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOworICAgICAgICAgICAg
ICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkluZGV4
ZWREQi5CYWNraW5nU3RvcmUuT3BlblN0YXR1cyIsIElEQkJhY2tpbmdTdG9yZU9wZW5DbGVhbnVw
UmVvcGVuRmFpbGVkLCBJREJCYWNraW5nU3RvcmVPcGVuTWF4KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+KCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5J
bmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
T3BlbkNsZWFudXBSZW9wZW5TdWNjZXNzLCBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Blbk1heCk7
CisgICAgICAgICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2Vi
Q29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLk9wZW5TdGF0dXMiLCBJREJCYWNraW5nU3RvcmVP
cGVuQ2xlYW51cFJlb3BlblN1Y2Nlc3MsIElEQkJhY2tpbmdTdG9yZU9wZW5NYXgpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0zMjksNyArMzMxLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXQK
IAogICAgIC8vIEZJWE1FOiBIYW5kbGUgY29tcGFyYXRvciBuYW1lIGNoYW5nZXMuCiAKLSAgICBS
ZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVmKG5ldyBJ
REJMZXZlbERCQmFja2luZ1N0b3JlKGZpbGVJZGVudGlmaWVyLCBmYWN0b3J5LCBkYi5yZWxlYXNl
KCkpKSk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVm
KG5ldyBJREJCYWNraW5nU3RvcmUoZmlsZUlkZW50aWZpZXIsIGZhY3RvcnksIGRiLnJlbGVhc2Uo
KSkpKTsKICAgICBiYWNraW5nU3RvcmUtPm1fY29tcGFyYXRvciA9IGNvbXBhcmF0b3IucmVsZWFz
ZSgpOwogCiAgICAgaWYgKCFzZXRVcE1ldGFkYXRhKGJhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSwg
ZmlsZUlkZW50aWZpZXIpKQpAQCAtMzM4LDcgKzM0MCw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1
cml0CiAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CiB9CiAKLVZlY3RvcjxTdHJp
bmc+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoKQorVmVjdG9yPFN0
cmluZz4gSURCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKCkKIHsKICAgICBWZWN0b3I8
U3RyaW5nPiBmb3VuZE5hbWVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IERh
dGFiYXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7CkBAIC0z
NjAsNyArMzYyLDcgQEAgVmVjdG9yPFN0cmluZz4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0
RGF0YWJhc2VOYW1lcygpCiAgICAgcmV0dXJuIGZvdW5kTmFtZXM7CiB9CiAKLWJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqIG1ldGFkYXRhKQorYm9vbCBJREJCYWNraW5nU3RvcmU6
OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1l
dGFkYXRhKiBtZXRhZGF0YSkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJh
c2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKIApAQCAtMzcwLDEzICszNzIs
MTMgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWIKIAogICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIu
Z2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShtZXRhZGF0YS0+aWQsIERhdGFiYXNl
TWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgbWV0YWRhdGEtPnZlcnNpb24pOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBnZXRWYXJJbnQobV9kYi5n
ZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBtZXRhZGF0YS0+aW50VmVyc2lvbik7CiAgICAg
aWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJv
cik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKG1ldGFkYXRhLT5pbnRW
ZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uKQpAQCAtNDAy
LDcgKzQwNCw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFi
YXNlKiBkYikKICAgICByZXR1cm4gZGF0YWJhc2VJZDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lk
KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwg
aW50NjRfdCYgcm93SWQpCiB7CiAgICAgcm93SWQgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0
KCkpOwogICAgIGlmIChyb3dJZCA8IDApCkBAIC00MTAsMzggKzQxMiwzOCBAQCBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdAogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFt
ZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFtZSk7CiAgICAgaWYgKCFwdXRJbnQobV9kYi5n
ZXQoKSwga2V5LCByb3dJZCkpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0
b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFw
dXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBE
YXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIHZlcnNpb24pKSB7Ci0gICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIGlmIChpbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6
Ok5vSW50VmVyc2lvbikKICAgICAgICAgaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6
OkRlZmF1bHRJbnRWZXJzaW9uOwogICAgIGlmICghcHV0VmFySW50KG1fZGIuZ2V0KCksIERhdGFi
YXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlcklu
dFZlcnNpb24pLCBpbnRWZXJzaW9uKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVs
REJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNr
aW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJE
YXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikKK2Jvb2wgSURCQmFja2luZ1N0
b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikKIHsK
ICAgICBpZiAoaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24p
CiAgICAgICAgIGludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVy
c2lvbjsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGludFZlcnNpb24gPj0gMCwgImludFZlcnNp
b24gd2FzICVsbGQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGludFZlcnNpb24pKTsKLSAgICBp
ZiAoIXB1dFZhckludChUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2Fj
dGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0
YUtleTo6VXNlckludFZlcnNpb24pLCBpbnRWZXJzaW9uKSkgewotICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICBpZiAoIXB1dFZhcklu
dChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRy
YW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGludFZlcnNpb24pKSB7CisgICAgICAgIEludGVy
bmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQor
Ym9vbCBJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbikKIHsKLSAgICBpZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29k
ZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkgewot
ICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsK
KyAgICBpZiAoIXB1dFN0cmluZyhJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2Rl
KHJvd0lkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIHZlcnNpb24pKSB7Cisg
ICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ1Myw3ICs0NTUsNyBAQCBzdGF0aWMgYm9vbCBk
ZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGJlZwogICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24t
PmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgZm9yIChpdC0+c2VlayhiZWdpbik7IGl0LT5pc1ZhbGlk
KCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBlbmQpIDwgMDsgaXQtPm5leHQoKSkgewogICAg
ICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkgewotICAgICAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDYyLDkgKzQ2NCw5IEBAIHN0
YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IFZlY3RvcjxjaGFyPiYgYmVnCiB9CiAKIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpCitib29sIElEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIElEQl9UUkFDRSgi
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UiKTsKKyAgICBJREJfVFJBQ0Uo
IklEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UiKTsKICAgICBPd25QdHI8TGV2ZWxEQldy
aXRlT25seVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IExldmVsREJXcml0ZU9ubHlUcmFuc2Fj
dGlvbjo6Y3JlYXRlKG1fZGIuZ2V0KCkpOwogCiAgICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRh
ZGF0YTsKQEAgLTQ5OCw5ICs1MDAsOSBAQCBzdGF0aWMgYm9vbCBjaGVja09iamVjdFN0b3JlQW5k
TWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlYwogICAgIHJl
dHVybiB0cnVlOwogfQogCi1WZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkKK1ZlY3Rv
cjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlSWQpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpnZXRPYmplY3RTdG9yZXMiKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9y
ZTo6Z2V0T2JqZWN0U3RvcmVzIik7CiAgICAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+
IG9iamVjdFN0b3JlczsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgMSwgMCk7CiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXko
ZGF0YWJhc2VJZCk7CkBAIC01MTUsNyArNTE3LDcgQEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0
YWRhdGE+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGQK
ICAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1l
dGFEYXRhS2V5KTsKICAgICAgICAgQVNTRVJUKHApOwogICAgICAgICBpZiAobWV0YURhdGFLZXku
bWV0YURhdGFUeXBlKCkgIT0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSkgewotICAgICAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAg
ICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAg
ICAgICAgIC8vIFBvc3NpYmxlIHN0YWxlIG1ldGFkYXRhLCBidXQgZG9uJ3QgZmFpbCB0aGUgbG9h
ZC4KICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTUy
OCwzMyArNTMwLDMzIEBAIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkCiAKICAgICAgICAgaXQtPm5l
eHQoKTsKICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0Lmdl
dCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlQ
YXRoKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVh
ZEVycm9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIElEQktleVBh
dGgga2V5UGF0aCA9IGRlY29kZUlEQktleVBhdGgoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZh
bHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgIGlmICghY2hlY2tP
YmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJ
ZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6QXV0b0luY3JlbWVudCkpIHsKLSAgICAgICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CisgICAgICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBkZWNvZGVC
b29sKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBp
dC0+bmV4dCgpOyAvLyBJcyBldmljYXRibGUuCiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9y
ZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6RXZpY3RhYmxlKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFs
RXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8gTGFzdCB2ZXJzaW9uLgogICAgICAgICBp
ZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9i
amVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Okxhc3RWZXJzaW9uKSkgewotICAg
ICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsK
KyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8gTWF4
aW11bSBpbmRleCBpZCBhbGxvY2F0ZWQuCiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFu
ZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6TWF4SW5kZXhJZCkpIHsKLSAgICAgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CisgICAgICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBpbnQ2NF90IG1heEluZGV4SWQgPSBkZWNvZGVJbnQoaXQtPnZhbHVlKCku
YmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwpAQCAtNTY3LDcgKzU2OSw3IEBAIFZlY3RvcjxJ
REJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZXMoaW50NjRfdCBkCiAgICAgICAgICAgICAvLyAoMikgTGF0ZXIsIG51bGwgdnMuIHN0cmlu
ZyB2cy4gYXJyYXkgd2FzIHN0b3JlZCBpbiB0aGUga2V5UGF0aCBpdHNlbGYuCiAgICAgICAgICAg
ICAvLyBTbyB0aGlzIGNoZWNrIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHN0cmluZy10eXBlIGtleVBh
dGhzLgogICAgICAgICAgICAgaWYgKCFoYXNLZXlQYXRoICYmIChrZXlQYXRoLnR5cGUoKSA9PSBJ
REJLZXlQYXRoOjpTdHJpbmdUeXBlICYmICFrZXlQYXRoLnN0cmluZygpLmlzRW1wdHkoKSkpIHsK
LSAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFk
RXJyb3IpOworICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVh
ZEVycm9yKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmICghaGFzS2V5UGF0aCkKQEAgLTU5NSwyMCArNTk3LDIwIEBAIHN0YXRpYyBib29sIHNl
dE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzCiAgICAgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkID0gZ2V0TWF4T2JqZWN0U3Rv
cmVJZCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSk7CiAKICAgICBpZiAob2JqZWN0
U3RvcmVJZCA8PSBtYXhPYmplY3RTdG9yZUlkKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOworICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIGlmICghcHV0SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlk
S2V5LCBvYmplY3RTdG9yZUlkKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5n
U3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQorYm9vbCBJREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGF1dG9J
bmNyZW1lbnQpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVh
dGVPYmplY3RTdG9yZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwor
ICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSIpOworICAg
IExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAg
aWYgKCFzZXRNYXhPYmplY3RTdG9yZUlkKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjI0LDkyICs2MjYs
OTIgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmEKIAogICAgIGJvb2wgb2sgPSBwdXRTdHJpbmco
bGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1lS2V5LCBuYW1lKTsKICAgICBpZiAoIW9rKSB7Ci0gICAg
ICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRJREJLZXlQYXRoKGxldmVsREJUcmFu
c2FjdGlvbiwga2V5UGF0aEtleSwga2V5UGF0aCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgYXV0
b0luY3JlbWVudEtleSwgYXV0b0luY3JlbWVudCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgZXZp
Y3RhYmxlS2V5LCBmYWxzZSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIG9rID0gcHV0SW50KGxldmVsREJUcmFuc2FjdGlvbiwgbGFzdFZlcnNpb25LZXks
IDEpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0
b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9
IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG1heEluZGV4SWRLZXksIE1pbmltdW1JbmRleElk
KTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9y
ZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBw
dXRCb29sKGxldmVsREJUcmFuc2FjdGlvbiwgaGFzS2V5UGF0aEtleSwgIWtleVBhdGguaXNOdWxs
KCkpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0
b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBvayA9
IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXks
IEtleUdlbmVyYXRvckluaXRpYWxOdW1iZXIpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEludChsZXZlbERCVHJhbnNhY3Rpb24sIG5hbWVz
S2V5LCBvYmplY3RTdG9yZUlkKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9i
amVjdFN0b3JlIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24g
PSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAg
SURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlIik7CisgICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIFN0
cmluZyBvYmplY3RTdG9yZU5hbWU7CiAgICAgZ2V0U3RyaW5nKGxldmVsREJUcmFuc2FjdGlvbiwg
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUpLCBvYmplY3RTdG9yZU5hbWUpOwogCiAgICAg
aWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIE9iamVjdFN0b3JlTWV0YURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKSwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkgewotICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAg
cmV0dXJuOyAvLyBGSVhNRTogUmVwb3J0IGVycm9yLgogICAgIH0KIAogICAgIGxldmVsREJUcmFu
c2FjdGlvbi0+cmVtb3ZlKE9iamVjdFN0b3JlTmFtZXNLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZU5hbWUpKTsKIAogICAgIGlmICghZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0
aW9uLCBJbmRleEZyZWVMaXN0S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
MCksIEluZGV4RnJlZUxpc3RLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkKSkpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3Jp
dGVFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJv
cik7CiAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFJlcG9ydCBlcnJvci4KICAgICB9CiAgICAg
aWYgKCFkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIEluZGV4TWV0YURhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKSwgSW5kZXhNZXRhRGF0YUtleTo6
ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKSkgewotICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOyAv
LyBGSVhNRTogUmVwb3J0IGVycm9yLgogICAgIH0KIAogICAgIGNsZWFyT2JqZWN0U3RvcmUodHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogfQogCi1TdHJpbmcgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5JiBrZXkpCitTdHJpbmcgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKLSAgICBJREJf
VFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCIpOwotICAgIExldmVsREJU
cmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3Jl
OjpnZXRSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmpl
Y3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwog
ICAgIFZlY3RvcjxjaGFyPiBkYXRhOwpAQCAtNzIwLDcgKzcyMiw3IEBAIFN0cmluZyBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3RpCiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNv
ZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXAp
IHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
KTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogICAgICh2b2lkKSB2ZXJzaW9uOwpAQCAtNzI4
LDI3ICs3MzAsNiBAQCBTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aQogICAgIHJldHVybiBkZWNvZGVT
dHJpbmcocCwgZGF0YS5lbmQoKSk7CiB9CiAKLW5hbWVzcGFjZSB7Ci1jbGFzcyBMZXZlbERCUmVj
b3JkSWRlbnRpZmllciA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVy
PiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24p
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihwcmltYXJ5S2V5
LCB2ZXJzaW9uKSk7IH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRp
Zmllcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IExldmVsREJSZWNvcmRJZGVudGlm
aWVyKCkpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJpbWFyeUtleS5pc0VtcHR5KCk7IH0KLSAgICBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZvaWQgc2V0UHJpbWFyeUtleShjb25z
dCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXkpIHsgbV9wcmltYXJ5S2V5ID0gcHJpbWFyeUtleTsg
fQotICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQotICAg
IHZvaWQgc2V0VmVyc2lvbihpbnQ2NF90IHZlcnNpb24pIHsgbV92ZXJzaW9uID0gdmVyc2lvbjsg
fQotCi1wcml2YXRlOgotICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKGNvbnN0IFZlY3Rvcjxj
aGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSA6IG1fcHJpbWFyeUtleShwcmltYXJ5
S2V5KSwgbV92ZXJzaW9uKHZlcnNpb24pIHsgQVNTRVJUKCFwcmltYXJ5S2V5LmlzRW1wdHkoKSk7
IH0KLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcigpIDogbV9wcmltYXJ5S2V5KCksIG1fdmVy
c2lvbigtMSkgeyB9Ci0KLSAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhNRTog
TWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24gb2Yg
dGhlIGtleS4KLSAgICBpbnQ2NF90IG1fdmVyc2lvbjsKLX07Ci19Ci0KIHN0YXRpYyBpbnQ2NF90
IGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGxhc3RWZXJzaW9uS2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Okxhc3RW
ZXJzaW9uKTsKQEAgLTc2OCwxMSArNzQ5LDExIEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNp
b25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAg
ICAgcmV0dXJuIHZlcnNpb247CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0
UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNv
bnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiti
b29sIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpwdXRSZWNvcmQiKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0
UmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwotICAgIExldmVsREJUcmFuc2Fj
dGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlv
bkZyb20odHJhbnNhY3Rpb24pOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7CiAgICAgaW50NjRfdCB2ZXJzaW9uID0gZ2V0TmV3VmVyc2lvbk51
bWJlcihsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpOwogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZWRhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogCkBAIC03ODEsNTQg
Kzc2Miw0NyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbgogICAgIHYuYXBwZW5kKGVuY29kZVN0
cmluZyh2YWx1ZSkpOwogCiAgICAgaWYgKCFsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChvYmplY3RT
dG9yZWRhdGFLZXksIHYpKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9y
ZVdyaXRlRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAgIGlmICghbGV2ZWxEQlRyYW5zYWN0aW9u
LT5wdXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSkpIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29y
ZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29y
ZElkZW50aWZpZXIpOwotICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5
KGVuY29kZUlEQktleShrZXkpKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVy
c2lvbih2ZXJzaW9uKTsKKyAgICByZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29k
ZUlEQktleShrZXkpKTsKKyAgICByZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24p
OwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNs
ZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJCYWNr
aW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQog
ewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9y
ZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQl9UUkFD
RSgiSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlIik7CisgICAgTGV2ZWxEQlRyYW5z
YWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
OjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCku
ZW5jb2RlKCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCArIDEsIDApLmVuY29kZSgpOwogCiAgICAgZGVsZXRlUmFu
Z2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBzdGFydEtleSwgc3RvcEtleSk7CiB9CiAKLVBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpCit2b2lkIElEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3Jk
SWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKLSAgICByZXR1cm4gTGV2ZWxEQlJlY29y
ZElkZW50aWZpZXI6OmNyZWF0ZSgpOwotfQorICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVSZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2Fj
dGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZy
b20odHJhbnNhY3Rpb24pOwogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJl
Y29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIq
IHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpkZWxldGVSZWNvcmQiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50
aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29y
ZElkZW50aWZpZXIpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlRGF0YUtl
eSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBvYmplY3RTdG9yZURhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkp
OwogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7CiAK
LSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVy
LT5wcmltYXJ5S2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9
IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmVjb3Jk
SWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKICAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92
ZShleGlzdHNFbnRyeUtleSk7CiB9CiAKIAotaW50NjRfdCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKK2ludDY0X3QgSURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24q
IGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcik7CiAKQEAgLTg2OCw5ICs4NDIsOSBAQCBpbnQ2NF90IElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcgog
ICAgIHJldHVybiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyOwogfQogCi1ib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3Vy
cmVudCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwg
Ym9vbCBjaGVja0N1cnJlbnQpCiB7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJh
bnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlv
bik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKIAogICAgIGlmIChjaGVja0N1cnJlbnQpIHsKICAgICAgICAgaW50NjRfdCBjdXJyZW50TnVt
YmVyID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCk7CkBAIC04ODEsMTYgKzg1NSwxNiBAQCBib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNr
aW5nU3RvcgogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIp
OwogICAgIGJvb2wgb2sgPSBwdXRJbnQobGV2ZWxEQlRyYW5zYWN0aW9uLCBrZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyS2V5LCBuZXdOdW1iZXIpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50
aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJZGVudGlm
aWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7Ci0gICAgTGV2ZWxEQlRyYW5z
YWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0
aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Omtl
eUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5
ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
a2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIApAQCAtOTAxLDkgKzg3NSw4IEBAIGJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uCiAgICAgaWYgKCFkZWNvZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBk
YXRhLmVuZCgpLCB2ZXJzaW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGV2ZWxE
QlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8
TGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihmb3VuZFJlY29yZElkZW50aWZpZXIpOwotICAgIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsK
LSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKKyAgICBm
b3VuZFJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOwor
ICAgIGZvdW5kUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtOTIzLDkgKzg5Niw5IEBAIHN0YXRpYyBib29sIGNoZWNrSW5kZXhB
bmRNZXRhRGF0YUtleShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hh
CiB9CiAKIAotVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitW
ZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewotICAgIElEQl9UUkFDRSgi
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyIpOworICAgIElEQl9UUkFDRSgiSURC
QmFja2luZ1N0b3JlOjpnZXRJbmRleGVzIik7CiAgICAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IGluZGV4ZXM7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOwogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQgKyAxLCAwLCAwKTsKQEAgLTk0Miw3ICs5MTUsNyBAQCBWZWN0b3I8
SURCSW5kZXhNZXRhZGF0YT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsCiAgICAgICAgIHAgPSBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUocCwg
bGltaXQsICZtZXRhRGF0YUtleSk7CiAgICAgICAgIEFTU0VSVChwKTsKICAgICAgICAgaWYgKG1l
dGFEYXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9IEluZGV4TWV0YURhdGFLZXk6Ok5hbWUpIHsKLSAg
ICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7
CisgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAg
ICAgICAgICAgICAvLyBQb3NzaWJsZSBzdGFsZSBtZXRhZGF0YSBkdWUgdG8gaHR0cDovL3dlYmtp
dC5vcmcvYi84NTU1NyBidXQgZG9uJ3QgZmFpbCB0aGUgbG9hZC4KICAgICAgICAgICAgIGl0LT5u
ZXh0KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTk1NCwxNCArOTI3LDE0IEBAIFZlY3Rv
cjxJREJJbmRleE1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGlu
dDY0X3QgZGF0YWJhc2VJZCwKIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyB1bmlxdWUgZmxhZwog
ICAgICAgICBpZiAoIWNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShpdC5nZXQoKSwgc3RvcEtleSwg
aW5kZXhJZCwgSW5kZXhNZXRhRGF0YUtleTo6VW5pcXVlKSkgewotICAgICAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGJvb2wgaW5kZXhVbmlxdWUgPSBkZWNvZGVCb29sKGl0LT52
YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgp
OyAvLyBrZXlQYXRoCiAgICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0Lmdl
dCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewotICAg
ICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsK
KyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIElEQktleVBhdGgga2V5UGF0aCA9
IGRlY29kZUlEQktleVBhdGgoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkp
OwpAQCAtOTg2LDIxICs5NTksMjEgQEAgc3RhdGljIGJvb2wgc2V0TWF4SW5kZXhJZChMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGkKICAgICAgICAg
bWF4SW5kZXhJZCA9IE1pbmltdW1JbmRleElkOwogCiAgICAgaWYgKGluZGV4SWQgPD0gbWF4SW5k
ZXhJZCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVDb25z
aXN0ZW5jeUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVDb25z
aXN0ZW5jeUVycm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmICgh
cHV0SW50KHRyYW5zYWN0aW9uLCBtYXhJbmRleElkS2V5LCBpbmRleElkKSkgewotICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
LCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkKK2Jvb2wgSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlz
VW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4Iik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZl
bERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFu
c2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4Iik7
CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsK
ICAgICBpZiAoIXNldE1heEluZGV4SWQobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleElkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMDEx
LDQxICs5ODQsNDEgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKIAogICAgIGJvb2wgb2sgPSBw
dXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBuYW1lS2V5LCBuYW1lKTsKICAgICBpZiAoIW9r
KSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJy
b3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBwdXRCb29sKGxldmVsREJU
cmFuc2FjdGlvbiwgdW5pcXVlS2V5LCBpc1VuaXF1ZSk7CiAgICAgaWYgKCFvaykgewotICAgICAg
ICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gcHV0SURCS2V5UGF0aChsZXZlbERCVHJhbnNh
Y3Rpb24sIGtleVBhdGhLZXksIGtleVBhdGgpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIElu
dGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKICAgICBvayA9IHB1dEJvb2wobGV2ZWxEQlRyYW5zYWN0aW9uLCBtdWx0
aUVudHJ5S2V5LCBpc011bHRpRW50cnkpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIEludGVy
bmFsRXJyb3IoSURCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCkKK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4Iik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9u
KiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJv
bSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUlu
ZGV4Iik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleE1ldGFEYXRhU3RhcnQgPSBJbmRl
eE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
MCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4TWV0YURhdGFFbmQgPSBJbmRleE1ldGFE
YXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7
CiAKICAgICBpZiAoIWRlbGV0ZVJhbmdlKGxldmVsREJUcmFuc2FjdGlvbiwgaW5kZXhNZXRhRGF0
YVN0YXJ0LCBpbmRleE1ldGFEYXRhRW5kKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJC
YWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTA1
MywyNCArMTAyNiwyMyBAQCB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aQogICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBpbmRleERhdGFFbmQgPSBJbmRleERhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKIAogICAgIGlmICghZGVsZXRlUmFuZ2UobGV2
ZWxEQlRyYW5zYWN0aW9uLCBpbmRleERhdGFTdGFydCwgaW5kZXhEYXRhRW5kKSkgewotICAgICAg
ICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERh
dGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYga2V5LCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlm
aWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXks
IGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7Ci0gICAgSURCX1RS
QUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQiKTsKKyAg
ICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkIik7CiAg
ICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwogICAgIEFTU0VSVChpbmRleElkID49IE1pbmltdW1J
bmRleElkKTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29y
ZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+
KHJlY29yZElkZW50aWZpZXIpOwogCi0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJh
bnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlv
bik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlEQktleShr
ZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKyAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBpbmRleERhdGFLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBlbmNvZGVJREJLZXkoa2V5KSwgcmVjb3JkSWRlbnRp
Zmllci0+cHJpbWFyeUtleSgpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotICAgIGRhdGEu
YXBwZW5kKGVuY29kZVZhckludChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7
Ci0gICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7
CisgICAgZGF0YS5hcHBlbmQoZW5jb2RlVmFySW50KHJlY29yZElkZW50aWZpZXItPnZlcnNpb24o
KSkpOworICAgIGRhdGEuYXBwZW5kKHJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CiAK
ICAgICByZXR1cm4gbGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQoaW5kZXhEYXRhS2V5LCBkYXRhKTsK
IH0KQEAgLTExMDMsNyArMTA3NSw3IEBAIHN0YXRpYyBib29sIGZpbmRHcmVhdGVzdEtleUxlc3NU
aGFuT3JFcXVhbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhE
YXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90LCBpbnQ2
NF90LCBpbnQ2NF90LCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKikKK2Jvb2wgSURCQmFja2luZ1N0
b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKQog
ewogICAgIC8vIEZJWE1FOiBUaGlzIGlzbid0IG5lZWRlZCBzaW5jZSB3ZSBpbnZhbGlkYXRlIGlu
ZGV4IGRhdGEgdmlhIHRoZSB2ZXJzaW9uIG51bWJlciBtZWNoYW5pc20uCiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xMTIwLDEyICsxMDkyLDEyIEBAIHN0YXRpYyBib29sIHZlcnNpb25FeGlzdHMoTGV2
ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpCiAgICAg
cmV0dXJuIGRlY29kZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpID09IHZlcnNpb247CiB9
CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBW
ZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpCitib29sIElEQkJhY2tpbmdTdG9y
ZTo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1h
cnlLZXkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5
SW5JbmRleCIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRl
eCIpOwogICAgIEFTU0VSVChmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmlzRW1wdHkoKSk7CiAKLSAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246Omxl
dmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBsZXZlbGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhJZCwga2V5KTsKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGxl
dmVsREJUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpdC0+c2VlayhsZXZlbGRi
S2V5KTsKQEAgLTExMzksNyArMTExMSw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhCiAgICAg
ICAgIGludDY0X3QgdmVyc2lvbjsKICAgICAgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhcklu
dChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7CiAgICAg
ICAgIGlmICghcCkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0
b3JlUmVhZEVycm9yKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmFwcGVuZChwLCBpdC0+dmFsdWUoKS5lbmQoKSAt
IHApOwpAQCAtMTE1NSw5ICsxMTI3LDkgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpm
aW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2EKICAgICB9
CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmlt
YXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleSYga2V5KQorUGFzc1JlZlB0cjxJREJLZXk+IElEQkJhY2tpbmdTdG9y
ZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCIpOworICAgIElEQl9UUkFD
RSgiSURCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgiKTsKIAogICAgIFZlY3Rv
cjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwogICAgIGlmIChmaW5kS2V5SW5JbmRleCh0
cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBmb3Vu
ZEVuY29kZWRQcmltYXJ5S2V5KSkgewpAQCAtMTE2OSw5ICsxMTQxLDkgQEAgUGFzc1JlZlB0cjxJ
REJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJC
YWNraW5nU3RvcmUKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjprZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQ
cmltYXJ5S2V5KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5k
ZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiB7Ci0gICAgSURCX1RSQUNF
KCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7CisgICAgSURCX1RS
QUNFKCJJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgiKTsKIAogICAgIFZlY3Rvcjxj
aGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwogICAgIGlmICghZmluZEtleUluSW5kZXgodHJh
bnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGluZGV4S2V5LCBm
b3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKQEAgLTExODEsNjQgKzExNTMsMjIgQEAgYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotbmFtZXNwYWNlIHsKLQotc3Ry
dWN0IEN1cnNvck9wdGlvbnMgewotICAgIFZlY3RvcjxjaGFyPiBsb3dLZXk7Ci0gICAgYm9vbCBs
b3dPcGVuOwotICAgIFZlY3RvcjxjaGFyPiBoaWdoS2V5OwotICAgIGJvb2wgaGlnaE9wZW47Ci0g
ICAgYm9vbCBmb3J3YXJkOwotICAgIGJvb2wgdW5pcXVlOwotfTsKLQotY2xhc3MgQ3Vyc29ySW1w
bENvbW1vbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNvciB7Ci1wdWJsaWM6Ci0gICAg
Ly8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0dWFsIGJvb2wgYWR2YW5jZSh1bnNp
Z25lZCBsb25nKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJL
ZXkqID0gMCwgSXRlcmF0b3JTdGF0ZSA9IFNlZWspOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIo
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSA9IDA7Ci0gICAgYm9v
bCBmaXJzdFNlZWsoKTsKLQotcHJvdGVjdGVkOgotICAgIEN1cnNvckltcGxDb21tb24oTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1f
Y3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQotICAgIHsKLSAgICB9Ci0KLSAgICBDdXJzb3JJ
bXBsQ29tbW9uKGNvbnN0IEN1cnNvckltcGxDb21tb24qIG90aGVyKQotICAgICAgICA6IG1fdHJh
bnNhY3Rpb24ob3RoZXItPm1fdHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9jdXJzb3JPcHRpb25z
KG90aGVyLT5tX2N1cnNvck9wdGlvbnMpCi0gICAgICAgICwgbV9jdXJyZW50S2V5KG90aGVyLT5t
X2N1cnJlbnRLZXkpCi0gICAgewotICAgICAgICBpZiAob3RoZXItPm1faXRlcmF0b3IpIHsKLSAg
ICAgICAgICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwor
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcihjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1
cnNvciogb3RoZXIpCisgICAgOiBtX3RyYW5zYWN0aW9uKG90aGVyLT5tX3RyYW5zYWN0aW9uKQor
ICAgICwgbV9jdXJzb3JPcHRpb25zKG90aGVyLT5tX2N1cnNvck9wdGlvbnMpCisgICAgLCBtX2N1
cnJlbnRLZXkob3RoZXItPm1fY3VycmVudEtleSkKK3sKKyAgICBpZiAob3RoZXItPm1faXRlcmF0
b3IpIHsKKyAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9y
KCk7CiAKLSAgICAgICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRvci0+aXNWYWxpZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+bV9pdGVyYXRvci0+a2V5KCkp
OwotICAgICAgICAgICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpOwotICAgICAg
ICAgICAgfQorICAgICAgICBpZiAob3RoZXItPm1faXRlcmF0b3ItPmlzVmFsaWQoKSkgeworICAg
ICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+bV9pdGVyYXRvci0+a2V5KCkpOworICAg
ICAgICAgICAgQVNTRVJUKG1faXRlcmF0b3ItPmlzVmFsaWQoKSk7CiAgICAgICAgIH0KICAgICB9
Cit9CiAKLSAgICB2aXJ0dWFsIH5DdXJzb3JJbXBsQ29tbW9uKCkgeyB9Ci0KLSAgICBib29sIGlz
UGFzdEJvdW5kcygpIGNvbnN0OwotICAgIGJvb2wgaGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0Owot
Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOwotICAgIEN1cnNvck9wdGlv
bnMgbV9jdXJzb3JPcHRpb25zOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0
b3I7Ci0gICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5OwotfTsKLQotYm9vbCBDdXJzb3JJ
bXBsQ29tbW9uOjpmaXJzdFNlZWsoKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Zmly
c3RTZWVrKCkKIHsKICAgICBtX2l0ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0
b3IoKTsKICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCkBAIC0xMjQ5LDcgKzExNzks
NyBAQCBib29sIEN1cnNvckltcGxDb21tb246OmZpcnN0U2VlaygpCiAgICAgcmV0dXJuIGNvbnRp
bnVlRnVuY3Rpb24oMCwgUmVhZHkpOwogfQogCi1ib29sIEN1cnNvckltcGxDb21tb246OmFkdmFu
Y2UodW5zaWduZWQgbG9uZyBjb3VudCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmFk
dmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCkKIHsKICAgICB3aGlsZSAoY291bnQtLSkgewogICAg
ICAgICBpZiAoIWNvbnRpbnVlRnVuY3Rpb24oKSkKQEAgLTEyNTgsNyArMTE4OCw3IEBAIGJvb2wg
Q3Vyc29ySW1wbENvbW1vbjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50KQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEN1cnNvckltcGxDb21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29u
c3QgSURCS2V5KiBrZXksIEl0ZXJhdG9yU3RhdGUgbmV4dFN0YXRlKQorYm9vbCBJREJCYWNraW5n
U3RvcmU6OkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSwgSXRlcmF0
b3JTdGF0ZSBuZXh0U3RhdGUpCiB7CiAgICAgUmVmUHRyPElEQktleT4gcHJldmlvdXNLZXkgPSBt
X2N1cnJlbnRLZXk7CiAKQEAgLTEzNTAsNyArMTI4MCw3IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1v
bjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSwgSXRlcmF0b3JTdGF0ZSBuZXh0
U3RhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6aGF2ZUVu
dGVyZWRSYW5nZSgpIGNvbnN0Citib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpoYXZlRW50
ZXJlZFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpIHsK
ICAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuKQpAQCAtMTM2NCw3ICsxMjk0LDcg
QEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3QKICAgICBy
ZXR1cm4gY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25z
LmhpZ2hLZXkpIDw9IDA7CiB9CiAKLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6aXNQYXN0Qm91bmRz
KCkgY29uc3QKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmlzUGFzdEJvdW5kcygpIGNv
bnN0CiB7CiAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7CiAgICAgICAgIGlmICht
X2N1cnNvck9wdGlvbnMuaGlnaE9wZW4pCkBAIC0xMzc3LDkgKzEzMDcsOSBAQCBib29sIEN1cnNv
ckltcGxDb21tb246OmlzUGFzdEJvdW5kcygpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXBhcmVJbmRl
eEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDwgMDsKIH0K
IAotY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21t
b24geworY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsIDogcHVibGljIElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9y
ZUtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBj
b25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RT
dG9yZUtleUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKICAgICB9CkBA
IC0xMzg5LDI2ICsxMzE5LDI2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwodGhpcykpOwogICAgIH0KIAotICAgIC8vIEN1cnNv
ckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigp
IE9WRVJSSURFCisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKKyAgICB2aXJ0dWFsIFN0
cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50
aWZpZXI+IHJlY29yZElkZW50aWZpZXIoKSBPVkVSUklERQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1faWRlbnRpZmllcjsKICAgICB9CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7
CiAKIHByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0g
ICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKKyAg
ICBPYmplY3RTdG9yZUtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9w
dGlvbnMpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3IodHJhbnNhY3Rpb24sIGN1
cnNvck9wdGlvbnMpCiAgICAgewogICAgIH0KIAogICAgIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bChjb25zdCBPYmplY3RTdG9yZUtleUN1cnNvckltcGwqIG90aGVyKQotICAgICAgICA6IEN1cnNv
ckltcGxDb21tb24ob3RoZXIpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3Iob3Ro
ZXIpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4g
bV9pZGVudGlmaWVyOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZp
ZXI+IG1faWRlbnRpZmllcjsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdygpCkBAIC0xNDE5LDcgKzEzNDksNyBAQCBib29sIE9iamVjdFN0b3JlS2V5
Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIE9iamVjdFN0b3JlRGF0YUtleSBvYmpl
Y3RTdG9yZURhdGFLZXk7CiAgICAga2V5UG9zaXRpb24gPSBPYmplY3RTdG9yZURhdGFLZXk6OmRl
Y29kZShrZXlQb3NpdGlvbiwga2V5TGltaXQsICZvYmplY3RTdG9yZURhdGFLZXkpOwogICAgIGlm
ICgha2V5UG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDI4LDE5ICsx
MzU4LDE5IEBAIGJvb2wgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygp
CiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBk
ZWNvZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1
ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBq
dXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0gICAgbV9pZGVudGlmaWVyID0gTGV2ZWxE
QlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZl
cnNpb24pOworICAgIG1faWRlbnRpZmllciA9IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRp
Zmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGlj
IEN1cnNvckltcGxDb21tb24geworY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGlj
IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRp
b25zJiBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBP
YmplY3RTdG9yZUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKICAgICB9
CkBAIC0xNDUwLDI4ICsxMzgwLDI4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodGhpcykpOwogICAgIH0KIAotICAgIC8vIEN1cnNv
ckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVu
dFZhbHVlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3Jk
SWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJREUKKyAgICAv
LyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJ
REUKICAgICB7CiAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXI7CiAgICAgfQogICAgIHZpcnR1
YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOwogCiBwcml2YXRlOgotICAgIE9iamVjdFN0b3JlQ3Vy
c29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRp
b25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rp
b24sIGN1cnNvck9wdGlvbnMpCisgICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJz
b3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICB9CiAKICAgICBPYmpl
Y3RTdG9yZUN1cnNvckltcGwoY29uc3QgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKiBvdGhlcikKLSAg
ICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yKG90aGVyKQogICAgICAgICAsIG1fY3VycmVudFZhbHVlKG90aGVyLT5tX2N1cnJl
bnRWYWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOwotICAg
IFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gbV9pZGVudGlmaWVyOworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsKIH07CiAK
IGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCkBAIC0xNDgyLDcg
KzE0MTIsNyBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQog
ICAgIE9iamVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7CiAgICAga2V5UG9zaXRp
b24gPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShrZXlQb3NpdGlvbiwga2V5TGltaXQsICZv
YmplY3RTdG9yZURhdGFLZXkpOwogICAgIGlmICgha2V5UG9zaXRpb24pIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0xNDkxLDIxICsxNDIxLDIxIEBAIGJvb2wgT2JqZWN0U3RvcmVDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0
IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5i
ZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXZh
bHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFk
RXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRo
aXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0g
ICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJ
REJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOworICAgIG1faWRlbnRpZmllciA9IElEQkJh
Y2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJy
ZW50S2V5KSwgdmVyc2lvbik7CiAKICAgICBtX2N1cnJlbnRWYWx1ZSA9IGRlY29kZVN0cmluZyh2
YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpKTsKIAogICAgIHJldHVybiB0
cnVlOwogfQogCi1jbGFzcyBJbmRleEtleUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENv
bW1vbiB7CitjbGFzcyBJbmRleEtleUN1cnNvckltcGwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3Jl
OjpDdXJzb3IgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4S2V5Q3Vyc29y
SW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNv
ck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlD
dXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0cmFu
c2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOwogICAgIH0KQEAgLTE1MTUsMjAgKzE0NDUsMjAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0
aGlzKSk7CiAgICAgfQogCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3Ry
aW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fcHJp
bWFyeUtleTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29y
ZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKKyAg
ICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyKCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgbG9h
ZEN1cnJlbnRSb3coKTsKIAogcHJpdmF0ZToKLSAgICBJbmRleEtleUN1cnNvckltcGwoTGV2ZWxE
QlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRp
b25zKQorICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29y
T3B0aW9ucykKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcih0cmFuc2FjdGlvbiwg
Y3Vyc29yT3B0aW9ucykKICAgICB7CiAgICAgfQogCiAgICAgSW5kZXhLZXlDdXJzb3JJbXBsKGNv
bnN0IEluZGV4S2V5Q3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1v
bihvdGhlcikKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcihvdGhlcikKICAgICAg
ICAgLCBtX3ByaW1hcnlLZXkob3RoZXItPm1fcHJpbWFyeUtleSkKICAgICB7CiAgICAgfQpAQCAt
MTU0OSwxMyArMTQ3OSwxMyBAQCBib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRS
b3coKQogICAgIGludDY0X3QgaW5kZXhEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB2YWx1
ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9p
dGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgaW5kZXhEYXRhVmVyc2lvbik7CiAgICAgaWYgKCF2YWx1
ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZVJlYWRFcnJvcik7CisgICAgICAgIEludGVybmFsRXJyb3IoSURCQmFja2luZ1N0b3JlUmVhZEVy
cm9yKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHZhbHVlUG9zaXRpb24g
PSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwg
bV9wcmltYXJ5S2V5KTsKICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0xNTcwLDcgKzE1MDAsNyBAQCBib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6
bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKICAg
ICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5k
KCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24pOwogICAgIGlmICghdCkgewotICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOworICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTE1ODIsOSArMTUxMiw5IEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBs
Ojpsb2FkQ3VycmVudFJvdygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNsYXNzIEluZGV4Q3Vy
c29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKK2NsYXNzIEluZGV4Q3Vyc29ySW1w
bCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9u
cyYgY3Vyc29yT3B0aW9ucykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5k
ZXhDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7CiAgICAgfQpAQCAtMTU5
NCwyMCArMTUyNCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5k
ZXhDdXJzb3JJbXBsKHRoaXMpKTsKICAgICB9CiAKLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0g
ICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsg
fQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZp
ZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiAwOyB9CisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKKyAgICB2aXJ0dWFs
IFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5
OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRp
Zmllcj4gcmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAw
OyB9CiAgICAgYm9vbCBsb2FkQ3VycmVudFJvdygpOwogCiBwcml2YXRlOgotICAgIEluZGV4Q3Vy
c29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRp
b25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rp
b24sIGN1cnNvck9wdGlvbnMpCisgICAgSW5kZXhDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRp
b25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKHRy
YW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICB9CiAKICAgICBJbmRleEN1cnNv
ckltcGwoY29uc3QgSW5kZXhDdXJzb3JJbXBsKiBvdGhlcikKLSAgICAgICAgOiBDdXJzb3JJbXBs
Q29tbW9uKG90aGVyKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKG90aGVyKQog
ICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhlci0+bV9wcmltYXJ5S2V5KQogICAgICAgICAsIG1f
dmFsdWUob3RoZXItPm1fdmFsdWUpCiAgICAgICAgICwgbV9wcmltYXJ5TGV2ZWxEQktleShvdGhl
ci0+bV9wcmltYXJ5TGV2ZWxEQktleSkKQEAgLTE2MzUsMTIgKzE1NjUsMTIgQEAgYm9vbCBJbmRl
eEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNp
b247CiAgICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludCh2YWx1ZVBvc2l0aW9uLCB2YWx1
ZUxpbWl0LCBpbmRleERhdGFWZXJzaW9uKTsKICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yKTsKKyAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3IpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFs
dWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgbV9wcmltYXJ5S2V5KTsKICAgICBpZiAoIXZhbHVlUG9z
aXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVh
ZEVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxFcnJvcihJREJCYWNraW5nU3RvcmVSZWFkRXJyb3Ip
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNjU1LDcgKzE1ODUsNyBAQCBi
b29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3Qgb2JqZWN0
U3RvcmVEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFySW50KHJlc3Vs
dC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24pOwogICAgIGlm
ICghdCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFk
RXJyb3IpOworICAgICAgICBJbnRlcm5hbEVycm9yKElEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE2NjgsNyArMTU5OCw3IEBAIGJv
b2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vy
c29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKK2Jvb2wgb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25z
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6
RGlyZWN0aW9uIGRpcmVjdGlvbiwgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlv
bnMmIGN1cnNvck9wdGlvbnMpCiB7CiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFu
Z2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVy
KCk7CkBAIC0xNzE1LDcgKzE2NDUsNyBAQCBib29sIG9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6
RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKK2Jvb2wg
aW5kZXhDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKIHsK
ICAgICBBU1NFUlQodHJhbnNhY3Rpb24pOwogICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYm
IHJhbmdlLT5sb3dlcigpOwpAQCAtMTc1OCwxMyArMTY4OCwxMSBAQCBib29sIGluZGV4Q3Vyc29y
T3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludAogICAgIHJldHVybiB0cnVlOwogfQogCi19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1
cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gSURCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1
cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvciIpOwotICAgIExldmVsREJUcmFuc2Fj
dGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlv
bkZyb20odHJhbnNhY3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAg
ICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yIik7Cisg
ICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAg
ICBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwog
ICAgIGlmICghb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykp
CiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1
cnNvciA9IE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwg
Y3Vyc29yT3B0aW9ucyk7CkBAIC0xNzc0LDExICsxNzAyLDExIEBAIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9y
ZUN1cnNvCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RT
dG9yZUtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJh
bmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVL
ZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSog
cmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBJREJfVFJBQ0Uo
IklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIpOwotICAg
IExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246Omxl
dmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vy
c29yT3B0aW9uczsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0
b3JlS2V5Q3Vyc29yIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rp
b24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKTsKKyAgICBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9u
cyBjdXJzb3JPcHRpb25zOwogICAgIGlmICghb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKGxldmVs
REJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlv
biwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxPYmplY3RT
dG9yZUtleUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3Jl
YXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CkBAIC0xNzg4LDExICsxNzE2
LDExIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1CiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25G
cm9tKHRyYW5zYWN0aW9uKTsKLSAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAg
SURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvciIpOworICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURC
QmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKICAgICBp
ZiAoIWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3Ig
PSBJbmRleEtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9w
dGlvbnMpOwpAQCAtMTgwMiwxMSArMTczMCwxMSBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoSQog
ICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3Io
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIElE
Ql9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yIik7Ci0gICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29yT3B0aW9ucyBjdXJz
b3JPcHRpb25zOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJz
b3IiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rp
b24pOworICAgIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zIGN1cnNvck9w
dGlvbnM7CiAgICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJz
b3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1w
bD4gY3Vyc29yID0gSW5kZXhDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9uLCBj
dXJzb3JPcHRpb25zKTsKQEAgLTE4MTYsNjAgKzE3NDQsMzUgQEAgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29y
KElEQkIKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVU
cmFuc2FjdGlvbigpCi17Ci0gICAgcmV0dXJuIFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcyk7Ci19
Ci0KLVBhc3NSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjcmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZSogYmFja2luZ1N0b3JlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rp
b24oYmFja2luZ1N0b3JlKSk7Ci19Ci0KLUlEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCitJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJCYWNraW5nU3RvcmUq
IGJhY2tpbmdTdG9yZSkKICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKIHsKIH0K
IAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4oKQordm9p
ZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbigpCiB7Ci0gICAgSURCX1RSQUNF
KCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4iKTsKKyAgICBJREJf
VFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luIik7CiAgICAgQVNTRVJU
KCFtX3RyYW5zYWN0aW9uKTsKICAgICBtX3RyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9u
OjpjcmVhdGUobV9iYWNraW5nU3RvcmUtPm1fZGIuZ2V0KCkpOwogfQogCi1ib29sIElEQkxldmVs
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQorYm9vbCBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpjb21taXQoKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCIpOworICAgIElEQl9UUkFDRSgiSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0Iik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rp
b24pOwogICAgIGJvb2wgcmVzdWx0ID0gbV90cmFuc2FjdGlvbi0+Y29tbWl0KCk7CiAgICAgbV90
cmFuc2FjdGlvbi5jbGVhcigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKCkKK3ZvaWQgSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrIik7CisgICAgSURCX1RSQUNF
KCJJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjayIpOwogICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uKTsKICAgICBtX3RyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwogICAgIG1fdHJh
bnNhY3Rpb24uY2xlYXIoKTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpiYWNr
aW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnKQotewotICAgIFN0cmluZyBwYXRoQmFzZSA9
IHBhdGhCYXNlQXJnOwotCi0gICAgaWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHVzZSB0aGUg
c2FtZSBMZXZlbERCIGRhdGFiYXNlIGZvciBhbGwgb3JpZ2lucy4KLSAgICBTdHJpbmcgcGF0aCA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFi
YXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIubGV2ZWxkYiIpOwotCi0gICAgLy8gRklYTUU6
IHRoaXMgaXMgY2hlY2tpbmcgZm9yIHByZXNlbmNlIG9mIHRoZSBkb21haW4sIG5vdCB0aGUgZGF0
YWJhc2UgaXRzZWxmCi0gICAgcmV0dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NVUlJFTlQiKTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCiAjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDNjOTQ1MWNjMDc0YzIwZTZm
MjE3YzQ5NDg3YTNkODM1MmYyNzAyYWQuLjI1MmRlZTFmNWEyODkxZjc0Njc2ZTE1YmI3M2UzMDE5
MzVhODVhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oCkBAIC0yOSw2MCArMjksNzMgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKIAogI2luY2x1ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQktleVBhdGgu
aCIKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSAiTGV2ZWxEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKK2NsYXNz
IExldmVsREJEYXRhYmFzZTsKK2NsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKK2NsYXNzIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbDsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQktleVJhbmdlOwotY2xh
c3MgU2VjdXJpdHlPcmlnaW47Ci1zdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKIAogY2xhc3Mg
SURCQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7CiBw
dWJsaWM6CiAgICAgY2xhc3MgVHJhbnNhY3Rpb247CiAKLSAgICB2aXJ0dWFsIH5JREJCYWNraW5n
U3RvcmUoKSB7fTsKKyAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBT
dHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqKTsKIAotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VO
YW1lcygpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqIGZvdW5kTWV0YWRhdGEpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBp
bnQ2NF90JiByb3dJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUlu
dFZlcnNpb24oVHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24p
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShUcmFuc2Fj
dGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKKyAgICB2
aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGdldERhdGFiYXNlTmFtZXMoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNl
TWV0YWRhdGEqKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJz
aW9uLCBpbnQ2NF90JiByb3dJZCk7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNl
TWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNl
SW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwg
aW50NjRfdCBpbnRWZXJzaW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZpcnR1YWwgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0
YWRhdGE+IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFk
YXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOworICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogCiAgICAgY2xhc3MgUmVjb3Jk
SWRlbnRpZmllciA6IHB1YmxpYyBSZWZDb3VudGVkPFJlY29yZElkZW50aWZpZXI+IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoY29uc3QgVmVjdG9y
PGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBSZWNvcmRJZGVudGlmaWVyKHByaW1hcnlLZXksIHZlcnNpb24pKTsgfQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgUmVjb3JkSWRlbnRpZmllcigpKTsgfQogICAgICAgICB2aXJ0dWFsIH5SZWNvcmRJZGVu
dGlmaWVyKCkgeyB9CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX3ByaW1hcnlLZXkuaXNFbXB0eSgpOyB9CisgICAgICAgIFZlY3RvcjxjaGFyPiBwcmlt
YXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CisgICAgICAgIHZvaWQgc2V0
UHJpbWFyeUtleShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXkpIHsgbV9wcmltYXJ5S2V5
ID0gcHJpbWFyeUtleTsgfQorICAgICAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVy
biBtX3ZlcnNpb247IH0KKyAgICAgICAgdm9pZCBzZXRWZXJzaW9uKGludDY0X3QgdmVyc2lvbikg
eyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWNvcmRJ
ZGVudGlmaWVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9u
KSA6IG1fcHJpbWFyeUtleShwcmltYXJ5S2V5KSwgbV92ZXJzaW9uKHZlcnNpb24pIHsgQVNTRVJU
KCFwcmltYXJ5S2V5LmlzRW1wdHkoKSk7IH0KKyAgICAgICAgUmVjb3JkSWRlbnRpZmllcigpIDog
bV9wcmltYXJ5S2V5KCksIG1fdmVyc2lvbigtMSkgeyB9CisKKyAgICAgICAgVmVjdG9yPGNoYXI+
IG1fcHJpbWFyeUtleTsgLy8gRklYTUU6IE1ha2UgaXQgbW9yZSBjbGVhciB0aGF0IHRoaXMgaXMg
dGhlICplbmNvZGVkKiB2ZXJzaW9uIG9mIHRoZSBrZXkuCisgICAgICAgIGludDY0X3QgbV92ZXJz
aW9uOwogICAgIH07Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IGNy
ZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcg
Z2V0UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3Jk
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0
dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051
bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3Rz
SW5PYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29y
ZElkZW50aWZpZXIpID0gMDsKLQotICAgIHZpcnR1YWwgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+
IGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVs
dGlFbnRyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
S2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlaWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5
KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciop
OworICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29y
ZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVu
dE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRl
LCBib29sIGNoZWNrQ3VycmVudCk7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0
U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBm
b3VuZFJlY29yZElkZW50aWZpZXIpOworCisgICAgdmlydHVhbCBWZWN0b3I8SURCSW5kZXhNZXRh
ZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlz
VW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0
SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBib29sIGRl
bGV0ZUluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgUmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+
IGdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0
cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOwogCiAgICAgY2xhc3MgQ3Vyc29yIDogcHVibGlj
IFJlZkNvdW50ZWQ8Q3Vyc29yPiB7CiAgICAgcHVibGljOgpAQCAtOTEsMzMgKzEwNCw4NCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBTZWVrCiAgICAgICAgIH07CiAKKyAgICAgICAgc3RydWN0IEN1
cnNvck9wdGlvbnMgeworICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGxvd0tleTsKKyAgICAgICAg
ICAgIGJvb2wgbG93T3BlbjsKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBoaWdoS2V5OworICAg
ICAgICAgICAgYm9vbCBoaWdoT3BlbjsKKyAgICAgICAgICAgIGJvb2wgZm9yd2FyZDsKKyAgICAg
ICAgICAgIGJvb2wgdW5pcXVlOworICAgICAgICB9OworCisgICAgICAgIEN1cnNvcihMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRp
b25zKQorICAgICAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAg
ICAgLCBtX2N1cnNvck9wdGlvbnMoY3Vyc29yT3B0aW9ucykKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIEN1cnNvcihjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvciogb3RoZXIpOwor
CisgICAgICAgIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRLZXk7IH0KKyAgICAgICAgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSogPSAw
LCBJdGVyYXRvclN0YXRlID0gU2Vlayk7CisgICAgICAgIGJvb2wgYWR2YW5jZSh1bnNpZ25lZCBs
b25nKTsKKyAgICAgICAgYm9vbCBmaXJzdFNlZWsoKTsKKwogICAgICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q3Vyc29yPiBjbG9uZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGFkdmFuY2Uo
dW5zaWduZWQgbG9uZykgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGludWVGdW5jdGlv
bihjb25zdCBJREJLZXkqID0gMCwgSXRlcmF0b3JTdGF0ZSA9IFNlZWspID0gMDsKLSAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFN0cmlu
ZyB2YWx1ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZp
ZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpID0gMDsKLSAgICAgICAgdmlydHVhbCB+
Q3Vyc29yKCkgeyB9OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CisgICAgICAgIHZpcnR1YWwgU3Ry
aW5nIHZhbHVlKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVjb3Jk
SWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcigpID0gMDsKKyAgICAgICAgdmlydHVhbCB+Q3Vy
c29yKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpID0gMDsKKwor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgYm9vbCBpc1Bhc3RCb3VuZHMoKSBjb25zdDsKKyAgICAg
ICAgYm9vbCBoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3Q7CisKKyAgICAgICAgTGV2ZWxEQlRyYW5z
YWN0aW9uKiBtX3RyYW5zYWN0aW9uOworICAgICAgICBjb25zdCBDdXJzb3JPcHRpb25zIG1fY3Vy
c29yT3B0aW9uczsKKyAgICAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRvcjsK
KyAgICAgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5OwogICAgIH07CiAKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElE
QkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
b3BlbkluZGV4S2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5JbmRleEN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBv
cGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5n
ZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5n
ZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CiAKLSAg
ICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zYWN0aW9uPiB7Cisg
ICAgY2xhc3MgVHJhbnNhY3Rpb24gewogICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+VHJh
bnNhY3Rpb24oKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgPSAwOwotICAgICAg
ICB2aXJ0dWFsIGJvb2wgY29tbWl0KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJh
Y2soKSA9IDA7CisgICAgICAgIFRyYW5zYWN0aW9uKElEQkJhY2tpbmdTdG9yZSopOworICAgICAg
ICB2b2lkIGJlZ2luKCk7CisgICAgICAgIGJvb2wgY29tbWl0KCk7CisgICAgICAgIHZvaWQgcm9s
bGJhY2soKTsKKworICAgICAgICBzdGF0aWMgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRyYW5zYWN0aW9uKj4odHJhbnNhY3Rpb24pLT5tX3Ry
YW5zYWN0aW9uLmdldCgpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBJREJC
YWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOworICAgICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5z
YWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogICAgIH07Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRy
YW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIElE
QkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5k
SW1wbCosIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPik7CisKKyAgICAvLyBTaG91bGQgb25s
eSB1c2VkIGZvciBtb2NraW5nLgorICAgIElEQkJhY2tpbmdTdG9yZSgpOworCitwcml2YXRlOgor
ICAgIGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSk7CisK
KyAgICBTdHJpbmcgbV9pZGVudGlmaWVyOworICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZElt
cGw+IG1fZmFjdG9yeTsKKyAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOworICAgIE93
blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJhdG9yOworCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCiAjZW5kaWYgLy8gSURCQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4
IDU1YzhkYWI0YTc4MTY2NjlmYzE4N2IzMjE4MjZjNzNiYzczYjk2NzUuLmVhYTczM2E1MjhlZjQ1
NGFjMzgwZWMyZjBjNjFkNDUxM2NiZjcwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMzMs
NyArMzMsNiBAQAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkRh
dGFiYXNlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgot
I2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xMzQsMTIgKzEzMyw3IEBAIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1Jl
ZlB0cjxTCiAgICAgaWYgKGl0MiAhPSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQoKSkKICAgICAgICAg
YmFja2luZ1N0b3JlID0gaXQyLT52YWx1ZTsKICAgICBlbHNlIHsKLSNpZiBVU0UoTEVWRUxEQikK
LSAgICAgICAgYmFja2luZ1N0b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1
cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwot
I2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRhdGFEaXJlY3RvcnkpOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgorICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJCYWNr
aW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3RvcnksIGZpbGVJ
ZGVudGlmaWVyLCB0aGlzKTsKICAgICB9CiAKICAgICBpZiAoYmFja2luZ1N0b3JlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2IyNzI1MTRhMWYyODEy
MDM1MDgzNTNhMzk0MjEwNzIzYzRiMzg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKLSNkZWZpbmUgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxE
QikKLQotI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKLWNs
YXNzIExldmVsREJEYXRhYmFzZTsKLWNsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKLWNsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW1wbDsKLQotY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1
YmxpYyBJREJCYWNraW5nU3RvcmUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJh
c2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCop
OwotICAgIHZpcnR1YWwgfklEQkxldmVsREJCYWNraW5nU3RvcmUoKTsKLQotICAgIHZpcnR1YWwg
VmVjdG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VOYW1lcygpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0
YSopOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGlu
dDY0X3QmIHJvd0lkKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJz
aW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90
IGludFZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJp
bmcmIG5hbWUpOwotCi0gICAgdmlydHVhbCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4g
Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCk7Ci0gICAgdmlydHVhbCBib29sIGNy
ZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
UmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICB2
aXJ0dWFsIFN0cmluZyBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwg
dm9pZCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsK
LSAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpOwotICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3Vy
cmVudCk7Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50
aWZpZXIpOwotCi0gICAgdmlydHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVh
bCBib29sIGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlz
TXVsdGlFbnRyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVj
b3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25z
dCBSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZv
clJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgUmVjb3JkSWRl
bnRpZmllciopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlW
aWFJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7
Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3Vu
ZFByaW1hcnlLZXkpOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVj
dFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJD
dXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9i
amVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJD
dXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbklu
ZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOwotCi0gICAgc3Rh
dGljIGJvb2wgYmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlKTsKLQotcHJvdGVjdGVkOgotICAgIElEQkxl
dmVsREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFj
a2VuZEltcGwqLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4pOwotCi1wcml2YXRlOgotICAg
IGJvb2wgZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYsIFZlY3RvcjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSk7Ci0KLSAg
ICBTdHJpbmcgbV9pZGVudGlmaWVyOwotICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+
IG1fZmFjdG9yeTsKLSAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOwotICAgIE93blB0
cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJhdG9yOwotCi0gICAgY2xhc3MgVHJhbnNhY3Rp
b24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiB7Ci0gICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlKElEQkxldmVsREJC
YWNraW5nU3RvcmUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCk7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBjb21taXQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCk7Ci0K
LSAgICAgICAgc3RhdGljIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uRnJv
bShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKj4odHJhbnNhY3Rpb24pLT5tX3RyYW5zYWN0aW9uLmdldCgpOwotICAgICAgICB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0
b3JlKik7Ci0gICAgICAgIElEQkxldmVsREJCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOwot
ICAgICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgIH07
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLQotI2VuZGlmIC8vIFVTRShMRVZFTERC
KQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDQ2NDBj
MTNkZDJlM2M3N2IyZGU4MGNjMGRiN2FkYmY1OTAzZTAzZjUuLjEyYzM3M2ZlMDYyMTA2MzQxZjhk
MzIzZjkwY2Y4MmQwYTgzOWNlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0y
MzYsNyArMjM2LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtl
eXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBj
b3VsZCBiZSBhc3luY2hyb25vdXMsIGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29y
dGggdGhlIGV4dHJhIGNvbXBsZXhpdHkuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVj
b3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJ
bnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJl
Y29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIgPSBJREJCYWNraW5nU3RvcmU6OlJlY29y
ZElkZW50aWZpZXI6OmNyZWF0ZSgpOwogICAgIGlmICghYmFja2luZ1N0b3JlKCktPmtleUV4aXN0
c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRh
dGFiYXNlSWQoKSwgaWQoKSwgKnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7
CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBAIC0zMjks
NyArMzI5LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKIAogICAgIEFTU0VSVChrZXkgJiYg
a2V5LT5pc1ZhbGlkKCkpOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRl
bnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gSURCQmFja2luZ1N0b3Jl
OjpSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKTsKICAgICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5
ICYmIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFi
YXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkp
KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3Rz
IGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICByZXR1cm47CkBAIC0zOTMsNyArMzkz
LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlAKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29y
KSB7CiAKICAgICAgICAgZG8gewotICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tp
bmdTdG9yZUN1cnNvci0+b2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CisgICAgICAgICAg
ICByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVy
KCk7CiAKICAgICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhN
YXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBv
YmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFG
b3JSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0
b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpdC0+a2V5LCByZWNvcmRJZGVu
dGlmaWVyLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKaW5kZXggZTE2NTJkNjk1
ZGY4NTM0MWIzNjA4NmQ4Njc5YjEzNzQ0MDJmZjhlYi4uYmE4NzVhMTcyZjc2YjNmZjY1OTYyZTZh
OTk5NmRkMzMzZmViYmJkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTQ5LDcg
KzQ5LDcgQEAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamUKICAgICAsIG1fbW9kZShtb2RlKQogICAg
ICwgbV9zdGF0ZShVbnVzZWQpCiAgICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwgbV90
cmFuc2FjdGlvbihkYXRhYmFzZS0+YmFja2luZ1N0b3JlKCktPmNyZWF0ZVRyYW5zYWN0aW9uKCkp
CisgICAgLCBtX3RyYW5zYWN0aW9uKGRhdGFiYXNlLT5iYWNraW5nU3RvcmUoKS5nZXQoKSkKICAg
ICAsIG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGlt
ZXJGaXJlZCkKICAgICAsIG1fdGFza0V2ZW50VGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnRhc2tFdmVudFRpbWVyRmlyZWQpCiAgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZl
RXZlbnRzKDApCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjphYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQogICAgIG1fdGFz
a0V2ZW50VGltZXIuc3RvcCgpOwogCiAgICAgaWYgKHdhc1J1bm5pbmcpCi0gICAgICAgIG1fdHJh
bnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgICAgIG1fdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsK
IAogICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJv
cnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpjb21taXQoKQogICAgIGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9
PSBVbnVzZWQ7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwogCi0gICAgYm9vbCBjb21taXR0ZWQg
PSB1bnVzZWQgfHwgbV90cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgYm9vbCBjb21taXR0ZWQg
PSB1bnVzZWQgfHwgbV90cmFuc2FjdGlvbi5jb21taXQoKTsKIAogICAgIC8vIEJhY2tpbmcgc3Rv
cmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBz
Y3JpcHQgY2FsbGJhY2tzCiAgICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNr
cyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQpAQCAt
MjQ3LDcgKzI0Nyw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVy
RmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qCiAgICAgQVNTRVJUKCFpc1Rh
c2tRdWV1ZUVtcHR5KCkpOwogCiAgICAgaWYgKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0g
ICAgICAgIG1fdHJhbnNhY3Rpb24tPmJlZ2luKCk7CisgICAgICAgIG1fdHJhbnNhY3Rpb24uYmVn
aW4oKTsKICAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmgKaW5kZXggNGU0ZGRlY2MxMTIzNjk2Y2E0NjU3NTNkYjVmMTI5MmJjM2NlMzY4MS4u
YzhmYmJmNTNjY2RiMmExZjM0MWRkZTcyODlkZjgyOGI2MDgxMGIwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuaApAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRQZW5kaW5n
RXZlbnRzKGludCk7CiAgICAgdm9pZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1By
ZWVtcHRpdmVFdmVudHMrKzsgfQogICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQo
KSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRp
dmVFdmVudHMgPj0gMCk7IH0KLSAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KKyAg
ICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
IHsgcmV0dXJuICZtX3RyYW5zYWN0aW9uOyB9CiAKIHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CkBAIC0xMDEsNyArMTAx
LDcgQEAgcHJpdmF0ZToKICAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1ZXVlOwogICAg
IFRhc2tRdWV1ZSBtX2Fib3J0VGFza1F1ZXVlOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiBtX3RyYW5zYWN0aW9uOwogCiAgICAgLy8gRklYTUU6IGRlbGV0ZSB0aGUgdGltZXIg
b25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KICAgICBUaW1lcjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiBtX3Rhc2tUaW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0MWU5YWYzNzFkNGY3ODExOWQ3MWU5YTE5MjNi
ZmY4Njg0NjAzYWU2Li5hOTJhZTllOWFmOWI0MWEwMzQ4MDgwZTkwMTlmZjQ5MjkzMTc0ZmQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0zNDM2LDYgKzM0MzYsNyBAQAogCQk5NzEyQTVBRTE1MDA0RURBMDA0OEFGMTAgLyogRE9N
V2luZG93SW5kZXhlZERhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzEyQTU1NTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhl
ZERhdGFiYXNlLmggKi87IH07CiAJCTk3MTJBNUIwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
NTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5jcHAgKi87IH07CiAJCTk3MTJBNUIxMTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCAqLzsgfTsK
KwkJOTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4QzE1MDA0RURB
MDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmNwcCAqLzsgfTsKIAkJOTcxMkE1QjMxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tp
bmdTdG9yZS5oICovOyB9OwogCQk5NzEyQTVCNDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJh
Y2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEy
QTU1QjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggKi87IH07CiAJCTk3MTJBNUI1
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1
cnNvci5jcHAgKi87IH07CkBAIC0zNDc1LDggKzM0NzYsNiBAQAogCQk5NzEyQTVERjE1MDA0RURB
MDA0OEFGMTAgLyogSURCS2V5UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1ODYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCAq
LzsgfTsKIAkJOTcxMkE1RTIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg5MTUwMDRF
REEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAgKi87IH07CiAJCTk3MTJBNUUzMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTcxMkE1OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmgg
Ki87IH07Ci0JCTk3MTJBNUU1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEMx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgKi87IH07Ci0JCTk3MTJBNUU2
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4RDE1MDA0RURBMDA0OEFG
MTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oICovOyB9OwogCQk5NzEyQTVFNzE1MDA0RURB
MDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4RTE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2
ZWxEQkNvZGluZy5jcHAgKi87IH07CiAJCTk3MTJBNUU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJM
ZXZlbERCQ29kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU4RjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5oICovOyB9
OwogCQk5NzEyQTVFOTE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTAxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLzsgfTsKQEAgLTEwNzA0LDcgKzEwNzAz
LDcgQEAKIAkJOTcxMkE1OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQktleVJhbmdlLmg7IHBhdGggPSBNb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
NzEyQTU4QjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IElEQktleVJhbmdlLmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eVJhbmdlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OEMxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBJREJCYWNraW5nU3RvcmUuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcx
MkE1OEQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2lu
Z1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkJhY2tpbmdTdG9y
ZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZl
bERCQ29kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkxl
dmVsREJDb2RpbmcuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGlu
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNThGMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IElEQkxldmVsREJDb2RpbmcuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJDb2RpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OTAxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IElEQk9iamVjdFN0b3JlLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODQ5
LDYgKzE3ODQ4LDcgQEAKIAkJCQk5NzEyQTU1ODE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55Lmgg
Ki8sCiAJCQkJOTcxMkE1NTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5pZGwgKi8sCiAJCQkJ
OTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovLAorCQkJCTk3
MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3BwICovLAogCQkJCTk3
MTJBNTVCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCAqLywKIAkJCQk5NzEyQTU1
QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmNwcCAqLywKIAkJCQk5NzEyQTU1RDE1MDA0
RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmggKi8sCkBAIC0xNzg5NSw4ICsxNzg5NSw2IEBACiAJ
CQkJOTcxMkE1ODkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCAqLywKIAkJCQk5
NzEyQTU4QTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCAqLywKIAkJCQk5NzEyQTU4
QjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaWRsICovLAotCQkJCTk3MTJBNThDMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3BwICovLAotCQkJCTk3MTJBNThEMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJOTcxMkE1
OEUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovLAogCQkJCTk3MTJB
NThGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi8sCiAJCQkJQkNDNjUx
NDUxNTkyOTRDMzAwQUNDOUU0IC8qIElEQk1ldGFkYXRhLmggKi8sCkBAIC0yMzgyMCw3ICsyMzgx
OCw2IEBACiAJCQkJOTcxMkE1REMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3MTJBNUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTcxMkE1RTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVs
REJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUU4MTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVFQTE1
MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
MTJBNUVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggaW4g
SGVhZGVycyAqLywKQEAgLTI3MDA2LDYgKzI3MDAzLDcgQEAKIAkJCQk1MUUxRUNDMDBDOTFDOTA0
MDBEQzI1NUIgLyogSWNvblJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NTA5OUM0MTEz
NzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVC
MDE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJB
NUU1MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzU4NUE2NjIxMUQ0RkFDNTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1QjUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVCODE1MDA0RURBMDA0OEFGMTAgLyogSURC
Q3Vyc29yQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzAyMyw3ICsyNzAyMSw2
IEBACiAJCQkJOTcxMkE1REIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5NzEyQTVERTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NzEyQTVFMjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJh
Y2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVFNzE1MDA0RURBMDA0OEFG
MTAgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVFOTE1
MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTcxMkE1RUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0lEQkZha2VCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURC
RmFrZUJhY2tpbmdTdG9yZS5oCmluZGV4IDRlMzdkM2VhYTkwNGY2YjkyMmYyOGQyMGI4OWVlMGIx
ZDUwYzFiZjkuLjAyZDJkNWQ0MjBjZjMzMzkxODUwNTQ2OGQ0NTk1ZGEzM2RhODlhNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5o
CkBAIC00Myw4ICs0Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0
U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5j
cmVtZW50KSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVj
b3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSBPVkVSUklERSB7
IHJldHVybiBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+KCk7IH0KLQogICAgIHZpcnR1YWwg
U3RyaW5nIGdldFJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBTdHJpbmco
KTsgfQogICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CkBAIC02NSw4
ICs2Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2Jq
ZWN0U3RvcmVDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikg
T1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQ
YXNzUmVmUHRyPEN1cnNvcj4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9w
ZW5JbmRleEN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9u
KCkgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4oKTsgfQogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173101</attachid>
            <date>2012-11-08 13:01:49 -0800</date>
            <delta_ts>2012-11-08 17:05:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101415-20121108125958.patch</filename>
            <type>text/plain</type>
            <size>90735</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzOTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjU2M2RkMmQ0ZDIyNmYz
ZTJmMDA2NGJkODc3MzAwNGFlYWQxNmJlZS4uNWQyYmU4ZWYxMzY2MDZiNzA1NzQ4MGVkZWQwNTc4
NDZlM2EwYmU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAxMi0xMS0wNyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBD
b21iaW5lIElEQkJhY2tpbmdTdG9yZSBhbmQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29tYmluZSBhYnN0cmFj
dCBpbnRlcmZhY2UgSURCQmFja2luZ1N0b3JlIHdpdGggaXRzIG9ubHkKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24sIElEQkxldmVsREJCYWNraW5nU3RvcmUsIHRvIHJlZHVjZSBjb2RlCisgICAgICAg
IGNvbXBsZXhpdHkuIFRoZSBsZWdhY3kgc3RydWN0dXJlIGV4aXN0ZWQgdG8gc3VwcG9ydCBhIFNR
TExpdGUKKyAgICAgICAgSURCQmFja2luZ1N0b3JlLCBidXQgaXQgaXMgbm8gbG9uZ2VyIHdvcnRo
IHRoZSBjb21wbGV4aXR5IHRvCisgICAgICAgIHN1cHBvcnQgdGhpcyBhYnN0cmFjdGlvbi4KKwor
ICAgICAgICBDaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEpIE1lcmdpbmcgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSBpbnRvIElEQkJhY2tpbmdTdG9yZS4KKworICAgICAgICAyKSBNZXJnZSB0b2dl
dGhlciBJREJCYWNraW5nU3RvcmUncyBpbm5lciBjbGFzc2VzOiBDdXJzb3IsCisgICAgICAgIFRy
YW5zYWN0aW9uLCBhbmQgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGZpZXIgd2l0aCB0aGVpciByZXNw
ZWN0aXZlCisgICAgICAgIHN1YmNsYXNzZXMgaW4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS4KKwor
ICAgICAgICAzKSBTaW1wbGlmeWluZyB0aGUgaW5uZXIgVHJhbnNhY3Rpb24gY2xhc3MgdG8gbm90
IGJlIHJlZmNvdW50ZWQgb3IKKyAgICAgICAgdmlydHVhbGl6ZWQsIHRvIGFsbG93IGl0IHRvIGJl
IGEgc2ltcGxlIGNvbmNyZXRlIG1lbWJlciBvZiBpdHMKKyAgICAgICAgb3duZXIsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMgcHVy
ZWx5IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVjb3JkSW50ZXJuYWxFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRVcE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjp+SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRNYXhPYmplY3RT
dG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5P
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldEluZGV4
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4SW5kZXhJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
QmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OkN1cnNvcjo6Zmlyc3RTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yOjpoYXZlRW50ZXJlZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjppc1Bhc3RCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUpOgorICAgICAgICAoT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpP
YmplY3RTdG9yZUtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RT
dG9yZUN1cnNvckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUN1cnNvckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6Ok9iamVjdFN0b3JlQ3Vyc29ySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKToKKyAg
ICAgICAgKEluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1
cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6
cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OnJlY29y
ZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjpJbmRl
eEtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChJbmRleEN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhD
dXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnBy
aW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpyZWNvcmRJZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6SW5kZXhDdXJzb3JJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OmluZGV4Q3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoUmVjb3JkSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZp
ZXI6On5SZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpzZXRQcmltYXJ5S2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6dmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6
OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJ
ZGVudGlmaWVyOjpSZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20pOgorICAgICAgICAoQ3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpwcmltYXJ5S2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjp+Q3Vyc29yKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMi0xMS0wOCAgQW5kcmVh
cyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgNC42OE1CIGJlbG93IFJlbmRl
clN0eWxlOjpmaWx0ZXIoKSBvbiBNZW1idXN0ZXIzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA5NmFmZWM5ZThhODRhNGVhNGU1N2ZhY2IwMGYwNzMwY2Y2MGNmY2M2Li5iZTU1MTM2NmM1
ZDAzYzUyNWRmNTI2ZmNkZTQxYWMzM2I1MjE1MWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTExLTA3ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENvbWJpbmUgSURCQmFja2luZ1N0b3Jl
IGFuZCBJREJMZXZlbERCQmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgbWV0aG9kIHRoYXQgaXMgbm8gbG9uZ2VyIGluIHRo
ZSBiYXNlIGNsYXNzLgorCisgICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oOgor
CiAyMDEyLTExLTA4ICBEYW4gQ2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgogCiAgICAgICAg
IENsZWFudXAgSURCQmluZGluZ1V0aWxpdGllc1Rlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IGZhNmJiMTJjY2JkYjMxOWY1YWExNDIwNjhlNDVlYWI1N2Y3ZmJmMTkuLmVkMDEw
NWIzMzQ0MTBhNzcwMjgzNDRiOTIyZTA5NGViMzA0MWE5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQpAQCAtMTgzMyw2ICsxODMzLDcgQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWRE
YXRhYmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBcCisJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgXApAQCAtMTg3Miw4
ICsxODczLDYgQEAgd2ViY29yZV9tb2R1bGVzX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJLZXlSYW5nZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk1ldGFkYXRhLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNmI1YTYyYTA3NmUxZmFmNWNlNDE4
MzI3ODdhNzNhNDE5ZWRjYmM0NC4uNDgxOWVjNzQ3MjY2M2JmYTZjYzVkOWIxYWJjZjEwNzAxY2U5
YTBiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJC
YWNraW5nU3RvcmUuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlLmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikK
IAogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJIaXN0b2dyYW1TdXBwb3J0Lmgi
CkBAIC0zNSw3ICszNCw2IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5
UGF0aC5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkxldmVsREJDb2RpbmcuaCIKICNpbmNsdWRlICJJ
REJNZXRhZGF0YS5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKQEAgLTI0Nyw3ICsyNDUsNyBA
QCBzdGF0aWMgaW50NjRfdCBnZXRNYXhPYmplY3RTdG9yZUlkKERCT3JUcmFuc2FjdGlvbiogZGIs
IGNvbnN0IFZlY3RvcjxjaGFyPiYgbWF4TwogICAgIHJldHVybiBtYXhPYmplY3RTdG9yZUlkOwog
fQogCi1JREJMZXZlbERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBQYXNz
T3duUHRyPExldmVsREJEYXRhYmFzZT4gZGIpCitJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdT
dG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFj
dG9yeSwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRiKQogICAgIDogbV9pZGVudGlmaWVy
KGlkZW50aWZpZXIpCiAgICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKICAgICAsIG1fZGIoZGIpCkBA
IC0yNTUsNyArMjUzLDExIEBAIElEQkxldmVsREJCYWNraW5nU3RvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0CiAgICAgbV9mYWN0b3J5
LT5hZGRJREJCYWNraW5nU3RvcmUoaWRlbnRpZmllciwgdGhpcyk7CiB9CiAKLUlEQkxldmVsREJC
YWNraW5nU3RvcmU6On5JREJMZXZlbERCQmFja2luZ1N0b3JlKCkKK0lEQkJhY2tpbmdTdG9yZTo6
SURCQmFja2luZ1N0b3JlKCkKK3sKK30KKworSURCQmFja2luZ1N0b3JlOjp+SURCQmFja2luZ1N0
b3JlKCkKIHsKICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkJhY2tpbmdTdG9yZShtX2lkZW50aWZp
ZXIpOwogCkBAIC0yNzUsOSArMjc3LDkgQEAgZW51bSBJREJMZXZlbERCQmFja2luZ1N0b3JlT3Bl
blJlc3VsdCB7CiAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5NYXgsCiB9OwogCi1QYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcsIGNv
bnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9y
eSkKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJCYWNraW5nU3RvcmU6Om9wZW4oU2Vj
dXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBj
b25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3Rv
cnkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuIik7Cisg
ICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW4iKTsKICAgICBTdHJpbmcgcGF0aEJh
c2UgPSBwYXRoQmFzZUFyZzsKIAogICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gY29tcGFy
YXRvciA9IGFkb3B0UHRyKG5ldyBDb21wYXJhdG9yKCkpOwpAQCAtMzI5LDcgKzMzMSw3IEBAIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNl
Y3VyaXR5T3JpZ2luKiBzZWN1cml0CiAKICAgICAvLyBGSVhNRTogSGFuZGxlIGNvbXBhcmF0b3Ig
bmFtZSBjaGFuZ2VzLgogCi0gICAgUmVmUHRyPElEQkxldmVsREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZShhZG9wdFJlZihuZXcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZShmaWxlSWRlbnRpZmll
ciwgZmFjdG9yeSwgZGIucmVsZWFzZSgpKSkpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZShhZG9wdFJlZihuZXcgSURCQmFja2luZ1N0b3JlKGZpbGVJZGVudGlmaWVy
LCBmYWN0b3J5LCBkYi5yZWxlYXNlKCkpKSk7CiAgICAgYmFja2luZ1N0b3JlLT5tX2NvbXBhcmF0
b3IgPSBjb21wYXJhdG9yLnJlbGVhc2UoKTsKIAogICAgIGlmICghc2V0VXBNZXRhZGF0YShiYWNr
aW5nU3RvcmUtPm1fZGIuZ2V0KCksIGZpbGVJZGVudGlmaWVyKSkKQEAgLTMzOCw3ICszNDAsNyBA
QCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bihTZWN1cml0eU9yaWdpbiogc2VjdXJpdAogICAgIHJldHVybiBiYWNraW5nU3RvcmUucmVsZWFz
ZSgpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXREYXRh
YmFzZU5hbWVzKCkKK1ZlY3RvcjxTdHJpbmc+IElEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VO
YW1lcygpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gZm91bmROYW1lczsKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gc3RhcnRLZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZU1pbktleUZvck9yaWdp
bihtX2lkZW50aWZpZXIpOwpAQCAtMzYwLDcgKzM2Miw3IEBAIFZlY3RvcjxTdHJpbmc+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoKQogICAgIHJldHVybiBmb3VuZE5h
bWVzOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKiBtZXRhZGF0YSkK
K2Jvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSogbWV0YWRhdGEpCiB7CiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmllciwgbmFt
ZSk7CiAKQEAgLTQwMiw3ICs0MDQsNyBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdEYXRhYmFzZUlk
KExldmVsREJEYXRhYmFzZSogZGIpCiAgICAgcmV0dXJuIGRhdGFiYXNlSWQ7CiB9CiAKLWJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBp
bnQ2NF90JiByb3dJZCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90
IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKQogewogICAgIHJvd0lkID0gZ2V0TmV3RGF0YWJh
c2VJZChtX2RiLmdldCgpKTsKICAgICBpZiAocm93SWQgPCAwKQpAQCAtNDI2LDIxICs0MjgsMjEg
QEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGludDY0
X3QgaW50VmVyc2lvbikKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUlu
dFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikKIHsKICAgICBpZiAoaW50VmVyc2lvbiA9PSBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCiAgICAgICAgIGludFZlcnNpb24gPSBJ
REJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0SW50VmVyc2lvbjsKICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGludFZlcnNpb24gPj0gMCwgImludFZlcnNpb24gd2FzICVsbGQiLCBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KGludFZlcnNpb24pKTsKLSAgICBpZiAoIXB1dFZhckludChUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBp
bnRWZXJzaW9uKSkgeworICAgIGlmICghcHV0VmFySW50KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFE
YXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9u
KSwgaW50VmVyc2lvbikpIHsKICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorYm9vbCBJREJCYWNraW5nU3Rv
cmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsK
LSAgICBpZiAoIXB1dFN0cmluZyhUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0
cmFuc2FjdGlvbiksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKSkgeworICAgIGlmICghcHV0U3RyaW5n
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJh
bnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0
YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgdmVyc2lvbikpIHsKICAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlV3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CkBAIC00NjIsOSArNDY0LDkgQEAgc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2
ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWcKIH0K
IAogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0
cmluZyYgbmFtZSkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpk
ZWxldGVEYXRhYmFzZSIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpkZWxldGVE
YXRhYmFzZSIpOwogICAgIE93blB0cjxMZXZlbERCV3JpdGVPbmx5VHJhbnNhY3Rpb24+IHRyYW5z
YWN0aW9uID0gTGV2ZWxEQldyaXRlT25seVRyYW5zYWN0aW9uOjpjcmVhdGUobV9kYi5nZXQoKSk7
CiAKICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhOwpAQCAtNDk4LDkgKzUwMCw5IEBA
IHN0YXRpYyBib29sIGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxE
Qkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVZlY3RvcjxJ
REJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkKQorVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+
IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkKIHsK
LSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyIp
OworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMiKTsKICAg
ICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gb2JqZWN0U3RvcmVzOwogICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCAxLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkKTsKQEAgLTYwNSwxMCAr
NjA3LDEwIEBAIHN0YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpjcmVh
dGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogewot
ICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUi
KTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJfVFJBQ0Uo
IklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKKyAgICBMZXZlbERCVHJhbnNh
Y3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGlmICghc2V0TWF4T2Jq
ZWN0U3RvcmVJZChsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTY3OSwxMCArNjgxLDEwIEBAIGJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KQordm9pZCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJh
bnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlv
bik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlIik7
CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsK
IAogICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWU7CiAgICAgZ2V0U3RyaW5nKGxldmVsREJUcmFu
c2FjdGlvbiwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUpLCBvYmplY3RTdG9yZU5hbWUp
OwpAQCAtNzA2LDEwICs3MDgsMTAgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxl
dGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmEKICAgICBjbGVh
ck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKIH0K
IAotU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQorU3RyaW5nIElEQkJhY2tpbmdTdG9y
ZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBr
ZXkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQi
KTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJfVFJBQ0Uo
IklEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBs
ZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBs
ZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKQEAgLTcyOCwyNyArNzMwLDYg
QEAgU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKICAgICByZXR1cm4gZGVjb2RlU3RyaW5nKHAsIGRh
dGEuZW5kKCkpOwogfQogCi1uYW1lc3BhY2UgewotY2xhc3MgTGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlKGNv
bnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIocHJpbWFyeUtleSwgdmVyc2lvbikp
OyB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50aWZpZXI+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERCUmVjb3JkSWRlbnRpZmllcigpKTsgfQot
Ci0gICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXku
aXNFbXB0eSgpOyB9Ci0gICAgVmVjdG9yPGNoYXI+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVy
biBtX3ByaW1hcnlLZXk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlLZXkoY29uc3QgVmVjdG9yPGNo
YXI+JiBwcmltYXJ5S2V5KSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlLZXk7IH0KLSAgICBpbnQ2
NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KLSAgICB2b2lkIHNldFZl
cnNpb24oaW50NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9IHZlcnNpb247IH0KLQotcHJpdmF0
ZToKLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1h
cnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFyeUtleSksIG1fdmVy
c2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkpOyB9Ci0gICAgTGV2
ZWxEQlJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3ZlcnNpb24oLTEpIHsg
fQotCi0gICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUtleTsgLy8gRklYTUU6IE1ha2UgaXQgbW9y
ZSBjbGVhciB0aGF0IHRoaXMgaXMgdGhlICplbmNvZGVkKiB2ZXJzaW9uIG9mIHRoZSBrZXkuCi0g
ICAgaW50NjRfdCBtX3ZlcnNpb247Ci19OwotfQotCiBzdGF0aWMgaW50NjRfdCBnZXROZXdWZXJz
aW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBs
YXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpMYXN0VmVyc2lvbik7CkBA
IC03NjgsMTEgKzc0OSwxMSBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExl
dmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YQogICAgIHJldHVybiB2
ZXJzaW9uOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQorYm9vbCBJREJCYWNr
aW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJ
ZGVudGlmaWVyKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0
UmVjb3JkIik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCIpOwog
ICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNh
Y3Rpb24pOwogICAgIGludDY0X3QgdmVyc2lvbiA9IGdldE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxE
QlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gb2JqZWN0U3RvcmVkYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKIApAQCAtNzkxLDQ0ICs3NzIsMzcgQEAg
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0
YXRpY19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7Ci0g
ICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtl
eSkpOwotICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOwor
ICAgIHJlY29yZElkZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOwor
ICAgIHJlY29yZElkZW50aWZpZXItPnNldFZlcnNpb24odmVyc2lvbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6Y2xlYXJP
YmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7Ci0gICAgSURCX1RSQUNF
KCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlIik7Ci0gICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRy
YW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3Rv
cmU6OmNsZWFyT2JqZWN0U3RvcmUiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9
IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwKS5lbmNvZGUoKTsKICAgICBj
b25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEtleVByZWZpeChkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkICsgMSwgMCkuZW5jb2RlKCk7CiAKICAgICBkZWxldGVSYW5nZShsZXZlbERCVHJhbnNh
Y3Rpb24sIHN0YXJ0S2V5LCBzdG9wS2V5KTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OlJlY29yZElkZW50aWZpZXI+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUludmFs
aWRSZWNvcmRJZGVudGlmaWVyKCkKK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKiByZWNv
cmRJZGVudGlmaWVyKQogewotICAgIHJldHVybiBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3Jl
YXRlKCk7Ci19CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZCIp
OworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7
CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmll
cikKLXsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29y
ZCIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIGNvbnN0IExl
dmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19j
YXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmllcik7Ci0K
LSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVEYXRhS2V5ID0gT2JqZWN0U3RvcmVE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElk
ZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0
b3JlRGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIHJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CiAgICAgbGV2ZWxEQlRy
YW5zYWN0aW9uLT5yZW1vdmUob2JqZWN0U3RvcmVEYXRhS2V5KTsKIAotICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7
CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByZWNvcmRJZGVudGlmaWVyLT5wcmlt
YXJ5S2V5KCkpOwogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKGV4aXN0c0VudHJ5S2V5
KTsKIH0KIAogCi1pbnQ2NF90IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRv
ckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoraW50NjRfdCBJREJC
YWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQogewotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwor
ICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAK
ICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSA9IE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKTsKIApAQCAt
ODY4LDkgKzg0Miw5IEBAIGludDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyCiAgICAgcmV0dXJuIGtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXI7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KQorYm9vbCBJREJC
YWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVu
dCkKIHsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgaWYgKGNo
ZWNrQ3VycmVudCkgewogICAgICAgICBpbnQ2NF90IGN1cnJlbnROdW1iZXIgPSBnZXRLZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
KTsKQEAgLTg4NywxMCArODYxLDEwIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6bWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5P
YmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5
LCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpCitib29sIElEQkJhY2tp
bmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYga2V5LCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50
aWZpZXIpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlz
dHNJbk9iamVjdFN0b3JlIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNh
Y3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7
CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUi
KTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
OwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hh
cj4gZGF0YTsKIApAQCAtOTAxLDkgKzg3NSw4IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uCiAg
ICAgaWYgKCFkZWNvZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxl
dmVsREJSZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIqPihmb3VuZFJlY29yZElkZW50aWZpZXIpOwotICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVy
LT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKLSAgICBsZXZlbERCUmVjb3JkSWRl
bnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKKyAgICBmb3VuZFJlY29yZElkZW50aWZpZXIt
PnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOworICAgIGZvdW5kUmVjb3JkSWRlbnRp
Zmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTIz
LDkgKzg5Niw5IEBAIHN0YXRpYyBib29sIGNoZWNrSW5kZXhBbmRNZXRhRGF0YUtleShjb25zdCBM
ZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hhCiB9CiAKIAotVmVjdG9yPElEQklu
ZGV4TWV0YWRhdGE+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitWZWN0b3I8SURCSW5kZXhNZXRhZGF0
YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0SW5kZXhlcyIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRJbmRl
eGVzIik7CiAgICAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGluZGV4ZXM7CiAgICAgY29uc3Qg
VmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIDAsIDApOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5
ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQgKyAx
LCAwLCAwKTsKQEAgLTk5NywxMCArOTcwLDEwIEBAIHN0YXRpYyBib29sIHNldE1heEluZGV4SWQo
TGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRl
SW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwg
Ym9vbCBpc011bHRpRW50cnkpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011
bHRpRW50cnkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVh
dGVJbmRleCIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0g
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElE
Ql9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCIpOworICAgIExldmVsREJUcmFu
c2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgaWYgKCFzZXRNYXhJ
bmRleElkKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5k
ZXhJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTAzNiwxMCArMTAwOSwxMCBAQCBi
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkKQordm9pZCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQogewotICAgIElEQl9U
UkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgiKTsKLSAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXgiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2Fj
dGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZy
b20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4TWV0YURhdGFT
dGFydCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhNZXRhRGF0YUVuZCA9
IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBpbmRleElkKTsKQEAgLTEwNTgsMTkgKzEwMzEsMTggQEAgdm9pZCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGkKICAgICB9CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRh
Rm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXkmIGtleSwgY29uc3QgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmll
cikKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBj
b25zdCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQogewotICAgIElEQl9UUkFD
RSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkIik7CisgICAg
SURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCIpOwogICAg
IEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKICAgICBBU1NFUlQoaW5kZXhJZCA+PSBNaW5pbXVtSW5k
ZXhJZCk7Ci0gICAgY29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJ
ZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihy
ZWNvcmRJZGVudGlmaWVyKTsKIAotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
OwotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFLZXkgPSBJbmRleERhdGFLZXk6OmVu
Y29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBlbmNvZGVJREJLZXkoa2V5
KSwgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXkoKSk7CisgICAgTGV2ZWxEQlRy
YW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KGtleSksIHJlY29yZElkZW50aWZp
ZXItPnByaW1hcnlLZXkoKSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLSAgICBkYXRhLmFw
cGVuZChlbmNvZGVWYXJJbnQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnZlcnNpb24oKSkpOwot
ICAgIGRhdGEuYXBwZW5kKGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwor
ICAgIGRhdGEuYXBwZW5kKGVuY29kZVZhckludChyZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkp
KTsKKyAgICBkYXRhLmFwcGVuZChyZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwogCiAg
ICAgcmV0dXJuIGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7CiB9
CkBAIC0xMTAzLDcgKzEwNzUsNyBAQCBzdGF0aWMgYm9vbCBmaW5kR3JlYXRlc3RLZXlMZXNzVGhh
bk9yRXF1YWwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29ucwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0
YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCwgaW50NjRf
dCwgaW50NjRfdCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopCitib29sIElEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKikKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBpc24ndCBuZWVkZWQgc2luY2Ugd2UgaW52YWxpZGF0ZSBpbmRl
eCBkYXRhIHZpYSB0aGUgdmVyc2lvbiBudW1iZXIgbWVjaGFuaXNtLgogICAgIHJldHVybiB0cnVl
OwpAQCAtMTEyMCwxMiArMTA5MiwxMiBAQCBzdGF0aWMgYm9vbCB2ZXJzaW9uRXhpc3RzKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaQogICAgIHJl
dHVybiBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKSA9PSB2ZXJzaW9uOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVj
dG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KQorYm9vbCBJREJCYWNraW5nU3RvcmU6
OmZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5
S2V5KQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUlu
SW5kZXgiKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgi
KTsKICAgICBBU1NFUlQoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5pc0VtcHR5KCkpOwogCi0gICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9u
KiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZl
bERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
bGV2ZWxkYktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIGtleSk7CiAgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSBsZXZl
bERCVHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNlZWsobGV2ZWxkYktl
eSk7CkBAIC0xMTU1LDkgKzExMjcsOSBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZp
bmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYQogICAgIH0K
IH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1h
cnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5JiBrZXkpCitQYXNzUmVmUHRyPElEQktleT4gSURCQmFja2luZ1N0b3Jl
OjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogewotICAgIElEQl9UUkFDRSgiSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4Iik7CisgICAgSURCX1RSQUNF
KCJJREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCIpOwogCiAgICAgVmVjdG9y
PGNoYXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7CiAgICAgaWYgKGZpbmRLZXlJbkluZGV4KHRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBrZXksIGZvdW5k
RW5jb2RlZFByaW1hcnlLZXkpKSB7CkBAIC0xMTY5LDkgKzExNDEsOSBAQCBQYXNzUmVmUHRyPElE
QktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJh
Y2tpbmdTdG9yZQogICAgIHJldHVybiAwOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFBy
aW1hcnlLZXkpCitib29sIElEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRl
eEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkKIHsKLSAgICBJREJfVFJBQ0Uo
IklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgiKTsKKyAgICBJREJfVFJB
Q0UoIklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCIpOwogCiAgICAgVmVjdG9yPGNo
YXI+IGZvdW5kRW5jb2RlZFByaW1hcnlLZXk7CiAgICAgaWYgKCFmaW5kS2V5SW5JbmRleCh0cmFu
c2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgaW5kZXhLZXksIGZv
dW5kRW5jb2RlZFByaW1hcnlLZXkpKQpAQCAtMTE4MSw2NCArMTE1MywyMiBAQCBib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbgogICAgIHJldHVybiB0cnVlOwogfQogCi1uYW1lc3BhY2UgewotCi1zdHJ1
Y3QgQ3Vyc29yT3B0aW9ucyB7Ci0gICAgVmVjdG9yPGNoYXI+IGxvd0tleTsKLSAgICBib29sIGxv
d09wZW47Ci0gICAgVmVjdG9yPGNoYXI+IGhpZ2hLZXk7Ci0gICAgYm9vbCBoaWdoT3BlbjsKLSAg
ICBib29sIGZvcndhcmQ7Ci0gICAgYm9vbCB1bmlxdWU7Ci19OwotCi1jbGFzcyBDdXJzb3JJbXBs
Q29tbW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yIHsKLXB1YmxpYzoKLSAgICAv
LyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1YWwgYm9vbCBhZHZhbmNlKHVuc2ln
bmVkIGxvbmcpOwotICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktl
eSogPSAwLCBJdGVyYXRvclN0YXRlID0gU2Vlayk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4ga2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQotICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigp
ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpID0gMDsKLSAgICBib29s
IGZpcnN0U2VlaygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ3Vyc29ySW1wbENvbW1vbihMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRp
b25zKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9j
dXJzb3JPcHRpb25zKGN1cnNvck9wdGlvbnMpCi0gICAgewotICAgIH0KLQotICAgIEN1cnNvcklt
cGxDb21tb24oY29uc3QgQ3Vyc29ySW1wbENvbW1vbiogb3RoZXIpCi0gICAgICAgIDogbV90cmFu
c2FjdGlvbihvdGhlci0+bV90cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2N1cnNvck9wdGlvbnMo
b3RoZXItPm1fY3Vyc29yT3B0aW9ucykKLSAgICAgICAgLCBtX2N1cnJlbnRLZXkob3RoZXItPm1f
Y3VycmVudEtleSkKLSAgICB7Ci0gICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRvcikgewotICAg
ICAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CitJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yKiBvdGhlcikKKyAgICA6IG1fdHJhbnNhY3Rpb24ob3RoZXItPm1fdHJhbnNhY3Rpb24pCisg
ICAgLCBtX2N1cnNvck9wdGlvbnMob3RoZXItPm1fY3Vyc29yT3B0aW9ucykKKyAgICAsIG1fY3Vy
cmVudEtleShvdGhlci0+bV9jdXJyZW50S2V5KQoreworICAgIGlmIChvdGhlci0+bV9pdGVyYXRv
cikgeworICAgICAgICBtX2l0ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3Io
KTsKIAotICAgICAgICAgICAgaWYgKG90aGVyLT5tX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG90aGVyLT5tX2l0ZXJhdG9yLT5rZXkoKSk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1faXRlcmF0b3ItPmlzVmFsaWQoKSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRvci0+aXNWYWxpZCgpKSB7CisgICAg
ICAgICAgICBtX2l0ZXJhdG9yLT5zZWVrKG90aGVyLT5tX2l0ZXJhdG9yLT5rZXkoKSk7CisgICAg
ICAgICAgICBBU1NFUlQobV9pdGVyYXRvci0+aXNWYWxpZCgpKTsKICAgICAgICAgfQogICAgIH0K
K30KIAotICAgIHZpcnR1YWwgfkN1cnNvckltcGxDb21tb24oKSB7IH0KLQotICAgIGJvb2wgaXNQ
YXN0Qm91bmRzKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3Q7Ci0K
LSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247Ci0gICAgQ3Vyc29yT3B0aW9u
cyBtX2N1cnNvck9wdGlvbnM7Ci0gICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRv
cjsKLSAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7Ci19OwotCi1ib29sIEN1cnNvcklt
cGxDb21tb246OmZpcnN0U2VlaygpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpmaXJz
dFNlZWsoKQogewogICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRv
cigpOwogICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkKQEAgLTEyNDksNyArMTE3OSw3
IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Zmlyc3RTZWVrKCkKICAgICByZXR1cm4gY29udGlu
dWVGdW5jdGlvbigwLCBSZWFkeSk7CiB9CiAKLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6YWR2YW5j
ZSh1bnNpZ25lZCBsb25nIGNvdW50KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6YWR2
YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50KQogewogICAgIHdoaWxlIChjb3VudC0tKSB7CiAgICAg
ICAgIGlmICghY29udGludWVGdW5jdGlvbigpKQpAQCAtMTI1OCw3ICsxMTg4LDcgQEAgYm9vbCBD
dXJzb3JJbXBsQ29tbW9uOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25z
dCBJREJLZXkqIGtleSwgSXRlcmF0b3JTdGF0ZSBuZXh0U3RhdGUpCitib29sIElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSoga2V5LCBJdGVyYXRv
clN0YXRlIG5leHRTdGF0ZSkKIHsKICAgICBSZWZQdHI8SURCS2V5PiBwcmV2aW91c0tleSA9IG1f
Y3VycmVudEtleTsKIApAQCAtMTM1MCw3ICsxMjgwLDcgQEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9u
Ojpjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSoga2V5LCBJdGVyYXRvclN0YXRlIG5leHRT
dGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpoYXZlRW50
ZXJlZFJhbmdlKCkgY29uc3QKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmhhdmVFbnRl
cmVkUmFuZ2UoKSBjb25zdAogewogICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkgewog
ICAgICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmxvd09wZW4pCkBAIC0xMzY0LDcgKzEyOTQsNyBA
QCBib29sIEN1cnNvckltcGxDb21tb246OmhhdmVFbnRlcmVkUmFuZ2UoKSBjb25zdAogICAgIHJl
dHVybiBjb21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMu
aGlnaEtleSkgPD0gMDsKIH0KIAotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjppc1Bhc3RCb3VuZHMo
KSBjb25zdAorYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6aXNQYXN0Qm91bmRzKCkgY29u
c3QKIHsKICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpIHsKICAgICAgICAgaWYgKG1f
Y3Vyc29yT3B0aW9ucy5oaWdoT3BlbikKQEAgLTEzNzcsOSArMTMwNyw5IEBAIGJvb2wgQ3Vyc29y
SW1wbENvbW1vbjo6aXNQYXN0Qm91bmRzKCkgY29uc3QKICAgICByZXR1cm4gY29tcGFyZUluZGV4
S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmxvd0tleSkgPCAwOwogfQog
Ci1jbGFzcyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1v
biB7CitjbGFzcyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3IgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3Jl
S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1
cnNvck9wdGlvbnMpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0
b3JlS2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOwogICAgIH0KQEAg
LTEzODksMjYgKzEzMTksMjYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCh0aGlzKSk7CiAgICAgfQogCi0gICAgLy8gQ3Vyc29y
SW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkg
T1ZFUlJJREUKKyAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgorICAgIHZpcnR1YWwgU3Ry
aW5nIHZhbHVlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygp
OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRp
Zmllcj4gcmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFCiAgICAgewogICAgICAgICByZXR1cm4g
bV9pZGVudGlmaWVyOwogICAgIH0KICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsK
IAogcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAg
ICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAg
IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcih0cmFuc2FjdGlvbiwgY3Vy
c29yT3B0aW9ucykKICAgICB7CiAgICAgfQogCiAgICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBs
KGNvbnN0IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29y
SW1wbENvbW1vbihvdGhlcikKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcihvdGhl
cikKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVyPiBt
X2lkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmll
cj4gbV9pZGVudGlmaWVyOwogfTsKIAogYm9vbCBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6Omxv
YWRDdXJyZW50Um93KCkKQEAgLTE0MzMsMTQgKzEzNjMsMTQgQEAgYm9vbCBPYmplY3RTdG9yZUtl
eUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhp
cyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KLSAg
ICBtX2lkZW50aWZpZXIgPSBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlE
QktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CisgICAgbV9pZGVudGlmaWVyID0gSURCQmFj
a2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCptX2N1cnJl
bnRLZXkpLCB2ZXJzaW9uKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1jbGFzcyBPYmplY3RT
dG9yZUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CitjbGFzcyBPYmplY3RT
dG9yZUN1cnNvckltcGwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3JlYXRlKExl
dmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNv
ck9wdGlvbnMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBj
cmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwg
Y3Vyc29yT3B0aW9ucykpOwogICAgIH0KQEAgLTE0NTAsMjggKzEzODAsMjggQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCh0aGlzKSk7
CiAgICAgfQogCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZh
bHVlKCkgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIoKSBPVkVSUklERQorICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmly
dHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJl
Y29yZElkZW50aWZpZXIoKSBPVkVSUklERQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faWRlbnRp
ZmllcjsKICAgICB9CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZh
dGU6Ci0gICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogQ3Vy
c29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKKyAgICBPYmplY3RTdG9y
ZUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAg
IDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3IodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCiAg
ICAgewogICAgIH0KIAogICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9y
ZUN1cnNvckltcGwqIG90aGVyKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisg
ICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3Iob3RoZXIpCiAgICAgICAgICwgbV9jdXJy
ZW50VmFsdWUob3RoZXItPm1fY3VycmVudFZhbHVlKQogICAgIHsKICAgICB9CiAKICAgICBTdHJp
bmcgbV9jdXJyZW50VmFsdWU7Ci0gICAgUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVyPiBt
X2lkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmll
cj4gbV9pZGVudGlmaWVyOwogfTsKIAogYm9vbCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRD
dXJyZW50Um93KCkKQEAgLTE0OTYsMTYgKzE0MjYsMTYgQEAgYm9vbCBPYmplY3RTdG9yZUN1cnNv
ckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyByZS1l
bmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVjb2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KLSAgICBtX2lk
ZW50aWZpZXIgPSBMZXZlbERCUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgq
bV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CisgICAgbV9pZGVudGlmaWVyID0gSURCQmFja2luZ1N0
b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkp
LCB2ZXJzaW9uKTsKIAogICAgIG1fY3VycmVudFZhbHVlID0gZGVjb2RlU3RyaW5nKHZhbHVlUG9z
aXRpb24sIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWNsYXNzIEluZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsK
K2NsYXNzIEluZGV4S2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNv
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBj
cmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9u
cyYgY3Vyc29yT3B0aW9ucykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1cnNvcklt
cGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKICAgICB7CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKHRyYW5zYWN0aW9u
LCBjdXJzb3JPcHRpb25zKSk7CiAgICAgfQpAQCAtMTUxNSwyMCArMTQ0NSwyMCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhLZXlDdXJzb3JJbXBsKHRoaXMpKTsK
ICAgICB9CiAKLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBTdHJpbmcgdmFs
dWUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5
OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRp
Zmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIDA7IH0KKyAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgorICAgIHZpcnR1
YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0
cmluZygpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVu
dFJvdygpOwogCiBwcml2YXRlOgotICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQot
ICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisg
ICAgSW5kZXhLZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25z
KQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JP
cHRpb25zKQogICAgIHsKICAgICB9CiAKICAgICBJbmRleEtleUN1cnNvckltcGwoY29uc3QgSW5k
ZXhLZXlDdXJzb3JJbXBsKiBvdGhlcikKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVy
KQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKG90aGVyKQogICAgICAgICAsIG1f
cHJpbWFyeUtleShvdGhlci0+bV9wcmltYXJ5S2V5KQogICAgIHsKICAgICB9CkBAIC0xNTgyLDkg
KzE1MTIsOSBAQCBib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAg
IHJldHVybiB0cnVlOwogfQogCi1jbGFzcyBJbmRleEN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29y
SW1wbENvbW1vbiB7CitjbGFzcyBJbmRleEN1cnNvckltcGwgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3IgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4Q3Vyc29y
SW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNv
ck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhDdXJz
b3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURC
QmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbCh0cmFuc2FjdGlv
biwgY3Vyc29yT3B0aW9ucykpOwogICAgIH0KQEAgLTE1OTQsMjAgKzE1MjQsMjAgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4Q3Vyc29ySW1wbCh0aGlzKSk7CiAg
ICAgfQogCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVl
KCkgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
aW1hcnlLZXkoKSB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIC8vIElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFy
eUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQorICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIo
KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQogICAgIGJvb2wgbG9hZEN1cnJl
bnRSb3coKTsKIAogcHJpdmF0ZToKLSAgICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAg
ICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAg
IEluZGV4Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAg
ICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9u
cykKICAgICB7CiAgICAgfQogCiAgICAgSW5kZXhDdXJzb3JJbXBsKGNvbnN0IEluZGV4Q3Vyc29y
SW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihvdGhlcikKKyAgICAgICAg
OiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcihvdGhlcikKICAgICAgICAgLCBtX3ByaW1hcnlLZXko
b3RoZXItPm1fcHJpbWFyeUtleSkKICAgICAgICAgLCBtX3ZhbHVlKG90aGVyLT5tX3ZhbHVlKQog
ICAgICAgICAsIG1fcHJpbWFyeUxldmVsREJLZXkob3RoZXItPm1fcHJpbWFyeUxldmVsREJLZXkp
CkBAIC0xNjY4LDcgKzE1OTgsNyBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRS
b3coKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIG9iamVjdFN0b3JlQ3Vyc29yT3B0aW9u
cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCitib29s
IG9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogewogICAgIGJvb2wg
bG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwogICAgIGJvb2wgdXBwZXJCb3Vu
ZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwpAQCAtMTcxNSw3ICsxNjQ1LDcgQEAgYm9vbCBv
YmplY3RTdG9yZUN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBpbmRleEN1cnNv
ck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIEN1cnNvck9wdGlv
bnMmIGN1cnNvck9wdGlvbnMpCitib29sIGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNv
cjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9w
dGlvbnMmIGN1cnNvck9wdGlvbnMpCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKICAgICBi
b29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKQEAgLTE3NTgsMTMgKzE2
ODgsMTEgQEAgYm9vbCBpbmRleEN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
fQotCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlv
bikKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkJhY2tpbmdTdG9yZTo6
b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0g
ICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJz
b3IiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBDdXJzb3JP
cHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6Om9w
ZW5PYmplY3RTdG9yZUN1cnNvciIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRy
YW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0
aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNv
ck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKICAgICBpZiAoIW9iamVjdFN0b3JlQ3Vyc29yT3B0aW9u
cyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJhbmdlLCBk
aXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8
T2JqZWN0U3RvcmVDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmplY3RTdG9yZUN1cnNvckltcGw6OmNy
ZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpOwpAQCAtMTc3NCwxMSArMTcw
MiwxMSBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzbwogICAgIHJldHVybiBjdXJzb3IucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkJhY2tp
bmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2Jq
ZWN0U3RvcmVLZXlDdXJzb3IiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFu
c2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9u
KTsKLSAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgSURCX1RSQUNFKCJJREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIpOworICAgIExldmVsREJUcmFu
c2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKICAgICBpZiAoIW9iamVj
dFN0b3JlQ3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1
cm4gMDsKICAgICBSZWZQdHI8T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBPYmpl
Y3RTdG9yZUtleUN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9w
dGlvbnMpOwpAQCAtMTc4OCwxMSArMTcxNiwxMSBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdQog
ICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3Io
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlD
dXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewot
ICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29y
Iik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2Fj
dGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29yT3B0
aW9ucyBjdXJzb3JPcHRpb25zOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVu
SW5kZXhLZXlDdXJzb3IiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2Fj
dGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZy
b20odHJhbnNhY3Rpb24pOworICAgIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRp
b25zIGN1cnNvck9wdGlvbnM7CiAgICAgaWYgKCFpbmRleEN1cnNvck9wdGlvbnMobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCByYW5nZSwgZGly
ZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPElu
ZGV4S2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUobGV2
ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKQEAgLTE4MDIsMTEgKzE3MzAsMTEgQEAg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3BlbkluZGV4S2V5Q3Vyc29yKEkKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkJhY2tp
bmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6
Om9wZW5JbmRleEN1cnNvciIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24p
OwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBJREJfVFJBQ0UoIklEQkJh
Y2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBs
ZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJCYWNraW5nU3RvcmU6OkN1cnNv
cjo6Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwogICAgIGlmICghaW5kZXhDdXJzb3JPcHRp
b25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIFJlZlB0cjxJbmRleEN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4Q3Vyc29ySW1wbDo6Y3Jl
YXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CkBAIC0xODE2LDYwICsxNzQ0
LDM1IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihJREJCCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNhY3Rpb24oKQotewotICAgIHJldHVybiBUcmFu
c2FjdGlvbjo6Y3JlYXRlKHRoaXMpOwotfQotCi1QYXNzUmVmUHRyPElEQkxldmVsREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
Y3JlYXRlKElEQkxldmVsREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRyYW5zYWN0aW9uKGJhY2tpbmdTdG9yZSkpOwotfQotCi1JREJMZXZl
bERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb24oSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZSogYmFja2luZ1N0b3JlKQorSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6VHJh
bnNhY3Rpb24oSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCiAgICAgOiBtX2JhY2tpbmdT
dG9yZShiYWNraW5nU3RvcmUpCiB7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmJlZ2luKCkKK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
YmVnaW4oKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmJlZ2luIik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uOjpiZWdpbiIpOwogICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbik7CiAgICAgbV90cmFuc2Fj
dGlvbiA9IExldmVsREJUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLT5tX2RiLmdl
dCgpKTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29t
bWl0KCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0KCkKIHsKLSAg
ICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQi
KTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCIp
OwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKICAgICBib29sIHJlc3VsdCA9IG1fdHJhbnNh
Y3Rpb24tPmNvbW1pdCgpOwogICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpy
b2xsYmFjaygpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrKCkK
IHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpy
b2xsYmFjayIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
cm9sbGJhY2siKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CiAgICAgbV90cmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiB9CiAKLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZykK
LXsKLSAgICBTdHJpbmcgcGF0aEJhc2UgPSBwYXRoQmFzZUFyZzsKLQotICAgIGlmIChwYXRoQmFz
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgZXZlbnR1YWxseSB1c2UgdGhlIHNhbWUgTGV2ZWxEQiBkYXRhYmFzZSBmb3IgYWxsIG9y
aWdpbnMuCi0gICAgU3RyaW5nIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJh
c2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiLmxl
dmVsZGIiKTsKLQotICAgIC8vIEZJWE1FOiB0aGlzIGlzIGNoZWNraW5nIGZvciBwcmVzZW5jZSBv
ZiB0aGUgZG9tYWluLCBub3QgdGhlIGRhdGFiYXNlIGl0c2VsZgotICAgIHJldHVybiBmaWxlRXhp
c3RzKHBhdGgrIi9DVVJSRU5UIik7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmIC8vIFVTRShMRVZFTERCKQogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0
b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
aAppbmRleCAzYzk0NTFjYzA3NGMyMGU2ZjIxN2M0OTQ4N2EzZDgzNTJmMjcwMmFkLi4yNTJkZWUx
ZjVhMjg5MWY3NDY3NmUxNWJiNzNlMzAxOTM1YTg1YThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApAQCAtMjksNjAgKzI5LDcz
IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJJREJDdXJzb3Iu
aCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5o
IgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
TGV2ZWxEQkNvbXBhcmF0b3I7CitjbGFzcyBMZXZlbERCRGF0YWJhc2U7CitjbGFzcyBMZXZlbERC
VHJhbnNhY3Rpb247CitjbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7CiBjbGFzcyBJREJLZXk7
CiBjbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotc3RydWN0IElEQkRh
dGFiYXNlTWV0YWRhdGE7CiAKIGNsYXNzIElEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPElEQkJhY2tpbmdTdG9yZT4gewogcHVibGljOgogICAgIGNsYXNzIFRyYW5zYWN0aW9uOwog
Ci0gICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkge307CisgICAgdmlydHVhbCB+SURCQmFj
a2luZ1N0b3JlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVu
KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBm
aWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CiAKLSAgICB2aXJ0dWFsIFZl
Y3RvcjxTdHJpbmc+IGdldERhdGFiYXNlTmFtZXMoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFk
YXRhKiBmb3VuZE1ldGFkYXRhKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZlcnNp
b24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBy
b3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBuYW1lKSA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXREYXRhYmFz
ZU5hbWVzKCk7CisgICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKik7CisgICAgdmlydHVhbCBib29sIGNy
ZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOworICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7CisgICAgdmlydHVh
bCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICB2aXJ0dWFs
IFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBk
YXRhYmFzZUlkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKFRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCBW
ZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0
YWJhc2VJZCk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5j
cmVtZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkKTsKIAogICAgIGNsYXNzIFJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxS
ZWNvcmRJZGVudGlmaWVyPiB7CiAgICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0ID0gMDsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRp
Zmllcj4gY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJz
aW9uKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVjb3JkSWRlbnRpZmllcihwcmltYXJ5S2V5LCB2
ZXJzaW9uKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlY29yZElkZW50aWZpZXIoKSk7IH0KICAg
ICAgICAgdmlydHVhbCB+UmVjb3JkSWRlbnRpZmllcigpIHsgfQorCisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5LmlzRW1wdHkoKTsgfQor
ICAgICAgICBWZWN0b3I8Y2hhcj4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFy
eUtleTsgfQorICAgICAgICB2b2lkIHNldFByaW1hcnlLZXkoY29uc3QgVmVjdG9yPGNoYXI+JiBw
cmltYXJ5S2V5KSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlLZXk7IH0KKyAgICAgICAgaW50NjRf
dCB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CisgICAgICAgIHZvaWQgc2V0
VmVyc2lvbihpbnQ2NF90IHZlcnNpb24pIHsgbV92ZXJzaW9uID0gdmVyc2lvbjsgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8Y2hhcj4mIHBy
aW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFyeUtleSksIG1f
dmVyc2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkpOyB9CisgICAg
ICAgIFJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3ZlcnNpb24oLTEpIHsg
fQorCisgICAgICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1hcnlLZXk7IC8vIEZJWE1FOiBNYWtlIGl0
IG1vcmUgY2xlYXIgdGhhdCB0aGlzIGlzIHRoZSAqZW5jb2RlZCogdmVyc2lvbiBvZiB0aGUga2V5
LgorICAgICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKICAgICB9OwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpID0g
MDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGdldFJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHB1dFJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVj
dFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3JkKFRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElk
ZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVyYXRvckN1cnJl
bnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1
cnJlbnROdW1iZXIoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUmVj
b3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHB1dElu
ZGV4RGF0YUZvclJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFJl
Y29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZv
clJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KFRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlz
dHNJbkluZGV4KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRy
PElEQktleT4mIGZvdW5kUHJpbWFyeUtleSkgPSAwOworCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29s
IHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBpbnQ2
NF90IGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2
aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpOworICAgIHZpcnR1
YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKKworICAgIHZp
cnR1YWwgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRl
eChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpOworICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCk7CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVjb3JkSWRlbnRpZmll
ciopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1YWwgYm9v
bCBrZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsKIAog
ICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1cnNvcj4gewogICAgIHB1Ymxp
YzoKQEAgLTkxLDMzICsxMDQsODQgQEAgcHVibGljOgogICAgICAgICAgICAgU2VlawogICAgICAg
ICB9OwogCisgICAgICAgIHN0cnVjdCBDdXJzb3JPcHRpb25zIHsKKyAgICAgICAgICAgIFZlY3Rv
cjxjaGFyPiBsb3dLZXk7CisgICAgICAgICAgICBib29sIGxvd09wZW47CisgICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gaGlnaEtleTsKKyAgICAgICAgICAgIGJvb2wgaGlnaE9wZW47CisgICAgICAg
ICAgICBib29sIGZvcndhcmQ7CisgICAgICAgICAgICBib29sIHVuaXF1ZTsKKyAgICAgICAgfTsK
KworICAgICAgICBDdXJzb3IoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3Qg
Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAgICAgIDogbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKKyAgICAgICAgICAgICwgbV9jdXJzb3JPcHRpb25zKGN1cnNvck9wdGlv
bnMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBDdXJzb3IoY29uc3QgSURCQmFja2lu
Z1N0b3JlOjpDdXJzb3IqIG90aGVyKTsKKworICAgICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CisgICAgICAgIGJvb2wgY29udGludWVG
dW5jdGlvbihjb25zdCBJREJLZXkqID0gMCwgSXRlcmF0b3JTdGF0ZSA9IFNlZWspOworICAgICAg
ICBib29sIGFkdmFuY2UodW5zaWduZWQgbG9uZyk7CisgICAgICAgIGJvb2wgZmlyc3RTZWVrKCk7
CisKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gY2xvbmUoKSA9IDA7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcpID0gMDsKLSAgICAgICAgdmly
dHVhbCBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiA9IDAsIEl0ZXJhdG9yU3Rh
dGUgPSBTZWVrKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgp
ID0gMDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpID0g
MDsKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIo
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfTsKKyAgICAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtl
eTsgfQorICAgICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIoKSA9
IDA7CisgICAgICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wg
bG9hZEN1cnJlbnRSb3coKSA9IDA7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIGJvb2wgaXNQ
YXN0Qm91bmRzKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0
OworCisgICAgICAgIExldmVsREJUcmFuc2FjdGlvbiogbV90cmFuc2FjdGlvbjsKKyAgICAgICAg
Y29uc3QgQ3Vyc29yT3B0aW9ucyBtX2N1cnNvck9wdGlvbnM7CisgICAgICAgIE93blB0cjxMZXZl
bERCSXRlcmF0b3I+IG1faXRlcmF0b3I7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVu
dEtleTsKICAgICB9OwogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVj
dFN0b3JlQ3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0g
MDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJz
b3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3Io
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOwogCi0gICAgY2xhc3MgVHJhbnNhY3Rpb24gOiBwdWJsaWMgUmVm
Q291bnRlZDxUcmFuc2FjdGlvbj4geworICAgIGNsYXNzIFRyYW5zYWN0aW9uIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHZpcnR1YWwgflRyYW5zYWN0aW9uKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBiZWdpbigpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGNvbW1pdCgpID0gMDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCkgPSAwOworICAgICAgICBUcmFuc2FjdGlvbihJ
REJCYWNraW5nU3RvcmUqKTsKKyAgICAgICAgdm9pZCBiZWdpbigpOworICAgICAgICBib29sIGNv
bW1pdCgpOworICAgICAgICB2b2lkIHJvbGxiYWNrKCk7CisKKyAgICAgICAgc3RhdGljIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uRnJvbShUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUcmFuc2Fj
dGlvbio+KHRyYW5zYWN0aW9uKS0+bV90cmFuc2FjdGlvbi5nZXQoKTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgSURCQmFja2luZ1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKKyAg
ICAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKICAgICB9Owot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24oKSA9
IDA7CisKK3Byb3RlY3RlZDoKKyAgICBJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFz
ZT4pOworCisgICAgLy8gU2hvdWxkIG9ubHkgdXNlZCBmb3IgbW9ja2luZy4KKyAgICBJREJCYWNr
aW5nU3RvcmUoKTsKKworcHJpdmF0ZToKKyAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZv
dW5kRW5jb2RlZFByaW1hcnlLZXkpOworCisgICAgU3RyaW5nIG1faWRlbnRpZmllcjsKKyAgICBS
ZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7CisgICAgT3duUHRyPExldmVs
REJEYXRhYmFzZT4gbV9kYjsKKyAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFy
YXRvcjsKKwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA1NWM4ZGFiNGE3ODE2NjY5ZmMxODdiMzIxODI2Yzcz
YmM3M2I5Njc1Li5lYWE3MzNhNTI4ZWY0NTRhYzM4MGVjMmYwYzYxZDQ1MTNjYmY3MDljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2Vu
ZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJJREJCYWNraW5n
U3RvcmUuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAi
SURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3Jl
LmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMTM0LDEyICsx
MzMsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8UwogICAgIGlmIChpdDIgIT0gbV9iYWNraW5n
U3RvcmVNYXAuZW5kKCkpCiAgICAgICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+dmFsdWU7CiAgICAg
ZWxzZSB7Ci0jaWYgVVNFKExFVkVMREIpCi0gICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3Rvcnks
IGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShkYXRh
RGlyZWN0b3J5KTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKKyAgICAg
ICAgYmFja2luZ1N0b3JlID0gSURCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdl
dCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CiAgICAgfQogCiAgICAg
aWYgKGJhY2tpbmdTdG9yZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWNiMjcyNTE0YTFmMjgxMjAzNTA4MzUzYTM5NDIxMDcyM2M0YjM4NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9o
Ci0jZGVmaW5lIElEQkxldmVsREJCYWNraW5nU3RvcmVfaAotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCi0KLSNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUu
aCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgTGV2ZWxEQkNvbXBhcmF0b3I7Ci1jbGFzcyBMZXZlbERCRGF0YWJhc2U7Ci1jbGFzcyBMZXZl
bERCVHJhbnNhY3Rpb247Ci1jbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGw7Ci0KLWNsYXNzIElE
QkxldmVsREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IG9wZW4oU2VjdXJpdHlPcmln
aW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVy
LCBJREJGYWN0b3J5QmFja2VuZEltcGwqKTsKLSAgICB2aXJ0dWFsIH5JREJMZXZlbERCQmFja2lu
Z1N0b3JlKCk7Ci0KLSAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGdldERhdGFiYXNlTmFtZXMo
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCk7Ci0gICAgdmlydHVhbCBib29s
IHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29s
IHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKLQotICAgIHZpcnR1YWwgVmVjdG9y
PElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNl
SWQpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVu
dCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IGNyZWF0ZUludmFsaWRS
ZWNvcmRJZGVudGlmaWVyKCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UmVjb3JkKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElk
ZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBpbnQ2NF90IGdldEtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBuZXdTdGF0ZSwgYm9vbCBjaGVja0N1cnJlbnQpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlz
dHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUmVjb3JkSWRl
bnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKLQotICAgIHZpcnR1YWwgVmVjdG9yPElE
QkluZGV4TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCBpc1VuaXF1ZSwgYm9vbCBpc011bHRpRW50cnkpOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7Ci0gICAgdmlydHVh
bCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1
YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbklu
ZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4
S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KTsKLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6
RGlyZWN0aW9uKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRl
VHJhbnNhY3Rpb24oKTsKLQotICAgIHN0YXRpYyBib29sIGJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1
cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSk7
Ci0KLXByb3RlY3RlZDoKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093blB0cjxMZXZlbERCRGF0
YWJhc2U+KTsKLQotcHJpdmF0ZToKLSAgICBib29sIGZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8Y2hhcj4mIGZvdW5k
RW5jb2RlZFByaW1hcnlLZXkpOwotCi0gICAgU3RyaW5nIG1faWRlbnRpZmllcjsKLSAgICBSZWZQ
dHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBtX2ZhY3Rvcnk7Ci0gICAgT3duUHRyPExldmVsREJE
YXRhYmFzZT4gbV9kYjsKLSAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRv
cjsKLQotICAgIGNsYXNzIFRyYW5zYWN0aW9uIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNh
Y3Rpb24+IGNyZWF0ZShJREJMZXZlbERCQmFja2luZ1N0b3JlKik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBiZWdpbigpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY29tbWl0KCk7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCByb2xsYmFjaygpOwotCi0gICAgICAgIHN0YXRpYyBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbio+KHRyYW5zYWN0aW9uKS0+bV90cmFu
c2FjdGlvbi5nZXQoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVHJhbnNh
Y3Rpb24oSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOwotICAgICAgICBJREJMZXZlbERCQmFja2lu
Z1N0b3JlKiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUmVmUHRyPExldmVsREJUcmFuc2FjdGlv
bj4gbV90cmFuc2FjdGlvbjsKLSAgICB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0KLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLQotI2VuZGlmIC8vIElEQkxldmVsREJCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCA0NjQwYzEzZGQyZTNjNzdiMmRlODBjYzBkYjdhZGJmNTkwM2Uw
M2Y1Li4xMmMzNzNmZTA2MjEwNjM0MWY4ZDMyM2Y5MGNmODJkMGE4MzljZWEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5
S2V5LCBjCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
ID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAKICAg
ICAvLyBGSVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9ub3VzLCBidXQgd2UgbmVl
ZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21wbGV4aXR5LgotICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIg
PSBiYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKKyAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVy
ID0gSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoKTsKICAgICBpZiAo
IWJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkKCksIGlkKCksICpwcmltYXJ5S2V5LCBy
ZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8CiAKICAgICBBU1NFUlQoa2V5ICYmIGtleS0+aXNWYWxpZCgpKTsKIAotICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIgPSBvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCk7
CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRl
bnRpZmllciA9IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7CiAg
ICAgaWYgKHB1dE1vZGUgPT0gQWRkT25seSAmJiBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCkt
PmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5
LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5U
X0VSUiwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzkzLDcgKzM5Myw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQCiAg
ICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgewogCiAgICAgICAgIGRvIHsKLSAgICAgICAgICAg
IHJlY29yZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmVDdXJzb3ItPm9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllcigpOworICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9y
ZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpOwogCiAgICAgICAgICAgICBmb3IgKElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5t
X2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytp
dCkgewogICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwgaXQtPmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuY3BwCmluZGV4IGUxNjUyZDY5NWRmODUzNDFiMzYwODZkODY3OWIxMzc0NDAyZmY4ZWIu
LmJhODc1YTE3MmY3NmIzZmY2NTk2MmU2YTk5OTZkZDMzM2ZlYmJiZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwCkBAIC00OSw3ICs0OSw3IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmpl
CiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fc3RhdGUoVW51c2VkKQogICAgICwgbV9kYXRh
YmFzZShkYXRhYmFzZSkKLSAgICAsIG1fdHJhbnNhY3Rpb24oZGF0YWJhc2UtPmJhY2tpbmdTdG9y
ZSgpLT5jcmVhdGVUcmFuc2FjdGlvbigpKQorICAgICwgbV90cmFuc2FjdGlvbihkYXRhYmFzZS0+
YmFja2luZ1N0b3JlKCkuZ2V0KCkpCiAgICAgLCBtX3Rhc2tUaW1lcih0aGlzLCAmSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQpCiAgICAgLCBtX3Rhc2tFdmVudFRpbWVy
KHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrRXZlbnRUaW1lckZpcmVkKQog
ICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZv
aWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvcikKICAgICBtX3Rhc2tFdmVudFRpbWVyLnN0b3AoKTsKIAogICAgIGlmICh3
YXNSdW5uaW5nKQotICAgICAgICBtX3RyYW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgICAgICBt
X3RyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CiAKICAgICAvLyBSdW4gdGhlIGFib3J0IHRhc2tzLCBp
ZiBhbnkuCiAgICAgd2hpbGUgKCFtX2Fib3J0VGFza1F1ZXVlLmlzRW1wdHkoKSkgewpAQCAtMjE2
LDcgKzIxNiw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAg
ICBib29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkOwogICAgIG1fc3RhdGUgPSBGaW5pc2hl
ZDsKIAotICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fdHJhbnNhY3Rpb24tPmNvbW1p
dCgpOworICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fdHJhbnNhY3Rpb24uY29tbWl0
KCk7CiAKICAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykg
bXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcwogICAgIC8vIGFyZSBmaXJl
ZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxs
b3cgdGhlIGJhY2tpbmcgc3RvcmUKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+KgogICAgIEFTU0VSVCghaXNUYXNrUXVldWVFbXB0eSgpKTsKIAogICAgIGlmIChtX3N0
YXRlID09IFN0YXJ0UGVuZGluZykgewotICAgICAgICBtX3RyYW5zYWN0aW9uLT5iZWdpbigpOwor
ICAgICAgICBtX3RyYW5zYWN0aW9uLmJlZ2luKCk7CiAgICAgICAgIG1fc3RhdGUgPSBSdW5uaW5n
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IDRlNGRkZWNjMTEyMzY5NmNh
NDY1NzUzZGI1ZjEyOTJiYzNjZTM2ODEuLmM4ZmJiZjUzY2NkYjJhMWYzNDFkZGU3Mjg5ZGY4Mjhi
NjA4MTBiMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkUGVuZGluZ0V2ZW50cyhpbnQpOwogICAgIHZvaWQgYWRkUHJlZW1w
dGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7IH0KICAgICB2b2lkIGRp
ZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzLS07
IEFTU0VSVChtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID49IDApOyB9Ci0gICAgSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJldHVybiBt
X3RyYW5zYWN0aW9uLmdldCgpOyB9CisgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJldHVybiAmbV90cmFuc2FjdGlvbjsgfQogCiBw
cml2YXRlOgogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCopOwpAQCAtMTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgVGFza1F1ZXVlIG1f
cHJlZW1wdGl2ZVRhc2tRdWV1ZTsKICAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKIAot
ICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwor
ICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24gbV90cmFuc2FjdGlvbjsKIAogICAgIC8v
IEZJWE1FOiBkZWxldGUgdGhlIHRpbWVyIG9uY2Ugd2UgaGF2ZSB0aHJlYWRzIGluc3RlYWQuCiAg
ICAgVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gbV90YXNrVGltZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDFl
OWFmMzcxZDRmNzgxMTlkNzFlOWExOTIzYmZmODY4NDYwM2FlNi4uYTkyYWU5ZTlhZjliNDFhMDM0
ODA4MGU5MDE5ZmY0OTI5MzE3NGZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzQzNiw2ICszNDM2LDcgQEAKIAkJOTcxMkE1
QUUxNTAwNEVEQTAwNDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NTUxNTAwNEVEQTAw
NDhBRjEwIC8qIERPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5oICovOyB9OwogCQk5NzEyQTVCMDE1
MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuY3Bw
ICovOyB9OwogCQk5NzEyQTVCMTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1ODE1MDA0RURBMDA0
OEFGMTAgLyogSURCQW55LmggKi87IH07CisJCTk3MTJBNUU1MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAg
Ki87IH07CiAJCTk3MTJBNUIzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVBMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuaCAqLzsgfTsKIAkJOTcxMkE1QjQxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxi
YWNrcy5oICovOyB9OwogCQk5NzEyQTVCNTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVD
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuY3BwICovOyB9OwpAQCAtMzQ3NSw4ICszNDc2
LDYgQEAKIAkJOTcxMkE1REYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg2MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggKi87IH07CiAJCTk3MTJBNUUyMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzEyQTU4OTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwICov
OyB9OwogCQk5NzEyQTVFMzE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThBMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oICovOyB9OwotCQk5NzEyQTVFNTE1MDA0RURBMDA0OEFG
MTAgLyogSURCQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3Rv
cmUuY3BwICovOyB9OwotCQk5NzEyQTVFNjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1OEQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuaCAq
LzsgfTsKIAkJOTcxMkE1RTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEUx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovOyB9OwogCQk5NzEyQTVF
ODE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkxldmVsREJDb2RpbmcuaCAqLzsgfTsKIAkJOTcxMkE1RTkxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQk9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNTkwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAg
Ki87IH07CkBAIC0xMDcwNCw3ICsxMDcwMyw3IEBACiAJCTk3MTJBNThBMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJL
ZXlSYW5nZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OEIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eVJhbmdlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJREJLZXlSYW5nZS5pZGw7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCQmFja2luZ1N0b3JlLmNw
cDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZl
bERCQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkxl
dmVsREJCYWNraW5nU3RvcmUuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTcxMkE1OEQxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBJREJCYWNraW5nU3RvcmUuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU4RTE1
MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBJREJMZXZlbERCQ29kaW5nLmNwcDsgcGF0aCA9IE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5NzEyQTU4RjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJMZXZlbERCQ29kaW5nLmg7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTk3MTJBNTkwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJPYmplY3RTdG9yZS5jcHA7
IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNzg0OSw2ICsxNzg0OCw3IEBACiAJCQkJOTcxMkE1NTgxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkFueS5oICovLAogCQkJCTk3MTJBNTU5MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJBbnkuaWRsICovLAogCQkJCTk3MTJBNTVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJC
YWNraW5nU3RvcmUuaCAqLywKKwkJCQk5NzEyQTU4QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFj
a2luZ1N0b3JlLmNwcCAqLywKIAkJCQk5NzEyQTU1QjE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2Fs
bGJhY2tzLmggKi8sCiAJCQkJOTcxMkE1NUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5j
cHAgKi8sCiAJCQkJOTcxMkE1NUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5oICovLApA
QCAtMTc4OTUsOCArMTc4OTUsNiBAQAogCQkJCTk3MTJBNTg5MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJLZXlSYW5nZS5jcHAgKi8sCiAJCQkJOTcxMkE1OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktl
eVJhbmdlLmggKi8sCiAJCQkJOTcxMkE1OEIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdl
LmlkbCAqLywKLQkJCQk5NzEyQTU4QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3Jl
LmNwcCAqLywKLQkJCQk5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5oICovLAogCQkJCTk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERC
Q29kaW5nLmNwcCAqLywKIAkJCQk5NzEyQTU4RjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxE
QkNvZGluZy5oICovLAogCQkJCUJDQzY1MTQ1MTU5Mjk0QzMwMEFDQzlFNCAvKiBJREJNZXRhZGF0
YS5oICovLApAQCAtMjM4MjAsNyArMjM4MTgsNiBAQAogCQkJCTk3MTJBNURDMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNURGMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJLZXlQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVFMzE1MDA0RURB
MDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTk3MTJBNUU2MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzEyQTVFODE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTcxMkE1RUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3Jl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVFRDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzAwNiw2ICsyNzAwMyw3
IEBACiAJCQkJNTFFMUVDQzAwQzkxQzkwNDAwREMyNTVCIC8qIEljb25SZWNvcmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDUwOTlDNDExMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1QjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk5NzEyQTVFNTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2lu
Z1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1ODVBNjYyMTFENEZBQzUwMDRDM0U0QiAv
KiBJREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUI1MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1
QjgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjcwMjMsNyArMjcwMjEsNiBAQAogCQkJCTk3MTJBNURCMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1REUxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQktleVBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1RTIxNTAwNEVE
QTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3MTJBNUU1
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTcxMkE1RTcxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTcxMkE1RTkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3Jl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAppbmRleCA0ZTM3ZDNl
YWE5MDRmNmI5MjJmMjhkMjBiODllZTBiMWQ1MGMxYmY5Li4wMmQyZDVkNDIwY2YzMzM5MTg1MDU0
NjhkNDU5NWRhMzNkYTg5YTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0lEQkZha2VCYWNraW5nU3RvcmUuaApAQCAtNDMsOCArNDMsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCkgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7
IH07CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpIE9WRVJSSURFIHsgfQogCi0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IGNyZWF0ZUludmFsaWRSZWNv
cmRJZGVudGlmaWVyKCkgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlm
aWVyPigpOyB9Ci0KICAgICB2aXJ0dWFsIFN0cmluZyBnZXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jikg
T1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3Jk
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSBP
VkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0
b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpIE9WRVJSSURFIHsgfQpAQCAtNjUsOCArNjMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vy
c29yPigpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vy
c29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVj
dGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVy
biBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5z
YWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8
VHJhbnNhY3Rpb24+KCk7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173153</attachid>
            <date>2012-11-08 17:05:46 -0800</date>
            <delta_ts>2012-11-09 13:52:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101415-20121108170355.patch</filename>
            <type>text/plain</type>
            <size>90289</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzOTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTI0YjMyNWU4ZjYzY2I1
ZTgyNzJmYjQ5Mjg0Yjg3YjJiY2RiMDdjMy4uMTI3ZDQ0ZTViYzI4OTQyNTFiNjAwODk2NTEwNGEx
YmMyMzBjYmU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAxMi0xMS0wNyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBD
b21iaW5lIElEQkJhY2tpbmdTdG9yZSBhbmQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29tYmluZSBhYnN0cmFj
dCBpbnRlcmZhY2UgSURCQmFja2luZ1N0b3JlIHdpdGggaXRzIG9ubHkKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24sIElEQkxldmVsREJCYWNraW5nU3RvcmUsIHRvIHJlZHVjZSBjb2RlCisgICAgICAg
IGNvbXBsZXhpdHkuIFRoZSBsZWdhY3kgc3RydWN0dXJlIGV4aXN0ZWQgdG8gc3VwcG9ydCBhIFNR
TExpdGUKKyAgICAgICAgSURCQmFja2luZ1N0b3JlLCBidXQgaXQgaXMgbm8gbG9uZ2VyIHdvcnRo
IHRoZSBjb21wbGV4aXR5IHRvCisgICAgICAgIHN1cHBvcnQgdGhpcyBhYnN0cmFjdGlvbi4KKwor
ICAgICAgICBDaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEpIE1lcmdpbmcgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSBpbnRvIElEQkJhY2tpbmdTdG9yZS4KKworICAgICAgICAyKSBNZXJnZSB0b2dl
dGhlciBJREJCYWNraW5nU3RvcmUncyBpbm5lciBjbGFzc2VzOiBDdXJzb3IsCisgICAgICAgIFRy
YW5zYWN0aW9uLCBhbmQgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGZpZXIgd2l0aCB0aGVpciByZXNw
ZWN0aXZlCisgICAgICAgIHN1YmNsYXNzZXMgaW4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS4KKwor
ICAgICAgICAzKSBTaW1wbGlmeWluZyB0aGUgaW5uZXIgVHJhbnNhY3Rpb24gY2xhc3MgdG8gbm90
IGJlIHJlZmNvdW50ZWQgb3IKKyAgICAgICAgdmlydHVhbGl6ZWQsIHRvIGFsbG93IGl0IHRvIGJl
IGEgc2ltcGxlIGNvbmNyZXRlIG1lbWJlciBvZiBpdHMKKyAgICAgICAgb3duZXIsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMgcHVy
ZWx5IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVjb3JkSW50ZXJuYWxFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRVcE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjp+SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRNYXhPYmplY3RT
dG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5P
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldEluZGV4
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4SW5kZXhJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
QmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OkN1cnNvcjo6Zmlyc3RTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yOjpoYXZlRW50ZXJlZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjppc1Bhc3RCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUpOgorICAgICAgICAoT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpP
YmplY3RTdG9yZUtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RT
dG9yZUN1cnNvckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUN1cnNvckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6Ok9iamVjdFN0b3JlQ3Vyc29ySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKToKKyAg
ICAgICAgKEluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1
cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6
cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OnJlY29y
ZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjpJbmRl
eEtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChJbmRleEN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhD
dXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnBy
aW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpyZWNvcmRJZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6SW5kZXhDdXJzb3JJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OmluZGV4Q3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoUmVjb3JkSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZp
ZXI6On5SZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpzZXRQcmltYXJ5S2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6dmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6
OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJ
ZGVudGlmaWVyOjpSZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20pOgorICAgICAgICAoQ3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpwcmltYXJ5S2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjp+Q3Vyc29yKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMi0xMS0wOCAgQWxwaGEg
TGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRGVmZXJyZWQg
aW1hZ2UgZGVjb2RpbmcgZmFpbHMgd2l0aCBpbWFnZSBvcmllbnRhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBmMjE3NzM4YzQwOGJmNjgxZDMxNmQzMTc4MzdmNWJiMmIzNmI0NDBj
Li42OWQxNDgxZDVkNjQxYjA5MDNkYmI0MzczNTE0MWEzNmJiNTY0ZjM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTExLTA3ICBBbGVjIEZsZXR0ICA8
YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENvbWJpbmUgSURC
QmFja2luZ1N0b3JlIGFuZCBJREJMZXZlbERCQmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0MTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgbWV0aG9kIHRoYXQgaXMgbm8g
bG9uZ2VyIGluIHRoZSBiYXNlIGNsYXNzLgorCisgICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oOgorCiAyMDEyLTExLTA4ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRXhwb3NlIHNuYXBzaG90cyBpbiBwbGF0Zm9ybS9sZXZlbGRiIHdyYXBw
ZXIgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBmYTZiYjEyY2NiZGIzMTlm
NWFhMTQyMDY4ZTQ1ZWFiNTdmN2ZiZjE5Li5lZDAxMDViMzM0NDEwYTc3MDI4MzQ0YjkyMmUwOTRl
YjMwNDFhOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE4MzMsNiArMTgz
Myw3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCBcCiAJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDYWxsYmFja3MuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwIFwKQEAgLTE4NzIsOCArMTg3Myw2IEBAIHdlYmNvcmVfbW9kdWxl
c19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaCBcCi0J
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwCmluZGV4IDY2M2UzNTJiYTEzNmI0NzkwYzAzZDM4NGU2YjExYWNiNjZjMjY5NWUuLjBmY2Ix
OTcwZGY1MDU3YjA4MWMxNTEwNmUxMTM4YWFhMjMzN2I1ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjcsNyAr
MjcsNiBAQAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CiAjaW5jbHVkZSAiSGlzdG9ncmFtU3VwcG9ydC5oIgpAQCAtMzUsNyArMzQsNiBAQAogI2luY2x1
ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJ
REJMZXZlbERCQ29kaW5nLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKICNpbmNsdWRlICJJ
REJUcmFjaW5nLmgiCkBAIC0yMjMsNyArMjIxLDcgQEAgc3RhdGljIGludDY0X3QgZ2V0TWF4T2Jq
ZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIG1heE8K
ICAgICByZXR1cm4gbWF4T2JqZWN0U3RvcmVJZDsKIH0KIAotSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRi
KQorSURCQmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIFBhc3NPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBkYikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9mYWN0
b3J5KGZhY3RvcnkpCiAgICAgLCBtX2RiKGRiKQpAQCAtMjMxLDcgKzIyOSwxMSBAQCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgSURCRmFjdAogICAgIG1fZmFjdG9yeS0+YWRkSURCQmFja2luZ1N0b3JlKGlkZW50
aWZpZXIsIHRoaXMpOwogfQogCi1JREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSgpCitJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZSgpCit7Cit9CisK
K0lEQkJhY2tpbmdTdG9yZTo6fklEQkJhY2tpbmdTdG9yZSgpCiB7CiAgICAgbV9mYWN0b3J5LT5y
ZW1vdmVJREJCYWNraW5nU3RvcmUobV9pZGVudGlmaWVyKTsKIApAQCAtMjUxLDkgKzI1Myw5IEBA
IGVudW0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZU9wZW5SZXN1bHQgewogICAgIElEQkxldmVsREJC
YWNraW5nU3RvcmVPcGVuTWF4LAogfTsKIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlQXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVy
LCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnkpCitQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gSURCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmll
ciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQogewotICAgIElEQl9UUkFDRSgiSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbiIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0
b3JlOjpvcGVuIik7CiAgICAgU3RyaW5nIHBhdGhCYXNlID0gcGF0aEJhc2VBcmc7CiAKICAgICBP
d25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IGNvbXBhcmF0b3IgPSBhZG9wdFB0cihuZXcgQ29tcGFy
YXRvcigpKTsKQEAgLTMwNSw3ICszMDcsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdAogCiAg
ICAgLy8gRklYTUU6IEhhbmRsZSBjb21wYXJhdG9yIG5hbWUgY2hhbmdlcy4KIAotICAgIFJlZlB0
cjxJREJMZXZlbERCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkxl
dmVsREJCYWNraW5nU3RvcmUoZmlsZUlkZW50aWZpZXIsIGZhY3RvcnksIGRiLnJlbGVhc2UoKSkp
KTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3
IElEQkJhY2tpbmdTdG9yZShmaWxlSWRlbnRpZmllciwgZmFjdG9yeSwgZGIucmVsZWFzZSgpKSkp
OwogICAgIGJhY2tpbmdTdG9yZS0+bV9jb21wYXJhdG9yID0gY29tcGFyYXRvci5yZWxlYXNlKCk7
CiAKICAgICBpZiAoIXNldFVwTWV0YWRhdGEoYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpLCBmaWxl
SWRlbnRpZmllcikpCkBAIC0zMTQsNyArMzE2LDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXQK
ICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKIH0KIAotVmVjdG9yPFN0cmluZz4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0YWJhc2VOYW1lcygpCitWZWN0b3I8U3RyaW5n
PiBJREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoKQogewogICAgIFZlY3RvcjxTdHJp
bmc+IGZvdW5kTmFtZXM7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gRGF0YWJh
c2VOYW1lS2V5OjplbmNvZGVNaW5LZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsKQEAgLTMzNiw3
ICszMzgsNyBAQCBWZWN0b3I8U3RyaW5nPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXREYXRh
YmFzZU5hbWVzKCkKICAgICByZXR1cm4gZm91bmROYW1lczsKIH0KIAotYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCRGF0YWJhc2VNZXRhZGF0YSogbWV0YWRhdGEpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0
SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRh
dGEqIG1ldGFkYXRhKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5h
bWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOwogCkBAIC0zODIsNyArMzg0LDcgQEAg
c3RhdGljIGludDY0X3QgZ2V0TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQogICAg
IHJldHVybiBkYXRhYmFzZUlkOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNy
ZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCitib29sIElEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJ
ZCkKIHsKICAgICByb3dJZCA9IGdldE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7CiAgICAgaWYg
KHJvd0lkIDwgMCkKQEAgLTQwMiw3ICs0MDQsNyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0
ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKQorYm9vbCBJREJCYWNr
aW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9u
KQogewogICAgIGlmIChpbnRWZXJzaW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbikKICAgICAgICAgaW50VmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJ
bnRWZXJzaW9uOwpAQCAtNDExLDcgKzQxMyw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRl
SURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorYm9vbCBJREJCYWNr
aW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lv
bikKIHsKICAgICBwdXRTdHJpbmcoVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNl
TWV0YURhdGFLZXk6OlVzZXJWZXJzaW9uKSwgdmVyc2lvbik7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC00MjUsOSArNDI3LDkgQEAgc3RhdGljIHZvaWQgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWcKIH0KIAogCi1ib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkK
K2Jvb2wgSURCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUp
CiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFz
ZSIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSIpOwog
ICAgIE93blB0cjxMZXZlbERCV3JpdGVPbmx5VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gTGV2
ZWxEQldyaXRlT25seVRyYW5zYWN0aW9uOjpjcmVhdGUobV9kYi5nZXQoKSk7CiAKICAgICBJREJE
YXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhOwpAQCAtNDYxLDkgKzQ2Myw5IEBAIHN0YXRpYyBib29s
IGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBp
dCwgY29uc3QgVmVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVZlY3RvcjxJREJPYmplY3RTdG9y
ZU1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRf
dCBkYXRhYmFzZUlkKQorVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdT
dG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkKIHsKLSAgICBJREJfVFJB
Q0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyIpOworICAgIElEQl9U
UkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMiKTsKICAgICBWZWN0b3I8SURC
T2JqZWN0U3RvcmVNZXRhZGF0YT4gb2JqZWN0U3RvcmVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBzdGFydEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCAx
LCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkKTsKQEAgLTU2NSwxMCArNTY3LDEwIEBAIHN0
YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJv
b2wgYXV0b0luY3JlbWVudCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KQogewotICAgIElEQl9UUkFD
RSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKLSAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGlmICghc2V0TWF4T2JqZWN0U3RvcmVJZChs
ZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTU5NCwxMCArNTk2LDEwIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJC
YWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVj
dFN0b3JlIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBU
cmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURC
X1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlIik7CisgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIFN0cmlu
ZyBvYmplY3RTdG9yZU5hbWU7CiAgICAgZ2V0U3RyaW5nKGxldmVsREJUcmFuc2FjdGlvbiwgT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUpLCBvYmplY3RTdG9yZU5hbWUpOwpAQCAtNjEyLDEw
ICs2MTQsMTAgQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmEKICAgICBjbGVhck9iamVjdFN0b3Jl
KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKIH0KIAotU3RyaW5nIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYga2V5KQorU3RyaW5nIElEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3Jk
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7Ci0gICAg
SURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQiKTsKLSAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdT
dG9yZTo6Z2V0UmVjb3JkIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNh
Y3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25G
cm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0g
T2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5
KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKQEAgLTYzNCwyNyArNjM2LDYgQEAgU3RyaW5nIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGkKICAgICByZXR1cm4gZGVjb2RlU3RyaW5nKHAsIGRhdGEuZW5kKCkpOwog
fQogCi1uYW1lc3BhY2UgewotY2xhc3MgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMg
SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlKGNvbnN0IFZlY3Rvcjxj
aGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
TGV2ZWxEQlJlY29yZElkZW50aWZpZXIocHJpbWFyeUtleSwgdmVyc2lvbikpOyB9Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50aWZpZXI+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBMZXZlbERCUmVjb3JkSWRlbnRpZmllcigpKTsgfQotCi0gICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXkuaXNFbXB0eSgpOyB9
Ci0gICAgVmVjdG9yPGNoYXI+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlL
ZXk7IH0KLSAgICB2b2lkIHNldFByaW1hcnlLZXkoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5
S2V5KSB7IG1fcHJpbWFyeUtleSA9IHByaW1hcnlLZXk7IH0KLSAgICBpbnQ2NF90IHZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KLSAgICB2b2lkIHNldFZlcnNpb24oaW50NjRf
dCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9IHZlcnNpb247IH0KLQotcHJpdmF0ZToKLSAgICBMZXZl
bERCUmVjb3JkSWRlbnRpZmllcihjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0
X3QgdmVyc2lvbikgOiBtX3ByaW1hcnlLZXkocHJpbWFyeUtleSksIG1fdmVyc2lvbih2ZXJzaW9u
KSB7IEFTU0VSVCghcHJpbWFyeUtleS5pc0VtcHR5KCkpOyB9Ci0gICAgTGV2ZWxEQlJlY29yZElk
ZW50aWZpZXIoKSA6IG1fcHJpbWFyeUtleSgpLCBtX3ZlcnNpb24oLTEpIHsgfQotCi0gICAgVmVj
dG9yPGNoYXI+IG1fcHJpbWFyeUtleTsgLy8gRklYTUU6IE1ha2UgaXQgbW9yZSBjbGVhciB0aGF0
IHRoaXMgaXMgdGhlICplbmNvZGVkKiB2ZXJzaW9uIG9mIHRoZSBrZXkuCi0gICAgaW50NjRfdCBt
X3ZlcnNpb247Ci19OwotfQotCiBzdGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExl
dmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQogewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktl
eSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpMYXN0VmVyc2lvbik7CkBAIC02NzMsMTEgKzY1
NCwxMSBAQCBzdGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YQogICAgIHJldHVybiB2ZXJzaW9uOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNv
cmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1
dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQog
ewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkIik7Cisg
ICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCIpOwogICAgIEFTU0VSVChr
ZXkuaXNWYWxpZCgpKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAg
IGludDY0X3QgdmVyc2lvbiA9IGdldE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxEQlRyYW5zYWN0aW9u
LCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2Jq
ZWN0U3RvcmVkYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwga2V5KTsKIApAQCAtNjkwLDQ0ICs2NzEsMzcgQEAgYm9vbCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24KICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlz
dHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAg
bGV2ZWxEQlRyYW5zYWN0aW9uLT5wdXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9u
KSk7CiAKLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZp
ZXIpOwotICAgIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlE
QktleShrZXkpKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJz
aW9uKTsKKyAgICByZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShr
ZXkpKTsKKyAgICByZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOwogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0
U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJCYWNraW5nU3RvcmU6
OmNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewotICAgIElE
Ql9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSIpOwotICAg
IExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246Omxl
dmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQl9UUkFDRSgiSURCQmFj
a2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBs
ZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rh
cnRLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCkuZW5jb2RlKCk7
CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCArIDEsIDApLmVuY29kZSgpOwogCiAgICAgZGVsZXRlUmFuZ2UobGV2ZWxE
QlRyYW5zYWN0aW9uLCBzdGFydEtleSwgc3RvcEtleSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVh
dGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmll
ciogcmVjb3JkSWRlbnRpZmllcikKIHsKLSAgICByZXR1cm4gTGV2ZWxEQlJlY29yZElkZW50aWZp
ZXI6OmNyZWF0ZSgpOwotfQorICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpkZWxldGVS
ZWNvcmQiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNh
Y3Rpb24pOwogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29yZElk
ZW50aWZpZXIpCi17Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxl
dGVSZWNvcmQiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9
IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBj
b25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBz
dGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZp
ZXIpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+IG9iamVjdFN0b3JlRGF0YUtleSA9IE9iamVj
dFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJS
ZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBv
YmplY3RTdG9yZURhdGFLZXkgPSBPYmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlk
LCBvYmplY3RTdG9yZUlkLCByZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwogICAgIGxl
dmVsREJUcmFuc2FjdGlvbi0+cmVtb3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7CiAKLSAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5
S2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0Vu
dHJ5S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgcmVjb3JkSWRlbnRpZmll
ci0+cHJpbWFyeUtleSgpKTsKICAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNF
bnRyeUtleSk7CiB9CiAKIAotaW50NjRfdCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2ludDY0
X3QgSURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rp
b24pOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJL
ZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7
CiAKQEAgLTc2Nyw5ICs3NDEsOSBAQCBpbnQ2NF90IElEQkxldmVsREJCYWNraW5nU3RvcmU6Omdl
dEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcgogICAgIHJldHVy
biBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKK2Jv
b2wgSURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVj
a0N1cnJlbnQpCiB7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24g
PSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAg
IGlmIChjaGVja0N1cnJlbnQpIHsKICAgICAgICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gZ2V0
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmVJZCk7CkBAIC03ODIsMTAgKzc1NiwxMCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3Rvcgog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4
aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmIGtleSwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKQorYm9vbCBJ
REJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNv
cmRJZGVudGlmaWVyKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
a2V5RXhpc3RzSW5PYmplY3RTdG9yZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxE
QlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNh
Y3Rpb24pOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVj
dFN0b3JlIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3Jl
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAgVmVj
dG9yPGNoYXI+IGRhdGE7CiAKQEAgLTc5Niw5ICs3NzAsOCBAQCBib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbgogICAgIGlmICghZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVy
c2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIExldmVsREJSZWNvcmRJZGVudGlm
aWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PExldmVsREJSZWNvcmRJ
ZGVudGlmaWVyKj4oZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKLSAgICBsZXZlbERCUmVjb3JkSWRl
bnRpZmllci0+c2V0UHJpbWFyeUtleShlbmNvZGVJREJLZXkoa2V5KSk7Ci0gICAgbGV2ZWxEQlJl
Y29yZElkZW50aWZpZXItPnNldFZlcnNpb24odmVyc2lvbik7CisgICAgZm91bmRSZWNvcmRJZGVu
dGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKKyAgICBmb3VuZFJlY29y
ZElkZW50aWZpZXItPnNldFZlcnNpb24odmVyc2lvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTgxOCw5ICs3OTEsOSBAQCBzdGF0aWMgYm9vbCBjaGVja0luZGV4QW5kTWV0YURhdGFLZXko
Y29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9yPGNoYQogfQogCiAKLVZlY3Rv
cjxJREJJbmRleE1ldGFkYXRhPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQorVmVjdG9yPElEQkluZGV4
TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmdldEluZGV4ZXMiKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6
Z2V0SW5kZXhlcyIpOwogICAgIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBpbmRleGVzOwogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCAwLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
c3RvcEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkICsgMSwgMCwgMCk7CkBAIC04ODksMTAgKzg2MiwxMCBAQCBzdGF0aWMgYm9vbCBzZXRNYXhJ
bmRleElkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgaXNV
bmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlu
ZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJv
b2wgaXNNdWx0aUVudHJ5KQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlSW5kZXgiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2Fj
dGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsK
KyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgiKTsKKyAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGlmICgh
c2V0TWF4SW5kZXhJZChsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkwOCwxMCArODgxLDEw
IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5k
ZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCiB7Ci0gICAg
SURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCIpOwotICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQl9UUkFDRSgiSURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleCIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRy
YW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0
aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhNZXRh
RGF0YVN0YXJ0ID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQsIDApOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleE1ldGFEYXRh
RW5kID0gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4SWQpOwpAQCAtOTIyLDE5ICs4OTUsMTggQEAgdm9pZCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGkKICAgICBkZWxldGVSYW5nZShsZXZlbERCVHJhbnNhY3Rpb24sIGluZGV4RGF0YVN0YXJ0
LCBpbmRleERhdGFFbmQpOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dElu
ZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29yZElk
ZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
IGtleSwgY29uc3QgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKLSAgICBJ
REJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCIp
OworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQi
KTsKICAgICBBU1NFUlQoa2V5LmlzVmFsaWQoKSk7CiAgICAgQVNTRVJUKGluZGV4SWQgPj0gTWlu
aW11bUluZGV4SWQpOwotICAgIGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERC
UmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlm
aWVyKj4ocmVjb3JkSWRlbnRpZmllcik7CiAKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5kZXhEYXRh
S2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5jb2RlSURC
S2V5KGtleSksIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlEQktleShrZXkpLCByZWNvcmRJ
ZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAg
ZGF0YS5hcHBlbmQoZW5jb2RlVmFySW50KGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9u
KCkpKTsKLSAgICBkYXRhLmFwcGVuZChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtl
eSgpKTsKKyAgICBkYXRhLmFwcGVuZChlbmNvZGVWYXJJbnQocmVjb3JkSWRlbnRpZmllci0+dmVy
c2lvbigpKSk7CisgICAgZGF0YS5hcHBlbmQocmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgp
KTsKIAogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC05NjgsNyArOTQwLDcgQEAgc3RhdGljIGJvb2wgZmluZEdyZWF0
ZXN0S2V5TGVzc1RoYW5PckVxdWFsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpk
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGlu
dDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKQorYm9vbCBJ
REJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCwgaW50NjRfdCwgaW50NjRfdCwgY29uc3QgUmVjb3JkSWRl
bnRpZmllciopCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXNuJ3QgbmVlZGVkIHNpbmNlIHdlIGlu
dmFsaWRhdGUgaW5kZXggZGF0YSB2aWEgdGhlIHZlcnNpb24gbnVtYmVyIG1lY2hhbmlzbS4KICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTk4NSwxMiArOTU3LDEyIEBAIHN0YXRpYyBib29sIHZlcnNpb25F
eGlzdHMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpCiAgICAgcmV0dXJuIGRlY29kZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpID09IHZl
cnNpb247CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpCitib29sIElEQkJh
Y2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5j
b2RlZFByaW1hcnlLZXkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpmaW5kS2V5SW5JbmRleCIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpmaW5k
S2V5SW5JbmRleCIpOwogICAgIEFTU0VSVChmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmlzRW1wdHko
KSk7CiAKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5KTsKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBpdCA9IGxldmVsREJUcmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpdC0+c2Vl
ayhsZXZlbGRiS2V5KTsKQEAgLTEwMjAsOSArOTkyLDkgQEAgYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2EKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQorUGFzc1JlZlB0cjxJREJLZXk+IElEQkJh
Y2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKLSAgICBJREJfVFJB
Q0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCIpOworICAg
IElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgiKTsKIAog
ICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwogICAgIGlmIChmaW5kS2V5
SW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
a2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkgewpAQCAtMTAzNCw5ICsxMDA2LDkgQEAgUGFz
c1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJ
bmRleChJREJCYWNraW5nU3RvcmUKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5
PiYgZm91bmRQcmltYXJ5S2V5KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5k
ZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiB7Ci0gICAg
SURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7Cisg
ICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgiKTsKIAogICAg
IFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwogICAgIGlmICghZmluZEtleUlu
SW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGlu
ZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KSkKQEAgLTEwNDYsNjQgKzEwMTgsMjIgQEAg
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qIHRyYW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotbmFtZXNwYWNl
IHsKLQotc3RydWN0IEN1cnNvck9wdGlvbnMgewotICAgIFZlY3RvcjxjaGFyPiBsb3dLZXk7Ci0g
ICAgYm9vbCBsb3dPcGVuOwotICAgIFZlY3RvcjxjaGFyPiBoaWdoS2V5OwotICAgIGJvb2wgaGln
aE9wZW47Ci0gICAgYm9vbCBmb3J3YXJkOwotICAgIGJvb2wgdW5pcXVlOwotfTsKLQotY2xhc3Mg
Q3Vyc29ySW1wbENvbW1vbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNvciB7Ci1wdWJs
aWM6Ci0gICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0dWFsIGJvb2wgYWR2
YW5jZSh1bnNpZ25lZCBsb25nKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29udGludWVGdW5jdGlvbihj
b25zdCBJREJLZXkqID0gMCwgSXRlcmF0b3JTdGF0ZSA9IFNlZWspOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7
IH0KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSA9IDA7
Ci0gICAgYm9vbCBmaXJzdFNlZWsoKTsKLQotcHJvdGVjdGVkOgotICAgIEN1cnNvckltcGxDb21t
b24oTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYg
Y3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAg
ICAgICAsIG1fY3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBDdXJzb3JJbXBsQ29tbW9uKGNvbnN0IEN1cnNvckltcGxDb21tb24qIG90aGVyKQotICAgICAg
ICA6IG1fdHJhbnNhY3Rpb24ob3RoZXItPm1fdHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9jdXJz
b3JPcHRpb25zKG90aGVyLT5tX2N1cnNvck9wdGlvbnMpCi0gICAgICAgICwgbV9jdXJyZW50S2V5
KG90aGVyLT5tX2N1cnJlbnRLZXkpCi0gICAgewotICAgICAgICBpZiAob3RoZXItPm1faXRlcmF0
b3IpIHsKLSAgICAgICAgICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVy
YXRvcigpOworSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcihjb25zdCBJREJCYWNraW5n
U3RvcmU6OkN1cnNvciogb3RoZXIpCisgICAgOiBtX3RyYW5zYWN0aW9uKG90aGVyLT5tX3RyYW5z
YWN0aW9uKQorICAgICwgbV9jdXJzb3JPcHRpb25zKG90aGVyLT5tX2N1cnNvck9wdGlvbnMpCisg
ICAgLCBtX2N1cnJlbnRLZXkob3RoZXItPm1fY3VycmVudEtleSkKK3sKKyAgICBpZiAob3RoZXIt
Pm1faXRlcmF0b3IpIHsKKyAgICAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0
ZUl0ZXJhdG9yKCk7CiAKLSAgICAgICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRvci0+aXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+bV9pdGVyYXRv
ci0+a2V5KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkp
OwotICAgICAgICAgICAgfQorICAgICAgICBpZiAob3RoZXItPm1faXRlcmF0b3ItPmlzVmFsaWQo
KSkgeworICAgICAgICAgICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+bV9pdGVyYXRvci0+a2V5
KCkpOworICAgICAgICAgICAgQVNTRVJUKG1faXRlcmF0b3ItPmlzVmFsaWQoKSk7CiAgICAgICAg
IH0KICAgICB9Cit9CiAKLSAgICB2aXJ0dWFsIH5DdXJzb3JJbXBsQ29tbW9uKCkgeyB9Ci0KLSAg
ICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OwotICAgIGJvb2wgaGF2ZUVudGVyZWRSYW5nZSgp
IGNvbnN0OwotCi0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOwotICAgIEN1
cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+
IG1faXRlcmF0b3I7Ci0gICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5OwotfTsKLQotYm9v
bCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWsoKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1
cnNvcjo6Zmlyc3RTZWVrKCkKIHsKICAgICBtX2l0ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3Jl
YXRlSXRlcmF0b3IoKTsKICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCkBAIC0xMTE0
LDcgKzEwNDQsNyBAQCBib29sIEN1cnNvckltcGxDb21tb246OmZpcnN0U2VlaygpCiAgICAgcmV0
dXJuIGNvbnRpbnVlRnVuY3Rpb24oMCwgUmVhZHkpOwogfQogCi1ib29sIEN1cnNvckltcGxDb21t
b246OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpD
dXJzb3I6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCkKIHsKICAgICB3aGlsZSAoY291bnQt
LSkgewogICAgICAgICBpZiAoIWNvbnRpbnVlRnVuY3Rpb24oKSkKQEAgLTExMjMsNyArMTA1Myw3
IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50KQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEN1cnNvckltcGxDb21tb246OmNvbnRpbnVlRnVu
Y3Rpb24oY29uc3QgSURCS2V5KiBrZXksIEl0ZXJhdG9yU3RhdGUgbmV4dFN0YXRlKQorYm9vbCBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtl
eSwgSXRlcmF0b3JTdGF0ZSBuZXh0U3RhdGUpCiB7CiAgICAgUmVmUHRyPElEQktleT4gcHJldmlv
dXNLZXkgPSBtX2N1cnJlbnRLZXk7CiAKQEAgLTEyMTUsNyArMTE0NSw3IEBAIGJvb2wgQ3Vyc29y
SW1wbENvbW1vbjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSwgSXRlcmF0b3JT
dGF0ZSBuZXh0U3RhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgQ3Vyc29ySW1wbENvbW1v
bjo6aGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0Citib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
OjpoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZv
cndhcmQpIHsKICAgICAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuKQpAQCAtMTIyOSw3
ICsxMTU5LDcgQEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpoYXZlRW50ZXJlZFJhbmdlKCkgY29u
c3QKICAgICByZXR1cm4gY29tcGFyZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJz
b3JPcHRpb25zLmhpZ2hLZXkpIDw9IDA7CiB9CiAKLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6aXNQ
YXN0Qm91bmRzKCkgY29uc3QKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmlzUGFzdEJv
dW5kcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7CiAgICAg
ICAgIGlmIChtX2N1cnNvck9wdGlvbnMuaGlnaE9wZW4pCkBAIC0xMjQyLDkgKzExNzIsOSBAQCBi
b29sIEN1cnNvckltcGxDb21tb246OmlzUGFzdEJvdW5kcygpIGNvbnN0CiAgICAgcmV0dXJuIGNv
bXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkp
IDwgMDsKIH0KIAotY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsIDogcHVibGljIEN1cnNv
ckltcGxDb21tb24geworY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsIDogcHVibGljIElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxP
YmplY3RTdG9yZUtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JP
cHRpb25zJiBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsK
ICAgICB9CkBAIC0xMjU0LDI2ICsxMTg0LDI2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBPYmplY3RTdG9yZUtleUN1cnNvckltcGwodGhpcykpOwogICAgIH0KIAotICAg
IC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcigpIE9WRVJSSURFCisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKKyAgICB2
aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJl
Y29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIoKSBPVkVSUklERQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1faWRlbnRpZmllcjsKICAgICB9CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJy
ZW50Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9w
dGlvbnMpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0
aW9ucykKKyAgICBPYmplY3RTdG9yZUtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMm
IGN1cnNvck9wdGlvbnMpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3IodHJhbnNh
Y3Rpb24sIGN1cnNvck9wdGlvbnMpCiAgICAgewogICAgIH0KIAogICAgIE9iamVjdFN0b3JlS2V5
Q3Vyc29ySW1wbChjb25zdCBPYmplY3RTdG9yZUtleUN1cnNvckltcGwqIG90aGVyKQotICAgICAg
ICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpD
dXJzb3Iob3RoZXIpCiAgICAgewogICAgIH0KIAotICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRl
bnRpZmllcj4gbV9pZGVudGlmaWVyOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29y
ZElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVLZXlDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCkBAIC0xMjk4LDE0ICsxMjI4LDE0IEBAIGJvb2wgT2Jq
ZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgfQogCiAgICAgLy8g
RklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0
aW1pemUuCi0gICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0
ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOworICAgIG1faWRlbnRpZmll
ciA9IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktl
eSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2xh
c3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21tb24geworY2xh
c3MgT2JqZWN0U3RvcmVDdXJzb3JJbXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+
IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRp
b25zJiBjdXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vy
c29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodHJh
bnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKICAgICB9CkBAIC0xMzE1LDI4ICsxMjQ1LDI4IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvcklt
cGwodGhpcykpOwogICAgIH0KIAotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFs
IFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVS
ZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJREUKKyAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNv
cgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFs
dWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVu
dGlmaWVyPiByZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2lkZW50aWZpZXI7CiAgICAgfQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygp
OwogCiBwcml2YXRlOgotICAgIE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAg
ICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAg
T2JqZWN0U3RvcmVDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25z
KQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JP
cHRpb25zKQogICAgIHsKICAgICB9CiAKICAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoY29uc3Qg
T2JqZWN0U3RvcmVDdXJzb3JJbXBsKiBvdGhlcikKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9u
KG90aGVyKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKG90aGVyKQogICAgICAg
ICAsIG1fY3VycmVudFZhbHVlKG90aGVyLT5tX2N1cnJlbnRWYWx1ZSkKICAgICB7CiAgICAgfQog
CiAgICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOwotICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRl
bnRpZmllcj4gbV9pZGVudGlmaWVyOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29y
ZElkZW50aWZpZXI+IG1faWRlbnRpZmllcjsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsOjpsb2FkQ3VycmVudFJvdygpCkBAIC0xMzYxLDE2ICsxMjkxLDE2IEBAIGJvb2wgT2JqZWN0
U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgfQogCiAgICAgLy8gRklYTUU6
IFRoaXMgcmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUu
Ci0gICAgbV9pZGVudGlmaWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNv
ZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOworICAgIG1faWRlbnRpZmllciA9IElE
QkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9j
dXJyZW50S2V5KSwgdmVyc2lvbik7CiAKICAgICBtX2N1cnJlbnRWYWx1ZSA9IGRlY29kZVN0cmlu
Zyh2YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCi1jbGFzcyBJbmRleEtleUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1w
bENvbW1vbiB7CitjbGFzcyBJbmRleEtleUN1cnNvckltcGwgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3IgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4S2V5Q3Vy
c29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1
cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhL
ZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0
cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykpOwogICAgIH0KQEAgLTEzODAsMjAgKzEzMTAsMjAg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1w
bCh0aGlzKSk7CiAgICAgfQogCi0gICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwg
U3RyaW5nIHZhbHVlKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1f
cHJpbWFyeUtleTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJl
Y29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IK
KyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVy
KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wg
bG9hZEN1cnJlbnRSb3coKTsKIAogcHJpdmF0ZToKLSAgICBJbmRleEtleUN1cnNvckltcGwoTGV2
ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29y
T3B0aW9ucykKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JP
cHRpb25zKQorICAgIEluZGV4S2V5Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vy
c29yT3B0aW9ucykKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcih0cmFuc2FjdGlv
biwgY3Vyc29yT3B0aW9ucykKICAgICB7CiAgICAgfQogCiAgICAgSW5kZXhLZXlDdXJzb3JJbXBs
KGNvbnN0IEluZGV4S2V5Q3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENv
bW1vbihvdGhlcikKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcihvdGhlcikKICAg
ICAgICAgLCBtX3ByaW1hcnlLZXkob3RoZXItPm1fcHJpbWFyeUtleSkKICAgICB7CiAgICAgfQpA
QCAtMTQ0Nyw5ICsxMzc3LDkgQEAgYm9vbCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2xhc3MgSW5kZXhDdXJzb3JJbXBsIDogcHVi
bGljIEN1cnNvckltcGxDb21tb24geworY2xhc3MgSW5kZXhDdXJzb3JJbXBsIDogcHVibGljIElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bmRleEN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBj
b25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluZGV4Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRp
b25zKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwo
dHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKICAgICB9CkBAIC0xNDU5LDIwICsxMzg5LDIw
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwo
dGhpcykpOwogICAgIH0KIAotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0
cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0K
KyAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJ
ZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICBib29s
IGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhDdXJzb3JJbXBsKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9w
dGlvbnMpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0
aW9ucykKKyAgICBJbmRleEN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9w
dGlvbnMpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3IodHJhbnNhY3Rpb24sIGN1
cnNvck9wdGlvbnMpCiAgICAgewogICAgIH0KIAogICAgIEluZGV4Q3Vyc29ySW1wbChjb25zdCBJ
bmRleEN1cnNvckltcGwqIG90aGVyKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIp
CisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3Iob3RoZXIpCiAgICAgICAgICwgbV9w
cmltYXJ5S2V5KG90aGVyLT5tX3ByaW1hcnlLZXkpCiAgICAgICAgICwgbV92YWx1ZShvdGhlci0+
bV92YWx1ZSkKICAgICAgICAgLCBtX3ByaW1hcnlMZXZlbERCS2V5KG90aGVyLT5tX3ByaW1hcnlM
ZXZlbERCS2V5KQpAQCAtMTUzMyw3ICsxNDYzLDcgQEAgYm9vbCBJbmRleEN1cnNvckltcGw6Omxv
YWRDdXJyZW50Um93KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBvYmplY3RTdG9yZUN1
cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRp
b25zKQorYm9vbCBvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKIHsK
ICAgICBib29sIGxvd2VyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKICAgICBib29s
IHVwcGVyQm91bmQgPSByYW5nZSAmJiByYW5nZS0+dXBwZXIoKTsKQEAgLTE1ODAsNyArMTUxMCw3
IEBAIGJvb2wgb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
aW5kZXhDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBD
dXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorYm9vbCBpbmRleEN1cnNvck9wdGlvbnMoTGV2
ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdl
LCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
OjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogewogICAgIEFTU0VSVCh0cmFuc2FjdGlv
bik7CiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CkBAIC0x
NjIzLDEzICsxNTUzLDExIEBAIGJvb2wgaW5kZXhDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLX0KLQotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0
aW9uKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVj
dFN0b3JlQ3Vyc29yIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rp
b24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0g
ICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIElEQl9UUkFDRSgiSURCQmFja2lu
Z1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24q
IGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yOjpDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CiAgICAgaWYgKCFvYmplY3RTdG9yZUN1
cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJz
b3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKQEAgLTE2
MzksMTEgKzE1NjcsMTEgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICByZXR1cm4gY3Vy
c29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBJREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJl
Y3Rpb24gZGlyZWN0aW9uKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBs
ZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0
cmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIElEQl9U
UkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IiKTsKKyAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CiAgICAg
aWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3Vy
c29yID0gT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9u
LCBjdXJzb3JPcHRpb25zKTsKQEAgLTE2NTMsMTEgKzE1ODEsMTEgQEAgUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0
b3JlS2V5Q3UKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4
S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikK
K1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkJhY2tpbmdTdG9yZTo6b3Bl
bkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEtleUN1cnNvciIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9u
ID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAg
IEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdT
dG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZl
bERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6
Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwogICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25z
KGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwg
cmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwogICAg
IFJlZlB0cjxJbmRleEtleUN1cnNvckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6
Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CkBAIC0xNjY3LDExICsx
NTk1LDExIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJC
YWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihJCiAgICAgcmV0dXJuIGN1cnNvci5yZWxl
YXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJz
b3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRy
YW5zYWN0aW9uKTsKLSAgICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgSURCX1RS
QUNFKCJJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvciIpOworICAgIExldmVsREJUcmFu
c2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKICAgICBpZiAoIWluZGV4
Q3Vyc29yT3B0aW9ucyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGluZGV4SWQsIHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBSZWZQdHI8SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNv
ckltcGw6OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpOwpAQCAtMTY4
MSw2MCArMTYwOSwzNSBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoSURCQgogICAgIHJldHVybiBjdXJz
b3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKCkKLXsKLSAgICBy
ZXR1cm4gVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzKTsKLX0KLQotUGFzc1JlZlB0cjxJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OmNyZWF0ZShJREJMZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2FjdGlvbihiYWNraW5nU3RvcmUpKTsKLX0K
LQotSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKElEQkxl
dmVsREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKK0lEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OlRyYW5zYWN0aW9uKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogICAgIDog
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogewogfQogCi12b2lkIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbigpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OmJlZ2luKCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpiZWdpbiIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6YmVnaW4iKTsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb24pOwogICAg
IG1fdHJhbnNhY3Rpb24gPSBMZXZlbERCVHJhbnNhY3Rpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9y
ZS0+bV9kYi5nZXQoKSk7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmNvbW1pdCgpCitib29sIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1p
dCgpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6Y29tbWl0Iik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
Ojpjb21taXQiKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CiAgICAgYm9vbCByZXN1bHQg
PSBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsKICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbjo6cm9sbGJhY2soKQordm9pZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpy
b2xsYmFjaygpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbjo6cm9sbGJhY2siKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OnJvbGxiYWNrIik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwogICAgIG1f
dHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CiAgICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0
aEJhc2VBcmcpCi17Ci0gICAgU3RyaW5nIHBhdGhCYXNlID0gcGF0aEJhc2VBcmc7Ci0KLSAgICBp
ZiAocGF0aEJhc2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGV2ZW50dWFsbHkgdXNlIHRoZSBzYW1lIExldmVsREIgZGF0YWJhc2Ug
Zm9yIGFsbCBvcmlnaW5zLgotICAgIFN0cmluZyBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHBhdGhCYXNlLCBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmlu
ZGV4ZWRkYi5sZXZlbGRiIik7Ci0KLSAgICAvLyBGSVhNRTogdGhpcyBpcyBjaGVja2luZyBmb3Ig
cHJlc2VuY2Ugb2YgdGhlIGRvbWFpbiwgbm90IHRoZSBkYXRhYmFzZSBpdHNlbGYKLSAgICByZXR1
cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVOVCIpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmgKaW5kZXggM2M5NDUxY2MwNzRjMjBlNmYyMTdjNDk0ODdhM2Q4MzUyZjI3MDJh
ZC4uMjUyZGVlMWY1YTI4OTFmNzQ2NzZlMTViYjczZTMwMTkzNWE4NWE4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTI5
LDYwICsyOSw3MyBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAi
SURCQ3Vyc29yLmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQk1ldGFk
YXRhLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJMZXZlbERCVHJh
bnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIExldmVsREJDb21wYXJhdG9yOworY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOworY2xh
c3MgTGV2ZWxEQlRyYW5zYWN0aW9uOworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwogY2xh
c3MgSURCS2V5OwogY2xhc3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLXN0
cnVjdCBJREJEYXRhYmFzZU1ldGFkYXRhOwogCiBjbGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJCYWNraW5nU3RvcmU+IHsKIHB1YmxpYzoKICAgICBjbGFzcyBUcmFu
c2FjdGlvbjsKIAotICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHt9OworICAgIHZpcnR1
YWwgfklEQkJhY2tpbmdTdG9yZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gb3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0
IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwogCi0gICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXREYXRhYmFzZU5hbWVzKCkgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0
YWJhc2VNZXRhZGF0YSogZm91bmRNZXRhZGF0YSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBz
dHJpbmdWZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihUcmFuc2FjdGlvbios
IGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4g
Z2V0RGF0YWJhc2VOYW1lcygpOworICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSopOworICAgIHZpcnR1
YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsK
KyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsK
KyAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwor
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0g
ICAgdmlydHVhbCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVz
KGludDY0X3QgZGF0YWJhc2VJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RT
dG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNy
ZW1lbnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rp
b24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0b3Jlcyhp
bnQ2NF90IGRhdGFiYXNlSWQpOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgYXV0b0luY3JlbWVudCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7CiAKICAgICBjbGFzcyBSZWNvcmRJZGVudGlmaWVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8UmVjb3JkSWRlbnRpZmllcj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
Y29yZElkZW50aWZpZXI+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGlu
dDY0X3QgdmVyc2lvbikgeyByZXR1cm4gYWRvcHRSZWYobmV3IFJlY29yZElkZW50aWZpZXIocHJp
bWFyeUtleSwgdmVyc2lvbikpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlY29yZElk
ZW50aWZpZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNvcmRJZGVudGlmaWVy
KCkpOyB9CiAgICAgICAgIHZpcnR1YWwgflJlY29yZElkZW50aWZpZXIoKSB7IH0KKworICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleS5pc0Vt
cHR5KCk7IH0KKyAgICAgICAgVmVjdG9yPGNoYXI+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVy
biBtX3ByaW1hcnlLZXk7IH0KKyAgICAgICAgdm9pZCBzZXRQcmltYXJ5S2V5KGNvbnN0IFZlY3Rv
cjxjaGFyPiYgcHJpbWFyeUtleSkgeyBtX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OyB9CisgICAg
ICAgIGludDY0X3QgdmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorICAgICAg
ICB2b2lkIHNldFZlcnNpb24oaW50NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9IHZlcnNpb247
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9y
PGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1h
cnlLZXkpLCBtX3ZlcnNpb24odmVyc2lvbikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgp
KTsgfQorICAgICAgICBSZWNvcmRJZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJz
aW9uKC0xKSB7IH0KKworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhN
RTogTWFrZSBpdCBtb3JlIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24g
b2YgdGhlIGtleS4KKyAgICAgICAgaW50NjRfdCBtX3ZlcnNpb247CiAgICAgfTsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50
aWZpZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRSZWNvcmQoVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVu
dCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKFRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikgPSAwOwotCi0g
ICAgdmlydHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBj
cmVhdGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURC
S2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkm
LCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJ
bmRleERhdGFGb3JSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVy
KikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJ
bmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wga2V5RXhpc3RzSW5JbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VpZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhL
ZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpID0gMDsKKworICAgIHZpcnR1YWwg
U3RyaW5nIGdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOworICAgIHZp
cnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCB2b2lkIGNs
ZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopOworICAgIHZp
cnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7CisgICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KTsK
KyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7
CisKKyAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBnZXRJbmRleGVzKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVu
dHJ5KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQpOworICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFJlY29y
ZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3Jk
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVy
Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2
aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFy
eUtleSk7CiAKICAgICBjbGFzcyBDdXJzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXJzb3I+IHsK
ICAgICBwdWJsaWM6CkBAIC05MSwzMyArMTA0LDg0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFNl
ZWsKICAgICAgICAgfTsKIAorICAgICAgICBzdHJ1Y3QgQ3Vyc29yT3B0aW9ucyB7CisgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gbG93S2V5OworICAgICAgICAgICAgYm9vbCBsb3dPcGVuOworICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IGhpZ2hLZXk7CisgICAgICAgICAgICBib29sIGhpZ2hPcGVu
OworICAgICAgICAgICAgYm9vbCBmb3J3YXJkOworICAgICAgICAgICAgYm9vbCB1bmlxdWU7Cisg
ICAgICAgIH07CisKKyAgICAgICAgQ3Vyc29yKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgICAgICA6IG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCisgICAgICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhj
dXJzb3JPcHRpb25zKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgQ3Vyc29yKGNvbnN0
IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKiBvdGhlcik7CisKKyAgICAgICAgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgICAgICBib29s
IGNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiA9IDAsIEl0ZXJhdG9yU3RhdGUgPSBTZWVr
KTsKKyAgICAgICAgYm9vbCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcpOworICAgICAgICBib29sIGZp
cnN0U2VlaygpOworCiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IGNsb25lKCkg
PSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgYWR2YW5jZSh1bnNpZ25lZCBsb25nKSA9IDA7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSogPSAwLCBJ
dGVyYXRvclN0YXRlID0gU2VlaykgPSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXkoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXkoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOwotICAgICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH07CisgICAgICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRLZXk7IH0KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVu
dGlmaWVyKCkgPSAwOworICAgICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH0KKyAgICAgICAgdmly
dHVhbCBib29sIGxvYWRDdXJyZW50Um93KCkgPSAwOworCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBib29sIGlzUGFzdEJvdW5kcygpIGNvbnN0OworICAgICAgICBib29sIGhhdmVFbnRlcmVkUmFu
Z2UoKSBjb25zdDsKKworICAgICAgICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247
CisgICAgICAgIGNvbnN0IEN1cnNvck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOworICAgICAgICBP
d25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBtX2l0ZXJhdG9yOworICAgICAgICBSZWZQdHI8SURCS2V5
PiBtX2N1cnJlbnRLZXk7CiAgICAgfTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5PYmplY3RTdG9yZUN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0
b3JlS2V5Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0g
MDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9
IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKFRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNv
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNv
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJD
dXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbklu
ZGV4Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKIAotICAgIGNsYXNzIFRyYW5zYWN0aW9uIDog
cHVibGljIFJlZkNvdW50ZWQ8VHJhbnNhY3Rpb24+IHsKKyAgICBjbGFzcyBUcmFuc2FjdGlvbiB7
CiAgICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5UcmFuc2FjdGlvbigpIHsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW4oKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjb21taXQo
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpID0gMDsKKyAgICAgICAgVHJh
bnNhY3Rpb24oSURCQmFja2luZ1N0b3JlKik7CisgICAgICAgIHZvaWQgYmVnaW4oKTsKKyAgICAg
ICAgYm9vbCBjb21taXQoKTsKKyAgICAgICAgdm9pZCByb2xsYmFjaygpOworCisgICAgICAgIHN0
YXRpYyBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHJhbnNhY3Rpb24qPih0cmFuc2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIElEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5n
U3RvcmU7CisgICAgICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247
CiAgICAgfTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5z
YWN0aW9uKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093blB0cjxMZXZl
bERCRGF0YWJhc2U+KTsKKworICAgIC8vIFNob3VsZCBvbmx5IHVzZWQgZm9yIG1vY2tpbmcuCisg
ICAgSURCQmFja2luZ1N0b3JlKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBmaW5kS2V5SW5JbmRl
eChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9y
PGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KTsKKworICAgIFN0cmluZyBtX2lkZW50aWZp
ZXI7CisgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OworICAgIE93
blB0cjxMZXZlbERCRGF0YWJhc2U+IG1fZGI7CisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9y
PiBtX2NvbXBhcmF0b3I7CisKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNlbmRpZiAvLyBJREJCYWNr
aW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggNTVjOGRhYjRhNzgxNjY2OWZjMTg3
YjMyMTgyNmM3M2JjNzNiOTY3NS4uZWFhNzMzYTUyOGVmNDU0YWMzODBlYzJmMGM2MWQ0NTEzY2Jm
NzA5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAi
SURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgog
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNp
bmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAg
LTEzNCwxMiArMTMzLDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6b3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFMKICAgICBpZiAoaXQyICE9
IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQogICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnZh
bHVlOwogICAgIGVsc2UgewotI2lmIFVTRShMRVZFTERCKQotICAgICAgICBiYWNraW5nU3RvcmUg
PSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRh
RGlyZWN0b3J5LCBmaWxlSWRlbnRpZmllciwgdGhpcyk7Ci0jZWxzZQotICAgICAgICBVTlVTRURf
UEFSQU0oZGF0YURpcmVjdG9yeSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vu
ZGlmCisgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0
eU9yaWdpbi5nZXQoKSwgZGF0YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwogICAg
IH0KIAogICAgIGlmIChiYWNraW5nU3RvcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDFjYjI3MjUxNGExZjI4MTIwMzUwODM1M2EzOTQyMTA3MjNjNGIz
ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkxldmVsREJCYWNr
aW5nU3RvcmVfaAotI2RlZmluZSBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotI2lmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSAiSURCQmFj
a2luZ1N0b3JlLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIExldmVsREJDb21wYXJhdG9yOwotY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwot
Y2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOwotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwot
Ci1jbGFzcyBJREJMZXZlbERCQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNl
Y3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxl
SWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB+SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZSgpOwotCi0gICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXREYXRh
YmFzZU5hbWVzKCk7Ci0gICAgdmlydHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFkYXRhKik7Ci0gICAgdmlydHVhbCBib29s
IGNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwotICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotICAgIHZp
cnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7Ci0gICAgdmly
dHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICB2aXJ0
dWFsIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRf
dCBkYXRhYmFzZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1
dG9JbmNyZW1lbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVh
dGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBwdXRS
ZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3JkKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgaW50NjRfdCBn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVh
bCBib29sIG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KTsKLSAgICB2aXJ0dWFsIGJv
b2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYs
IFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICB2aXJ0dWFs
IFZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
SURCS2V5UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwot
ICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5
RXhpc3RzSW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7Ci0KLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24pOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNv
cihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rp
b24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBiYWNraW5nU3RvcmVF
eGlzdHMoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
cGF0aEJhc2UpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZShjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIFBhc3NPd25QdHI8
TGV2ZWxEQkRhdGFiYXNlPik7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBmaW5kS2V5SW5JbmRleChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNo
YXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KTsKLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7
Ci0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwotICAgIE93blB0
cjxMZXZlbERCRGF0YWJhc2U+IG1fZGI7Ci0gICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBt
X2NvbXBhcmF0b3I7Ci0KLSAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFRyYW5zYWN0aW9uPiBjcmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW4oKTsKLSAgICAgICAgdmlydHVhbCBib29sIGNvbW1pdCgpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKTsKLQotICAgICAgICBzdGF0aWMgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qPih0cmFuc2FjdGlv
biktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKLSAgICAgICAgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7Ci0gICAgICAgIFJlZlB0cjxMZXZlbERC
VHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247Ci0gICAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCi0jZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggNDY0MGMxM2RkMmUzYzc3YjJkZTgwY2MwZGI3
YWRiZjU5MDNlMDNmNS4uMTJjMzczZmUwNjIxMDYzNDFmOGQzMjNmOTBjZjgyZDBhODM5Y2VhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4g
cHJwUHJpbWFyeUtleSwgYwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25Q
dHIpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywg
YnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0
eS4KLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJ
ZGVudGlmaWVyID0gYmFja2luZ1N0b3JlKCktPmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVy
KCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3Jk
SWRlbnRpZmllciA9IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7
CiAgICAgaWYgKCFiYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCAqcHJp
bWFyeUtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPAogCiAgICAgQVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CiAKLSAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlm
aWVyID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRl
bnRpZmllcigpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+
IHJlY29yZElkZW50aWZpZXIgPSBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNy
ZWF0ZSgpOwogICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwgKmtleSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSkpIHsKICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4i
KSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUAogICAgIGlmIChiYWNraW5nU3RvcmVDdXJzb3IpIHsKIAogICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5vYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXIgPSBi
YWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKTsKIAogICAgICAgICAgICAgZm9y
IChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmpl
Y3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMu
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2Jq
ZWN0U3RvcmUtPmlkKCksIGl0LT5rZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBlMTY1MmQ2OTVkZjg1MzQxYjM2MDg2ZDg2NzliMTM3
NDQwMmZmOGViLi5iYTg3NWExNzJmNzZiM2ZmNjU5NjJlNmE5OTk2ZGQzMzNmZWJiYmQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtNDksNyArNDksNyBAQCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgb2JqZQogICAgICwgbV9tb2RlKG1vZGUpCiAgICAgLCBtX3N0YXRlKFVudXNlZCkKICAg
ICAsIG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uKGRhdGFiYXNlLT5i
YWNraW5nU3RvcmUoKS0+Y3JlYXRlVHJhbnNhY3Rpb24oKSkKKyAgICAsIG1fdHJhbnNhY3Rpb24o
ZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpLmdldCgpKQogICAgICwgbV90YXNrVGltZXIodGhpcywg
JklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKQogICAgICwgbV90YXNr
RXZlbnRUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza0V2ZW50VGlt
ZXJGaXJlZCkKICAgICAsIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMoMCkKQEAgLTEyMyw3ICsx
MjMsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgbV90YXNrRXZlbnRUaW1lci5zdG9wKCk7CiAK
ICAgICBpZiAod2FzUnVubmluZykKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsK
KyAgICAgICAgbV90cmFuc2FjdGlvbi5yb2xsYmFjaygpOwogCiAgICAgLy8gUnVuIHRoZSBhYm9y
dCB0YXNrcywgaWYgYW55LgogICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkp
IHsKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNv
bW1pdCgpCiAgICAgYm9vbCB1bnVzZWQgPSBtX3N0YXRlID09IFVudXNlZDsKICAgICBtX3N0YXRl
ID0gRmluaXNoZWQ7CiAKLSAgICBib29sIGNvbW1pdHRlZCA9IHVudXNlZCB8fCBtX3RyYW5zYWN0
aW9uLT5jb21taXQoKTsKKyAgICBib29sIGNvbW1pdHRlZCA9IHVudXNlZCB8fCBtX3RyYW5zYWN0
aW9uLmNvbW1pdCgpOwogCiAgICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlh
IGN1cnNvcnMpIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKICAgICAv
LyBhcmUgZmlyZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5j
ZXMgYW5kIGFsbG93IHRoZSBiYWNraW5nIHN0b3JlCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPioKICAgICBBU1NFUlQoIWlzVGFza1F1ZXVlRW1wdHkoKSk7CiAKICAg
ICBpZiAobV9zdGF0ZSA9PSBTdGFydFBlbmRpbmcpIHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+
YmVnaW4oKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOwogICAgICAgICBtX3N0YXRl
ID0gUnVubmluZzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRleCA0ZTRkZGVj
YzExMjM2OTZjYTQ2NTc1M2RiNWYxMjkyYmMzY2UzNjgxLi5jOGZiYmY1M2NjZGIyYTFmMzQxZGRl
NzI4OWRmODI4YjYwODEwYjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC02OCw3ICs2
OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFBlbmRpbmdFdmVudHMoaW50KTsKICAgICB2b2lk
IGFkZFByZWVtcHRpdmVFdmVudCgpIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysrOyB9CiAg
ICAgdm9pZCBkaWRDb21wbGV0ZVByZWVtcHRpdmVFdmVudCgpIHsgbV9wZW5kaW5nUHJlZW1wdGl2
ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+PSAwKTsgfQotICAg
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkg
eyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQorICAgIElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkgeyByZXR1cm4gJm1fdHJhbnNhY3Rp
b247IH0KIAogcHJpdmF0ZToKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRh
dGFiYXNlQmFja2VuZEltcGwqKTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIFRh
c2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVldWU7CiAgICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNr
UXVldWU7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gbV90cmFu
c2FjdGlvbjsKKyAgICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247
CiAKICAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBp
bnN0ZWFkLgogICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdGFza1RpbWVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDQxZTlhZjM3MWQ0Zjc4MTE5ZDcxZTlhMTkyM2JmZjg2ODQ2MDNhZTYuLmE5MmFlOWU5
YWY5YjQxYTAzNDgwODBlOTAxOWZmNDkyOTMxNzRmZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM0MzYsNiArMzQzNiw3IEBA
CiAJCTk3MTJBNUFFMTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU1
MTUwMDRFREEwMDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCAqLzsgfTsKIAkJ
OTcxMkE1QjAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1NzE1MDA0RURBMDA0OEFGMTAgLyog
SURCQW55LmNwcCAqLzsgfTsKIAkJOTcxMkE1QjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NTgx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5oICovOyB9OworCQk5NzEyQTVFNTE1MDA0RURBMDA0
OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5n
U3RvcmUuY3BwICovOyB9OwogCQk5NzEyQTVCMzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2lu
Z1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU1QTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmggKi87IH07CiAJCTk3
MTJBNUI0MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTVCMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJDYWxsYmFja3MuaCAqLzsgfTsKIAkJOTcxMkE1QjUxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkN1cnNvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU1QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmNwcCAqLzsgfTsKQEAgLTM0
NzUsOCArMzQ3Niw2IEBACiAJCTk3MTJBNURGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4
NjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5oICovOyB9OwogCQk5NzEyQTVFMjE1MDA0
RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1ODkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJh
bmdlLmNwcCAqLzsgfTsKIAkJOTcxMkE1RTMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4
QTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCAqLzsgfTsKLQkJOTcxMkE1RTUxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4QzE1MDA0RURBMDA0OEFGMTAgLyogSURC
QmFja2luZ1N0b3JlLmNwcCAqLzsgfTsKLQkJOTcxMkE1RTYxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkxldmVsREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2lu
Z1N0b3JlLmggKi87IH07CiAJCTk3MTJBNUU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERC
Q29kaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLzsgfTsK
IAkJOTcxMkE1RTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThGMTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggKi87IH07CiAJCTk3MTJBNUU5MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU5MDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0
U3RvcmUuY3BwICovOyB9OwpAQCAtMTA3MDQsNyArMTA3MDMsNyBAQAogCQk5NzEyQTU4QTE1MDA0
RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCS2V5UmFuZ2UuaDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3MTJBNThCMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlSYW5nZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCS2V5UmFuZ2Uu
aWRsOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU4QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2lu
Z1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkJhY2tp
bmdTdG9yZS5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAg
LyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gSURCQmFja2luZ1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTcxMkE1OEUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCTGV2ZWxEQkNvZGluZy5jcHA7IHBhdGgg
PSBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OEYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2Rp
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCTGV2ZWxEQkNvZGluZy5o
OyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU5MDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0
U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCT2JqZWN0
U3RvcmUuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc4NDksNiArMTc4NDgsNyBAQAogCQkJCTk3
MTJBNTU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCAqLywKIAkJCQk5NzEyQTU1OTE1MDA0
RURBMDA0OEFGMTAgLyogSURCQW55LmlkbCAqLywKIAkJCQk5NzEyQTU1QTE1MDA0RURBMDA0OEFG
MTAgLyogSURCQmFja2luZ1N0b3JlLmggKi8sCisJCQkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgKi8sCiAJCQkJOTcxMkE1NUIxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkNhbGxiYWNrcy5oICovLAogCQkJCTk3MTJBNTVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJDdXJzb3IuY3BwICovLAogCQkJCTk3MTJBNTVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJz
b3IuaCAqLywKQEAgLTE3ODk1LDggKzE3ODk1LDYgQEAKIAkJCQk5NzEyQTU4OTE1MDA0RURBMDA0
OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwICovLAogCQkJCTk3MTJBNThBMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJLZXlSYW5nZS5oICovLAogCQkJCTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJLZXlSYW5nZS5pZGwgKi8sCi0JCQkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJh
Y2tpbmdTdG9yZS5jcHAgKi8sCi0JCQkJOTcxMkE1OEQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxl
dmVsREJCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk5NzEyQTU4RTE1MDA0RURBMDA0OEFGMTAgLyog
SURCTGV2ZWxEQkNvZGluZy5jcHAgKi8sCiAJCQkJOTcxMkE1OEYxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkxldmVsREJDb2RpbmcuaCAqLywKIAkJCQlCQ0M2NTE0NTE1OTI5NEMzMDBBQ0M5RTQgLyog
SURCTWV0YWRhdGEuaCAqLywKQEAgLTIzODIwLDcgKzIzODE4LDYgQEAKIAkJCQk5NzEyQTVEQzE1
MDA0RURBMDA0OEFGMTAgLyogSURCS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVERjE1
MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1
RTMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKLQkJCQk5
NzEyQTVFNjE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTcxMkE1RTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2Rp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJP
YmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RUQxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtMjcwMDYs
NiArMjcwMDMsNyBAQAogCQkJCTUxRTFFQ0MwMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3Jk
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29u
VVJMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUIwMTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJBbnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTg1QTY2MjExRDRGQUM1
MDA0QzNFNEIgLyogSURCQmluZGluZ1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
NzEyQTVCNTE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3MTJBNUI4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTI3MDIzLDcgKzI3MDIxLDYgQEAKIAkJCQk5NzEyQTVEQjE1MDA0
RURBMDA0OEFGMTAgLyogSURCS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNURFMTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJB
NUUyMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQk5NzEyQTVFNTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3MTJBNUU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5n
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUU5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJP
YmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVFQzE1MDA0RURBMDA0OEFG
MTAgLyogSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5k
ZXggNGUzN2QzZWFhOTA0ZjZiOTIyZjI4ZDIwYjg5ZWUwYjFkNTBjMWJmOS4uMDJkMmQ1ZDQyMGNm
MzMzOTE4NTA1NDY4ZDQ1OTVkYTMzZGE4OWE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKQEAgLTQzLDggKzQzLDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpIE9WRVJSSURFIHsgcmV0
dXJuIGZhbHNlOyB9OwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklE
RSB7IH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJ
bnZhbGlkUmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8UmVj
b3JkSWRlbnRpZmllcj4oKTsgfQotCiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0UmVjb3JkKFRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYpIE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBib29s
IHB1dFJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVu
dGlmaWVyKikgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKSBPVkVSUklERSB7IH0KQEAgLTY1LDggKzYzLDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNz
UmVmUHRyPEN1cnNvcj4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5J
bmRleEtleUN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24pIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKFRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJ
REUgeyByZXR1cm4gUGFzc1JlZlB0cjxDdXJzb3I+KCk7IH0KLQotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24oKSBPVkVSUklERSB7IHJldHVybiBQ
YXNzUmVmUHRyPFRyYW5zYWN0aW9uPigpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173357</attachid>
            <date>2012-11-09 13:52:26 -0800</date>
            <delta_ts>2012-11-09 14:19:02 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-101415-20121109135033.patch</filename>
            <type>text/plain</type>
            <size>90496</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzOTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTI0YjMyNWU4ZjYzY2I1
ZTgyNzJmYjQ5Mjg0Yjg3YjJiY2RiMDdjMy4uMTI3ZDQ0ZTViYzI4OTQyNTFiNjAwODk2NTEwNGEx
YmMyMzBjYmU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAxMi0xMS0wNyAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBD
b21iaW5lIElEQkJhY2tpbmdTdG9yZSBhbmQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29tYmluZSBhYnN0cmFj
dCBpbnRlcmZhY2UgSURCQmFja2luZ1N0b3JlIHdpdGggaXRzIG9ubHkKKyAgICAgICAgaW1wbGVt
ZW50YXRpb24sIElEQkxldmVsREJCYWNraW5nU3RvcmUsIHRvIHJlZHVjZSBjb2RlCisgICAgICAg
IGNvbXBsZXhpdHkuIFRoZSBsZWdhY3kgc3RydWN0dXJlIGV4aXN0ZWQgdG8gc3VwcG9ydCBhIFNR
TExpdGUKKyAgICAgICAgSURCQmFja2luZ1N0b3JlLCBidXQgaXQgaXMgbm8gbG9uZ2VyIHdvcnRo
IHRoZSBjb21wbGV4aXR5IHRvCisgICAgICAgIHN1cHBvcnQgdGhpcyBhYnN0cmFjdGlvbi4KKwor
ICAgICAgICBDaGFuZ2VzIGluY2x1ZGU6CisgICAgICAgIDEpIE1lcmdpbmcgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSBpbnRvIElEQkJhY2tpbmdTdG9yZS4KKworICAgICAgICAyKSBNZXJnZSB0b2dl
dGhlciBJREJCYWNraW5nU3RvcmUncyBpbm5lciBjbGFzc2VzOiBDdXJzb3IsCisgICAgICAgIFRy
YW5zYWN0aW9uLCBhbmQgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGZpZXIgd2l0aCB0aGVpciByZXNw
ZWN0aXZlCisgICAgICAgIHN1YmNsYXNzZXMgaW4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS4KKwor
ICAgICAgICAzKSBTaW1wbGlmeWluZyB0aGUgaW5uZXIgVHJhbnNhY3Rpb24gY2xhc3MgdG8gbm90
IGJlIHJlZmNvdW50ZWQgb3IKKyAgICAgICAgdmlydHVhbGl6ZWQsIHRvIGFsbG93IGl0IHRvIGJl
IGEgc2ltcGxlIGNvbmNyZXRlIG1lbWJlciBvZiBpdHMKKyAgICAgICAgb3duZXIsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMgcHVy
ZWx5IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVjb3JkSW50ZXJuYWxFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRVcE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjp+SURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRNYXhPYmplY3RT
dG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5P
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldEluZGV4
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4SW5kZXhJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
QmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OkN1cnNvcjo6Zmlyc3RTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yOjpoYXZlRW50ZXJlZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjppc1Bhc3RCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpjcmVhdGUpOgorICAgICAgICAoT2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1w
bDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpP
YmplY3RTdG9yZUtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVL
ZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RT
dG9yZUN1cnNvckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUN1cnNvckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6Ok9iamVjdFN0b3JlQ3Vyc29ySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKToKKyAg
ICAgICAgKEluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1
cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6
cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OnJlY29y
ZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjpJbmRl
eEtleUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChJbmRleEN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhD
dXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnBy
aW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpyZWNvcmRJZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6SW5kZXhDdXJzb3JJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OmluZGV4Q3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2spOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoUmVjb3JkSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZp
ZXI6On5SZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6UmVjb3JkSWRlbnRpZmllcjo6aXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpzZXRQcmltYXJ5S2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6dmVyc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6
OnNldFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJ
ZGVudGlmaWVyOjpSZWNvcmRJZGVudGlmaWVyKToKKyAgICAgICAgKFRyYW5zYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20pOgorICAgICAgICAoQ3Vyc29yT3B0aW9ucyk6CisgICAgICAgIChDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6a2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpwcmltYXJ5S2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjp+Q3Vyc29yKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bnRlcm5hbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxMi0xMS0wOCAgQWxwaGEg
TGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRGVmZXJyZWQg
aW1hZ2UgZGVjb2RpbmcgZmFpbHMgd2l0aCBpbWFnZSBvcmllbnRhdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBmMjE3NzM4YzQwOGJmNjgxZDMxNmQzMTc4MzdmNWJiMmIzNmI0NDBj
Li42OWQxNDgxZDVkNjQxYjA5MDNkYmI0MzczNTE0MWEzNmJiNTY0ZjM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTExLTA3ICBBbGVjIEZsZXR0ICA8
YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IENvbWJpbmUgSURC
QmFja2luZ1N0b3JlIGFuZCBJREJMZXZlbERCQmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0MTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgbWV0aG9kIHRoYXQgaXMgbm8g
bG9uZ2VyIGluIHRoZSBiYXNlIGNsYXNzLgorCisgICAgICAgICogdGVzdHMvSURCRmFrZUJhY2tp
bmdTdG9yZS5oOgorCiAyMDEyLTExLTA4ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRXhwb3NlIHNuYXBzaG90cyBpbiBwbGF0Zm9ybS9sZXZlbGRiIHdyYXBw
ZXIgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBmYTZiYjEyY2NiZGIzMTlm
NWFhMTQyMDY4ZTQ1ZWFiNTdmN2ZiZjE5Li5lZDAxMDViMzM0NDEwYTc3MDI4MzQ0YjkyMmUwOTRl
YjMwNDFhOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE4MzMsNiArMTgz
Myw3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCBcCiAJU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55LmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDYWxsYmFja3MuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwIFwKQEAgLTE4NzIsOCArMTg3Myw2IEBAIHdlYmNvcmVfbW9kdWxl
c19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaCBcCi0J
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBcCi0J
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwCmluZGV4IDY2M2UzNTJiYTEzNmI0NzkwYzAzZDM4NGU2YjExYWNiNjZjMjY5NWUuLjZlZTg3
YTljYTQxM2VmNWFkZDA2OTExMWM4N2JjMWFjOTE0ZmE0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjcsNyAr
MjcsNiBAQAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CiAjaW5jbHVkZSAiSGlzdG9ncmFtU3VwcG9ydC5oIgpAQCAtMzUsNyArMzQsNiBAQAogI2luY2x1
ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJLZXlS
YW5nZS5oIgotI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJ
REJMZXZlbERCQ29kaW5nLmgiCiAjaW5jbHVkZSAiSURCTWV0YWRhdGEuaCIKICNpbmNsdWRlICJJ
REJUcmFjaW5nLmgiCkBAIC0yMjMsNyArMjIxLDcgQEAgc3RhdGljIGludDY0X3QgZ2V0TWF4T2Jq
ZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25zdCBWZWN0b3I8Y2hhcj4mIG1heE8K
ICAgICByZXR1cm4gbWF4T2JqZWN0U3RvcmVJZDsKIH0KIAotSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+IGRi
KQorSURCQmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBpZGVudGlm
aWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIFBhc3NPd25QdHI8TGV2ZWxEQkRh
dGFiYXNlPiBkYikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9mYWN0
b3J5KGZhY3RvcnkpCiAgICAgLCBtX2RiKGRiKQpAQCAtMjMxLDkgKzIyOSwxNSBAQCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgSURCRmFjdAogICAgIG1fZmFjdG9yeS0+YWRkSURCQmFja2luZ1N0b3JlKGlkZW50
aWZpZXIsIHRoaXMpOwogfQogCi1JREJMZXZlbERCQmFja2luZ1N0b3JlOjp+SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZSgpCitJREJCYWNraW5nU3RvcmU6OklEQkJhY2tpbmdTdG9yZSgpCiB7Ci0gICAg
bV9mYWN0b3J5LT5yZW1vdmVJREJCYWNraW5nU3RvcmUobV9pZGVudGlmaWVyKTsKK30KKworSURC
QmFja2luZ1N0b3JlOjp+SURCQmFja2luZ1N0b3JlKCkKK3sKKyAgICAvLyBvbmx5IG51bGwgaW4g
dGVzdHMKKyAgICBpZiAobV9mYWN0b3J5KQorICAgICAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkJh
Y2tpbmdTdG9yZShtX2lkZW50aWZpZXIpOwogCiAgICAgLy8gbV9kYidzIGRlc3RydWN0b3IgdXNl
cyBtX2NvbXBhcmF0b3IuIFRoZSBvcmRlciBvZiBkZXN0cnVjdGlvbiBpcyBpbXBvcnRhbnQuCiAg
ICAgbV9kYi5jbGVhcigpOwpAQCAtMjUxLDkgKzI1NSw5IEBAIGVudW0gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZU9wZW5SZXN1bHQgewogICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuTWF4LAog
fTsKIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6
Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIHBhdGhC
YXNlQXJnLCBjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZElt
cGwqIGZhY3RvcnkpCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCQmFja2luZ1N0b3Jl
OjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRo
QmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsKiBmYWN0b3J5KQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
b3BlbiIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVuIik7CiAgICAgU3Ry
aW5nIHBhdGhCYXNlID0gcGF0aEJhc2VBcmc7CiAKICAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0
b3I+IGNvbXBhcmF0b3IgPSBhZG9wdFB0cihuZXcgQ29tcGFyYXRvcigpKTsKQEAgLTMwNSw3ICsz
MDksNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdAogCiAgICAgLy8gRklYTUU6IEhhbmRsZSBj
b21wYXJhdG9yIG5hbWUgY2hhbmdlcy4KIAotICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkxldmVsREJCYWNraW5nU3RvcmUoZmls
ZUlkZW50aWZpZXIsIGZhY3RvcnksIGRiLnJlbGVhc2UoKSkpKTsKKyAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoYWRvcHRSZWYobmV3IElEQkJhY2tpbmdTdG9yZShmaWxl
SWRlbnRpZmllciwgZmFjdG9yeSwgZGIucmVsZWFzZSgpKSkpOwogICAgIGJhY2tpbmdTdG9yZS0+
bV9jb21wYXJhdG9yID0gY29tcGFyYXRvci5yZWxlYXNlKCk7CiAKICAgICBpZiAoIXNldFVwTWV0
YWRhdGEoYmFja2luZ1N0b3JlLT5tX2RiLmdldCgpLCBmaWxlSWRlbnRpZmllcikpCkBAIC0zMTQs
NyArMzE4LDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXQKICAgICByZXR1cm4gYmFja2luZ1N0
b3JlLnJlbGVhc2UoKTsKIH0KIAotVmVjdG9yPFN0cmluZz4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0RGF0YWJhc2VOYW1lcygpCitWZWN0b3I8U3RyaW5nPiBJREJCYWNraW5nU3RvcmU6Omdl
dERhdGFiYXNlTmFtZXMoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IGZvdW5kTmFtZXM7CiAgICAg
Y29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0S2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGVNaW5L
ZXlGb3JPcmlnaW4obV9pZGVudGlmaWVyKTsKQEAgLTMzNiw3ICszNDAsNyBAQCBWZWN0b3I8U3Ry
aW5nPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKCkKICAgICByZXR1
cm4gZm91bmROYW1lczsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSog
bWV0YWRhdGEpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqIG1ldGFkYXRhKQogewogICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50
aWZpZXIsIG5hbWUpOwogCkBAIC0zODIsNyArMzg2LDcgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3
RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiKQogICAgIHJldHVybiBkYXRhYmFzZUlkOwog
fQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50
VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkKIHsKICAgICByb3dJZCA9IGdl
dE5ld0RhdGFiYXNlSWQobV9kYi5nZXQoKSk7CiAgICAgaWYgKHJvd0lkIDwgMCkKQEAgLTQwMiw3
ICs0MDYsNyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNl
TWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lv
bihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJ
ZCwgaW50NjRfdCBpbnRWZXJzaW9uKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRh
dGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKQogewogICAgIGlmIChpbnRWZXJz
aW9uID09IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikKICAgICAgICAgaW50VmVy
c2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6OkRlZmF1bHRJbnRWZXJzaW9uOwpAQCAtNDExLDcg
KzQxNSw3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJ
bnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCByb3dJZCwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUlEQkRh
dGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKIHsKICAgICBwdXRTdHJpbmco
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pLCBEYXRhYmFz
ZU1ldGFEYXRhS2V5OjplbmNvZGUocm93SWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJz
aW9uKSwgdmVyc2lvbik7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MjUsOSArNDI5LDkgQEAgc3Rh
dGljIHZvaWQgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgVmVjdG9yPGNoYXI+JiBiZWcKIH0KIAogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkKK2Jvb2wgSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgSURCX1RSQUNFKCJJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSIpOworICAgIElEQl9UUkFDRSgi
SURCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSIpOwogICAgIE93blB0cjxMZXZlbERCV3Jp
dGVPbmx5VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gTGV2ZWxEQldyaXRlT25seVRyYW5zYWN0
aW9uOjpjcmVhdGUobV9kYi5nZXQoKSk7CiAKICAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFk
YXRhOwpAQCAtNDYxLDkgKzQ2NSw5IEBAIHN0YXRpYyBib29sIGNoZWNrT2JqZWN0U3RvcmVBbmRN
ZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLVZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkKQorVmVjdG9y
PElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVz
KGludDY0X3QgZGF0YWJhc2VJZCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3JlcyIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3Jl
OjpnZXRPYmplY3RTdG9yZXMiKTsKICAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4g
b2JqZWN0U3RvcmVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IE9iamVjdFN0
b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCAxLCAwKTsKICAgICBjb25zdCBWZWN0
b3I8Y2hhcj4gc3RvcEtleSA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZU1heEtleShk
YXRhYmFzZUlkKTsKQEAgLTU2NSwxMCArNTY5LDEwIEBAIHN0YXRpYyBib29sIHNldE1heE9iamVj
dFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK2Jv
b2wgSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwg
Ym9vbCBhdXRvSW5jcmVtZW50KQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rp
b24pOwogICAgIGlmICghc2V0TWF4T2JqZWN0U3RvcmVJZChsZXZlbERCVHJhbnNhY3Rpb24sIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU5
NCwxMCArNTk4LDEwIEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0
U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9i
amVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICBJREJfVFJBQ0Uo
IklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0gICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRy
YW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZU9iamVjdFN0b3JlIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNh
Y3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIFN0cmluZyBvYmplY3RTdG9yZU5hbWU7CiAg
ICAgZ2V0U3RyaW5nKGxldmVsREJUcmFuc2FjdGlvbiwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
Ok5hbWUpLCBvYmplY3RTdG9yZU5hbWUpOwpAQCAtNjEyLDEwICs2MTYsMTAgQEAgdm9pZCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmEKICAgICBjbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLCBkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkKTsKIH0KIAotU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5
KQorU3RyaW5nIElEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpnZXRSZWNvcmQiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkIik7Cisg
ICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hhcj4g
ZGF0YTsKQEAgLTYzNCwyNyArNjM4LDYgQEAgU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKICAgICBy
ZXR1cm4gZGVjb2RlU3RyaW5nKHAsIGRhdGEuZW5kKCkpOwogfQogCi1uYW1lc3BhY2UgewotY2xh
c3MgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpSZWNv
cmRJZGVudGlmaWVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZXZlbERCUmVj
b3JkSWRlbnRpZmllcj4gY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSwgaW50
NjRfdCB2ZXJzaW9uKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTGV2ZWxEQlJlY29yZElkZW50aWZp
ZXIocHJpbWFyeUtleSwgdmVyc2lvbikpOyB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGV2ZWxE
QlJlY29yZElkZW50aWZpZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZXZlbERC
UmVjb3JkSWRlbnRpZmllcigpKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiBtX3ByaW1hcnlLZXkuaXNFbXB0eSgpOyB9Ci0gICAgVmVjdG9yPGNoYXI+IHBy
aW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KLSAgICB2b2lkIHNldFBy
aW1hcnlLZXkoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5KSB7IG1fcHJpbWFyeUtleSA9
IHByaW1hcnlLZXk7IH0KLSAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3Zl
cnNpb247IH0KLSAgICB2b2lkIHNldFZlcnNpb24oaW50NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lv
biA9IHZlcnNpb247IH0KLQotcHJpdmF0ZToKLSAgICBMZXZlbERCUmVjb3JkSWRlbnRpZmllcihj
b25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgOiBtX3ByaW1h
cnlLZXkocHJpbWFyeUtleSksIG1fdmVyc2lvbih2ZXJzaW9uKSB7IEFTU0VSVCghcHJpbWFyeUtl
eS5pc0VtcHR5KCkpOyB9Ci0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIoKSA6IG1fcHJpbWFy
eUtleSgpLCBtX3ZlcnNpb24oLTEpIHsgfQotCi0gICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUtl
eTsgLy8gRklYTUU6IE1ha2UgaXQgbW9yZSBjbGVhciB0aGF0IHRoaXMgaXMgdGhlICplbmNvZGVk
KiB2ZXJzaW9uIG9mIHRoZSBrZXkuCi0gICAgaW50NjRfdCBtX3ZlcnNpb247Ci19OwotfQotCiBz
dGF0aWMgaW50NjRfdCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsYXN0VmVyc2lvbktleSA9IE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjpMYXN0VmVyc2lvbik7CkBAIC02NzMsMTEgKzY1NiwxMSBAQCBzdGF0aWMgaW50NjRf
dCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YQogICAgIHJldHVybiB2ZXJzaW9uOwogfQogCi1ib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJ
ZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBS
ZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJZGVudGlmaWVyKQogewotICAgIElEQl9UUkFDRSgiSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkIik7CisgICAgSURCX1RSQUNFKCJJREJCYWNr
aW5nU3RvcmU6OnB1dFJlY29yZCIpOwogICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKLSAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZl
bERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24q
IGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGludDY0X3QgdmVyc2lvbiA9IGdl
dE5ld1ZlcnNpb25OdW1iZXIobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gb2JqZWN0U3RvcmVkYXRhS2V5ID0gT2Jq
ZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsK
IApAQCAtNjkwLDQ0ICs2NzMsMzcgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRS
ZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24KICAgICBjb25z
dCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5w
dXQoZXhpc3RzRW50cnlLZXksIGVuY29kZUludCh2ZXJzaW9uKSk7CiAKLSAgICBMZXZlbERCUmVj
b3JkSWRlbnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZl
bERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotICAgIGxldmVsREJSZWNv
cmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKLSAgICBsZXZl
bERCUmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKKyAgICByZWNvcmRJZGVu
dGlmaWVyLT5zZXRQcmltYXJ5S2V5KGVuY29kZUlEQktleShrZXkpKTsKKyAgICByZWNvcmRJZGVu
dGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkKQordm9pZCBJREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiog
bGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpjbGVhck9iamVj
dFN0b3JlIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBLZXlQcmVmaXgoZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCkuZW5jb2RlKCk7CiAgICAgY29uc3QgVmVjdG9yPGNo
YXI+IHN0b3BLZXkgPSBLZXlQcmVmaXgoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCArIDEsIDAp
LmVuY29kZSgpOwogCiAgICAgZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBzdGFydEtl
eSwgc3RvcEtleSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVu
dGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRp
ZmllcigpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikK
IHsKLSAgICByZXR1cm4gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgpOwotfQorICAg
IElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQiKTsKKyAgICBMZXZlbERC
VHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCi12b2lkIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCi17Ci0gICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQiKTsKLSAgICBMZXZl
bERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRl
bnRpZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZl
bERCUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIpOwotCi0gICAgY29uc3QgVmVj
dG9yPGNoYXI+IG9iamVjdFN0b3JlRGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2Rl
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmlt
YXJ5S2V5KCkpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZURhdGFLZXkgPSBP
YmplY3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByZWNv
cmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOwogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cmVt
b3ZlKG9iamVjdFN0b3JlRGF0YUtleSk7CiAKLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3Rz
RW50cnlLZXkgPSBFeGlzdHNFbnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
SWQsIGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBleGlzdHNFbnRyeUtleSA9IEV4aXN0c0VudHJ5S2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgcmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKICAg
ICBsZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShleGlzdHNFbnRyeUtleSk7CiB9CiAKIAotaW50
NjRfdCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2ludDY0X3QgSURCQmFja2luZ1N0b3JlOjpn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkK
IHsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0
aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IGtleUdlbmVyYXRvckN1cnJlbnROdW1iZXJLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAKQEAgLTc2Nyw5ICs3NDMsOSBA
QCBpbnQ2NF90IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnRO
dW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcgogICAgIHJldHVybiBrZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpt
YXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCiB7Ci0gICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBs
ZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKIAogICAgIGlmIChjaGVja0N1cnJlbnQpIHsK
ICAgICAgICAgaW50NjRfdCBjdXJyZW50TnVtYmVyID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlcih0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CkBAIC03ODIsMTAg
Kzc1OCwxMCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6Om1heWJlVXBkYXRlS2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcgogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgUmVjb3JkSWRlbnRp
ZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmtleUV4
aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmIGtleSwgUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVyKQogewotICAg
IElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9y
ZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNh
Y3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQl9UUkFD
RSgiSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlIik7CisgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGtleSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAKQEAg
LTc5Niw5ICs3NzIsOCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbgogICAgIGlmICghZGVjb2Rl
VmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRl
bnRpZmllciA9IHN0YXRpY19jYXN0PExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4oZm91bmRSZWNv
cmRJZGVudGlmaWVyKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0UHJpbWFyeUtl
eShlbmNvZGVJREJLZXkoa2V5KSk7Ci0gICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFZl
cnNpb24odmVyc2lvbik7CisgICAgZm91bmRSZWNvcmRJZGVudGlmaWVyLT5zZXRQcmltYXJ5S2V5
KGVuY29kZUlEQktleShrZXkpKTsKKyAgICBmb3VuZFJlY29yZElkZW50aWZpZXItPnNldFZlcnNp
b24odmVyc2lvbik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTgxOCw5ICs3OTMsOSBAQCBz
dGF0aWMgYm9vbCBjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoY29uc3QgTGV2ZWxEQkl0ZXJhdG9y
KiBpdCwgY29uc3QgVmVjdG9yPGNoYQogfQogCiAKLVZlY3RvcjxJREJJbmRleE1ldGFkYXRhPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKQorVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdT
dG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMi
KTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyIpOwogICAgIFZl
Y3RvcjxJREJJbmRleE1ldGFkYXRhPiBpbmRleGVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBz
dGFydEtleSA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCAwLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9IEluZGV4TWV0YURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkICsgMSwgMCwgMCk7CkBAIC04
ODksMTAgKzg2NCwxMCBAQCBzdGF0aWMgYm9vbCBzZXRNYXhJbmRleElkKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVu
dHJ5KQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KQogewot
ICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgiKTsKLSAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFu
c2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGlmICghc2V0TWF4SW5kZXhJZChsZXZlbERC
VHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTkwOCwxMCArODgzLDEwIEBAIGJvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3RpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2
ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJh
bnNhY3Rpb24pOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleCIp
OworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7
CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhNZXRhRGF0YVN0YXJ0ID0gSW5kZXhNZXRh
RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIDApOwog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBpbmRleE1ldGFEYXRhRW5kID0gSW5kZXhNZXRhRGF0YUtl
eTo6ZW5jb2RlTWF4S2V5KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOwpAQCAt
OTIyLDE5ICs4OTcsMTggQEAgdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRl
eChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGkKICAgICBkZWxldGVSYW5n
ZShsZXZlbERCVHJhbnNhY3Rpb24sIGluZGV4RGF0YVN0YXJ0LCBpbmRleERhdGFFbmQpOwogfQog
Ci1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBr
ZXksIGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElEQkJh
Y2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgUmVjb3JkSWRl
bnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJC
YWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCIpOworICAgIElEQl9UUkFDRSgiSURC
QmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQiKTsKICAgICBBU1NFUlQoa2V5Lmlz
VmFsaWQoKSk7CiAgICAgQVNTRVJUKGluZGV4SWQgPj0gTWluaW11bUluZGV4SWQpOwotICAgIGNv
bnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKiBsZXZlbERCUmVjb3JkSWRlbnRpZmllciA9IHN0
YXRpY19jYXN0PGNvbnN0IExldmVsREJSZWNvcmRJZGVudGlmaWVyKj4ocmVjb3JkSWRlbnRpZmll
cik7CiAKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gaW5kZXhEYXRhS2V5ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgZW5jb2RlSURCS2V5KGtleSksIGxldmVsREJSZWNv
cmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5KCkpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2
ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRy
YW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4
RGF0YUtleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGVuY29kZUlEQktleShrZXkpLCByZWNvcmRJZGVudGlmaWVyLT5wcmltYXJ5S2V5
KCkpOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoZW5jb2RlVmFy
SW50KGxldmVsREJSZWNvcmRJZGVudGlmaWVyLT52ZXJzaW9uKCkpKTsKLSAgICBkYXRhLmFwcGVu
ZChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKyAgICBkYXRhLmFwcGVu
ZChlbmNvZGVWYXJJbnQocmVjb3JkSWRlbnRpZmllci0+dmVyc2lvbigpKSk7CisgICAgZGF0YS5h
cHBlbmQocmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKIAogICAgIGxldmVsREJUcmFu
c2FjdGlvbi0+cHV0KGluZGV4RGF0YUtleSwgZGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05
NjgsNyArOTQyLDcgQEAgc3RhdGljIGJvb2wgZmluZEdyZWF0ZXN0S2V5TGVzc1RoYW5PckVxdWFs
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNv
cmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QsIGludDY0X3QsIGludDY0
X3QsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZUluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCwgaW50NjRfdCwgaW50NjRfdCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopCiB7CiAgICAgLy8g
RklYTUU6IFRoaXMgaXNuJ3QgbmVlZGVkIHNpbmNlIHdlIGludmFsaWRhdGUgaW5kZXggZGF0YSB2
aWEgdGhlIHZlcnNpb24gbnVtYmVyIG1lY2hhbmlzbS4KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk4
NSwxMiArOTU5LDEyIEBAIHN0YXRpYyBib29sIHZlcnNpb25FeGlzdHMoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpCiAgICAgcmV0dXJuIGRlY29k
ZUludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpID09IHZlcnNpb247CiB9CiAKLWJvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4m
IGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpCitib29sIElEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUlu
SW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYga2V5LCBWZWN0b3I8Y2hhcj4mIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkpCiB7Ci0g
ICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCIpOwor
ICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCIpOwogICAgIEFT
U0VSVChmb3VuZEVuY29kZWRQcmltYXJ5S2V5LmlzRW1wdHkoKSk7CiAKLSAgICBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNh
Y3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBsZXZlbGRiS2V5
ID0gSW5kZXhEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwga2V5KTsKICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IGxldmVsREJUcmFuc2Fj
dGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBpdC0+c2VlayhsZXZlbGRiS2V5KTsKQEAgLTEw
MjAsOSArOTk0LDkgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRl
eChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2EKICAgICB9CiB9CiAKLVBhc3NS
ZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5k
ZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYga2V5KQorUGFzc1JlZlB0cjxJREJLZXk+IElEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFy
eUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXkmIGtleSkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5n
U3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2lu
Z1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgiKTsKIAogICAgIFZlY3RvcjxjaGFyPiBmb3Vu
ZEVuY29kZWRQcmltYXJ5S2V5OwogICAgIGlmIChmaW5kS2V5SW5JbmRleCh0cmFuc2FjdGlvbiwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5KSkgewpAQCAtMTAzNCw5ICsxMDA4LDkgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmUK
ICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlz
dHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQor
Ym9vbCBJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0
cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERC
QmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7CisgICAgSURCX1RSQUNFKCJJREJCYWNr
aW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgiKTsKIAogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVu
Y29kZWRQcmltYXJ5S2V5OwogICAgIGlmICghZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRh
dGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGluZGV4S2V5LCBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5KSkKQEAgLTEwNDYsNjQgKzEwMjAsMjIgQEAgYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotbmFtZXNwYWNlIHsKLQotc3RydWN0IEN1cnNvck9w
dGlvbnMgewotICAgIFZlY3RvcjxjaGFyPiBsb3dLZXk7Ci0gICAgYm9vbCBsb3dPcGVuOwotICAg
IFZlY3RvcjxjaGFyPiBoaWdoS2V5OwotICAgIGJvb2wgaGlnaE9wZW47Ci0gICAgYm9vbCBmb3J3
YXJkOwotICAgIGJvb2wgdW5pcXVlOwotfTsKLQotY2xhc3MgQ3Vyc29ySW1wbENvbW1vbiA6IHB1
YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNvciB7Ci1wdWJsaWM6Ci0gICAgLy8gSURCQmFja2lu
Z1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0dWFsIGJvb2wgYWR2YW5jZSh1bnNpZ25lZCBsb25nKTsK
LSAgICB2aXJ0dWFsIGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqID0gMCwgSXRl
cmF0b3JTdGF0ZSA9IFNlZWspOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgp
IHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICB2aXJ0dWFsIFN0cmlu
ZyB2YWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpS
ZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKSA9IDA7Ci0gICAgYm9vbCBmaXJzdFNlZWso
KTsKLQotcHJvdGVjdGVkOgotICAgIEN1cnNvckltcGxDb21tb24oTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fY3Vyc29yT3B0aW9u
cyhjdXJzb3JPcHRpb25zKQotICAgIHsKLSAgICB9Ci0KLSAgICBDdXJzb3JJbXBsQ29tbW9uKGNv
bnN0IEN1cnNvckltcGxDb21tb24qIG90aGVyKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24ob3Ro
ZXItPm1fdHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9jdXJzb3JPcHRpb25zKG90aGVyLT5tX2N1
cnNvck9wdGlvbnMpCi0gICAgICAgICwgbV9jdXJyZW50S2V5KG90aGVyLT5tX2N1cnJlbnRLZXkp
Ci0gICAgewotICAgICAgICBpZiAob3RoZXItPm1faXRlcmF0b3IpIHsKLSAgICAgICAgICAgIG1f
aXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworSURCQmFja2luZ1N0
b3JlOjpDdXJzb3I6OkN1cnNvcihjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvciogb3RoZXIp
CisgICAgOiBtX3RyYW5zYWN0aW9uKG90aGVyLT5tX3RyYW5zYWN0aW9uKQorICAgICwgbV9jdXJz
b3JPcHRpb25zKG90aGVyLT5tX2N1cnNvck9wdGlvbnMpCisgICAgLCBtX2N1cnJlbnRLZXkob3Ro
ZXItPm1fY3VycmVudEtleSkKK3sKKyAgICBpZiAob3RoZXItPm1faXRlcmF0b3IpIHsKKyAgICAg
ICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAKLSAgICAg
ICAgICAgIGlmIChvdGhlci0+bV9pdGVyYXRvci0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgbV9pdGVyYXRvci0+c2VlayhvdGhlci0+bV9pdGVyYXRvci0+a2V5KCkpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgfQorICAg
ICAgICBpZiAob3RoZXItPm1faXRlcmF0b3ItPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgbV9p
dGVyYXRvci0+c2VlayhvdGhlci0+bV9pdGVyYXRvci0+a2V5KCkpOworICAgICAgICAgICAgQVNT
RVJUKG1faXRlcmF0b3ItPmlzVmFsaWQoKSk7CiAgICAgICAgIH0KICAgICB9Cit9CiAKLSAgICB2
aXJ0dWFsIH5DdXJzb3JJbXBsQ29tbW9uKCkgeyB9Ci0KLSAgICBib29sIGlzUGFzdEJvdW5kcygp
IGNvbnN0OwotICAgIGJvb2wgaGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0OwotCi0gICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9uOwotICAgIEN1cnNvck9wdGlvbnMgbV9jdXJzb3JP
cHRpb25zOwotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IG1faXRlcmF0b3I7Ci0gICAgUmVm
UHRyPElEQktleT4gbV9jdXJyZW50S2V5OwotfTsKLQotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpm
aXJzdFNlZWsoKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Zmlyc3RTZWVrKCkKIHsK
ICAgICBtX2l0ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKICAgICBp
ZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpCkBAIC0xMTE0LDcgKzEwNDYsNyBAQCBib29sIEN1
cnNvckltcGxDb21tb246OmZpcnN0U2VlaygpCiAgICAgcmV0dXJuIGNvbnRpbnVlRnVuY3Rpb24o
MCwgUmVhZHkpOwogfQogCi1ib29sIEN1cnNvckltcGxDb21tb246OmFkdmFuY2UodW5zaWduZWQg
bG9uZyBjb3VudCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmFkdmFuY2UodW5zaWdu
ZWQgbG9uZyBjb3VudCkKIHsKICAgICB3aGlsZSAoY291bnQtLSkgewogICAgICAgICBpZiAoIWNv
bnRpbnVlRnVuY3Rpb24oKSkKQEAgLTExMjMsNyArMTA1NSw3IEBAIGJvb2wgQ3Vyc29ySW1wbENv
bW1vbjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50KQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIEN1cnNvckltcGxDb21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBr
ZXksIEl0ZXJhdG9yU3RhdGUgbmV4dFN0YXRlKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNv
cjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqIGtleSwgSXRlcmF0b3JTdGF0ZSBuZXh0
U3RhdGUpCiB7CiAgICAgUmVmUHRyPElEQktleT4gcHJldmlvdXNLZXkgPSBtX2N1cnJlbnRLZXk7
CiAKQEAgLTEyMTUsNyArMTE0Nyw3IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6Y29udGludWVG
dW5jdGlvbihjb25zdCBJREJLZXkqIGtleSwgSXRlcmF0b3JTdGF0ZSBuZXh0U3RhCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6aGF2ZUVudGVyZWRSYW5nZSgp
IGNvbnN0Citib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpoYXZlRW50ZXJlZFJhbmdlKCkg
Y29uc3QKIHsKICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmZvcndhcmQpIHsKICAgICAgICAgaWYg
KG1fY3Vyc29yT3B0aW9ucy5sb3dPcGVuKQpAQCAtMTIyOSw3ICsxMTYxLDcgQEAgYm9vbCBDdXJz
b3JJbXBsQ29tbW9uOjpoYXZlRW50ZXJlZFJhbmdlKCkgY29uc3QKICAgICByZXR1cm4gY29tcGFy
ZUluZGV4S2V5cyhtX2l0ZXJhdG9yLT5rZXkoKSwgbV9jdXJzb3JPcHRpb25zLmhpZ2hLZXkpIDw9
IDA7CiB9CiAKLWJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6aXNQYXN0Qm91bmRzKCkgY29uc3QKK2Jv
b2wgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmlzUGFzdEJvdW5kcygpIGNvbnN0CiB7CiAgICAg
aWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKSB7CiAgICAgICAgIGlmIChtX2N1cnNvck9wdGlv
bnMuaGlnaE9wZW4pCkBAIC0xMjQyLDkgKzExNzQsOSBAQCBib29sIEN1cnNvckltcGxDb21tb246
OmlzUGFzdEJvdW5kcygpIGNvbnN0CiAgICAgcmV0dXJuIGNvbXBhcmVJbmRleEtleXMobV9pdGVy
YXRvci0+a2V5KCksIG1fY3Vyc29yT3B0aW9ucy5sb3dLZXkpIDwgMDsKIH0KIAotY2xhc3MgT2Jq
ZWN0U3RvcmVLZXlDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21tb24geworY2xhc3Mg
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvcklt
cGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JP
cHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3Jl
S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25z
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUtleUN1cnNv
ckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKICAgICB9CkBAIC0xMjU0LDI2ICsx
MTg2LDI2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9y
ZUtleUN1cnNvckltcGwodGhpcykpOwogICAgIH0KIAotICAgIC8vIEN1cnNvckltcGxDb21tb24K
LSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJl
Y29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFCisg
ICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgp
IGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29y
ZElkZW50aWZpZXIoKSBPVkVSUklERQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faWRlbnRpZmll
cjsKICAgICB9CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6
Ci0gICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogQ3Vy
c29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKKyAgICBPYmplY3RTdG9y
ZUtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURC
QmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAg
ICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3IodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMp
CiAgICAgewogICAgIH0KIAogICAgIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbChjb25zdCBPYmpl
Y3RTdG9yZUtleUN1cnNvckltcGwqIG90aGVyKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24o
b3RoZXIpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3Iob3RoZXIpCiAgICAgewog
ICAgIH0KIAotICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gbV9pZGVudGlmaWVy
OworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG1faWRlbnRp
ZmllcjsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dygpCkBAIC0xMjk4LDE0ICsxMjMwLDE0IEBAIGJvb2wgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBs
Ojpsb2FkQ3VycmVudFJvdygpCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2Rl
cyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0gICAgbV9pZGVudGlm
aWVyID0gTGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3Vy
cmVudEtleSksIHZlcnNpb24pOworICAgIG1faWRlbnRpZmllciA9IElEQkJhY2tpbmdTdG9yZTo6
UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVy
c2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsIDogcHVibGljIEN1cnNvckltcGxDb21tb24geworY2xhc3MgT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFN0b3JlQ3Vyc29ySW1wbD4gY3JlYXRlKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
OjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlv
bnMpKTsKICAgICB9CkBAIC0xMzE1LDI4ICsxMjQ3LDI4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBPYmplY3RTdG9yZUN1cnNvckltcGwodGhpcykpOwogICAgIH0KIAot
ICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0
dXJuIG1fY3VycmVudFZhbHVlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgT1ZF
UlJJREUKKyAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgorICAgIHZpcnR1YWwgU3RyaW5n
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlm
aWVyKCkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVybiBtX2lkZW50aWZpZXI7CiAgICAg
fQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOwogCiBwcml2YXRlOgotICAgIE9i
amVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25z
dCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQotICAgICAgICA6IEN1cnNvckltcGxDb21t
b24odHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCisgICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBs
KExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICB9
CiAKICAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoY29uc3QgT2JqZWN0U3RvcmVDdXJzb3JJbXBs
KiBvdGhlcikKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICA6IElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yKG90aGVyKQogICAgICAgICAsIG1fY3VycmVudFZhbHVlKG90
aGVyLT5tX2N1cnJlbnRWYWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgU3RyaW5nIG1fY3VycmVu
dFZhbHVlOwotICAgIFJlZlB0cjxMZXZlbERCUmVjb3JkSWRlbnRpZmllcj4gbV9pZGVudGlmaWVy
OworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG1faWRlbnRp
ZmllcjsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygp
CkBAIC0xMzYxLDE2ICsxMjkzLDE2IEBAIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2Fk
Q3VycmVudFJvdygpCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFRoaXMgcmUtZW5jb2RlcyB3aGF0
IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCi0gICAgbV9pZGVudGlmaWVyID0g
TGV2ZWxEQlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1fY3VycmVudEtl
eSksIHZlcnNpb24pOworICAgIG1faWRlbnRpZmllciA9IElEQkJhY2tpbmdTdG9yZTo6UmVjb3Jk
SWRlbnRpZmllcjo6Y3JlYXRlKGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVyc2lvbik7
CiAKICAgICBtX2N1cnJlbnRWYWx1ZSA9IGRlY29kZVN0cmluZyh2YWx1ZVBvc2l0aW9uLCBtX2l0
ZXJhdG9yLT52YWx1ZSgpLmVuZCgpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1jbGFzcyBJ
bmRleEtleUN1cnNvckltcGwgOiBwdWJsaWMgQ3Vyc29ySW1wbENvbW1vbiB7CitjbGFzcyBJbmRl
eEtleUN1cnNvckltcGwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVs
REJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9w
dGlvbnMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjcmVhdGUo
TGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpD
dXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0cmFuc2FjdGlvbiwgY3Vyc29yT3B0
aW9ucykpOwogICAgIH0KQEAgLTEzODAsMjAgKzEzMTIsMjAgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluZGV4S2V5Q3Vyc29ySW1wbCh0aGlzKSk7CiAgICAgfQogCi0g
ICAgLy8gQ3Vyc29ySW1wbENvbW1vbgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVj
dFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAw
OyB9CisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKKyAgICB2aXJ0dWFsIFN0cmluZyB2
YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVy
biBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAog
cHJpdmF0ZToKLSAgICBJbmRleEtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAgICAgICAgOiBD
dXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAgIEluZGV4S2V5
Q3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICAgICAg
OiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKICAg
ICB7CiAgICAgfQogCiAgICAgSW5kZXhLZXlDdXJzb3JJbXBsKGNvbnN0IEluZGV4S2V5Q3Vyc29y
SW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbihvdGhlcikKKyAgICAgICAg
OiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcihvdGhlcikKICAgICAgICAgLCBtX3ByaW1hcnlLZXko
b3RoZXItPm1fcHJpbWFyeUtleSkKICAgICB7CiAgICAgfQpAQCAtMTQ0Nyw5ICsxMzc5LDkgQEAg
Ym9vbCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotY2xhc3MgSW5kZXhDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvckltcGxDb21tb24g
eworY2xhc3MgSW5kZXhDdXJzb3JJbXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEN1cnNvckltcGw+IGNyZWF0
ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBj
dXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Jl
YXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwodHJhbnNhY3Rpb24sIGN1cnNvck9w
dGlvbnMpKTsKICAgICB9CkBAIC0xNDU5LDIwICsxMzkxLDIwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEN1cnNvckltcGwodGhpcykpOwogICAgIH0KIAotICAg
IC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJu
IG1fdmFsdWU7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkg
eyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICAvLyBJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcgorICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25z
dCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyKCkgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICBib29sIGxvYWRDdXJyZW50Um93KCk7CiAK
IHByaXZhdGU6Ci0gICAgSW5kZXhDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogQ3Vy
c29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucykKKyAgICBJbmRleEN1cnNv
ckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0
b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgIDogSURC
QmFja2luZ1N0b3JlOjpDdXJzb3IodHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpCiAgICAgewog
ICAgIH0KIAogICAgIEluZGV4Q3Vyc29ySW1wbChjb25zdCBJbmRleEN1cnNvckltcGwqIG90aGVy
KQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24ob3RoZXIpCisgICAgICAgIDogSURCQmFja2lu
Z1N0b3JlOjpDdXJzb3Iob3RoZXIpCiAgICAgICAgICwgbV9wcmltYXJ5S2V5KG90aGVyLT5tX3By
aW1hcnlLZXkpCiAgICAgICAgICwgbV92YWx1ZShvdGhlci0+bV92YWx1ZSkKICAgICAgICAgLCBt
X3ByaW1hcnlMZXZlbERCS2V5KG90aGVyLT5tX3ByaW1hcnlMZXZlbERCS2V5KQpAQCAtMTUzMyw3
ICsxNDY1LDcgQEAgYm9vbCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMoTGV2ZWxEQlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorYm9vbCBvYmplY3RTdG9y
ZUN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBJREJCYWNraW5nU3RvcmU6OkN1cnNv
cjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKIHsKICAgICBib29sIGxvd2VyQm91bmQg
PSByYW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKICAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAm
JiByYW5nZS0+dXBwZXIoKTsKQEAgLTE1ODAsNyArMTUxMiw3IEBAIGJvb2wgb2JqZWN0U3RvcmVD
dXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgaW5kZXhDdXJzb3JPcHRpb25zKExl
dmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBDdXJzb3JPcHRpb25zJiBjdXJzb3JP
cHRpb25zKQorYm9vbCBpbmRleEN1cnNvck9wdGlvbnMoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJz
b3JPcHRpb25zKQogewogICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CiAgICAgYm9vbCBsb3dlckJv
dW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CkBAIC0xNjIzLDEzICsxNTU1LDExIEBAIGJv
b2wgaW5kZXhDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLX0KLQotUGFzc1Jl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bk9iamVjdFN0b3JlQ3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RT
dG9yZUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIElEQl9UUkFD
RSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yIik7Ci0gICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2
ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29yT3B0aW9ucyBjdXJz
b3JPcHRpb25zOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3Rv
cmVDdXJzb3IiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJh
bnNhY3Rpb24pOworICAgIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zIGN1
cnNvck9wdGlvbnM7CiAgICAgaWYgKCFvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMobGV2ZWxEQlRy
YW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCByYW5nZSwgZGlyZWN0aW9uLCBj
dXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPE9iamVjdFN0b3Jl
Q3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxE
QlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKQEAgLTE2MzksMTEgKzE1NjksMTEgQEAgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
b3Blbk9iamVjdFN0b3JlQ3Vyc28KICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAot
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24p
CitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmU6Om9w
ZW5PYmplY3RTdG9yZUtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewot
ICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5
Q3Vyc29yIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBU
cmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAgQ3Vy
c29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3Jl
OjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxl
dmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJU
cmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
OjpDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CiAgICAgaWYgKCFvYmplY3RTdG9yZUN1cnNv
ck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBy
YW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
UmVmUHRyPE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbD4gY3Vyc29yID0gT2JqZWN0U3RvcmVLZXlD
dXJzb3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKQEAg
LTE2NTMsMTEgKzE1ODMsMTEgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3UKICAgICByZXR1cm4g
Y3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFu
Z2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IElEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5n
ZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBJREJfVFJB
Q0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvciIpOwotICAgIExl
dmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVs
REJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29y
T3B0aW9uczsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vy
c29yIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKKyAgICBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyBjdXJzb3JP
cHRpb25zOwogICAgIGlmICghaW5kZXhDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwg
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vy
c29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxJbmRleEtleUN1cnNv
ckltcGw+IGN1cnNvciA9IEluZGV4S2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2Fj
dGlvbiwgY3Vyc29yT3B0aW9ucyk7CkBAIC0xNjY3LDExICsxNTk3LDExIEBAIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEtleUN1cnNvcihJCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5J
bmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24p
CitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmU6Om9w
ZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhD
dXJzb3IiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRy
YW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAgICBDdXJz
b3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6
Om9wZW5JbmRleEN1cnNvciIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9w
dGlvbnMgY3Vyc29yT3B0aW9uczsKICAgICBpZiAoIWluZGV4Q3Vyc29yT3B0aW9ucyhsZXZlbERC
VHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIHJhbmdlLCBk
aXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8
SW5kZXhDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEN1cnNvckltcGw6OmNyZWF0ZShsZXZlbERC
VHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpOwpAQCAtMTY4MSw2MCArMTYxMSwzNSBAQCBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuSW5kZXhDdXJzb3IoSURCQgogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNyZWF0ZVRyYW5zYWN0aW9uKCkKLXsKLSAgICByZXR1cm4gVHJhbnNhY3Rpb246OmNy
ZWF0ZSh0aGlzKTsKLX0KLQotUGFzc1JlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0ZShJREJM
ZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUcmFuc2FjdGlvbihiYWNraW5nU3RvcmUpKTsKLX0KLQotSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKElEQkxldmVsREJCYWNraW5nU3RvcmUqIGJh
Y2tpbmdTdG9yZSkKK0lEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKElE
QkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2lu
Z1N0b3JlKQogewogfQogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
OjpiZWdpbigpCit2b2lkIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luKCkKIHsK
LSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpiZWdp
biIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4i
KTsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb24pOwogICAgIG1fdHJhbnNhY3Rpb24gPSBMZXZl
bERCVHJhbnNhY3Rpb246OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSk7CiB9CiAK
LWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCitib29s
IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCgpCiB7Ci0gICAgSURCX1RSQUNF
KCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y29tbWl0Iik7CisgICAgSURC
X1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21taXQiKTsKICAgICBBU1NF
UlQobV90cmFuc2FjdGlvbik7CiAgICAgYm9vbCByZXN1bHQgPSBtX3RyYW5zYWN0aW9uLT5jb21t
aXQoKTsKICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQor
dm9pZCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjaygpCiB7Ci0gICAgSURC
X1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2siKTsK
KyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OnJvbGxiYWNrIik7
CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwogICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNr
KCk7CiAgICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwogfQogCi1ib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcpCi17Ci0gICAgU3Ry
aW5nIHBhdGhCYXNlID0gcGF0aEJhc2VBcmc7Ci0KLSAgICBpZiAocGF0aEJhc2UuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGV2ZW50
dWFsbHkgdXNlIHRoZSBzYW1lIExldmVsREIgZGF0YWJhc2UgZm9yIGFsbCBvcmlnaW5zLgotICAg
IFN0cmluZyBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBzZWN1cml0
eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYi5sZXZlbGRiIik7Ci0K
LSAgICAvLyBGSVhNRTogdGhpcyBpcyBjaGVja2luZyBmb3IgcHJlc2VuY2Ugb2YgdGhlIGRvbWFp
biwgbm90IHRoZSBkYXRhYmFzZSBpdHNlbGYKLSAgICByZXR1cm4gZmlsZUV4aXN0cyhwYXRoKyIv
Q1VSUkVOVCIpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBVU0Uo
TEVWRUxEQikKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggM2M5
NDUxY2MwNzRjMjBlNmYyMTdjNDk0ODdhM2Q4MzUyZjI3MDJhZC4uMjUyZGVlMWY1YTI4OTFmNzQ2
NzZlMTViYjczZTMwMTkzNWE4NWE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTI5LDYwICsyOSw3MyBAQAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVk
ZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCi0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJMZXZlbERCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIExldmVsREJDb21w
YXJhdG9yOworY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOworY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9u
OworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwogY2xhc3MgSURCS2V5OwogY2xhc3MgSURC
S2V5UmFuZ2U7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLXN0cnVjdCBJREJEYXRhYmFzZU1ldGFk
YXRhOwogCiBjbGFzcyBJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJCYWNr
aW5nU3RvcmU+IHsKIHB1YmxpYzoKICAgICBjbGFzcyBUcmFuc2FjdGlvbjsKIAotICAgIHZpcnR1
YWwgfklEQkJhY2tpbmdTdG9yZSgpIHt9OworICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1cml0eU9y
aWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZp
ZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwogCi0gICAgdmlydHVhbCBWZWN0b3I8U3RyaW5n
PiBnZXREYXRhYmFzZU5hbWVzKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSogZm91bmRN
ZXRhZGF0YSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWZXJzaW9uLCBpbnQ2NF90
IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0
ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGludDY0
X3QgaW50VmVyc2lvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1l
dGFEYXRhKFRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSkgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VOYW1lcygpOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCRGF0YWJhc2VNZXRhZGF0YSopOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBp
bnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOworICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdmlydHVhbCBWZWN0b3I8SURC
T2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPElEQk9i
amVjdFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpOwor
ICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAKICAg
ICBjbGFzcyBSZWNvcmRJZGVudGlmaWVyIDogcHVibGljIFJlZkNvdW50ZWQ8UmVjb3JkSWRlbnRp
Zmllcj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25z
dCA9IDA7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IGNyZWF0
ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFJlY29yZElkZW50aWZpZXIocHJpbWFyeUtleSwgdmVyc2lvbikpOyB9
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNvcmRJZGVudGlmaWVyKCkpOyB9CiAgICAgICAgIHZpcnR1
YWwgflJlY29yZElkZW50aWZpZXIoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleS5pc0VtcHR5KCk7IH0KKyAgICAgICAgVmVj
dG9yPGNoYXI+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KKyAg
ICAgICAgdm9pZCBzZXRQcmltYXJ5S2V5KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFyeUtleSkg
eyBtX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OyB9CisgICAgICAgIGludDY0X3QgdmVyc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorICAgICAgICB2b2lkIHNldFZlcnNpb24oaW50
NjRfdCB2ZXJzaW9uKSB7IG1fdmVyc2lvbiA9IHZlcnNpb247IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBp
bnQ2NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1hcnlLZXkpLCBtX3ZlcnNpb24odmVy
c2lvbikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgpKTsgfQorICAgICAgICBSZWNvcmRJ
ZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJzaW9uKC0xKSB7IH0KKworICAgICAg
ICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5S2V5OyAvLyBGSVhNRTogTWFrZSBpdCBtb3JlIGNsZWFy
IHRoYXQgdGhpcyBpcyB0aGUgKmVuY29kZWQqIHZlcnNpb24gb2YgdGhlIGtleS4KKyAgICAgICAg
aW50NjRfdCBtX3ZlcnNpb247CiAgICAgfTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVjb3Jk
SWRlbnRpZmllcj4gY3JlYXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIFN0cmluZyBnZXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBwdXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3Jk
SWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKikg
PSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgbmV3TnVtYmVyLCBib29sIGNoZWNrQ3VycmVudCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZp
ZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikgPSAwOwotCi0gICAgdmlydHVhbCBWZWN0b3I8SURC
SW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNVbmlx
dWUsIGJvb2wgaXNNdWx0aUVudHJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4
KFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JS
ZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBSZWNvcmRJZGVudGlm
aWVyKikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKikgPSAwOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChUcmFuc2FjdGlvbiosIGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBm
b3VuZFByaW1hcnlLZXkpID0gMDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGdldFJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNv
cmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29s
IG1heWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgbmV3U3RhdGUsIGJvb2wgY2hlY2tDdXJyZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5
RXhpc3RzSW5PYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29y
ZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7CisKKyAgICB2aXJ0dWFsIFZlY3Rv
cjxJREJJbmRleE1ldGFkYXRhPiBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYsIGJvb2wgaXNVbmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworICAgIHZp
cnR1YWwgYm9vbCBwdXRJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3Rz
SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBp
bmRleEtleSwgUmVmUHRyPElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7CiAKICAgICBjbGFzcyBD
dXJzb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXJzb3I+IHsKICAgICBwdWJsaWM6CkBAIC05MSwz
MyArMTA0LDg0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFNlZWsKICAgICAgICAgfTsKIAorICAg
ICAgICBzdHJ1Y3QgQ3Vyc29yT3B0aW9ucyB7CisgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gbG93
S2V5OworICAgICAgICAgICAgYm9vbCBsb3dPcGVuOworICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IGhpZ2hLZXk7CisgICAgICAgICAgICBib29sIGhpZ2hPcGVuOworICAgICAgICAgICAgYm9vbCBm
b3J3YXJkOworICAgICAgICAgICAgYm9vbCB1bmlxdWU7CisgICAgICAgIH07CisKKyAgICAgICAg
Q3Vyc29yKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlv
bnMmIGN1cnNvck9wdGlvbnMpCisgICAgICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24pCisgICAgICAgICAgICAsIG1fY3Vyc29yT3B0aW9ucyhjdXJzb3JPcHRpb25zKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgQ3Vyc29yKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yKiBvdGhlcik7CisKKyAgICAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudEtleTsgfQorICAgICAgICBib29sIGNvbnRpbnVlRnVuY3Rpb24oY29u
c3QgSURCS2V5KiA9IDAsIEl0ZXJhdG9yU3RhdGUgPSBTZWVrKTsKKyAgICAgICAgYm9vbCBhZHZh
bmNlKHVuc2lnbmVkIGxvbmcpOworICAgICAgICBib29sIGZpcnN0U2VlaygpOworCiAgICAgICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IGNsb25lKCkgPSAwOwotICAgICAgICB2aXJ0dWFs
IGJvb2wgYWR2YW5jZSh1bnNpZ25lZCBsb25nKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBj
b250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSogPSAwLCBJdGVyYXRvclN0YXRlID0gU2Vlaykg
PSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSA9IDA7Ci0gICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgPSAwOwotICAg
ICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH07CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyKCkgPSAwOworICAgICAg
ICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50
Um93KCkgPSAwOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBib29sIGlzUGFzdEJvdW5kcygp
IGNvbnN0OworICAgICAgICBib29sIGhhdmVFbnRlcmVkUmFuZ2UoKSBjb25zdDsKKworICAgICAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247CisgICAgICAgIGNvbnN0IEN1cnNv
ck9wdGlvbnMgbV9jdXJzb3JPcHRpb25zOworICAgICAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBtX2l0ZXJhdG9yOworICAgICAgICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7CiAgICAg
fTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNv
cihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKFRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKTsKIAotICAgIGNsYXNzIFRyYW5zYWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VHJh
bnNhY3Rpb24+IHsKKyAgICBjbGFzcyBUcmFuc2FjdGlvbiB7CiAgICAgcHVibGljOgotICAgICAg
ICB2aXJ0dWFsIH5UcmFuc2FjdGlvbigpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4o
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjb21taXQoKSA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCByb2xsYmFjaygpID0gMDsKKyAgICAgICAgVHJhbnNhY3Rpb24oSURCQmFja2luZ1N0
b3JlKik7CisgICAgICAgIHZvaWQgYmVnaW4oKTsKKyAgICAgICAgYm9vbCBjb21taXQoKTsKKyAg
ICAgICAgdm9pZCByb2xsYmFjaygpOworCisgICAgICAgIHN0YXRpYyBMZXZlbERCVHJhbnNhY3Rp
b24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHJhbnNhY3Rpb24qPih0cmFu
c2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0KCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIElEQkJhY2tpbmdTdG9yZSogbV9iYWNraW5nU3RvcmU7CisgICAgICAgIFJlZlB0
cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiAgICAgfTsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCkgPSAwOworCitwcm90
ZWN0ZWQ6CisgICAgSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiwgUGFzc093blB0cjxMZXZlbERCRGF0YWJhc2U+KTsKKworICAg
IC8vIFNob3VsZCBvbmx5IHVzZWQgZm9yIG1vY2tpbmcuCisgICAgSURCQmFja2luZ1N0b3JlKCk7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQ
cmltYXJ5S2V5KTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQkZh
Y3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OworICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+
IG1fZGI7CisgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7CisKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAKICNlbmRpZiAvLyBJREJCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5k
SW1wbC5jcHAKaW5kZXggNTVjOGRhYjRhNzgxNjY2OWZjMTg3YjMyMTgyNmM3M2JjNzNiOTY3NS4u
ZWFhNzMzYTUyOGVmNDU0YWMzODBlYzJmMGM2MWQ0NTEzY2JmNzA5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTEzNCwxMiArMTMzLDcgQEAgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkJhY2tp
bmdTdG9yZShQYXNzUmVmUHRyPFMKICAgICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVu
ZCgpKQogICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDItPnZhbHVlOwogICAgIGVsc2UgewotI2lm
IFVTRShMRVZFTERCKQotICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyZWN0b3J5LCBmaWxlSWRlbnRp
ZmllciwgdGhpcyk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oZGF0YURpcmVjdG9yeSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCisgICAgICAgIGJhY2tpbmdT
dG9yZSA9IElEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURp
cmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwogICAgIH0KIAogICAgIGlmIChiYWNraW5n
U3RvcmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFj
YjI3MjUxNGExZjI4MTIwMzUwODM1M2EzOTQyMTA3MjNjNGIzODQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkxldmVsREJCYWNraW5nU3RvcmVfaAotI2RlZmluZSBJ
REJMZXZlbERCQmFja2luZ1N0b3JlX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
I2lmIFVTRShMRVZFTERCKQotCi0jaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExldmVsREJD
b21wYXJhdG9yOwotY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwotY2xhc3MgTGV2ZWxEQlRyYW5zYWN0
aW9uOwotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsOwotCi1jbGFzcyBJREJMZXZlbERCQmFj
a2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9y
eUJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpOwot
Ci0gICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXREYXRhYmFzZU5hbWVzKCk7Ci0gICAgdmly
dHVhbCBib29sIGdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJE
YXRhYmFzZU1ldGFkYXRhKik7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qg
aW50VmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJE
YXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJv
d0lkLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJE
YXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
cm93SWQsIGludDY0X3QgaW50VmVyc2lvbik7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0KLSAgICB2aXJ0dWFsIFZlY3RvcjxJREJPYmplY3RT
dG9yZU1ldGFkYXRhPiBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkKTsKLSAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQpOwotICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRp
ZmllcigpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3Jk
SWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgaW50NjRfdCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50
TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbmV3U3RhdGUs
IGJvb2wgY2hlY2tDdXJyZW50KTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RT
dG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlY29yZElkZW50aWZpZXIqIGZv
dW5kUmVjb3JkSWRlbnRpZmllcik7Ci0KLSAgICB2aXJ0dWFsIFZlY3RvcjxJREJJbmRleE1ldGFk
YXRhPiBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgaXNV
bmlxdWUsIGJvb2wgaXNNdWx0aUVudHJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOwotICAgIHZpcnR1YWwgYm9vbCBwdXRJ
bmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBSZWNvcmRJZGVudGlmaWVyKik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4g
Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRy
PElEQktleT4mIGZvdW5kUHJpbWFyeUtleSk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9u
KCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPik7Ci0K
LXByaXZhdGU6Ci0gICAgYm9vbCBmaW5kS2V5SW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5KTsKLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgUmVmUHRyPElEQkZhY3Rv
cnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OwotICAgIE93blB0cjxMZXZlbERCRGF0YWJhc2U+IG1f
ZGI7Ci0gICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7Ci0KLSAgICBj
bGFzcyBUcmFuc2FjdGlvbiA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVh
dGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYmVnaW4o
KTsKLSAgICAgICAgdmlydHVhbCBib29sIGNvbW1pdCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cm9sbGJhY2soKTsKLQotICAgICAgICBzdGF0aWMgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb25Gcm9tKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qPih0cmFuc2FjdGlvbiktPm1fdHJhbnNhY3Rpb24uZ2V0
KCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFRyYW5zYWN0aW9uKElEQkxl
dmVsREJCYWNraW5nU3RvcmUqKTsKLSAgICAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogbV9i
YWNraW5nU3RvcmU7Ci0gICAgICAgIFJlZlB0cjxMZXZlbERCVHJhbnNhY3Rpb24+IG1fdHJhbnNh
Y3Rpb247Ci0gICAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotCi0jZW5kaWYg
Ly8gVVNFKExFVkVMREIpCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNl
bmRpZiAvLyBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5j
cHAKaW5kZXggNDY0MGMxM2RkMmUzYzc3YjJkZTgwY2MwZGI3YWRiZjU5MDNlMDNmNS4uMTJjMzcz
ZmUwNjIxMDYzNDFmOGQzMjNmOTBjZjgyZDBhODM5Y2VhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHAKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwogICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogCiAgICAgLy8gRklYTUU6
IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJvbm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVh
dGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29tcGxleGl0eS4KLSAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gYmFja2luZ1N0
b3JlKCktPmNyZWF0ZUludmFsaWRSZWNvcmRJZGVudGlmaWVyKCk7CisgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllciA9IElEQkJhY2tp
bmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFiYWNraW5nU3Rv
cmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgZGF0YWJhc2VJZCgpLCBpZCgpLCAqcHJpbWFyeUtleSwgcmVjb3JkSWRlbnRp
Zmllci5nZXQoKSkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAg
QVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPmJh
Y2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIgPSBJ
REJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgpOwogICAgIGlmIChwdXRN
b2RlID09IEFkZE9ubHkgJiYgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJ
bk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmpl
Y3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgcmVjb3JkSWRl
bnRpZmllci5nZXQoKSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkg
YWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsK
QEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUAogICAgIGlmIChiYWNr
aW5nU3RvcmVDdXJzb3IpIHsKIAogICAgICAgICBkbyB7Ci0gICAgICAgICAgICByZWNvcmRJZGVu
dGlmaWVyID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5vYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIo
KTsKKyAgICAgICAgICAgIHJlY29yZElkZW50aWZpZXIgPSBiYWNraW5nU3RvcmVDdXJzb3ItPnJl
Y29yZElkZW50aWZpZXIoKTsKIAogICAgICAgICAgICAgZm9yIChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJl
Z2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAg
ICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRl
bGV0ZUluZGV4RGF0YUZvclJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5r
ZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApp
bmRleCBlMTY1MmQ2OTVkZjg1MzQxYjM2MDg2ZDg2NzliMTM3NDQwMmZmOGViLi5iYTg3NWExNzJm
NzZiM2ZmNjU5NjJlNmE5OTk2ZGQzMzNmZWJiYmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcApAQCAtNDksNyArNDksNyBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZQogICAgICwgbV9t
b2RlKG1vZGUpCiAgICAgLCBtX3N0YXRlKFVudXNlZCkKICAgICAsIG1fZGF0YWJhc2UoZGF0YWJh
c2UpCi0gICAgLCBtX3RyYW5zYWN0aW9uKGRhdGFiYXNlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRl
VHJhbnNhY3Rpb24oKSkKKyAgICAsIG1fdHJhbnNhY3Rpb24oZGF0YWJhc2UtPmJhY2tpbmdTdG9y
ZSgpLmdldCgpKQogICAgICwgbV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OnRhc2tUaW1lckZpcmVkKQogICAgICwgbV90YXNrRXZlbnRUaW1lcih0aGlzLCAmSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza0V2ZW50VGltZXJGaXJlZCkKICAgICAsIG1fcGVu
ZGluZ1ByZWVtcHRpdmVFdmVudHMoMCkKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJy
b3IpCiAgICAgbV90YXNrRXZlbnRUaW1lci5zdG9wKCk7CiAKICAgICBpZiAod2FzUnVubmluZykK
LSAgICAgICAgbV90cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICAgICAgbV90cmFuc2FjdGlv
bi5yb2xsYmFjaygpOwogCiAgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYgYW55LgogICAg
IHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKQEAgLTIxNiw3ICsyMTYsNyBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNvbW1pdCgpCiAgICAgYm9vbCB1bnVz
ZWQgPSBtX3N0YXRlID09IFVudXNlZDsKICAgICBtX3N0YXRlID0gRmluaXNoZWQ7CiAKLSAgICBi
b29sIGNvbW1pdHRlZCA9IHVudXNlZCB8fCBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBi
b29sIGNvbW1pdHRlZCA9IHVudXNlZCB8fCBtX3RyYW5zYWN0aW9uLmNvbW1pdCgpOwogCiAgICAg
Ly8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMpIG11c3QgYmUgcmVs
ZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKICAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBz
Y3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNr
aW5nIHN0b3JlCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjp0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPioKICAg
ICBBU1NFUlQoIWlzVGFza1F1ZXVlRW1wdHkoKSk7CiAKICAgICBpZiAobV9zdGF0ZSA9PSBTdGFy
dFBlbmRpbmcpIHsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICAgICAgbV90
cmFuc2FjdGlvbi5iZWdpbigpOwogICAgICAgICBtX3N0YXRlID0gUnVubmluZzsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRleCA0ZTRkZGVjYzExMjM2OTZjYTQ2NTc1M2RiNWYx
MjkyYmMzY2UzNjgxLi5jOGZiYmY1M2NjZGIyYTFmMzQxZGRlNzI4OWRmODI4YjYwODEwYjA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGFkZFBlbmRpbmdFdmVudHMoaW50KTsKICAgICB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgp
IHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysrOyB9CiAgICAgdm9pZCBkaWRDb21wbGV0ZVBy
ZWVtcHRpdmVFdmVudCgpIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cy0tOyBBU1NFUlQobV9w
ZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+PSAwKTsgfQotICAgIElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkgeyByZXR1cm4gbV90cmFuc2FjdGlv
bi5nZXQoKTsgfQorICAgIElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIGJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCkgeyByZXR1cm4gJm1fdHJhbnNhY3Rpb247IH0KIAogcHJpdmF0ZToKICAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0
U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsK
QEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVU
YXNrUXVldWU7CiAgICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7CiAKLSAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKKyAgICBJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247CiAKICAgICAvLyBGSVhNRTogZGVs
ZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgogICAgIFRpbWVyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IG1fdGFza1RpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQxZTlhZjM3MWQ0Zjc4
MTE5ZDcxZTlhMTkyM2JmZjg2ODQ2MDNhZTYuLmE5MmFlOWU5YWY5YjQxYTAzNDgwODBlOTAxOWZm
NDkyOTMxNzRmZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTM0MzYsNiArMzQzNiw3IEBACiAJCTk3MTJBNUFFMTUwMDRFREEw
MDQ4QUYxMCAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU1MTUwMDRFREEwMDQ4QUYxMCAvKiBE
T01XaW5kb3dJbmRleGVkRGF0YWJhc2UuaCAqLzsgfTsKIAkJOTcxMkE1QjAxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkFueS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzEyQTU1NzE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmNwcCAqLzsgfTsKIAkJ
OTcxMkE1QjExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkFueS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NTgxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkFueS5oICovOyB9OworCQk5NzEyQTVFNTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0
b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3
MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3BwICovOyB9OwogCQk5
NzEyQTVCMzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1QTE1MDA0RURBMDA0OEFG
MTAgLyogSURCQmFja2luZ1N0b3JlLmggKi87IH07CiAJCTk3MTJBNUI0MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk3MTJBNTVCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDYWxsYmFja3MuaCAqLzsg
fTsKIAkJOTcxMkE1QjUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1QzE1MDA0RURBMDA0
OEFGMTAgLyogSURCQ3Vyc29yLmNwcCAqLzsgfTsKQEAgLTM0NzUsOCArMzQ3Niw2IEBACiAJCTk3
MTJBNURGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4NjE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UGF0aC5oICovOyB9OwogCQk5NzEyQTVFMjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1ODkxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCAqLzsgfTsKIAkJOTcx
MkE1RTMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4QTE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UmFuZ2UuaCAqLzsgfTsKLQkJOTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJh
Y2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzEyQTU4QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmNwcCAqLzsg
fTsKLQkJOTcxMkE1RTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThE
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQmFja2luZ1N0b3JlLmggKi87IH07CiAJCTk3
MTJBNUU3MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThFMTUwMDRFREEwMDQ4
QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLzsgfTsKIAkJOTcxMkE1RTgxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNThGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERC
Q29kaW5nLmggKi87IH07CiAJCTk3MTJBNUU5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RT
dG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzEyQTU5MDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuY3BwICovOyB9OwpAQCAt
MTA3MDQsNyArMTA3MDMsNyBAQAogCQk5NzEyQTU4QTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSURCS2V5UmFuZ2UuaDsg
cGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSURCS2V5UmFuZ2UuaWRsOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
NzEyQTU4QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkJhY2tpbmdTdG9yZS5jcHA7IHBhdGggPSBN
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJREJMZXZlbERCQmFja2lu
Z1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQmFja2luZ1N0b3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3MTJBNThEMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SURCQmFja2luZ1N0b3JlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OEUxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkxldmVsREJDb2RpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSURCTGV2ZWxEQkNvZGluZy5jcHA7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQ29kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1
OEYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gSURCTGV2ZWxEQkNvZGluZy5oOyBwYXRoID0gTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
NzEyQTU5MDE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSURCT2JqZWN0U3RvcmUuY3BwOyBwYXRoID0gTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTc4NDksNiArMTc4NDgsNyBAQAogCQkJCTk3MTJBNTU4MTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJBbnkuaCAqLywKIAkJCQk5NzEyQTU1OTE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55
LmlkbCAqLywKIAkJCQk5NzEyQTU1QTE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3Jl
LmggKi8sCisJCQkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5j
cHAgKi8sCiAJCQkJOTcxMkE1NUIxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkNhbGxiYWNrcy5oICov
LAogCQkJCTk3MTJBNTVDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuY3BwICovLAogCQkJ
CTk3MTJBNTVEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJDdXJzb3IuaCAqLywKQEAgLTE3ODk1LDgg
KzE3ODk1LDYgQEAKIAkJCQk5NzEyQTU4OTE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2Uu
Y3BwICovLAogCQkJCTk3MTJBNThBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oICov
LAogCQkJCTk3MTJBNThCMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5pZGwgKi8sCi0J
CQkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgKi8sCi0J
CQkJOTcxMkE1OEQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuaCAq
LywKIAkJCQk5NzEyQTU4RTE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAg
Ki8sCiAJCQkJOTcxMkE1OEYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuaCAq
LywKIAkJCQlCQ0M2NTE0NTE1OTI5NEMzMDBBQ0M5RTQgLyogSURCTWV0YWRhdGEuaCAqLywKQEAg
LTIzODIwLDcgKzIzODE4LDYgQEAKIAkJCQk5NzEyQTVEQzE1MDA0RURBMDA0OEFGMTAgLyogSURC
S2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVERjE1MDA0RURBMDA0OEFGMTAgLyogSURC
S2V5UGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1RTMxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQktleVJhbmdlLmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzEyQTVFNjE1MDA0RURBMDA0OEFG
MTAgLyogSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1
RTgxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJDb2RpbmcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3MTJBNUVBMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTcxMkE1RUQxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtMjcwMDYsNiArMjcwMDMsNyBAQAogCQkJCTUx
RTFFQ0MwMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3MTJBNUIwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDNTg1QTY2MjExRDRGQUM1MDA0QzNFNEIgLyogSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVCNTE1MDA0RURBMDA0OEFG
MTAgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUI4MTUwMDRFREEw
MDQ4QUYxMCAvKiBJREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI3
MDIzLDcgKzI3MDIxLDYgQEAKIAkJCQk5NzEyQTVEQjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNURFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJL
ZXlQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUUyMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzEyQTVFNTE1MDA0RURBMDA0
OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MTJBNUU3
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3MTJBNUU5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJPYmplY3RTdG9yZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzEyQTVFQzE1MDA0RURBMDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmgKaW5kZXggNGUzN2QzZWFhOTA0ZjZiOTIy
ZjI4ZDIwYjg5ZWUwYjFkNTBjMWJmOS4uMDJkMmQ1ZDQyMGNmMzMzOTE4NTA1NDY4ZDQ1OTVkYTMz
ZGE4OWE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtl
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJGYWtl
QmFja2luZ1N0b3JlLmgKQEAgLTQzLDggKzQzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
LCBib29sIGF1dG9JbmNyZW1lbnQpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9OwogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklERSB7IH0KIAotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmll
cigpIE9WRVJSSURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4oKTsgfQot
CiAgICAgdmlydHVhbCBTdHJpbmcgZ2V0UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpIE9WRVJSSURFIHsg
cmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBib29sIHB1dFJlY29yZChUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWNvcmRJZGVudGlmaWVyKikgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSBPVkVSUklE
RSB7IH0KQEAgLTY1LDggKzYzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNv
cjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsgfQog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJS
SURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFzc1JlZlB0
cjxDdXJzb3I+KCk7IH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3Jl
YXRlVHJhbnNhY3Rpb24oKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPFRyYW5zYWN0aW9u
PigpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173362</attachid>
            <date>2012-11-09 14:19:05 -0800</date>
            <delta_ts>2012-11-09 16:02:06 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-101415-20121109141712.patch</filename>
            <type>text/plain</type>
            <size>90461</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2EyOWNjM2Y2NmY0MzQ4
YjY2ZjU5N2QxNjViZDNlNTAwMjEyYTBiYy4uODdhN2UzYThkZDQ5MGI3OTg5MWYxOWRjMTczMWFl
NDQzMDliYWM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAxMi0xMS0wOSAgQWxl
YyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBD
b21iaW5lIElEQkJhY2tpbmdTdG9yZSBhbmQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBDb21iaW5lIGFic3RyYWN0IGlu
dGVyZmFjZSBJREJCYWNraW5nU3RvcmUgd2l0aCBpdHMgb25seQorICAgICAgICBpbXBsZW1lbnRh
dGlvbiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSwgdG8gcmVkdWNlIGNvZGUKKyAgICAgICAgY29t
cGxleGl0eS4gVGhlIGxlZ2FjeSBzdHJ1Y3R1cmUgZXhpc3RlZCB0byBzdXBwb3J0IGEgU1FMTGl0
ZQorICAgICAgICBJREJCYWNraW5nU3RvcmUsIGJ1dCBpdCBpcyBubyBsb25nZXIgd29ydGggdGhl
IGNvbXBsZXhpdHkgdG8KKyAgICAgICAgc3VwcG9ydCB0aGlzIGFic3RyYWN0aW9uLgorCisgICAg
ICAgIENoYW5nZXMgaW5jbHVkZToKKyAgICAgICAgMSkgTWVyZ2luZyBJREJMZXZlbERCQmFja2lu
Z1N0b3JlIGludG8gSURCQmFja2luZ1N0b3JlLgorCisgICAgICAgIDIpIE1lcmdlIHRvZ2V0aGVy
IElEQkJhY2tpbmdTdG9yZSdzIGlubmVyIGNsYXNzZXM6IEN1cnNvciwKKyAgICAgICAgVHJhbnNh
Y3Rpb24sIGFuZCBPYmplY3RTdG9yZVJlY29yZElkZW50ZmllciB3aXRoIHRoZWlyIHJlc3BlY3Rp
dmUKKyAgICAgICAgc3ViY2xhc3NlcyBpbiBJREJMZXZlbERCQmFja2luZ1N0b3JlLgorCisgICAg
ICAgIDMpIFNpbXBsaWZ5aW5nIHRoZSBpbm5lciBUcmFuc2FjdGlvbiBjbGFzcyB0byBub3QgYmUg
cmVmY291bnRlZCBvcgorICAgICAgICB2aXJ0dWFsaXplZCwgdG8gYWxsb3cgaXQgdG8gYmUgYSBz
aW1wbGUgY29uY3JldGUgbWVtYmVyIG9mIGl0cworICAgICAgICBvd25lciwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyBwdXJlbHkg
YSByZWZhY3Rvci4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWNvcmRJbnRlcm5hbEVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldFVwTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6On5JREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlOjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3Rv
cmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6dXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpkZWxldGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6Z2V0T2JqZWN0U3RvcmVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldE1heE9iamVjdFN0b3Jl
SWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmRlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRNYXhJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6
OnB1dEluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNr
aW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9y
ZTo6Q3Vyc29yOjpmaXJzdFNlZWspOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
OjpDdXJzb3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpD
dXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I6OmhhdmVFbnRlcmVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I6OmlzUGFzdEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpPYmpl
Y3RTdG9yZUtleUN1cnNvckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUtleUN1
cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjp2
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUtleUN1cnNvckltcGw6Ok9iamVj
dFN0b3JlS2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUtleUN1
cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3Jl
Q3Vyc29ySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKE9iamVjdFN0b3JlQ3Vyc29ySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cp
OgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjpjcmVhdGUpOgorICAgICAg
ICAoSW5kZXhLZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29y
SW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjpwcmlt
YXJ5S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6cmVjb3JkSWRl
bnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OkluZGV4S2V5
Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OmxvYWRD
dXJyZW50Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6Y3JlYXRlKToK
KyAgICAgICAgKEluZGV4Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNv
ckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6cHJpbWFy
eUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnJlY29yZElkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpJbmRleEN1cnNvckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpvYmplY3RTdG9yZUN1cnNvck9wdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6aW5kZXhDdXJzb3JPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpyb2xsYmFjayk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChSZWNvcmRJZGVudGlmaWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6
flJlY29yZElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpS
ZWNvcmRJZGVudGlmaWVyOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6cHJpbWFyeUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OnNldFByaW1hcnlLZXkpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjp2ZXJzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcjo6c2V0
VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50
aWZpZXI6OlJlY29yZElkZW50aWZpZXIpOgorICAgICAgICAoVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0
aW9uRnJvbSk6CisgICAgICAgIChDdXJzb3JPcHRpb25zKToKKyAgICAgICAgKEN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjprZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6On5DdXJzb3IpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVy
bmFsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDEyLTExLTA4ICBTaGVyaWZmIEJv
dCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTM0MDEwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBkNTg2ZmJh
NDMyMjM5MmRlY2JiNzUzY2M0ZGMwYjRhMDAxNDgxYWRiLi5hNjExZWM0ZDYwODRkMTVhNWEwMTUz
OWU1N2YyNDJjYjI5MzI5MWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEyLTExLTA5ICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4K
KworICAgICAgICBJbmRleGVkREI6IENvbWJpbmUgSURCQmFja2luZ1N0b3JlIGFuZCBJREJMZXZl
bERCQmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDE0MTUKKworICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAg
ICAgIFJlbW92ZSBtZXRob2QgdGhhdCBpcyBubyBsb25nZXIgaW4gdGhlIGJhc2UgY2xhc3MuCisK
KyAgICAgICAgKiB0ZXN0cy9JREJGYWtlQmFja2luZ1N0b3JlLmg6CisKIDIwMTItMTEtMDggIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzQwMTAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCAzZGY5ZGQ5MTAwMWQxMGJmZWVmOGQ0ZTI1OGI1MTkwZjk1ZDgwMTAyLi5kZjEyMzczODI5
YTkwNTM2NjNlZDFjMWZjOGM4YmM3N2MxNDRjYWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTE4MzMsNiArMTgzMyw3IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJh
c2UuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmggXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBcCiAJU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIFwKQEAgLTE4NzIsOCArMTg3
Myw2IEBAIHdlYmNvcmVfbW9kdWxlc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmggXAogCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UmFuZ2UuaCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJMZXZlbERCQ29kaW5nLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJNZXRhZGF0YS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDY2M2UzNTJiYTEzNmI0NzkwYzAzZDM4NGU2
YjExYWNiNjZjMjY5NWUuLjFlYTNjOTQ0NGEzZmE5ODM3OWI5Y2Y1MDliODBmMzdmY2I3ZTA3Y2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5o
IgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCiAKICNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiSGlzdG9ncmFtU3VwcG9ydC5oIgpAQCAt
MzUsNyArMzQsNiBAQAogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleVBhdGgu
aCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5n
U3RvcmUuaCIKICNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCiAjaW5jbHVkZSAiSURCTWV0
YWRhdGEuaCIKICNpbmNsdWRlICJJREJUcmFjaW5nLmgiCkBAIC0yMjMsNyArMjIxLDcgQEAgc3Rh
dGljIGludDY0X3QgZ2V0TWF4T2JqZWN0U3RvcmVJZChEQk9yVHJhbnNhY3Rpb24qIGRiLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIG1heE8KICAgICByZXR1cm4gbWF4T2JqZWN0U3RvcmVJZDsKIH0KIAot
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgUGFzc093blB0
cjxMZXZlbERCRGF0YWJhc2U+IGRiKQorSURCQmFja2luZ1N0b3JlOjpJREJCYWNraW5nU3RvcmUo
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3Rvcnks
IFBhc3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBkYikKICAgICA6IG1faWRlbnRpZmllcihpZGVu
dGlmaWVyKQogICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCiAgICAgLCBtX2RiKGRiKQpAQCAtMjMx
LDkgKzIyOSwxNSBAQCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgSURCRmFjdAogICAgIG1fZmFjdG9yeS0+YWRk
SURCQmFja2luZ1N0b3JlKGlkZW50aWZpZXIsIHRoaXMpOwogfQogCi1JREJMZXZlbERCQmFja2lu
Z1N0b3JlOjp+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpCitJREJCYWNraW5nU3RvcmU6OklEQkJh
Y2tpbmdTdG9yZSgpCiB7Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJREJCYWNraW5nU3RvcmUobV9p
ZGVudGlmaWVyKTsKK30KKworSURCQmFja2luZ1N0b3JlOjp+SURCQmFja2luZ1N0b3JlKCkKK3sK
KyAgICAvLyBPbmx5IG51bGwgaW4gdGVzdHMuCisgICAgaWYgKG1fZmFjdG9yeSkKKyAgICAgICAg
bV9mYWN0b3J5LT5yZW1vdmVJREJCYWNraW5nU3RvcmUobV9pZGVudGlmaWVyKTsKIAogICAgIC8v
IG1fZGIncyBkZXN0cnVjdG9yIHVzZXMgbV9jb21wYXJhdG9yLiBUaGUgb3JkZXIgb2YgZGVzdHJ1
Y3Rpb24gaXMgaW1wb3J0YW50LgogICAgIG1fZGIuY2xlYXIoKTsKQEAgLTI1MSw5ICsyNTUsOSBA
QCBlbnVtIElEQkxldmVsREJCYWNraW5nU3RvcmVPcGVuUmVzdWx0IHsKICAgICBJREJMZXZlbERC
QmFja2luZ1N0b3JlT3Blbk1heCwKIH07CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZUFyZywgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmll
ciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQorUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IElEQkJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZp
ZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSkKIHsKLSAgICBJREJfVFJBQ0UoIklE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4iKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdT
dG9yZTo6b3BlbiIpOwogICAgIFN0cmluZyBwYXRoQmFzZSA9IHBhdGhCYXNlQXJnOwogCiAgICAg
T3duUHRyPExldmVsREJDb21wYXJhdG9yPiBjb21wYXJhdG9yID0gYWRvcHRQdHIobmV3IENvbXBh
cmF0b3IoKSk7CkBAIC0zMDUsNyArMzA5LDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+
IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXQKIAog
ICAgIC8vIEZJWE1FOiBIYW5kbGUgY29tcGFyYXRvciBuYW1lIGNoYW5nZXMuCiAKLSAgICBSZWZQ
dHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVmKG5ldyBJREJM
ZXZlbERCQmFja2luZ1N0b3JlKGZpbGVJZGVudGlmaWVyLCBmYWN0b3J5LCBkYi5yZWxlYXNlKCkp
KSk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKGFkb3B0UmVmKG5l
dyBJREJCYWNraW5nU3RvcmUoZmlsZUlkZW50aWZpZXIsIGZhY3RvcnksIGRiLnJlbGVhc2UoKSkp
KTsKICAgICBiYWNraW5nU3RvcmUtPm1fY29tcGFyYXRvciA9IGNvbXBhcmF0b3IucmVsZWFzZSgp
OwogCiAgICAgaWYgKCFzZXRVcE1ldGFkYXRhKGJhY2tpbmdTdG9yZS0+bV9kYi5nZXQoKSwgZmls
ZUlkZW50aWZpZXIpKQpAQCAtMzE0LDcgKzMxOCw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
CiAgICAgcmV0dXJuIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldERhdGFiYXNlTmFtZXMoKQorVmVjdG9yPFN0cmlu
Zz4gSURCQmFja2luZ1N0b3JlOjpnZXREYXRhYmFzZU5hbWVzKCkKIHsKICAgICBWZWN0b3I8U3Ry
aW5nPiBmb3VuZE5hbWVzOwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IERhdGFi
YXNlTmFtZUtleTo6ZW5jb2RlTWluS2V5Rm9yT3JpZ2luKG1faWRlbnRpZmllcik7CkBAIC0zMzYs
NyArMzQwLDcgQEAgVmVjdG9yPFN0cmluZz4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0RGF0
YWJhc2VOYW1lcygpCiAgICAgcmV0dXJuIGZvdW5kTmFtZXM7CiB9CiAKLWJvb2wgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkRhdGFiYXNlTWV0YWRhdGEqIG1ldGFkYXRhKQorYm9vbCBJREJCYWNraW5nU3RvcmU6Omdl
dElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRhYmFzZU1ldGFk
YXRhKiBtZXRhZGF0YSkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VO
YW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKIApAQCAtMzgyLDcgKzM4Niw3IEBA
IHN0YXRpYyBpbnQ2NF90IGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFiYXNlKiBkYikKICAg
ICByZXR1cm4gZGF0YWJhc2VJZDsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpj
cmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKQorYm9vbCBJREJC
YWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QgaW50VmVyc2lvbiwgaW50NjRfdCYgcm93
SWQpCiB7CiAgICAgcm93SWQgPSBnZXROZXdEYXRhYmFzZUlkKG1fZGIuZ2V0KCkpOwogICAgIGlm
IChyb3dJZCA8IDApCkBAIC00MDIsNyArNDA2LDcgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjp1cGRh
dGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lvbikKK2Jvb2wgSURCQmFj
a2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3Qgcm93SWQsIGludDY0X3QgaW50VmVyc2lv
bikKIHsKICAgICBpZiAoaW50VmVyc2lvbiA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZl
cnNpb24pCiAgICAgICAgIGludFZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpEZWZhdWx0
SW50VmVyc2lvbjsKQEAgLTQxMSw3ICs0MTUsNyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5nU3RvcmU6OlRyYW5zYQog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnVwZGF0
ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK2Jvb2wgSURCQmFj
a2luZ1N0b3JlOjp1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24pCiB7CiAgICAgcHV0U3RyaW5nKFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFz
ZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIHZlcnNpb24pOwogICAgIHJldHVybiB0cnVlOwpA
QCAtNDI1LDkgKzQyOSw5IEBAIHN0YXRpYyB2b2lkIGRlbGV0ZVJhbmdlKExldmVsREJUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnCiB9CiAKIAotYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUp
Citib29sIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJh
c2UiKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UiKTsK
ICAgICBPd25QdHI8TGV2ZWxEQldyaXRlT25seVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IExl
dmVsREJXcml0ZU9ubHlUcmFuc2FjdGlvbjo6Y3JlYXRlKG1fZGIuZ2V0KCkpOwogCiAgICAgSURC
RGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YTsKQEAgLTQ2MSw5ICs0NjUsOSBAQCBzdGF0aWMgYm9v
bCBjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJdGVyYXRvciog
aXQsIGNvbnN0IFZlYwogICAgIHJldHVybiB0cnVlOwogfQogCi1WZWN0b3I8SURCT2JqZWN0U3Rv
cmVNZXRhZGF0YT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0
X3QgZGF0YWJhc2VJZCkKK1ZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQpCiB7Ci0gICAgSURCX1RS
QUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMiKTsKKyAgICBJREJf
VFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzIik7CiAgICAgVmVjdG9yPElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE+IG9iamVjdFN0b3JlczsKICAgICBjb25zdCBWZWN0b3I8Y2hh
cj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwg
MSwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CkBAIC01NjUsMTAgKzU2OSwxMCBAQCBz
dGF0aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24sIGludDY0X3QgZGF0YWJhcwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBi
b29sIGF1dG9JbmNyZW1lbnQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKIHsKLSAgICBJREJfVFJB
Q0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlIik7Ci0gICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5n
U3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZl
bERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJh
bnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBpZiAoIXNldE1heE9iamVjdFN0b3JlSWQo
bGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC01OTQsMTAgKzU5OCwxMCBAQCBib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3ZvaWQgSURC
QmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmpl
Y3RTdG9yZSIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0g
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElE
Ql9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSIpOworICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAKICAgICBTdHJp
bmcgb2JqZWN0U3RvcmVOYW1lOwogICAgIGdldFN0cmluZyhsZXZlbERCVHJhbnNhY3Rpb24sIE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjpOYW1lKSwgb2JqZWN0U3RvcmVOYW1lKTsKQEAgLTYxMiwx
MCArNjE2LDEwIEBAIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3Rv
cmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhCiAgICAgY2xlYXJPYmplY3RTdG9y
ZSh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CiB9CiAKLVN0cmluZyBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmIGtleSkKK1N0cmluZyBJREJCYWNraW5nU3RvcmU6OmdldFJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQogewotICAg
IElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkIik7Ci0gICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5n
U3RvcmU6OmdldFJlY29yZCIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5z
YWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9u
RnJvbSh0cmFuc2FjdGlvbik7CiAKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9
IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGtl
eSk7CiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CkBAIC02MzQsMjcgKzYzOCw2IEBAIFN0cmluZyBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3RpCiAgICAgcmV0dXJuIGRlY29kZVN0cmluZyhwLCBkYXRhLmVuZCgpKTsK
IH0KIAotbmFtZXNwYWNlIHsKLWNsYXNzIExldmVsREJSZWNvcmRJZGVudGlmaWVyIDogcHVibGlj
IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8TGV2ZWxEQlJlY29yZElkZW50aWZpZXI+IGNyZWF0ZShjb25zdCBWZWN0b3I8
Y2hhcj4mIHByaW1hcnlLZXksIGludDY0X3QgdmVyc2lvbikgeyByZXR1cm4gYWRvcHRSZWYobmV3
IExldmVsREJSZWNvcmRJZGVudGlmaWVyKHByaW1hcnlLZXksIHZlcnNpb24pKTsgfQotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExldmVsREJSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIoKSk7IH0KLQotICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5LmlzRW1wdHkoKTsg
fQotICAgIFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5
S2V5OyB9Ci0gICAgdm9pZCBzZXRQcmltYXJ5S2V5KGNvbnN0IFZlY3RvcjxjaGFyPiYgcHJpbWFy
eUtleSkgeyBtX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5OyB9Ci0gICAgaW50NjRfdCB2ZXJzaW9u
KCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9Ci0gICAgdm9pZCBzZXRWZXJzaW9uKGludDY0
X3QgdmVyc2lvbikgeyBtX3ZlcnNpb24gPSB2ZXJzaW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgTGV2
ZWxEQlJlY29yZElkZW50aWZpZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBpbnQ2
NF90IHZlcnNpb24pIDogbV9wcmltYXJ5S2V5KHByaW1hcnlLZXkpLCBtX3ZlcnNpb24odmVyc2lv
bikgeyBBU1NFUlQoIXByaW1hcnlLZXkuaXNFbXB0eSgpKTsgfQotICAgIExldmVsREJSZWNvcmRJ
ZGVudGlmaWVyKCkgOiBtX3ByaW1hcnlLZXkoKSwgbV92ZXJzaW9uKC0xKSB7IH0KLQotICAgIFZl
Y3RvcjxjaGFyPiBtX3ByaW1hcnlLZXk7IC8vIEZJWE1FOiBNYWtlIGl0IG1vcmUgY2xlYXIgdGhh
dCB0aGlzIGlzIHRoZSAqZW5jb2RlZCogdmVyc2lvbiBvZiB0aGUga2V5LgotICAgIGludDY0X3Qg
bV92ZXJzaW9uOwotfTsKLX0KLQogc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihM
ZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gbGFzdFZlcnNpb25L
ZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TGFzdFZlcnNpb24pOwpAQCAtNjczLDExICs2
NTYsMTEgQEAgc3RhdGljIGludDY0X3QgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGEKICAgICByZXR1cm4gdmVyc2lvbjsKIH0K
IAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVj
b3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpw
dXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikK
IHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dFJlY29yZCIpOwor
ICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQiKTsKICAgICBBU1NFUlQo
a2V5LmlzVmFsaWQoKSk7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rp
b24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Cisg
ICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAg
ICBpbnQ2NF90IHZlcnNpb24gPSBnZXROZXdWZXJzaW9uTnVtYmVyKGxldmVsREJUcmFuc2FjdGlv
biwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IG9i
amVjdFN0b3JlZGF0YUtleSA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGtleSk7CiAKQEAgLTY5MCw0NCArNjczLDM3IEBAIGJvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhp
c3RzRW50cnlLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAg
IGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KGV4aXN0c0VudHJ5S2V5LCBlbmNvZGVJbnQodmVyc2lv
bikpOwogCi0gICAgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlm
aWVyID0gc3RhdGljX2Nhc3Q8TGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlm
aWVyKTsKLSAgICBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+c2V0UHJpbWFyeUtleShlbmNvZGVJ
REJLZXkoa2V5KSk7Ci0gICAgbGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnNldFZlcnNpb24odmVy
c2lvbik7CisgICAgcmVjb3JkSWRlbnRpZmllci0+c2V0UHJpbWFyeUtleShlbmNvZGVJREJLZXko
a2V5KSk7CisgICAgcmVjb3JkSWRlbnRpZmllci0+c2V0VmVyc2lvbih2ZXJzaW9uKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVj
dFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3ZvaWQgSURCQmFja2luZ1N0b3Jl
OjpjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICBJ
REJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUiKTsKLSAg
ICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjps
ZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJh
Y2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiog
bGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxE
QlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0
YXJ0S2V5ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIDApLmVuY29kZSgp
OwogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5ID0gS2V5UHJlZml4KGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQgKyAxLCAwKS5lbmNvZGUoKTsKIAogICAgIGRlbGV0ZVJhbmdlKGxldmVs
REJUcmFuc2FjdGlvbiwgc3RhcnRLZXksIHN0b3BLZXkpOwogfQogCi1QYXNzUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKQordm9pZCBJREJCYWNraW5nU3RvcmU6OmRlbGV0
ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZp
ZXIqIHJlY29yZElkZW50aWZpZXIpCiB7Ci0gICAgcmV0dXJuIExldmVsREJSZWNvcmRJZGVudGlm
aWVyOjpjcmVhdGUoKTsKLX0KKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
UmVjb3JkIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKIAotdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVSZWNvcmQoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJ
ZGVudGlmaWVyKQotewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVs
ZXRlUmVjb3JkIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24g
PSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7Ci0gICAg
Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqIGxldmVsREJSZWNvcmRJZGVudGlmaWVyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgTGV2ZWxEQlJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVudGlm
aWVyKTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBvYmplY3RTdG9yZURhdGFLZXkgPSBPYmpl
Y3RTdG9yZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERC
UmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4g
b2JqZWN0U3RvcmVEYXRhS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgcmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKICAgICBs
ZXZlbERCVHJhbnNhY3Rpb24tPnJlbW92ZShvYmplY3RTdG9yZURhdGFLZXkpOwogCi0gICAgY29u
c3QgVmVjdG9yPGNoYXI+IGV4aXN0c0VudHJ5S2V5ID0gRXhpc3RzRW50cnlLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFy
eUtleSgpKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gZXhpc3RzRW50cnlLZXkgPSBFeGlzdHNF
bnRyeUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHJlY29yZElkZW50aWZp
ZXItPnByaW1hcnlLZXkoKSk7CiAgICAgbGV2ZWxEQlRyYW5zYWN0aW9uLT5yZW1vdmUoZXhpc3Rz
RW50cnlLZXkpOwogfQogCiAKLWludDY0X3QgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitpbnQ2
NF90IElEQkJhY2tpbmdTdG9yZTo6Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERC
VHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2Fj
dGlvbik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0
aW9uKTsKIAogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleUdlbmVyYXRvckN1cnJlbnROdW1iZXIp
OwogCkBAIC03NjcsOSArNzQzLDkgQEAgaW50NjRfdCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHIKICAgICByZXR1
cm4ga2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcjsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJlbnQpCiti
b29sIElEQkJhY2tpbmdTdG9yZTo6bWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBuZXdOdW1iZXIsIGJvb2wgY2hl
Y2tDdXJyZW50KQogewotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9u
ID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAg
IExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CiAKICAg
ICBpZiAoY2hlY2tDdXJyZW50KSB7CiAgICAgICAgIGludDY0X3QgY3VycmVudE51bWJlciA9IGdl
dEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQpOwpAQCAtNzgyLDEwICs3NTgsMTAgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjptYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3IK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlF
eGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiBrZXksIFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcikKK2Jvb2wg
SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVj
b3JkSWRlbnRpZmllcikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmtleUV4aXN0c0luT2JqZWN0U3RvcmUiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVs
REJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5z
YWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmpl
Y3RTdG9yZSIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0g
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFu
c2FjdGlvbik7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9y
ZURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAgIFZl
Y3RvcjxjaGFyPiBkYXRhOwogCkBAIC03OTYsOSArNzcyLDggQEAgYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24KICAgICBpZiAoIWRlY29kZVZhckludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCksIHZl
cnNpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMZXZlbERCUmVjb3JkSWRlbnRp
ZmllciogbGV2ZWxEQlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxMZXZlbERCUmVjb3Jk
SWRlbnRpZmllcio+KGZvdW5kUmVjb3JkSWRlbnRpZmllcik7Ci0gICAgbGV2ZWxEQlJlY29yZElk
ZW50aWZpZXItPnNldFByaW1hcnlLZXkoZW5jb2RlSURCS2V5KGtleSkpOwotICAgIGxldmVsREJS
ZWNvcmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOworICAgIGZvdW5kUmVjb3JkSWRl
bnRpZmllci0+c2V0UHJpbWFyeUtleShlbmNvZGVJREJLZXkoa2V5KSk7CisgICAgZm91bmRSZWNv
cmRJZGVudGlmaWVyLT5zZXRWZXJzaW9uKHZlcnNpb24pOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC04MTgsOSArNzkzLDkgQEAgc3RhdGljIGJvb2wgY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5
KGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlY3RvcjxjaGEKIH0KIAogCi1WZWN0
b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK1ZlY3RvcjxJREJJbmRl
eE1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRJbmRleGVzIik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6
OmdldEluZGV4ZXMiKTsKICAgICBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gaW5kZXhlczsKICAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUo
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgMCwgMCk7CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+
IHN0b3BLZXkgPSBJbmRleE1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVJZCArIDEsIDAsIDApOwpAQCAtODg5LDEwICs4NjQsMTAgQEAgc3RhdGljIGJvb2wgc2V0TWF4
SW5kZXhJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpjcmVhdGVJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlz
VW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJ
bmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBi
b29sIGlzTXVsdGlFbnRyeSkKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZUluZGV4Iik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNh
Y3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7
CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4Iik7CisgICAgTGV2
ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBpZiAo
IXNldE1heEluZGV4SWQobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC05MDgsMTAgKzg4Mywx
MCBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KElEQkJhY2tpbmdT
dG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQordm9pZCBJREJCYWNraW5nU3RvcmU6OmRlbGV0ZUlu
ZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQogewotICAg
IElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgiKTsKLSAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uOjpsZXZl
bERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlSW5kZXgiKTsKKyAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJU
cmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2Fj
dGlvbkZyb20odHJhbnNhY3Rpb24pOwogCiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4TWV0
YURhdGFTdGFydCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkLCAwKTsKICAgICBjb25zdCBWZWN0b3I8Y2hhcj4gaW5kZXhNZXRhRGF0
YUVuZCA9IEluZGV4TWV0YURhdGFLZXk6OmVuY29kZU1heEtleShkYXRhYmFzZUlkLCBvYmplY3RT
dG9yZUlkLCBpbmRleElkKTsKQEAgLTkyMiwxOSArODk3LDE4IEBAIHZvaWQgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhY3RpCiAgICAgZGVsZXRlUmFuZ2UobGV2ZWxEQlRyYW5zYWN0aW9uLCBpbmRleERhdGFTdGFy
dCwgaW5kZXhEYXRhRW5kKTsKIH0KIAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJ
bmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKiByZWNvcmRJ
ZGVudGlmaWVyKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiBrZXksIGNvbnN0IFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7Ci0gICAg
SURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQi
KTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3Jk
Iik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwogICAgIEFTU0VSVChpbmRleElkID49IE1p
bmltdW1JbmRleElkKTsKLSAgICBjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRpZmllciogbGV2ZWxE
QlJlY29yZElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBMZXZlbERCUmVjb3JkSWRlbnRp
Zmllcio+KHJlY29yZElkZW50aWZpZXIpOwogCi0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZl
bERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFu
c2FjdGlvbik7Ci0gICAgY29uc3QgVmVjdG9yPGNoYXI+IGluZGV4RGF0YUtleSA9IEluZGV4RGF0
YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGVuY29kZUlE
QktleShrZXkpLCBsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKKyAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIGNv
bnN0IFZlY3RvcjxjaGFyPiBpbmRleERhdGFLZXkgPSBJbmRleERhdGFLZXk6OmVuY29kZShkYXRh
YmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBlbmNvZGVJREJLZXkoa2V5KSwgcmVjb3Jk
SWRlbnRpZmllci0+cHJpbWFyeUtleSgpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotICAg
IGRhdGEuYXBwZW5kKGVuY29kZVZhckludChsZXZlbERCUmVjb3JkSWRlbnRpZmllci0+dmVyc2lv
bigpKSk7Ci0gICAgZGF0YS5hcHBlbmQobGV2ZWxEQlJlY29yZElkZW50aWZpZXItPnByaW1hcnlL
ZXkoKSk7CisgICAgZGF0YS5hcHBlbmQoZW5jb2RlVmFySW50KHJlY29yZElkZW50aWZpZXItPnZl
cnNpb24oKSkpOworICAgIGRhdGEuYXBwZW5kKHJlY29yZElkZW50aWZpZXItPnByaW1hcnlLZXko
KSk7CiAKICAgICBsZXZlbERCVHJhbnNhY3Rpb24tPnB1dChpbmRleERhdGFLZXksIGRhdGEpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtOTY4LDcgKzk0Miw3IEBAIHN0YXRpYyBib29sIGZpbmRHcmVh
dGVzdEtleUxlc3NUaGFuT3JFcXVhbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBj
b25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBp
bnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKikKK2Jvb2wg
SURCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IFJlY29yZElk
ZW50aWZpZXIqKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzbid0IG5lZWRlZCBzaW5jZSB3ZSBp
bnZhbGlkYXRlIGluZGV4IGRhdGEgdmlhIHRoZSB2ZXJzaW9uIG51bWJlciBtZWNoYW5pc20uCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC05ODUsMTIgKzk1OSwxMiBAQCBzdGF0aWMgYm9vbCB2ZXJzaW9u
RXhpc3RzKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaQogICAgIHJldHVybiBkZWNvZGVJbnQoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpKSA9PSB2
ZXJzaW9uOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5KQorYm9vbCBJREJC
YWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPGNoYXI+JiBmb3VuZEVu
Y29kZWRQcmltYXJ5S2V5KQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZmluZEtleUluSW5kZXgiKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Zmlu
ZEtleUluSW5kZXgiKTsKICAgICBBU1NFUlQoZm91bmRFbmNvZGVkUHJpbWFyeUtleS5pc0VtcHR5
KCkpOwogCi0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFu
c2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgTGV2ZWxE
QlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKICAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gbGV2ZWxkYktleSA9IEluZGV4RGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleSk7CiAgICAgT3duUHRyPExldmVsREJJdGVyYXRv
cj4gaXQgPSBsZXZlbERCVHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaXQtPnNl
ZWsobGV2ZWxkYktleSk7CkBAIC0xMDIwLDkgKzk5NCw5IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZmluZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJh
bnNhCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKK1Bhc3NSZWZQdHI8SURCS2V5PiBJREJC
YWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7Ci0gICAgSURCX1RS
QUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgiKTsKKyAg
ICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4Iik7CiAK
ICAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNvZGVkUHJpbWFyeUtleTsKICAgICBpZiAoZmluZEtl
eUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IGtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpIHsKQEAgLTEwMzQsOSArMTAwOCw5IEBAIFBh
c3NSZWZQdHI8SURCS2V5PiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5Vmlh
SW5kZXgoSURCQmFja2luZ1N0b3JlCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBpbmRleEtleSwgUmVmUHRyPElEQktl
eT4mIGZvdW5kUHJpbWFyeUtleSkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbklu
ZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmIGluZGV4S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KQogewotICAg
IElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCIpOwor
ICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4Iik7CiAKICAg
ICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNvZGVkUHJpbWFyeUtleTsKICAgICBpZiAoIWZpbmRLZXlJ
bkluZGV4KHRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBp
bmRleEtleSwgZm91bmRFbmNvZGVkUHJpbWFyeUtleSkpCkBAIC0xMDQ2LDY0ICsxMDIwLDIyIEBA
IGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLW5hbWVzcGFj
ZSB7Ci0KLXN0cnVjdCBDdXJzb3JPcHRpb25zIHsKLSAgICBWZWN0b3I8Y2hhcj4gbG93S2V5Owot
ICAgIGJvb2wgbG93T3BlbjsKLSAgICBWZWN0b3I8Y2hhcj4gaGlnaEtleTsKLSAgICBib29sIGhp
Z2hPcGVuOwotICAgIGJvb2wgZm9yd2FyZDsKLSAgICBib29sIHVuaXF1ZTsKLX07Ci0KLWNsYXNz
IEN1cnNvckltcGxDb21tb24gOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpDdXJzb3IgewotcHVi
bGljOgotICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCi0gICAgdmlydHVhbCBib29sIGFk
dmFuY2UodW5zaWduZWQgbG9uZyk7Ci0gICAgdmlydHVhbCBib29sIGNvbnRpbnVlRnVuY3Rpb24o
Y29uc3QgSURCS2V5KiA9IDAsIEl0ZXJhdG9yU3RhdGUgPSBTZWVrKTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5
OyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCkgPSAw
OwotICAgIGJvb2wgZmlyc3RTZWVrKCk7Ci0KLXByb3RlY3RlZDoKLSAgICBDdXJzb3JJbXBsQ29t
bW9uKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMm
IGN1cnNvck9wdGlvbnMpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAg
ICAgICAgLCBtX2N1cnNvck9wdGlvbnMoY3Vyc29yT3B0aW9ucykKLSAgICB7Ci0gICAgfQotCi0g
ICAgQ3Vyc29ySW1wbENvbW1vbihjb25zdCBDdXJzb3JJbXBsQ29tbW9uKiBvdGhlcikKLSAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKG90aGVyLT5tX3RyYW5zYWN0aW9uKQotICAgICAgICAsIG1fY3Vy
c29yT3B0aW9ucyhvdGhlci0+bV9jdXJzb3JPcHRpb25zKQotICAgICAgICAsIG1fY3VycmVudEtl
eShvdGhlci0+bV9jdXJyZW50S2V5KQotICAgIHsKLSAgICAgICAgaWYgKG90aGVyLT5tX2l0ZXJh
dG9yKSB7Ci0gICAgICAgICAgICBtX2l0ZXJhdG9yID0gbV90cmFuc2FjdGlvbi0+Y3JlYXRlSXRl
cmF0b3IoKTsKK0lEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3IoY29uc3QgSURCQmFja2lu
Z1N0b3JlOjpDdXJzb3IqIG90aGVyKQorICAgIDogbV90cmFuc2FjdGlvbihvdGhlci0+bV90cmFu
c2FjdGlvbikKKyAgICAsIG1fY3Vyc29yT3B0aW9ucyhvdGhlci0+bV9jdXJzb3JPcHRpb25zKQor
ICAgICwgbV9jdXJyZW50S2V5KG90aGVyLT5tX2N1cnJlbnRLZXkpCit7CisgICAgaWYgKG90aGVy
LT5tX2l0ZXJhdG9yKSB7CisgICAgICAgIG1faXRlcmF0b3IgPSBtX3RyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOwogCi0gICAgICAgICAgICBpZiAob3RoZXItPm1faXRlcmF0b3ItPmlzVmFs
aWQoKSkgewotICAgICAgICAgICAgICAgIG1faXRlcmF0b3ItPnNlZWsob3RoZXItPm1faXRlcmF0
b3ItPmtleSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9pdGVyYXRvci0+aXNWYWxpZCgp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG90aGVyLT5tX2l0ZXJhdG9yLT5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgICAgIG1faXRlcmF0b3ItPnNlZWsob3RoZXItPm1faXRlcmF0b3ItPmtl
eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2l0ZXJhdG9yLT5pc1ZhbGlkKCkpOwogICAgICAg
ICB9CiAgICAgfQorfQogCi0gICAgdmlydHVhbCB+Q3Vyc29ySW1wbENvbW1vbigpIHsgfQotCi0g
ICAgYm9vbCBpc1Bhc3RCb3VuZHMoKSBjb25zdDsKLSAgICBib29sIGhhdmVFbnRlcmVkUmFuZ2Uo
KSBjb25zdDsKLQotICAgIExldmVsREJUcmFuc2FjdGlvbiogbV90cmFuc2FjdGlvbjsKLSAgICBD
dXJzb3JPcHRpb25zIG1fY3Vyc29yT3B0aW9uczsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9y
PiBtX2l0ZXJhdG9yOwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudEtleTsKLX07Ci0KLWJv
b2wgQ3Vyc29ySW1wbENvbW1vbjo6Zmlyc3RTZWVrKCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpD
dXJzb3I6OmZpcnN0U2VlaygpCiB7CiAgICAgbV9pdGVyYXRvciA9IG1fdHJhbnNhY3Rpb24tPmNy
ZWF0ZUl0ZXJhdG9yKCk7CiAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5mb3J3YXJkKQpAQCAtMTEx
NCw3ICsxMDQ2LDcgQEAgYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpmaXJzdFNlZWsoKQogICAgIHJl
dHVybiBjb250aW51ZUZ1bmN0aW9uKDAsIFJlYWR5KTsKIH0KIAotYm9vbCBDdXJzb3JJbXBsQ29t
bW9uOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAgICAgd2hpbGUgKGNvdW50
LS0pIHsKICAgICAgICAgaWYgKCFjb250aW51ZUZ1bmN0aW9uKCkpCkBAIC0xMTIzLDcgKzEwNTUs
NyBAQCBib29sIEN1cnNvckltcGxDb21tb246OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBDdXJzb3JJbXBsQ29tbW9uOjpjb250aW51ZUZ1
bmN0aW9uKGNvbnN0IElEQktleSoga2V5LCBJdGVyYXRvclN0YXRlIG5leHRTdGF0ZSkKK2Jvb2wg
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBr
ZXksIEl0ZXJhdG9yU3RhdGUgbmV4dFN0YXRlKQogewogICAgIFJlZlB0cjxJREJLZXk+IHByZXZp
b3VzS2V5ID0gbV9jdXJyZW50S2V5OwogCkBAIC0xMjE1LDcgKzExNDcsNyBAQCBib29sIEN1cnNv
ckltcGxDb21tb246OmNvbnRpbnVlRnVuY3Rpb24oY29uc3QgSURCS2V5KiBrZXksIEl0ZXJhdG9y
U3RhdGUgbmV4dFN0YQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEN1cnNvckltcGxDb21t
b246OmhhdmVFbnRlcmVkUmFuZ2UoKSBjb25zdAorYm9vbCBJREJCYWNraW5nU3RvcmU6OkN1cnNv
cjo6aGF2ZUVudGVyZWRSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fY3Vyc29yT3B0aW9ucy5m
b3J3YXJkKSB7CiAgICAgICAgIGlmIChtX2N1cnNvck9wdGlvbnMubG93T3BlbikKQEAgLTEyMjks
NyArMTE2MSw3IEBAIGJvb2wgQ3Vyc29ySW1wbENvbW1vbjo6aGF2ZUVudGVyZWRSYW5nZSgpIGNv
bnN0CiAgICAgcmV0dXJuIGNvbXBhcmVJbmRleEtleXMobV9pdGVyYXRvci0+a2V5KCksIG1fY3Vy
c29yT3B0aW9ucy5oaWdoS2V5KSA8PSAwOwogfQogCi1ib29sIEN1cnNvckltcGxDb21tb246Omlz
UGFzdEJvdW5kcygpIGNvbnN0Citib29sIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjppc1Bhc3RC
b3VuZHMoKSBjb25zdAogewogICAgIGlmIChtX2N1cnNvck9wdGlvbnMuZm9yd2FyZCkgewogICAg
ICAgICBpZiAobV9jdXJzb3JPcHRpb25zLmhpZ2hPcGVuKQpAQCAtMTI0Miw5ICsxMTc0LDkgQEAg
Ym9vbCBDdXJzb3JJbXBsQ29tbW9uOjppc1Bhc3RCb3VuZHMoKSBjb25zdAogICAgIHJldHVybiBj
b21wYXJlSW5kZXhLZXlzKG1faXRlcmF0b3ItPmtleSgpLCBtX2N1cnNvck9wdGlvbnMubG93S2V5
KSA8IDA7CiB9CiAKLWNsYXNzIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJz
b3JJbXBsQ29tbW9uIHsKK2NsYXNzIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbCA6IHB1YmxpYyBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29y
T3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7
CiAgICAgfQpAQCAtMTI1NCwyNiArMTE4NiwyNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKHRoaXMpKTsKICAgICB9CiAKLSAg
ICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXIoKSBPVkVSUklERQorICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCisgICAg
dmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpS
ZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyKCkgT1ZFUlJJREUKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2lkZW50aWZpZXI7CiAgICAgfQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3Vy
cmVudFJvdygpOwogCiBwcml2YXRlOgotICAgIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbChMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JP
cHRpb25zKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9w
dGlvbnMpCisgICAgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25z
JiBjdXJzb3JPcHRpb25zKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKHRyYW5z
YWN0aW9uLCBjdXJzb3JPcHRpb25zKQogICAgIHsKICAgICB9CiAKICAgICBPYmplY3RTdG9yZUtl
eUN1cnNvckltcGwoY29uc3QgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKiBvdGhlcikKLSAgICAg
ICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVyKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yKG90aGVyKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8TGV2ZWxEQlJlY29yZElk
ZW50aWZpZXI+IG1faWRlbnRpZmllcjsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNv
cmRJZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7CiB9OwogCiBib29sIE9iamVjdFN0b3JlS2V5Q3Vy
c29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQpAQCAtMTI5OCwxNCArMTIzMCwxNCBAQCBib29sIE9i
amVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIH0KIAogICAgIC8v
IEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3YXMganVzdCBkZWNvZGVkOyB0cnkgYW5kIG9w
dGltaXplLgotICAgIG1faWRlbnRpZmllciA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVh
dGUoZW5jb2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsKKyAgICBtX2lkZW50aWZp
ZXIgPSBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJL
ZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNs
YXNzIE9iamVjdFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKK2Ns
YXNzIE9iamVjdFN0b3JlQ3Vyc29ySW1wbCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6OkN1cnNv
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVDdXJzb3JJbXBs
PiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0
aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxPYmplY3RTdG9yZUN1
cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKICAg
ICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKHRy
YW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7CiAgICAgfQpAQCAtMTMxNSwyOCArMTI0NywyOCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsKHRoaXMpKTsKICAgICB9CiAKLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVh
bCBTdHJpbmcgdmFsdWUoKSB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFCisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJz
b3IKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZh
bHVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRl
bnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcigpIE9WRVJSSURFCiAgICAgewogICAgICAgICByZXR1
cm4gbV9pZGVudGlmaWVyOwogICAgIH0KICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3co
KTsKIAogcHJpdmF0ZToKLSAgICBPYmplY3RTdG9yZUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKLSAg
ICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKQorICAg
IE9iamVjdFN0b3JlQ3Vyc29ySW1wbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBj
b25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9u
cykKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcih0cmFuc2FjdGlvbiwgY3Vyc29y
T3B0aW9ucykKICAgICB7CiAgICAgfQogCiAgICAgT2JqZWN0U3RvcmVDdXJzb3JJbXBsKGNvbnN0
IE9iamVjdFN0b3JlQ3Vyc29ySW1wbCogb3RoZXIpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1v
bihvdGhlcikKKyAgICAgICAgOiBJREJCYWNraW5nU3RvcmU6OkN1cnNvcihvdGhlcikKICAgICAg
ICAgLCBtX2N1cnJlbnRWYWx1ZShvdGhlci0+bV9jdXJyZW50VmFsdWUpCiAgICAgewogICAgIH0K
IAogICAgIFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKLSAgICBSZWZQdHI8TGV2ZWxEQlJlY29yZElk
ZW50aWZpZXI+IG1faWRlbnRpZmllcjsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNv
cmRJZGVudGlmaWVyPiBtX2lkZW50aWZpZXI7CiB9OwogCiBib29sIE9iamVjdFN0b3JlQ3Vyc29y
SW1wbDo6bG9hZEN1cnJlbnRSb3coKQpAQCAtMTM2MSwxNiArMTI5MywxNiBAQCBib29sIE9iamVj
dFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIH0KIAogICAgIC8vIEZJWE1F
OiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3YXMganVzdCBkZWNvZGVkOyB0cnkgYW5kIG9wdGltaXpl
LgotICAgIG1faWRlbnRpZmllciA9IExldmVsREJSZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUoZW5j
b2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsKKyAgICBtX2lkZW50aWZpZXIgPSBJ
REJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZShlbmNvZGVJREJLZXkoKm1f
Y3VycmVudEtleSksIHZlcnNpb24pOwogCiAgICAgbV9jdXJyZW50VmFsdWUgPSBkZWNvZGVTdHJp
bmcodmFsdWVQb3NpdGlvbiwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIDogcHVibGljIEN1cnNvcklt
cGxDb21tb24geworY2xhc3MgSW5kZXhLZXlDdXJzb3JJbXBsIDogcHVibGljIElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleEtleUN1
cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBD
dXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4
S2V5Q3Vyc29ySW1wbD4gY3JlYXRlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNv
bnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25z
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEtleUN1cnNvckltcGwo
dHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpKTsKICAgICB9CkBAIC0xMzgwLDIwICsxMzEyLDIw
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmRleEtleUN1cnNvcklt
cGwodGhpcykpOwogICAgIH0KIAotICAgIC8vIEN1cnNvckltcGxDb21tb24KLSAgICB2aXJ0dWFs
IFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsg
fQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBt
X3ByaW1hcnlLZXk7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpS
ZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmll
cigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBib29s
IGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5kZXhLZXlDdXJzb3JJbXBsKExl
dmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IEN1cnNvck9wdGlvbnMmIGN1cnNv
ck9wdGlvbnMpCi0gICAgICAgIDogQ3Vyc29ySW1wbENvbW1vbih0cmFuc2FjdGlvbiwgY3Vyc29y
T3B0aW9ucykKKyAgICBJbmRleEtleUN1cnNvckltcGwoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1
cnNvck9wdGlvbnMpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3IodHJhbnNhY3Rp
b24sIGN1cnNvck9wdGlvbnMpCiAgICAgewogICAgIH0KIAogICAgIEluZGV4S2V5Q3Vyc29ySW1w
bChjb25zdCBJbmRleEtleUN1cnNvckltcGwqIG90aGVyKQotICAgICAgICA6IEN1cnNvckltcGxD
b21tb24ob3RoZXIpCisgICAgICAgIDogSURCQmFja2luZ1N0b3JlOjpDdXJzb3Iob3RoZXIpCiAg
ICAgICAgICwgbV9wcmltYXJ5S2V5KG90aGVyLT5tX3ByaW1hcnlLZXkpCiAgICAgewogICAgIH0K
QEAgLTE0NDcsOSArMTM3OSw5IEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVu
dFJvdygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1
YmxpYyBDdXJzb3JJbXBsQ29tbW9uIHsKK2NsYXNzIEluZGV4Q3Vyc29ySW1wbCA6IHB1YmxpYyBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5kZXhDdXJzb3JJbXBsPiBjcmVhdGUoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwg
Y29uc3QgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbmRleEN1cnNvckltcGw+IGNyZWF0ZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBs
KHRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKSk7CiAgICAgfQpAQCAtMTQ1OSwyMCArMTM5MSwy
MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhDdXJzb3JJbXBs
KHRoaXMpKTsKICAgICB9CiAKLSAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCi0gICAgdmlydHVhbCBT
dHJpbmcgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0
b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9
CisgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3Jk
SWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CiAgICAgYm9v
bCBsb2FkQ3VycmVudFJvdygpOwogCiBwcml2YXRlOgotICAgIEluZGV4Q3Vyc29ySW1wbChMZXZl
bERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JP
cHRpb25zKQotICAgICAgICA6IEN1cnNvckltcGxDb21tb24odHJhbnNhY3Rpb24sIGN1cnNvck9w
dGlvbnMpCisgICAgSW5kZXhDdXJzb3JJbXBsKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zJiBjdXJzb3JP
cHRpb25zKQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKHRyYW5zYWN0aW9uLCBj
dXJzb3JPcHRpb25zKQogICAgIHsKICAgICB9CiAKICAgICBJbmRleEN1cnNvckltcGwoY29uc3Qg
SW5kZXhDdXJzb3JJbXBsKiBvdGhlcikKLSAgICAgICAgOiBDdXJzb3JJbXBsQ29tbW9uKG90aGVy
KQorICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKG90aGVyKQogICAgICAgICAsIG1f
cHJpbWFyeUtleShvdGhlci0+bV9wcmltYXJ5S2V5KQogICAgICAgICAsIG1fdmFsdWUob3RoZXIt
Pm1fdmFsdWUpCiAgICAgICAgICwgbV9wcmltYXJ5TGV2ZWxEQktleShvdGhlci0+bV9wcmltYXJ5
TGV2ZWxEQktleSkKQEAgLTE1MzMsNyArMTQ2NSw3IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjps
b2FkQ3VycmVudFJvdygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgb2JqZWN0U3RvcmVD
dXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2Us
IElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0
aW9ucykKK2Jvb2wgb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKExldmVsREJUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwg
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I6OkN1cnNvck9wdGlvbnMmIGN1cnNvck9wdGlvbnMpCiB7
CiAgICAgYm9vbCBsb3dlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9v
bCB1cHBlckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CkBAIC0xNTgwLDcgKzE1MTIs
NyBAQCBib29sIG9iamVjdFN0b3JlQ3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwg
Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKK2Jvb2wgaW5kZXhDdXJzb3JPcHRpb25zKExl
dmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5n
ZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBJREJCYWNraW5nU3RvcmU6OkN1cnNv
cjo6Q3Vyc29yT3B0aW9ucyYgY3Vyc29yT3B0aW9ucykKIHsKICAgICBBU1NFUlQodHJhbnNhY3Rp
b24pOwogICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5sb3dlcigpOwpAQCAt
MTYyMywxMyArMTU1NSwxMSBAQCBib29sIGluZGV4Q3Vyc29yT3B0aW9ucyhMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludAogICAgIHJldHVybiB0
cnVlOwogfQogCi19Ci0KLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxl
dmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCQmFj
a2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmpl
Y3RTdG9yZUN1cnNvciIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0
aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwot
ICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tp
bmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yIik7CisgICAgTGV2ZWxEQlRyYW5zYWN0aW9u
KiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZl
bERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJREJCYWNraW5nU3RvcmU6OkN1
cnNvcjo6Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwogICAgIGlmICghb2JqZWN0U3RvcmVD
dXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIFJlZlB0cjxPYmplY3RTdG9yZUN1cnNvckltcGw+IGN1cnNvciA9IE9iamVjdFN0b3JlQ3Vy
c29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlvbiwgY3Vyc29yT3B0aW9ucyk7CkBAIC0x
NjM5LDExICsxNTY5LDExIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElE
QkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvCiAgICAgcmV0dXJuIGN1
cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvcihJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGly
ZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBJREJfVFJBQ0UoIklEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om9wZW5PYmplY3RTdG9yZUtleUN1cnNvciIpOwotICAgIExldmVsREJUcmFuc2FjdGlvbiog
bGV2ZWxEQlRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20o
dHJhbnNhY3Rpb24pOwotICAgIEN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKKyAgICBJREJf
VFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yIik7CisgICAg
TGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb24gPSBJREJCYWNraW5nU3RvcmU6
OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKKyAgICBJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcjo6Q3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOwogICAg
IGlmICghb2JqZWN0U3RvcmVDdXJzb3JPcHRpb25zKGxldmVsREJUcmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgcmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yT3B0aW9ucykpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxPYmplY3RTdG9yZUtleUN1cnNvckltcGw+IGN1
cnNvciA9IE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6Y3JlYXRlKGxldmVsREJUcmFuc2FjdGlv
biwgY3Vyc29yT3B0aW9ucyk7CkBAIC0xNjUzLDExICsxNTgzLDExIEBAIFBhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RT
dG9yZUtleUN1CiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24p
CitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJCYWNraW5nU3RvcmU6Om9w
ZW5JbmRleEtleUN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJl
Y3Rpb24pCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5k
ZXhLZXlDdXJzb3IiKTsKLSAgICBMZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlv
biA9IFRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKHRyYW5zYWN0aW9uKTsKLSAg
ICBDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5n
U3RvcmU6Om9wZW5JbmRleEtleUN1cnNvciIpOworICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2
ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRy
YW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CisgICAgSURCQmFja2luZ1N0b3JlOjpDdXJzb3I6
OkN1cnNvck9wdGlvbnMgY3Vyc29yT3B0aW9uczsKICAgICBpZiAoIWluZGV4Q3Vyc29yT3B0aW9u
cyhsZXZlbERCVHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQs
IHJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvck9wdGlvbnMpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICBSZWZQdHI8SW5kZXhLZXlDdXJzb3JJbXBsPiBjdXJzb3IgPSBJbmRleEtleUN1cnNvckltcGw6
OmNyZWF0ZShsZXZlbERCVHJhbnNhY3Rpb24sIGN1cnNvck9wdGlvbnMpOwpAQCAtMTY2NywxMSAr
MTU5NywxMSBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoSQogICAgIHJldHVybiBjdXJzb3IucmVs
ZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29y
OjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gSURCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IoSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yIik7Ci0gICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBs
ZXZlbERCVHJhbnNhY3Rpb24gPSBUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0
cmFuc2FjdGlvbik7Ci0gICAgQ3Vyc29yT3B0aW9ucyBjdXJzb3JPcHRpb25zOworICAgIElEQl9U
UkFDRSgiSURCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IiKTsKKyAgICBMZXZlbERCVHJh
bnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOworICAgIElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yOjpDdXJzb3JPcHRpb25zIGN1cnNvck9wdGlvbnM7CiAgICAgaWYgKCFpbmRl
eEN1cnNvck9wdGlvbnMobGV2ZWxEQlRyYW5zYWN0aW9uLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleElkLCByYW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JPcHRpb25zKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgUmVmUHRyPEluZGV4Q3Vyc29ySW1wbD4gY3Vyc29yID0gSW5kZXhDdXJz
b3JJbXBsOjpjcmVhdGUobGV2ZWxEQlRyYW5zYWN0aW9uLCBjdXJzb3JPcHRpb25zKTsKQEAgLTE2
ODEsNjAgKzE2MTEsMzUgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4Q3Vyc29yKElEQkIKICAgICByZXR1cm4gY3Vy
c29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbigpCi17Ci0gICAg
cmV0dXJuIFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpjcmVhdGUoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNhY3Rpb24oYmFja2luZ1N0b3JlKSk7Ci19
Ci0KLUlEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvbihJREJM
ZXZlbERCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCitJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpUcmFuc2FjdGlvbihJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKICAgICA6
IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKIHsKIH0KIAotdm9pZCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4oKQordm9pZCBJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpiZWdpbigpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbjo6YmVnaW4iKTsKKyAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb246OmJlZ2luIik7CiAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKICAg
ICBtX3RyYW5zYWN0aW9uID0gTGV2ZWxEQlRyYW5zYWN0aW9uOjpjcmVhdGUobV9iYWNraW5nU3Rv
cmUtPm1fZGIuZ2V0KCkpOwogfQogCi1ib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uOjpjb21taXQoKQorYm9vbCBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjb21t
aXQoKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b246OmNvbW1pdCIpOworICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
bjo6Y29tbWl0Iik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwogICAgIGJvb2wgcmVzdWx0
ID0gbV90cmFuc2FjdGlvbi0+Y29tbWl0KCk7CiAgICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OnJvbGxiYWNrKCkKK3ZvaWQgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6
cm9sbGJhY2soKQogewotICAgIElEQl9UUkFDRSgiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb246OnJvbGxiYWNrIik7CisgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpyb2xsYmFjayIpOwogICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKICAgICBt
X3RyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwogICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0K
IAotYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJp
dHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBh
dGhCYXNlQXJnKQotewotICAgIFN0cmluZyBwYXRoQmFzZSA9IHBhdGhCYXNlQXJnOwotCi0gICAg
aWYgKHBhdGhCYXNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBldmVudHVhbGx5IHVzZSB0aGUgc2FtZSBMZXZlbERCIGRhdGFiYXNl
IGZvciBhbGwgb3JpZ2lucy4KLSAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5p
bmRleGVkZGIubGV2ZWxkYiIpOwotCi0gICAgLy8gRklYTUU6IHRoaXMgaXMgY2hlY2tpbmcgZm9y
IHByZXNlbmNlIG9mIHRoZSBkb21haW4sIG5vdCB0aGUgZGF0YWJhc2UgaXRzZWxmCi0gICAgcmV0
dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NVUlJFTlQiKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oCmluZGV4IDNjOTQ1MWNjMDc0YzIwZTZmMjE3YzQ5NDg3YTNkODM1MmYyNzAy
YWQuLjI1MmRlZTFmNWEyODkxZjc0Njc2ZTE1YmI3M2UzMDE5MzVhODVhOGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC0y
OSw2MCArMjksNzMgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUg
IklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJNZXRh
ZGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiTGV2ZWxEQlRy
YW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKK2NsYXNzIExldmVsREJEYXRhYmFzZTsKK2Ns
YXNzIExldmVsREJUcmFuc2FjdGlvbjsKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsKIGNs
YXNzIElEQktleTsKIGNsYXNzIElEQktleVJhbmdlOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1z
dHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKIAogY2xhc3MgSURCQmFja2luZ1N0b3JlIDogcHVi
bGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7CiBwdWJsaWM6CiAgICAgY2xhc3MgVHJh
bnNhY3Rpb247CiAKLSAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKSB7fTsKKyAgICB2aXJ0
dWFsIH5JREJCYWNraW5nU3RvcmUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU+IG9wZW4oU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIHBhdGhCYXNlLCBjb25z
dCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqKTsKIAotICAg
IHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VOYW1lcygpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRh
dGFiYXNlTWV0YWRhdGEqIGZvdW5kTWV0YWRhdGEpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
c3RyaW5nVmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZUludFZlcnNpb24oVHJhbnNhY3Rpb24q
LCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+
IGdldERhdGFiYXNlTmFtZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGEqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uLCBpbnQ2NF90JiByb3dJZCk7
CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qgcm93SWQsIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7
CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbihJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgaW50NjRfdCBpbnRWZXJzaW9uKTsK
KyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAot
ICAgIHZpcnR1YWwgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IGdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0
U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5j
cmVtZW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKFRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAg
ICB2aXJ0dWFsIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBnZXRPYmplY3RTdG9yZXMo
aW50NjRfdCBkYXRhYmFzZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBi
b29sIGF1dG9JbmNyZW1lbnQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQpOwogCiAgICAgY2xhc3MgUmVjb3JkSWRlbnRpZmllciA6IHB1YmxpYyBS
ZWZDb3VudGVkPFJlY29yZElkZW50aWZpZXI+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgPSAwOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
ZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiBwcmltYXJ5S2V5LCBp
bnQ2NF90IHZlcnNpb24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWNvcmRJZGVudGlmaWVyKHBy
aW1hcnlLZXksIHZlcnNpb24pKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWNvcmRJ
ZGVudGlmaWVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUmVjb3JkSWRlbnRpZmll
cigpKTsgfQogICAgICAgICB2aXJ0dWFsIH5SZWNvcmRJZGVudGlmaWVyKCkgeyB9CisKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXkuaXNF
bXB0eSgpOyB9CisgICAgICAgIFZlY3RvcjxjaGFyPiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1
cm4gbV9wcmltYXJ5S2V5OyB9CisgICAgICAgIHZvaWQgc2V0UHJpbWFyeUtleShjb25zdCBWZWN0
b3I8Y2hhcj4mIHByaW1hcnlLZXkpIHsgbV9wcmltYXJ5S2V5ID0gcHJpbWFyeUtleTsgfQorICAg
ICAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KKyAgICAg
ICAgdm9pZCBzZXRWZXJzaW9uKGludDY0X3QgdmVyc2lvbikgeyBtX3ZlcnNpb24gPSB2ZXJzaW9u
OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWNvcmRJZGVudGlmaWVyKGNvbnN0IFZlY3Rv
cjxjaGFyPiYgcHJpbWFyeUtleSwgaW50NjRfdCB2ZXJzaW9uKSA6IG1fcHJpbWFyeUtleShwcmlt
YXJ5S2V5KSwgbV92ZXJzaW9uKHZlcnNpb24pIHsgQVNTRVJUKCFwcmltYXJ5S2V5LmlzRW1wdHko
KSk7IH0KKyAgICAgICAgUmVjb3JkSWRlbnRpZmllcigpIDogbV9wcmltYXJ5S2V5KCksIG1fdmVy
c2lvbigtMSkgeyB9CisKKyAgICAgICAgVmVjdG9yPGNoYXI+IG1fcHJpbWFyeUtleTsgLy8gRklY
TUU6IE1ha2UgaXQgbW9yZSBjbGVhciB0aGF0IHRoaXMgaXMgdGhlICplbmNvZGVkKiB2ZXJzaW9u
IG9mIHRoZSBrZXkuCisgICAgICAgIGludDY0X3QgbV92ZXJzaW9uOwogICAgIH07Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IGNyZWF0ZUludmFsaWRSZWNvcmRJZGVu
dGlmaWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UmVjb3JkKFRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGNsZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZWNvcmQoVHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2Vu
ZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIG1heWJlVXBkYXRlS2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld051bWJlciwgYm9vbCBjaGVja0N1cnJl
bnQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpID0gMDsKLQot
ICAgIHZpcnR1YWwgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IGdldEluZGV4ZXMoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVJbmRleChUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
JiwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
SW5kZXhEYXRhRm9yUmVjb3JkKFRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmll
ciopID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5Vmlh
SW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luSW5kZXgoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlaWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGluZGV4
S2V5LCBSZWZQdHI8SURCS2V5PiYgZm91bmRQcmltYXJ5S2V5KSA9IDA7CisKKyAgICB2aXJ0dWFs
IFN0cmluZyBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2
aXJ0dWFsIGludDY0X3QgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpOworICAgIHZpcnR1YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1i
ZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7
CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmLCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIp
OworCisgICAgdmlydHVhbCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29s
IGNyZWF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlF
bnRyeSk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJh
bnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBSZWNv
cmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmll
ciopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRl
eChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAg
dmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1h
cnlLZXkpOwogCiAgICAgY2xhc3MgQ3Vyc29yIDogcHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7
CiAgICAgcHVibGljOgpAQCAtOTEsMzMgKzEwNCw4NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBT
ZWVrCiAgICAgICAgIH07CiAKKyAgICAgICAgc3RydWN0IEN1cnNvck9wdGlvbnMgeworICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IGxvd0tleTsKKyAgICAgICAgICAgIGJvb2wgbG93T3BlbjsKKyAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBoaWdoS2V5OworICAgICAgICAgICAgYm9vbCBoaWdoT3Bl
bjsKKyAgICAgICAgICAgIGJvb2wgZm9yd2FyZDsKKyAgICAgICAgICAgIGJvb2wgdW5pcXVlOwor
ICAgICAgICB9OworCisgICAgICAgIEN1cnNvcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uLCBjb25zdCBDdXJzb3JPcHRpb25zJiBjdXJzb3JPcHRpb25zKQorICAgICAgICAgICAgOiBt
X3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQorICAgICAgICAgICAgLCBtX2N1cnNvck9wdGlvbnMo
Y3Vyc29yT3B0aW9ucykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIEN1cnNvcihjb25z
dCBJREJCYWNraW5nU3RvcmU6OkN1cnNvciogb3RoZXIpOworCisgICAgICAgIFBhc3NSZWZQdHI8
SURCS2V5PiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KKyAgICAgICAgYm9v
bCBjb250aW51ZUZ1bmN0aW9uKGNvbnN0IElEQktleSogPSAwLCBJdGVyYXRvclN0YXRlID0gU2Vl
ayk7CisgICAgICAgIGJvb2wgYWR2YW5jZSh1bnNpZ25lZCBsb25nKTsKKyAgICAgICAgYm9vbCBm
aXJzdFNlZWsoKTsKKwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBjbG9uZSgp
ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGFkdmFuY2UodW5zaWduZWQgbG9uZykgPSAwOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXkqID0gMCwg
SXRlcmF0b3JTdGF0ZSA9IFNlZWspID0gMDsKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QktleT4ga2V5KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmlt
YXJ5S2V5KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllcigpID0gMDsKLSAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9OworICAgICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50S2V5OyB9CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAw
OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRl
bnRpZmllcigpID0gMDsKKyAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9CisgICAgICAgIHZp
cnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpID0gMDsKKworICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgYm9vbCBpc1Bhc3RCb3VuZHMoKSBjb25zdDsKKyAgICAgICAgYm9vbCBoYXZlRW50ZXJlZFJh
bmdlKCkgY29uc3Q7CisKKyAgICAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBtX3RyYW5zYWN0aW9u
OworICAgICAgICBjb25zdCBDdXJzb3JPcHRpb25zIG1fY3Vyc29yT3B0aW9uczsKKyAgICAgICAg
T3duUHRyPExldmVsREJJdGVyYXRvcj4gbV9pdGVyYXRvcjsKKyAgICAgICAgUmVmUHRyPElEQktl
eT4gbV9jdXJyZW50S2V5OwogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29y
PiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRp
cmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RT
dG9yZUtleUN1cnNvcihUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9
IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKFRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikg
PSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVLZXlDdXJz
b3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJz
b3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0
aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3Io
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5J
bmRleEN1cnNvcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CiAKLSAgICBjbGFzcyBUcmFuc2FjdGlvbiA6
IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zYWN0aW9uPiB7CisgICAgY2xhc3MgVHJhbnNhY3Rpb24g
ewogICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+VHJhbnNhY3Rpb24oKSB7IH0KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY29tbWl0
KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSA9IDA7CisgICAgICAgIFRy
YW5zYWN0aW9uKElEQkJhY2tpbmdTdG9yZSopOworICAgICAgICB2b2lkIGJlZ2luKCk7CisgICAg
ICAgIGJvb2wgY29tbWl0KCk7CisgICAgICAgIHZvaWQgcm9sbGJhY2soKTsKKworICAgICAgICBz
dGF0aWMgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9tKFRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRyYW5zYWN0aW9uKj4odHJhbnNhY3Rpb24pLT5tX3RyYW5zYWN0aW9uLmdldCgpOworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBJREJCYWNraW5nU3RvcmUqIG1fYmFja2lu
Z1N0b3JlOworICAgICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9u
OwogICAgIH07Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFu
c2FjdGlvbigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIElEQkJhY2tpbmdTdG9yZShjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIFBhc3NPd25QdHI8TGV2
ZWxEQkRhdGFiYXNlPik7CisKKyAgICAvLyBTaG91bGQgb25seSB1c2VkIGZvciBtb2NraW5nLgor
ICAgIElEQkJhY2tpbmdTdG9yZSgpOworCitwcml2YXRlOgorICAgIGJvb2wgZmluZEtleUluSW5k
ZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3Rv
cjxjaGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSk7CisKKyAgICBTdHJpbmcgbV9pZGVudGlm
aWVyOworICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKKyAgICBP
d25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOworICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRv
cj4gbV9jb21wYXJhdG9yOworCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZgorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjZW5kaWYgLy8gSURCQmFj
a2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDU1YzhkYWI0YTc4MTY2NjlmYzE4
N2IzMjE4MjZjNzNiYzczYjk2NzUuLmVhYTczM2E1MjhlZjQ1NGFjMzgwZWMyZjBjNjFkNDUxM2Ni
ZjcwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUg
IklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIklEQkxldmVsREJC
YWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBA
IC0xMzQsMTIgKzEzMyw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5
QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTCiAgICAgaWYgKGl0MiAh
PSBtX2JhY2tpbmdTdG9yZU1hcC5lbmQoKSkKICAgICAgICAgYmFja2luZ1N0b3JlID0gaXQyLT52
YWx1ZTsKICAgICBlbHNlIHsKLSNpZiBVU0UoTEVWRUxEQikKLSAgICAgICAgYmFja2luZ1N0b3Jl
ID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbihzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0
YURpcmVjdG9yeSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VE
X1BBUkFNKGRhdGFEaXJlY3RvcnkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZgorICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJp
dHlPcmlnaW4uZ2V0KCksIGRhdGFEaXJlY3RvcnksIGZpbGVJZGVudGlmaWVyLCB0aGlzKTsKICAg
ICB9CiAKICAgICBpZiAoYmFja2luZ1N0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAxY2IyNzI1MTRhMWYyODEyMDM1MDgzNTNhMzk0MjEwNzIzYzRi
Mzg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJMZXZlbERCQmFj
a2luZ1N0b3JlX2gKLSNkZWZpbmUgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCi0KLSNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBVU0UoTEVWRUxEQikKLQotI2luY2x1ZGUgIklEQkJh
Y2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBMZXZlbERCQ29tcGFyYXRvcjsKLWNsYXNzIExldmVsREJEYXRhYmFzZTsK
LWNsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW1wbDsK
LQotY2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihT
ZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGNvbnN0IFN0cmluZyYgZmls
ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwotICAgIHZpcnR1YWwgfklEQkxl
dmVsREJCYWNraW5nU3RvcmUoKTsKLQotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZ2V0RGF0
YWJhc2VOYW1lcygpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhZGF0YSopOwotICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2ZXJzaW9uLCBpbnQ2NF90IGludFZlcnNpb24sIGludDY0X3QmIHJvd0lkKTsKLSAgICB2
aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VNZXRhRGF0YShJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKLSAgICB2
aXJ0dWFsIGJvb2wgdXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IHJvd0lkLCBpbnQ2NF90IGludFZlcnNpb24pOwotICAgIHZp
cnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpOwotCi0gICAgdmly
dHVhbCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gZ2V0T2JqZWN0U3RvcmVzKGludDY0
X3QgZGF0YWJhc2VJZCk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBh
dXRvSW5jcmVtZW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4gY3Jl
YXRlSW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRSZWNv
cmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0
UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3Jl
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXIqKTsKLSAgICB2aXJ0dWFsIGludDY0X3Qg
Z2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1
YWwgYm9vbCBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IG5ld1N0YXRlLCBib29sIGNoZWNrQ3VycmVudCk7Ci0gICAgdmlydHVhbCBi
b29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbios
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
LCBSZWNvcmRJZGVudGlmaWVyKiBmb3VuZFJlY29yZElkZW50aWZpZXIpOwotCi0gICAgdmlydHVh
bCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KElE
QkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmLCBib29sIGlzVW5pcXVlLCBib29sIGlzTXVsdGlFbnRyeSk7Ci0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsK
LSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyKik7
Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciopOwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChJREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYgaW5kZXhLZXksIFJlZlB0cjxJREJLZXk+JiBmb3VuZFByaW1hcnlLZXkpOwotCi0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlS2V5Q3Vyc29yKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6
RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJz
b3IoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24pOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zYWN0
aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOwotCi0gICAgc3RhdGljIGJvb2wgYmFja2luZ1N0b3Jl
RXhpc3RzKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHBhdGhCYXNlKTsKLQotcHJvdGVjdGVkOgotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmUoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBQYXNzT3duUHRy
PExldmVsREJEYXRhYmFzZT4pOwotCi1wcml2YXRlOgotICAgIGJvb2wgZmluZEtleUluSW5kZXgo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIFZlY3Rvcjxj
aGFyPiYgZm91bmRFbmNvZGVkUHJpbWFyeUtleSk7Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVy
OwotICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKLSAgICBPd25Q
dHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOwotICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4g
bV9jb21wYXJhdG9yOwotCi0gICAgY2xhc3MgVHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlKElEQkxldmVsREJCYWNraW5nU3RvcmUqKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGJlZ2luKCk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjb21taXQoKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCk7Ci0KLSAgICAgICAgc3RhdGljIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uRnJvbShJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKj4odHJhbnNhY3Rp
b24pLT5tX3RyYW5zYWN0aW9uLmdldCgpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICBUcmFuc2FjdGlvbihJREJMZXZlbERCQmFja2luZ1N0b3JlKik7Ci0gICAgICAgIElEQkxl
dmVsREJCYWNraW5nU3RvcmUqIG1fYmFja2luZ1N0b3JlOwotICAgICAgICBSZWZQdHI8TGV2ZWxE
QlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgIH07Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLQotI2VuZGlmIC8vIFVTRShMRVZFTERCKQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDQ2NDBjMTNkZDJlM2M3N2IyZGU4MGNjMGRi
N2FkYmY1OTAzZTAzZjUuLjEyYzM3M2ZlMDYyMTA2MzQxZjhkMzIzZjkwY2Y4MmQwYTgzOWNlYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+
IHBycFByaW1hcnlLZXksIGMKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9u
UHRyKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBjb3VsZCBiZSBhc3luY2hyb25vdXMs
IGJ1dCB3ZSBuZWVkIHRvIGV2YWx1YXRlIGlmIGl0J3Mgd29ydGggdGhlIGV4dHJhIGNvbXBsZXhp
dHkuCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3Jk
SWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbnZhbGlkUmVjb3JkSWRlbnRpZmll
cigpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI+IHJlY29y
ZElkZW50aWZpZXIgPSBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXI6OmNyZWF0ZSgp
OwogICAgIGlmICghYmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQoKSwgaWQoKSwgKnBy
aW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjwKIAogICAgIEFTU0VSVChrZXkgJiYga2V5LT5pc1ZhbGlkKCkpOwogCi0g
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRp
ZmllciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW52YWxpZFJlY29yZElk
ZW50aWZpZXIoKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVy
PiByZWNvcmRJZGVudGlmaWVyID0gSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyOjpj
cmVhdGUoKTsKICAgICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYmIG9iamVjdFN0b3JlLT5iYWNr
aW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUt
PmlkKCksICprZXksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUu
IikpOwogICAgICAgICByZXR1cm47CkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlAKICAgICBpZiAoYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAKICAgICAgICAgZG8gewot
ICAgICAgICAgICAgcmVjb3JkSWRlbnRpZmllciA9IGJhY2tpbmdTdG9yZUN1cnNvci0+b2JqZWN0
U3RvcmVSZWNvcmRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICByZWNvcmRJZGVudGlmaWVyID0g
YmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2Jq
ZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVz
LmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleERhdGFGb3JSZWNvcmQodHJhbnNhY3Rpb24t
PmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9i
amVjdFN0b3JlLT5pZCgpLCBpdC0+a2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5jcHAKaW5kZXggZTE2NTJkNjk1ZGY4NTM0MWIzNjA4NmQ4Njc5YjEz
NzQ0MDJmZjhlYi4uYmE4NzVhMTcyZjc2YjNmZjY1OTYyZTZhOTk5NmRkMzMzZmViYmJkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBWZWN0b3I8aW50
NjRfdD4mIG9iamUKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9zdGF0ZShVbnVzZWQpCiAg
ICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlKQotICAgICwgbV90cmFuc2FjdGlvbihkYXRhYmFzZS0+
YmFja2luZ1N0b3JlKCktPmNyZWF0ZVRyYW5zYWN0aW9uKCkpCisgICAgLCBtX3RyYW5zYWN0aW9u
KGRhdGFiYXNlLT5iYWNraW5nU3RvcmUoKS5nZXQoKSkKICAgICAsIG1fdGFza1RpbWVyKHRoaXMs
ICZJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJGaXJlZCkKICAgICAsIG1fdGFz
a0V2ZW50VGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tFdmVudFRp
bWVyRmlyZWQpCiAgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCkBAIC0xMjMsNyAr
MTIzLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydChQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQogICAgIG1fdGFza0V2ZW50VGltZXIuc3RvcCgpOwog
CiAgICAgaWYgKHdhc1J1bm5pbmcpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7
CisgICAgICAgIG1fdHJhbnNhY3Rpb24ucm9sbGJhY2soKTsKIAogICAgIC8vIFJ1biB0aGUgYWJv
cnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgp
KSB7CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQoKQogICAgIGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVzZWQ7CiAgICAgbV9zdGF0
ZSA9IEZpbmlzaGVkOwogCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV90cmFuc2Fj
dGlvbi0+Y29tbWl0KCk7CisgICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV90cmFuc2Fj
dGlvbi5jb21taXQoKTsKIAogICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZp
YSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCiAgICAg
Ly8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVu
Y2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4qCiAgICAgQVNTRVJUKCFpc1Rhc2tRdWV1ZUVtcHR5KCkpOwogCiAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24t
PmJlZ2luKCk7CisgICAgICAgIG1fdHJhbnNhY3Rpb24uYmVnaW4oKTsKICAgICAgICAgbV9zdGF0
ZSA9IFJ1bm5pbmc7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggNGU0ZGRl
Y2MxMTIzNjk2Y2E0NjU3NTNkYjVmMTI5MmJjM2NlMzY4MS4uYzhmYmJmNTNjY2RiMmExZjM0MWRk
ZTcyODlkZjgyOGI2MDgxMGIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNjgsNyAr
NjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRQZW5kaW5nRXZlbnRzKGludCk7CiAgICAgdm9p
ZCBhZGRQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQog
ICAgIHZvaWQgZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRp
dmVFdmVudHMtLTsgQVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KLSAg
ICBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7IH0KKyAgICBJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0dXJuICZtX3RyYW5zYWN0
aW9uOyB9CiAKIHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKik7CkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBU
YXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1ZXVlOwogICAgIFRhc2tRdWV1ZSBtX2Fib3J0VGFz
a1F1ZXVlOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IG1fdHJh
bnNhY3Rpb247CisgICAgSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiBtX3RyYW5zYWN0aW9u
OwogCiAgICAgLy8gRklYTUU6IGRlbGV0ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMg
aW5zdGVhZC4KICAgICBUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBtX3Rhc2tUaW1l
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAxODkzMzI2NGJlOTMxZDBiMWNiYzU0MTZjNTg0MTRjZDE3YTQ2NmJiLi4wMDcxYTRi
ZGVmYzQ3ODQ0OWNjNjRhNjUwOWNmYzM3OWQ4YTdlYzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNDM2LDYgKzM0MzYsNyBA
QAogCQk5NzEyQTVBRTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1
NTE1MDA0RURBMDA0OEFGMTAgLyogRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmggKi87IH07CiAJ
CTk3MTJBNUIwMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1NTcxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkFueS5jcHAgKi87IH07CiAJCTk3MTJBNUIxMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTU4
MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJBbnkuaCAqLzsgfTsKKwkJOTcxMkE1RTUxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4QzE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2lu
Z1N0b3JlLmNwcCAqLzsgfTsKIAkJOTcxMkE1QjMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tp
bmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTcxMkE1NUExNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovOyB9OwogCQk5
NzEyQTVCNDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU1QjE1MDA0RURBMDA0OEFGMTAg
LyogSURCQ2FsbGJhY2tzLmggKi87IH07CiAJCTk3MTJBNUI1MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTcxMkE1NUMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5jcHAgKi87IH07CkBAIC0z
NDc1LDggKzM0NzYsNiBAQAogCQk5NzEyQTVERjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
ODYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCAqLzsgfTsKIAkJOTcxMkE1RTIxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3MTJBNTg5MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlS
YW5nZS5jcHAgKi87IH07CiAJCTk3MTJBNUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5n
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1
OEExNTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggKi87IH07Ci0JCTk3MTJBNUU1MTUw
MDRFREEwMDQ4QUYxMCAvKiBJREJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElE
QkJhY2tpbmdTdG9yZS5jcHAgKi87IH07Ci0JCTk3MTJBNUU2MTUwMDRFREEwMDQ4QUYxMCAvKiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5oICovOyB9OwogCQk5NzEyQTVFNzE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxE
QkNvZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzEyQTU4RTE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5jcHAgKi87IH07
CiAJCTk3MTJBNUU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzEyQTU4RjE1MDA0RURB
MDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGluZy5oICovOyB9OwogCQk5NzEyQTVFOTE1MDA0RURB
MDA0OEFGMTAgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTcxMkE1OTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVj
dFN0b3JlLmNwcCAqLzsgfTsKQEAgLTEwNzA0LDcgKzEwNzAzLDcgQEAKIAkJOTcxMkE1OEExNTAw
NEVEQTAwNDhBRjEwIC8qIElEQktleVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IElEQktleVJhbmdlLmg7IHBhdGggPSBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzEyQTU4QjE1MDA0RURBMDA0OEFG
MTAgLyogSURCS2V5UmFuZ2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IElEQktleVJhbmdl
LmlkbDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OEMxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tp
bmdTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJREJCYWNr
aW5nU3RvcmUuY3BwOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTcxMkE1OEQxNTAwNEVEQTAwNDhBRjEw
IC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOyBwYXRoID0gTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
NzEyQTU4RDE1MDA0RURBMDA0OEFGMTAgLyogSURCQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkJhY2tpbmdTdG9yZS5oOyBwYXRoID0gTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3MTJBNThFMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29kaW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQkxldmVsREJDb2RpbmcuY3BwOyBwYXRo
ID0gTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTk3MTJBNThGMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29k
aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElEQkxldmVsREJDb2Rpbmcu
aDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTcxMkE1OTAxNTAwNEVEQTAwNDhBRjEwIC8qIElEQk9iamVj
dFN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElEQk9iamVj
dFN0b3JlLmNwcDsgcGF0aCA9IE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODQ5LDYgKzE3ODQ4LDcgQEAKIAkJCQk5
NzEyQTU1ODE1MDA0RURBMDA0OEFGMTAgLyogSURCQW55LmggKi8sCiAJCQkJOTcxMkE1NTkxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQkFueS5pZGwgKi8sCiAJCQkJOTcxMkE1NUExNTAwNEVEQTAwNDhB
RjEwIC8qIElEQkJhY2tpbmdTdG9yZS5oICovLAorCQkJCTk3MTJBNThDMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJCYWNraW5nU3RvcmUuY3BwICovLAogCQkJCTk3MTJBNTVCMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJDYWxsYmFja3MuaCAqLywKIAkJCQk5NzEyQTU1QzE1MDA0RURBMDA0OEFGMTAgLyog
SURCQ3Vyc29yLmNwcCAqLywKIAkJCQk5NzEyQTU1RDE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vy
c29yLmggKi8sCkBAIC0xNzg5NSw4ICsxNzg5NSw2IEBACiAJCQkJOTcxMkE1ODkxNTAwNEVEQTAw
NDhBRjEwIC8qIElEQktleVJhbmdlLmNwcCAqLywKIAkJCQk5NzEyQTU4QTE1MDA0RURBMDA0OEFG
MTAgLyogSURCS2V5UmFuZ2UuaCAqLywKIAkJCQk5NzEyQTU4QjE1MDA0RURBMDA0OEFGMTAgLyog
SURCS2V5UmFuZ2UuaWRsICovLAotCQkJCTk3MTJBNThDMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJC
YWNraW5nU3RvcmUuY3BwICovLAotCQkJCTk3MTJBNThEMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJM
ZXZlbERCQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJOTcxMkE1OEUxNTAwNEVEQTAwNDhBRjEwIC8q
IElEQkxldmVsREJDb2RpbmcuY3BwICovLAogCQkJCTk3MTJBNThGMTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJMZXZlbERCQ29kaW5nLmggKi8sCiAJCQkJQkNDNjUxNDUxNTkyOTRDMzAwQUNDOUU0IC8q
IElEQk1ldGFkYXRhLmggKi8sCkBAIC0yMzgyMCw3ICsyMzgxOCw2IEBACiAJCQkJOTcxMkE1REMx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcxMkE1REYx
NTAwNEVEQTAwNDhBRjEwIC8qIElEQktleVBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJB
NUUzMTUwMDRFREEwMDQ4QUYxMCAvKiBJREJLZXlSYW5nZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
OTcxMkE1RTYxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkxldmVsREJCYWNraW5nU3RvcmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3MTJBNUU4MTUwMDRFREEwMDQ4QUYxMCAvKiBJREJMZXZlbERCQ29k
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzEyQTVFQTE1MDA0RURBMDA0OEFGMTAgLyogSURC
T2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MTJBNUVEMTUwMDRFREEwMDQ4QUYx
MCAvKiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggaW4gSGVhZGVycyAqLywKQEAgLTI3MDA2
LDYgKzI3MDAzLDcgQEAKIAkJCQk1MUUxRUNDMDBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29y
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NTA5OUM0MTEzNzBBNzgwMDA1OEQ1MTMgLyogSWNv
blVSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVCMDE1MDA0RURBMDA0OEFGMTAgLyog
SURCQW55LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTk3MTJBNUU1MTUwMDRFREEwMDQ4QUYxMCAv
KiBJREJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU4NUE2NjIxMUQ0RkFD
NTAwNEMzRTRCIC8qIElEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTcxMkE1QjUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkN1cnNvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5NzEyQTVCODE1MDA0RURBMDA0OEFGMTAgLyogSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNzAyMyw3ICsyNzAyMSw2IEBACiAJCQkJOTcxMkE1REIxNTAw
NEVEQTAwNDhBRjEwIC8qIElEQktleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVERTE1
MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEy
QTVFMjE1MDA0RURBMDA0OEFGMTAgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJOTcxMkE1RTUxNTAwNEVEQTAwNDhBRjEwIC8qIElEQkJhY2tpbmdTdG9yZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzEyQTVFNzE1MDA0RURBMDA0OEFGMTAgLyogSURCTGV2ZWxEQkNvZGlu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzEyQTVFOTE1MDA0RURBMDA0OEFGMTAgLyogSURC
T2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcxMkE1RUMxNTAwNEVEQTAwNDhB
RjEwIC8qIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkZha2VCYWNraW5nU3RvcmUu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCmlu
ZGV4IDRlMzdkM2VhYTkwNGY2YjkyMmYyOGQyMGI4OWVlMGIxZDUwYzFiZjkuLjAyZDJkNWQ0MjBj
ZjMzMzkxODUwNTQ2OGQ0NTk1ZGEzM2RhODlhNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSURCRmFrZUJhY2tpbmdTdG9yZS5oCkBAIC00Myw4ICs0Myw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50KSBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgT1ZFUlJJ
REUgeyB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVjb3JkSWRlbnRpZmllcj4gY3JlYXRl
SW52YWxpZFJlY29yZElkZW50aWZpZXIoKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPFJl
Y29yZElkZW50aWZpZXI+KCk7IH0KLQogICAgIHZpcnR1YWwgU3RyaW5nIGdldFJlY29yZChUcmFu
c2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXkmKSBPVkVSUklERSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgYm9v
bCBwdXRSZWNvcmQoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRl
bnRpZmllciopIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyT2JqZWN0U3RvcmUoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgT1ZFUlJJREUgeyB9CkBAIC02NSw4ICs2Myw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoVHJhbnNh
Y3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgT1ZFUlJJREUgeyByZXR1cm4gUGFz
c1JlZlB0cjxDdXJzb3I+KCk7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVu
SW5kZXhLZXlDdXJzb3IoVHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1
cnNvcjo6RGlyZWN0aW9uKSBPVkVSUklERSB7IHJldHVybiBQYXNzUmVmUHRyPEN1cnNvcj4oKTsg
fQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihUcmFuc2Fj
dGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pIE9WRVJS
SURFIHsgcmV0dXJuIFBhc3NSZWZQdHI8Q3Vyc29yPigpOyB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCkgT1ZFUlJJREUgeyByZXR1cm4g
UGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4oKTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>