<?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>103931</bug_id>
          
          <creation_ts>2012-12-03 14:42:51 -0800</creation_ts>
          <short_desc>IndexedDB: Replace use of ScriptExecutionContext::Task (Part 2)</short_desc>
          <delta_ts>2012-12-05 09:07:30 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>levin+threading</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>781898</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-03 14:42:51 -0800</bug_when>
    <thetext>IndexedDB: Replace use of ScriptExecutionContext::Task (Part 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781918</commentid>
    <comment_count>1</comment_count>
      <attachid>177343</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-03 15:05:47 -0800</bug_when>
    <thetext>Created attachment 177343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781921</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-03 15:08:55 -0800</bug_when>
    <thetext>Good riddance to ScriptExecutionContext::Task and incorrect usage of ThreadSafeRefCounted&lt;&gt; in IDB. Hooray!

But this does mean that the guts of each XXXXOperation class are spilled out explicitly rather than being hidden by the use of fancy-schmancy templates. I&apos;m a fan of making things explicit here, since we can see where objects are being held where IDs might be better, reference holding is more explicit (e.g. for the AbortOperations), etc.

dgrogan@, alecflett@ - take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781927</commentid>
    <comment_count>3</comment_count>
      <attachid>177343</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-03 15:10:58 -0800</bug_when>
    <thetext>Comment on attachment 177343
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:507
&gt; +        m_key = autoIncKey;

This is the only place where an XXXXOperation&apos;s member is modified. In the future (when operations are broken into multiple async steps) this might be common, but it&apos;s the odd case now. I am unsure whether to leave it like this or make a local copy.

(The operation is disposed of immediately following the perform() call so it doesn&apos;t affect the behavior at all.)

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:550
&gt; +    m_callbacks-&gt;onSuccess(m_key.release());

See also here. (Again, doesn&apos;t actually matter since the Operation is disposed immediately after this method returns.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781953</commentid>
    <comment_count>4</comment_count>
      <attachid>177343</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-03 15:33:19 -0800</bug_when>
    <thetext>Comment on attachment 177343
Patch

You can remove include &quot;ScriptExecutionContext.h from IDBTransactionBackendImpl.* without compilation problems?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781960</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-03 15:39:15 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 177343 [details])
&gt; You can remove include &quot;ScriptExecutionContext.h from IDBTransactionBackendImpl.* without compilation problems?

Yes, thanks. Nuked it from there and a few more places. Only IDBFactoryBackend* still needs it, since the chromium proxy uses it for permission checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781961</commentid>
    <comment_count>6</comment_count>
      <attachid>177353</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-03 15:39:24 -0800</bug_when>
    <thetext>Created attachment 177353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782014</commentid>
    <comment_count>7</comment_count>
      <attachid>177353</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-03 16:22:26 -0800</bug_when>
    <thetext>Comment on attachment 177353
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h:61
&gt; +        virtual void perform(IDBTransactionBackendImpl*) = 0;

I know everything is using it here, but I&apos;d sooner keep this as void perform() (without any params) so that future async operations that dont&apos; use IDBTransactionBackendImpl can use this without passing null or refactoring again later. This also allows you to completely encapsulate the target state and ownership (i.e. of a particular IDBTransactionBackendImpl) in the constructor, rather than spreading it between parameters to the constructor and a later call to perform()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782017</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-03 16:28:59 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 177353 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=177353&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h:61
&gt; &gt; +        virtual void perform(IDBTransactionBackendImpl*) = 0;
&gt; 
&gt; I know everything is using it here, but I&apos;d sooner keep this as void perform() (without any params) so that future async operations that dont&apos; use IDBTransactionBackendImpl can use this without passing null or refactoring again later. This also allows you to completely encapsulate the target state and ownership (i.e. of a particular IDBTransactionBackendImpl) in the constructor, rather than spreading it between parameters to the constructor and a later call to perform()

Not all use it - cursors are a special case (since they have an internal transaction reference due to lifetime issues) and AbortOperations MUST NOT use the transaction. The reason I did it this way is because all IDBTransactionBackendImpl::Operations are owned by an IDBTransactionBackendImpl so maintaining an &quot;up pointer&quot; is redundant. 

I would imagine that other queues of things might exist (c.f. the PendingXXXCall in IDBDatabaseBackendImpl) that wouldn&apos;t need a transaction, but there&apos;s nothing special about IDBTransactionBackendImpl::Operations that require its use... but maybe I&apos;m missing something. I&apos;ll ponder (or discuss offline)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782935</commentid>
    <comment_count>9</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-04 14:23:16 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; The reason I did it this way is because all IDBTransactionBackendImpl::Operations are owned by an IDBTransactionBackendImpl so maintaining an &quot;up pointer&quot; is redundant. 

FYI, discussed this offline w/ alec and he claims to be satisfied.

tony@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782973</commentid>
    <comment_count>10</comment_count>
      <attachid>177353</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-04 14:46:42 -0800</bug_when>
    <thetext>Comment on attachment 177353
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783263</commentid>
    <comment_count>11</comment_count>
      <attachid>177353</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-04 19:27:30 -0800</bug_when>
    <thetext>Comment on attachment 177353
Patch

Rejecting attachment 177353 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:
eddb/IDBTransactionBackendImpl.cpp
patching file Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h
patching file Source/WebCore/Modules/indexeddb/IDBTransactionBackendInterface.h
patching file Source/WebCore/Modules/indexeddb/IDBTransactionCoordinator.cpp
patching file Source/WebKit/chromium/tests/IDBAbortOnCorruptTest.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Tony Chang&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/15158099</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783788</commentid>
    <comment_count>12</comment_count>
      <attachid>177762</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-05 08:40:11 -0800</bug_when>
    <thetext>Created attachment 177762
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783807</commentid>
    <comment_count>13</comment_count>
      <attachid>177762</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-05 09:07:26 -0800</bug_when>
    <thetext>Comment on attachment 177762
Patch for landing

Clearing flags on attachment: 177762

Committed r136696: &lt;http://trac.webkit.org/changeset/136696&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783808</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-05 09:07:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177343</attachid>
            <date>2012-12-03 15:05:47 -0800</date>
            <delta_ts>2012-12-03 15:39:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103931-20121203150313.patch</filename>
            <type>text/plain</type>
            <size>116274</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjg0YjBmY2RhODlmN2U5
ZDUyZGRhNzRkZmRjYTQxMzhkNjJmNzhmYi4uY2Q1OTkwMzI1ZDIzZDE1MDc5MWYxMmY2OGI1NTk2
OTFkZmE0ZmE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMi0xMi0wMyAgSm9z
aHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUmVw
bGFjZSB1c2Ugb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayAoUGFydCAyKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTMxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWN0dWFsbHkgZHJvcCB1
c2Ugb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayBhbmQgcmVtb3ZlIGluY29ycmVjdCB1
c2FnZSBvZgorICAgICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZDw+LiBEZWZpbmUgYSBuZXcgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIGJhc2UgY2xhc3MKKyAgICAgICAgZm9y
IG9wZXJhdGlvbnM7IHN0b3JhZ2Ugb2YgcGVyLW9wZXJhdGlvbiBkYXRhIGJlY29tZXMgZXhwbGlj
aXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0ganVzdCBhIHJlZmFjdG9yLgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmg6IFJlbW92ZSBib2d1cyAiVGhyZWFk
U2FmZSIKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0
aW9uT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1
cnNvckl0ZXJhdGlvbk9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFu
Y2VPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vy
c29yQWR2YW5jZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVy
YXRpb25PcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJDdXJzb3JCYWNrZW5kSW1wbDo6
Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpDdXJz
b3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJz
b3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOiBSZW1vdmUgYm9ndXMgIlRo
cmVhZFNhZmUiCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlv
bjo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVh
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb246OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFi
b3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25D
aGFuZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b246OnBlcmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oOiBSZW1vdmUgYm9ndXMgIlRocmVhZFNhZmUiCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaDogUmVtb3ZlIGJvZ3VzICJUaHJl
YWRTYWZlIgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaDogUmVtb3ZlIGJvZ3VzICJUaHJlYWRTYWZlIgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5k
ZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAg
ICAoSURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlv
bjo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJJ
bmRleEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb246OkluZGV4Q291bnRPcGVy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhSZWZl
cmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJJbmRl
eEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjo6SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGw6
OkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5k
ZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6SW5kZXhWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRp
b246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5k
ZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJJbmRleEJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNr
ZW5kSW1wbDo6Z2V0S2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlIGJvZ3VzICJUaHJlYWRTYWZlIgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oOiBSZW1vdmUgYm9ndXMgIlRocmVhZFNhZmUiCisgICAg
ICAgIChJREJLZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmg6
IFJlbW92ZSBib2d1cyAiVGhyZWFkU2FmZSIKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2
YWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246Ok9iamVjdFN0b3JlUmV0cmlldmFsT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9i
amVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVy
YXRpb246Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0
b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpPYmplY3RT
dG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVEZWxldGlvbk9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpP
YmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0
b3JlQ2xlYXJPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246Ok9iamVj
dFN0b3JlQ2xlYXJPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6
Q3JlYXRlSW5kZXhPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6
RGVsZXRlSW5kZXhPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUpOgorICAg
ICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9w
ZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVj
dFN0b3JlQ291bnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb246Ok9i
amVjdFN0b3JlQ291bnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRl
SW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpEZWxldGVJbmRleEFib3J0T3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RT
dG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJ
bmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1
bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9i
amVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6cGVyZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVh
dGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9y
ZUN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmg6IFJlbW92
ZSBib2d1cyAiVGhyZWFkU2FmZSIKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0Lmg6IFJlbW92ZSBib2d1cyAiVGhyZWFkU2FmZSIKKyAgICAgICAgKElEQlJlcXVlc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCk6IEFwcGVhc2UgUmVmUHRyPD4gYWRvcHRpb24gc3RyaWN0bmVzcy4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJG
aXJlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5oOgorICAgICAgICAoT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbjo6fk9wZXJhdGlvbik6CisgICAgICAgIChJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg6IFJlbW92ZSBib2d1cyAiVGhyZWFkU2Fm
ZSIKKwogMjAxMi0xMi0wMyAgRmxvcmluIE1hbGl0YSAgPGZtYWxpdGFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFtTa2lhXSBEZWZlcnJlZCBTa0NhbnZhcyBzYXZlKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggZWIyNTE1MGRmODdiZjE3NmE2ZmI0MmFiNDgxMDQ2MmVmMmI4MGZhZC4u
MzIyNGJlZjM2ZjRhM2Y0MDJlYzhiMTA5M2QzN2RmMDg1NzE3OGE3ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMi0wMyAgSm9zaHVhIEJlbGwgIDxq
c2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUmVwbGFjZSB1c2Ugb2Yg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayAoUGFydCAyKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTMxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm93IHRoYXQgSURCQ2FsbGJhY2tzIHVzZXMg
cmVhbCBSZWZQdHI8PiBhIG1vY2sgY2xhc3MgbmVlZHMgdG8gYmUgaGVhcCBhbGxvY2F0ZWQuCisK
KyAgICAgICAgKiB0ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja0lEQkNhbGxiYWNrczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJ
REJDYWxsYmFja3M6Ok1vY2tJREJDYWxsYmFja3MpOgorICAgICAgICAoTW9ja0lEQkNhbGxiYWNr
cyk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0xMi0wMyAgRXVnZW5lIEtseXVj
aG5pa292ICA8ZXVzdGFzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBN
YWtlIG1haW4tdGhyZWFkIG1vbml0b3JpbmcgZ28gdGhyb3VnaCBJbnNwZWN0b3JDb250cm9sbGVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFj
a3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCmlu
ZGV4IGI4OGIwY2RlM2Y3MmFjZGVjODI3ODkwZTVjMjg5YTAxYjY2ZTIyYzIuLjFjZjRiN2JkMGRj
NTRlMWRhMTkyNjI0MWUyZTNjZjM3ZjA2ZmEwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVk
ZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAKQEAgLTQ0LDggKzQ0LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsK
IGNsYXNzIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U7CiAKLS8vIEZJWE1FOiBBbGwgY2hpbGQgY2xhc3NlcyBuZWVkIHRvIGJl
IG1hZGUgdGhyZWFkc2FmZS4KLWNsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxJREJDYWxsYmFja3M+IHsKK2NsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBS
ZWZDb3VudGVkPElEQkNhbGxiYWNrcz4gewogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkNhbGxi
YWNrcygpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggODY0ZTlmYWRlYjNmZWU2MWM3NDU4
NjlhNmM1YjQ3YjhiYzQ0MmMxYy4uZDI3NTg4MzE5NzE4N2RmMWI3Yjc0YWRkMWU1Zjg3YzNlNDQ3
MjdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUVycm9yLmgiCkBAIC00MiwzNCArNDEsNjQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9u
T3BlcmF0aW9uIHsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25P
cGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkN1cnNvckl0ZXJhdGlvbk9w
ZXJhdGlvbjo6cGVyZm9ybSwgY3Vyc29yLCBrZXksIGNhbGxiYWNrcyk7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKGN1cnNvciwga2V5LCBjYWxs
YmFja3MpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIEN1cnNvckl0ZXJh
dGlvbk9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CisgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQorICAgICAgICAsIG1fa2V5KGtleSkKKyAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kSW1wbD4gbV9jdXJzb3I7CisgICAgUmVmUHRyPElEQktleT4gbV9rZXk7
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbiB7CitjbGFzcyBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNr
VGFzaygmQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSwgY3Vyc29yLCBjb3VudCwgY2Fs
bGJhY2tzKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0
aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRp
YyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+LCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pOworICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKKyAgICAgICAg
LCBtX2NvdW50KGNvdW50KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1cnNvcjsKKyAg
ICB1bnNpZ25lZCBsb25nIG1fY291bnQ7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7CiB9OwogCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJ
dGVyYXRpb25PcGVyYXRpb24geworY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclBy
ZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZElt
cGw+IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vy
c29yLCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkN1cnNvclByZWZl
dGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtLCBjdXJzb3IsIG51bWJlclRvRmV0Y2gsIGNh
bGxiYWNrcyk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3Vyc29yUHJlZmV0Y2hJdGVy
YXRpb25PcGVyYXRpb24oY3Vyc29yLCBudW1iZXJUb0ZldGNoLCBjYWxsYmFja3MpKTsKICAgICB9
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwog
cHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgaW50IG51bWJlclRvRmV0Y2gsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCBpbnQgbnVtYmVy
VG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBt
X2N1cnNvcihjdXJzb3IpCisgICAgICAgICwgbV9udW1iZXJUb0ZldGNoKG51bWJlclRvRmV0Y2gp
CisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IG1fY3Vyc29yOworICAgIGludCBtX251bWJlclRv
RmV0Y2g7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCiBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmpl
Y3RTdG9yZSkKQEAgLTExMSwyOSArMTQwLDI4IEBAIHZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6
OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+CiAg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vyc29yLCB1bnNpZ25l
ZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKikKIHsKICAgICBJREJfVFJBQ0UoIkN1cnNvckFkdmFuY2VP
cGVyYXRpb24iKTsKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IHBy
cEN1cnNvcjsKLSAgICBpZiAoIWN1cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJzb3It
PmFkdmFuY2UoY291bnQpKSB7Ci0gICAgICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUq
PigwKSk7CisgICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwgIW1fY3Vyc29yLT5tX2N1cnNv
ci0+YWR2YW5jZShtX2NvdW50KSkgeworICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOwor
ICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSo+KDApKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZh
bHVlKCkpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1
cnNvci0+cHJpbWFyeUtleSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7CiB9CiAKLXZvaWQgSURCQ3Vy
c29yQmFja2VuZEltcGw6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29y
LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKQogewogICAgIElEQl9UUkFDRSgi
Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8
ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSkpIHsKLSAgICAg
ICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0
YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKKyAgICBpZiAoIW1fY3Vyc29y
LT5tX2N1cnNvciB8fCAhbV9jdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKG1fa2V5
LmdldCgpKSkgeworICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOworICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDAp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1
cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOworICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFy
eUtleSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgSURCQ3Vyc29yQmFja2VuZElt
cGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IEV4Y2VwdGlvbkNvZGUmKQpAQCAtMTU3LDUwICsxODUsNDkgQEAgdm9pZCBJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJ
REJDYWwKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCi12b2lkIElEQkN1cnNv
ckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4g
cHJwQ3Vyc29yLCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0
aW9uT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKQogewogICAg
IElEQl9UUkFDRSgiQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24iKTsKLSAgICBSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IHBycEN1cnNvcjsKIAogICAgIFZlY3Rv
cjxSZWZQdHI8SURCS2V5PiA+IGZvdW5kS2V5czsKICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4g
PiBmb3VuZFByaW1hcnlLZXlzOwogICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiA+IGZvdW5kVmFsdWVzOwogCi0gICAgaWYgKGN1cnNvci0+bV9jdXJzb3IpCi0gICAgICAg
IGN1cnNvci0+bV9zYXZlZEN1cnNvciA9IGN1cnNvci0+bV9jdXJzb3ItPmNsb25lKCk7CisgICAg
aWYgKG1fY3Vyc29yLT5tX2N1cnNvcikKKyAgICAgICAgbV9jdXJzb3ItPm1fc2F2ZWRDdXJzb3Ig
PSBtX2N1cnNvci0+bV9jdXJzb3ItPmNsb25lKCk7CiAKICAgICBjb25zdCBzaXplX3QgbWF4U2l6
ZUVzdGltYXRlID0gMTAgKiAxMDI0ICogMTAyNDsKICAgICBzaXplX3Qgc2l6ZUVzdGltYXRlID0g
MDsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7Ci0gICAg
ICAgIGlmICghY3Vyc29yLT5tX2N1cnNvciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVG
dW5jdGlvbigwKSkgewotICAgICAgICAgICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX251bWJlclRvRmV0Y2g7ICsraSkgeworICAgICAgICBpZiAoIW1f
Y3Vyc29yLT5tX2N1cnNvciB8fCAhbV9jdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9u
KDApKSB7CisgICAgICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBmb3VuZEtleXMuYXBwZW5kKGN1cnNvci0+bV9j
dXJzb3ItPmtleSgpKTsKLSAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQoY3Vyc29yLT5t
X2N1cnNvci0+cHJpbWFyeUtleSgpKTsKKyAgICAgICAgZm91bmRLZXlzLmFwcGVuZChtX2N1cnNv
ci0+bV9jdXJzb3ItPmtleSgpKTsKKyAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQobV9j
dXJzb3ItPm1fY3Vyc29yLT5wcmltYXJ5S2V5KCkpOwogCi0gICAgICAgIGlmIChjdXJzb3ItPm1f
Y3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikK
LSAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlKGN1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkpKTsKKyAgICAgICAgaWYgKG1f
Y3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlDdXJzb3IpCisgICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZShtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkpKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKCkpOwogCi0gICAgICAgIHNpemVFc3RpbWF0ZSArPSBjdXJzb3ItPm1f
Y3Vyc29yLT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7Ci0gICAgICAgIHNpemVFc3RpbWF0ZSArPSBj
dXJzb3ItPm1fY3Vyc29yLT5wcmltYXJ5S2V5KCktPnNpemVFc3RpbWF0ZSgpOwotICAgICAgICBp
ZiAoY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlDdXJzb3IpCi0gICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gY3Vyc29yLT5tX2N1cnNv
ci0+dmFsdWUoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIHNpemVFc3RpbWF0
ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKKyAgICAgICAg
c2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0
aW1hdGUoKTsKKyAgICAgICAgaWYgKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCisgICAgICAgICAgICBzaXplRXN0aW1h
dGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFy
KTsKIAogICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCFmb3VuZEtleXMuc2l6ZSgpKSB7Ci0gICAg
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSo+KDApKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJp
YWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBj
YWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRjaChmb3VuZEtleXMsIGZvdW5kUHJpbWFyeUtl
eXMsIGZvdW5kVmFsdWVzKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzV2l0aFByZWZldGNo
KGZvdW5kS2V5cywgZm91bmRQcmltYXJ5S2V5cywgZm91bmRWYWx1ZXMpOwogfQogCiB2b2lkIElE
QkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywgaW50
IHVudXNlZFByZWZldGNoZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggOWIyZDU3YjMw
ZGVkZDBjYjZhZjQxZjY1YWYxYTk1MzYwOTQ5OWUwZi4uM2RjNTRmM2YyMWZmOTZhY2RmZDc2OTNk
YzMxNDg0YWViY2M5OWFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMzAsNyArMzAs
NiBAQAogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00Miw3ICs0MSw3IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
PiB7CitjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gewogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UoKSB7fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggNzM4MjNjNWZkOTRhMmFlMDA4MjZmZjNi
MzUwYmQ1ZjczNjFkMWEyZC4uOWFkZWNmMmI2MWQ2MDdkNWQ4NzU1OTFhMGNkOTBlNmY1Mjc1ZWEy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAppbmRleCA0NjM4ODc3NjRiNTdkZTM2ZDVkOWQxN2JkYzNkZjk0OGY0YWM1OTVkLi5k
YzJlZTVmOWMwNWZlMmEwMmJmNjNiY2IzYzJmNGY3ODQ3MTA5NWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKLSNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmUuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgpAQCAtMzksNjQgKzM4LDExOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uIHsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpw
ZXJmb3JtLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihkYXRhYmFzZSwgb2Jq
ZWN0U3RvcmUpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgICAgICA6IG1fZGF0YWJhc2Uo
ZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Cisg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CiB9Owog
Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlv
biB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCiAgICAgewotICAgICAgICByZXR1cm4g
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSwg
ZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3Jl
KSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPik7CisgICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNl
KQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgeworICAgIH0KKwor
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOworICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwogfTsKIAotY2xhc3Mg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiB7CitjbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFz
ZUNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJlZl
cnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0sIGRhdGFiYXNlLCB2ZXJzaW9uLCBjYWxsYmFj
a3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihkYXRhYmFzZSwgdmVyc2lvbiwgY2FsbGJh
Y2tzLCBkYXRhYmFzZUNhbGxiYWNrcykpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lk
IHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4sIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPik7CisgICAgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisg
ICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFi
YXNlOworICAgIGludDY0X3QgbV92ZXJzaW9uOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNh
bGxiYWNrczsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVj
dFN0b3JlQWJvcnRPcGVyYXRpb24geworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7
CisgICAgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAg
ICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CiB9OwogCi1jbGFzcyBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIHsKK2NsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBzdGF0aWMgUGFz
c093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUNhbGxiYWNrVGFzaygmRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybSwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkp
OwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOworICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICAgICAg
OiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmUpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBt
X2RhdGFiYXNlOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVj
dFN0b3JlOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5n
ZUFib3J0T3BlcmF0aW9uIHsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25D
aGFuZ2VBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91
c0ludFZlcnNpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlv
dXNJbnRWZXJzaW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygm
VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtLCBkYXRhYmFzZSwgcHJldmlvdXNW
ZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgcHJldmlvdXNWZXJzaW9uLCBw
cmV2aW91c0ludFZlcnNpb24pKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJm
b3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+LCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0lu
dFZlcnNpb24pOworICAgIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVy
c2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCisgICAgICAgIDogbV9kYXRhYmFzZShk
YXRhYmFzZSkKKyAgICAgICAgLCBtX3ByZXZpb3VzVmVyc2lvbihwcmV2aW91c1ZlcnNpb24pCisg
ICAgICAgICwgbV9wcmV2aW91c0ludFZlcnNpb24ocHJldmlvdXNJbnRWZXJzaW9uKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsK
KyAgICBTdHJpbmcgbV9wcmV2aW91c1ZlcnNpb247CisgICAgaW50NjRfdCBtX3ByZXZpb3VzSW50
VmVyc2lvbjsKIH07CiAKIApAQCAtMjI0LDcgKzI3Nyw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmpl
Y3RTCiAgICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkKTsKICAgICBt
X21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBpZDsKIAotICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlLCB0cmFuc2FjdGlvbiksIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSkpKSB7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmUpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2Jq
ZWN0U3RvcmUpKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2Fj
dGlvbkluYWN0aXZlRXJyb3I7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIzMywxMCAr
Mjg2LDEwIEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTCiAgICAgcmV0dXJuIG9iamVjdFN0b3Jl
LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmpl
Y3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbiIpOwotICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2Ut
PmlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RTdG9y
ZS0+a2V5UGF0aCgpLCBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpKSkgeworICAgIGlmICgh
bV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlLT5pZCgpLCBtX29iamVjdFN0
b3JlLT5pZCgpLCBtX29iamVjdFN0b3JlLT5uYW1lKCksIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgo
KSwgbV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpKSkgewogICAgICAgICB0cmFuc2FjdGlv
bi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI1NSwzNiArMzA4LDM1IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBp
ZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNh
Y3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIAotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jl
LCB0cmFuc2FjdGlvbiksIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBvYmplY3RTdG9yZSkpKSB7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpLCBE
ZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUp
KSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0
aXZlRXJyb3I7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9vYmplY3RTdG9yZXMucmVt
b3ZlKGlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RT
dG9yZU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbiIpOwotICAgIGRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlLT5pZCgpLCBv
YmplY3RTdG9yZS0+aWQoKSk7CisgICAgbV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0
ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpKTsKIH0KIAotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbiIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cyhwcnBDYWxsYmFja3MpOwotICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgp
OwotICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IGRhdGFiYXNlLT5tX21ldGFkYXRhLmludFZlcnNp
b247Ci0gICAgQVNTRVJUKHZlcnNpb24gPiBvbGRWZXJzaW9uKTsKLSAgICBkYXRhYmFzZS0+bV9t
ZXRhZGF0YS5pbnRWZXJzaW9uID0gdmVyc2lvbjsKLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tp
bmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRW
ZXJzaW9uKSkgeworICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IG1fZGF0YWJhc2UtPmlkKCk7Cisg
ICAgaW50NjRfdCBvbGRWZXJzaW9uID0gbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9u
OworICAgIEFTU0VSVChtX3ZlcnNpb24gPiBvbGRWZXJzaW9uKTsKKyAgICBtX2RhdGFiYXNlLT5t
X21ldGFkYXRhLmludFZlcnNpb24gPSBtX3ZlcnNpb247CisgICAgaWYgKCFtX2RhdGFiYXNlLT5t
X2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBtX2RhdGFiYXNlLT5tX21ldGFk
YXRhLmludFZlcnNpb24pKSB7CiAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpOwotICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihlcnJvcik7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW5XaXRoVmVyc2lvbik7Ci0gICAgZGF0YWJhc2UtPm1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0
aFZlcnNpb24gPSBQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywg
ZGF0YWJhc2VDYWxsYmFja3MsIHZlcnNpb24pOwotICAgIGNhbGxiYWNrcy0+b25VcGdyYWRlTmVl
ZGVkKG9sZFZlcnNpb24sIHRyYW5zYWN0aW9uLCBkYXRhYmFzZSk7CisgICAgQVNTRVJUKCFtX2Rh
dGFiYXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3BlbldpdGhWZXJzaW9uKTsKKyAgICBtX2RhdGFi
YXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3BlbldpdGhWZXJzaW9uID0gUGVuZGluZ09wZW5XaXRo
VmVyc2lvbkNhbGw6OmNyZWF0ZShtX2NhbGxiYWNrcywgbV9kYXRhYmFzZUNhbGxiYWNrcywgbV92
ZXJzaW9uKTsKKyAgICBtX2NhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sIHRy
YW5zYWN0aW9uLCBtX2RhdGFiYXNlKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiBwcnBUcmFuc2FjdGlvbikKQEAgLTQzOSw3ICs0OTEsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihpbnQ2NF90IHJlcXVlc3Rl
ZFZlcgogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0
aW9uSW50ZXJmYWNlID0gY3JlYXRlVHJhbnNhY3Rpb24oMCwgb2JqZWN0U3RvcmVJZHMsIElEQlRy
YW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0
cmFuc2FjdGlvbkludGVyZmFjZS5nZXQoKSk7CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soVmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJlcXVlc3RlZFZl
cnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwgVmVyc2lv
bkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9tZXRhZGF0YS52ZXJzaW9uLCBt
X21ldGFkYXRhLmludFZlcnNpb24pKSkgeworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmVxdWVzdGVkVmVyc2lv
biwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJz
aW9uKSkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIEFTU0VS
VCghbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbik7CkBAIC01NTksMjMgKzYxMSwy
NSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQogICAg
ICAgICBtX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVzW2ldLmlkLCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVzW2ldKSk7CiB9CiAKLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6
cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSkKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0
cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG9iamVjdFN0b3JlLT5pZCgpKSk7Ci0gICAgZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnJl
bW92ZShvYmplY3RTdG9yZS0+aWQoKSk7CisgICAgQVNTRVJUKCF0cmFuc2FjdGlvbik7CisgICAg
QVNTRVJUKG1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG1fb2JqZWN0U3RvcmUt
PmlkKCkpKTsKKyAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5yZW1vdmUobV9vYmplY3RT
dG9yZS0+aWQoKSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBwcnBPYmplY3RTdG9yZSkKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKLSAg
ICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS0+
aWQoKSkpOwotICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUtPmlk
KCksIG9iamVjdFN0b3JlKTsKKyAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG1fb2JqZWN0U3RvcmUtPmlkKCkp
KTsKKyAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQobV9vYmplY3RTdG9yZS0+aWQo
KSwgbV9vYmplY3RTdG9yZSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVy
c2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJp
bmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBkYXRhYmFz
ZS0+bV9tZXRhZGF0YS52ZXJzaW9uID0gcHJldmlvdXNWZXJzaW9uOwotICAgIGRhdGFiYXNlLT5t
X21ldGFkYXRhLmludFZlcnNpb24gPSBwcmV2aW91c0ludFZlcnNpb247CisgICAgQVNTRVJUKCF0
cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS52ZXJzaW9uID0gbV9wcmV2
aW91c1ZlcnNpb247CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV9w
cmV2aW91c0ludFZlcnNpb247CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggODUwMDYyYzI5MTg3MzJiYTM0YTkyN2M3YjA3ZTk5NWVh
OTAzNjRkZi4uMTA5NTMxOGMzMjI5YTY5ZWUzOTk5ZWUwZjhlZmIzZjUwYzkwODdhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIC8vIFRo
aXMgaXMgaW1wbGVtZW50ZWQgYnkgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxs
eSBvdGhlcnMgKGluIG9yZGVyIHRvIHByb3h5CiAvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJy
aWVycykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcg
YW5kCiAvLyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3Nhcnku
Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiB7CitjbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKaW5kZXggNDY5M2U2MzdhZWRhYWNiYzRjMTlmYTBl
NDg1NDk0MmVkMTMyNWMzYi4uODQxZWMwZjNlMDQxNzBhZGE3MzUwZDQ0ZGE4NmE0YjI3MzliYzli
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VDYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oCkBAIC0zNCw5ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLy8gRklYTUU6IFVzZXMgVGhyZWFkU2FmZVJlZkNvdW50ZWQgZm9yIHN0b3JhZ2UgaW4g
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayBidXQKLS8vIGl0IGlzIG5ldmVyIGFjdHVhbGx5
IHVzZWQgb24gbXVsdGlwbGUgdGhyZWFkcy4gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0ODMKLWNs
YXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiB7CitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1Ymxp
YyBSZWZDb3VudGVkPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
MmQ1ODQyY2QxNTA0YzFmZGNhMTM1OGUxZjgzZDhkYWFiODQ5ZDM1OC4uNDczOGUzNWMyNjkxNzQ5
NDc3NDNjOTY0ZmVhZWE0MTM2NTA1YTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0zNSw3
ICszNSw2IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
CmluZGV4IGJhYjIxOWY1ZjRlYzU0ZGYyM2FjN2RmNGY0NTRiNzZmYWViNzJmMmUuLjgzYTI4NTcy
MjFhZDIyZTI3MTYxZjk5ODYzYzdlNDkzNTEwM2U0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaApAQCAtMjksNyArMjksNyBAQAogI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZV9oCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC00OCw3ICs0OCw3
IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAvLyBUaGlzIGlzIGltcGxlbWVudGVkIGJ5
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGluIG9yZGVyIHRv
IHByb3h5CiAvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBjYWxscyB0byB0
aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCiAvLyB0cmlnZ2VyIHdvcmsg
b24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1jbGFzcyBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZT4geworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoKTsK
ICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSgpIHsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcAppbmRleCA5YWQ0YjhkNmUzNmJhZjM0ZTZlM2Q5NjUxYTkxMWI3NTE3MmE4MjllLi5jZTBj
YzE3NGUxNTJhYjUwODA5Y2RhNTQxMDlhYzg5N2ZiMjJhNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApA
QCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNs
dWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNp
bmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5o
IgpAQCAtNDMsNDQgKzQyLDg4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uIHsKK2NsYXNzIElEQklu
ZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpD
dXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAg
c3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNr
VGFzaygmT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtLCBpbmRleCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKGluZGV4LCBrZXlS
YW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKICAgICB9CisgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToK
LSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWdu
ZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vy
c29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKKyAgICBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlS
YW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAgICwgbV9jdXJz
b3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKKyAg
ICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgdW5zaWduZWQgc2hvcnQgbV9k
aXJlY3Rpb247CisgICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1
cnNvclR5cGU7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCi1j
bGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9uIHsKK2NsYXNzIElE
QkluZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1
cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZJbmRleENvdW50T3BlcmF0aW9uOjpwZXJmb3JtLCBpbmRl
eCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEluZGV4Q291bnRPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3Mp
KTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBJbmRleENvdW50T3BlcmF0aW9uKFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBtX2luZGV4OworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsK
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKLWNsYXNzIElEQklu
ZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIHsK
K2NsYXNzIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFs
T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmSW5kZXhS
ZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0sIGluZGV4LCBrZXlSYW5n
ZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBj
YWxsYmFja3MpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBJbmRleFJlZmVyZW5jZWRWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fa2V5UmFu
Z2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKKyAgICBSZWZQ
dHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uIHsKK2NsYXNzIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4VmFsdWVS
ZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtLCBpbmRleCwga2V5UmFuZ2Us
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IElu
ZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsK
ICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKKyAgICBJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uKFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6
IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlS
YW5nZTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKIApAQCAt
OTUsMTkgKzEzOCwxOSBAQCBJREJJbmRleEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1w
bCgpCiB7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3Bl
cmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5z
aWduZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9p
ZCBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNF
KCJPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24iKTsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4odW50eXBlZERpcmVj
dGlvbik7CisgICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SURCQ3Vyc29yOjpEaXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsKIAogICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwogCi0gICAgc3dpdGNoIChjdXJz
b3JUeXBlKSB7CisgICAgc3dpdGNoIChtX2N1cnNvclR5cGUpIHsKICAgICBjYXNlIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yOgotICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCks
IGRpcmVjdGlvbik7CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1faW5kZXgtPmJhY2tp
bmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlv
bik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
SW5kZXhDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNraW5n
U3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQt
PmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFj
a2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNv
cih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJh
c2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQo
KSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcjoKICAgICBjYXNl
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlOgpAQCAtMTE2LDEy
ICsxNTksMTIgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVy
YXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGUKICAgICB9CiAKICAgICBpZiAoIWJh
Y2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNf
Y2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJz
b3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQo
KSwgY3Vyc29yVHlwZSwgdHJhbnNhY3Rpb24uZ2V0KCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFj
a2VuZCk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBj
dXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKKyAgICBSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFj
a2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBtX2N1cnNvclR5cGUsIHRyYW5zYWN0aW9uLCBtX2luZGV4
LT5tX29iamVjdFN0b3JlQmFja2VuZCk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJz
b3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkp
OwogfQogCiB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCkBAIC0xMjksNyArMTcyLDcgQEAg
dm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCB1bnNpZ25lZAogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1w
bDo6b3BlbkN1cnNvciIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsK
LSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0
aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
SW5kZXhDdXJzb3IsIGNhbGxiYWNrcykpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7
CiB9CiAKQEAgLTEzOCwxOCArMTgxLDE4IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3Bl
bktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduCiAgICAg
SURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yIik7CiAgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5n
ZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvciwg
Y2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgZGly
ZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvciwgY2FsbGJh
Y2tzKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotdm9pZCBJREJJbmRl
eEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3Zv
aWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklu
ZGV4Q291bnRPcGVyYXRpb24iKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7CiAKLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5i
YWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhU
KTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9p
bmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksIG1fa2V5UmFu
Z2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3Ip
IHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworICAgICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKGNvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTU3
LDcgKzIwMCw3IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlv
bjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKICAgICAgICAgKytjb3VudDsKICAg
ICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwogCi0g
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoY291bnQpOwogfQogCiB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNl
cHRpb25Db2RlJikKQEAgLTE2NSw2MyArMjA4LDYxIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudCIpOwogICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soSW5kZXhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBjYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKElu
ZGV4Q291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkpCiAgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBs
OjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxP
cGVyYXRpb24iKTsKIAogICAgIFJlZlB0cjxJREJLZXk+IGtleTsKIAotICAgIGlmIChrZXlSYW5n
ZS0+aXNPbmx5S2V5KCkpCi0gICAgICAgIGtleSA9IGtleVJhbmdlLT5sb3dlcigpOworICAgIGlm
IChtX2tleVJhbmdlLT5pc09ubHlLZXkoKSkKKyAgICAgICAga2V5ID0gbV9rZXlSYW5nZS0+bG93
ZXIoKTsKICAgICBlbHNlIHsKLSAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1
cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFi
YXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwg
a2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0
b3JlKCktPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2Vu
ZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhU
KTsKIAogICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBrZXkgPSBiYWNraW5n
U3RvcmVDdXJzb3ItPmtleSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleCh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CisgICAg
UmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQ
cmltYXJ5S2V5VmlhSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlk
KCksIG1faW5kZXgtPmlkKCksICprZXkpOwogCi0gICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPmJh
Y2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+
aWQoKSwgKnByaW1hcnlLZXkpOworICAgIFN0cmluZyB2YWx1ZSA9IG1faW5kZXgtPmJhY2tpbmdT
dG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlk
KCksICpwcmltYXJ5S2V5KTsKIAogICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewotICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGluZGV4LT5tX29iamVjdFN0b3JlQmFj
a2VuZC0+YXV0b0luY3JlbWVudCgpICYmICFpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtl
eVBhdGgoKS5pc051bGwoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbWFyeUtleSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQ
YXRoKCkpOworICAgIGlmIChtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+YXV0b0luY3Jl
bWVudCgpICYmICFtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+a2V5UGF0aCgpLmlzTnVs
bCgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSksIHByaW1hcnlLZXksIG1faW5kZXgtPm1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUo
dmFsdWUpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKIH0KIAogCi12b2lkIElEQkluZGV4QmFja2VuZElt
cGw6OkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQor
dm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElE
Ql9UUkFDRSgiSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiIpOwogCi0gICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPQotICAgICAgICAgICAg
aW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29i
amVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJD
dXJzb3I6Ok5FWFQpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2lu
Z1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNv
cih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJh
c2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQo
KSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKIAogICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0
PElEQktleSo+KDApKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2Fz
dDxJREJLZXkqPigwKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURC
S2V5PiBrZXlSZXN1bHQgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJ
bmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFi
YXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwg
KmJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCkpOworICAgIFJlZlB0cjxJREJLZXk+IGtleVJlc3Vs
dCA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwg
bV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksICpiYWNr
aW5nU3RvcmVDdXJzb3ItPmtleSgpKTsKICAgICBpZiAoIWtleVJlc3VsdCkgewotICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7CisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleVJlc3VsdC5nZXQoKSk7
CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXlSZXN1bHQuZ2V0KCkpOwogfQogCiB2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCkBAIC0yMjks
NyArMjcwLDcgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2EKICAgICBJREJfVFJBQ0UoIklEQklu
ZGV4QmFja2VuZEltcGw6OmdldCIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9u
UHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhSZWZlcmVuY2Vk
VmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tz
LCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJbmRl
eFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdl
LCBjYWxsYmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCkBAIC0y
MzgsNyArMjc5LDcgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXkoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SUQKICAgICBJREJfVFJBQ0UoIklE
QkluZGV4QmFja2VuZEltcGw6OmdldEtleSIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5z
YWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBjYWxsYmFja3MsIHRy
YW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEluZGV4VmFs
dWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkp
CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aAppbmRleCBjOTJmYzhkNDk1MmZjNGI4ZmE4MjI4YTRlZjg4YmJjNThjZWZmZDk3Li44NGRjNWI3
MjUyZWE1NjBmY2QyYjkxYWU3YWY3NzA0YTNiZDQ3NWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2Uu
aApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAog
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlPiB7CitjbGFzcyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaAppbmRleCA4NjRkYTFiNWE2MTFjOGYwOTEzOWQ2
ZmQ1ZGIzMDA2MzU1MmI0MmJlLi40NjVmODJlZmZhNGFkZWI2OWJiNjkyMzkwNWNlNDNlNTAxNTYw
YTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXku
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaApAQCAtMzAs
MTMgKzMwLDEzIEBACiAKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJLZXkgOiBw
dWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5
PiB7CitjbGFzcyBJREJLZXkgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291
bnRlZDxJREJLZXk+IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5
PiA+IEtleUFycmF5OwogCkBAIC0xNDUsOCArMTQ1LDggQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYiAtIGE7CiAgICAgfQogCi0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5
Pjo6cmVmOwotICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQktleT46OmRlcmVmOwor
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCS2V5Pjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8
SURCS2V5Pjo6ZGVyZWY7CiAKIHByaXZhdGU6CiAgICAgSURCS2V5KCkgOiBtX3R5cGUoSW52YWxp
ZFR5cGUpLCBtX251bWJlcigwKSwgbV9zaXplRXN0aW1hdGUoT3ZlcmhlYWRTaXplKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5oCmluZGV4IGQz
NDdmODQxMDZkNjg0NTliZGNjNTk3OTBkOGM3ZDQ2NWIxMzAxZjkuLjYwNjdlZjk1ZDY4NDcwOWVm
Y2E3Zjk2NDViMzA3MDIzNDgyYTI1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5UmFuZ2UuaApAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVkZSAiSURC
S2V5LmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwogCi1jbGFzcyBJREJLZXlSYW5nZSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJLZXlSYW5nZT4geworY2xhc3MgSURCS2V5UmFuZ2Ug
OiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJLZXlSYW5nZT4g
ewogcHVibGljOgogICAgIGVudW0gTG93ZXJCb3VuZFR5cGUgewogICAgICAgICBMb3dlckJvdW5k
T3BlbiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggY2E4YWQ2MTcyZGU5ODE1YjU2
ZWRkMzMxYTlhNzM1NmVjZjE5OGRhNi4uYTg2Y2VhZGU4MTAwZDEwNzQ0ZjU1Yjk1MzFlN2FjN2Q5
YjE4YTJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRU
YXNrLmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCQmluZGlu
Z1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgpAQCAtNDUsMTE0ICs0NCwy
MjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbiB7CitjbGFzcyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBz
dGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9i
amVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwga2V5UmFu
Z2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uKG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2Fs
bGJhY2tzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgT2JqZWN0U3RvcmVSZXRyaWV2
YWxPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkK
KyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdl
OworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIAotY2xhc3MgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uIHsKK2Ns
YXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgUGFz
c093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc093blB0cjxWZWN0b3I8
SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc093blB0cjxWZWN0b3I8aW50
NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcElu
ZGV4S2V5cykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9iamVj
dFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIHBvcEluZGV4SWRzLCBwb3BJbmRleEtl
eXMpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0b3JlU3RvcmFnZU9wZXJh
dGlvbihvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBwb3BJbmRl
eElkcywgcG9wSW5kZXhLZXlzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVy
Zm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRy
PElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBw
b3BJbmRleElkcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cyk7
CisgICAgT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90
PiA+IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhL
ZXlzKQorICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2tleShrZXkpCisgICAgICAgICwgbV9wdXRNb2RlKHB1
dE1vZGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fcG9w
SW5kZXhJZHMocG9wSW5kZXhJZHMpCisgICAgICAgICwgbV9wb3BJbmRleEtleXMocG9wSW5kZXhL
ZXlzKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gbV9vYmplY3RTdG9yZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX3Zh
bHVlOworICAgIFJlZlB0cjxJREJLZXk+IG1fa2V5OworICAgIFB1dE1vZGUgbV9wdXRNb2RlOwor
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIE93blB0cjxWZWN0b3I8
aW50NjRfdD4gPiBtX3BvcEluZGV4SWRzOworICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+
IG1fcG9wSW5kZXhLZXlzOwogfTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb24geworY2xhc3MgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc093blB0cjxWZWN0
b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IHBv
cEluZGV4SWRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmT2Jq
ZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCBwb3BJ
bmRleElkcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVj
dFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBwb3BJbmRleElkcykpOwog
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8
VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOworICAgIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8
VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMpCisgICAgICAgIDogbV9vYmplY3RTdG9yZShv
YmplY3RTdG9yZSkKKyAgICAgICAgLCBtX3BvcEluZGV4SWRzKHBvcEluZGV4SWRzKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RT
dG9yZTsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbV9wb3BJbmRleElkczsKIH07CiAK
LWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVy
YXRpb24geworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVEZWxl
dGlvbk9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVy
biBjcmVhdGVDYWxsYmFja1Rhc2soJk9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OnBlcmZv
cm0sIG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbihvYmpl
Y3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRp
YyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwor
ICAgIE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9vYmpl
Y3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAg
ICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElE
QktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJh
Y2tzOwogfTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVD
bGVhck9wZXJhdGlvbiB7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RT
dG9yZUNsZWFyT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGlj
IFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVh
dGVDYWxsYmFja1Rhc2soJk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0sIG9iamVj
dFN0b3JlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlLCBjYWxsYmFja3MpKTsK
ICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwor
ICAgIE9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fY2Fs
bGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVh
dGVJbmRleE9wZXJhdGlvbiB7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVh
dGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVy
YXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRp
YyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4g
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0
U3RvcmUsIGluZGV4LCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q3JlYXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGluZGV4KSk7CiAgICAgfQorICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6
Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgQ3Jl
YXRlSW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKKyAgICAg
ICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgp
CisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBt
X29iamVjdFN0b3JlOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4Owog
fTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRp
b24geworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRp
b24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNr
VGFzaygmRGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCBpbmRleCwg
dHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3Bl
cmF0aW9uKG9iamVjdFN0b3JlLCBpbmRleCkpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2
b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIERlbGV0ZUluZGV4T3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAgICAgIDogbV9vYmplY3RT
dG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsK
KyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKIH07CiAKLWNsYXNzIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbiB7
CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JP
cGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6
OlRhc2tUeXBlIHRhc2tUeXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNr
VGFzaygmT3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9y
ZSwgcmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24pOwor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlv
bihvYmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0YXNrVHlwZSkpOwog
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBPcGVuT2JqZWN0U3RvcmVDdXJzb3JP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSkKKyAgICAgICAgOiBtX29iamVj
dFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgICAgICwg
bV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykK
KyAgICAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IG1fcmFuZ2U7CisgICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gbV9kaXJlY3Rp
b247CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOwogfTsKIAotY2xhc3Mg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbiB7Citj
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9u
IDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFz
aygmT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIHJhbmdl
LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBP
YmplY3RTdG9yZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0b3JlLCByYW5nZSwgY2FsbGJhY2tzKSk7
CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbihQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fcmFu
Z2UocmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsK
KyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fcmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNr
cz4gbV9jYWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpD
cmVhdGVJbmRleEFib3J0T3BlcmF0aW9uIHsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmQ3JlYXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBpbmRleCkp
OwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOworICAgIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24o
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKKyAgICAgICAgOiBtX29iamVjdFN0b3Jl
KG9iamVjdFN0b3JlKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0KKwor
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwogfTsKIAotY2xhc3MgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiB7CitjbGFzcyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVi
bGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rh
c2soJkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCBpbmRl
eCk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlv
bihvYmplY3RTdG9yZSwgaW5kZXgpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBw
ZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKKyAgICBEZWxl
dGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisg
ICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gbV9vYmplY3RTdG9yZTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRl
eDsKIH07CiAKIApAQCAtMTgwLDM3ICsyODksMzYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHIK
ICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldCIpOwogICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IGtleVJhbmdlLCBjYWxsYmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwog
fQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFs
T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZv
cm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RS
QUNFKCJPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbiIpOwogICAgIFJlZlB0cjxJREJLZXk+
IGtleTsKLSAgICBpZiAoa2V5UmFuZ2UtPmlzT25seUtleSgpKQotICAgICAgICBrZXkgPSBrZXlS
YW5nZS0+bG93ZXIoKTsKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCisgICAgICAg
IGtleSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUt
PmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0
b3JlLT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX29iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCks
IG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7
CiAgICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcygpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGtleSA9IGJhY2tpbmdTdG9y
ZUN1cnNvci0+a2V5KCk7CiAgICAgfQogCi0gICAgU3RyaW5nIHdpcmVEYXRhID0gb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
LCAqa2V5KTsKKyAgICBTdHJpbmcgd2lyZURhdGEgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICprZXkpOwog
ICAgIGlmICh3aXJlRGF0YS5pc051bGwoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cygpOworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAob2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSAmJiAhb2JqZWN0
U3RvcmUtPmtleVBhdGgoKS5pc051bGwoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRhKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBvYmplY3RTdG9yZS0+a2V5UGF0aCgpKTsKKyAg
ICBpZiAobV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpICYmICFtX29iamVjdFN0b3JlLT5r
ZXlQYXRoKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRhKSwga2V5LCBtX29iamVj
dFN0b3JlLT5rZXlQYXRoKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURh
dGEpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEpKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMpCkBAIC0yMjYsNyArMzM0LDcgQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBQYXMKIAogICAgIEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5LmdldCgpKTsKIAot
ICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZVN0b3JhZ2VPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5z
YWN0aW9uLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkK
KyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVTdG9yYWdlT3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBuZXdJ
bmRleElkcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5cy5yZWxlYXNlKCkpKSkKICAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6QWJvcnRFcnJvcikpOwogfQogCkBAIC0zNzAsODIgKzQ3OCw3NiBAQCB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLAogICAgIGlmICh0cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaywgT2JqZWN0U3RvcmVJbmRleGVz
UmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIHRyYW5z
YWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIE9iamVjdFN0b3JlSW5kZXhlc1Jl
YWR5T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbmV3SW5kZXhJZHMucmVsZWFzZSgpKSkpCiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Ok9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IHBvcEluZGV4SWRzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJ
REJfVFJBQ0UoIk9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uIik7Ci0gICAgT3duUHRy
PFZlY3RvcjxpbnQ2NF90PiA+IGluZGV4SWRzID0gcG9wSW5kZXhJZHM7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBpbmRleElkcy0+c2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3BvcEluZGV4SWRzLT5zaXplKCk7ICsraSkKICAgICAgICAgdHJhbnNhY3Rpb24t
PmRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiBwcnBUcmFuc2FjdGlvbiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElk
cywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKK3ZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJm
b3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElEQl9U
UkFDRSgiT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgQVNT
RVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7Ci0g
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKLSAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7Ci0gICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+
IGluZGV4SWRzID0gcG9wSW5kZXhJZHM7Ci0gICAgT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4g
aW5kZXhLZXlzID0gcG9wSW5kZXhLZXlzOwotICAgIEFTU0VSVChpbmRleElkcyAmJiBpbmRleEtl
eXMgJiYgaW5kZXhJZHMtPnNpemUoKSA9PSBpbmRleEtleXMtPnNpemUoKSk7Ci0gICAgY29uc3Qg
Ym9vbCBhdXRvSW5jcmVtZW50ID0gb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKTsKKyAgICBB
U1NFUlQobV9wb3BJbmRleElkcyAmJiBtX3BvcEluZGV4S2V5cyAmJiBtX3BvcEluZGV4SWRzLT5z
aXplKCkgPT0gbV9wb3BJbmRleEtleXMtPnNpemUoKSk7CisgICAgY29uc3QgYm9vbCBhdXRvSW5j
cmVtZW50ID0gbV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwogICAgIGJvb2wga2V5V2Fz
R2VuZXJhdGVkID0gZmFsc2U7CiAKLSAgICBpZiAocHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYg
YXV0b0luY3JlbWVudCAmJiAha2V5KSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNL
ZXkgPSBvYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkodHJhbnNhY3Rpb24pOworICAgIGlmIChtX3B1
dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGF1dG9JbmNyZW1lbnQgJiYgIW1fa2V5KSB7CisgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGF1dG9JbmNLZXkgPSBtX29iamVjdFN0b3JlLT5nZW5lcmF0ZUtl
eSh0cmFuc2FjdGlvbik7CiAgICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7CiAgICAgICAg
IGlmICghYXV0b0luY0tleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25z
dHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUgcmVhY2hlZC4iKSk7Cisg
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIk1heGltdW0ga2V5IGdlbmVy
YXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBrZXkgPSBhdXRvSW5jS2V5OworICAgICAgICBtX2tleSA9IGF1dG9JbmNLZXk7CiAg
ICAgfQogCi0gICAgQVNTRVJUKGtleSAmJiBrZXktPmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKG1f
a2V5ICYmIG1fa2V5LT5pc1ZhbGlkKCkpOwogCiAgICAgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJ
ZGVudGlmaWVyIHJlY29yZElkZW50aWZpZXI7Ci0gICAgaWYgKHB1dE1vZGUgPT0gQWRkT25seSkg
eworICAgIGlmIChtX3B1dE1vZGUgPT0gQWRkT25seSkgewogICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0gICAgICAgIGJvb2wgb2sgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmtl
eUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCAm
cmVjb3JkSWRlbnRpZmllciwgZm91bmQpOworICAgICAgICBib29sIG9rID0gbV9vYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9v
YmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5LCAmcmVjb3JkSWRlbnRpZmllciwgZm91bmQpOwogICAg
ICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKKyAgICAgICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5j
ZS4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZvdW5k
KSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJLZXkgYWxyZWFkeSBl
eGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNv
bnN0cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIFZlY3RvcjxP
d25QdHI8SW5kZXhXcml0ZXI+ID4gaW5kZXhXcml0ZXJzOwogICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2U7Ci0gICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZS5n
ZXQoKSwga2V5LCBrZXlXYXNHZW5lcmF0ZWQsICppbmRleElkcywgKmluZGV4S2V5cywgJmluZGV4
V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElE
QkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVy
cm9yLCBlcnJvck1lc3NhZ2UpKTsKKyAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnModHJhbnNhY3Rp
b24sIG1fb2JqZWN0U3RvcmUuZ2V0KCksIG1fa2V5LCBrZXlXYXNHZW5lcmF0ZWQsICptX3BvcElu
ZGV4SWRzLCAqbV9wb3BJbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZlcnJvck1lc3NhZ2UpKSB7
CisgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBlcnJvck1lc3NhZ2UpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBk
byBhbnkgbXV0YXRpb24uICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rp
b24gaW4gY2FzZSBvZiBlcnJvci4KIAotICAgIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgdmFsdWUtPnRvV2ly
ZVN0cmluZygpLCAmcmVjb3JkSWRlbnRpZmllcik7CisgICAgbV9vYmplY3RTdG9yZS0+YmFja2lu
Z1N0b3JlKCktPnB1dFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9r
ZXksIG1fdmFsdWUtPnRvV2lyZVN0cmluZygpLCAmcmVjb3JkSWRlbnRpZmllcik7CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkgewogICAgICAg
ICBJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPm1fbWV0YWRhdGEu
aWQpOworICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmll
ciwgKm1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0
b3JlLT5tX21ldGFkYXRhLmlkKTsKICAgICB9CiAKLSAgICBpZiAoYXV0b0luY3JlbWVudCAmJiBw
dXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5
cGUpIHsKLSAgICAgICAgYm9vbCBvayA9IG9iamVjdFN0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3Io
dHJhbnNhY3Rpb24sIGtleS5nZXQoKSwgIWtleVdhc0dlbmVyYXRlZCk7CisgICAgaWYgKGF1dG9J
bmNyZW1lbnQgJiYgbV9wdXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBtX2tleS0+dHlwZSgpID09
IElEQktleTo6TnVtYmVyVHlwZSkgeworICAgICAgICBib29sIG9rID0gbV9vYmplY3RTdG9yZS0+
dXBkYXRlS2V5R2VuZXJhdG9yKHRyYW5zYWN0aW9uLCBtX2tleS5nZXQoKSwgIWtleVdhc0dlbmVy
YXRlZCk7CiAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgIkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOworICAgICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciB1cGRhdGluZyBr
ZXkgZ2VuZXJhdG9yLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleS5yZWxlYXNlKCkpOworICAgIG1fY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MobV9rZXkucmVsZWFzZSgpKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCkBAIC00
NTYsMjQgKzU1OCwyNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1
bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLAogICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwogICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKIAotICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRF
cnJvcikpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3Jl
RGVsZXRpb25PcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAg
IElEQl9UUkFDRSgiT2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbiIpOwogCi0gICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0
U3RvcmUtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9vYmplY3RT
dG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBt
X29iamVjdFN0b3JlLT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwog
ICAgIGlmIChiYWNraW5nU3RvcmVDdXJzb3IpIHsKIAogICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2Jq
ZWN0U3RvcmUtPmlkKCksIGJhY2tpbmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmllcigpKTsK
KyAgICAgICAgICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVSZWNvcmQo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNv
cmRJZGVudGlmaWVyKCkpOwogCiAgICAgICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNvci0+
Y29udGludWVGdW5jdGlvbigwKSk7CiAgICAgfQogCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0
aW9uQ29kZSYpCkBAIC00ODQsMTUgKzU4NiwxNSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQgog
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09O
TFkpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
IAotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZUNsZWFyT3Bl
cmF0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICgh
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgY2FsbGJhY2tzKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0K
IAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNsZWFyT3BlcmF0
aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNsZWFyT3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQog
ewogICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiIpOwotICAgIG9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0
U3RvcmUtPmlkKCkpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgbV9vYmplY3RT
dG9yZS0+YmFja2luZ1N0b3JlKCktPmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmpl
Y3RTdG9yZS0+aWQoKSk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCiBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlSW5kZXgoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykK
QEAgLTUwNyw3ICs2MDksNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4g
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NgogICAgIEFTU0VSVChp
ZCA+IG1fbWV0YWRhdGEubWF4SW5kZXhJZCk7CiAgICAgbV9tZXRhZGF0YS5tYXhJbmRleElkID0g
aWQ7CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCwgdHJhbnNhY3Rpb24pLCBDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpKSkgeworICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSwg
Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSkpIHsKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC01MTYsMTAgKzYxOCwxMCBAQCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3Jl
YXRlSW5kZXgoaW50NgogICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgi
Q3JlYXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQo
KSwgaW5kZXgtPm5hbWUoKSwgaW5kZXgtPmtleVBhdGgoKSwgaW5kZXgtPnVuaXF1ZSgpLCBpbmRl
eC0+bXVsdGlFbnRyeSgpKSkgeworICAgIGlmICghbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPmNyZWF0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1faW5kZXgt
PmlkKCksIG1faW5kZXgtPm5hbWUoKSwgbV9pbmRleC0+a2V5UGF0aCgpLCBtX2luZGV4LT51bmlx
dWUoKSwgbV9pbmRleC0+bXVsdGlFbnRyeSgpKSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJv
cnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTU0MCwxNyArNjQyLDE3IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElkLCBJ
REJUcmFuc2FjdGlvbkJhY2tlCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlv
blB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246
OlZFUlNJT05fQ0hBTkdFKTsKIAotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhE
ZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4LCB0cmFuc2FjdGlvbiksIERl
bGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCkpKSB7CisgICAgaWYg
KCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgaW5kZXgpLCBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5k
ZXgpKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbklu
YWN0aXZlRXJyb3I7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9pbmRleGVzLnJlbW92
ZShpbmRleElkKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJ
bmRleE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRl
SW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNh
Y3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJEZWxldGVJbmRleE9wZXJhdGlvbiIpOwotICAgIG9i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0
b3JlLT5pZCgpLCBpbmRleC0+aWQoKSk7CisgICAgbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCktPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1faW5kZXgt
PmlkKCkpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3Io
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCkBAIC01NTgsMjkg
KzY2MCwyOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cgogICAgIElEQl9UUkFDRSgiSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvciIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9t
KHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3Bl
bk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2UsIGRpcmVjdGlv
biwgY2FsbGJhY2tzLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24pKSkgeworICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCByYW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MsIHRhc2tUeXBlKSkpIHsKICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogICAgIH0KIH0KIAotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJf
VFJBQ0UoIk9wZW5PYmplY3RTdG9yZUN1cnNvciIpOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9yZS0+YmFja2luZ1N0
b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCks
IHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCkt
Pm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBt
X3JhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CiAgICAgLy8gVGhlIGZyb250ZW5kIGhhcyBiZWd1
biBpbmRleGluZywgc28gdGhpcyBwYXVzZXMgdGhlIHRyYW5zYWN0aW9uCiAgICAgLy8gdW50aWwg
dGhlIGluZGV4aW5nIGlzIGNvbXBsZXRlLiBUaGlzIGNhbid0IGhhcHBlbiBhbnkgZWFybGllcgog
ICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBzd2l0Y2ggdG8gZWFybHkgbW9kZSBpbiBj
YXNlIG11bHRpcGxlCiAgICAgLy8gaW5kZXhlcyBhcmUgYmVpbmcgY3JlYXRlZCBpbiBhIHJvdywg
d2l0aCBwdXQoKSdzIGluIGJldHdlZW4uCi0gICAgaWYgKHRhc2tUeXBlID09IElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2spCisgICAgaWYgKG1fdGFza1R5cGUg
PT0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZlVGFzaykKICAgICAg
ICAgdHJhbnNhY3Rpb24tPmFkZFByZWVtcHRpdmVFdmVudCgpOwogICAgIGlmICghYmFja2luZ1N0
b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
cyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IElE
QkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFja2luZ1N0b3JlQ3Vyc29yLnJlbGVhc2UoKSwg
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IsIHRhc2tUeXBlLCB0
cmFuc2FjdGlvbi5nZXQoKSwgb2JqZWN0U3RvcmUuZ2V0KCkpOwotICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNv
ci0+dmFsdWUoKSk7CisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5yZWxlYXNlKCks
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yLCBtX3Rhc2tUeXBl
LCB0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZS5nZXQoKSk7CisgICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcyhjdXJzb3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJz
b3ItPnZhbHVlKCkpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
UHRyLCBFeGNlcHRpb25Db2RlJikKQEAgLTU4OCwxNyArNjkwLDE3IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBh
c3NSZWZQdHI8CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3Vu
dCIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIHJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlQ291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCByYW5nZSwgY2FsbGJhY2tzKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0K
IAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0
aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBy
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIk9iamVjdFN0
b3JlQ291bnRPcGVyYXRpb24iKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7Ci0gICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBvYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcih0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2Jq
ZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9vYmplY3RT
dG9yZS0+YmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUtleUN1cnNvcih0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX3JhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwog
ICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNj
ZXNzKGNvdW50KTsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTYwNiw3ICs3MDgsNyBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0
RXhlY3V0aQogICAgICAgICArK2NvdW50OwogICAgIH0gd2hpbGUgKGJhY2tpbmdTdG9yZUN1cnNv
ci0+Y29udGludWVGdW5jdGlvbigwKSk7CiAKLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3Vu
dCk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CiB9CiAKIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQpAQCAtNjE3LDE3ICs3MTksMTggQEAg
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCiAgICAgICAgIG1f
aW5kZXhlcy5zZXQoaW5kZXhlc1tpXS5pZCwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1f
ZGF0YWJhc2UsIHRoaXMsIGluZGV4ZXNbaV0pKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQordm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewotICAgIEFTU0VSVChv
YmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGluZGV4LT5pZCgpKSk7Ci0gICAgb2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5yZW1vdmUoaW5kZXgtPmlkKCkpOworICAgIEFTU0VSVCghdHJhbnNh
Y3Rpb24pOworICAgIEFTU0VSVChtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMobV9p
bmRleC0+aWQoKSkpOworICAgIG1fb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5yZW1vdmUobV9pbmRl
eC0+aWQoKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBwcnBJbmRleCkKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gaW5kZXggPSBwcnBJbmRleDsKLSAgICBBU1NFUlQoIW9iamVjdFN0b3JlLT5tX2luZGV4ZXMu
Y29udGFpbnMoaW5kZXgtPmlkKCkpKTsKLSAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnNldChp
bmRleC0+aWQoKSwgaW5kZXgpOworICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOworICAgIEFTU0VS
VCghbV9vYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKG1faW5kZXgtPmlkKCkpKTsKKyAg
ICBtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KG1faW5kZXgtPmlkKCksIG1faW5kZXgpOwog
fQogCiBQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2VuZXJh
dGVLZXkoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggODNiZGZkY2VkOTA2ZjBiYjc2
MTU5ODNiYzIyNmYyZDJmMjNmOGE0OC4uNzM5YTBkNzU2OWYwNzVkZTk3N2U4OTcxNjIyYzI0NTE1
Yjk3MTdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTI4LDcgKzI4
LDggQEAKIAogI2luY2x1ZGUgIklEQkN1cnNvci5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
QEAgLTQ1LDcgKzQ2LDcgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiB0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiB7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IGVkYWE3YmEx
NmI2OTFhZTA2N2U4YWQ3NjIxMzcwNjBiYmQ1YmY3NDAuLmIyMTE4MjBiYzM4ZjkyNzc1YWM3NzQ1
NTNiMTZlNzNkMDYxOGYzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmgKQEAgLTExMSw4ICsxMTEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHRy
YW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0Y2goKTsKIAotICAgIHVzaW5nIFRocmVhZFNhZmVS
ZWZDb3VudGVkPElEQkNhbGxiYWNrcz46OnJlZjsKLSAgICB1c2luZyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxJREJDYWxsYmFja3M+OjpkZXJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQkNhbGxi
YWNrcz46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQkNhbGxiYWNrcz46OmRlcmVmOwog
CiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSgp
IHsgcmV0dXJuIG1fdGFza1R5cGU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRl
eCBjNTQyZmRkNzkwODk5ZWVhYmExNDQxMjRlOGUzMmU5MzQzZTcwNGUwLi5lMjg3MzZlYjBlMTZm
NTJkYWNmY2M1M2Q3NjI2ZTFjYWM1MTEzOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNw
cApAQCAtNTUsNiArNTUsOSBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKGludDY0X3QgaWQsIGNvbnN0IFZlY3RvcjxpbgogICAgICwgbV90YXNr
VGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKQog
ICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQogeworICAgIC8vIFdlIHBhc3MgYSBy
ZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgorICAgIHJl
bGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworCiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25D
b29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKIH0KIApAQCAtNzYsNyAr
NzksNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcgogICAgIHJldHVybiBvYmplY3RTdG9yZS5y
ZWxlYXNlKCk7CiB9CiAKLWJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVU
YXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRh
c2spCitib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayhUYXNrVHlw
ZSB0eXBlLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0cjxPcGVyYXRpb24+
IGFib3J0VGFzaykKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTIzLDggKzEyNiw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6YWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKIAogICAgIC8v
IFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVl
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5w
ZXJmb3JtVGFzaygwKTsKKyAgICAgICAgT3duUHRyPE9wZXJhdGlvbj4gdGFzayhtX2Fib3J0VGFz
a1F1ZXVlLnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSgwKTsKICAgICB9CiAK
ICAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBi
ZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcwpAQCAtMjU0LDggKzI1Nyw4IEBAIHZv
aWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4qCiAgICAgVGFza1F1ZXVlKiB0YXNrUXVldWUgPSBtX3BlbmRp
bmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1
ZTsKICAgICB3aGlsZSAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYmIG1fc3RhdGUgIT0gRmluaXNo
ZWQpIHsKICAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7Ci0gICAgICAgIE93blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKHRhc2tRdWV1ZS0+dGFrZUZpcnN0
KCkpOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygwKTsKKyAgICAgICAgT3duUHRyPE9wZXJh
dGlvbj4gdGFzayh0YXNrUXVldWUtPnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9y
bSh0aGlzKTsKIAogICAgICAgICAvLyBFdmVudCBpdHNlbGYgbWF5IGNoYW5nZSB3aGljaCBxdWV1
ZSBzaG91bGQgYmUgcHJvY2Vzc2VkIG5leHQuCiAgICAgICAgIHRhc2tRdWV1ZSA9IG1fcGVuZGlu
Z1ByZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IGQyYTk1ODUwNjA4ZGE4OWY5ZDE3NDUzNWYz
YmIxYTI4YzhjYjMyYTkuLjdkZDBjMjkzMzg4NTI0Mjc4MjcwYzhlOTY0NzA2NGUzZDE0ZTRlZTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTU2LDEyICs1NiwxOCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhJ
REJUcmFuc2FjdGlvbkNhbGxiYWNrcyogY2FsbGJhY2tzKSB7IG1fY2FsbGJhY2tzID0gY2FsbGJh
Y2tzOyB9CiAKKyAgICBjbGFzcyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+T3BlcmF0aW9uKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKSA9IDA7CisgICAgfTsKKwogICAgIHZvaWQgYWJvcnQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7CiAgICAgdm9pZCBydW4oKTsKICAgICB1bnNpZ25l
ZCBzaG9ydCBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgYm9vbCBpc0Zpbmlz
aGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBGaW5pc2hlZDsgfQotICAgIGJvb2wgc2No
ZWR1bGVUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywg
UGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2sgPSBudWxs
cHRyKSB7IHJldHVybiBzY2hlZHVsZVRhc2soTm9ybWFsVGFzaywgdGFzaywgYWJvcnRUYXNrKTsg
fQotICAgIGJvb2wgc2NoZWR1bGVUYXNrKFRhc2tUeXBlLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+LCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGFib3J0VGFzayA9IG51bGxwdHIpOworICAgIGJvb2wgc2NoZWR1bGVUYXNrKFBhc3NPd25Q
dHI8T3BlcmF0aW9uPiB0YXNrLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVs
bHB0cikgeyByZXR1cm4gc2NoZWR1bGVUYXNrKE5vcm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7
IH0KKyAgICBib29sIHNjaGVkdWxlVGFzayhUYXNrVHlwZSwgUGFzc093blB0cjxPcGVyYXRpb24+
LCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrID0gbnVsbHB0cik7CiAgICAgdm9pZCBy
ZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZEltcGwqKTsKICAgICB2b2lkIHVucmVn
aXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmRJbXBsKik7CiAgICAgdm9pZCBhZGRQcmVl
bXB0aXZlRXZlbnQoKSB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMrKzsgfQpAQCAtOTcsNyAr
MTAzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNl
OwogCi0gICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4gPiBUYXNrUXVldWU7CisgICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8T3BlcmF0aW9uPiA+IFRh
c2tRdWV1ZTsKICAgICBUYXNrUXVldWUgbV90YXNrUXVldWU7CiAgICAgVGFza1F1ZXVlIG1fcHJl
ZW1wdGl2ZVRhc2tRdWV1ZTsKICAgICBUYXNrUXVldWUgbV9hYm9ydFRhc2tRdWV1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggY2M3NGQxMTU2ODE3YmEzMjhhMWMxZDc5
NmM2MTJiYjFkNTJhYjg4NS4uN2E4NWM5MmNmM2EwN2I3YmE4NjAwMjExYmU3ZGE1MzVkYjc1Nzhm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTI3LDcgKzI3LDggQEAK
ICNkZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlX2gKIAogI2luY2x1ZGUgIklE
QkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKQEAgLTQ0
LDcgKzQ1LDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIC8vIFRoaXMgaXMgaW1wbGVt
ZW50ZWQgYnkgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMg
KGluIG9yZGVyIHRvIHByb3h5CiAvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFs
bCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCiAvLyB0
cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1jbGFzcyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB7CitjbGFzcyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwCmluZGV4IGVjMDc5ZjUwY2QzY2JjZTlkZmUy
MTIxMzlkNDYwN2UxOTQ0ZjNhMmIuLmEzZDgwZmQ0MzU5NDZiOWM1MTQ4OTMzMzY2YWMwMGFhMGIx
MDgyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRP
bkNvcnJ1cHRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkFi
b3J0T25Db3JydXB0VGVzdC5jcHAKQEAgLTQzLDggKzQzLDEwIEBAIG5hbWVzcGFjZSB7CiAKIGNs
YXNzIE1vY2tJREJDYWxsYmFja3MgOiBwdWJsaWMgSURCQ2FsbGJhY2tzIHsKIHB1YmxpYzoKLSAg
ICBNb2NrSURCQ2FsbGJhY2tzKCkgOiBtX3dhc0Vycm9yQ2FsbGVkKGZhbHNlKSB7IH0KLQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tJREJDYWxsYmFja3M+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tJREJDYWxsYmFja3MoKSk7CisgICAgfQogICAg
IHZpcnR1YWwgfk1vY2tJREJDYWxsYmFja3MoKQogICAgIHsKICAgICAgICAgRVhQRUNUX1RSVUUo
bV93YXNFcnJvckNhbGxlZCk7CkBAIC02OSw2ICs3MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgb25TdWNjZXNzV2l0aFByZWZldGNoKGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+
JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQo
KSB7IH0KIHByaXZhdGU6CisgICAgTW9ja0lEQkNhbGxiYWNrcygpIDogbV93YXNFcnJvckNhbGxl
ZChmYWxzZSkgeyB9CisKICAgICBib29sIG1fd2FzRXJyb3JDYWxsZWQ7CiB9OwogCkBAIC0xMTYs
MTEgKzEyMCwxMSBAQCBURVNUKElEQkFib3J0VGVzdCwgVGhlVGVzdCkKIHsKICAgICBSZWZQdHI8
SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBmYWN0b3J5ID0gRmFpbGluZ0lEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6Y3JlYXRlKCk7CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gImRiIG5hbWUiOwotICAg
IE1vY2tJREJDYWxsYmFja3MgY2FsbGJhY2tzOworICAgIFJlZlB0cjxNb2NrSURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBNb2NrSURCQ2FsbGJhY2tzOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8RmFr
ZUlEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IEZha2VJREJEYXRhYmFz
ZUNhbGxiYWNrczo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4g
PSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKCJodHRwIiwgImxvY2FsaG9zdCIsIDgxKTsKICAgICBj
b25zdCBpbnQ2NF90IER1bW15VmVyc2lvbiA9IDI7Ci0gICAgZmFjdG9yeS0+b3BlbihuYW1lLCBE
dW1teVZlcnNpb24sICZjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCBvcmlnaW4sIDAgLypG
cmFtZSovLCBTdHJpbmcoKSAvKnBhdGgqLyk7CisgICAgZmFjdG9yeS0+b3BlbihuYW1lLCBEdW1t
eVZlcnNpb24sIGNhbGxiYWNrcy5nZXQoKSwgZGF0YWJhc2VDYWxsYmFja3MsIG9yaWdpbiwgMCAv
KkZyYW1lKi8sIFN0cmluZygpIC8qcGF0aCovKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177353</attachid>
            <date>2012-12-03 15:39:24 -0800</date>
            <delta_ts>2012-12-05 08:40:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103931-20121203153650.patch</filename>
            <type>text/plain</type>
            <size>118490</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjg0YjBmY2RhODlmN2U5
ZDUyZGRhNzRkZmRjYTQxMzhkNjJmNzhmYi4uY2Q1OTkwMzI1ZDIzZDE1MDc5MWYxMmY2OGI1NTk2
OTFkZmE0ZmE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMi0xMi0wMyAgSm9z
aHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUmVw
bGFjZSB1c2Ugb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayAoUGFydCAyKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTMxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWN0dWFsbHkgZHJvcCB1
c2Ugb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayBhbmQgcmVtb3ZlIGluY29ycmVjdCB1
c2FnZSBvZgorICAgICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZDw+LiBEZWZpbmUgYSBuZXcgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIGJhc2UgY2xhc3MKKyAgICAgICAgZm9y
IG9wZXJhdGlvbnM7IHN0b3JhZ2Ugb2YgcGVyLW9wZXJhdGlvbiBkYXRhIGJlY29tZXMgZXhwbGlj
aXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0ganVzdCBhIHJlZmFjdG9yLgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmg6IFJlbW92ZSBib2d1cyAiVGhyZWFk
U2FmZSIKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0
aW9uT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1
cnNvckl0ZXJhdGlvbk9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFu
Y2VPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vy
c29yQWR2YW5jZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVy
YXRpb25PcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJDdXJzb3JCYWNrZW5kSW1wbDo6
Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpDdXJz
b3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJz
b3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oOiBSZW1vdmUgYm9ndXMgIlRo
cmVhZFNhZmUiCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlv
bjo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVh
dGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb246OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFi
b3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25D
aGFuZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRp
b246OnBlcmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oOiBSZW1vdmUgYm9ndXMgIlRocmVhZFNhZmUiCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaDogUmVtb3ZlIGJvZ3VzICJUaHJl
YWRTYWZlIgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHA6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaDogUmVtb3ZlIGJvZ3VzICJUaHJlYWRTYWZlIgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5k
ZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAg
ICAoSURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlv
bjo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJJ
bmRleEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkluZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb246OkluZGV4Q291bnRPcGVy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhSZWZl
cmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJJbmRl
eEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjo6SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkluZGV4QmFja2VuZEltcGw6
OkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5k
ZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6SW5kZXhWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRp
b246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5k
ZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJJbmRleEJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNr
ZW5kSW1wbDo6Z2V0S2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlIGJvZ3VzICJUaHJlYWRTYWZlIgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oOiBSZW1vdmUgYm9ndXMgIlRocmVhZFNhZmUiCisgICAg
ICAgIChJREJLZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmg6
IFJlbW92ZSBib2d1cyAiVGhyZWFkU2FmZSIKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2
YWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246Ok9iamVjdFN0b3JlUmV0cmlldmFsT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9i
amVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVy
YXRpb246Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0
b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpPYmplY3RT
dG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpjcmVhdGUpOgor
ICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVEZWxldGlvbk9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpP
YmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0
b3JlQ2xlYXJPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246Ok9iamVj
dFN0b3JlQ2xlYXJPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6
Q3JlYXRlSW5kZXhPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6
RGVsZXRlSW5kZXhPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUpOgorICAg
ICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9w
ZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVj
dFN0b3JlQ291bnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb246Ok9i
amVjdFN0b3JlQ291bnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5k
ZXhBYm9ydE9wZXJhdGlvbjo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRl
SW5kZXhBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpEZWxldGVJbmRleEFib3J0T3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RT
dG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJ
bmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1
bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9i
amVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6cGVyZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVh
dGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9y
ZUN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRP
cGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmg6IFJlbW92
ZSBib2d1cyAiVGhyZWFkU2FmZSIKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0Lmg6IFJlbW92ZSBib2d1cyAiVGhyZWFkU2FmZSIKKyAgICAgICAgKElEQlJlcXVlc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCk6IEFwcGVhc2UgUmVmUHRyPD4gYWRvcHRpb24gc3RyaWN0bmVzcy4K
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxlVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0YXNrVGltZXJG
aXJlZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5oOgorICAgICAgICAoT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbjo6fk9wZXJhdGlvbik6CisgICAgICAgIChJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6OnNjaGVkdWxlVGFzayk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg6IFJlbW92ZSBib2d1cyAiVGhyZWFkU2Fm
ZSIKKwogMjAxMi0xMi0wMyAgRmxvcmluIE1hbGl0YSAgPGZtYWxpdGFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFtTa2lhXSBEZWZlcnJlZCBTa0NhbnZhcyBzYXZlKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggZWIyNTE1MGRmODdiZjE3NmE2ZmI0MmFiNDgxMDQ2MmVmMmI4MGZhZC4u
MzIyNGJlZjM2ZjRhM2Y0MDJlYzhiMTA5M2QzN2RmMDg1NzE3OGE3ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMi0wMyAgSm9zaHVhIEJlbGwgIDxq
c2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUmVwbGFjZSB1c2Ugb2Yg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayAoUGFydCAyKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTMxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm93IHRoYXQgSURCQ2FsbGJhY2tzIHVzZXMg
cmVhbCBSZWZQdHI8PiBhIG1vY2sgY2xhc3MgbmVlZHMgdG8gYmUgaGVhcCBhbGxvY2F0ZWQuCisK
KyAgICAgICAgKiB0ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja0lEQkNhbGxiYWNrczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJ
REJDYWxsYmFja3M6Ok1vY2tJREJDYWxsYmFja3MpOgorICAgICAgICAoTW9ja0lEQkNhbGxiYWNr
cyk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0xMi0wMyAgRXVnZW5lIEtseXVj
aG5pa292ICA8ZXVzdGFzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBN
YWtlIG1haW4tdGhyZWFkIG1vbml0b3JpbmcgZ28gdGhyb3VnaCBJbnNwZWN0b3JDb250cm9sbGVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFj
a3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCmlu
ZGV4IGI4OGIwY2RlM2Y3MmFjZGVjODI3ODkwZTVjMjg5YTAxYjY2ZTIyYzIuLjFjZjRiN2JkMGRj
NTRlMWRhMTkyNjI0MWUyZTNjZjM3ZjA2ZmEwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVk
ZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAKQEAgLTQ0LDggKzQ0LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsK
IGNsYXNzIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U7CiAKLS8vIEZJWE1FOiBBbGwgY2hpbGQgY2xhc3NlcyBuZWVkIHRvIGJl
IG1hZGUgdGhyZWFkc2FmZS4KLWNsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxJREJDYWxsYmFja3M+IHsKK2NsYXNzIElEQkNhbGxiYWNrcyA6IHB1YmxpYyBS
ZWZDb3VudGVkPElEQkNhbGxiYWNrcz4gewogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkNhbGxi
YWNrcygpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggODY0ZTlmYWRlYjNmZWU2MWM3NDU4
NjlhNmM1YjQ3YjhiYzQ0MmMxYy4uZDI3NTg4MzE5NzE4N2RmMWI3Yjc0YWRkMWU1Zjg3YzNlNDQ3
MjdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNs
dWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUVycm9yLmgiCkBAIC00MiwzNCArNDEsNjQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9u
T3BlcmF0aW9uIHsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25P
cGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkN1cnNvckl0ZXJhdGlvbk9w
ZXJhdGlvbjo6cGVyZm9ybSwgY3Vyc29yLCBrZXksIGNhbGxiYWNrcyk7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKGN1cnNvciwga2V5LCBjYWxs
YmFja3MpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIEN1cnNvckl0ZXJh
dGlvbk9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CisgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQorICAgICAgICAsIG1fa2V5KGtleSkKKyAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kSW1wbD4gbV9jdXJzb3I7CisgICAgUmVmUHRyPElEQktleT4gbV9rZXk7
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbiB7CitjbGFzcyBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNr
VGFzaygmQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSwgY3Vyc29yLCBjb3VudCwgY2Fs
bGJhY2tzKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0
aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRp
YyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+LCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pOworICAgIEN1cnNvckFkdmFuY2VPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKKyAgICAgICAg
LCBtX2NvdW50KGNvdW50KQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1cnNvcjsKKyAg
ICB1bnNpZ25lZCBsb25nIG1fY291bnQ7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxs
YmFja3M7CiB9OwogCi1jbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJ
dGVyYXRpb25PcGVyYXRpb24geworY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclBy
ZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZElt
cGw+IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vy
c29yLCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkN1cnNvclByZWZl
dGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtLCBjdXJzb3IsIG51bWJlclRvRmV0Y2gsIGNh
bGxiYWNrcyk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3Vyc29yUHJlZmV0Y2hJdGVy
YXRpb25PcGVyYXRpb24oY3Vyc29yLCBudW1iZXJUb0ZldGNoLCBjYWxsYmFja3MpKTsKICAgICB9
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwog
cHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgaW50IG51bWJlclRvRmV0Y2gsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CisgICAgQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCBpbnQgbnVtYmVy
VG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBt
X2N1cnNvcihjdXJzb3IpCisgICAgICAgICwgbV9udW1iZXJUb0ZldGNoKG51bWJlclRvRmV0Y2gp
CisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IG1fY3Vyc29yOworICAgIGludCBtX251bWJlclRv
RmV0Y2g7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCiBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gY3Vyc29yLCBDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqIHRyYW5zYWN0aW9uLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmpl
Y3RTdG9yZSkKQEAgLTExMSwyOSArMTQwLDI4IEBAIHZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6
OmFkdmFuY2UodW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+CiAg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vyc29yLCB1bnNpZ25l
ZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKikKIHsKICAgICBJREJfVFJBQ0UoIkN1cnNvckFkdmFuY2VP
cGVyYXRpb24iKTsKLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IHBy
cEN1cnNvcjsKLSAgICBpZiAoIWN1cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJzb3It
PmFkdmFuY2UoY291bnQpKSB7Ci0gICAgICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUq
PigwKSk7CisgICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwgIW1fY3Vyc29yLT5tX2N1cnNv
ci0+YWR2YW5jZShtX2NvdW50KSkgeworICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOwor
ICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSo+KDApKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZh
bHVlKCkpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1
cnNvci0+cHJpbWFyeUtleSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7CiB9CiAKLXZvaWQgSURCQ3Vy
c29yQmFja2VuZEltcGw6OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29y
LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKQogewogICAgIElEQl9UUkFDRSgi
Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8
ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSkpIHsKLSAgICAg
ICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0
YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKKyAgICBpZiAoIW1fY3Vyc29y
LT5tX2N1cnNvciB8fCAhbV9jdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKG1fa2V5
LmdldCgpKSkgeworICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOworICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDAp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1
cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkpOworICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MobV9jdXJzb3ItPmtleSgpLCBtX2N1cnNvci0+cHJpbWFy
eUtleSgpLCBtX2N1cnNvci0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgSURCQ3Vyc29yQmFja2VuZElt
cGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IEV4Y2VwdGlvbkNvZGUmKQpAQCAtMTU3LDUwICsxODUsNDkgQEAgdm9pZCBJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJ
REJDYWwKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCi12b2lkIElEQkN1cnNv
ckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4g
cHJwQ3Vyc29yLCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0
aW9uT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKQogewogICAg
IElEQl9UUkFDRSgiQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24iKTsKLSAgICBSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciA9IHBycEN1cnNvcjsKIAogICAgIFZlY3Rv
cjxSZWZQdHI8SURCS2V5PiA+IGZvdW5kS2V5czsKICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4g
PiBmb3VuZFByaW1hcnlLZXlzOwogICAgIFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiA+IGZvdW5kVmFsdWVzOwogCi0gICAgaWYgKGN1cnNvci0+bV9jdXJzb3IpCi0gICAgICAg
IGN1cnNvci0+bV9zYXZlZEN1cnNvciA9IGN1cnNvci0+bV9jdXJzb3ItPmNsb25lKCk7CisgICAg
aWYgKG1fY3Vyc29yLT5tX2N1cnNvcikKKyAgICAgICAgbV9jdXJzb3ItPm1fc2F2ZWRDdXJzb3Ig
PSBtX2N1cnNvci0+bV9jdXJzb3ItPmNsb25lKCk7CiAKICAgICBjb25zdCBzaXplX3QgbWF4U2l6
ZUVzdGltYXRlID0gMTAgKiAxMDI0ICogMTAyNDsKICAgICBzaXplX3Qgc2l6ZUVzdGltYXRlID0g
MDsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7Ci0gICAg
ICAgIGlmICghY3Vyc29yLT5tX2N1cnNvciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVG
dW5jdGlvbigwKSkgewotICAgICAgICAgICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX251bWJlclRvRmV0Y2g7ICsraSkgeworICAgICAgICBpZiAoIW1f
Y3Vyc29yLT5tX2N1cnNvciB8fCAhbV9jdXJzb3ItPm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9u
KDApKSB7CisgICAgICAgICAgICBtX2N1cnNvci0+bV9jdXJzb3IgPSAwOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBmb3VuZEtleXMuYXBwZW5kKGN1cnNvci0+bV9j
dXJzb3ItPmtleSgpKTsKLSAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQoY3Vyc29yLT5t
X2N1cnNvci0+cHJpbWFyeUtleSgpKTsKKyAgICAgICAgZm91bmRLZXlzLmFwcGVuZChtX2N1cnNv
ci0+bV9jdXJzb3ItPmtleSgpKTsKKyAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQobV9j
dXJzb3ItPm1fY3Vyc29yLT5wcmltYXJ5S2V5KCkpOwogCi0gICAgICAgIGlmIChjdXJzb3ItPm1f
Y3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikK
LSAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlKGN1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkpKTsKKyAgICAgICAgaWYgKG1f
Y3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhL
ZXlDdXJzb3IpCisgICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZShtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkpKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKCkpOwogCi0gICAgICAgIHNpemVFc3RpbWF0ZSArPSBjdXJzb3ItPm1f
Y3Vyc29yLT5rZXkoKS0+c2l6ZUVzdGltYXRlKCk7Ci0gICAgICAgIHNpemVFc3RpbWF0ZSArPSBj
dXJzb3ItPm1fY3Vyc29yLT5wcmltYXJ5S2V5KCktPnNpemVFc3RpbWF0ZSgpOwotICAgICAgICBp
ZiAoY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlDdXJzb3IpCi0gICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gY3Vyc29yLT5tX2N1cnNv
ci0+dmFsdWUoKS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CisgICAgICAgIHNpemVFc3RpbWF0
ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKKyAgICAgICAg
c2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0
aW1hdGUoKTsKKyAgICAgICAgaWYgKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCisgICAgICAgICAgICBzaXplRXN0aW1h
dGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFy
KTsKIAogICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKCFmb3VuZEtleXMuc2l6ZSgpKSB7Ci0gICAg
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSo+KDApKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJp
YWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBj
YWxsYmFja3MtPm9uU3VjY2Vzc1dpdGhQcmVmZXRjaChmb3VuZEtleXMsIGZvdW5kUHJpbWFyeUtl
eXMsIGZvdW5kVmFsdWVzKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzV2l0aFByZWZldGNo
KGZvdW5kS2V5cywgZm91bmRQcmltYXJ5S2V5cywgZm91bmRWYWx1ZXMpOwogfQogCiB2b2lkIElE
QkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywgaW50
IHVudXNlZFByZWZldGNoZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggOWIyZDU3YjMw
ZGVkZDBjYjZhZjQxZjY1YWYxYTk1MzYwOTQ5OWUwZi4uM2RjNTRmM2YyMWZmOTZhY2RmZDc2OTNk
YzMxNDg0YWViY2M5OWFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMzAsNyArMzAs
NiBAQAogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00Miw3ICs0MSw3IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
PiB7CitjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gewogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2UoKSB7fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggNzM4MjNjNWZkOTRhMmFlMDA4MjZmZjNi
MzUwYmQ1ZjczNjFkMWEyZC4uOWFkZWNmMmI2MWQ2MDdkNWQ4NzU1OTFhMGNkOTBlNmY1Mjc1ZWEy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAppbmRleCA0NjM4ODc3NjRiNTdkZTM2ZDVkOWQxN2JkYzNkZjk0OGY0YWM1OTVkLi5k
YzJlZTVmOWMwNWZlMmEwMmJmNjNiY2IzYzJmNGY3ODQ3MTA5NWQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKLSNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3Rv
cmUuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5oIgpAQCAtMzksNjQgKzM4LDExOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uIHsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0
b3JlT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpw
ZXJmb3JtLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihkYXRhYmFzZSwgb2Jq
ZWN0U3RvcmUpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgICAgICA6IG1fZGF0YWJhc2Uo
ZGF0YWJhc2UpCisgICAgICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7Cisg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CiB9Owog
Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlv
biB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNz
T3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCiAgICAgewotICAgICAgICByZXR1cm4g
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSwg
ZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3Jl
KSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPik7CisgICAgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRhdGFiYXNl
KQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgeworICAgIH0KKwor
ICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOworICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwogfTsKIAotY2xhc3Mg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbiB7CitjbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIDogcHVibGljIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFz
ZUNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJlZl
cnNpb25DaGFuZ2VPcGVyYXRpb246OnBlcmZvcm0sIGRhdGFiYXNlLCB2ZXJzaW9uLCBjYWxsYmFj
a3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihkYXRhYmFzZSwgdmVyc2lvbiwgY2FsbGJh
Y2tzLCBkYXRhYmFzZUNhbGxiYWNrcykpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lk
IHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4sIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPik7CisgICAgVmVyc2lvbkNoYW5nZU9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisg
ICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJh
Y2tzKQorICAgICAgICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFi
YXNlOworICAgIGludDY0X3QgbV92ZXJzaW9uOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1f
Y2FsbGJhY2tzOworICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNh
bGxiYWNrczsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVj
dFN0b3JlQWJvcnRPcGVyYXRpb24geworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3Jl
YXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZDcmVhdGVP
YmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVy
YXRpb24oZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPik7
CisgICAgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlKQorICAgICAgICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAg
ICAgICwgbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CisgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CiB9OwogCi1jbGFzcyBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIHsKK2NsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBzdGF0aWMgUGFz
c093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUNhbGxiYWNrVGFzaygmRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVy
Zm9ybSwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkp
OwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOworICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICAgICAg
OiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmUpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBt
X2RhdGFiYXNlOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVj
dFN0b3JlOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5n
ZUFib3J0T3BlcmF0aW9uIHsKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25D
aGFuZ2VBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91
c0ludFZlcnNpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlv
dXNJbnRWZXJzaW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygm
VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtLCBkYXRhYmFzZSwgcHJldmlvdXNW
ZXJzaW9uLCBwcmV2aW91c0ludFZlcnNpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwgcHJldmlvdXNWZXJzaW9uLCBw
cmV2aW91c0ludFZlcnNpb24pKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJm
b3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+LCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0lu
dFZlcnNpb24pOworICAgIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVy
c2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCisgICAgICAgIDogbV9kYXRhYmFzZShk
YXRhYmFzZSkKKyAgICAgICAgLCBtX3ByZXZpb3VzVmVyc2lvbihwcmV2aW91c1ZlcnNpb24pCisg
ICAgICAgICwgbV9wcmV2aW91c0ludFZlcnNpb24ocHJldmlvdXNJbnRWZXJzaW9uKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsK
KyAgICBTdHJpbmcgbV9wcmV2aW91c1ZlcnNpb247CisgICAgaW50NjRfdCBtX3ByZXZpb3VzSW50
VmVyc2lvbjsKIH07CiAKIApAQCAtMjI0LDcgKzI3Nyw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmpl
Y3RTCiAgICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkKTsKICAgICBt
X21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQgPSBpZDsKIAotICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlLCB0cmFuc2FjdGlvbiksIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSkpKSB7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0
U3RvcmUpLCBDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2Jq
ZWN0U3RvcmUpKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2Fj
dGlvbkluYWN0aXZlRXJyb3I7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIzMywxMCAr
Mjg2LDEwIEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTCiAgICAgcmV0dXJuIG9iamVjdFN0b3Jl
LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmpl
Y3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbiIpOwotICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2Ut
PmlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RTdG9y
ZS0+a2V5UGF0aCgpLCBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpKSkgeworICAgIGlmICgh
bV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlLT5pZCgpLCBtX29iamVjdFN0
b3JlLT5pZCgpLCBtX29iamVjdFN0b3JlLT5uYW1lKCksIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgo
KSwgbV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpKSkgewogICAgICAgICB0cmFuc2FjdGlv
bi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI1NSwzNiArMzA4LDM1IEBA
IHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBp
ZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvblB0cik7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNh
Y3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIAotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jl
LCB0cmFuc2FjdGlvbiksIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0
aGlzLCBvYmplY3RTdG9yZSkpKSB7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpLCBE
ZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUp
KSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0
aXZlRXJyb3I7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9vYmplY3RTdG9yZXMucmVt
b3ZlKGlkKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RT
dG9yZU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVs
ZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJEZWxldGVPYmplY3RTdG9yZU9wZXJh
dGlvbiIpOwotICAgIGRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlLT5pZCgpLCBv
YmplY3RTdG9yZS0+aWQoKSk7CisgICAgbV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0
ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlLT5pZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpKTsKIH0KIAotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiVmVy
c2lvbkNoYW5nZU9wZXJhdGlvbiIpOwotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cyhwcnBDYWxsYmFja3MpOwotICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgp
OwotICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IGRhdGFiYXNlLT5tX21ldGFkYXRhLmludFZlcnNp
b247Ci0gICAgQVNTRVJUKHZlcnNpb24gPiBvbGRWZXJzaW9uKTsKLSAgICBkYXRhYmFzZS0+bV9t
ZXRhZGF0YS5pbnRWZXJzaW9uID0gdmVyc2lvbjsKLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tp
bmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRW
ZXJzaW9uKSkgeworICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IG1fZGF0YWJhc2UtPmlkKCk7Cisg
ICAgaW50NjRfdCBvbGRWZXJzaW9uID0gbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9u
OworICAgIEFTU0VSVChtX3ZlcnNpb24gPiBvbGRWZXJzaW9uKTsKKyAgICBtX2RhdGFiYXNlLT5t
X21ldGFkYXRhLmludFZlcnNpb24gPSBtX3ZlcnNpb247CisgICAgaWYgKCFtX2RhdGFiYXNlLT5t
X2JhY2tpbmdTdG9yZS0+dXBkYXRlSURCRGF0YWJhc2VJbnRWZXJzaW9uKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBtX2RhdGFiYXNlLT5tX21ldGFk
YXRhLmludFZlcnNpb24pKSB7CiAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpOwotICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihlcnJvcik7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9wZW5kaW5nU2Vjb25kSGFsZk9w
ZW5XaXRoVmVyc2lvbik7Ci0gICAgZGF0YWJhc2UtPm1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0
aFZlcnNpb24gPSBQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywg
ZGF0YWJhc2VDYWxsYmFja3MsIHZlcnNpb24pOwotICAgIGNhbGxiYWNrcy0+b25VcGdyYWRlTmVl
ZGVkKG9sZFZlcnNpb24sIHRyYW5zYWN0aW9uLCBkYXRhYmFzZSk7CisgICAgQVNTRVJUKCFtX2Rh
dGFiYXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3BlbldpdGhWZXJzaW9uKTsKKyAgICBtX2RhdGFi
YXNlLT5tX3BlbmRpbmdTZWNvbmRIYWxmT3BlbldpdGhWZXJzaW9uID0gUGVuZGluZ09wZW5XaXRo
VmVyc2lvbkNhbGw6OmNyZWF0ZShtX2NhbGxiYWNrcywgbV9kYXRhYmFzZUNhbGxiYWNrcywgbV92
ZXJzaW9uKTsKKyAgICBtX2NhbGxiYWNrcy0+b25VcGdyYWRlTmVlZGVkKG9sZFZlcnNpb24sIHRy
YW5zYWN0aW9uLCBtX2RhdGFiYXNlKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Ojp0cmFuc2FjdGlvblN0YXJ0ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiBwcnBUcmFuc2FjdGlvbikKQEAgLTQzOSw3ICs0OTEsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihpbnQ2NF90IHJlcXVlc3Rl
ZFZlcgogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0
aW9uSW50ZXJmYWNlID0gY3JlYXRlVHJhbnNhY3Rpb24oMCwgb2JqZWN0U3RvcmVJZHMsIElEQlRy
YW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0
cmFuc2FjdGlvbkludGVyZmFjZS5nZXQoKSk7CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soVmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJlcXVlc3RlZFZl
cnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwgVmVyc2lv
bkNoYW5nZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbV9tZXRhZGF0YS52ZXJzaW9uLCBt
X21ldGFkYXRhLmludFZlcnNpb24pKSkgeworICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmVxdWVzdGVkVmVyc2lv
biwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcyksIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIG1fbWV0YWRhdGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJz
aW9uKSkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIEFTU0VS
VCghbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbik7CkBAIC01NTksMjMgKzYxMSwy
NSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQogICAg
ICAgICBtX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmVzW2ldLmlkLCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVzW2ldKSk7CiB9CiAKLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6
cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSkKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0
cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRh
aW5zKG9iamVjdFN0b3JlLT5pZCgpKSk7Ci0gICAgZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLnJl
bW92ZShvYmplY3RTdG9yZS0+aWQoKSk7CisgICAgQVNTRVJUKCF0cmFuc2FjdGlvbik7CisgICAg
QVNTRVJUKG1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG1fb2JqZWN0U3RvcmUt
PmlkKCkpKTsKKyAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5yZW1vdmUobV9vYmplY3RT
dG9yZS0+aWQoKSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2Jq
ZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBwcnBPYmplY3RTdG9yZSkKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9yZTsKLSAg
ICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS0+
aWQoKSkpOwotICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3RvcmUtPmlk
KCksIG9iamVjdFN0b3JlKTsKKyAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKKyAgICBBU1NFUlQo
IW1fZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG1fb2JqZWN0U3RvcmUtPmlkKCkp
KTsKKyAgICBtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQobV9vYmplY3RTdG9yZS0+aWQo
KSwgbV9vYmplY3RTdG9yZSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVy
c2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25zdCBTdHJp
bmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBkYXRhYmFz
ZS0+bV9tZXRhZGF0YS52ZXJzaW9uID0gcHJldmlvdXNWZXJzaW9uOwotICAgIGRhdGFiYXNlLT5t
X21ldGFkYXRhLmludFZlcnNpb24gPSBwcmV2aW91c0ludFZlcnNpb247CisgICAgQVNTRVJUKCF0
cmFuc2FjdGlvbik7CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS52ZXJzaW9uID0gbV9wcmV2
aW91c1ZlcnNpb247CisgICAgbV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV9w
cmV2aW91c0ludFZlcnNpb247CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggODUwMDYyYzI5MTg3MzJiYTM0YTkyN2M3YjA3ZTk5NWVh
OTAzNjRkZi4uMTA5NTMxOGMzMjI5YTY5ZWUzOTk5ZWUwZjhlZmIzZjUwYzkwODdhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlX2gKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIC8vIFRo
aXMgaXMgaW1wbGVtZW50ZWQgYnkgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxs
eSBvdGhlcnMgKGluIG9yZGVyIHRvIHByb3h5CiAvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJy
aWVycykuIEFsbCBjYWxscyB0byB0aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcg
YW5kCiAvLyB0cmlnZ2VyIHdvcmsgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3Nhcnku
Ci1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiB7CitjbGFzcyBJREJEYXRhYmFz
ZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUJhY2tlbmRJ
bnRlcmZhY2U+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKaW5kZXggNDY5M2U2MzdhZWRhYWNiYzRjMTlmYTBl
NDg1NDk0MmVkMTMyNWMzYi4uODQxZWMwZjNlMDQxNzBhZGE3MzUwZDQ0ZGE4NmE0YjI3MzliYzli
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VDYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oCkBAIC0zNCw5ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLy8gRklYTUU6IFVzZXMgVGhyZWFkU2FmZVJlZkNvdW50ZWQgZm9yIHN0b3JhZ2UgaW4g
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayBidXQKLS8vIGl0IGlzIG5ldmVyIGFjdHVhbGx5
IHVzZWQgb24gbXVsdGlwbGUgdGhyZWFkcy4gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0ODMKLWNs
YXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiB7CitjbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1Ymxp
YyBSZWZDb3VudGVkPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
MmQ1ODQyY2QxNTA0YzFmZGNhMTM1OGUxZjgzZDhkYWFiODQ5ZDM1OC4uNDczOGUzNWMyNjkxNzQ5
NDc3NDNjOTY0ZmVhZWE0MTM2NTA1YTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC0zNSw3
ICszNSw2IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
CmluZGV4IGJhYjIxOWY1ZjRlYzU0ZGYyM2FjN2RmNGY0NTRiNzZmYWViNzJmMmUuLjgzYTI4NTcy
MjFhZDIyZTI3MTYxZjk5ODYzYzdlNDkzNTEwM2U0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2UuaApAQCAtMjksNyArMjksNyBAQAogI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZV9oCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC00OCw3ICs0OCw3
IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAvLyBUaGlzIGlzIGltcGxlbWVudGVkIGJ5
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCBhbmQgb3B0aW9uYWxseSBvdGhlcnMgKGluIG9yZGVyIHRv
IHByb3h5CiAvLyBjYWxscyBhY3Jvc3MgcHJvY2VzcyBiYXJyaWVycykuIEFsbCBjYWxscyB0byB0
aGVzZSBjbGFzc2VzIHNob3VsZCBiZSBub24tYmxvY2tpbmcgYW5kCiAvLyB0cmlnZ2VyIHdvcmsg
b24gYSBiYWNrZ3JvdW5kIHRocmVhZCBpZiBuZWNlc3NhcnkuCi1jbGFzcyBJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJGYWN0b3J5QmFj
a2VuZEludGVyZmFjZT4geworY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGUoKTsK
ICAgICB2aXJ0dWFsIH5JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSgpIHsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcAppbmRleCA5YWQ0YjhkNmUzNmJhZjM0ZTZlM2Q5NjUxYTkxMWI3NTE3MmE4MjllLi5jZTBj
YzE3NGUxNTJhYjUwODA5Y2RhNTQxMDlhYzg5N2ZiMjJhNTM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApA
QCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNs
dWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKICNp
bmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW1wbC5o
IgpAQCAtNDMsNDQgKzQyLDg4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uIHsKK2NsYXNzIElEQklu
ZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpD
dXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAg
c3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNr
VGFzaygmT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtLCBpbmRleCwga2V5UmFuZ2Us
IGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKGluZGV4LCBrZXlS
YW5nZSwgZGlyZWN0aW9uLCBjdXJzb3JUeXBlLCBjYWxsYmFja3MpKTsKICAgICB9CisgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToK
LSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWdu
ZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vy
c29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKKyAgICBPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24oUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlS
YW5nZSkKKyAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCisgICAgICAgICwgbV9jdXJz
b3JUeXBlKGN1cnNvclR5cGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKKyAg
ICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgdW5zaWduZWQgc2hvcnQgbV9k
aXJlY3Rpb247CisgICAgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBtX2N1
cnNvclR5cGU7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9OwogCi1j
bGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9uIHsKK2NsYXNzIElE
QkluZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1
cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZJbmRleENvdW50T3BlcmF0aW9uOjpwZXJmb3JtLCBpbmRl
eCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IEluZGV4Q291bnRPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3Mp
KTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBJbmRleENvdW50T3BlcmF0aW9uKFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJh
bmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBtX2luZGV4OworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsK
KyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKLWNsYXNzIElEQklu
ZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIHsK
K2NsYXNzIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFs
T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmSW5kZXhS
ZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0sIGluZGV4LCBrZXlSYW5n
ZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBj
YWxsYmFja3MpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBJbmRleFJlZmVyZW5jZWRWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fa2V5UmFu
Z2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKKyAgICBSZWZQ
dHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uIHsKK2NsYXNzIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4VmFsdWVS
ZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRl
eCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtLCBpbmRleCwga2V5UmFuZ2Us
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IElu
ZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24oaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsK
ICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKKyAgICBJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uKFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6
IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAg
LCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlS
YW5nZTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKIApAQCAt
OTUsMTkgKzEzOCwxOSBAQCBJREJJbmRleEJhY2tlbmRJbXBsOjp+SURCSW5kZXhCYWNrZW5kSW1w
bCgpCiB7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3Bl
cmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5z
aWduZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9p
ZCBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNF
KCJPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24iKTsKLSAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4odW50eXBlZERpcmVj
dGlvbik7CisgICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SURCQ3Vyc29yOjpEaXJlY3Rpb24+KG1fZGlyZWN0aW9uKTsKIAogICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yOwogCi0gICAgc3dpdGNoIChjdXJz
b3JUeXBlKSB7CisgICAgc3dpdGNoIChtX2N1cnNvclR5cGUpIHsKICAgICBjYXNlIElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yOgotICAgICAgICBiYWNraW5nU3RvcmVD
dXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCks
IGRpcmVjdGlvbik7CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1faW5kZXgtPmJhY2tp
bmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlv
bik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
SW5kZXhDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5iYWNraW5n
U3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQt
PmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFj
a2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNv
cih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJh
c2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQo
KSwgbV9rZXlSYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcjoKICAgICBjYXNl
IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlOgpAQCAtMTE2LDEy
ICsxNTksMTIgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVy
YXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGUKICAgICB9CiAKICAgICBpZiAoIWJh
Y2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNf
Y2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJz
b3IgPSBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQo
KSwgY3Vyc29yVHlwZSwgdHJhbnNhY3Rpb24uZ2V0KCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFj
a2VuZCk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBj
dXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKKyAgICBSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFj
a2luZ1N0b3JlQ3Vyc29yLmdldCgpLCBtX2N1cnNvclR5cGUsIHRyYW5zYWN0aW9uLCBtX2luZGV4
LT5tX29iamVjdFN0b3JlQmFja2VuZCk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJz
b3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkp
OwogfQogCiB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCkBAIC0xMjksNyArMTcyLDcgQEAg
dm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCB1bnNpZ25lZAogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1w
bDo6b3BlbkN1cnNvciIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBy
cENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsK
LSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0
aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
SW5kZXhDdXJzb3IsIGNhbGxiYWNrcykpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7
CiB9CiAKQEAgLTEzOCwxOCArMTgxLDE4IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3Bl
bktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduCiAgICAg
SURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yIik7CiAgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5n
ZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvciwg
Y2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgZGly
ZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvciwgY2FsbGJh
Y2tzKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotdm9pZCBJREJJbmRl
eEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3Zv
aWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlvbjo6cGVyZm9ybShJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklu
ZGV4Q291bnRPcGVyYXRpb24iKTsKICAgICB1aW50MzJfdCBjb3VudCA9IDA7CiAKLSAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5i
YWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0YWJhc2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhU
KTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9p
bmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksIG1fa2V5UmFu
Z2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3Ip
IHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworICAgICAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKGNvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTU3
LDcgKzIwMCw3IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlv
bjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKICAgICAgICAgKytjb3VudDsKICAg
ICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpOwogCi0g
ICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoY291bnQpOwogfQogCiB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNl
cHRpb25Db2RlJikKQEAgLTE2NSw2MyArMjA4LDYxIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudCIpOwogICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soSW5kZXhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBjYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKElu
ZGV4Q291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByYW5nZSwgY2FsbGJhY2tzKSkpCiAgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBs
OjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5z
YWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxP
cGVyYXRpb24iKTsKIAogICAgIFJlZlB0cjxJREJLZXk+IGtleTsKIAotICAgIGlmIChrZXlSYW5n
ZS0+aXNPbmx5S2V5KCkpCi0gICAgICAgIGtleSA9IGtleVJhbmdlLT5sb3dlcigpOworICAgIGlm
IChtX2tleVJhbmdlLT5pc09ubHlLZXkoKSkKKyAgICAgICAga2V5ID0gbV9rZXlSYW5nZS0+bG93
ZXIoKTsKICAgICBlbHNlIHsKLSAgICAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29y
PiBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1
cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFi
YXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwg
a2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0
b3JlKCktPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2Vu
ZC0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhU
KTsKIAogICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBrZXkgPSBiYWNraW5n
U3RvcmVDdXJzb3ItPmtleSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleCh0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CisgICAg
UmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQ
cmltYXJ5S2V5VmlhSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlk
KCksIG1faW5kZXgtPmlkKCksICprZXkpOwogCi0gICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPmJh
Y2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+
aWQoKSwgKnByaW1hcnlLZXkpOworICAgIFN0cmluZyB2YWx1ZSA9IG1faW5kZXgtPmJhY2tpbmdT
dG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlk
KCksICpwcmltYXJ5S2V5KTsKIAogICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewotICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGluZGV4LT5tX29iamVjdFN0b3JlQmFj
a2VuZC0+YXV0b0luY3JlbWVudCgpICYmICFpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtl
eVBhdGgoKS5pc051bGwoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbWFyeUtleSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQ
YXRoKCkpOworICAgIGlmIChtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+YXV0b0luY3Jl
bWVudCgpICYmICFtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+a2V5UGF0aCgpLmlzTnVs
bCgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSksIHByaW1hcnlLZXksIG1faW5kZXgtPm1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUo
dmFsdWUpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKIH0KIAogCi12b2lkIElEQkluZGV4QmFja2VuZElt
cGw6OkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQor
dm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElE
Ql9UUkFDRSgiSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiIpOwogCi0gICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPQotICAgICAgICAgICAg
aW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29i
amVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJD
dXJzb3I6Ok5FWFQpOworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2lu
Z1N0b3JlQ3Vyc29yID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNv
cih0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJh
c2VJZCgpLCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgbV9pbmRleC0+aWQo
KSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKIAogICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0
PElEQktleSo+KDApKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2Fz
dDxJREJLZXkqPigwKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURC
S2V5PiBrZXlSZXN1bHQgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJ
bmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFi
YXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwg
KmJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCkpOworICAgIFJlZlB0cjxJREJLZXk+IGtleVJlc3Vs
dCA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwg
bV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksICpiYWNr
aW5nU3RvcmVDdXJzb3ItPmtleSgpKTsKICAgICBpZiAoIWtleVJlc3VsdCkgewotICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7CisgICAgICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleVJlc3VsdC5nZXQoKSk7
CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXlSZXN1bHQuZ2V0KCkpOwogfQogCiB2b2lk
IElEQkluZGV4QmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCkBAIC0yMjks
NyArMjcwLDcgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2EKICAgICBJREJfVFJBQ0UoIklEQklu
ZGV4QmFja2VuZEltcGw6OmdldCIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9u
UHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhSZWZlcmVuY2Vk
VmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tz
LCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJbmRl
eFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdl
LCBjYWxsYmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCkBAIC0y
MzgsNyArMjc5LDcgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXkoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SUQKICAgICBJREJfVFJBQ0UoIklE
QkluZGV4QmFja2VuZEltcGw6OmdldEtleSIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5z
YWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBjYWxsYmFja3MsIHRy
YW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEluZGV4VmFs
dWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkp
CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmluZGV4IDEz
MmNhYjYyMTJhZWQ4Nzc3MmE2MWVjMTNmMGVjOGVkMWVkMzdhNGMuLjBjZDdmZTFhZDg4NDAxYTZi
MjQ5YjJmYjhkYTNiNzVmYThmM2VjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgKQEAgLTM5LDcgKzM5LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCQmFja2luZ1N0b3JlOwogY2xhc3MgSURCS2V5
OwogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CiAKIGNsYXNzIElEQkluZGV4QmFja2VuZEltcGwgOiBwdWJsaWMgSURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggYzky
ZmM4ZDQ5NTJmYzRiOGZhODIyOGE0ZWY4OGJiYzU4Y2VmZmQ5Ny4uODRkYzViNzI1MmVhNTYwZmNk
MmI5MWFlN2FmNzcwNGEzYmQ0NzVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTI3LDcg
KzI3LDcgQEAKICNkZWZpbmUgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlX2gKIAogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZTsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotY2xhc3MgSURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4geworY2xhc3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJlZkNv
dW50ZWQ8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5LmgKaW5kZXggODY0ZGExYjVhNjExYzhmMDkxMzlkNmZkNWRiMzAwNjM1
NTJiNDJiZS4uNDY1ZjgyZWZmYTRhZGViNjliYjY5MjM5MDVjZTQzZTUwMTU2MGE2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgKQEAgLTMwLDEzICszMCwxMyBA
QAogCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCS2V5IDogcHVibGljIFNjcmlw
dFdyYXBwYWJsZSwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQktleT4geworY2xhc3Mg
SURCS2V5IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCS2V5
PiB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBLZXlBcnJh
eTsKIApAQCAtMTQ1LDggKzE0NSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGIgLSBhOwog
ICAgIH0KIAotICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQktleT46OnJlZjsKLSAg
ICB1c2luZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJLZXk+OjpkZXJlZjsKKyAgICB1c2luZyBS
ZWZDb3VudGVkPElEQktleT46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQktleT46OmRl
cmVmOwogCiBwcml2YXRlOgogICAgIElEQktleSgpIDogbV90eXBlKEludmFsaWRUeXBlKSwgbV9u
dW1iZXIoMCksIG1fc2l6ZUVzdGltYXRlKE92ZXJoZWFkU2l6ZSkgeyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaAppbmRleCBkMzQ3Zjg0MTA2ZDY4
NDU5YmRjYzU5NzkwZDhjN2Q0NjViMTMwMWY5Li42MDY3ZWY5NWQ2ODQ3MDllZmNhN2Y5NjQ1YjMw
NzAyMzQ4MmEyNWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleVJhbmdlLmgKQEAgLTMyLDEzICszMiwxMyBAQAogI2luY2x1ZGUgIklEQktleS5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotY2xh
c3MgSURCS2V5UmFuZ2UgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SURCS2V5UmFuZ2U+IHsKK2NsYXNzIElEQktleVJhbmdlIDogcHVibGljIFNj
cmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SURCS2V5UmFuZ2U+IHsKIHB1YmxpYzoK
ICAgICBlbnVtIExvd2VyQm91bmRUeXBlIHsKICAgICAgICAgTG93ZXJCb3VuZE9wZW4sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IGNhOGFkNjE3MmRlOTgxNWI1NmVkZDMzMWE5YTcz
NTZlY2YxOThkYTYuLmE4NmNlYWRlODEwMGQxMDc0NGY1NWI5NTMxZTdhYzdkOWIxOGEyYWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKQEAgLTQ1LDExNCArNDQsMjI0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2Jq
ZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24geworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NP
d25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZPYmplY3RTdG9yZVJl
dHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPYmplY3RTdG9y
ZVJldHJpZXZhbE9wZXJhdGlvbihvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwog
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIE9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQorICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgICAgICwg
bV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29i
amVjdFN0b3JlOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4gbV9rZXlSYW5nZTsKKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAKLWNsYXNzIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbiB7CitjbGFzcyBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb24gOiBwdWJsaWMg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIFBhc3NPd25QdHI8VmVj
dG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4g
PiBwb3BJbmRleEtleXMpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9w
SW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCiAg
ICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZPYmplY3RTdG9yZVN0b3Jh
Z2VPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uLCBwb3BJbmRleElkcywgcG9wSW5kZXhLZXlzKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb24ob2JqZWN0
U3RvcmUsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgcG9wSW5kZXhJZHMsIHBvcElu
ZGV4S2V5cykpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4s
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQ
dXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMs
IFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpOworICAgIE9iamVj
dFN0b3JlU3RvcmFnZU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRl
eElkcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKKyAgICAg
ICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CisgICAgICAgICwgbV9rZXkoa2V5KQorICAgICAgICAsIG1fcHV0TW9kZShwdXRNb2RlKQorICAg
ICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICAgICAgLCBtX3BvcEluZGV4SWRzKHBv
cEluZGV4SWRzKQorICAgICAgICAsIG1fcG9wSW5kZXhLZXlzKHBvcEluZGV4S2V5cykKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0
U3RvcmU7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbV92YWx1ZTsKKyAgICBS
ZWZQdHI8SURCS2V5PiBtX2tleTsKKyAgICBQdXRNb2RlIG1fcHV0TW9kZTsKKyAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4g
bV9wb3BJbmRleElkczsKKyAgICBPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBtX3BvcEluZGV4
S2V5czsKIH07CiAKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3Jl
SW5kZXhlc1JlYWR5T3BlcmF0aW9uIHsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
Ok9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+
ID4gcG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9iamVjdFN0b3JlSW5k
ZXhlc1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwgcG9wSW5kZXhJZHMsIHRy
YW5zYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPYmplY3RTdG9yZUluZGV4
ZXNSZWFkeU9wZXJhdGlvbihvYmplY3RTdG9yZSwgcG9wSW5kZXhJZHMpKTsKICAgICB9CisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0
ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2
NF90PiA+IHBvcEluZGV4SWRzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KTsKKyAgICBPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2
NF90PiA+IHBvcEluZGV4SWRzKQorICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUp
CisgICAgICAgICwgbV9wb3BJbmRleElkcyhwb3BJbmRleElkcykKKyAgICB7CisgICAgfQorCisg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAg
T3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG1fcG9wSW5kZXhJZHM7CiB9OwogCi1jbGFzcyBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uIHsKK2Ns
YXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRp
b24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RT
dG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24ob2JqZWN0U3RvcmUsIGtl
eVJhbmdlLCBjYWxsYmFja3MpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJm
b3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBPYmplY3RT
dG9yZURlbGV0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2Jq
ZWN0U3RvcmUpCisgICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKKyAgICAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIFJlZlB0cjxJREJLZXlSYW5nZT4g
bV9rZXlSYW5nZTsKKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIH07CiAK
LWNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRp
b24geworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDbGVhck9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tU
YXNrKCZPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwgY2Fs
bGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0
U3RvcmVDbGVhck9wZXJhdGlvbihvYmplY3RTdG9yZSwgY2FsbGJhY2tzKSk7CiAgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZh
dGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBPYmplY3RT
dG9yZUNsZWFyT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAg
IDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBtX29iamVjdFN0b3JlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OwogfTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhPcGVy
YXRpb24geworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+IGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxi
YWNrVGFzaygmQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCBpbmRl
eCwgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENyZWF0ZUluZGV4
T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBpbmRleCkpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRp
YyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIENyZWF0ZUluZGV4T3Bl
cmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAgICAgIDogbV9vYmpl
Y3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9y
ZTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKIH07CiAKLWNsYXNz
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uIHsKK2NsYXNz
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uIDogcHVibGlj
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkRlbGV0
ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwgaW5kZXgsIHRyYW5zYWN0aW9u
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEZWxldGVJbmRleE9wZXJhdGlvbihvYmpl
Y3RTdG9yZSwgaW5kZXgpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3Jt
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBEZWxldGVJbmRleE9wZXJhdGlvbihQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0
U3RvcmUpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7CiB9OwogCi1jbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb24geworY2xhc3MgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uIDog
cHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0
YXNrVHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9wZW5P
YmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIHJhbmdlLCBk
aXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb24ob2JqZWN0U3Rv
cmUsIHJhbmdlLCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUpKTsKICAgICB9CisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0
ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPik7CisgICAgT3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uKFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUpCisgICAgICAgIDogbV9vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZSkKKyAgICAgICAgLCBtX3JhbmdlKHJhbmdlKQorICAgICAgICAsIG1fZGlyZWN0aW9u
KGRpcmVjdGlvbikKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgICAgICwg
bV90YXNrVHlwZSh0YXNrVHlwZSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQktleVJhbmdl
PiBtX3JhbmdlOworICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTo6VGFza1R5cGUgbV90YXNrVHlwZTsKIH07CiAKLWNsYXNzIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb24geworY2xhc3MgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9iamVjdFN0
b3JlQ291bnRPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCByYW5nZSwgY2FsbGJhY2tz
LCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3RvcmVD
b3VudE9wZXJhdGlvbihvYmplY3RTdG9yZSwgcmFuZ2UsIGNhbGxiYWNrcykpOwogICAgIH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2
YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOworICAgIE9iamVjdFN0b3JlQ291bnRPcGVyYXRpb24oUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAg
IDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX3JhbmdlKHJhbmdlKQor
ICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRy
PElEQktleVJhbmdlPiBtX3JhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJh
Y2tzOwogfTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhB
Ym9ydE9wZXJhdGlvbiB7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJ
bmRleEFib3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBl
cmZvcm0sIG9iamVjdFN0b3JlLCBpbmRleCk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbihvYmplY3RTdG9yZSwgaW5kZXgpKTsKICAgICB9Cisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJp
dmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+KTsKKyAgICBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9y
ZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAgICBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKIH07CiAKLWNsYXNzIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24geworY2xhc3MgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4KQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwgaW5kZXgpOworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24ob2JqZWN0U3Rv
cmUsIGluZGV4KSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CisgICAgRGVsZXRlSW5kZXhBYm9y
dE9wZXJhdGlvbihQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAgICAgICA6IG1f
b2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0
U3RvcmU7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5kZXg7CiB9OwogCiAK
QEAgLTE4MCwzNyArMjg5LDM2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyCiAgICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQiKTsKICAgICBSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6
ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KE9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGNh
bGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2soT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwg
Y2FsbGJhY2tzKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6
cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiT2JqZWN0
U3RvcmVSZXRyaWV2YWxPcGVyYXRpb24iKTsKICAgICBSZWZQdHI8SURCS2V5PiBrZXk7Ci0gICAg
aWYgKGtleVJhbmdlLT5pc09ubHlLZXkoKSkKLSAgICAgICAga2V5ID0ga2V5UmFuZ2UtPmxvd2Vy
KCk7CisgICAgaWYgKG1fa2V5UmFuZ2UtPmlzT25seUtleSgpKQorICAgICAgICBrZXkgPSBtX2tl
eVJhbmdlLT5sb3dlcigpOwogICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwg
a2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CisgICAgICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV9vYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0
b3JlLT5pZCgpLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgICAgICBp
ZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtl
eSgpOwogICAgIH0KIAotICAgIFN0cmluZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigp
LCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSk7Cisg
ICAgU3RyaW5nIHdpcmVEYXRhID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmdldFJl
Y29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqa2V5KTsKICAgICBpZiAod2ly
ZURhdGEuaXNOdWxsKCkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCkgJiYgIW9iamVjdFN0b3JlLT5rZXlQ
YXRoKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGtleSwgb2JqZWN0U3RvcmUtPmtleVBhdGgoKSk7CisgICAgaWYgKG1fb2Jq
ZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSAmJiAhbV9vYmplY3RTdG9yZS0+a2V5UGF0aCgpLmlz
TnVsbCgpKSB7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSksIGtleSwgbV9vYmplY3RTdG9yZS0+a2V5
UGF0aCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRhKSk7CisgICAg
bV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlKHdpcmVEYXRhKSk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2Fs
bGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYg
aW5kZXhLZXlzKQpAQCAtMjI2LDcgKzMzNCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzCiAK
ICAgICBBU1NFUlQoYXV0b0luY3JlbWVudCgpIHx8IGtleS5nZXQoKSk7CiAKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3
SW5kZXhJZHMucmVsZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIHZhbHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgbmV3SW5kZXhJZHMucmVs
ZWFzZSgpLCBuZXdJbmRleEtleXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0
RXJyb3IpKTsKIH0KIApAQCAtMzcwLDgyICs0NzgsNzYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElk
cywKICAgICBpZiAodHJhbnNhY3Rpb24tPmlzRmluaXNoZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2ssIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgbmV3SW5kZXhJZHMucmVsZWFzZSgpLCB0cmFuc2FjdGlvbikpKQor
ICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLCBPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIG5ld0luZGV4SWRzLnJlbGVhc2UoKSkpKQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmpl
Y3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJP
YmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwotICAgIE93blB0cjxWZWN0b3I8aW50
NjRfdD4gPiBpbmRleElkcyA9IHBvcEluZGV4SWRzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5kZXhJZHMtPnNpemUoKTsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
b3BJbmRleElkcy0+c2l6ZSgpOyArK2kpCiAgICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0
ZVByZWVtcHRpdmVFdmVudCgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNh
Y3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25Q
dHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCit2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIk9iamVj
dFN0b3JlU3RvcmFnZU9wZXJhdGlvbiIpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbiA9IHBycFRyYW5zYWN0aW9uOwogICAgIEFTU0VSVCh0cmFuc2Fj
dGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7Ci0gICAgUmVmUHRyPElEQktl
eT4ga2V5ID0gcHJwS2V5OwotICAgIE93blB0cjxWZWN0b3I8aW50NjRfdD4gPiBpbmRleElkcyA9
IHBvcEluZGV4SWRzOwotICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IGluZGV4S2V5cyA9
IHBvcEluZGV4S2V5czsKLSAgICBBU1NFUlQoaW5kZXhJZHMgJiYgaW5kZXhLZXlzICYmIGluZGV4
SWRzLT5zaXplKCkgPT0gaW5kZXhLZXlzLT5zaXplKCkpOwotICAgIGNvbnN0IGJvb2wgYXV0b0lu
Y3JlbWVudCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7CisgICAgQVNTRVJUKG1fcG9w
SW5kZXhJZHMgJiYgbV9wb3BJbmRleEtleXMgJiYgbV9wb3BJbmRleElkcy0+c2l6ZSgpID09IG1f
cG9wSW5kZXhLZXlzLT5zaXplKCkpOworICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9IG1f
b2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKTsKICAgICBib29sIGtleVdhc0dlbmVyYXRlZCA9
IGZhbHNlOwogCi0gICAgaWYgKHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGF1dG9JbmNyZW1l
bnQgJiYgIWtleSkgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0
U3RvcmUtPmdlbmVyYXRlS2V5KHRyYW5zYWN0aW9uKTsKKyAgICBpZiAobV9wdXRNb2RlICE9IEN1
cnNvclVwZGF0ZSAmJiBhdXRvSW5jcmVtZW50ICYmICFtX2tleSkgeworICAgICAgICBSZWZQdHI8
SURCS2V5PiBhdXRvSW5jS2V5ID0gbV9vYmplY3RTdG9yZS0+Z2VuZXJhdGVLZXkodHJhbnNhY3Rp
b24pOwogICAgICAgICBrZXlXYXNHZW5lcmF0ZWQgPSB0cnVlOwogICAgICAgICBpZiAoIWF1dG9J
bmNLZXktPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9y
LCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOworICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsICJNYXhpbXVtIGtleSBnZW5lcmF0b3IgdmFsdWUg
cmVhY2hlZC4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAga2V5
ID0gYXV0b0luY0tleTsKKyAgICAgICAgbV9rZXkgPSBhdXRvSW5jS2V5OwogICAgIH0KIAotICAg
IEFTU0VSVChrZXkgJiYga2V5LT5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2tleSAmJiBtX2tl
eS0+aXNWYWxpZCgpKTsKIAogICAgIElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciBy
ZWNvcmRJZGVudGlmaWVyOwotICAgIGlmIChwdXRNb2RlID09IEFkZE9ubHkpIHsKKyAgICBpZiAo
bV9wdXRNb2RlID09IEFkZE9ubHkpIHsKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAg
ICAgICBib29sIG9rID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5rZXlFeGlzdHNJbk9i
amVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgJnJlY29yZElkZW50
aWZpZXIsIGZvdW5kKTsKKyAgICAgICAgYm9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUt
PmlkKCksICptX2tleSwgJnJlY29yZElkZW50aWZpZXIsIGZvdW5kKTsKICAgICAgICAgaWYgKCFv
aykgewotICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
Y2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVuY2UuIikpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChmb3VuZCkgewotICAgICAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRo
ZSBvYmplY3Qgc3RvcmUuIikpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJy
b3IsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICBWZWN0b3I8T3duUHRyPEluZGV4
V3JpdGVyPiA+IGluZGV4V3JpdGVyczsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlm
ICghbWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmUuZ2V0KCksIGtleSwg
a2V5V2FzR2VuZXJhdGVkLCAqaW5kZXhJZHMsICppbmRleEtleXMsICZpbmRleFdyaXRlcnMsICZl
cnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JN
ZXNzYWdlKSk7CisgICAgaWYgKCFtYWtlSW5kZXhXcml0ZXJzKHRyYW5zYWN0aW9uLCBtX29iamVj
dFN0b3JlLmdldCgpLCBtX2tleSwga2V5V2FzR2VuZXJhdGVkLCAqbV9wb3BJbmRleElkcywgKm1f
cG9wSW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgeworICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgZXJyb3JNZXNzYWdlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0
aW9uLiAgQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ug
b2YgZXJyb3IuCiAKLSAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dFJlY29yZCh0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFi
YXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHZhbHVlLT50b1dpcmVTdHJpbmcoKSwg
JnJlY29yZElkZW50aWZpZXIpOworICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5w
dXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5LCBtX3ZhbHVl
LT50b1dpcmVTdHJpbmcoKSwgJnJlY29yZElkZW50aWZpZXIpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSW5kZXhXcml0
ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwotICAgICAgICBpbmRleFdy
aXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllciwgKm9iamVjdFN0b3JlLT5iYWNr
aW5nU3RvcmUoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVj
dFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5tX21ldGFkYXRhLmlkKTsKKyAgICAg
ICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZpZXIsICptX29iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+bV9tZXRh
ZGF0YS5pZCk7CiAgICAgfQogCi0gICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgcHV0TW9kZSAhPSBD
dXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7Ci0gICAg
ICAgIGJvb2wgb2sgPSBvYmplY3RTdG9yZS0+dXBkYXRlS2V5R2VuZXJhdG9yKHRyYW5zYWN0aW9u
LCBrZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOworICAgIGlmIChhdXRvSW5jcmVtZW50ICYm
IG1fcHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgbV9rZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51
bWJlclR5cGUpIHsKKyAgICAgICAgYm9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPnVwZGF0ZUtleUdl
bmVyYXRvcih0cmFuc2FjdGlvbiwgbV9rZXkuZ2V0KCksICFrZXlXYXNHZW5lcmF0ZWQpOwogICAg
ICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciB1cGRhdGluZyBrZXkgZ2VuZXJhdG9yLiIpKTsKKyAgICAgICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgdXBkYXRpbmcga2V5IGdlbmVyYXRv
ci4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcyhrZXkucmVsZWFzZSgpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNj
ZXNzKG1fa2V5LnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQpAQCAtNDU2LDI0ICs1NTgs
MjQgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1v
ZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKICAgICBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soT2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtl
eVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0K
IAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3Bl
cmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0Uo
Ik9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24iKTsKIAotICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
LCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9y
ZS0+aWQoKSwgbV9rZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAgICBpZiAoYmFj
a2luZ1N0b3JlQ3Vyc29yKSB7CiAKICAgICAgICAgZG8gewotICAgICAgICAgICAgb2JqZWN0U3Rv
cmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSk7CisgICAgICAgICAg
ICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlUmVjb3JkKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCks
IG1fb2JqZWN0U3RvcmUtPmlkKCksIGJhY2tpbmdTdG9yZUN1cnNvci0+cmVjb3JkSWRlbnRpZmll
cigpKTsKIAogICAgICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVlRnVu
Y3Rpb24oMCkpOwogICAgIH0KIAotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcygpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQpA
QCAtNDg0LDE1ICs1ODYsMTUgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVh
cihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREIKICAgICBBU1NFUlQo
dHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKICAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAKLSAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGNh
bGxiYWNrcykpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6cGVyZm9y
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6cGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJf
VFJBQ0UoIk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24iKTsKLSAgICBvYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCktPmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgp
KTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLT5jbGVhck9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlk
KCkpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKIH0KIAogUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUlu
ZGV4KGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC01MDcsNyAr
NjA5LDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGludDYKICAgICBBU1NFUlQoaWQgPiBtX21ldGFk
YXRhLm1heEluZGV4SWQpOwogICAgIG1fbWV0YWRhdGEubWF4SW5kZXhJZCA9IGlkOwogCi0gICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgaW5kZXgsIHRyYW5zYWN0aW9uKSwgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIGluZGV4KSkpIHsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRh
c2soQ3JlYXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCksIENyZWF0ZUluZGV4
QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCkpKSB7CiAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQpAQCAtNTE2LDEwICs2MTgsMTAgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGlu
dDYKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIkNyZWF0ZUluZGV4
T3BlcmF0aW9uIik7Ci0gICAgaWYgKCFvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNyZWF0
ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCksIGluZGV4LT5u
YW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50
cnkoKSkpIHsKKyAgICBpZiAoIW1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJ
bmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2lu
ZGV4LT5uYW1lKCksIG1faW5kZXgtPmtleVBhdGgoKSwgbV9pbmRleC0+dW5pcXVlKCksIG1faW5k
ZXgtPm11bHRpRW50cnkoKSkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC01NDAsMTcgKzY0MiwxNyBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNhY3Rp
b25CYWNrZQogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAg
IEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NI
QU5HRSk7CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRlSW5kZXhP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCwgdHJhbnNhY3Rpb24pLCBEZWxldGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpKSkgeworICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhEZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4
KSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4KSkpIHsKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9y
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1faW5kZXhlcy5yZW1vdmUoaW5kZXhJZCk7
CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRp
b246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0
aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewog
ICAgIElEQl9UUkFDRSgiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBvYmplY3RTdG9yZS0+
YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwg
aW5kZXgtPmlkKCkpOworICAgIG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxldGVJ
bmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX2luZGV4LT5pZCgpKTsKIH0K
IAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQpAQCAtNTU4LDI5ICs2NjAsMjkgQEAg
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IHJhbmdlLCBJREJDdXIKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlv
blB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9wZW5PYmplY3RTdG9y
ZUN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBkaXJlY3Rpb24sIGNhbGxiYWNr
cywgdGFza1R5cGUsIHRyYW5zYWN0aW9uKSkpIHsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soT3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFu
Z2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0YXNrVHlwZSkpKSB7CiAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkFib3J0RXJyb3IpKTsKICAgICB9CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJPcGVu
T2JqZWN0U3RvcmVDdXJzb3IiKTsKIAotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVu
T2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQo
KSwgZGlyZWN0aW9uKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0
U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2Jq
ZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9yYW5nZS5nZXQo
KSwgbV9kaXJlY3Rpb24pOwogICAgIC8vIFRoZSBmcm9udGVuZCBoYXMgYmVndW4gaW5kZXhpbmcs
IHNvIHRoaXMgcGF1c2VzIHRoZSB0cmFuc2FjdGlvbgogICAgIC8vIHVudGlsIHRoZSBpbmRleGlu
ZyBpcyBjb21wbGV0ZS4gVGhpcyBjYW4ndCBoYXBwZW4gYW55IGVhcmxpZXIKICAgICAvLyBiZWNh
dXNlIHdlIGRvbid0IHdhbnQgdG8gc3dpdGNoIHRvIGVhcmx5IG1vZGUgaW4gY2FzZSBtdWx0aXBs
ZQogICAgIC8vIGluZGV4ZXMgYXJlIGJlaW5nIGNyZWF0ZWQgaW4gYSByb3csIHdpdGggcHV0KCkn
cyBpbiBiZXR3ZWVuLgotICAgIGlmICh0YXNrVHlwZSA9PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrKQorICAgIGlmIChtX3Rhc2tUeXBlID09IElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZTo6UHJlZW1wdGl2ZVRhc2spCiAgICAgICAgIHRyYW5zYWN0
aW9uLT5hZGRQcmVlbXB0aXZlRXZlbnQoKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikg
ewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqPigwKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nh
c3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNr
ZW5kSW1wbDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5yZWxlYXNlKCksIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6Ok9iamVjdFN0b3JlQ3Vyc29yLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24u
Z2V0KCksIG9iamVjdFN0b3JlLmdldCgpKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJz
b3IsIGN1cnNvci0+a2V5KCksIGN1cnNvci0+cHJpbWFyeUtleSgpLCBjdXJzb3ItPnZhbHVlKCkp
OworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gSURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3RvcmVDdXJzb3IucmVsZWFzZSgpLCBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvciwgbV90YXNrVHlwZSwgdHJhbnNhY3Rp
b24sIG1fb2JqZWN0U3RvcmUuZ2V0KCkpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vy
c29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgp
KTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRy
PElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0
aW9uQ29kZSYpCkBAIC01ODgsMTcgKzY5MCwxNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPAog
ICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQiKTsKICAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlQ291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCByYW5n
ZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzayhPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2UsIGNh
bGxiYWNrcykpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6cGVyZm9y
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNvdW50T3Bl
cmF0aW9uIik7CiAgICAgdWludDMyX3QgY291bnQgPSAwOwotICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5p
ZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fb2JqZWN0U3RvcmUtPmJhY2tp
bmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RT
dG9yZS0+aWQoKSwgbV9yYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAgICBpZiAoIWJh
Y2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7
CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC02MDYsNyArNzA4LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGkKICAg
ICAgICAgKytjb3VudDsKICAgICB9IHdoaWxlIChiYWNraW5nU3RvcmVDdXJzb3ItPmNvbnRpbnVl
RnVuY3Rpb24oMCkpOwogCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworICAgIG1f
Y2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmxvYWRJbmRleGVzKCkKQEAgLTYxNywxNyArNzE5LDE4IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMoKQogICAgICAgICBtX2luZGV4ZXMuc2V0
KGluZGV4ZXNbaV0uaWQsIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCB0
aGlzLCBpbmRleGVzW2ldKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlQob2JqZWN0U3RvcmUt
Pm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+aWQoKSkpOwotICAgIG9iamVjdFN0b3JlLT5tX2lu
ZGV4ZXMucmVtb3ZlKGluZGV4LT5pZCgpKTsKKyAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKKyAg
ICBBU1NFUlQobV9vYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKG1faW5kZXgtPmlkKCkp
KTsKKyAgICBtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMucmVtb3ZlKG1faW5kZXgtPmlkKCkpOwog
fQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVy
YXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gcHJwSW5kZXgpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0
ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCiB7Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0g
cHJwSW5kZXg7Ci0gICAgQVNTRVJUKCFvYmplY3RTdG9yZS0+bV9pbmRleGVzLmNvbnRhaW5zKGlu
ZGV4LT5pZCgpKSk7Ci0gICAgb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQoaW5kZXgtPmlkKCks
IGluZGV4KTsKKyAgICBBU1NFUlQoIXRyYW5zYWN0aW9uKTsKKyAgICBBU1NFUlQoIW1fb2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhtX2luZGV4LT5pZCgpKSk7CisgICAgbV9vYmplY3RT
dG9yZS0+bV9pbmRleGVzLnNldChtX2luZGV4LT5pZCgpLCBtX2luZGV4KTsKIH0KIAogUGFzc1Jl
ZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbmVyYXRlS2V5KFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgKaW5kZXggZjcxODM2OWVlZDc2ODM1MDM5YzBjMWI4M2Q0YzM3NDhjYzJiMTAz
MS4uYzJkZTQ3NDhmY2RhYTdjMTc0ZjdlNjAzM2ExNjcxZTk0N2JiMjljYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuaApAQCAtNDIsNyArNDIsNiBAQCBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOwogY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7Ci1jbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Owogc3RydWN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGE7CiAK
IGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXgg
ODNiZGZkY2VkOTA2ZjBiYjc2MTU5ODNiYzIyNmYyZDJmMjNmOGE0OC4uNzM5YTBkNzU2OWYwNzVk
ZTk3N2U4OTcxNjIyYzI0NTE1Yjk3MTdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlLmgKQEAgLTI4LDcgKzI4LDggQEAKIAogI2luY2x1ZGUgIklEQkN1cnNvci5oIgogI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKQEAgLTQ1LDcgKzQ2LDcgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiB7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5oCmluZGV4IGVkYWE3YmExNmI2OTFhZTA2N2U4YWQ3NjIxMzcwNjBiYmQ1YmY3NDAuLmIyMTE4
MjBiYzM4ZjkyNzc1YWM3NzQ1NTNiMTZlNzNkMDYxOGYzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAgLTExMSw4ICsxMTEsOCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHRyYW5zYWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0Y2goKTsKIAotICAg
IHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkNhbGxiYWNrcz46OnJlZjsKLSAgICB1c2lu
ZyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJDYWxsYmFja3M+OjpkZXJlZjsKKyAgICB1c2luZyBS
ZWZDb3VudGVkPElEQkNhbGxiYWNrcz46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPElEQkNh
bGxiYWNrcz46OmRlcmVmOwogCiAgICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpU
YXNrVHlwZSB0YXNrVHlwZSgpIHsgcmV0dXJuIG1fdGFza1R5cGU7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcAppbmRleCBjNTQyZmRkNzkwODk5ZWVhYmExNDQxMjRlOGUzMmU5MzQzZTcw
NGUwLi5mMmY3MWM0ZjU3NmU2Nzk2ZWFlNjg0ZjM1Zjk2OTlhNGI5YjA3OWQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJUcmFjaW5nLmgiCiAjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSw2ICs1NCw5IEBAIElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoaW50NjRfdCBp
ZCwgY29uc3QgVmVjdG9yPGluCiAgICAgLCBtX3Rhc2tUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQpCiAgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZl
RXZlbnRzKDApCiB7CisgICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBi
ZWZvcmUgaXQgY2FuIGJlIGFkb3B0ZWQuCisgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7
CisKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRy
YW5zYWN0aW9uKHRoaXMpOwogfQogCkBAIC03Niw3ICs3OCw3IEBAIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmpl
Y3RTdG9yCiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KIAotYm9vbCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soVGFza1R5cGUgdHlwZSwgUGFzc093
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzaykKK2Jvb2wgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8T3BlcmF0
aW9uPiB0YXNrLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gYWJvcnRUYXNrKQogewogICAgIGlmICht
X3N0YXRlID09IEZpbmlzaGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjMsOCArMTI1
LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydChQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKQogCiAgICAgLy8gUnVuIHRoZSBhYm9ydCB0YXNrcywgaWYg
YW55LgogICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sobV9hYm9ydFRhc2tRdWV1
ZS50YWtlRmlyc3QoKSk7Ci0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOworICAgICAgICBP
d25QdHI8T3BlcmF0aW9uPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkpOworICAg
ICAgICB0YXNrLT5wZXJmb3JtKDApOwogICAgIH0KIAogICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVz
b3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQg
Y2FsbGJhY2tzCkBAIC0yNTQsOCArMjU2LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjp0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPioKICAg
ICBUYXNrUXVldWUqIHRhc2tRdWV1ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPyAmbV9w
cmVlbXB0aXZlVGFza1F1ZXVlIDogJm1fdGFza1F1ZXVlOwogICAgIHdoaWxlICghdGFza1F1ZXVl
LT5pc0VtcHR5KCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCkgewogICAgICAgICBBU1NFUlQobV9z
dGF0ZSA9PSBSdW5uaW5nKTsKLSAgICAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IHRhc2sodGFza1F1ZXVlLT50YWtlRmlyc3QoKSk7Ci0gICAgICAgIHRhc2stPnBlcmZv
cm1UYXNrKDApOworICAgICAgICBPd25QdHI8T3BlcmF0aW9uPiB0YXNrKHRhc2tRdWV1ZS0+dGFr
ZUZpcnN0KCkpOworICAgICAgICB0YXNrLT5wZXJmb3JtKHRoaXMpOwogCiAgICAgICAgIC8vIEV2
ZW50IGl0c2VsZiBtYXkgY2hhbmdlIHdoaWNoIHF1ZXVlIHNob3VsZCBiZSBwcm9jZXNzZWQgbmV4
dC4KICAgICAgICAgdGFza1F1ZXVlID0gbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA/ICZtX3By
ZWVtcHRpdmVUYXNrUXVldWUgOiAmbV90YXNrUXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgK
aW5kZXggZDJhOTU4NTA2MDhkYTg5ZjlkMTc0NTM1ZjNiYjFhMjhjOGNiMzJhOS4uNTEyNDc4ZDVh
ZWY3MDg1OWUyNTg1ODM0ZDE0NjljMmZlMWYyM2VlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CkBAIC01NiwxMiArNTUsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3MoSURCVHJhbnNhY3Rpb25D
YWxsYmFja3MqIGNhbGxiYWNrcykgeyBtX2NhbGxiYWNrcyA9IGNhbGxiYWNrczsgfQogCisgICAg
Y2xhc3MgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9wZXJhdGlv
bigpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKikgPSAwOworICAgIH07CisKICAgICB2b2lkIGFib3J0KFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4pOwogICAgIHZvaWQgcnVuKCk7CiAgICAgdW5zaWduZWQgc2hvcnQgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQogICAgIGJvb2wgaXNGaW5pc2hlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gRmluaXNoZWQ7IH0KLSAgICBib29sIHNjaGVkdWxlVGFzayhQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gbnVsbHB0cikgeyByZXR1cm4g
c2NoZWR1bGVUYXNrKE5vcm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7IH0KLSAgICBib29sIHNj
aGVkdWxlVGFzayhUYXNrVHlwZSwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2sg
PSBudWxscHRyKTsKKyAgICBib29sIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPE9wZXJhdGlvbj4g
dGFzaywgUGFzc093blB0cjxPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgcmV0dXJu
IHNjaGVkdWxlVGFzayhOb3JtYWxUYXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9CisgICAgYm9vbCBz
Y2hlZHVsZVRhc2soVGFza1R5cGUsIFBhc3NPd25QdHI8T3BlcmF0aW9uPiwgUGFzc093blB0cjxP
cGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpOwogICAgIHZvaWQgcmVnaXN0ZXJPcGVuQ3Vy
c29yKElEQkN1cnNvckJhY2tlbmRJbXBsKik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyT3BlbkN1cnNv
cihJREJDdXJzb3JCYWNrZW5kSW1wbCopOwogICAgIHZvaWQgYWRkUHJlZW1wdGl2ZUV2ZW50KCkg
eyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7IH0KQEAgLTk3LDcgKzEwMiw3IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKICAg
ICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKIAotICAgIHR5cGVk
ZWYgRGVxdWU8T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+ID4gVGFza1F1ZXVl
OworICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPE9wZXJhdGlvbj4gPiBUYXNrUXVldWU7CiAgICAg
VGFza1F1ZXVlIG1fdGFza1F1ZXVlOwogICAgIFRhc2tRdWV1ZSBtX3ByZWVtcHRpdmVUYXNrUXVl
dWU7CiAgICAgVGFza1F1ZXVlIG1fYWJvcnRUYXNrUXVldWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZS5oCmluZGV4IGNjNzRkMTE1NjgxN2JhMzI4YTFjMWQ3OTZjNjEyYmIxZDUyYWI4
ODUuLjdhODVjOTJjZjNhMDdiN2JhODYwMDIxMWJlN2RhNTM1ZGI3NTc4ZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZS5oCkBAIC0yNyw3ICsyNyw4IEBACiAjZGVmaW5lIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZV9oCiAKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIK
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBAIC00NCw3ICs0NSw3IEBAIHR5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAvLyBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwgYW5kIG9wdGlvbmFsbHkgb3RoZXJzIChpbiBvcmRlciB0byBw
cm94eQogLy8gY2FsbHMgYWNyb3NzIHByb2Nlc3MgYmFycmllcnMpLiBBbGwgY2FsbHMgdG8gdGhl
c2UgY2xhc3NlcyBzaG91bGQgYmUgbm9uLWJsb2NraW5nIGFuZAogLy8gdHJpZ2dlciB3b3JrIG9u
IGEgYmFja2dyb3VuZCB0aHJlYWQgaWYgbmVjZXNzYXJ5LgotY2xhc3MgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4geworY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkg
eyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKaW5kZXggNmRiMGQ3MGJmMjU4YzZjZWRk
ZThkOTJkZDljOWI2MDU5YTQxNDZmOS4uY2ZkM2QxNmRiNDBiZDhhNzUyYTZkZWRhZTI4NTQ0YWI0
Y2Q2NTYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKQEAgLTMxLDcgKzMxLDYgQEAK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkFib3J0T25Db3JydXB0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkFib3J0T25Db3JydXB0VGVzdC5jcHAKaW5kZXggZWMwNzlmNTBjZDNjYmNlOWRmZTIxMjEzOWQ0
NjA3ZTE5NDRmM2EyYi4uYTNkODBmZDQzNTk0NmI5YzUxNDg5MzMzNjZhYzAwYWEwYjEwODJhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVw
dFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNv
cnJ1cHRUZXN0LmNwcApAQCAtNDMsOCArNDMsMTAgQEAgbmFtZXNwYWNlIHsKIAogY2xhc3MgTW9j
a0lEQkNhbGxiYWNrcyA6IHB1YmxpYyBJREJDYWxsYmFja3MgewogcHVibGljOgotICAgIE1vY2tJ
REJDYWxsYmFja3MoKSA6IG1fd2FzRXJyb3JDYWxsZWQoZmFsc2UpIHsgfQotCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TW9ja0lEQkNhbGxiYWNrcz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTW9ja0lEQkNhbGxiYWNrcygpKTsKKyAgICB9CiAgICAgdmlydHVh
bCB+TW9ja0lEQkNhbGxiYWNrcygpCiAgICAgewogICAgICAgICBFWFBFQ1RfVFJVRShtX3dhc0Vy
cm9yQ2FsbGVkKTsKQEAgLTY5LDYgKzcxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBv
blN1Y2Nlc3NXaXRoUHJlZmV0Y2goY29uc3QgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mLCBjb25z
dCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiA+JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCgpIHsgfQog
cHJpdmF0ZToKKyAgICBNb2NrSURCQ2FsbGJhY2tzKCkgOiBtX3dhc0Vycm9yQ2FsbGVkKGZhbHNl
KSB7IH0KKwogICAgIGJvb2wgbV93YXNFcnJvckNhbGxlZDsKIH07CiAKQEAgLTExNiwxMSArMTIw
LDExIEBAIFRFU1QoSURCQWJvcnRUZXN0LCBUaGVUZXN0KQogewogICAgIFJlZlB0cjxJREJGYWN0
b3J5QmFja2VuZEltcGw+IGZhY3RvcnkgPSBGYWlsaW5nSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpj
cmVhdGUoKTsKICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSAiZGIgbmFtZSI7Ci0gICAgTW9ja0lE
QkNhbGxiYWNrcyBjYWxsYmFja3M7CisgICAgUmVmUHRyPE1vY2tJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IE1vY2tJREJDYWxsYmFja3M6OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxGYWtlSURCRGF0
YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzID0gRmFrZUlEQkRhdGFiYXNlQ2FsbGJh
Y2tzOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGUoImh0dHAiLCAibG9jYWxob3N0IiwgODEpOwogICAgIGNvbnN0IGlu
dDY0X3QgRHVtbXlWZXJzaW9uID0gMjsKLSAgICBmYWN0b3J5LT5vcGVuKG5hbWUsIER1bW15VmVy
c2lvbiwgJmNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIG9yaWdpbiwgMCAvKkZyYW1lKi8s
IFN0cmluZygpIC8qcGF0aCovKTsKKyAgICBmYWN0b3J5LT5vcGVuKG5hbWUsIER1bW15VmVyc2lv
biwgY2FsbGJhY2tzLmdldCgpLCBkYXRhYmFzZUNhbGxiYWNrcywgb3JpZ2luLCAwIC8qRnJhbWUq
LywgU3RyaW5nKCkgLypwYXRoKi8pOwogfQogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177762</attachid>
            <date>2012-12-05 08:40:11 -0800</date>
            <delta_ts>2012-12-05 09:07:26 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103931-20121205083736.patch</filename>
            <type>text/plain</type>
            <size>119724</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NjkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTFmZDQ5ZjNjODBhNDgz
N2I4MmI0MzVjZGE5MWY1ZDM0OWJkZWUyMy4uZWJiZGE1MTMzZDk1NzI3YjczYjYxNzg2ZGJiNjNi
NDE1YzdjOGQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMi0xMi0wMyAgSm9z
aHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUmVw
bGFjZSB1c2Ugb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayAoUGFydCAyKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzOTMxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBBY3R1YWxseSBkcm9wIHVzZSBv
ZiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIGFuZCByZW1vdmUgaW5jb3JyZWN0IHVzYWdl
IG9mCisgICAgICAgIFRocmVhZFNhZmVSZWZDb3VudGVkPD4uIERlZmluZSBhIG5ldyBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gYmFzZSBjbGFzcworICAgICAgICBmb3Igb3Bl
cmF0aW9uczsgc3RvcmFnZSBvZiBwZXItb3BlcmF0aW9uIGRhdGEgYmVjb21lcyBleHBsaWNpdC4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLSBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaDogUmVtb3ZlIGJvZ3VzICJUaHJlYWRTYWZl
IgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25P
cGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29y
SXRlcmF0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJ
bXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9w
ZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JB
ZHZhbmNlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBs
OjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlv
bk9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJz
b3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OkN1cnNvclBy
ZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJh
Y2tlbmRJbXBsOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclBy
ZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmg6IFJlbW92ZSBib2d1cyAiVGhyZWFk
U2FmZSIKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpW
ZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9i
amVjdFN0b3JlQWJvcnRPcGVyYXRpb246OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bjo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRP
cGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVy
c2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5n
ZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpE
ZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6
cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlLmg6IFJlbW92ZSBib2d1cyAiVGhyZWFkU2FmZSIKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oOiBSZW1vdmUgYm9ndXMgIlRocmVhZFNh
ZmUiCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNw
cDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oOiBSZW1vdmUgYm9ndXMgIlRocmVhZFNhZmUiCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJh
Y2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJ
REJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpP
cGVuSW5kZXhDdXJzb3JPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNr
ZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkluZGV4
QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlvbjo6SW5kZXhDb3VudE9wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5j
ZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQkluZGV4QmFj
a2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmll
dmFsT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5k
ZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJh
Y2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpJbmRleFZhbHVlUmV0cmll
dmFsT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Ok9w
ZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhC
YWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6
cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZh
bHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4QmFja2VuZEltcGw6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJ
bXBsOjpnZXRLZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEludGVyZmFjZS5oOiBSZW1vdmUgYm9ndXMgIlRocmVhZFNhZmUiCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5Lmg6IFJlbW92ZSBib2d1cyAiVGhyZWFkU2FmZSIKKyAgICAgICAg
KElEQktleSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaDogUmVt
b3ZlIGJvZ3VzICJUaHJlYWRTYWZlIgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpP
YmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0
U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlv
bjo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJ
bmRleGVzUmVhZHlPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246Ok9iamVjdFN0b3Jl
SW5kZXhlc1JlYWR5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVj
dFN0b3JlRGVsZXRpb25PcGVyYXRpb246Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVD
bGVhck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbjo6T2JqZWN0U3Rv
cmVDbGVhck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4T3BlcmF0aW9uOjpDcmVh
dGVJbmRleE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpEZWxl
dGVJbmRleE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T3Blbk9i
amVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3Rv
cmVDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6T2JqZWN0
U3RvcmVDb3VudE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRl
eEFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3Jl
UmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUluZGV4
ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0
U3RvcmVEZWxldGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUlu
ZGV4T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T3Blbk9iamVjdFN0b3JlQ3Vy
c29yT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlIGJv
Z3VzICJUaHJlYWRTYWZlIgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
aDogUmVtb3ZlIGJvZ3VzICJUaHJlYWRTYWZlIgorICAgICAgICAoSURCUmVxdWVzdCk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKTogQXBwZWFzZSBSZWZQdHI8PiBhZG9wdGlvbiBzdHJpY3RuZXNzLgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVUYXNrKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmFib3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVk
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Lmg6CisgICAgICAgIChPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uOjp+T3BlcmF0aW9uKToKKyAgICAgICAgKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6c2NoZWR1bGVUYXNrKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlIGJvZ3VzICJUaHJlYWRTYWZlIgor
CiAyMDEyLTEyLTA1ICBNaWNoYWVsIFBydWV0dCAgPG1pY2hhZWxANjhrLm9yZz4KIAogICAgICAg
ICBJbmRleGVkREI6IEltcGxlbWVudCBJbmRleGVkREIgYmluZGluZ3MgZm9yIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA2MzQ0NTBkNGFkMmVjNTg3YjU0M2I0NThlMjRlMWExNGQy
MjI0N2U4Li5iMDU4Y2JmM2JkNjBmNTMzNGU3MzVlNzUyZDE0YWU3N2U0MjRkY2ZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTEyLTAzICBKb3NodWEg
QmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZXBsYWNl
IHVzZSBvZiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIChQYXJ0IDIpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM5MzEKKworICAgICAgICBS
ZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgIE5vdyB0aGF0IElEQkNhbGxiYWNrcyB1
c2VzIHJlYWwgUmVmUHRyPD4gYSBtb2NrIGNsYXNzIG5lZWRzIHRvIGJlIGhlYXAgYWxsb2NhdGVk
LgorCisgICAgICAgICogdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1vY2tJREJDYWxsYmFja3M6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSURCQ2FsbGJhY2tzOjpNb2NrSURCQ2FsbGJhY2tzKToKKyAgICAgICAgKE1vY2tJREJDYWxs
YmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMTItMDUgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
IFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
YWxsYmFja3MuaAppbmRleCBiODhiMGNkZTNmNzJhY2RlYzgyNzg5MGU1YzI4OWEwMWI2NmUyMmMy
Li4xY2Y0YjdiZDBkYzU0ZTFkYTE5MjYyNDFlMmUzY2YzN2YwNmZhMDRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaApAQCAtMzUsNyArMzUs
NyBAQAogI2luY2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKLSNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCkBAIC00NCw4ICs0NCw3IEBAIGNsYXNzIERP
TVN0cmluZ0xpc3Q7CiBjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOwogY2xhc3MgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOwogCi0vLyBGSVhNRTogQWxsIGNoaWxkIGNsYXNz
ZXMgbmVlZCB0byBiZSBtYWRlIHRocmVhZHNhZmUuCi1jbGFzcyBJREJDYWxsYmFja3MgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCQ2FsbGJhY2tzPiB7CitjbGFzcyBJREJDYWxsYmFj
a3MgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJDYWxsYmFja3M+IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5JREJDYWxsYmFja3MoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IDg2NGU5ZmFk
ZWIzZmVlNjFjNzQ1ODY5YTZjNWI0N2I4YmM0NDJjMWMuLmQyNzU4ODMxOTcxODdkZjFiN2I3NGFk
ZDFlNWY4N2MzZTQ0NzI3YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRU
YXNrLmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJh
Y2tzLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgpAQCAtNDIsMzQgKzQxLDY0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1
cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiB7CitjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vy
c29ySXRlcmF0aW9uT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBj
dXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZDdXJz
b3JJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0sIGN1cnNvciwga2V5LCBjYWxsYmFja3MpOwor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihjdXJz
b3IsIGtleSwgY2FsbGJhY2tzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVy
Zm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAg
ICBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb24oUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1w
bD4gY3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY3Vyc29yKGN1cnNvcikKKyAgICAgICAgLCBtX2tl
eShrZXkpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisK
KyAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IG1fY3Vyc29yOworICAgIFJlZlB0cjxJ
REJLZXk+IG1fa2V5OworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsK
IAotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRpb24gewor
Y2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRpb24gOiBwdWJs
aWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzT3du
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBj
cmVhdGVDYWxsYmFja1Rhc2soJkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBlcmZvcm0sIGN1cnNv
ciwgY291bnQsIGNhbGxiYWNrcyk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3Vyc29y
QWR2YW5jZU9wZXJhdGlvbihjdXJzb3IsIGNvdW50LCBjYWxsYmFja3MpKTsKICAgICB9CisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0
ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2N1cnNvcihjdXJz
b3IpCisgICAgICAgICwgbV9jb3VudChjb3VudCkKKyAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxs
YmFja3MpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4g
bV9jdXJzb3I7CisgICAgdW5zaWduZWQgbG9uZyBtX2NvdW50OworICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIAotY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1
cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uIHsKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNr
KCZDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSwgY3Vyc29yLCBudW1i
ZXJUb0ZldGNoLCBjYWxsYmFja3MpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEN1cnNv
clByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uKGN1cnNvciwgbnVtYmVyVG9GZXRjaCwgY2FsbGJh
Y2tzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4sIGludCBudW1i
ZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIEN1cnNvclByZWZldGNo
SXRlcmF0aW9uT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNv
ciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
CisgICAgICAgIDogbV9jdXJzb3IoY3Vyc29yKQorICAgICAgICAsIG1fbnVtYmVyVG9GZXRjaChu
dW1iZXJUb0ZldGNoKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7Cisg
ICAgfQorCisgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBtX2N1cnNvcjsKKyAgICBp
bnQgbV9udW1iZXJUb0ZldGNoOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OwogfTsKIAogSURCQ3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJzb3JU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCogb2JqZWN0U3RvcmUpCkBAIC0xMTEsMjkgKzE0MCwyOCBAQCB2b2lkIElEQkN1cnNv
ckJhY2tlbmRJbXBsOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPgogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAKLXZvaWQgSURC
Q3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1
cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRpb246
OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopCiB7CiAgICAgSURCX1RSQUNFKCJD
dXJzb3JBZHZhbmNlT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBs
PiBjdXJzb3IgPSBwcnBDdXJzb3I7Ci0gICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8ICFjdXJz
b3ItPm1fY3Vyc29yLT5hZHZhbmNlKGNvdW50KSkgewotICAgICAgICBjdXJzb3ItPm1fY3Vyc29y
ID0gMDsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKj4oMCkpOworICAgIGlmICghbV9jdXJzb3ItPm1fY3Vyc29yIHx8ICFtX2N1
cnNvci0+bV9jdXJzb3ItPmFkdmFuY2UobV9jb3VudCkpIHsKKyAgICAgICAgbV9jdXJzb3ItPm1f
Y3Vyc29yID0gMDsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxT
ZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXko
KSwgY3Vyc29yLT52YWx1ZSgpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKG1fY3Vyc29y
LT5rZXkoKSwgbV9jdXJzb3ItPnByaW1hcnlLZXkoKSwgbV9jdXJzb3ItPnZhbHVlKCkpOwogfQog
Ci12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OnBl
cmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZEltcGw+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckl0ZXJh
dGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKikKIHsKICAg
ICBJREJfVFJBQ0UoIkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiIpOwotICAgIGlmICghY3Vyc29y
LT5tX2N1cnNvciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVGdW5jdGlvbihrZXkuZ2V0
KCkpKSB7Ci0gICAgICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7CisgICAg
aWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwgIW1fY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVG
dW5jdGlvbihtX2tleS5nZXQoKSkpIHsKKyAgICAgICAgbV9jdXJzb3ItPm1fY3Vyc29yID0gMDsK
KyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqPigwKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52
YWx1ZSgpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKG1fY3Vyc29yLT5rZXkoKSwgbV9j
dXJzb3ItPnByaW1hcnlLZXkoKSwgbV9jdXJzb3ItPnZhbHVlKCkpOwogfQogCiB2b2lkIElEQkN1
cnNvckJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKQEAgLTE1Nyw1MCArMTg1LDQ5IEBAIHZvaWQg
SURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gs
IFBhc3NSZWZQdHI8SURCQ2FsCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFz
ZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKIH0KIAot
dm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRp
b246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZEltcGw+IHBycEN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCit2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQ
cmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKikKIHsKICAgICBJREJfVFJBQ0UoIkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9u
Iik7Ci0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBwcnBDdXJzb3I7
CiAKICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZEtleXM7CiAgICAgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+ID4gZm91bmRQcmltYXJ5S2V5czsKICAgICBWZWN0b3I8UmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gPiBmb3VuZFZhbHVlczsKIAotICAgIGlmIChjdXJzb3ItPm1fY3Vy
c29yKQotICAgICAgICBjdXJzb3ItPm1fc2F2ZWRDdXJzb3IgPSBjdXJzb3ItPm1fY3Vyc29yLT5j
bG9uZSgpOworICAgIGlmIChtX2N1cnNvci0+bV9jdXJzb3IpCisgICAgICAgIG1fY3Vyc29yLT5t
X3NhdmVkQ3Vyc29yID0gbV9jdXJzb3ItPm1fY3Vyc29yLT5jbG9uZSgpOwogCiAgICAgY29uc3Qg
c2l6ZV90IG1heFNpemVFc3RpbWF0ZSA9IDEwICogMTAyNCAqIDEwMjQ7CiAgICAgc2l6ZV90IHNp
emVFc3RpbWF0ZSA9IDA7CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlclRvRmV0Y2g7
ICsraSkgewotICAgICAgICBpZiAoIWN1cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJz
b3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpIHsKLSAgICAgICAgICAgIGN1cnNvci0+bV9jdXJzb3Ig
PSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9udW1iZXJUb0ZldGNoOyArK2kpIHsKKyAg
ICAgICAgaWYgKCFtX2N1cnNvci0+bV9jdXJzb3IgfHwgIW1fY3Vyc29yLT5tX2N1cnNvci0+Y29u
dGludWVGdW5jdGlvbigwKSkgeworICAgICAgICAgICAgbV9jdXJzb3ItPm1fY3Vyc29yID0gMDsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgZm91bmRLZXlzLmFwcGVu
ZChjdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7Ci0gICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBw
ZW5kKGN1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKSk7CisgICAgICAgIGZvdW5kS2V5cy5h
cHBlbmQobV9jdXJzb3ItPm1fY3Vyc29yLT5rZXkoKSk7CisgICAgICAgIGZvdW5kUHJpbWFyeUtl
eXMuYXBwZW5kKG1fY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpKTsKIAotICAgICAgICBp
ZiAoY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlDdXJzb3IpCi0gICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShjdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpKSk7Cisg
ICAgICAgIGlmIChtX2N1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRl
cmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPm1fY3Vyc29yLT52
YWx1ZSgpKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgpKTsKIAotICAgICAgICBzaXplRXN0aW1hdGUg
Kz0gY3Vyc29yLT5tX2N1cnNvci0+a2V5KCktPnNpemVFc3RpbWF0ZSgpOwotICAgICAgICBzaXpl
RXN0aW1hdGUgKz0gY3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUo
KTsKLSAgICAgICAgaWYgKGN1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQotICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IGN1
cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAg
ICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT5rZXkoKS0+c2l6ZUVzdGltYXRl
KCk7CisgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnByaW1hcnlL
ZXkoKS0+c2l6ZUVzdGltYXRlKCk7CisgICAgICAgIGlmIChtX2N1cnNvci0+bV9jdXJzb3JUeXBl
ICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICAg
ICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS5sZW5ndGgoKSAq
IHNpemVvZihVQ2hhcik7CiAKICAgICAgICAgaWYgKHNpemVFc3RpbWF0ZSA+IG1heFNpemVFc3Rp
bWF0ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmICghZm91bmRLZXlzLnNp
emUoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxp
emVkU2NyaXB0VmFsdWUqPigwKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3Rh
dGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRoUHJlZmV0Y2goZm91bmRLZXlzLCBm
b3VuZFByaW1hcnlLZXlzLCBmb3VuZFZhbHVlcyk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vz
c1dpdGhQcmVmZXRjaChmb3VuZEtleXMsIGZvdW5kUHJpbWFyeUtleXMsIGZvdW5kVmFsdWVzKTsK
IH0KIAogdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hSZXNldChpbnQgdXNlZFBy
ZWZldGNoZXMsIGludCB1bnVzZWRQcmVmZXRjaGVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oCmlu
ZGV4IDliMmQ1N2IzMGRlZGQwY2I2YWY0MWY2NWFmMWE5NTM2MDk0OTllMGYuLjNkYzU0ZjNmMjFm
Zjk2YWNkZmQ3NjkzZGMzMTQ4NGFlYmNjOTlhZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgK
QEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDIsNyArNDEsNyBAQCBjbGFzcyBTZXJpYWxpemVkU2NyaXB0
VmFsdWU7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZT4geworY2xhc3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5JREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlKCkge30KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IGExYWE5ZjdiNjQ3
OTA4NTEzZGRhODViMTZlYzgxNTA4MmQ4Njg3NDkuLjQ5ZTUwYjQ2MWEyOWIzZDIyZTA4MjcyYmY2
NDY3NDVhMjRmYjFkY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggNDYzODg3NzY0YjU3ZGUzNmQ1ZDlkMTdiZGMzZGY5
NDhmNGFjNTk1ZC4uZGMyZWU1ZjljMDVmZTJhMDJiZjYzYmNiM2MyZjRmNzg0NzEwOTVkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAi
SURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJJREJGYWN0b3J5QmFja2VuZEltcGwuaCIKQEAgLTM5LDY0ICszOCwxMTggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVh
dGVPYmplY3RTdG9yZU9wZXJhdGlvbiB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9w
ZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCiAg
ICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZDcmVhdGVPYmplY3RTdG9y
ZU9wZXJhdGlvbjo6cGVyZm9ybSwgZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbik7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24o
ZGF0YWJhc2UsIG9iamVjdFN0b3JlKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQg
cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgQ3JlYXRlT2JqZWN0U3RvcmVP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICAgICAg
OiBtX2RhdGFiYXNlKGRhdGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3Rv
cmUpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBt
X2RhdGFiYXNlOworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVj
dFN0b3JlOwogfTsKIAotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0
U3RvcmVPcGVyYXRpb24geworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3Bl
cmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBk
YXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b246OnBlcmZvcm0sIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pOworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGRhdGFiYXNl
LCBvYmplY3RTdG9yZSkpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisgICAgICAgIDogbV9kYXRh
YmFzZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gbV9kYXRhYmFz
ZTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsK
IH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRp
b24geworY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlv
biA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGludDY0X3QgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtLCBkYXRhYmFzZSwgdmVy
c2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFZlcnNpb25DaGFuZ2VPcGVyYXRpb24oZGF0YWJhc2UsIHZl
cnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpKTsKICAgICB9CisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIFZlcnNpb25DaGFuZ2VPcGVyYXRpb24o
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJz
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKKyAgICAgICAgOiBtX2RhdGFiYXNl
KGRhdGFiYXNlKQorICAgICAgICAsIG1fdmVyc2lvbih2ZXJzaW9uKQorICAgICAgICAsIG1fY2Fs
bGJhY2tzKGNhbGxiYWNrcykKKyAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKGRhdGFiYXNl
Q2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4gbV9kYXRhYmFzZTsKKyAgICBpbnQ2NF90IG1fdmVyc2lvbjsKKyAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IG1fZGF0YWJhc2VDYWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIHsKK2NsYXNzIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNr
VGFzaygmQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSwgZGF0YWJhc2Us
IG9iamVjdFN0b3JlKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDcmVhdGVPYmplY3RT
dG9yZUFib3J0T3BlcmF0aW9uKGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpOwogICAgIH0KKyAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRl
OgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4pOworICAgIENyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24oUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICAgICAgOiBtX2RhdGFiYXNlKGRh
dGFiYXNlKQorICAgICAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgeworICAg
IH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBtX2RhdGFiYXNlOworICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOwogfTsKIAot
Y2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJh
dGlvbiB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCisg
ICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb246OnBlcmZvcm0sIGRhdGFiYXNlLCBvYmplY3RTdG9yZSk7CisgICAgICAgIHJldHVy
biBhZG9wdFB0cihuZXcgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihkYXRhYmFzZSwg
b2JqZWN0U3RvcmUpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKKyAgICBEZWxldGVPYmpl
Y3RTdG9yZUFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
ZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUpCisgICAgICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAgICAgLCBtX29iamVjdFN0
b3JlKG9iamVjdFN0b3JlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gbV9kYXRhYmFzZTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gbV9vYmplY3RTdG9yZTsKIH07CiAKLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbiB7CitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGlu
dDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9uLCBp
bnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVD
YWxsYmFja1Rhc2soJlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSwgZGF0YWJh
c2UsIHByZXZpb3VzVmVyc2lvbiwgcHJldmlvdXNJbnRWZXJzaW9uKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24oZGF0YWJhc2UsIHByZXZp
b3VzVmVyc2lvbiwgcHJldmlvdXNJbnRWZXJzaW9uKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0
X3QgcHJldmlvdXNJbnRWZXJzaW9uKTsKKyAgICBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24o
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9uKQorICAgICAgICA6
IG1fZGF0YWJhc2UoZGF0YWJhc2UpCisgICAgICAgICwgbV9wcmV2aW91c1ZlcnNpb24ocHJldmlv
dXNWZXJzaW9uKQorICAgICAgICAsIG1fcHJldmlvdXNJbnRWZXJzaW9uKHByZXZpb3VzSW50VmVy
c2lvbikKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IG1fZGF0YWJhc2U7CisgICAgU3RyaW5nIG1fcHJldmlvdXNWZXJzaW9uOworICAgIGludDY0X3Qg
bV9wcmV2aW91c0ludFZlcnNpb247CiB9OwogCiAKQEAgLTIyNCw3ICsyNzcsNyBAQCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y3JlYXRlT2JqZWN0UwogICAgIEFTU0VSVChpZCA+IG1fbWV0YWRhdGEubWF4T2JqZWN0U3Rv
cmVJZCk7CiAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9yZUlkID0gaWQ7CiAKLSAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pLCBDcmVhdGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpKSkgeworICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIG9iamVjdFN0b3JlKSwgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3Jl
YXRlKHRoaXMsIG9iamVjdFN0b3JlKSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CkBAIC0yMzMsMTAgKzI4NiwxMCBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0UwogICAgIHJldHVy
biBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiQ3JlYXRl
T2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLSAgICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9y
ZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgb2JqZWN0U3RvcmUtPm5hbWUo
KSwgb2JqZWN0U3RvcmUtPmtleVBhdGgoKSwgb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSkp
IHsKKyAgICBpZiAoIW1fZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9y
ZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZS0+aWQo
KSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9vYmplY3RTdG9yZS0+bmFtZSgpLCBtX29iamVjdFN0
b3JlLT5rZXlQYXRoKCksIG1fb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSkpIHsKICAgICAg
ICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNTUs
MzYgKzMwOCwzNSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0
b3JlKGludDY0X3QgaWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZAogICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgp
ID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKLSAgICBpZiAoIXRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pLCBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmUpKSkgeworICAgIGlmICghdHJhbnNhY3Rpb24t
PnNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9i
amVjdFN0b3JlKSwgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG9iamVjdFN0b3JlKSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJh
bnNhY3Rpb25JbmFjdGl2ZUVycm9yOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fb2Jq
ZWN0U3RvcmVzLnJlbW92ZShpZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiRGVsZXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24iKTsKLSAgICBkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0
ZU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRh
YmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOworICAgIG1fZGF0YWJhc2UtPm1fYmFja2lu
Z1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV9kYXRhYmFzZS0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSk7CiB9CiAKLXZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9y
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBkYXRhYmFzZSwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
bikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6
cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJ
REJfVFJBQ0UoIlZlcnNpb25DaGFuZ2VPcGVyYXRpb24iKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MocHJwQ2FsbGJhY2tzKTsKLSAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBk
YXRhYmFzZS0+aWQoKTsKLSAgICBpbnQ2NF90IG9sZFZlcnNpb24gPSBkYXRhYmFzZS0+bV9tZXRh
ZGF0YS5pbnRWZXJzaW9uOwotICAgIEFTU0VSVCh2ZXJzaW9uID4gb2xkVmVyc2lvbik7Ci0gICAg
ZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50VmVyc2lvbiA9IHZlcnNpb247Ci0gICAgaWYgKCFkYXRh
YmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgZGF0YWJhc2UtPm1f
bWV0YWRhdGEuaW50VmVyc2lvbikpIHsKKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtX2RhdGFi
YXNlLT5pZCgpOworICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IG1fZGF0YWJhc2UtPm1fbWV0YWRh
dGEuaW50VmVyc2lvbjsKKyAgICBBU1NFUlQobV92ZXJzaW9uID4gb2xkVmVyc2lvbik7CisgICAg
bV9kYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gbV92ZXJzaW9uOworICAgIGlmICgh
bV9kYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPnVwZGF0ZUlEQkRhdGFiYXNlSW50VmVyc2lvbih0
cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgbV9kYXRh
YmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uKSkgewogICAgICAgICBSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFn
ZS4iKTsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKKyAgICAgICAgbV9jYWxs
YmFja3MtPm9uRXJyb3IoZXJyb3IpOwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3Ip
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIEFTU0VSVCghZGF0YWJhc2UtPm1fcGVuZGlu
Z1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb24pOwotICAgIGRhdGFiYXNlLT5tX3BlbmRpbmdTZWNv
bmRIYWxmT3BlbldpdGhWZXJzaW9uID0gUGVuZGluZ09wZW5XaXRoVmVyc2lvbkNhbGw6OmNyZWF0
ZShjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB2ZXJzaW9uKTsKLSAgICBjYWxsYmFja3Mt
Pm9uVXBncmFkZU5lZWRlZChvbGRWZXJzaW9uLCB0cmFuc2FjdGlvbiwgZGF0YWJhc2UpOworICAg
IEFTU0VSVCghbV9kYXRhYmFzZS0+bV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbik7
CisgICAgbV9kYXRhYmFzZS0+bV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbiA9IFBl
bmRpbmdPcGVuV2l0aFZlcnNpb25DYWxsOjpjcmVhdGUobV9jYWxsYmFja3MsIG1fZGF0YWJhc2VD
YWxsYmFja3MsIG1fdmVyc2lvbik7CisgICAgbV9jYWxsYmFja3MtPm9uVXBncmFkZU5lZWRlZChv
bGRWZXJzaW9uLCB0cmFuc2FjdGlvbiwgbV9kYXRhYmFzZSk7CiB9CiAKIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24pCkBAIC00MzksNyArNDkxLDcgQEAgdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50
NjRfdCByZXF1ZXN0ZWRWZXIKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbkludGVyZmFjZSA9IGNyZWF0ZVRyYW5zYWN0aW9uKDAsIG9iamVjdFN0
b3JlSWRzLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OmZyb20odHJhbnNhY3Rpb25JbnRlcmZhY2UuZ2V0KCkpOwogCi0gICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKFZlcnNpb25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbiksIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG1fbWV0YWRh
dGEudmVyc2lvbiwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uKSkpIHsKKyAgICBpZiAoIXRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soVmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJl
cXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MpLCBWZXJzaW9uQ2hh
bmdlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtX21ldGFkYXRhLnZlcnNpb24sIG1fbWV0
YWRhdGEuaW50VmVyc2lvbikpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
IH0KICAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb24pOwpAQCAt
NTU5LDIzICs2MTEsMjUgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0
U3RvcmVzKCkKICAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG9iamVjdFN0b3Jlc1tpXS5pZCwg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3Jlc1tpXSkp
OwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlQWJv
cnRPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUpCit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKGRhdGFiYXNlLT5tX29iamVj
dFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZS0+aWQoKSkpOwotICAgIGRhdGFiYXNlLT5tX29i
amVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmUtPmlkKCkpOworICAgIEFTU0VSVCghdHJhbnNh
Y3Rpb24pOworICAgIEFTU0VSVChtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyht
X29iamVjdFN0b3JlLT5pZCgpKSk7CisgICAgbV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMucmVt
b3ZlKG1fb2JqZWN0U3RvcmUtPmlkKCkpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2Us
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gcHJwT2JqZWN0U3RvcmUpCit2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRp
b246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7Ci0g
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gcHJwT2Jq
ZWN0U3RvcmU7Ci0gICAgQVNTRVJUKCFkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuY29udGFpbnMo
b2JqZWN0U3RvcmUtPmlkKCkpKTsKLSAgICBkYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuc2V0KG9i
amVjdFN0b3JlLT5pZCgpLCBvYmplY3RTdG9yZSk7CisgICAgQVNTRVJUKCF0cmFuc2FjdGlvbik7
CisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhtX29iamVj
dFN0b3JlLT5pZCgpKSk7CisgICAgbV9kYXRhYmFzZS0+bV9vYmplY3RTdG9yZXMuc2V0KG1fb2Jq
ZWN0U3RvcmUtPmlkKCksIG1fb2JqZWN0U3RvcmUpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFz
ZSwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJz
aW9uKQordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVy
YXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7
Ci0gICAgZGF0YWJhc2UtPm1fbWV0YWRhdGEudmVyc2lvbiA9IHByZXZpb3VzVmVyc2lvbjsKLSAg
ICBkYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gcHJldmlvdXNJbnRWZXJzaW9uOwor
ICAgIEFTU0VSVCghdHJhbnNhY3Rpb24pOworICAgIG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEudmVy
c2lvbiA9IG1fcHJldmlvdXNWZXJzaW9uOworICAgIG1fZGF0YWJhc2UtPm1fbWV0YWRhdGEuaW50
VmVyc2lvbiA9IG1fcHJldmlvdXNJbnRWZXJzaW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCmluZGV4IDg1MDA2MmMyOTE4NzMyYmEzNGE5
MjdjN2IwN2U5OTVlYTkwMzY0ZGYuLjEwOTUzMThjMzIyOWE2OWVlMzk5OWVlMGY4ZWZiM2Y1MGM5
MDg3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAj
ZGVmaW5lIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZV9oCiAKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCkBAIC00Nyw3ICs0Nyw3IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CiAvLyBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IElEQkRhdGFiYXNlQmFja2VuZEltcGwg
YW5kIG9wdGlvbmFsbHkgb3RoZXJzIChpbiBvcmRlciB0byBwcm94eQogLy8gY2FsbHMgYWNyb3Nz
IHByb2Nlc3MgYmFycmllcnMpLiBBbGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91bGQgYmUg
bm9uLWJsb2NraW5nIGFuZAogLy8gdHJpZ2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQg
aWYgbmVjZXNzYXJ5LgotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4geworY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCRGF0YWJh
c2VCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUNhbGxiYWNrcy5oCmluZGV4IDQ2OTNlNjM3YWVk
YWFjYmM0YzE5ZmEwZTQ4NTQ5NDJlZDEzMjVjM2IuLjg0MWVjMGYzZTA0MTcwYWRhNzM1MGQ0NGRh
ODZhNGIyNzM5YmM5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VDYWxsYmFja3MuaApAQCAtMzQsOSArMzQsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBVc2VzIFRocmVhZFNhZmVSZWZDb3VudGVkIGZv
ciBzdG9yYWdlIGluIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgYnV0Ci0vLyBpdCBpcyBu
ZXZlciBhY3R1YWxseSB1c2VkIG9uIG11bHRpcGxlIHRocmVhZHMuIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTAxNDgzCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxJREJEYXRhYmFzZUNhbGxiYWNrcz4geworY2xhc3MgSURCRGF0YWJhc2VDYWxs
YmFja3MgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJEYXRhYmFzZUNhbGxiYWNrcz4gewogcHVibGlj
OgogICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQ2FsbGJhY2tzKCkgeyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwCmluZGV4IDJkNTg0MmNkMTUwNGMxZmRjYTEzNThlMWY4M2Q4ZGFhYjg0OWQzNTguLjQ3
MzhlMzVjMjY5MTc0OTQ3NzQzYzk2NGZlYWVhNDEzNjUwNWE0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaAppbmRleCBiYWIyMTlmNWY0ZWM1NGRmMjNhYzdkZjRmNDU0Yjc2ZmFlYjcy
ZjJlLi44M2EyODU3MjIxYWQyMmUyNzE2MWY5OTg2M2M3ZTQ5MzUxMDNlNDIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2VfaAogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpA
QCAtNDgsNyArNDgsNyBAQCB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogLy8gVGhpcyBpcyBp
bXBsZW1lbnRlZCBieSBJREJGYWN0b3J5QmFja2VuZEltcGwgYW5kIG9wdGlvbmFsbHkgb3RoZXJz
IChpbiBvcmRlciB0byBwcm94eQogLy8gY2FsbHMgYWNyb3NzIHByb2Nlc3MgYmFycmllcnMpLiBB
bGwgY2FsbHMgdG8gdGhlc2UgY2xhc3NlcyBzaG91bGQgYmUgbm9uLWJsb2NraW5nIGFuZAogLy8g
dHJpZ2dlciB3b3JrIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQgaWYgbmVjZXNzYXJ5LgotY2xhc3Mg
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IHsKK2NsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZT4gY3JlYXRlKCk7CiAgICAgdmlydHVhbCB+SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UoKSB7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAKaW5kZXggOWY3YzI5NzA3NWU0NTg2MTE3ZmFjYzIxNTMzMDlmMzVm
NDQzZWExOC4uOTFlZThmMDdmZWZlMWJmMmU2NjUwZWE4MzIzZDVjMjBiMTM0NTI3MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiSURCQmFja2lu
Z1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29y
QmFja2VuZEltcGwuaCIKQEAgLTQzLDQ0ICs0Miw4OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIElEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiB7
CitjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb24gOiBw
dWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBj
cmVhdGVDYWxsYmFja1Rhc2soJk9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSwgaW5k
ZXgsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rp
b24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5JbmRleEN1cnNvck9wZXJhdGlv
bihpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzKSk7CiAg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
KTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIHVuc2lnbmVkIHNob3J0IHVudHlwZWREaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgT3BlbkluZGV4Q3Vyc29yT3BlcmF0
aW9uKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1f
a2V5UmFuZ2Uoa2V5UmFuZ2UpCisgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQorICAg
ICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNh
bGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IG1faW5kZXg7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIHVuc2ln
bmVkIHNob3J0IG1fZGlyZWN0aW9uOworICAgIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1
cnNvclR5cGUgbV9jdXJzb3JUeXBlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJh
Y2tzOwogfTsKIAotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlv
biB7CitjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleENvdW50T3BlcmF0aW9uIDogcHVi
bGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmSW5kZXhDb3VudE9wZXJhdGlvbjo6
cGVyZm9ybSwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbmRleENvdW50T3BlcmF0aW9uKGluZGV4LCBrZXlSYW5n
ZSwgY2FsbGJhY2tzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgSW5kZXhDb3VudE9wZXJhdGlv
bihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAg
ICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCisg
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+
IG1fa2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiB9Owog
Ci1jbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJldHJpZXZh
bE9wZXJhdGlvbiB7CitjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRW
YWx1ZVJldHJpZXZhbE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFj
a1Rhc2soJkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtLCBp
bmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uKGluZGV4
LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQg
cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgSW5kZXhSZWZl
cmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAg
ICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNr
cykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IG1faW5k
ZXg7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOworICAgIFJlZlB0cjxJREJD
YWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIAotY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbDo6
SW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiB7CitjbGFzcyBJREJJbmRleEJhY2tlbmRJbXBs
OjpJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSwgaW5k
ZXgsIGtleVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uKGluZGV4LCBrZXlSYW5nZSwg
Y2FsbGJhY2tzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgSW5kZXhWYWx1ZVJldHJpZXZhbE9w
ZXJhdGlvbihQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFu
Z2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKKyAgICBSZWZQdHI8SURCS2V5
UmFuZ2U+IG1fa2V5UmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
CiB9OwogCiAKQEAgLTk1LDE5ICsxMzgsMTkgQEAgSURCSW5kZXhCYWNrZW5kSW1wbDo6fklEQklu
ZGV4QmFja2VuZEltcGwoKQogewogfQogCi12b2lkIElEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5J
bmRleEN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IHVudHlwZWREaXJlY3Rpb24sIElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbikKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0
aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewog
ICAgIElEQl9UUkFDRSgiT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uIik7Ci0gICAgSURCQ3Vyc29y
OjpEaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpEaXJlY3Rpb24+
KHVudHlwZWREaXJlY3Rpb24pOworICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiA9
IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPihtX2RpcmVjdGlvbik7CiAKICAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvcjsKIAotICAg
IHN3aXRjaCAoY3Vyc29yVHlwZSkgeworICAgIHN3aXRjaCAobV9jdXJzb3JUeXBlKSB7CiAgICAg
Y2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcjoKLSAgICAgICAg
YmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlD
dXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRh
YmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCks
IHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5pZCgpLCBtX2tleVJhbmdlLmdl
dCgpLCBkaXJlY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yOgotICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBp
bmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1cnNvcih0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7
CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
aW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCks
IG1faW5kZXgtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJz
b3I6CiAgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlw
ZToKQEAgLTExNiwxMiArMTU5LDEyIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6T3Blbklu
ZGV4Q3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRlCiAgICAgfQog
CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOworICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+
KDApKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW1wbD4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNraW5nU3Rv
cmVDdXJzb3IuZ2V0KCksIGN1cnNvclR5cGUsIHRyYW5zYWN0aW9uLmdldCgpLCBpbmRleC0+bV9v
YmplY3RTdG9yZUJhY2tlbmQpOwotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vy
c29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7CisgICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSBJREJDdXJzb3JCYWNrZW5kSW1w
bDo6Y3JlYXRlKGJhY2tpbmdTdG9yZUN1cnNvci5nZXQoKSwgbV9jdXJzb3JUeXBlLCB0cmFuc2Fj
dGlvbiwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQpOworICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vy
c29yLT52YWx1ZSgpKTsKIH0KIAogdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29y
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQpAQCAtMTI5
LDcgKzE3Miw3IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQKICAgICBJREJfVFJBQ0UoIklEQklu
ZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFu
c2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9wZW5JbmRl
eEN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBkaXJlY3Rpb24sIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9u
KSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9wZW5JbmRleEN1cnNvck9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yLCBjYWxsYmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
QWJvcnRFcnJvcikpOwogfQogCkBAIC0xMzgsMTggKzE4MSwxOCBAQCB2b2lkIElEQkluZGV4QmFj
a2VuZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IHVuc2lnbgogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNv
ciIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5k
ZXhLZXlDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soT3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
a2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlD
dXJzb3IsIGNhbGxiYWNrcykpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAK
LXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJhdGlvbjo6cGVyZm9ybShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24pCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb246
OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAg
SURCX1RSQUNFKCJJbmRleENvdW50T3BlcmF0aW9uIik7CiAgICAgdWludDMyX3QgY291bnQgPSAw
OwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJz
b3IgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIElE
QkN1cnNvcjo6TkVYVCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRh
YmFzZUlkKCksIG1faW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2luZGV4LT5p
ZCgpLCBtX2tleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwogICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyhjb3VudCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTE1Nyw3ICsyMDAsNyBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4
Q291bnRPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCiAgICAgICAg
ICsrY291bnQ7CiAgICAgfSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0
aW9uKDApKTsKIAotICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKKyAgICBtX2NhbGxi
YWNrcy0+b25TdWNjZXNzKGNvdW50KTsKIH0KIAogdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpj
b3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCkBAIC0xNjUsNzggKzIwOCw3NiBAQCB2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNz
UmVmUHRyPElEQkNhbAogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQi
KTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAg
ICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKEluZGV4Q291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBy
YW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhJbmRleENvdW50T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2UsIGNhbGxi
YWNrcykpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAKLXZvaWQgSURCSW5k
ZXhCYWNrZW5kSW1wbDo6SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OnBl
cmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVy
ZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIkluZGV4UmVmZXJlbmNlZFZh
bHVlUmV0cmlldmFsT3BlcmF0aW9uIik7CiAKICAgICBSZWZQdHI8SURCS2V5PiBrZXk7CiAKLSAg
ICBpZiAoa2V5UmFuZ2UtPmlzT25seUtleSgpKQotICAgICAgICBrZXkgPSBrZXlSYW5nZS0+bG93
ZXIoKTsKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCisgICAgICAgIGtleSA9IG1f
a2V5UmFuZ2UtPmxvd2VyKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgp
LT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwg
aW5kZXgtPmlkKCksIGtleVJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOworICAgICAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1faW5k
ZXgtPmJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmpl
Y3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIElE
QkN1cnNvcjo6TkVYVCk7CiAKICAgICAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAg
ICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgICAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
a2V5ID0gYmFja2luZ1N0b3JlQ3Vyc29yLT5rZXkoKTsKICAgICB9CiAKICAgICBSZWZQdHI8SURC
S2V5PiBwcmltYXJ5S2V5OwotICAgIGJvb2wgb2sgPSBpbmRleC0+YmFja2luZ1N0b3JlKCktPmdl
dFByaW1hcnlLZXlWaWFJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgp
LCBpbmRleC0+aWQoKSwgKmtleSwgcHJpbWFyeUtleSk7CisgICAgYm9vbCBvayA9IG1faW5kZXgt
PmJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9v
YmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIG1faW5kZXgtPmlkKCksICprZXksIHByaW1hcnlLZXkp
OwogICAgIGlmICghb2spIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJu
YWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAgICAgICAgbV9jYWxsYmFj
a3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgu
IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgU3RyaW5nIHZhbHVlOwotICAgIG9r
ID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0
b3JlQmFja2VuZC0+aWQoKSwgKnByaW1hcnlLZXksIHZhbHVlKTsKKyAgICBvayA9IG1faW5kZXgt
PmJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJh
Y2tlbmQtPmlkKCksICpwcmltYXJ5S2V5LCB2YWx1ZSk7CiAgICAgaWYgKCFvaykgewotICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikp
OworICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdl
dFJlY29yZC4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNO
dWxsKCkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKKyAgICAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpbmRl
eC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmF1dG9JbmNyZW1lbnQoKSAmJiAhaW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlLZXksIGluZGV4LT5tX29iamVj
dFN0b3JlQmFja2VuZC0+a2V5UGF0aCgpKTsKKyAgICBpZiAobV9pbmRleC0+bV9vYmplY3RTdG9y
ZUJhY2tlbmQtPmF1dG9JbmNyZW1lbnQoKSAmJiAhbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tl
bmQtPmtleVBhdGgoKS5pc051bGwoKSkgeworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpLCBwcmltYXJ5S2V5
LCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+a2V5UGF0aCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKSk7CiB9CiAKIAotdm9p
ZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJm
b3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFu
c2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIkluZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb24i
KTsKIAotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vy
c29yID0KLSAgICAgICAgICAgIGluZGV4LT5iYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vy
c29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBpbmRleC0+ZGF0YWJh
c2VJZCgpLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCBr
ZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgp
LT5vcGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQt
PmlkKCksIG1faW5kZXgtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7
CiAKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewotICAgICAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5v
blN1Y2Nlc3Moc3RhdGljX2Nhc3Q8SURCS2V5Kj4oMCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgUmVmUHRyPElEQktleT4ga2V5UmVzdWx0OwotICAgIGJvb2wgb2sgPSBpbmRleC0+
YmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlWaWFJbmRleCh0cmFuc2FjdGlvbi0+YmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgtPm1fb2JqZWN0
U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgKmJhY2tpbmdTdG9yZUN1cnNvci0+a2V5
KCksIGtleVJlc3VsdCk7CisgICAgYm9vbCBvayA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5n
ZXRQcmltYXJ5S2V5VmlhSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1faW5kZXgtPmRhdGFiYXNlSWQoKSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQt
PmlkKCksIG1faW5kZXgtPmlkKCksICpiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpLCBrZXlSZXN1
bHQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50
ZXJuYWwgZXJyb3IgaW4gZ2V0UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKKyAgICAgICAgbV9jYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRQcmltYXJ5S2V5VmlhSW5k
ZXguIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICgha2V5UmVzdWx0KSB7Ci0g
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PElEQktleSo+KDApKTsKKyAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxJREJLZXkqPigwKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5UmVzdWx0
LmdldCgpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGtleVJlc3VsdC5nZXQoKSk7CiB9
CiAKIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikK
QEAgLTI0NCw3ICsyODUsNyBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldChQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYQogICAgIElEQl9UUkFD
RSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0Iik7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJh
bnNhY3Rpb25QdHIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJbmRleFJl
ZmVyZW5jZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKEluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
a2V5UmFuZ2UsIGNhbGxiYWNrcykpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9
CiAKQEAgLTI1Myw3ICsyOTQsNyBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmdldEtleShQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJRAogICAgIElEQl9U
UkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5Iik7CiAgICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZy
b20odHJhbnNhY3Rpb25QdHIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhJ
bmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGNhbGxi
YWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
SW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleVJhbmdlLCBjYWxs
YmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmgK
aW5kZXggMTMyY2FiNjIxMmFlZDg3NzcyYTYxZWMxM2YwZWM4ZWQxZWQzN2E0Yy4uMGNkN2ZlMWFk
ODg0MDFhNmIyNDliMmZiOGRhM2I3NWZhOGYzZWNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuaApAQCAtMzksNyAr
MzksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJCYWNraW5nU3RvcmU7CiBjbGFz
cyBJREJLZXk7CiBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwotY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6IHB1YmxpYyBJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApp
bmRleCBjOTJmYzhkNDk1MmZjNGI4ZmE4MjI4YTRlZjg4YmJjNThjZWZmZDk3Li44NGRjNWI3MjUy
ZWE1NjBmY2QyYjkxYWU3YWY3NzA0YTNiZDQ3NWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UuaApA
QCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2VfaAogCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlOwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiB7CitjbGFzcyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbnRlcmZhY2UoKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaAppbmRleCA4NjRkYTFiNWE2MTFjOGYwOTEzOWQ2ZmQ1
ZGIzMDA2MzU1MmI0MmJlLi40NjVmODJlZmZhNGFkZWI2OWJiNjkyMzkwNWNlNDNlNTAxNTYwYTZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaApAQCAtMzAsMTMg
KzMwLDEzIEBACiAKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJLZXkgOiBwdWJs
aWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5PiB7
CitjbGFzcyBJREJLZXkgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRl
ZDxJREJLZXk+IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+
IEtleUFycmF5OwogCkBAIC0xNDUsOCArMTQ1LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YiAtIGE7CiAgICAgfQogCi0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SURCS2V5Pjo6
cmVmOwotICAgIHVzaW5nIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQktleT46OmRlcmVmOworICAg
IHVzaW5nIFJlZkNvdW50ZWQ8SURCS2V5Pjo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURC
S2V5Pjo6ZGVyZWY7CiAKIHByaXZhdGU6CiAgICAgSURCS2V5KCkgOiBtX3R5cGUoSW52YWxpZFR5
cGUpLCBtX251bWJlcigwKSwgbV9zaXplRXN0aW1hdGUoT3ZlcmhlYWRTaXplKSB7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5oCmluZGV4IGQzNDdm
ODQxMDZkNjg0NTliZGNjNTk3OTBkOGM3ZDQ2NWIxMzAxZjkuLjYwNjdlZjk1ZDY4NDcwOWVmY2E3
Zjk2NDViMzA3MDIzNDgyYTI1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UmFuZ2UuaApAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVkZSAiSURCS2V5
LmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OwogCi1jbGFzcyBJREJLZXlSYW5nZSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxJREJLZXlSYW5nZT4geworY2xhc3MgSURCS2V5UmFuZ2UgOiBw
dWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxJREJLZXlSYW5nZT4gewog
cHVibGljOgogICAgIGVudW0gTG93ZXJCb3VuZFR5cGUgewogICAgICAgICBMb3dlckJvdW5kT3Bl
biwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggOWY2MTFjYjAxYmQ5MzQ1NDhjODNi
ZDE2Yzk2YjkwZTRkYjg3ZjAzYS4uMmUxMGQxNDhlYzI0NmE0YjBkOTUwMzc4M2Y5YWYwMjkwOTk3
OWRlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNr
LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0
aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgpAQCAtNDUsMTE0ICs0NCwyMjQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbiB7CitjbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbiA6IHB1YmxpYyBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9iamVj
dFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwga2V5UmFuZ2Us
IGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9i
amVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uKG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJh
Y2tzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgT2JqZWN0U3RvcmVSZXRyaWV2YWxP
cGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAg
ICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxi
YWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwor
ICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIAotY2xhc3MgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uIHsKK2NsYXNz
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbiA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0
ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiwgUGFzc093
blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc093blB0cjxWZWN0b3I8SW5k
ZXhLZXlzPiA+IHBvcEluZGV4S2V5cykKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc093blB0cjxWZWN0b3I8aW50NjRf
dD4gPiBwb3BJbmRleElkcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4
S2V5cykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9iamVjdFN0
b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIHB1
dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIHBvcEluZGV4SWRzLCBwb3BJbmRleEtleXMp
OworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlv
bihvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJhY2tzLCBwb3BJbmRleElk
cywgcG9wSW5kZXhLZXlzKSk7CiAgICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9y
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElE
QktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJ
bmRleElkcywgUGFzc093blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IHBvcEluZGV4S2V5cyk7Cisg
ICAgT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+
IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+ID4gcG9wSW5kZXhLZXlz
KQorICAgICAgICA6IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCisgICAgICAgICwgbV92YWx1
ZSh2YWx1ZSkKKyAgICAgICAgLCBtX2tleShrZXkpCisgICAgICAgICwgbV9wdXRNb2RlKHB1dE1v
ZGUpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgICAgICAsIG1fcG9wSW5k
ZXhJZHMocG9wSW5kZXhJZHMpCisgICAgICAgICwgbV9wb3BJbmRleEtleXMocG9wSW5kZXhLZXlz
KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
bV9vYmplY3RTdG9yZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX3ZhbHVl
OworICAgIFJlZlB0cjxJREJLZXk+IG1fa2V5OworICAgIFB1dE1vZGUgbV9wdXRNb2RlOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworICAgIE93blB0cjxWZWN0b3I8aW50
NjRfdD4gPiBtX3BvcEluZGV4SWRzOworICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+IG1f
cG9wSW5kZXhLZXlzOwogfTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2Jq
ZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb24geworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc093blB0cjxWZWN0b3I8
aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IHBvcElu
ZGV4SWRzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmT2JqZWN0
U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCBwb3BJbmRl
eElkcywgdHJhbnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9iamVjdFN0
b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBwb3BJbmRleElkcykpOwogICAg
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7
CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVj
dG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4pOworICAgIE9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uKFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVj
dG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMpCisgICAgICAgIDogbV9vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZSkKKyAgICAgICAgLCBtX3BvcEluZGV4SWRzKHBvcEluZGV4SWRzKQorICAgIHsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9y
ZTsKKyAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gbV9wb3BJbmRleElkczsKIH07CiAKLWNs
YXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRp
b24geworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVEZWxldGlv
bk9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBj
cmVhdGVDYWxsYmFja1Rhc2soJk9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OnBlcmZvcm0s
IG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgT2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbihvYmplY3RT
dG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcykpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2
b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAg
IE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9vYmplY3RT
dG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX2tleVJhbmdlKGtleVJhbmdlKQorICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQktl
eVJhbmdlPiBtX2tleVJhbmdlOworICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tz
OwogfTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDbGVh
ck9wZXJhdGlvbiB7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9y
ZUNsZWFyT3BlcmF0aW9uIDogcHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJh
dGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgc3RhdGljIFBh
c3NPd25QdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVD
YWxsYmFja1Rhc2soJk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0
b3JlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uKG9iamVjdFN0b3JlLCBjYWxsYmFja3MpKTsKICAg
ICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAg
IE9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
KyAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fY2FsbGJh
Y2tzKGNhbGxiYWNrcykKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG1fb2JqZWN0U3RvcmU7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJ
bmRleE9wZXJhdGlvbiB7CitjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJ
bmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRp
b24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHN0YXRpYyBQ
YXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbj4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3Rv
cmUsIGluZGV4LCB0cmFuc2FjdGlvbik7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ3Jl
YXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmUsIGluZGV4KSk7CiAgICAgfQorICAgIHZpcnR1
YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgQ3JlYXRl
SW5kZXhPcGVyYXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKKyAgICAgICAg
OiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29i
amVjdFN0b3JlOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwogfTsK
IAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb24g
eworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhPcGVyYXRpb24g
OiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFz
aygmRGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCBpbmRleCwgdHJh
bnNhY3Rpb24pOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERlbGV0ZUluZGV4T3BlcmF0
aW9uKG9iamVjdFN0b3JlLCBpbmRleCkpOwogICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9y
bShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lk
IHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworICAgIERlbGV0ZUluZGV4T3BlcmF0aW9u
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAgICAgIDogbV9vYmplY3RTdG9y
ZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisK
KyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAg
ICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsKIH07CiAKLWNsYXNzIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbiB7Citj
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVy
YXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRp
cmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRh
c2tUeXBlIHRhc2tUeXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFz
aygmT3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwg
cmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24pOworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbihv
YmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJhY2tzLCB0YXNrVHlwZSkpOwogICAg
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKik7
CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKKyAgICBPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVy
YXRpb24oUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVj
dGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSB0YXNrVHlwZSkKKyAgICAgICAgOiBtX29iamVjdFN0
b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgICAgICwgbV9k
aXJlY3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAg
ICAgICAgLCBtX3Rhc2tUeXBlKHRhc2tUeXBlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAgICBSZWZQdHI8SURC
S2V5UmFuZ2U+IG1fcmFuZ2U7CisgICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gbV9kaXJlY3Rpb247
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CisgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSBtX3Rhc2tUeXBlOwogfTsKIAotY2xhc3MgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbiB7CitjbGFz
cyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uIDog
cHVibGljIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRl
KFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygm
T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIHJhbmdlLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBPYmpl
Y3RTdG9yZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0b3JlLCByYW5nZSwgY2FsbGJhY2tzKSk7CiAg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
KTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbihQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
KyAgICAgICAgOiBtX29iamVjdFN0b3JlKG9iamVjdFN0b3JlKQorICAgICAgICAsIG1fcmFuZ2Uo
cmFuZ2UpCisgICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisK
KyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gbV9vYmplY3RTdG9yZTsKKyAg
ICBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fcmFuZ2U7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
bV9jYWxsYmFja3M7CiB9OwogCi1jbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVh
dGVJbmRleEFib3J0T3BlcmF0aW9uIHsKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6T3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpP
cGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmQ3JlYXRlSW5kZXhBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uKG9iamVjdFN0b3JlLCBpbmRleCkpOwog
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
Kik7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4pOworICAgIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24oUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKKyAgICAgICAgOiBtX29iamVjdFN0b3JlKG9i
amVjdFN0b3JlKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0KKworICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBtX29iamVjdFN0b3JlOworICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBtX2luZGV4OwogfTsKIAotY2xhc3MgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiB7CitjbGFzcyBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uIDogcHVibGlj
IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Ok9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAgc3RhdGljIFBhc3NPd25QdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPiBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2so
JkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCBpbmRleCk7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbihv
YmplY3RTdG9yZSwgaW5kZXgpKTsKICAgICB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCBwZXJm
b3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKKyAgICBEZWxldGVJ
bmRleEFib3J0T3BlcmF0aW9uKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAg
ICAgIDogbV9vYmplY3RTdG9yZShvYmplY3RTdG9yZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
bV9vYmplY3RTdG9yZTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gbV9pbmRleDsK
IH07CiAKIApAQCAtMTgwLDQyICsyODksNDEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHIKICAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldCIpOwogICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soT2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlS
YW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtl
eVJhbmdlLCBjYWxsYmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQog
Ci12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3Bl
cmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNF
KCJPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbiIpOwogICAgIFJlZlB0cjxJREJLZXk+IGtl
eTsKLSAgICBpZiAoa2V5UmFuZ2UtPmlzT25seUtleSgpKQotICAgICAgICBrZXkgPSBrZXlSYW5n
ZS0+bG93ZXIoKTsKKyAgICBpZiAobV9rZXlSYW5nZS0+aXNPbmx5S2V5KCkpCisgICAgICAgIGtl
eSA9IG1fa2V5UmFuZ2UtPmxvd2VyKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJh
Y2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3Jl
LT5pZCgpLCBrZXlSYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKKyAgICAgICAgUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0
b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1f
b2JqZWN0U3RvcmUtPmlkKCksIG1fa2V5UmFuZ2UuZ2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAg
ICAgICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7Ci0gICAgICAgICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcygpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1
cnNvci0+a2V5KCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHdpcmVEYXRhOwotICAgIGJvb2wgb2sg
PSBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmdldFJlY29yZCh0cmFuc2FjdGlvbi0+YmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0
U3RvcmUtPmlkKCksICprZXksIHdpcmVEYXRhKTsKKyAgICBib29sIG9rID0gbV9vYmplY3RTdG9y
ZS0+YmFja2luZ1N0b3JlKCktPmdldFJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5p
ZCgpLCAqa2V5LCB3aXJlRGF0YSk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOworICAgICAgICBt
X2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHdpcmVEYXRhLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKCk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChvYmplY3RTdG9yZS0+
YXV0b0luY3JlbWVudCgpICYmICFvYmplY3RTdG9yZS0+a2V5UGF0aCgpLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
RnJvbVdpcmUod2lyZURhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIG9i
amVjdFN0b3JlLT5rZXlQYXRoKCkpOworICAgIGlmIChtX29iamVjdFN0b3JlLT5hdXRvSW5jcmVt
ZW50KCkgJiYgIW1fb2JqZWN0U3RvcmUtPmtleVBhdGgoKS5pc051bGwoKSkgeworICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmUod2lyZURhdGEpLCBrZXksIG1fb2JqZWN0U3RvcmUtPmtleVBhdGgoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nl
c3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOwogfQog
CiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKQEAgLTIzMSw3
ICszMzksNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhcwogCiAgICAgQVNTRVJUKGF1dG9JbmNy
ZW1lbnQoKSB8fCBrZXkuZ2V0KCkpOwogCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKE9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24sIG5ld0luZGV4SWRzLnJlbGVhc2UoKSwg
bmV3SW5kZXhLZXlzLnJlbGVhc2UoKSkpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxl
VGFzayhPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCB2YWx1ZSwga2V5
LCBwdXRNb2RlLCBjYWxsYmFja3MsIG5ld0luZGV4SWRzLnJlbGVhc2UoKSwgbmV3SW5kZXhLZXlz
LnJlbGVhc2UoKSkpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAKQEAgLTM3
OCw4MiArNDg2LDc2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhl
c1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsCiAgICAgaWYgKHRyYW5zYWN0
aW9uLT5pc0ZpbmlzaGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlByZWVtcHRp
dmVUYXNrLCBPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG5l
d0luZGV4SWRzLnJlbGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZl
VGFzaywgT2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBuZXdJ
bmRleElkcy5yZWxlYXNlKCkpKSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlP
cGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGlu
dDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0
b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwqIHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVJbmRleGVzUmVh
ZHlPcGVyYXRpb24iKTsKLSAgICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gaW5kZXhJZHMgPSBw
b3BJbmRleElkczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4SWRzLT5zaXplKCk7
ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcG9wSW5kZXhJZHMtPnNpemUoKTsg
KytpKQogICAgICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsK
IH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VP
cGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9k
ZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHBycFRyYW5zYWN0aW9uLCBQYXNzT3duUHRyPFZl
Y3RvcjxpbnQ2NF90PiA+IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+
ID4gcG9wSW5kZXhLZXlzKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RT
dG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCog
dHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRp
b24iKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24g
PSBwcnBUcmFuc2FjdGlvbjsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJU
cmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSA9IHBycFZhbHVlOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLSAg
ICBPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gaW5kZXhJZHMgPSBwb3BJbmRleElkczsKLSAgICBP
d25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBpbmRleEtleXMgPSBwb3BJbmRleEtleXM7Ci0gICAg
QVNTRVJUKGluZGV4SWRzICYmIGluZGV4S2V5cyAmJiBpbmRleElkcy0+c2l6ZSgpID09IGluZGV4
S2V5cy0+c2l6ZSgpKTsKLSAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9y
ZS0+YXV0b0luY3JlbWVudCgpOworICAgIEFTU0VSVChtX3BvcEluZGV4SWRzICYmIG1fcG9wSW5k
ZXhLZXlzICYmIG1fcG9wSW5kZXhJZHMtPnNpemUoKSA9PSBtX3BvcEluZGV4S2V5cy0+c2l6ZSgp
KTsKKyAgICBjb25zdCBib29sIGF1dG9JbmNyZW1lbnQgPSBtX29iamVjdFN0b3JlLT5hdXRvSW5j
cmVtZW50KCk7CiAgICAgYm9vbCBrZXlXYXNHZW5lcmF0ZWQgPSBmYWxzZTsKIAotICAgIGlmIChw
dXRNb2RlICE9IEN1cnNvclVwZGF0ZSAmJiBhdXRvSW5jcmVtZW50ICYmICFrZXkpIHsKLSAgICAg
ICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5lcmF0ZUtleSh0
cmFuc2FjdGlvbik7CisgICAgaWYgKG1fcHV0TW9kZSAhPSBDdXJzb3JVcGRhdGUgJiYgYXV0b0lu
Y3JlbWVudCAmJiAhbV9rZXkpIHsKKyAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9
IG1fb2JqZWN0U3RvcmUtPmdlbmVyYXRlS2V5KHRyYW5zYWN0aW9uKTsKICAgICAgICAga2V5V2Fz
R2VuZXJhdGVkID0gdHJ1ZTsKICAgICAgICAgaWYgKCFhdXRvSW5jS2V5LT5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgIk1heGltdW0ga2V5IGdlbmVy
YXRvciB2YWx1ZSByZWFjaGVkLiIpKTsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWlu
dEVycm9yLCAiTWF4aW11bSBrZXkgZ2VuZXJhdG9yIHZhbHVlIHJlYWNoZWQuIikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGtleSA9IGF1dG9JbmNLZXk7CisgICAg
ICAgIG1fa2V5ID0gYXV0b0luY0tleTsKICAgICB9CiAKLSAgICBBU1NFUlQoa2V5ICYmIGtleS0+
aXNWYWxpZCgpKTsKKyAgICBBU1NFUlQobV9rZXkgJiYgbV9rZXktPmlzVmFsaWQoKSk7CiAKICAg
ICBJREJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXIgcmVjb3JkSWRlbnRpZmllcjsKLSAg
ICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5KSB7CisgICAgaWYgKG1fcHV0TW9kZSA9PSBBZGRPbmx5
KSB7CiAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBvayA9IG9iamVj
dFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwg
b2JqZWN0U3RvcmUtPmlkKCksICprZXksICZyZWNvcmRJZGVudGlmaWVyLCBmb3VuZCk7CisgICAg
ICAgIGJvb2wgb2sgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5P
YmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmpl
Y3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXksICZyZWNv
cmRJZGVudGlmaWVyLCBmb3VuZCk7CiAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yIGNoZWNraW5nIGtleSBleGlzdGVu
Y2UuIikpOworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrcy0+b25F
cnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0
cmFpbnRFcnJvciwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsK
KyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCAiS2V5IGFscmVhZHkgZXhp
c3RzIGluIHRoZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgVmVjdG9yPE93blB0cjxJbmRleFdyaXRlcj4gPiBpbmRleFdyaXRl
cnM7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIW1ha2VJbmRleFdyaXRlcnMo
dHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlLmdldCgpLCBrZXksIGtleVdhc0dlbmVyYXRlZCwgKmlu
ZGV4SWRzLCAqaW5kZXhLZXlzLCAmaW5kZXhXcml0ZXJzLCAmZXJyb3JNZXNzYWdlKSkgewotICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIGVycm9yTWVzc2FnZSkpOworICAgIGlmICgh
bWFrZUluZGV4V3JpdGVycyh0cmFuc2FjdGlvbiwgbV9vYmplY3RTdG9yZS5nZXQoKSwgbV9rZXks
IGtleVdhc0dlbmVyYXRlZCwgKm1fcG9wSW5kZXhJZHMsICptX3BvcEluZGV4S2V5cywgJmluZGV4
V3JpdGVycywgJmVycm9yTWVzc2FnZSkpIHsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50
RXJyb3IsIGVycm9yTWVzc2FnZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8g
QmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMgcG9p
bnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgogCi0gICAgb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3Jl
LT5pZCgpLCAqa2V5LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCksICZyZWNvcmRJZGVudGlmaWVyKTsK
KyAgICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCks
IG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlU3RyaW5nKCksICZy
ZWNvcmRJZGVudGlmaWVyKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0
ZXJzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGlu
ZGV4V3JpdGVyc1tpXS5nZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlz
KHJlY29yZElkZW50aWZpZXIsICpvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCksIHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgp
LCBvYmplY3RTdG9yZS0+bV9tZXRhZGF0YS5pZCk7CisgICAgICAgIGluZGV4V3JpdGVyLT53cml0
ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLCAqbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3Jl
KCksIHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3Jl
LT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPm1fbWV0YWRhdGEuaWQpOwogICAgIH0KIAot
ICAgIGlmIChhdXRvSW5jcmVtZW50ICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlICYmIGtleS0+
dHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSkgewotICAgICAgICBib29sIG9rID0gb2JqZWN0
U3RvcmUtPnVwZGF0ZUtleUdlbmVyYXRvcih0cmFuc2FjdGlvbiwga2V5LmdldCgpLCAha2V5V2Fz
R2VuZXJhdGVkKTsKKyAgICBpZiAoYXV0b0luY3JlbWVudCAmJiBtX3B1dE1vZGUgIT0gQ3Vyc29y
VXBkYXRlICYmIG1fa2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7CisgICAgICAg
IGJvb2wgb2sgPSBtX29iamVjdFN0b3JlLT51cGRhdGVLZXlHZW5lcmF0b3IodHJhbnNhY3Rpb24s
IG1fa2V5LmdldCgpLCAha2V5V2FzR2VuZXJhdGVkKTsKICAgICAgICAgaWYgKCFvaykgewotICAg
ICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgdXBkYXRpbmcg
a2V5IGdlbmVyYXRvci4iKSk7CisgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
IkludGVybmFsIGVycm9yIHVwZGF0aW5nIGtleSBnZW5lcmF0b3IuIikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5
LnJlbGVhc2UoKSk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhtX2tleS5yZWxlYXNlKCkp
OwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
UHRyLCBFeGNlcHRpb25Db2RlJikKQEAgLTQ2NCwyNCArNTY2LDI0IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rp
b246OlJFQURfT05MWSk7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOwogCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0
b3JlRGVsZXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJhY2tzLCB0
cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RT
dG9yZURlbGV0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhpcywga2V5UmFuZ2UsIGNhbGxiYWNrcykp
KQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVEZWxldGlvbk9wZXJhdGlvbjo6cGVyZm9ybShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9i
amVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZURlbGV0aW9u
T3BlcmF0aW9uIik7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tp
bmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0
b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwga2V5UmFuZ2UuZ2V0KCksIElE
QkN1cnNvcjo6TkVYVCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29i
amVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fa2V5UmFuZ2Uu
Z2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgewog
CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
ZGVsZXRlUmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmpl
Y3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgYmFja2luZ1N0b3JlQ3Vy
c29yLT5yZWNvcmRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgbV9vYmplY3RTdG9yZS0+YmFj
a2luZ1N0b3JlKCktPmRlbGV0ZVJlY29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgp
LCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSk7CiAKICAgICAgICAgfSB3
aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKICAgICB9CiAK
LSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcygpOworICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
KTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKQEAgLTQ5MiwxNSArNTk0LDE1IEBA
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IHBycENhbGxiYWNrcywgSURCCiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkg
IT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKE9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFja3Ms
IHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9iamVj
dFN0b3JlQ2xlYXJPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFja3MpKSkKICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUNs
ZWFyT3BlcmF0aW9uIik7Ci0gICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jbGVhck9i
amVjdFN0b3JlKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSk7Ci0gICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoKTsKKyAgICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y2xlYXJPYmpl
Y3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RT
dG9yZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpKTsKKyAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2NF90IGlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBi
b29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNTE1LDcgKzYxNyw3IEBAIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleChpbnQ2CiAgICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhJbmRleElkKTsKICAg
ICBtX21ldGFkYXRhLm1heEluZGV4SWQgPSBpZDsKIAotICAgIGlmICghdHJhbnNhY3Rpb24tPnNj
aGVkdWxlVGFzayhDcmVhdGVJbmRleE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGluZGV4LCB0cmFu
c2FjdGlvbiksIENyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCkp
KSB7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpLCBDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpjcmVh
dGUodGhpcywgaW5kZXgpKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
cmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTUy
NCwxMCArNjI2LDEwIEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChpbnQ2CiAgICAgcmV0dXJuIGluZGV4
LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJ
bmRleE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRl
SW5kZXhPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNh
Y3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOwotICAgIGlm
ICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2Jq
ZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpLCBpbmRleC0+bmFtZSgpLCBpbmRleC0+a2V5UGF0
aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5tdWx0aUVudHJ5KCkpKSB7CisgICAgaWYgKCFt
X29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+Y3JlYXRlSW5kZXgodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9v
YmplY3RTdG9yZS0+aWQoKSwgbV9pbmRleC0+aWQoKSwgbV9pbmRleC0+bmFtZSgpLCBtX2luZGV4
LT5rZXlQYXRoKCksIG1faW5kZXgtPnVuaXF1ZSgpLCBtX2luZGV4LT5tdWx0aUVudHJ5KCkpKSB7
CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtNTQ4LDE3ICs2NTAsMTcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxl
dGVJbmRleChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2UKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKICAgICBBU1NFUlQodHJhbnNhY3Rpb24t
Pm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogCi0gICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKERlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUodGhp
cywgaW5kZXgsIHRyYW5zYWN0aW9uKSwgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRl
KHRoaXMsIGluZGV4KSkpIHsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVs
ZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCksIERlbGV0ZUluZGV4QWJvcnRP
cGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCkpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBtX2luZGV4ZXMucmVtb3ZlKGluZGV4SWQpOwogfQogCi12b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIkRlbGV0
ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5kZWxl
dGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3Rv
cmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpKTsKKyAgICBt
X29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb24tPmJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9v
YmplY3RTdG9yZS0+aWQoKSwgbV9pbmRleC0+aWQoKSk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwg
SURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRh
c2tUeXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBF
eGNlcHRpb25Db2RlJikKQEAgLTU2NiwyOSArNjY4LDI5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgSURC
Q3VyCiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29y
Iik7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwog
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIGlmICghdHJh
bnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb246OmNy
ZWF0ZSh0aGlzLCByYW5nZSwgZGlyZWN0aW9uLCBjYWxsYmFja3MsIHRhc2tUeXBlLCB0cmFuc2Fj
dGlvbikpKSB7CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9wZW5PYmplY3RT
dG9yZUN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBkaXJlY3Rpb24sIGNhbGxi
YWNrcywgdGFza1R5cGUpKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7CiAgICAg
fQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9yZUN1
cnNvck9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T3Blbk9iamVj
dFN0b3JlQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwq
IHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiT3Blbk9iamVjdFN0b3JlQ3Vyc29yIik7
CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJh
c2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CisgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX29i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlk
KCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fcmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKICAg
ICAvLyBUaGUgZnJvbnRlbmQgaGFzIGJlZ3VuIGluZGV4aW5nLCBzbyB0aGlzIHBhdXNlcyB0aGUg
dHJhbnNhY3Rpb24KICAgICAvLyB1bnRpbCB0aGUgaW5kZXhpbmcgaXMgY29tcGxldGUuIFRoaXMg
Y2FuJ3QgaGFwcGVuIGFueSBlYXJsaWVyCiAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
IHN3aXRjaCB0byBlYXJseSBtb2RlIGluIGNhc2UgbXVsdGlwbGUKICAgICAvLyBpbmRleGVzIGFy
ZSBiZWluZyBjcmVhdGVkIGluIGEgcm93LCB3aXRoIHB1dCgpJ3MgaW4gYmV0d2Vlbi4KLSAgICBp
ZiAodGFza1R5cGUgPT0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpQcmVlbXB0aXZl
VGFzaykKKyAgICBpZiAobV90YXNrVHlwZSA9PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U6OlByZWVtcHRpdmVUYXNrKQogICAgICAgICB0cmFuc2FjdGlvbi0+YWRkUHJlZW1wdGl2ZUV2
ZW50KCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsKLSAgICAgICAgY2FsbGJhY2tz
LT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8U2VyaWFsaXplZFNjcmlwdFZhbHVlKj4oMCkpOworICAg
ICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSo+KDApKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJDdXJz
b3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gSURCQ3Vyc29yQmFja2VuZEltcGw6OmNyZWF0ZShiYWNr
aW5nU3RvcmVDdXJzb3IucmVsZWFzZSgpLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmpl
Y3RTdG9yZUN1cnNvciwgdGFza1R5cGUsIHRyYW5zYWN0aW9uLmdldCgpLCBvYmplY3RTdG9yZS5n
ZXQoKSk7Ci0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgpLCBj
dXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKKyAgICBSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmRJbXBsOjpjcmVhdGUoYmFj
a2luZ1N0b3JlQ3Vyc29yLnJlbGVhc2UoKSwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2Jq
ZWN0U3RvcmVDdXJzb3IsIG1fdGFza1R5cGUsIHRyYW5zYWN0aW9uLCBtX29iamVjdFN0b3JlLmdl
dCgpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwg
Y3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQpAQCAtNTk2LDE3
ICs2OTgsMTcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjwKICAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJh
bnNhY3Rpb25QdHIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPYmplY3RT
dG9yZUNvdW50T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNh
Y3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVD
b3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBjYWxsYmFja3MpKSkKICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6QWJvcnRFcnJvcikpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNvdW50T3Bl
cmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQog
ewogICAgIElEQl9UUkFDRSgiT2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbiIpOwogICAgIHVpbnQz
Ml90IGNvdW50ID0gMDsKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tp
bmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0
b3JlS2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmpl
Y3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgcmFuZ2UuZ2V0KCksIElE
QkN1cnNvcjo6TkVYVCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9iamVj
dFN0b3JlS2V5Q3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksIG1fcmFuZ2Uu
Z2V0KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmVDdXJzb3IpIHsK
LSAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOworICAgICAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKGNvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjE0LDcg
KzcxNiw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3Vu
dE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpCiAgICAgICAgICsrY291bnQ7CiAgICAg
fSB3aGlsZSAoYmFja2luZ1N0b3JlQ3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKDApKTsKIAotICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNz
KGNvdW50KTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhl
cygpCkBAIC02MjUsMTcgKzcyNywxOCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmxvYWRJbmRleGVzKCkKICAgICAgICAgbV9pbmRleGVzLnNldChpbmRleGVzW2ldLmlkLCBJREJJ
bmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgaW5kZXhlc1tpXSkpOwog
fQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRPcGVy
YXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUlu
ZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJh
bnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMo
aW5kZXgtPmlkKCkpKTsKLSAgICBvYmplY3RTdG9yZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+
aWQoKSk7CisgICAgQVNTRVJUKCF0cmFuc2FjdGlvbik7CisgICAgQVNTRVJUKG1fb2JqZWN0U3Rv
cmUtPm1faW5kZXhlcy5jb250YWlucyhtX2luZGV4LT5pZCgpKSk7CisgICAgbV9vYmplY3RTdG9y
ZS0+bV9pbmRleGVzLnJlbW92ZShtX2luZGV4LT5pZCgpKTsKIH0KIAotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IHBycEluZGV4KQor
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleEFib3J0T3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0aW9uKQogewotICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHBycEluZGV4OwotICAgIEFTU0VS
VCghb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+aWQoKSkpOwotICAgIG9i
amVjdFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4LT5pZCgpLCBpbmRleCk7CisgICAgQVNTRVJU
KCF0cmFuc2FjdGlvbik7CisgICAgQVNTRVJUKCFtX29iamVjdFN0b3JlLT5tX2luZGV4ZXMuY29u
dGFpbnMobV9pbmRleC0+aWQoKSkpOworICAgIG1fb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5zZXQo
bV9pbmRleC0+aWQoKSwgbV9pbmRleCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IGY3
MTgzNjllZWQ3NjgzNTAzOWMwYzFiODNkNGMzNzQ4Y2MyYjEwMzEuLmMyZGU0NzQ4ZmNkYWE3YzE3
NGY3ZTYwMzNhMTY3MWU5NDdiYjI5Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTQy
LDcgKzQyLDYgQEAgY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKIGNsYXNzIElEQkluZGV4
QmFja2VuZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOwogY2xhc3MgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCiBjbGFzcyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsIDogcHVibGljIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCmluZGV4IDgzYmRmZGNlZDkwNmYwYmI3NjE1
OTgzYmMyMjZmMmQyZjIzZjhhNDguLjczOWEwZDc1NjlmMDc1ZGU5NzdlODk3MTYyMmMyNDUxNWI5
NzE3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCkBAIC0yOCw3ICsyOCw4
IEBACiAKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkBA
IC00NSw3ICs0Niw3IEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKIAotY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4geworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlKCkgeyB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAppbmRleCBlZGFhN2JhMTZi
NjkxYWUwNjdlOGFkNzYyMTM3MDYwYmJkNWJmNzQwLi5iMjExODIwYmMzOGY5Mjc3NWFjNzc0NTUz
YjE2ZTczZDA2MThmM2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5oCkBAIC0xMTEsOCArMTExLDggQEAgcHVibGljOgogCiAgICAgdm9pZCB0cmFu
c2FjdGlvbkRpZEZpbmlzaEFuZERpc3BhdGNoKCk7CiAKLSAgICB1c2luZyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxJREJDYWxsYmFja3M+OjpyZWY7Ci0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxJREJDYWxsYmFj
a3M+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxJREJDYWxsYmFja3M+OjpkZXJlZjsKIAog
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUoKSB7
IHJldHVybiBtX3Rhc2tUeXBlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKaW5kZXgg
YzU0MmZkZDc5MDg5OWVlYWJhMTQ0MTI0ZThlMzJlOTM0M2U3MDRlMC4uZjJmNzFjNGY1NzZlNjc5
NmVhZTY4NGYzNWY5Njk5YTRiOWIwNzlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAK
QEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNTUsNiArNTQsOSBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGludDY0X3QgaWQsIGNvbnN0IFZlY3Rvcjxpbgog
ICAgICwgbV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tU
aW1lckZpcmVkKQogICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQogeworICAgIC8v
IFdlIHBhc3MgYSByZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9w
dGVkLgorICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOworCiAgICAgbV9kYXRhYmFzZS0+
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKIH0K
IApAQCAtNzYsNyArNzgsNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcgogICAgIHJldHVybiBv
YmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CiAKLWJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBhYm9ydFRhc2spCitib29sIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnNjaGVkdWxl
VGFzayhUYXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPE9wZXJhdGlvbj4gdGFzaywgUGFzc093blB0
cjxPcGVyYXRpb24+IGFib3J0VGFzaykKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTIzLDggKzEyNSw4IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6YWJvcnQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
cikKIAogICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1f
YWJvcnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE93blB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiB0YXNrKG1fYWJvcnRUYXNrUXVldWUudGFrZUZpcnN0KCkpOwotICAg
ICAgICB0YXNrLT5wZXJmb3JtVGFzaygwKTsKKyAgICAgICAgT3duUHRyPE9wZXJhdGlvbj4gdGFz
ayhtX2Fib3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKKyAgICAgICAgdGFzay0+cGVyZm9ybSgw
KTsKICAgICB9CiAKICAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vy
c29ycykgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcwpAQCAtMjU0LDgg
KzI1Niw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVyRmlyZWQo
VGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qCiAgICAgVGFza1F1ZXVlKiB0YXNrUXVl
dWUgPSBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2ZVRhc2tRdWV1ZSA6
ICZtX3Rhc2tRdWV1ZTsKICAgICB3aGlsZSAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgpICYmIG1fc3Rh
dGUgIT0gRmluaXNoZWQpIHsKICAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVubmluZyk7Ci0g
ICAgICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKHRhc2tRdWV1
ZS0+dGFrZUZpcnN0KCkpOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygwKTsKKyAgICAgICAg
T3duUHRyPE9wZXJhdGlvbj4gdGFzayh0YXNrUXVldWUtPnRha2VGaXJzdCgpKTsKKyAgICAgICAg
dGFzay0+cGVyZm9ybSh0aGlzKTsKIAogICAgICAgICAvLyBFdmVudCBpdHNlbGYgbWF5IGNoYW5n
ZSB3aGljaCBxdWV1ZSBzaG91bGQgYmUgcHJvY2Vzc2VkIG5leHQuCiAgICAgICAgIHRhc2tRdWV1
ZSA9IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPyAmbV9wcmVlbXB0aXZlVGFza1F1ZXVlIDog
Jm1fdGFza1F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IGQyYTk1ODUwNjA4ZGE4
OWY5ZDE3NDUzNWYzYmIxYTI4YzhjYjMyYTkuLjUxMjQ3OGQ1YWVmNzA4NTllMjU4NTgzNGQxNDY5
YzJmZTFmMjNlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25DYWxsYmFja3MuaCIK
LSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIK
ICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNTYs
MTIgKzU1LDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3Mp
IHsgbV9jYWxsYmFja3MgPSBjYWxsYmFja3M7IH0KIAorICAgIGNsYXNzIE9wZXJhdGlvbiB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PcGVyYXRpb24oKSB7IH0KKyAgICAgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm0oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopID0gMDsKKyAgICB9
OworCiAgICAgdm9pZCBhYm9ydChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKICAgICB2
b2lkIHJ1bigpOwogICAgIHVuc2lnbmVkIHNob3J0IG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21v
ZGU7IH0KICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IEZp
bmlzaGVkOyB9Ci0gICAgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IGFib3J0VGFzayA9IG51bGxwdHIpIHsgcmV0dXJuIHNjaGVkdWxlVGFzayhOb3JtYWxU
YXNrLCB0YXNrLCBhYm9ydFRhc2spOyB9Ci0gICAgYm9vbCBzY2hlZHVsZVRhc2soVGFza1R5cGUs
IFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIFBhc3NPd25QdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gbnVsbHB0cik7CisgICAgYm9v
bCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxPcGVyYXRpb24+IHRhc2ssIFBhc3NPd25QdHI8T3Bl
cmF0aW9uPiBhYm9ydFRhc2sgPSBudWxscHRyKSB7IHJldHVybiBzY2hlZHVsZVRhc2soTm9ybWFs
VGFzaywgdGFzaywgYWJvcnRUYXNrKTsgfQorICAgIGJvb2wgc2NoZWR1bGVUYXNrKFRhc2tUeXBl
LCBQYXNzT3duUHRyPE9wZXJhdGlvbj4sIFBhc3NPd25QdHI8T3BlcmF0aW9uPiBhYm9ydFRhc2sg
PSBudWxscHRyKTsKICAgICB2b2lkIHJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5k
SW1wbCopOwogICAgIHZvaWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZElt
cGwqKTsKICAgICB2b2lkIGFkZFByZWVtcHRpdmVFdmVudCgpIHsgbV9wZW5kaW5nUHJlZW1wdGl2
ZUV2ZW50cysrOyB9CkBAIC05Nyw3ICsxMDIsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+IG1fZGF0YWJhc2U7CiAKLSAgICB0eXBlZGVmIERlcXVlPE93blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiA+IFRhc2tRdWV1ZTsKKyAgICB0eXBlZGVmIERlcXVl
PE93blB0cjxPcGVyYXRpb24+ID4gVGFza1F1ZXVlOwogICAgIFRhc2tRdWV1ZSBtX3Rhc2tRdWV1
ZTsKICAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1ZXVlOwogICAgIFRhc2tRdWV1ZSBt
X2Fib3J0VGFza1F1ZXVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBj
Yzc0ZDExNTY4MTdiYTMyOGExYzFkNzk2YzYxMmJiMWQ1MmFiODg1Li43YTg1YzkyY2YzYTA3Yjdi
YTg2MDAyMTFiZTdkYTUzNWRiNzU3OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UuaApAQCAtMjcsNyArMjcsOCBAQAogI2RlZmluZSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2VfaAogCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpAQCAtNDQsNyArNDUsNyBAQCB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOwogLy8gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
IGFuZCBvcHRpb25hbGx5IG90aGVycyAoaW4gb3JkZXIgdG8gcHJveHkKIC8vIGNhbGxzIGFjcm9z
cyBwcm9jZXNzIGJhcnJpZXJzKS4gQWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJl
IG5vbi1ibG9ja2luZyBhbmQKIC8vIHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFk
IGlmIG5lY2Vzc2FyeS4KLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHsKK2NsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gewogcHVibGljOgogICAgIHZpcnR1
YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpIHsgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwCmluZGV4IDZkYjBkNzBiZjI1OGM2Y2VkZGU4ZDkyZGQ5YzliNjA1OWE0MTQ2
ZjkuLmNmZDNkMTZkYjQwYmQ4YTc1MmE2ZGVkYWUyODU0NGFiNGNkNjU2MTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRlc3Qu
Y3BwCmluZGV4IGVjMDc5ZjUwY2QzY2JjZTlkZmUyMTIxMzlkNDYwN2UxOTQ0ZjNhMmIuLmEzZDgw
ZmQ0MzU5NDZiOWM1MTQ4OTMzMzY2YWMwMGFhMGIxMDgyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAKQEAgLTQz
LDggKzQzLDEwIEBAIG5hbWVzcGFjZSB7CiAKIGNsYXNzIE1vY2tJREJDYWxsYmFja3MgOiBwdWJs
aWMgSURCQ2FsbGJhY2tzIHsKIHB1YmxpYzoKLSAgICBNb2NrSURCQ2FsbGJhY2tzKCkgOiBtX3dh
c0Vycm9yQ2FsbGVkKGZhbHNlKSB7IH0KLQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tJREJD
YWxsYmFja3M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1v
Y2tJREJDYWxsYmFja3MoKSk7CisgICAgfQogICAgIHZpcnR1YWwgfk1vY2tJREJDYWxsYmFja3Mo
KQogICAgIHsKICAgICAgICAgRVhQRUNUX1RSVUUobV93YXNFcnJvckNhbGxlZCk7CkBAIC02OSw2
ICs3MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzV2l0aFByZWZldGNo
KGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiwgY29uc3QgVmVjdG9yPFJlZlB0cjxJREJL
ZXk+ID4mLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBvbkJsb2NrZWQoKSB7IH0KIHByaXZhdGU6CisgICAgTW9ja0lE
QkNhbGxiYWNrcygpIDogbV93YXNFcnJvckNhbGxlZChmYWxzZSkgeyB9CisKICAgICBib29sIG1f
d2FzRXJyb3JDYWxsZWQ7CiB9OwogCkBAIC0xMTYsMTEgKzEyMCwxMSBAQCBURVNUKElEQkFib3J0
VGVzdCwgVGhlVGVzdCkKIHsKICAgICBSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbXBsPiBmYWN0
b3J5ID0gRmFpbGluZ0lEQkZhY3RvcnlCYWNrZW5kSW1wbDo6Y3JlYXRlKCk7CiAgICAgY29uc3Qg
U3RyaW5nJiBuYW1lID0gImRiIG5hbWUiOwotICAgIE1vY2tJREJDYWxsYmFja3MgY2FsbGJhY2tz
OworICAgIFJlZlB0cjxNb2NrSURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBNb2NrSURCQ2FsbGJh
Y2tzOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8RmFrZUlEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRh
YmFzZUNhbGxiYWNrcyA9IEZha2VJREJEYXRhYmFzZUNhbGxiYWNrczo6Y3JlYXRlKCk7CiAgICAg
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKCJo
dHRwIiwgImxvY2FsaG9zdCIsIDgxKTsKICAgICBjb25zdCBpbnQ2NF90IER1bW15VmVyc2lvbiA9
IDI7Ci0gICAgZmFjdG9yeS0+b3BlbihuYW1lLCBEdW1teVZlcnNpb24sICZjYWxsYmFja3MsIGRh
dGFiYXNlQ2FsbGJhY2tzLCBvcmlnaW4sIDAgLypGcmFtZSovLCBTdHJpbmcoKSAvKnBhdGgqLyk7
CisgICAgZmFjdG9yeS0+b3BlbihuYW1lLCBEdW1teVZlcnNpb24sIGNhbGxiYWNrcy5nZXQoKSwg
ZGF0YWJhc2VDYWxsYmFja3MsIG9yaWdpbiwgMCAvKkZyYW1lKi8sIFN0cmluZygpIC8qcGF0aCov
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>