<?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>156472</bug_id>
          
          <creation_ts>2016-04-11 11:53:32 -0700</creation_ts>
          <short_desc>Clean up IDBBindingUtilities</short_desc>
          <delta_ts>2016-04-21 15:10:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>156483</dependson>
          <blocked>149117</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1182760</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-11 11:53:32 -0700</bug_when>
    <thetext>Clean up IDBBindingUtilities massively</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182804</commentid>
    <comment_count>1</comment_count>
      <attachid>276168</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-11 13:16:25 -0700</bug_when>
    <thetext>Created attachment 276168
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182811</commentid>
    <comment_count>2</comment_count>
      <attachid>276168</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-11 13:32:53 -0700</bug_when>
    <thetext>Comment on attachment 276168
Patch v1

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

looks great!

&gt; Source/WebCore/Modules/indexeddb/IDBCursorWithValue.idl:33
&gt; +    [CallWith=ScriptState, ImplementationReturnType=JSValue] readonly attribute any value;

It would be nice if the default return value were JSValue and we had to add something to make it Deprecated::ScriptValue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182812</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-11 13:39:21 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 276168 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276168&amp;action=review
&gt; 
&gt; looks great!
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBCursorWithValue.idl:33
&gt; &gt; +    [CallWith=ScriptState, ImplementationReturnType=JSValue] readonly attribute any value;
&gt; 
&gt; It would be nice if the default return value were JSValue and we had to add
&gt; something to make it Deprecated::ScriptValue.

I think this will be an awesome idea to implement in a patch dedicated to it.

One patch that touches the code generator and many many many IDLs all at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182828</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-11 14:34:22 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/199310</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182879</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-11 16:46:45 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 156483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182887</commentid>
    <comment_count>6</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2016-04-11 16:57:07 -0700</bug_when>
    <thetext>Rolled out in r199323: &lt;http://trac.webkit.org/changeset/199323&gt;.

Potential tests, which this change turns into crashes:
https://build.webkit.org/results/Apple%20El%20Capitan%20Debug%20WK2%20(Tests)/r199312%20(4344)/results.html
storage/indexeddb/cursor-continue-validity.html
storage/indexeddb/cursor-request-cycle-private.html
storage/indexeddb/cursor-value.html

https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK2%20(Tests)/r199314%20(11347)/results.html
imported/w3c/web-platform-tests/IndexedDB/idbindex-multientry-big.htm
storage/indexeddb/cursor-request-cycle-private.html
storage/indexeddb/cursor-value.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182903</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-11 17:49:27 -0700</bug_when>
    <thetext>I am pretty sure the reason these tests were failing is that we had JSValue data members in IDBAny and IDBCursor objects that are not on the stack. We need to use smart pointers instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183637</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-13 22:45:46 -0700</bug_when>
    <thetext>Working on an updated version of this.

There will need to be some &quot;smart pointer to JSValue&quot; changes (namely JSC::Strong&lt;JSC::Unknown&gt;) as well as some addOpaqueRoot / containsOpaqueRoot dancing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183735</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-14 10:08:01 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Working on an updated version of this.
&gt; 
&gt; There will need to be some &quot;smart pointer to JSValue&quot; changes (namely
&gt; JSC::Strong&lt;JSC::Unknown&gt;) as well as some addOpaqueRoot /
&gt; containsOpaqueRoot dancing.

Actually for now I&apos;m just going to use JSC::Strong&lt;JSC::Unknown&gt;s wherever we used to use Deprecated::ScriptValue, as that is literally a zero-change in behavior.

Anywhere use of D:SV might has caused a leak before, Strong&lt;Unknown&gt; will cause the same leak now.

Fixing those potential leaks is something we can do in a followup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183768</commentid>
    <comment_count>10</comment_count>
      <attachid>276407</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-14 11:23:20 -0700</bug_when>
    <thetext>Created attachment 276407
New patch v1

Not marking for review yet until I run all layout tests in a few different configs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183794</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-14 12:27:10 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Actually for now I&apos;m just going to use JSC::Strong&lt;JSC::Unknown&gt;s wherever
&gt; we used to use Deprecated::ScriptValue, as that is literally a zero-change
&gt; in behavior.

Sounds exactly right.

At some point, worth studying to find out whether there are any already-existing reference cycles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183802</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-14 13:08:11 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; Actually for now I&apos;m just going to use JSC::Strong&lt;JSC::Unknown&gt;s wherever
&gt; &gt; we used to use Deprecated::ScriptValue, as that is literally a zero-change
&gt; &gt; in behavior.
&gt; 
&gt; Sounds exactly right.
&gt; 
&gt; At some point, worth studying to find out whether there are any
&gt; already-existing reference cycles.

It&apos;s trivial to create one with the existing code.

e.g. - Iterate a cursor, and then set a property on the cursor&apos;s current value to be the cursor itself.

cursor.value.foo = cursor;

That&apos;s something that proper opaque roots will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183803</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-14 13:08:51 -0700</bug_when>
    <thetext>Obviously the new patch missed at least one niggling little detail. I&apos;ll revisit it soon, but it&apos;s not critical ATM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183817</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-14 13:35:10 -0700</bug_when>
    <thetext>I think the reference cycle issue is more important than the refactoring and cleanup being done by this patch. I’d also be happy to help resolve it. I wonder what the best way to write a regression test for the cycles is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183854</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-14 14:15:29 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Obviously the new patch missed at least one niggling little detail. I&apos;ll
&gt; revisit it soon, but it&apos;s not critical ATM.

That one niggling detail is a missing include of &quot;ScriptExecutionContext.h&quot; in IDBBindingUtilities.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183911</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-14 15:39:23 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; Obviously the new patch missed at least one niggling little detail. I&apos;ll
&gt; &gt; revisit it soon, but it&apos;s not critical ATM.
&gt; 
&gt; That one niggling detail is a missing include of &quot;ScriptExecutionContext.h&quot;
&gt; in IDBBindingUtilities.cpp.

And this demonstrates you went through the trouble of looking at the EWS failures, instead of just noting &quot;EWS failed&quot; and resolving to revisit later  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183912</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-14 15:43:02 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I think the reference cycle issue is more important than the refactoring and
&gt; cleanup being done by this patch. I’d also be happy to help resolve it. 

No argument there. I just did this because I was touching the binding utilities for other reasons, and I&apos;d been wanting to.

We have a bug for ref-cycles and leaks - https://bugs.webkit.org/show_bug.cgi?id=154015 - but no sub-task filed for this quite yet.

&gt; I wonder what the best way to write a regression test for the cycles is?

That is, indeed, the challenge. There&apos;s a group of skipped IDB tests marked in TestExpectations with:
# Relies on internals.observeGC

That&apos;s how the chromium port + V8 detected these types of things back when they were part of the project. I don&apos;t think we have a replacement. 

Months ago when I discussed it with him, Geoff mentioned he thought having our own form of that would be both doable and desirable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183975</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-14 19:04:36 -0700</bug_when>
    <thetext>On a local branch I got rid of the IDBAny class entirely and replaced it with some custom bindings. I hope you land this soon; then I will merge and post that and try to whip it into shape.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183988</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-14 20:53:22 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; On a local branch I got rid of the IDBAny class entirely and replaced it
&gt; with some custom bindings. I hope you land this soon; then I will merge and
&gt; post that and try to whip it into shape.

That&apos;s crazy exciting.

I&apos;ll make sure I get this landed tomorrow before IDB&apos;y things diverge much more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184336</commentid>
    <comment_count>20</comment_count>
      <attachid>276548</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-15 22:59:45 -0700</bug_when>
    <thetext>Created attachment 276548
New patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184393</commentid>
    <comment_count>21</comment_count>
      <attachid>276566</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-16 15:55:20 -0700</bug_when>
    <thetext>Created attachment 276566
New patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184489</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-17 10:58:24 -0700</bug_when>
    <thetext>I think our understanding of what went wrong first time is obviously right. Ran lots of tests locally, EWS passed, etc etc

Let&apos;s land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184496</commentid>
    <comment_count>23</comment_count>
      <attachid>276566</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-17 11:49:40 -0700</bug_when>
    <thetext>Comment on attachment 276566
New patch v3

Clearing flags on attachment: 276566

Committed r199643: &lt;http://trac.webkit.org/changeset/199643&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184501</commentid>
    <comment_count>24</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-17 12:45:33 -0700</bug_when>
    <thetext>Conrad has landed some &quot;debug build&quot; fix attempts in http://trac.webkit.org/changeset/199645 and http://trac.webkit.org/changeset/199646.

I built debug locally, as did mac-debug EWS...  =/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184509</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-17 14:30:12 -0700</bug_when>
    <thetext>Those fixes are needed due to the combination of your patch and my patch. Separately each compiled. Together, they required these new includes.

Not really &quot;debug build specific&quot; as far as I can tell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184510</commentid>
    <comment_count>26</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-17 14:35:26 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Those fixes are needed due to the combination of your patch and my patch.
&gt; Separately each compiled. Together, they required these new includes.
&gt; 
&gt; Not really &quot;debug build specific&quot; as far as I can tell.

I figured this out shortly after apologizing to Conrad for the breakage.

Our two patches revealed an interesting race condition in the CQ bot - My build started before yours landed, which is why CQ cleared it.

Annoying, but probably not all-too-common an occurrence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184849</commentid>
    <comment_count>27</comment_count>
      <attachid>276566</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-04-18 16:01:20 -0700</bug_when>
    <thetext>Comment on attachment 276566
New patch v3

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

&gt; Source/WebCore/dom/ScriptExecutionContext.cpp:497
&gt; +    WorkerGlobalScope* workerGlobalScope = static_cast&lt;WorkerGlobalScope*&gt;(this);

Why isn&apos;t this using a downcast&lt;&gt;() ?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276168</attachid>
            <date>2016-04-11 13:16:25 -0700</date>
            <delta_ts>2016-04-11 13:32:53 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>47127</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYTIzOTljLi4zN2NiMmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkg
QEAKKzIwMTYtMDQtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENsZWFuIHVwIElEQkJpbmRpbmdVdGlsaXRpZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NzIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBiZWhh
dmlvcikuCisKKyAgICAgICAgLSBHZXQgcmlkIG9mIGEgd2hvbGUgYnVuY2ggb2YgdW51c2VkIGZ1
bmN0aW9ucyAoc2luY2Ugd2UgZ290IHJpZCBvZiBMZWdhY3kgSURCKS4KKyAgICAgICAgLSBNYWtl
IG1vcmUgZnVuY3Rpb25zIGRlYWwgaW4gRXhlY1N0YXRlL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHRz
IGluc3RlYWQgb2YgRE9NUmVxdWVzdFN0YXRlLgorICAgICAgICAtIE1ha2UgbW9yZSBmdW5jdGlv
bnMgZGVhbCBpbiBKU1ZhbHVlIGluc3RlYWQgb2YgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0OiBBZGQgYSBuZXcg
YXR0cmlidXRlIHRvIHNpZ25pZnkgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zCisgICAg
ICAgICAgSlNWYWx1ZXMgaW5zdGVhZCBvZiBEZXByZWNhdGVkOjpTY3JpcHRTdGF0ZQorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoTmF0aXZl
VG9KU1ZhbHVlKTogVXNlIHRoYXQgbmV3IGF0dHJpYnV0ZS4KKyAgICAgICAgCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6
SURCQW55KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6c2NyaXB0VmFsdWUpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQW55
OjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3I6OnByaW1hcnlLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp2YWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNldEdl
dFJlc3VsdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Y21w
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJJbmRleDo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Omdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0S2V5KToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlS
YW5nZTo6bG93ZXJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlSYW5nZTo6dXBwZXJW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlSYW5nZTo6b25seSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlSYW5nZTo6bG93ZXJCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJL
ZXlSYW5nZTo6dXBwZXJCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlSYW5nZTo6Ym91
bmQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Om1vZGVybkRl
bGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y291bnQpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6c2V0UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNl
dFJlc3VsdFRvU3RydWN0dXJlZENsb25lKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpNZW1vcnlPYmplY3RTdG9yZTo6dXBkYXRlSW5kZXhlc0ZvclB1dFJlY29yZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9iamVjdFN0b3JlOjpwb3B1bGF0ZUluZGV4V2l0
aEV4aXN0aW5nUmVjb3Jkcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppZGJLZXlQYXRoRnJvbVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9JREJLZXkpOgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5
RGF0YVRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5RGF0YVRvSlNWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0VmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZh
bHVlQW5kS2V5UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYXliZUNyZWF0ZUlE
QktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZGVzZXJpYWxpemVJREJWYWx1ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVz
ZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppZGJW
YWx1ZURhdGFUb0pTVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5VG9T
Y3JpcHRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCRGF0YWJh
c2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJEYXRhYmFzZTo6Y3JlYXRlT2Jq
ZWN0U3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgor
ICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmV4ZWNTdGF0ZSk6CisgICAgICAgICogZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQuY3BwOgorCiAyMDE2LTA0LTA3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBJbXByb3ZlIElETCBzdXBwb3J0IGZvciBvYmplY3QgYXJndW1lbnRz
IHRoYXQgYXJlIG5laXRoZXIgb3B0aW9uYWwgbm9yIG51bGxhYmxlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAppbmRleCA4ZmFiZDIzLi4zZGU5NjQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKQEAgLTc4LDcgKzc4
LDcgQEAgSURCQW55OjpJREJBbnkoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKIH0KIAot
SURCQW55OjpJREJBbnkoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQorSURC
QW55OjpJREJBbnkoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKICAgICA6IG1fdHlwZShJREJB
bnk6OlR5cGU6OlNjcmlwdFZhbHVlKQogICAgICwgbV9zY3JpcHRWYWx1ZSh2YWx1ZSkKIHsKQEAg
LTEzMyw3ICsxMzMsNyBAQCBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkFueTo6aWRiVHJhbnNh
Y3Rpb24oKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1jb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYgSURCQW55OjpzY3JpcHRWYWx1ZSgpCitKU0M6OkpTVmFsdWUgSURCQW55OjpzY3Jp
cHRWYWx1ZSgpCiB7CiAgICAgcmV0dXJuIG1fc2NyaXB0VmFsdWU7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCmluZGV4IDlmMWM3OTUuLjI4NTBhZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCkBAIC0yOSw3ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgi
Ci0jaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
Q0pTVmFsdWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJBbnkoa2V5UGF0aCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBSZWZQdHI8SURCQW55
PiBjcmVhdGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQorICAgIHN0YXRp
YyBSZWZQdHI8SURCQW55PiBjcmVhdGUoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCQW55KHZhbHVlKSk7CiAgICAgfQpAQCAt
MTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SURCSW5kZXg+IGlkYkluZGV4KCk7
CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSgpOwogICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKTsKLSAgICBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUoKTsKKyAgICBKU0M6OkpTVmFsdWUgc2NyaXB0VmFs
dWUoKTsKICAgICBpbnQ2NF90IGludGVnZXIoKTsKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZygp
OwogICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBw
cml2YXRlOgogICAgIGV4cGxpY2l0IElEQkFueShSZWY8SURCSW5kZXg+JiYpOwogICAgIGV4cGxp
Y2l0IElEQkFueShSZWY8SURCQ3Vyc29yPiYmKTsKICAgICBleHBsaWNpdCBJREJBbnkoY29uc3Qg
SURCS2V5UGF0aCYpOwotICAgIGV4cGxpY2l0IElEQkFueShjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYpOworICAgIGV4cGxpY2l0IElEQkFueShjb25zdCBKU0M6OkpTVmFsdWUmKTsKIAog
ICAgIElEQkFueTo6VHlwZSBtX3R5cGUgeyBJREJBbnk6OlR5cGU6OlVuZGVmaW5lZCB9OwogICAg
IFJlZlB0cjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+IG1fY3Vyc29yV2l0aFZhbHVlOwog
CiAgICAgY29uc3QgSURCS2V5UGF0aCBtX2lkYktleVBhdGg7Ci0gICAgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgbV9zY3JpcHRWYWx1ZTsKKyAgICBjb25zdCBKU0M6OkpTVmFsdWUgbV9z
Y3JpcHRWYWx1ZTsKICAgICBjb25zdCBTdHJpbmcgbV9zdHJpbmc7CiAgICAgY29uc3QgaW50NjRf
dCBtX2ludGVnZXIgeyAwIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggOTk4MDgyOC4uMDJlMjE0NTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtNDAsNiArNDAsOCBA
QAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KIAordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjb25zdCBBdG9taWNTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpCkBA
IC0xNTcsMTkgKzE1OSwxOSBAQCBjb25zdCBTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9uKCkg
Y29uc3QKICAgICByZXR1cm4gSURCQ3Vyc29yOjpkaXJlY3Rpb25Ub1N0cmluZyhtX2luZm8uY3Vy
c29yRGlyZWN0aW9uKCkpOwogfQogCi1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURC
Q3Vyc29yOjprZXkoKSBjb25zdAorSlNWYWx1ZSBJREJDdXJzb3I6OmtleShFeGVjU3RhdGUmKSBj
b25zdAogewotICAgIHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50S2V5OworICAgIHJldHVybiBt
X2N1cnJlbnRLZXk7CiB9CiAKLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJz
b3I6OnByaW1hcnlLZXkoKSBjb25zdAorSlNWYWx1ZSBJREJDdXJzb3I6OnByaW1hcnlLZXkoRXhl
Y1N0YXRlJikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlL
ZXk7CisgICAgcmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXk7CiB9CiAKLWNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6OnZhbHVlKCkgY29uc3QKK0pTVmFsdWUgSURCQ3Vy
c29yOjp2YWx1ZShFeGVjU3RhdGUmKSBjb25zdAogewotICAgIHJldHVybiBtX2RlcHJlY2F0ZWRD
dXJyZW50VmFsdWU7CisgICAgcmV0dXJuIG1fY3VycmVudFZhbHVlOwogfQogCiBJREJBbnkqIElE
QkN1cnNvcjo6c291cmNlKCkKQEAgLTIyNCw3ICsyMjYsNyBAQCBSZWZQdHI8V2ViQ29yZTo6SURC
UmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIERlcHJlY2F0
ZWQ6OgogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byByZXF1ZXN0ID0gZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoKS5wdXRGb3JDdXJzb3JVcGRhdGUoZXhlYywgdmFsdWUuanNWYWx1ZSgpLCBtX2Rl
cHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5qc1ZhbHVlKCksIGVjKTsKKyAgICBhdXRvIHJlcXVl
c3QgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnB1dEZvckN1cnNvclVwZGF0ZShleGVjLCB2YWx1
ZS5qc1ZhbHVlKCksIG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKICAgICBpZiAoZWMuY29kZSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTI4MCwxMCArMjgyLDkgQEAgdm9pZCBJREJD
dXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2EKIAogdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGtleVZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewotICAgIERPTVJlcXVl
c3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwogICAgIFJlZlB0cjxJREJLZXk+IGtleTsK
ICAgICBpZiAoIWtleVZhbHVlLmpzVmFsdWUoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBrZXkg
PSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsKKyAgICAgICAg
a2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBrZXlWYWx1ZSk7CiAKICAgICBjb250
aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSwgZWMpOwogfQpAQCAtMzgwLDcgKzM4MSw3IEBAIFJlZlB0
cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IGF1dG8gcmVxdWVzdCA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkubW9kZXJuRGVsZXRlKGNvbnRl
eHQsIG1fZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5LmpzVmFsdWUoKSwgZWMpOworICAgIGF1
dG8gcmVxdWVzdCA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkubW9kZXJuRGVsZXRlKGNvbnRleHQs
IG1fY3VycmVudFByaW1hcnlLZXksIGVjKTsKICAgICBpZiAoZWMuY29kZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKQEAgLTQwMCwyNSArNDAxLDI1IEBAIHZvaWQgSURCQ3Vyc29yOjpzZXRH
ZXRSZXN1bHQoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCR2V0UmVzdWx0JiBnZXRSZXN1
bHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghZ2V0UmVzdWx0LmlzRGVmaW5lZCgpKSB7
Ci0gICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRLZXkgPSB7IH07CisgICAgICAgIG1fY3VycmVu
dEtleSA9IHsgfTsKICAgICAgICAgbV9jdXJyZW50S2V5RGF0YSA9IHsgfTsKLSAgICAgICAgbV9k
ZXByZWNhdGVkQ3VycmVudFByaW1hcnlLZXkgPSB7IH07CisgICAgICAgIG1fY3VycmVudFByaW1h
cnlLZXkgPSB7IH07CiAgICAgICAgIG1fY3VycmVudFByaW1hcnlLZXlEYXRhID0geyB9OwotICAg
ICAgICBtX2RlcHJlY2F0ZWRDdXJyZW50VmFsdWUgPSB7IH07CisgICAgICAgIG1fY3VycmVudFZh
bHVlID0geyB9OwogCiAgICAgICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRLZXkgPSBpZGJLZXlEYXRhVG9TY3Jp
cHRWYWx1ZShjb250ZXh0LCBnZXRSZXN1bHQua2V5RGF0YSgpKTsKKyAgICBtX2N1cnJlbnRLZXkg
PSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZSgqY29udGV4dCwgZ2V0UmVzdWx0LmtleURhdGEoKSk7
CiAgICAgbV9jdXJyZW50S2V5RGF0YSA9IGdldFJlc3VsdC5rZXlEYXRhKCk7Ci0gICAgbV9kZXBy
ZWNhdGVkQ3VycmVudFByaW1hcnlLZXkgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0
LCBnZXRSZXN1bHQucHJpbWFyeUtleURhdGEoKSk7CisgICAgbV9jdXJyZW50UHJpbWFyeUtleSA9
IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKCpjb250ZXh0LCBnZXRSZXN1bHQucHJpbWFyeUtleURh
dGEoKSk7CiAgICAgbV9jdXJyZW50UHJpbWFyeUtleURhdGEgPSBnZXRSZXN1bHQucHJpbWFyeUtl
eURhdGEoKTsKIAogICAgIGlmIChpc0tleUN1cnNvcigpKQotICAgICAgICBtX2RlcHJlY2F0ZWRD
dXJyZW50VmFsdWUgPSB7IH07CisgICAgICAgIG1fY3VycmVudFZhbHVlID0geyB9OwogICAgIGVs
c2UKLSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1
ZURhdGEoKmNvbnRleHQsIGdldFJlc3VsdC52YWx1ZSgpLmRhdGEoKSk7CisgICAgICAgIG1fY3Vy
cmVudFZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoKmNvbnRleHQsIGdl
dFJlc3VsdC52YWx1ZSgpLmRhdGEoKSk7CiAKICAgICBtX2dvdFZhbHVlID0gdHJ1ZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKaW5kZXggODRmOGI5
Ny4uYjI4YTFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29ySW5mby5oIgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDSlNWYWx1ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU2LDkgKzU3
LDkgQEAgcHVibGljOgogCiAgICAgLy8gSW1wbGVtZW50IHRoZSBJREwKICAgICBjb25zdCBTdHJp
bmcmIGRpcmVjdGlvbigpIGNvbnN0OwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBrZXkoKSBjb25zdDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgcHJpbWFy
eUtleSgpIGNvbnN0OwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSgp
IGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSBrZXkoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDsKKyAg
ICBKU0M6OkpTVmFsdWUgcHJpbWFyeUtleShKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OworICAgIEpT
Qzo6SlNWYWx1ZSB2YWx1ZShKU0M6OkV4ZWNTdGF0ZSYpIGNvbnN0OwogICAgIElEQkFueSogc291
cmNlKCk7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gdXBkYXRlKEpTQzo6RXhl
Y1N0YXRlJiwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UmKTsKQEAgLTExMSwxMSArMTEyLDkgQEAgcHJpdmF0ZToKICAgICBJREJLZXlEYXRhIG1fY3Vy
cmVudEtleURhdGE7CiAgICAgSURCS2V5RGF0YSBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YTsKIAot
ICAgIC8vIEZJWE1FOiBXaGVuIGRpdGNoaW5nIExlZ2FjeSBJREIgYW5kIGNvbWJpbmluZyB0aGlz
IGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGFic3RyYWN0IElEQkN1cnNvciwKLSAgICAvLyB0aGVz
ZSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtZW1iZXJzIHNob3VsZCBiZSBKU1ZhbHVlcyBpbnN0
ZWFkLgotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGVwcmVjYXRlZEN1cnJlbnRLZXk7
Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlL
ZXk7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9kZXByZWNhdGVkQ3VycmVudFZhbHVl
OworICAgIEpTQzo6SlNWYWx1ZSBtX2N1cnJlbnRLZXk7CisgICAgSlNDOjpKU1ZhbHVlIG1fY3Vy
cmVudFByaW1hcnlLZXk7CisgICAgSlNDOjpKU1ZhbHVlIG1fY3VycmVudFZhbHVlOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggMDQ2ZjkwNS4uMTc3YWQ0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCkBAIC0zMiw4ICszMiw4IEBA
CiBdIGludGVyZmFjZSBJREJDdXJzb3IgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkg
c291cmNlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZGlyZWN0aW9uOwotICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkga2V5OwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkg
cHJpbWFyeUtleTsKKyAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGUsIEltcGxlbWVudGF0aW9uUmV0
dXJuVHlwZT1KU1ZhbHVlXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IGtleTsKKyAgICBbQ2FsbFdp
dGg9U2NyaXB0U3RhdGUsIEltcGxlbWVudGF0aW9uUmV0dXJuVHlwZT1KU1ZhbHVlXSByZWFkb25s
eSBhdHRyaWJ1dGUgYW55IHByaW1hcnlLZXk7CiAKICAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGUs
IFJhaXNlc0V4Y2VwdGlvbldpdGhNZXNzYWdlXSBJREJSZXF1ZXN0IHVwZGF0ZShhbnkgdmFsdWUp
OwogICAgIFtSYWlzZXNFeGNlcHRpb25XaXRoTWVzc2FnZV0gdm9pZCBhZHZhbmNlKFtFbmZvcmNl
UmFuZ2VdIHVuc2lnbmVkIGxvbmcgY291bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKaW5kZXggODUyZTE0Ny4u
YzZjMzdjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yV2l0aFZhbHVlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCkBAIC0zMCw1ICszMCw1IEBACiAgICAgU2tpcFZUYWJs
ZVZhbGlkYXRpb24sCiAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCiBdIGludGVyZmFjZSBJREJD
dXJzb3JXaXRoVmFsdWUgOiBJREJDdXJzb3IgewotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkg
dmFsdWU7CisgICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlLCBJbXBsZW1lbnRhdGlvblJldHVyblR5
cGU9SlNWYWx1ZV0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSB2YWx1ZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwCmluZGV4IDM2OGVjMGEu
LjEzZmEzYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZh
Y3RvcnkuY3BwCkBAIC0xNDksOSArMTQ5LDggQEAgUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IElE
QkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnQKIAog
c2hvcnQgSURCRmFjdG9yeTo6Y21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdFZhbHVlLCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgc2Vjb25kVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
CiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVm
UHRyPElEQktleT4gZmlyc3QgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGZp
cnN0VmFsdWUpOwotICAgIFJlZlB0cjxJREJLZXk+IHNlY29uZCA9IHNjcmlwdFZhbHVlVG9JREJL
ZXkoJnJlcXVlc3RTdGF0ZSwgc2Vjb25kVmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+IGZpcnN0
ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBmaXJzdFZhbHVlKTsKKyAgICBSZWZQdHI8
SURCS2V5PiBzZWNvbmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIHNlY29uZFZhbHVl
KTsKIAogICAgIEFTU0VSVChmaXJzdCk7CiAgICAgQVNTRVJUKHNlY29uZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKaW5kZXggYzY0NzMxNy4uZmEy
MzNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNw
cApAQCAtMTYwLDggKzE2MCw3IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjCiB7CiAgICAgTE9H
KEluZGV4ZWREQiwgIklEQkluZGV4Ojpjb3VudCIpOwogCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJl
cXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0
VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIFJlZlB0cjxJREJLZXk+IGlk
YktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwga2V5KTsKICAgICBpZiAoIWlkYktl
eSB8fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAgICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAgICBlYy5tZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6
IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQga2V5LiIpOwpAQCAtMjQyLDggKzI0MSw3IEBA
IFJlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbnN0IERlcHJlY2F0CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4
OjpnZXQiKTsKIAotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwot
ICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RT
dGF0ZSwga2V5KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURC
S2V5KGNvbnRleHQsIGtleSk7CiAgICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0g
S2V5VHlwZTo6SW52YWxpZCkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRhdGFFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2
YWxpZCBrZXkuIik7CkBAIC0yODcsOCArMjg1LDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQklu
ZGV4OjpnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmUK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmdldEtleSIpOwogCi0gICAgRE9NUmVx
dWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRi
S2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIFJlZlB0
cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwga2V5KTsKICAg
ICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAg
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAg
ICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBv
biAnSURCSW5kZXgnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcAppbmRleCA5
ZTE5NDVkLi4wZWM3NmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UmFuZ2UuY3BwCkBAIC0zMCw5ICszMCwxMiBAQAogI2luY2x1ZGUgIklEQkJpbmRp
bmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQktleURhdGEuaCIKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogCit1c2luZyBuYW1lc3BhY2UgSlNDOworCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFJlZjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6OmNyZWF0ZShSZWZQdHI8SURCS2V5
PiYmIGtleSkKQEAgLTQ5LDE2ICs1MiwxNCBAQCBJREJLZXlSYW5nZTo6SURCS2V5UmFuZ2UoUmVm
UHRyPElEQktleT4mJiBsb3dlciwgUmVmUHRyPElEQktleT4mJiB1cHBlciwgTG93ZXJCbwogewog
fQogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJREJLZXlSYW5nZTo6bG93ZXJWYWx1ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBjb25zdAorSlNWYWx1ZSBJREJLZXlSYW5nZTo6
bG93ZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAg
IERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIHJldHVybiBpZGJL
ZXlUb1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIG1fbG93ZXIpOworICAgIHJldHVybiBpZGJL
ZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBJREJLZXlEYXRhKG1fbG93ZXIuZ2V0KCkpKTsK
IH0KIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgSURCS2V5UmFuZ2U6OnVwcGVyVmFsdWUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgY29uc3QKK0pTVmFsdWUgSURCS2V5UmFuZ2U6
OnVwcGVyVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAg
ICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICByZXR1cm4gaWRi
S2V5VG9TY3JpcHRWYWx1ZSgmcmVxdWVzdFN0YXRlLCBtX3VwcGVyKTsKKyAgICByZXR1cm4gaWRi
S2V5RGF0YVRvU2NyaXB0VmFsdWUoY29udGV4dCwgSURCS2V5RGF0YShtX3VwcGVyLmdldCgpKSk7
CiB9CiAKIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Om9ubHkoUmVmUHRyPElEQktl
eT4mJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNzMsOCArNzQsNyBAQCBSZWZQdHI8SURC
S2V5UmFuZ2U+IElEQktleVJhbmdlOjpvbmx5KFJlZlB0cjxJREJLZXk+JiYga2V5LCBFeGNlcHRp
b25Db2RlJiBlYykKIAogUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6b25seShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIERPTVJlcXVlc3RTdGF0ZSBy
ZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHNjcmlwdFZh
bHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwga2V5VmFsdWUpOwogICAgIGlmICgh
a2V5IHx8ICFrZXktPmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEYXRhRXJyb3I7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtODUsOCArODUsNyBA
QCBSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpvbmx5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IERlcAogCiBSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJh
bmdlOjpsb3dlckJvdW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBib3VuZFZhbHVlLCBib29sIG9wZW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwot
ICAgIFJlZlB0cjxJREJLZXk+IGJvdW5kID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0
YXRlLCBib3VuZFZhbHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiBib3VuZCA9IHNjcmlwdFZhbHVl
VG9JREJLZXkoY29udGV4dCwgYm91bmRWYWx1ZSk7CiAgICAgaWYgKCFib3VuZCB8fCAhYm91bmQt
PmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJy
b3I7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTcsOCArOTYsNyBAQCBSZWZQdHI8SURC
S2V5UmFuZ2U+IElEQktleVJhbmdlOjpsb3dlckJvdW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGNvbgogCiBSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjp1cHBlckJv
dW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBib3VuZFZhbHVlLCBib29sIG9wZW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJ
REJLZXk+IGJvdW5kID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBib3VuZFZh
bHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiBib3VuZCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoY29u
dGV4dCwgYm91bmRWYWx1ZSk7CiAgICAgaWYgKCFib3VuZCB8fCAhYm91bmQtPmlzVmFsaWQoKSkg
ewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMTA5LDkgKzEwNyw4IEBAIFJlZlB0cjxJREJLZXlSYW5nZT4g
SURCS2V5UmFuZ2U6OnVwcGVyQm91bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uCiAKIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6OmJvdW5kKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBsb3dl
clZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdXBwZXJWYWx1ZSwgYm9vbCBs
b3dlck9wZW4sIGJvb2wgdXBwZXJPcGVuLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBET01S
ZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBs
b3dlciA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgbG93ZXJWYWx1ZSk7Ci0g
ICAgUmVmUHRyPElEQktleT4gdXBwZXIgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3Rh
dGUsIHVwcGVyVmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+IGxvd2VyID0gc2NyaXB0VmFsdWVU
b0lEQktleShjb250ZXh0LCBsb3dlclZhbHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiB1cHBlciA9
IHNjcmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwgdXBwZXJWYWx1ZSk7CiAKICAgICBpZiAoIWxv
d2VyIHx8ICFsb3dlci0+aXNWYWxpZCgpIHx8ICF1cHBlciB8fCAhdXBwZXItPmlzVmFsaWQoKSkg
ewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaAppbmRleCAxYmRhN2Y3
Li5kNjY2ZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eVJhbmdlLmgKQEAgLTU4LDggKzU4LDggQEAgcHVibGljOgogICAgIElEQktleSogbG93ZXIoKSBj
b25zdCB7IHJldHVybiBtX2xvd2VyLmdldCgpOyB9CiAgICAgSURCS2V5KiB1cHBlcigpIGNvbnN0
IHsgcmV0dXJuIG1fdXBwZXIuZ2V0KCk7IH0KIAotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
IGxvd2VyVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0OwotICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIHVwcGVyVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0
OworICAgIEpTQzo6SlNWYWx1ZSAgbG93ZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
Y29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIHVwcGVyVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYpIGNvbnN0OwogICAgIGJvb2wgbG93ZXJPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9sb3dlclR5
cGUgPT0gTG93ZXJCb3VuZE9wZW47IH0KICAgICBib29sIHVwcGVyT3BlbigpIGNvbnN0IHsgcmV0
dXJuIG1fdXBwZXJUeXBlID09IFVwcGVyQm91bmRPcGVuOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbAppbmRleCBmMDYwMGZmLi4xMDQy
MjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlS
YW5nZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFu
Z2UuaWRsCkBAIC0yOCw4ICsyOCw4IEBACiAgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwK
ICAgICBFbmFibGVkQXRSdW50aW1lPUluZGV4ZWREQiwKIF0gaW50ZXJmYWNlIElEQktleVJhbmdl
IHsKLSAgICBbSW1wbGVtZW50ZWRBcz1sb3dlclZhbHVlLENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgbG93ZXI7Ci0gICAgW0ltcGxlbWVudGVk
QXM9dXBwZXJWYWx1ZSxDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSByZWFkb25seSBh
dHRyaWJ1dGUgYW55IHVwcGVyOworICAgIFtJbXBsZW1lbnRlZEFzPWxvd2VyVmFsdWUsIENhbGxX
aXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGF0aW9uUmV0dXJuVHlwZT1KU1Zh
bHVlXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IGxvd2VyOworICAgIFtJbXBsZW1lbnRlZEFzPXVw
cGVyVmFsdWUsIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGF0aW9u
UmV0dXJuVHlwZT1KU1ZhbHVlXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IHVwcGVyOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGxvd2VyT3BlbjsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgYm9vbGVhbiB1cHBlck9wZW47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCA4ZWQ1YjA5Li43YzNiMTEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCkBAIC0xODIsOCArMTgyLDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGUKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0
ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lE
QktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNj
cmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwga2V5KTsKICAgICBpZiAoIWlkYktleSB8fCBpZGJL
ZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUg
cGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKQEAgLTM5OSw4ICszOTgsNyBAQCBSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleAogCiBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
Om1vZGVybkRlbGV0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBKU0M6OkpTVmFs
dWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewotICAgIERPTVJlcXVlc3RT
dGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9
IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBSZWZQdHI8SURC
S2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtleSk7CiAgICAgaWYg
KCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewogICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgZWMu
bWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lE
Qk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CkBAIC01
OTQsOCArNTkyLDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdAogewogICAgIExPRyhJbmRleGVk
REIsICJJREJPYmplY3RTdG9yZTo6Y291bnQiKTsKIAotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1
ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZh
bHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJL
ZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtleSk7CiAgICAgaWYgKCFpZGJLZXkg
fHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewogICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9
IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCT2JqZWN0U3Rv
cmUnOiBUaGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggZmU2OTUwYi4uZDc5
NGU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5jcHAKQEAgLTMyNiwxMyArMzI2LDEzIEBAIHZvaWQgSURCUmVxdWVzdDo6dW5jYXVnaHRFeGNl
cHRpb25JbkV2ZW50SGFuZGxlcigpCiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0
IElEQktleURhdGEqIGtleURhdGEpCiB7Ci0gICAgaWYgKCFrZXlEYXRhKSB7CisgICAgYXV0byog
Y29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQgfHwg
IWtleURhdGEpIHsKICAgICAgICAgbV9yZXN1bHQgPSBudWxscHRyOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBpZGJLZXlEYXRh
VG9TY3JpcHRWYWx1ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICprZXlEYXRhKTsKLSAgICBt
X3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUodmFsdWUpKTsKKyAgICBtX3Jlc3VsdCA9
IElEQkFueTo6Y3JlYXRlKGlkYktleURhdGFUb1NjcmlwdFZhbHVlKCpjb250ZXh0LCAqa2V5RGF0
YSkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRfdCBudW1iZXIpCkBA
IC0zNDksNyArMzQ5LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRD
bG9uZShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXQKICAgICBpZiAoIWNvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVl
ID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGEoKmNvbnRleHQsIHZhbHVlRGF0YSk7CisgICAgYXV0
byB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKCpjb250ZXh0LCB2YWx1
ZURhdGEpOwogICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoV1RGTW92ZSh2YWx1ZSkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
TWVtb3J5T2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcAppbmRleCA4YjhjZDc1Li4xZWNkMTc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2Jq
ZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKQEAgLTMwMSw3ICszMDEsNyBAQCBJREJFcnJvciBNZW1v
cnlPYmplY3RTdG9yZTo6dXBkYXRlSW5kZXhlc0ZvclB1dFJlY29yZChjb25zdCBJREJLZXlEYXRh
JiBrZXksIGNvbgogewogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoVW5pcXVlSURCRGF0YWJhc2U6
OmRhdGFiYXNlVGhyZWFkVk0oKSk7CiAKLSAgICBhdXRvIGpzVmFsdWUgPSBpZGJWYWx1ZURhdGFU
b0pTVmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHZh
bHVlKTsKKyAgICBhdXRvIGpzVmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1
ZShVbmlxdWVJREJEYXRhYmFzZTo6ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgdmFsdWUpOwog
ICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiB7IH07
CiAKQEAgLTMzOSw3ICszMzksNyBAQCBJREJFcnJvciBNZW1vcnlPYmplY3RTdG9yZTo6cG9wdWxh
dGVJbmRleFdpdGhFeGlzdGluZ1JlY29yZHMoTWVtb3J5SW5kZXgmIGluZGV4KQogICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkVk0oKSk7CiAK
ICAgICBmb3IgKGF1dG8gaXRlcmF0b3IgOiAqbV9rZXlWYWx1ZVN0b3JlKSB7Ci0gICAgICAgIGF1
dG8ganNWYWx1ZSA9IGlkYlZhbHVlRGF0YVRvSlNWYWx1ZShVbmlxdWVJREJEYXRhYmFzZTo6ZGF0
YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgaXRlcmF0b3IudmFsdWUpOworICAgICAgICBhdXRvIGpz
VmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZShVbmlxdWVJREJEYXRhYmFz
ZTo6ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgaXRlcmF0b3IudmFsdWUpOwogICAgICAgICBp
ZiAoanNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcAppbmRleCA2NzE3YjFlLi5iOTJjZTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMzcsOSArMzcsMTEgQEAKICNp
bmNsdWRlICJJbmRleEtleS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgogI2luY2x1ZGUgIlRocmVhZFNhZmVEYXRhQnVmZmVyLmgiCiAKKyNpbmNsdWRlIDxi
aW5kaW5ncy9TY3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogCkBAIC03Nyw0MyArNzks
NiBAQCBzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiBvYmplY3QsIGNv
bnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTVmFs
dWUgaWRiS2V5RGF0YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSURCS2V5
RGF0YSYga2V5RGF0YSkKLXsKLSAgICBpZiAoa2V5RGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIoZXhlYy52bSgp
LmFwaUxvY2soKSk7Ci0KLSAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7Ci0gICAgY2FzZSBL
ZXlUeXBlOjpBcnJheToKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVmVjdG9yPElEQktl
eURhdGE+JiBpbkFycmF5ID0ga2V5RGF0YS5hcnJheSgpOwotICAgICAgICAgICAgc2l6ZV90IHNp
emUgPSBpbkFycmF5LnNpemUoKTsKLSAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheSgmZXhlYywgMCwgZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNp
emUpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvJiBhcnJheUtleSA9IGluQXJyYXkuYXQoaSk7Ci0gICAgICAgICAg
ICAgICAgb3V0QXJyYXktPnB1dERpcmVjdEluZGV4KCZleGVjLCBpLCBpZGJLZXlEYXRhVG9KU1Zh
bHVlKGV4ZWMsIGFycmF5S2V5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZShvdXRBcnJheSk7Ci0gICAgICAgIH0KLSAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoK
LSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZleGVjLCBrZXlEYXRhLnN0cmluZygp
KTsKLSAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0gICAgICAgIHJldHVybiBqc0RhdGVPck51bGwo
JmV4ZWMsIGtleURhdGEuZGF0ZSgpKTsKLSAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKGtleURhdGEubnVtYmVyKCkpOwotICAgIGNhc2UgS2V5VHlwZTo6
TWluOgotICAgIGNhc2UgS2V5VHlwZTo6TWF4OgotICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi19Ci0KIHN0YXRpYyBKU1ZhbHVlIGlkYktleVRvSlNWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElEQktleSoga2V5KQogewog
ICAgIGlmICgha2V5IHx8ICFleGVjKSB7CkBAIC0yMDEsMTMgKzE2NiwxMyBAQCBzdGF0aWMgUmVm
UHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7CiB9CiAKLUlEQktl
eVBhdGggaWRiS2V5UGF0aEZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5UGF0
aFZhbHVlKQorSURCS2V5UGF0aCBpZGJLZXlQYXRoRnJvbVZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywg
SlNWYWx1ZSBrZXlQYXRoVmFsdWUpCiB7CiAgICAgSURCS2V5UGF0aCBrZXlQYXRoOwogICAgIGlm
IChpc0pTQXJyYXkoa2V5UGF0aFZhbHVlKSkKLSAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgo
dG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGtleVBhdGhWYWx1ZSkpOworICAgICAgICBrZXlQ
YXRoID0gSURCS2V5UGF0aCh0b05hdGl2ZUFycmF5PFN0cmluZz4oJmV4ZWMsIGtleVBhdGhWYWx1
ZSkpOwogICAgIGVsc2UKLSAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0aFZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgIGtleVBhdGggPSBJREJLZXlQ
YXRoKGtleVBhdGhWYWx1ZS50b1N0cmluZygmZXhlYyktPnZhbHVlKCZleGVjKSk7CiAgICAgcmV0
dXJuIGtleVBhdGg7CiB9CiAKQEAgLTI3MywzMiArMjM4LDYgQEAgc3RhdGljIGJvb2wgY2FuSW5q
ZWN0TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwg
Y29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgImluamVjdElEQktleUludG9TY3JpcHRWYWx1
ZSIpOwotCi0gICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5
cGU6OlN0cmluZyk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7Ci0gICAg
SURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7Ci0gICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgu
c3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOwotICAgIEFTU0VSVChlcnJvciA9PSBJ
REJLZXlQYXRoUGFyc2VFcnJvcjo6Tm9uZSk7Ci0KLSAgICBpZiAoa2V5UGF0aEVsZW1lbnRzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRXhlY1N0YXRlKiBleGVjID0g
cmVxdWVzdFN0YXRlLT5leGVjKCk7Ci0KLSAgICBKU1ZhbHVlIHBhcmVudCA9IGVuc3VyZU50aFZh
bHVlT25LZXlQYXRoKGV4ZWMsIHZhbHVlLmpzVmFsdWUoKSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQ
YXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7Ci0gICAgaWYgKHBhcmVudC5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNldChleGVjLCBwYXJlbnQsIGtleVBh
dGhFbGVtZW50cy5sYXN0KCksIGlkYktleVRvSlNWYWx1ZShleGVjLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGtleS5nZXQoKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CkBAIC0zMjcsNDcgKzI2Niw2IEBAIGJvb2wg
aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBjb25zdCBJ
REJLZXlEYXRhJiBrZXlEYXRhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZlB0cjxJREJLZXk+
IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoIik7Ci0gICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKLQotICAgIGlm
IChrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpBcnJheSkgewotICAg
ICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IHJlc3VsdDsKLSAgICAgICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJheSgpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFycmF5LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhl
YywgdmFsdWUsIGFycmF5W2ldKTsKLSAgICAgICAgICAgIGlmICgha2V5KQotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7Ci0gICAg
fQotCi0gICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6
OlN0cmluZyk7Ci0gICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aChleGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7Ci19Ci0KLVJlZlB0cjxJ
REJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3Rh
dGUmIGV4ZWMsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkpOwotCi0g
ICAgaWYgKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OkFycmF5KSB7
Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gcmVzdWx0OwotICAgICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0
aCgmZXhlYywgdmFsdWUsIGFycmF5W2ldKTsKLSAgICAgICAgICAgIGlmICgha2V5KQotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7
Ci0gICAgfQotCi0gICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0
aFR5cGU6OlN0cmluZyk7Ci0gICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aCgmZXhlYywgdmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOwotfQotCiBS
ZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
RXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQ
YXRoJiBrZXlQYXRoKQogewogICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7CkBAIC0zODks
MTcgKzI4Nyw2IEBAIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZh
bHVlQW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0CiAgICAgcmV0dXJuIGludGVybmFs
Q3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCgmZXhlYywgdmFsdWUsIGtleVBh
dGguc3RyaW5nKCkpOwogfQogCi1ib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShE
T01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgY29uc3QgSlNDOjpKU1ZhbHVlJiBzY3JpcHRW
YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
ImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwotCi0gICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSByZXF1ZXN0U3RhdGUtPmV4ZWMoKTsKLSAgICBpZiAoIWV4ZWMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUo
KmV4ZWMsIHNjcmlwdFZhbHVlLCBrZXlQYXRoKTsKLX0KLQogYm9vbCBjYW5JbmplY3RJREJLZXlJ
bnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgSlNDOjpKU1Zh
bHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBMT0co
U3RvcmFnZUFQSSwgImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwpAQCAtNDE2LDMw
ICszMDMsMTYgQEAgYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVj
U3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgSlNDOjpKU1ZhbHUKICAgICByZXR1cm4gY2FuSW5qZWN0
TnRoVmFsdWVPbktleVBhdGgoJmV4ZWNTdGF0ZSwgc2NyaXB0VmFsdWUsIGtleVBhdGhFbGVtZW50
cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUpCitKU1ZhbHVlIGRlc2Vy
aWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCiB7Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gcHJwVmFsdWU7Ci0gICAgSlNWYWx1ZSByZXN1
bHQ7Ci0gICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSkKLSAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXpl
ZFZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAp
OwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7Ci0gICAgcmV0dXJuIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7Ci19Ci0KLURlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCi17Ci0g
ICAgRE9NUmVxdWVzdFN0YXRlIHN0YXRlKCZjb250ZXh0KTsKLSAgICBhdXRvKiBleGVjU3RhdGUg
PSBzdGF0ZS5leGVjKCk7Ci0KLSAgICBpZiAoIWV4ZWNTdGF0ZSkKLSAgICAgICAgcmV0dXJuIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKCk7CisgICAgYXV0byogc3RhdGUgPSBjb250ZXh0LmV4ZWNT
dGF0ZSgpOworICAgIGlmICghc3RhdGUpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAg
IHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjU3RhdGUtPnZtKCksIGRlc2VyaWFs
aXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKCpleGVjU3RhdGUsIHZhbHVlRGF0YSkpOworICAgIHJl
dHVybiBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZSgqc3RhdGUsIHZhbHVlRGF0YSk7
CiB9CiAKLUpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkK
K0pTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCiB7CiAgICAgaWYg
KCF2YWx1ZURhdGEuZGF0YSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTQ1
OCw3NCArMzMxLDI0IEBAIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgVGhyZWFkCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZl
cihET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IHBycEJ1ZmZlciwgYm9vbCBrZXlJc0RlZmluZWQpCitSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1
ZVRvSURCS2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IEpTQzo6SlNW
YWx1ZSYgc2NyaXB0VmFsdWUpCiB7Ci0gICAgaWYgKHBycEJ1ZmZlcikgewotICAgICAgICBWZWN0
b3I8dWludDhfdD4gdmFsdWU7Ci0gICAgICAgIHZhbHVlLmFwcGVuZChwcnBCdWZmZXItPmRhdGEo
KSwgcHJwQnVmZmVyLT5zaXplKCkpOwotICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVJREJWYWx1
ZUJ1ZmZlcihyZXF1ZXN0U3RhdGUtPmV4ZWMoKSwgV1RGTW92ZSh2YWx1ZSksIGtleUlzRGVmaW5l
ZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHJlcXVlc3RT
dGF0ZS0+ZXhlYygpLT52bSgpLCBqc051bGwoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZy
b21WYWx1ZShjb250ZXh0LmV4ZWNTdGF0ZSgpLCBzY3JpcHRWYWx1ZSk7CiB9CiAKLXN0YXRpYyBK
U1ZhbHVlIGlkYlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVmVjdG9y
PHVpbnQ4X3Q+JiYgYnVmZmVyKQorUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OkpTVmFsdWUmIHNjcmlwdFZhbHVlKQogewotICAg
IGlmIChidWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMoV1RGTW92ZShidWZmZXIpKTsKLSAgICBy
ZXR1cm4gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgmZXhlYywgZXhlYy5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIDAsIE5vblRocm93aW5nKTsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJv
bVZhbHVlKCZzdGF0ZSwgc2NyaXB0VmFsdWUpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8
dWludDhfdD4mJiBidWZmZXIsIGJvb2wga2V5SXNEZWZpbmVkKQorSlNDOjpKU1ZhbHVlIGlkYktl
eURhdGFUb1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEpCiB7Ci0gICAgQVNTRVJUKGV4ZWMpOwotCi0gICAgLy8gSWYg
dGhlIGtleSBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSB2YWx1ZSBtdXN0IGJlIHVuZGVmaW5lZCAo
YXMgb3Bwb3NlZCB0byBudWxsKS4KLSAgICBpZiAoIWtleUlzRGVmaW5lZCkgewotICAgICAgICAv
LyBXZSBlaXRoZXIgc2hvdWxkbid0IGhhdmUgYSBidWZmZXIgb3IgaXQgc2hvdWxkIGJlIG9mIHNp
emUgMC4KLSAgICAgICAgQVNTRVJUKCFidWZmZXIuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIH0K
LQotICAgIEpTVmFsdWUgcmVzdWx0ID0gaWRiVmFsdWVEYXRhVG9KU1ZhbHVlKCpleGVjLCBXVEZN
b3ZlKGJ1ZmZlcikpOwotICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52
bSgpLCByZXN1bHQpOwotfQotCi1KU1ZhbHVlIGlkYlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKLXsK
LSAgICBpZiAoIXZhbHVlRGF0YS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotCi0gICAgcmV0dXJuIGlkYlZhbHVlRGF0YVRvSlNWYWx1ZShleGVjLCBWZWN0b3I8dWludDhf
dD4oKnZhbHVlRGF0YS5kYXRhKCkpKTsKLX0KLQotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaWRi
S2V5VG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSkKLXsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3RhdGUtPmV4
ZWMoKTsKKyAgICBhdXRvKiBleGVjID0gY29udGV4dC5leGVjU3RhdGUoKTsKICAgICBpZiAoIWV4
ZWMpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUoZXhlYy0+dm0oKSwgaWRiS2V5VG9KU1ZhbHVlKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkpOwotfQot
Ci1SZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KERPTVJlcXVlc3RTdGF0ZSogcmVx
dWVzdFN0YXRlLCBjb25zdCBKU0M6OkpTVmFsdWUmIHNjcmlwdFZhbHVlKQotewotICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOwotICAgIHJldHVybiBjcmVhdGVJREJL
ZXlGcm9tVmFsdWUoZXhlYywgc2NyaXB0VmFsdWUpOwotfQotCi1SZWZQdHI8SURCS2V5PiBzY3Jp
cHRWYWx1ZVRvSURCS2V5KEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNDOjpKU1ZhbHVlJiBzY3Jp
cHRWYWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKCZleGVjLCBzY3Jp
cHRWYWx1ZSk7Ci19CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi1EZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQotewogICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKLSAgICBET01SZXF1ZXN0
U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwotICAgIHJldHVybiBpZGJLZXlUb1NjcmlwdFZh
bHVlKCZyZXF1ZXN0U3RhdGUsIGtleS5nZXQoKSk7CisgICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlKGV4ZWMtPnZtKCksIGlkYktleVRvSlNWYWx1ZShleGVjLCBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXkuZ2V0KCkpKS5q
c1ZhbHVlKCk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8SURCS2V5RGF0YT4gY3JlYXRlS2V5UGF0aEFy
cmF5KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgSURCSW5kZXhJbmZvJiBp
bmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5oCmluZGV4IGMxNzBkMTYuLjYzNGM4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTI5LDQ5ICsyOSwzMiBAQAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgotI2luY2x1
ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01SZXF1ZXN0U3RhdGU7CiBjbGFzcyBJREJJ
bmRleEluZm87CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJLZXlEYXRhOwogY2xhc3MgSURCS2V5
UGF0aDsKIGNsYXNzIEluZGV4S2V5OwotY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgVGhyZWFk
U2FmZURhdGFCdWZmZXI7CiAKLUlEQktleVBhdGggaWRiS2V5UGF0aEZyb21WYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CitJREJLZXlQYXRoIGlkYktleVBhdGhGcm9tVmFsdWUo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCi1ib29sIGluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4sIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwotYm9vbCBpbmplY3RJREJLZXlJ
bnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJLZXlEYXRhJiwgSlNDOjpK
U1ZhbHVlLCBjb25zdCBJREJLZXlQYXRoJik7Ci0KLVJlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKLVJlZlB0cjxJREJLZXk+IG1h
eWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwogUmVm
UHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwot
Ci1ib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBj
b25zdCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CiBib29sIGNhbkluamVjdElE
QktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYs
IGNvbnN0IElEQktleVBhdGgmKTsKK2Jvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgSURCS2V5RGF0YSYsIEpTQzo6SlNWYWx1ZSwgY29uc3QgSURC
S2V5UGF0aCYpOwogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVl
KERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7Ci1E
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSk7Ci1E
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKERPTVJlcXVl
c3RTdGF0ZSosIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBrZXlJc0RlZmluZWQpOwot
V0VCQ09SRV9FWFBPUlQgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1
ZUJ1ZmZlcihKU0M6OkV4ZWNTdGF0ZSosIFZlY3Rvcjx1aW50OF90PiYmLCBib29sIGtleUlzRGVm
aW5lZCk7CitKU0M6OkpTVmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIGNvbnN0IElEQktleURhdGEmKTsKK3ZvaWQgZ2VuZXJhdGVJbmRleEtleUZv
clZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgSlNDOjpKU1ZhbHVl
LCBJbmRleEtleSYgb3V0S2V5KTsKIAorSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVE
YXRhVG9KU1ZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBUaHJlYWRTYWZlRGF0
YUJ1ZmZlciYgdmFsdWVEYXRhKTsKIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0
YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2
YWx1ZURhdGEpOwogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZhbHVl
KERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8SURCS2V5Pik7Ci1SZWZQdHI8SURCS2V5PiBz
Y3JpcHRWYWx1ZVRvSURCS2V5KERPTVJlcXVlc3RTdGF0ZSosIGNvbnN0IEpTQzo6SlNWYWx1ZSYp
OworUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgSlNDOjpKU1ZhbHVlJik7CiBSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRv
SURCS2V5KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpKU1ZhbHVlJik7CiAKLURlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIGlkYktleURhdGFUb1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBJREJLZXlEYXRhJik7Ci0KLUpTQzo6SlNWYWx1ZSBpZGJWYWx1ZURhdGFU
b0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFs
dWVEYXRhKTsKLXZvaWQgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVlKEpTQzo6RXhlY1N0YXRlJiwg
Y29uc3QgSURCSW5kZXhJbmZvJiwgSlNDOjpKU1ZhbHVlLCBJbmRleEtleSYgb3V0S2V5KTsKLUpT
Qzo6SlNWYWx1ZSBpZGJLZXlEYXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURC
S2V5RGF0YSYpOwotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAppbmRleCA3ZDZm
M2Q5Li5iN2ZhOWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QkFueUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlD
dXN0b20uY3BwCkBAIC05OCw3ICs5OCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElEQkFueSogaWRiQW55KQogICAgIGNh
c2UgSURCQW55OjpUeXBlOjpJREJUcmFuc2FjdGlvbjoKICAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYlRyYW5zYWN0aW9uKCkpOwogICAgIGNhc2UgSURC
QW55OjpUeXBlOjpTY3JpcHRWYWx1ZToKLSAgICAgICAgcmV0dXJuIGlkYkFueS0+c2NyaXB0VmFs
dWUoKS5qc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBpZGJBbnktPnNjcmlwdFZhbHVlKCk7CiAg
ICAgY2FzZSBJREJBbnk6OlR5cGU6OlN0cmluZzoKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKGV4ZWMsIGlkYkFueS0+c3RyaW5nKCkpOwogICAgIGNhc2UgSURCQW55OjpUeXBlOjpJ
bnRlZ2VyOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRh
YmFzZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNl
Q3VzdG9tLmNwcAppbmRleCBkN2Y1ODFhLi40YWRlZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcApAQCAtNjYsNyArNjYsNyBA
QCBKU1ZhbHVlIEpTSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBpZiAoIWtl
eVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICBrZXlQYXRoID0g
aWRiS2V5UGF0aEZyb21WYWx1ZSgmc3RhdGUsIGtleVBhdGhWYWx1ZSk7CisgICAgICAgICAgICBr
ZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5UGF0aFZhbHVlKTsKICAgICAg
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAppbmRleCA3NDRkOWEzLi40MWQ3Yzhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3Jl
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0
b3JlQ3VzdG9tLmNwcApAQCAtMTE5LDcgKzExOSw3IEBAIEpTVmFsdWUgSlNJREJPYmplY3RTdG9y
ZTo6Y3JlYXRlSW5kZXgoRXhlY1N0YXRlJiBzdGF0ZSkKICAgICBJREJLZXlQYXRoIGtleVBhdGg7
CiAgICAgSlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAo
IWtleVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBrZXlQYXRoID0gaWRi
S2V5UGF0aEZyb21WYWx1ZSgmc3RhdGUsIGtleVBhdGhWYWx1ZSk7CisgICAgICAgIGtleVBhdGgg
PSBpZGJLZXlQYXRoRnJvbVZhbHVlKHN0YXRlLCBrZXlQYXRoVmFsdWUpOwogICAgIGVsc2Ugewog
ICAgICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CiAgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDRkNTJiZTkuLjBhNzI0
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCkBAIC00MzU4LDkgKzQzNTgsMTIgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAg
ICAgICByZXR1cm4gImpzQXJyYXkoc3RhdGUsICR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpLCAk
dmFsdWUpIjsKICAgICB9CiAKKyAgICBteSAkcmV0dXJuVHlwZSA9ICRzaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRhdGlvblJldHVyblR5cGUifTsKICAgICBpZiAoJHR5
cGUgZXEgImFueSIpIHsKICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJEb2N1bWVudCIp
IHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgfSBlbHNpZiAoZGVmaW5lZCAkcmV0dXJu
VHlwZSBhbmQgJHJldHVyblR5cGUgZXEgIkpTVmFsdWUiKSB7CisgICAgICAgICAgICByZXR1cm4g
IiR2YWx1ZSI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gIigkdmFsdWUu
aGFzTm9WYWx1ZSgpID8ganNOdWxsKCkgOiAkdmFsdWUuanNWYWx1ZSgpKSI7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0
CmluZGV4IDAzNDY0ZDQuLjQ2ZGJiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtNjcsOSArNjcsMTAgQEAgR2V0dGVyUmFp
c2VzRXhjZXB0aW9uCiBHZXR0ZXJSYWlzZXNFeGNlcHRpb25XaXRoTWVzc2FnZQogR2xvYmFsQ29u
dGV4dD1ET01XaW5kb3d8V29ya2VyR2xvYmFsU2NvcGV8RGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUKIEltbXV0YWJsZQorSW1wbGVtZW50ZWRBcz0qCiBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxl
CiBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT0qCi1JbXBsZW1lbnRlZEFzPSoKK0ltcGxlbWVudGF0
aW9uUmV0dXJuVHlwZT0qCiBJbXBsaWNpdFRoaXMKIEluaXRpYWxpemVkQnlFdmVudENvbnN0cnVj
dG9yCiBJbnRlcmZhY2VOYW1lPSoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcAppbmRleCA3YmEyNmQ5Li5hZmFmMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC00ODcsNCArNDg3LDE1IEBAIGJv
b2wgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTQzo6RXhlY1N0YXRlKiBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpleGVjU3RhdGUoKQoreworICAgIGlmIChpczxEb2N1bWVudD4oKnRoaXMpKSB7CisgICAg
ICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqdGhpcyk7CisgICAg
ICAgIHJldHVybiBleGVjU3RhdGVGcm9tUGFnZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgZG9j
dW1lbnQucGFnZSgpKTsKKyAgICB9CisKKyAgICBXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xv
YmFsU2NvcGUgPSBzdGF0aWNfY2FzdDxXb3JrZXJHbG9iYWxTY29wZSo+KHRoaXMpOworICAgIHJl
dHVybiBleGVjU3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaAppbmRleCBhNjY0ZWI5Li4xMDUxNWM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTE4OCw2ICsxODgsOCBAQCBwdWJs
aWM6CiAgICAgaW50IHRpbWVyTmVzdGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV90aW1lck5l
c3RpbmdMZXZlbDsgfQogICAgIHZvaWQgc2V0VGltZXJOZXN0aW5nTGV2ZWwoaW50IHRpbWVyTmVz
dGluZ0xldmVsKSB7IG1fdGltZXJOZXN0aW5nTGV2ZWwgPSB0aW1lck5lc3RpbmdMZXZlbDsgfQog
CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSgpOworCiBwcm90ZWN0ZWQ6CiAgICAgY2xh
c3MgQWRkQ29uc29sZU1lc3NhZ2VUYXNrIDogcHVibGljIFRhc2sgewogICAgIHB1YmxpYzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQu
Y3BwCmluZGV4IDNkMmRiZTAuLjJiYjA4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtNDQsNiArNDQsNyBAQAog
I2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1
ZGUgIklEQkN1cnNvci5oIgogI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgogI2luY2x1
ZGUgIklEQkRhdGFiYXNlLmgiCkBAIC0zMzMsNyArMzM0LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gdGhpcyA9PSAmb3RoZXI7CiAgICAgfQogCi0gICAgdm9pZCBoYW5kbGVFdmVudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KSBvdmVycmlkZQorICAgIHZvaWQgaGFu
ZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygp
LnN1Y2Nlc3NFdmVudCkgewogICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWls
dXJlKCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUuIik7CkBAIC0zODAsMTAgKzM4MSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUgPSBjb250ZXh0ID8gY29udGV4dC0+ZXhlY1N0YXRlKCkgOiBudWxscHRyOwor
ICAgICAgICBpZiAoIXN0YXRlKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIFJlZlB0
cjxEYXRhRW50cnk+IGRhdGFFbnRyeSA9IERhdGFFbnRyeTo6Y3JlYXRlKCkKLSAgICAgICAgICAg
IC5zZXRLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGlkYkN1cnNvci0+a2V5KCksIFN0
cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3Jp
cHQud3JhcE9iamVjdChpZGJDdXJzb3ItPnByaW1hcnlLZXkoKSwgU3RyaW5nKCksIHRydWUpKQot
ICAgICAgICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChpZGJDdXJz
b3ItPnZhbHVlKCksIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRLZXkobV9pbmpl
Y3RlZFNjcmlwdC53cmFwT2JqZWN0KHsgc3RhdGUtPnZtKCksIGlkYkN1cnNvci0+a2V5KCpzdGF0
ZSkgfSwgU3RyaW5nKCksIHRydWUpKQorICAgICAgICAgICAgLnNldFByaW1hcnlLZXkobV9pbmpl
Y3RlZFNjcmlwdC53cmFwT2JqZWN0KHsgc3RhdGUtPnZtKCksIGlkYkN1cnNvci0+cHJpbWFyeUtl
eSgqc3RhdGUpIH0sIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRWYWx1ZShtX2lu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QoeyBzdGF0ZS0+dm0oKSwgaWRiQ3Vyc29yLT52YWx1ZSgq
c3RhdGUpIH0sIFN0cmluZygpLCB0cnVlKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURk1vdmUoZGF0YUVudHJ5KSk7CiAK
</data>
<flag name="review"
          id="300464"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276407</attachid>
            <date>2016-04-14 11:23:20 -0700</date>
            <delta_ts>2016-04-15 22:59:45 -0700</delta_ts>
            <desc>New patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>56525</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYzQyNDAyLi43YjkwZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEx
IEBACisyMDE2LTA0LTE0ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBDbGVhbiB1cCBJREJCaW5kaW5nVXRpbGl0aWVzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBi
ZWhhdmlvcikuCisKKyAgICAgICAgLSBHZXQgcmlkIG9mIGEgd2hvbGUgYnVuY2ggb2YgdW51c2Vk
IGZ1bmN0aW9ucyAoc2luY2Ugd2UgZ290IHJpZCBvZiBMZWdhY3kgSURCKS4KKyAgICAgICAgLSBN
YWtlIG1vcmUgZnVuY3Rpb25zIGRlYWwgaW4gRXhlY1N0YXRlL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRzIGluc3RlYWQgb2YgRE9NUmVxdWVzdFN0YXRlLgorICAgICAgICAtIE1ha2UgbW9yZSBmdW5j
dGlvbnMgZGVhbCBpbiBKU1ZhbHVlIChhcyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+KSBpbnN0
ZWFkIG9mIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dDogQWRkIGEgbmV3IGF0dHJpYnV0ZSB0byBzaWduaWZ5IHRo
YXQgYW4gaW1wbGVtZW50YXRpb24gcmV0dXJucworICAgICAgICAgIEpTVmFsdWVzIGluc3RlYWQg
b2YgRGVwcmVjYXRlZDo6U2NyaXB0U3RhdGUKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6IFVzZSB0aGF0IG5l
dyBhdHRyaWJ1dGUuCisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OklEQkFueSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJBbnk6OnNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJBbnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6Y3JlYXRlKToKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQkN1cnNvcjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6cHJpbWFy
eUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6
Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmRlbGV0ZUZ1
bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6c2V0R2V0UmVzdWx0KToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Y21wKToK
KyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmdldEtleSk6CisgICAgICAg
IAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVJhbmdlOjpsb3dlclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleVJhbmdlOjp1cHBlclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjpv
bmx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjpsb3dlckJvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjp1cHBlckJvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleVJhbmdlOjpib3VuZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UmFuZ2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw6Cisg
ICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6Y291bnQpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRD
bG9uZSk6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9i
amVjdFN0b3JlOjp1cGRhdGVJbmRleGVzRm9yUHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OnBvcHVsYXRlSW5kZXhXaXRoRXhpc3RpbmdS
ZWNvcmRzKToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbElu
ZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgCisgICAg
ICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppZGJLZXlQYXRoRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVybmFsQ3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bWF5YmVDcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNlcmlh
bGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURC
VmFsdWVEYXRhVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9JREJL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6aWRiS2V5RGF0YVRvSlNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjppZGJWYWx1ZURhdGFUb0pTVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
aWRiS2V5VG9TY3JpcHRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5oOgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCRGF0YWJh
c2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJPYmplY3RTdG9yZTo6
Y3JlYXRlSW5kZXgpOgorCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZXhlY1N0YXRlKToK
KyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorCisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKwogMjAxNi0wNC0xMyAgRGFuaWVs
IEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQ1NQOiBOZXN0ZWQgYnJvd3Np
bmcgY29udGV4dCBjcmVhdGVkIGZvciA8b2JqZWN0PiBvciA8ZW1iZWQ+IHNob3VsZCByZXNwZWN0
IG9iamVjdC1zcmMgZGlyZWN0aXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJBbnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQW55LmNwcAppbmRleCA4ZmFiZDIzLi5hNThkMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgSURCQW55OjpJREJB
bnkoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKIH0KIAotSURCQW55OjpJREJBbnkoY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQorSURCQW55OjpJREJBbnkoY29uc3Qg
SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCiAgICAgOiBtX3R5cGUoSURCQW55OjpU
eXBlOjpTY3JpcHRWYWx1ZSkKICAgICAsIG1fc2NyaXB0VmFsdWUodmFsdWUpCiB7CkBAIC0xMzMs
OSArMTMzLDkgQEAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJBbnk6OmlkYlRyYW5zYWN0aW9u
KCkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIElEQkFueTo6c2NyaXB0VmFsdWUoKQorSlNDOjpKU1ZhbHVlIElEQkFueTo6c2NyaXB0VmFs
dWUoKQogewotICAgIHJldHVybiBtX3NjcmlwdFZhbHVlOworICAgIHJldHVybiBtX3NjcmlwdFZh
bHVlLmdldCgpOwogfQogCiBpbnQ2NF90IElEQkFueTo6aW50ZWdlcigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCmluZGV4IDlmMWM3OTUuLjZlN2RjMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCkBAIC0yOSw3ICsyOSw4IEBA
CiAKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgi
Ci0jaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxoZWFwL1N0cm9u
Zy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcwLDcgKzcxLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShrZXlQYXRoKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYgdmFsdWUpCisgICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCQW55KHZhbHVlKSk7CiAgICAgfQpAQCAtMTA4LDcgKzEwOSw3IEBAIHB1
YmxpYzoKICAgICBSZWZQdHI8SURCSW5kZXg+IGlkYkluZGV4KCk7CiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSgpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4g
aWRiVHJhbnNhY3Rpb24oKTsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2Ny
aXB0VmFsdWUoKTsKKyAgICBKU0M6OkpTVmFsdWUgc2NyaXB0VmFsdWUoKTsKICAgICBpbnQ2NF90
IGludGVnZXIoKTsKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpOwogICAgIGNvbnN0IElEQktl
eVBhdGgmIGtleVBhdGgoKTsKQEAgLTEyMCw3ICsxMjEsNyBAQCBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IElEQkFueShSZWY8SURCSW5kZXg+JiYpOwogICAgIGV4cGxpY2l0IElEQkFueShSZWY8SURC
Q3Vyc29yPiYmKTsKICAgICBleHBsaWNpdCBJREJBbnkoY29uc3QgSURCS2V5UGF0aCYpOwotICAg
IGV4cGxpY2l0IElEQkFueShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworICAgIGV4
cGxpY2l0IElEQkFueShjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+Jik7CiAKICAgICBJ
REJBbnk6OlR5cGUgbV90eXBlIHsgSURCQW55OjpUeXBlOjpVbmRlZmluZWQgfTsKICAgICBSZWZQ
dHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CkBAIC0xMzAsNyArMTMxLDcgQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBtX2N1cnNvcldpdGhWYWx1ZTsKIAogICAg
IGNvbnN0IElEQktleVBhdGggbV9pZGJLZXlQYXRoOwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlIG1fc2NyaXB0VmFsdWU7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBt
X3NjcmlwdFZhbHVlOwogICAgIGNvbnN0IFN0cmluZyBtX3N0cmluZzsKICAgICBjb25zdCBpbnQ2
NF90IG1faW50ZWdlciB7IDAgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCA1YWIwZDliLi42MGVlNGE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTI4LDcgKzI4LDYg
QEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRE9NUmVxdWVz
dFN0YXRlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIklEQkJpbmRp
bmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgpAQCAtNDAs
NiArMzksOCBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjb25zdCBBdG9taWNTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9u
TmV4dCgpCkBAIC0xNTcsMTkgKzE1OCwxOSBAQCBjb25zdCBTdHJpbmcmIElEQkN1cnNvcjo6ZGly
ZWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gSURCQ3Vyc29yOjpkaXJlY3Rpb25Ub1N0cmluZyht
X2luZm8uY3Vyc29yRGlyZWN0aW9uKCkpOwogfQogCi1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgSURCQ3Vyc29yOjprZXkoKSBjb25zdAorSlNWYWx1ZSBJREJDdXJzb3I6OmtleShFeGVj
U3RhdGUmKSBjb25zdAogewotICAgIHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50S2V5OworICAg
IHJldHVybiBtX2N1cnJlbnRLZXkuZ2V0KCk7CiB9CiAKLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBJREJDdXJzb3I6OnByaW1hcnlLZXkoKSBjb25zdAorSlNWYWx1ZSBJREJDdXJzb3I6
OnByaW1hcnlLZXkoRXhlY1N0YXRlJikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kZXByZWNhdGVk
Q3VycmVudFByaW1hcnlLZXk7CisgICAgcmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCk7
CiB9CiAKLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6OnZhbHVlKCkg
Y29uc3QKK0pTVmFsdWUgSURCQ3Vyc29yOjp2YWx1ZShFeGVjU3RhdGUmKSBjb25zdAogewotICAg
IHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50VmFsdWU7CisgICAgcmV0dXJuIG1fY3VycmVudFZh
bHVlLmdldCgpOwogfQogCiBJREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkKQEAgLTIyNCw3ICsy
MjUsNyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIERlcHJlY2F0ZWQ6OgogICAgICAgICB9CiAgICAgfQogCi0gICAg
YXV0byByZXF1ZXN0ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5wdXRGb3JDdXJzb3JVcGRhdGUo
ZXhlYywgdmFsdWUuanNWYWx1ZSgpLCBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5qc1Zh
bHVlKCksIGVjKTsKKyAgICBhdXRvIHJlcXVlc3QgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnB1
dEZvckN1cnNvclVwZGF0ZShleGVjLCB2YWx1ZS5qc1ZhbHVlKCksIG1fY3VycmVudFByaW1hcnlL
ZXkuZ2V0KCksIGVjKTsKICAgICBpZiAoZWMuY29kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTI4MCwxMCArMjgxLDkgQEAgdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2EKIAogdm9pZCBJ
REJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQogewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNv
bnRleHQpOwogICAgIFJlZlB0cjxJREJLZXk+IGtleTsKICAgICBpZiAoIWtleVZhbHVlLmpzVmFs
dWUoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZy
ZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsKKyAgICAgICAga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktl
eShjb250ZXh0LCBrZXlWYWx1ZSk7CiAKICAgICBjb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSwg
ZWMpOwogfQpAQCAtMzgwLDcgKzM4MCw3IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJ
REJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGF1dG8gcmVxdWVzdCA9IGVmZmVjdGl2
ZU9iamVjdFN0b3JlKCkubW9kZXJuRGVsZXRlKGNvbnRleHQsIG1fZGVwcmVjYXRlZEN1cnJlbnRQ
cmltYXJ5S2V5LmpzVmFsdWUoKSwgZWMpOworICAgIGF1dG8gcmVxdWVzdCA9IGVmZmVjdGl2ZU9i
amVjdFN0b3JlKCkubW9kZXJuRGVsZXRlKGNvbnRleHQsIG1fY3VycmVudFByaW1hcnlLZXkuZ2V0
KCksIGVjKTsKICAgICBpZiAoZWMuY29kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTQwMCwyNSArNDAwLDI1IEBAIHZvaWQgSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURCUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghZ2V0UmVzdWx0LmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgIG1fZGVwcmVj
YXRlZEN1cnJlbnRLZXkgPSB7IH07CisgICAgICAgIG1fY3VycmVudEtleSA9IHsgfTsKICAgICAg
ICAgbV9jdXJyZW50S2V5RGF0YSA9IHsgfTsKLSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFBy
aW1hcnlLZXkgPSB7IH07CisgICAgICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSB7IH07CiAgICAg
ICAgIG1fY3VycmVudFByaW1hcnlLZXlEYXRhID0geyB9OwotICAgICAgICBtX2RlcHJlY2F0ZWRD
dXJyZW50VmFsdWUgPSB7IH07CisgICAgICAgIG1fY3VycmVudFZhbHVlID0geyB9OwogCiAgICAg
ICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
ZGVwcmVjYXRlZEN1cnJlbnRLZXkgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBn
ZXRSZXN1bHQua2V5RGF0YSgpKTsKKyAgICBtX2N1cnJlbnRLZXkgPSBpZGJLZXlEYXRhVG9TY3Jp
cHRWYWx1ZSgqY29udGV4dCwgZ2V0UmVzdWx0LmtleURhdGEoKSk7CiAgICAgbV9jdXJyZW50S2V5
RGF0YSA9IGdldFJlc3VsdC5rZXlEYXRhKCk7Ci0gICAgbV9kZXByZWNhdGVkQ3VycmVudFByaW1h
cnlLZXkgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBnZXRSZXN1bHQucHJpbWFy
eUtleURhdGEoKSk7CisgICAgbV9jdXJyZW50UHJpbWFyeUtleSA9IGlkYktleURhdGFUb1Njcmlw
dFZhbHVlKCpjb250ZXh0LCBnZXRSZXN1bHQucHJpbWFyeUtleURhdGEoKSk7CiAgICAgbV9jdXJy
ZW50UHJpbWFyeUtleURhdGEgPSBnZXRSZXN1bHQucHJpbWFyeUtleURhdGEoKTsKIAogICAgIGlm
IChpc0tleUN1cnNvcigpKQotICAgICAgICBtX2RlcHJlY2F0ZWRDdXJyZW50VmFsdWUgPSB7IH07
CisgICAgICAgIG1fY3VycmVudFZhbHVlID0geyB9OwogICAgIGVsc2UKLSAgICAgICAgbV9kZXBy
ZWNhdGVkQ3VycmVudFZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZSgqY29udGV4dCwgZ2V0UmVz
dWx0LnZhbHVlKCkpOworICAgICAgICBtX2N1cnJlbnRWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFs
dWVUb0pTVmFsdWUoKmNvbnRleHQsIGdldFJlc3VsdC52YWx1ZSgpKTsKIAogICAgIG1fZ290VmFs
dWUgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaAppbmRleCA4NGY4Yjk3Li5jYmY3Nzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJJREJBbnkuaCIKICNpbmNsdWRlICJJREJDdXJzb3JJbmZv
LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTYsOSArNTcsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElE
TAogICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKCkgY29uc3Q7Ci0gICAgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSgpIGNvbnN0OwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBwcmltYXJ5S2V5KCkgY29uc3Q7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIHZhbHVlKCkgY29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIGtleShKU0M6OkV4ZWNT
dGF0ZSYpIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSBwcmltYXJ5S2V5KEpTQzo6RXhlY1N0YXRl
JikgY29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIHZhbHVlKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7
CiAgICAgSURCQW55KiBzb3VyY2UoKTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpOwpAQCAtMTExLDExICsxMTIsOSBAQCBwcml2YXRlOgogICAg
IElEQktleURhdGEgbV9jdXJyZW50S2V5RGF0YTsKICAgICBJREJLZXlEYXRhIG1fY3VycmVudFBy
aW1hcnlLZXlEYXRhOwogCi0gICAgLy8gRklYTUU6IFdoZW4gZGl0Y2hpbmcgTGVnYWN5IElEQiBh
bmQgY29tYmluaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgYWJzdHJhY3QgSURCQ3Vy
c29yLAotICAgIC8vIHRoZXNlIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1lbWJlcnMgc2hvdWxk
IGJlIEpTVmFsdWVzIGluc3RlYWQuCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9kZXBy
ZWNhdGVkQ3VycmVudEtleTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RlcHJlY2F0
ZWRDdXJyZW50UHJpbWFyeUtleTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RlcHJl
Y2F0ZWRDdXJyZW50VmFsdWU7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJl
bnRLZXk7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRQcmltYXJ5S2V5
OworICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9jdXJyZW50VmFsdWU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmlkbAppbmRleCAwNDZmOTA1Li4xNzdhZDRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKQEAgLTMyLDggKzMyLDggQEAK
IF0gaW50ZXJmYWNlIElEQkN1cnNvciB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBz
b3VyY2U7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkaXJlY3Rpb247Ci0gICAg
cmVhZG9ubHkgYXR0cmlidXRlIGFueSBrZXk7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIGFueSBw
cmltYXJ5S2V5OworICAgIFtDYWxsV2l0aD1TY3JpcHRTdGF0ZSwgSW1wbGVtZW50YXRpb25SZXR1
cm5UeXBlPUpTVmFsdWVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkga2V5OworICAgIFtDYWxsV2l0
aD1TY3JpcHRTdGF0ZSwgSW1wbGVtZW50YXRpb25SZXR1cm5UeXBlPUpTVmFsdWVdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBhbnkgcHJpbWFyeUtleTsKIAogICAgIFtDYWxsV2l0aD1TY3JpcHRTdGF0ZSwg
UmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2VdIElEQlJlcXVlc3QgdXBkYXRlKGFueSB2YWx1ZSk7
CiAgICAgW1JhaXNlc0V4Y2VwdGlvbldpdGhNZXNzYWdlXSB2b2lkIGFkdmFuY2UoW0VuZm9yY2VS
YW5nZV0gdW5zaWduZWQgbG9uZyBjb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAppbmRleCA4NTJlMTQ3Li5j
NmMzN2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JXaXRoVmFsdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKQEAgLTMwLDUgKzMwLDUgQEAKICAgICBTa2lwVlRhYmxl
VmFsaWRhdGlvbiwKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKIF0gaW50ZXJmYWNlIElEQkN1
cnNvcldpdGhWYWx1ZSA6IElEQkN1cnNvciB7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIGFueSB2
YWx1ZTsKKyAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGUsIEltcGxlbWVudGF0aW9uUmV0dXJuVHlw
ZT1KU1ZhbHVlXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IHZhbHVlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggMzY4ZWMwYS4u
NzQyZmM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCi0jaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGll
cy5oIgpAQCAtMTQ5LDkgKzE0OCw4IEBAIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0
b3J5OjpkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250CiAKIHNob3J0
IElEQkZhY3Rvcnk6OmNtcChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgZmlyc3RWYWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIHNlY29uZFZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewot
ICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJ
REJLZXk+IGZpcnN0ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBmaXJzdFZh
bHVlKTsKLSAgICBSZWZQdHI8SURCS2V5PiBzZWNvbmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZy
ZXF1ZXN0U3RhdGUsIHNlY29uZFZhbHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiBmaXJzdCA9IHNj
cmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwgZmlyc3RWYWx1ZSk7CisgICAgUmVmUHRyPElEQktl
eT4gc2Vjb25kID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBzZWNvbmRWYWx1ZSk7CiAK
ICAgICBBU1NFUlQoZmlyc3QpOwogICAgIEFTU0VSVChzZWNvbmQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IGM2NDczMTcuLmVkOGRhOTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVk
ZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURC
QmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkN1cnNvci5oIgpAQCAtMTYwLDggKzE1
OSw3IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QkluZGV4Ojpjb3VudCIpOwogCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29u
dGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgm
cmVxdWVzdFN0YXRlLCBrZXkpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZh
bHVlVG9JREJLZXkoY29udGV4dCwga2V5KTsKICAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5
cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIg
aXMgbm90IGEgdmFsaWQga2V5LiIpOwpAQCAtMjQyLDggKzI0MCw3IEBAIFJlZlB0cjxJREJSZXF1
ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0
IERlcHJlY2F0CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXQiKTsKIAotICAg
IERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJL
ZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAg
ICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtl
eSk7CiAgICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxp
ZCkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsK
ICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dl
dCcgb24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CkBA
IC0yODcsOCArMjg0LDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmUKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiSURCSW5kZXg6OmdldEtleSIpOwogCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVl
c3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFs
dWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktl
eSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwga2V5KTsKICAgICBpZiAoIWlkYktleSB8
fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAgICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBU
aGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcAppbmRleCA5ZTE5NDVkLi5hMGQxOTVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2Uu
Y3BwCkBAIC0yNiwxMyArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgogCi0jaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAi
SURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5RGF0YS5oIgogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUmVmPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6Y3JlYXRlKFJlZlB0
cjxJREJLZXk+JiYga2V5KQpAQCAtNDksMTYgKzUxLDE0IEBAIElEQktleVJhbmdlOjpJREJLZXlS
YW5nZShSZWZQdHI8SURCS2V5PiYmIGxvd2VyLCBSZWZQdHI8SURCS2V5PiYmIHVwcGVyLCBMb3dl
ckJvCiB7CiB9CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIElEQktleVJhbmdlOjpsb3dlclZh
bHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0CitKU1ZhbHVlIElEQktl
eVJhbmdlOjpsb3dlclZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgcmV0
dXJuIGlkYktleVRvU2NyaXB0VmFsdWUoJnJlcXVlc3RTdGF0ZSwgbV9sb3dlcik7CisgICAgcmV0
dXJuIGlkYktleURhdGFUb1NjcmlwdFZhbHVlKGNvbnRleHQsIElEQktleURhdGEobV9sb3dlci5n
ZXQoKSkpLmdldCgpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJREJLZXlSYW5nZTo6
dXBwZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBjb25zdAorSlNWYWx1
ZSBJREJLZXlSYW5nZTo6dXBwZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSBjb25zdAogewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwot
ICAgIHJldHVybiBpZGJLZXlUb1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIG1fdXBwZXIpOwor
ICAgIHJldHVybiBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBJREJLZXlEYXRhKG1f
dXBwZXIuZ2V0KCkpKS5nZXQoKTsKIH0KIAogUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5n
ZTo6b25seShSZWZQdHI8SURCS2V5PiYmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC03Myw4
ICs3Myw3IEBAIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Om9ubHkoUmVmUHRyPElE
QktleT4mJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiBSZWZQdHI8SURCS2V5UmFuZ2U+IElE
QktleVJhbmdlOjpvbmx5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0g
ICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElE
QktleT4ga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXlWYWx1ZSk7
CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBr
ZXlWYWx1ZSk7CiAgICAgaWYgKCFrZXkgfHwgIWtleS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC04NSw4ICs4NCw3IEBAIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Om9u
bHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwCiAKIFJlZlB0cjxJ
REJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Omxvd2VyQm91bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGJvdW5kVmFsdWUsIGJv
b2wgb3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVl
c3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gYm91bmQgPSBzY3JpcHRWYWx1
ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGJvdW5kVmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+
IGJvdW5kID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBib3VuZFZhbHVlKTsKICAgICBp
ZiAoIWJvdW5kIHx8ICFib3VuZC0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05Nyw4
ICs5NSw3IEBAIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Omxvd2VyQm91bmQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uCiAKIFJlZlB0cjxJREJLZXlSYW5nZT4g
SURCS2V5UmFuZ2U6OnVwcGVyQm91bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGJvdW5kVmFsdWUsIGJvb2wgb3BlbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29u
dGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gYm91bmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZy
ZXF1ZXN0U3RhdGUsIGJvdW5kVmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+IGJvdW5kID0gc2Ny
aXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBib3VuZFZhbHVlKTsKICAgICBpZiAoIWJvdW5kIHx8
ICFib3VuZC0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDksOSArMTA2LDggQEAg
UmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6dXBwZXJCb3VuZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb24KIAogUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5n
ZTo6Ym91bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGxvd2VyVmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiB1cHBlclZhbHVlLCBib29sIGxvd2VyT3BlbiwgYm9vbCB1cHBlck9wZW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwot
ICAgIFJlZlB0cjxJREJLZXk+IGxvd2VyID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0
YXRlLCBsb3dlclZhbHVlKTsKLSAgICBSZWZQdHI8SURCS2V5PiB1cHBlciA9IHNjcmlwdFZhbHVl
VG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgdXBwZXJWYWx1ZSk7CisgICAgUmVmUHRyPElEQktleT4g
bG93ZXIgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGxvd2VyVmFsdWUpOworICAgIFJl
ZlB0cjxJREJLZXk+IHVwcGVyID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCB1cHBlclZh
bHVlKTsKIAogICAgIGlmICghbG93ZXIgfHwgIWxvd2VyLT5pc1ZhbGlkKCkgfHwgIXVwcGVyIHx8
ICF1cHBlci0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlS
YW5nZS5oCmluZGV4IDFiZGE3ZjcuLjQzMGZmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaApAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAg
ICAgSURCS2V5KiBsb3dlcigpIGNvbnN0IHsgcmV0dXJuIG1fbG93ZXIuZ2V0KCk7IH0KICAgICBJ
REJLZXkqIHVwcGVyKCkgY29uc3QgeyByZXR1cm4gbV91cHBlci5nZXQoKTsgfQogCi0gICAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgbG93ZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
Y29uc3Q7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdXBwZXJWYWx1ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JikgY29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIGxvd2VyVmFsdWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSB1cHBlclZhbHVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKICAgICBib29sIGxvd2VyT3BlbigpIGNvbnN0
IHsgcmV0dXJuIG1fbG93ZXJUeXBlID09IExvd2VyQm91bmRPcGVuOyB9CiAgICAgYm9vbCB1cHBl
ck9wZW4oKSBjb25zdCB7IHJldHVybiBtX3VwcGVyVHlwZSA9PSBVcHBlckJvdW5kT3BlbjsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5n
ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwK
aW5kZXggZjA2MDBmZi4uMTA0MjIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbApAQCAtMjgsOCArMjgsOCBAQAogICAgIEltcGxlbWVu
dGF0aW9uTGFja3NWVGFibGUsCiAgICAgRW5hYmxlZEF0UnVudGltZT1JbmRleGVkREIsCiBdIGlu
dGVyZmFjZSBJREJLZXlSYW5nZSB7Ci0gICAgW0ltcGxlbWVudGVkQXM9bG93ZXJWYWx1ZSxDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSByZWFkb25seSBhdHRyaWJ1dGUgYW55IGxvd2Vy
OwotICAgIFtJbXBsZW1lbnRlZEFzPXVwcGVyVmFsdWUsQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSB1cHBlcjsKKyAgICBbSW1wbGVtZW50ZWRB
cz1sb3dlclZhbHVlLCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRh
dGlvblJldHVyblR5cGU9SlNWYWx1ZV0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSBsb3dlcjsKKyAg
ICBbSW1wbGVtZW50ZWRBcz11cHBlclZhbHVlLCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBJbXBsZW1lbnRhdGlvblJldHVyblR5cGU9SlNWYWx1ZV0gcmVhZG9ubHkgYXR0cmlidXRl
IGFueSB1cHBlcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBsb3dlck9wZW47CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gdXBwZXJPcGVuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggOGVk
NWIwOS4uNzFmMDE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKICNpbmNsdWRl
ICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIklEQkN1cnNvci5oIgpAQCAtMTgyLDggKzE4MSw3IEBAIFJlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IERlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIERPTVJlcXVlc3RT
dGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9
IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBSZWZQdHI8SURC
S2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtleSk7CiAgICAgaWYg
KCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewogICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgZWMu
bWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9i
amVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CkBAIC0zOTks
OCArMzk3LDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXgKIAogUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjptb2Rlcm5EZWxldGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsK
LSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7
CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0
LCBrZXkpOwogICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6Oklu
dmFsaWQpIHsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJy
b3I7CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFs
aWQga2V5LiIpOwpAQCAtNTk0LDggKzU5MSw3IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QKIHsK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7CiAKLSAgICBET01S
ZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBp
ZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAgUmVm
UHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBrZXkpOwog
ICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsK
ICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CiAgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcg
b24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmlu
ZGV4IGM0ZGY5MGUuLjlhNWQzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJET01FcnJvci5oIgotI2luY2x1ZGUgIkRPTVJlcXVl
c3RTdGF0ZS5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgog
I2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKQEAgLTMyNiwxOSArMzI1LDE5IEBAIHZv
aWQgSURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiAKIHZvaWQg
SURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IElEQktleURhdGEqIGtleURhdGEpCiB7Ci0gICAg
aWYgKCFrZXlEYXRhKSB7CisgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBpZiAoIWNvbnRleHQgfHwgIWtleURhdGEpIHsKICAgICAgICAgbV9yZXN1bHQg
PSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgdmFsdWUgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksICprZXlEYXRhKTsKLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1v
dmUodmFsdWUpKTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGlkYktleURhdGFUb1Nj
cmlwdFZhbHVlKCpjb250ZXh0LCAqa2V5RGF0YSkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNl
dFJlc3VsdCh1aW50NjRfdCBudW1iZXIpCiB7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCksIEpTQzo6SlNWYWx1ZShudW1i
ZXIpKSk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0oKSwgSlNDOjpKU1ZhbHVlKG51bWJl
cikpKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShj
b25zdCBJREJWYWx1ZSYgdmFsdWUpCkBAIC0zNDksOCArMzQ4LDcgQEAgdm9pZCBJREJSZXF1ZXN0
OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBJREJWYWx1ZSYgdmFsdWUpCiAgICAg
aWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBzY3JpcHRWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWUoKmNvbnRleHQsIHZhbHVlKTsK
LSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUoc2NyaXB0VmFsdWUpKTsKKyAg
ICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUo
KmNvbnRleHQsIHZhbHVlKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRl
ZmluZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKaW5kZXggOGI4Y2Q3NS4uZGY2NGYyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eU9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCkBAIC0zMDEsNyArMzAxLDcgQEAgSURCRXJyb3Ig
TWVtb3J5T2JqZWN0U3RvcmU6OnVwZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoY29uc3QgSURCS2V5
RGF0YSYga2V5LCBjb24KIHsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKFVuaXF1ZUlEQkRhdGFi
YXNlOjpkYXRhYmFzZVRocmVhZFZNKCkpOwogCi0gICAgYXV0byBqc1ZhbHVlID0gaWRiVmFsdWVE
YXRhVG9KU1ZhbHVlKFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgp
LCB2YWx1ZSk7CisgICAgYXV0byBqc1ZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pT
VmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHZhbHVl
KTsKICAgICBpZiAoanNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0zMTAsNyArMzEwLDcgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OnVw
ZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb24KIAogICAg
IGZvciAoYXV0byYgaW5kZXggOiBtX2luZGV4ZXNCeU5hbWUudmFsdWVzKCkpIHsKICAgICAgICAg
SW5kZXhLZXkgaW5kZXhLZXk7Ci0gICAgICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShVbmlx
dWVJREJEYXRhYmFzZTo6ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgaW5kZXgtPmluZm8oKSwg
anNWYWx1ZSwgaW5kZXhLZXkpOworICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoVW5p
cXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIGluZGV4LT5pbmZvKCks
IGpzVmFsdWUuZ2V0KCksIGluZGV4S2V5KTsKIAogICAgICAgICBpZiAoaW5kZXhLZXkuaXNOdWxs
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMzOSwxMiArMzM5LDEyIEBAIElEQkVycm9y
IE1lbW9yeU9iamVjdFN0b3JlOjpwb3B1bGF0ZUluZGV4V2l0aEV4aXN0aW5nUmVjb3JkcyhNZW1v
cnlJbmRleCYgaW5kZXgpCiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihVbmlxdWVJREJEYXRhYmFz
ZTo6ZGF0YWJhc2VUaHJlYWRWTSgpKTsKIAogICAgIGZvciAoYXV0byBpdGVyYXRvciA6ICptX2tl
eVZhbHVlU3RvcmUpIHsKLSAgICAgICAgYXV0byBqc1ZhbHVlID0gaWRiVmFsdWVEYXRhVG9KU1Zh
bHVlKFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCBpdGVyYXRv
ci52YWx1ZSk7CisgICAgICAgIGF1dG8ganNWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVEYXRh
VG9KU1ZhbHVlKFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCBp
dGVyYXRvci52YWx1ZSk7CiAgICAgICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CiAgICAgICAgICAgICByZXR1cm4geyB9OwogCiAgICAgICAgIEluZGV4S2V5IGluZGV4S2V5Owot
ICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFi
YXNlVGhyZWFkRXhlY1N0YXRlKCksIGluZGV4LmluZm8oKSwganNWYWx1ZSwgaW5kZXhLZXkpOwor
ICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFi
YXNlVGhyZWFkRXhlY1N0YXRlKCksIGluZGV4LmluZm8oKSwganNWYWx1ZS5nZXQoKSwgaW5kZXhL
ZXkpOwogCiAgICAgICAgIGlmIChpbmRleEtleS5pc051bGwoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAyODJhMjEzLi5mZGQx
ZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMTQ2OCw3ICsxNDY4
LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVPbmVJbmRleEZvckFk
ZFJlY29yZChjb25zdCBJREJJbmRleEluZm8mIGkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IEluZGV4S2V5IGluZGV4S2V5OwotICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSgqbV9nbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgaW5mbywganNWYWx1ZSwgaW5kZXhLZXkpOworICAgIGdl
bmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSgqbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgaW5m
bywganNWYWx1ZS5nZXQoKSwgaW5kZXhLZXkpOwogCiAgICAgaWYgKGluZGV4S2V5LmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElE
Qk9iamVjdFN0b3IKICAgICBib29sIGFueVJlY29yZHNTdWNjZWVkZWQgPSBmYWxzZTsKICAgICBm
b3IgKGF1dG8mIGluZGV4IDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIElu
ZGV4S2V5IGluZGV4S2V5OwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoKm1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGluZGV4LCBqc1ZhbHVlLCBpbmRleEtleSk7CisgICAg
ICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSgqbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgaW5kZXgsIGpzVmFsdWUuZ2V0KCksIGluZGV4S2V5KTsKIAogICAgICAgICBpZiAoaW5kZXhL
ZXkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCmluZGV4IDYyMzIyN2EuLmJlYjg2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApA
QCAtNzY1LDE4ICs3NjUsMTggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9y
QWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKICAgICBpZiAodXNl
ZEtleUlzR2VuZXJhdGVkICYmICFvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKS5pc051bGwoKSkg
ewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGRhdGFiYXNlVGhyZWFkVk0oKSk7CiAKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKGRh
dGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRl
c2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCks
IG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsKKyAgICAgICAgaWYgKHZhbHVlLmdldCgpLmlz
VW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlc2VyaWFs
aXplIHJlY29yZCB2YWx1ZSBmb3IgcmVjb3JkIGtleSBpbmplY3Rpb24iKSksIHVzZWRLZXkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghaW5qZWN0SURC
S2V5SW50b1NjcmlwdFZhbHVlKGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHVzZWRLZXksIHZh
bHVlLCBvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkpIHsKKyAgICAgICAgaWYgKCFpbmplY3RJ
REJLZXlJbnRvU2NyaXB0VmFsdWUoZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgdXNlZEtleSwg
dmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgpKSkgewogICAgICAgICAgICAg
bV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgQVND
SUlMaXRlcmFsKCJVbmFibGUgdG8gaW5qZWN0IHJlY29yZCBrZXkgaW50byByZWNvcmQgdmFsdWUi
KSksIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IGF1dG8gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJmRh
dGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHZhbHVlLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAg
ICAgYXV0byBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgm
ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgdmFsdWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIp
OwogICAgICAgICBpZiAoZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKS5oYWRFeGNlcHRpb24oKSkg
ewogICAgICAgICAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0
cmFpbnRFcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gc2VyaWFsaXplIHJlY29yZCB2YWx1
ZSBhZnRlciBpbmplY3RpbmcgcmVjb3JkIGtleSIpKSwgdXNlZEtleSkpOwogICAgICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmNwcAppbmRleCBiY2ZmZDgyLi41ZGNjNjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMzAs
NiBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogI2luY2x1ZGUgIklEQkJpbmRpbmdV
dGlsaXRpZXMuaCIKIAotI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgogI2luY2x1ZGUgIklE
QkluZGV4SW5mby5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleURhdGEu
aCIKQEAgLTc4LDQzICs3OCw2IEBAIHN0YXRpYyBib29sIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUmIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotSlNWYWx1ZSBpZGJLZXlEYXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBl
eGVjLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQotewotICAgIGlmIChrZXlEYXRhLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIExvY2tlcjxKU0xvY2s+
IGxvY2tlcihleGVjLnZtKCkuYXBpTG9jaygpKTsKLQotICAgIHN3aXRjaCAoa2V5RGF0YS50eXBl
KCkpIHsKLSAgICBjYXNlIEtleVR5cGU6OkFycmF5OgotICAgICAgICB7Ci0gICAgICAgICAgICBj
b25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGluQXJyYXkgPSBrZXlEYXRhLmFycmF5KCk7Ci0gICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGluQXJyYXkuc2l6ZSgpOwotICAgICAgICAgICAgSlNBcnJh
eSogb3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KCZleGVjLCAwLCBleGVjLmxleGljYWxH
bG9iYWxPYmplY3QoKSwgc2l6ZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGFycmF5S2V5ID0gaW5BcnJheS5h
dChpKTsKLSAgICAgICAgICAgICAgICBvdXRBcnJheS0+cHV0RGlyZWN0SW5kZXgoJmV4ZWMsIGks
IGlkYktleURhdGFUb0pTVmFsdWUoZXhlYywgYXJyYXlLZXkpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKG91dEFycmF5KTsKLSAgICAgICAgfQotICAgIGNhc2Ug
S2V5VHlwZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJmV4ZWMs
IGtleURhdGEuc3RyaW5nKCkpOwotICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0
dXJuIGpzRGF0ZU9yTnVsbCgmZXhlYywga2V5RGF0YS5kYXRlKCkpOwotICAgIGNhc2UgS2V5VHlw
ZTo6TnVtYmVyOgotICAgICAgICByZXR1cm4ganNOdW1iZXIoa2V5RGF0YS5udW1iZXIoKSk7Ci0g
ICAgY2FzZSBLZXlUeXBlOjpNaW46Ci0gICAgY2FzZSBLZXlUeXBlOjpNYXg6Ci0gICAgY2FzZSBL
ZXlUeXBlOjpJbnZhbGlkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLX0KLQogc3RhdGljIEpTVmFsdWUgaWRiS2V5
VG9KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SURCS2V5KiBrZXkpCiB7CiAgICAgaWYgKCFrZXkgfHwgIWV4ZWMpIHsKQEAgLTIwMiwxMyArMTY1
LDEzIEBAIHN0YXRpYyBSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFs
aWQoKTsKIH0KIAotSURCS2V5UGF0aCBpZGJLZXlQYXRoRnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXlQYXRoVmFsdWUpCitJREJLZXlQYXRoIGlkYktleVBhdGhGcm9tVmFsdWUo
RXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIGtleVBhdGhWYWx1ZSkKIHsKICAgICBJREJLZXlQYXRo
IGtleVBhdGg7CiAgICAgaWYgKGlzSlNBcnJheShrZXlQYXRoVmFsdWUpKQotICAgICAgICBrZXlQ
YXRoID0gSURCS2V5UGF0aCh0b05hdGl2ZUFycmF5PFN0cmluZz4oZXhlYywga2V5UGF0aFZhbHVl
KSk7CisgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKHRvTmF0aXZlQXJyYXk8U3RyaW5nPigm
ZXhlYywga2V5UGF0aFZhbHVlKSk7CiAgICAgZWxzZQotICAgICAgICBrZXlQYXRoID0gSURCS2V5
UGF0aChrZXlQYXRoVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAg
a2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0aFZhbHVlLnRvU3RyaW5nKCZleGVjKS0+dmFsdWUo
JmV4ZWMpKTsKICAgICByZXR1cm4ga2V5UGF0aDsKIH0KIApAQCAtMjI0LDcgKzE4Nyw3IEBAIHN0
YXRpYyBKU1ZhbHVlIGdldE50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSByb290VmFsdWUsIGNvbnN0IFZlCiAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsKIH0KIAotc3Rh
dGljIFJlZlB0cjxJREJLZXk+IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5k
S2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCkKK3N0YXRpYyBSZWZQdHI8SURCS2V5PiBpbnRlcm5hbENyZWF0ZUlE
QktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU1Zh
bHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQogewogICAgIFZlY3RvcjxTdHJpbmc+
IGtleVBhdGhFbGVtZW50czsKICAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKQEAgLTI3
NCwzMyArMjM3LDcgQEAgc3RhdGljIGJvb2wgY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiBy
ZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgImluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwotCi0gICAgQVNTRVJUKGtleVBh
dGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OlN0cmluZyk7Ci0KLSAgICBWZWN0
b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7Ci0gICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJy
b3I7Ci0gICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGguc3RyaW5nKCksIGtleVBhdGhFbGVtZW50
cywgZXJyb3IpOwotICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvcjo6Tm9u
ZSk7Ci0KLSAgICBpZiAoa2V5UGF0aEVsZW1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgRXhlY1N0YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7Ci0K
LSAgICBKU1ZhbHVlIHBhcmVudCA9IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIHZhbHVl
LmpzVmFsdWUoKSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7
Ci0gICAgaWYgKHBhcmVudC5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoIXNldChleGVjLCBwYXJlbnQsIGtleVBhdGhFbGVtZW50cy5sYXN0KCksIGlkYktl
eVRvSlNWYWx1ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGtleS5nZXQoKSkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCkKK2Jvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0ZSYgZXhl
YywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiaW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlIik7CiAKQEAgLTMyOCw0OCArMjY1LDggQEAgYm9vbCBpbmplY3RJREJLZXlJbnRv
U2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURhdGEmIGtleURh
dGEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJv
bVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBM
T0coU3RvcmFnZUFQSSwgImNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgiKTsK
LSAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkpOwogCi0gICAgaWYgKGtleVBhdGgudHlwZSgp
ID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OkFycmF5KSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQ
dHI8SURCS2V5Pj4gcmVzdWx0OwotICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkg
PSBrZXlQYXRoLmFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXku
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGludGVybmFs
Q3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgYXJyYXlb
aV0pOwotICAgICAgICAgICAgaWYgKCFrZXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGtleSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkocmVzdWx0KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
a2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6U3RyaW5nKTsKLSAgICBy
ZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMs
IHZhbHVlLCBrZXlQYXRoLnN0cmluZygpKTsKLX0KLQotUmVmUHRyPElEQktleT4gbWF5YmVDcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
KQotewotICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7Ci0KLSAgICBpZiAoa2V5UGF0aC50
eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6QXJyYXkpIHsKLSAgICAgICAgVmVjdG9y
PFJlZlB0cjxJREJLZXk+PiByZXN1bHQ7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
cnJheSA9IGtleVBhdGguYXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
cnJheS5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gaW50
ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKCZleGVjLCB2YWx1ZSwg
YXJyYXlbaV0pOwotICAgICAgICAgICAgaWYgKCFrZXkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGtleSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkocmVzdWx0KTsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6U3RyaW5nKTsK
LSAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KCZleGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7Ci19Ci0KLVJlZlB0cjxJREJLZXk+IG1h
eWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMs
IGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCitS
ZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
RXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCkKIHsKICAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkpOwogCkBAIC0zOTAsMTgg
KzI4Nyw3IEBAIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0CiAgICAgcmV0dXJuIGludGVybmFsQ3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCgmZXhlYywgdmFsdWUsIGtleVBhdGgu
c3RyaW5nKCkpOwogfQogCi1ib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01S
ZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgY29uc3QgSlNDOjpKU1ZhbHVlJiBzY3JpcHRWYWx1
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgImNh
bkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwotCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSByZXF1ZXN0U3RhdGUtPmV4ZWMoKTsKLSAgICBpZiAoIWV4ZWMpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoKmV4
ZWMsIHNjcmlwdFZhbHVlLCBrZXlQYXRoKTsKLX0KLQotYm9vbCBjYW5JbmplY3RJREJLZXlJbnRv
U2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgSlNDOjpKU1ZhbHVl
JiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK2Jvb2wgY2FuSW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBKU1ZhbHVl
JiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBMT0coU3Rv
cmFnZUFQSSwgImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogCkBAIC00MTcsMTMz
ICszMDMsNjAgQEAgYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVj
U3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgSlNDOjpKU1ZhbHUKICAgICByZXR1cm4gY2FuSW5qZWN0
TnRoVmFsdWVPbktleVBhdGgoJmV4ZWNTdGF0ZSwgc2NyaXB0VmFsdWUsIGtleVBhdGhFbGVtZW50
cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUpCi17Ci0gICAgRXhlY1N0
YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gcHJwVmFsdWU7Ci0gICAgSlNWYWx1ZSByZXN1
bHQ7Ci0gICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSkKLSAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXpl
ZFZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAp
OwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7Ci0gICAgcmV0dXJuIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7Ci19CiAKLXN0YXRpYyBKU0M6
OkpTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+IGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhzKQor
c3RhdGljIFN0cm9uZzxVbmtub3duPiBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKEV4ZWNT
dGF0ZSYgZXhlYywgY29uc3QgSURCVmFsdWUmIHZhbHVlKQogewotICAgIGlmICghdmFsdWVEYXRh
LmRhdGEoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgaWYgKCF2YWx1ZS5k
YXRhKCkuZGF0YSgpKQorICAgICAgICByZXR1cm4geyBleGVjLnZtKCksIGpzVW5kZWZpbmVkKCkg
fTsKIAotICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSA9ICp2YWx1ZURhdGEuZGF0YSgp
OworICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSA9ICp2YWx1ZS5kYXRhKCkuZGF0YSgp
OwogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChkYXRhLnNpemUoKSkgewogICAgICAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMoVmVjdG9yPHVpbnQ4X3Q+KGRhdGEpKTsK
IAogICAgICAgICBleGVjLnZtKCkuYXBpTG9jaygpLmxvY2soKTsKLSAgICAgICAgcmVzdWx0ID0g
c2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgmZXhlYywgZXhlYy5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIDAsIE5vblRocm93aW5nLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocyk7CisgICAgICAg
IHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoJmV4ZWMsIGV4ZWMubGV4aWNh
bEdsb2JhbE9iamVjdCgpLCAwLCBOb25UaHJvd2luZywgdmFsdWUuYmxvYlVSTHMoKSwgdmFsdWUu
YmxvYkZpbGVQYXRocygpKTsKICAgICAgICAgZXhlYy52bSgpLmFwaUxvY2soKS51bmxvY2soKTsK
ICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7CiAKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiB7IGV4ZWMudm0oKSwgcmVzdWx0IH07CiB9CiAKLURlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpCitTdHJv
bmc8VW5rbm93bj4gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgRE9NUmVxdWVz
dFN0YXRlIHN0YXRlKCZjb250ZXh0KTsKLSAgICBhdXRvKiBleGVjU3RhdGUgPSBzdGF0ZS5leGVj
KCk7Ci0KKyAgICBhdXRvKiBleGVjU3RhdGUgPSBjb250ZXh0LmV4ZWNTdGF0ZSgpOwogICAgIGlm
ICghZXhlY1N0YXRlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHsgZXhlY1N0
YXRlLT52bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZSgqZXhlY1N0YXRlLCB2
YWx1ZURhdGEpIH07CisgICAgcmV0dXJuIGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmV4
ZWNTdGF0ZSwgdmFsdWUpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6
ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQlZhbHVl
JiB2YWx1ZSkKK1N0cm9uZzxVbmtub3duPiBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1
ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEp
CiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHN0YXRlKCZjb250ZXh0KTsKLSAgICBhdXRvKiBleGVj
U3RhdGUgPSBzdGF0ZS5leGVjKCk7Ci0KLSAgICBpZiAoIWV4ZWNTdGF0ZSkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLQotICAgIHJldHVybiB7IGV4ZWNTdGF0ZS0+dm0oKSwgZGVzZXJpYWxpemVJREJW
YWx1ZURhdGFUb0pTVmFsdWUoKmV4ZWNTdGF0ZSwgdmFsdWUuZGF0YSgpLCB2YWx1ZS5ibG9iVVJM
cygpLCB2YWx1ZS5ibG9iRmlsZVBhdGhzKCkpIH07Ci19Ci0KLUpTQzo6SlNWYWx1ZSBkZXNlcmlh
bGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgVGhy
ZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBkdW1t
eVVSTHMsIGR1bW15RmlsZVBhdGhzOwotICAgIHJldHVybiBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0
YVRvSlNWYWx1ZShleGVjLCB2YWx1ZURhdGEsIGR1bW15VVJMcywgZHVtbXlGaWxlUGF0aHMpOwor
ICAgIHJldHVybiBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKGV4ZWMsIElEQlZhbHVlKHZh
bHVlRGF0YSkpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZh
bHVlQnVmZmVyKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gcHJwQnVmZmVyLCBib29sIGtleUlzRGVmaW5lZCkKK1JlZlB0cjxJREJLZXk+IHNj
cmlwdFZhbHVlVG9JREJLZXkoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiBzY3JpcHRW
YWx1ZSkKIHsKLSAgICBpZiAocHJwQnVmZmVyKSB7Ci0gICAgICAgIFZlY3Rvcjx1aW50OF90PiB2
YWx1ZTsKLSAgICAgICAgdmFsdWUuYXBwZW5kKHBycEJ1ZmZlci0+ZGF0YSgpLCBwcnBCdWZmZXIt
PnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKHJlcXVl
c3RTdGF0ZS0+ZXhlYygpLCBXVEZNb3ZlKHZhbHVlKSwga2V5SXNEZWZpbmVkKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUocmVxdWVzdFN0YXRlLT5leGVjKCkt
PnZtKCksIGpzTnVsbCgpKTsKLX0KLQotc3RhdGljIEpTVmFsdWUgaWRiVmFsdWVEYXRhVG9KU1Zh
bHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIpCi17Ci0g
ICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKLQotICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyhXVEZNb3ZlKGJ1ZmZlcikpOwotICAg
IHJldHVybiBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCZleGVjLCBleGVjLmxleGljYWxH
bG9iYWxPYmplY3QoKSwgMCwgTm9uVGhyb3dpbmcpOworICAgIHJldHVybiBjcmVhdGVJREJLZXlG
cm9tVmFsdWUoJmV4ZWMsIHNjcmlwdFZhbHVlKTsKIH0KIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgVmVjdG9y
PHVpbnQ4X3Q+JiYgYnVmZmVyLCBib29sIGtleUlzRGVmaW5lZCkKK1JlZlB0cjxJREJLZXk+IHNj
cmlwdFZhbHVlVG9JREJLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
SlNWYWx1ZSYgc2NyaXB0VmFsdWUpCiB7Ci0gICAgQVNTRVJUKGV4ZWMpOwotCi0gICAgLy8gSWYg
dGhlIGtleSBkb2Vzbid0IGV4aXN0LCB0aGVuIHRoZSB2YWx1ZSBtdXN0IGJlIHVuZGVmaW5lZCAo
YXMgb3Bwb3NlZCB0byBudWxsKS4KLSAgICBpZiAoIWtleUlzRGVmaW5lZCkgewotICAgICAgICAv
LyBXZSBlaXRoZXIgc2hvdWxkbid0IGhhdmUgYSBidWZmZXIgb3IgaXQgc2hvdWxkIGJlIG9mIHNp
emUgMC4KLSAgICAgICAgQVNTRVJUKCFidWZmZXIuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIH0K
LQotICAgIEpTVmFsdWUgcmVzdWx0ID0gaWRiVmFsdWVEYXRhVG9KU1ZhbHVlKCpleGVjLCBXVEZN
b3ZlKGJ1ZmZlcikpOwotICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52
bSgpLCByZXN1bHQpOworICAgIGF1dG8qIGV4ZWNTdGF0ZSA9IGNvbnRleHQuZXhlY1N0YXRlKCk7
CisgICAgcmV0dXJuIGV4ZWNTdGF0ZSA/IHNjcmlwdFZhbHVlVG9JREJLZXkoKmV4ZWNTdGF0ZSwg
c2NyaXB0VmFsdWUpIDogbnVsbHB0cjsKIH0KIAotSlNWYWx1ZSBpZGJWYWx1ZURhdGFUb0pTVmFs
dWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1
ZURhdGEpCitTdHJvbmc8VW5rbm93bj4gaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKIHsKLSAg
ICBpZiAoIXZhbHVlRGF0YS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
Ci0gICAgcmV0dXJuIGlkYlZhbHVlRGF0YVRvSlNWYWx1ZShleGVjLCBWZWN0b3I8dWludDhfdD4o
KnZhbHVlRGF0YS5kYXRhKCkpKTsKLX0KKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBrZXlEYXRh
Lm1heWJlQ3JlYXRlSURCS2V5KCk7CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGlkYktleVRv
U2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXkpCi17Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7
CisgICAgRXhlY1N0YXRlKiBleGVjID0gY29udGV4dC5leGVjU3RhdGUoKTsKICAgICBpZiAoIWV4
ZWMpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUoZXhlYy0+dm0oKSwgaWRiS2V5VG9KU1ZhbHVlKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkpOwotfQot
Ci1SZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KERPTVJlcXVlc3RTdGF0ZSogcmVx
dWVzdFN0YXRlLCBjb25zdCBKU0M6OkpTVmFsdWUmIHNjcmlwdFZhbHVlKQotewotICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOwotICAgIHJldHVybiBjcmVhdGVJREJL
ZXlGcm9tVmFsdWUoZXhlYywgc2NyaXB0VmFsdWUpOwotfQotCi1SZWZQdHI8SURCS2V5PiBzY3Jp
cHRWYWx1ZVRvSURCS2V5KEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNDOjpKU1ZhbHVlJiBzY3Jp
cHRWYWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKCZleGVjLCBzY3Jp
cHRWYWx1ZSk7Ci19Ci0KLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGlkYktleURhdGFUb1Njcmlw
dFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IElEQktleURhdGEm
IGtleURhdGEpCi17Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0ga2V5RGF0YS5tYXliZUNyZWF0
ZUlEQktleSgpOwotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7Ci0g
ICAgcmV0dXJuIGlkYktleVRvU2NyaXB0VmFsdWUoJnJlcXVlc3RTdGF0ZSwga2V5LmdldCgpKTsK
KyAgICByZXR1cm4geyBleGVjLT52bSgpLCBpZGJLZXlUb0pTVmFsdWUoZXhlYywganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwga2V5LmdldCgp
KSB9OwogfQogCiBzdGF0aWMgVmVjdG9yPElEQktleURhdGE+IGNyZWF0ZUtleVBhdGhBcnJheShF
eGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApp
bmRleCAxMTUwYmNkLi44Y2VkMjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNTEgKzMwLDMzIEBACiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCi0jaW5jbHVk
ZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERPTVJlcXVlc3RTdGF0ZTsKIGNsYXNzIElEQklu
ZGV4SW5mbzsKIGNsYXNzIElEQktleTsKIGNsYXNzIElEQktleURhdGE7CiBjbGFzcyBJREJLZXlQ
YXRoOwogY2xhc3MgSURCVmFsdWU7CiBjbGFzcyBJbmRleEtleTsKLWNsYXNzIFNoYXJlZEJ1ZmZl
cjsKIGNsYXNzIFRocmVhZFNhZmVEYXRhQnVmZmVyOwogCi1JREJLZXlQYXRoIGlkYktleVBhdGhG
cm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOworSURCS2V5UGF0aCBpZGJL
ZXlQYXRoRnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIAotYm9vbCBp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxJ
REJLZXk+LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKLWJv
b2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURC
S2V5RGF0YSYsIEpTQzo6SlNWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYpOwotCi1SZWZQdHI8SURC
S2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Ci1S
ZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
SlNDOjpFeGVjU3RhdGUmLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IElE
QktleVBhdGgmKTsKIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZh
bHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYsIGNvbnN0
IElEQktleVBhdGgmKTsKLQotYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRE9N
UmVxdWVzdFN0YXRlKiwgY29uc3QgSlNDOjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwog
Ym9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Citib29sIGluamVjdElEQktleUlu
dG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IElEQktleURhdGEmLCBKU0M6OkpT
VmFsdWUsIGNvbnN0IElEQktleVBhdGgmKTsKIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVz
ZXJpYWxpemVJREJWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4pOwotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1
ZURhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVy
JiB2YWx1ZURhdGEpOwotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCVmFsdWUmKTsKLURlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRlKiwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBib29sIGtleUlzRGVmaW5lZCk7Ci1XRUJDT1JFX0VY
UE9SVCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKEpT
Qzo6RXhlY1N0YXRlKiwgVmVjdG9yPHVpbnQ4X3Q+JiYsIGJvb2wga2V5SXNEZWZpbmVkKTsKK0pT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQktleURhdGEmKTsKK3ZvaWQgZ2VuZXJhdGVJbmRleEtl
eUZvclZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURCSW5kZXhJbmZvJiwgSlNDOjpKU1Zh
bHVlLCBJbmRleEtleSYgb3V0S2V5KTsKIAotSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFs
dWVEYXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZm
ZXImIHZhbHVlRGF0YSk7CitKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IGRlc2VyaWFsaXplSURC
VmFsdWVUb0pTVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQlZhbHVlJik7
CitKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1Zh
bHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0
YSk7CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGlkYktleVRvU2NyaXB0VmFsdWUoRE9NUmVx
dWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+KTsKLVJlZlB0cjxJREJLZXk+IHNjcmlwdFZh
bHVlVG9JREJLZXkoRE9NUmVxdWVzdFN0YXRlKiwgY29uc3QgSlNDOjpKU1ZhbHVlJik7CitSZWZQ
dHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBj
b25zdCBKU0M6OkpTVmFsdWUmKTsKIFJlZlB0cjxJREJLZXk+IHNjcmlwdFZhbHVlVG9JREJLZXko
SlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OkpTVmFsdWUmKTsKIAotRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IElEQktleURhdGEmKTsKLQotSlNDOjpKU1ZhbHVlIGlkYlZhbHVlRGF0YVRvSlNWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEp
Owotdm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJ
REJJbmRleEluZm8mLCBKU0M6OkpTVmFsdWUsIEluZGV4S2V5JiBvdXRLZXkpOwotSlNDOjpKU1Zh
bHVlIGlkYktleURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJLZXlEYXRh
Jik7Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCmluZGV4IDdkNmYzZDkuLmI3
ZmE5ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5j
cHAKQEAgLTk4LDcgKzk4LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCQW55KiBpZGJBbnkpCiAgICAgY2FzZSBJREJB
bnk6OlR5cGU6OklEQlRyYW5zYWN0aW9uOgogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGlkYkFueS0+aWRiVHJhbnNhY3Rpb24oKSk7CiAgICAgY2FzZSBJREJBbnk6OlR5
cGU6OlNjcmlwdFZhbHVlOgotICAgICAgICByZXR1cm4gaWRiQW55LT5zY3JpcHRWYWx1ZSgpLmpz
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGlkYkFueS0+c2NyaXB0VmFsdWUoKTsKICAgICBjYXNl
IElEQkFueTo6VHlwZTo6U3RyaW5nOgogICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgaWRiQW55LT5zdHJpbmcoKSk7CiAgICAgY2FzZSBJREJBbnk6OlR5cGU6OkludGVnZXI6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20u
Y3BwCmluZGV4IGQ3ZjU4MWEuLjRhZGVmZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCkBAIC02Niw3ICs2Niw3IEBAIEpTVmFs
dWUgSlNJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoRXhlY1N0YXRlJiBzdGF0ZSkKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIGlmICgha2V5UGF0aFZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgIGtleVBhdGggPSBpZGJLZXlQ
YXRoRnJvbVZhbHVlKCZzdGF0ZSwga2V5UGF0aFZhbHVlKTsKKyAgICAgICAgICAgIGtleVBhdGgg
PSBpZGJLZXlQYXRoRnJvbVZhbHVlKHN0YXRlLCBrZXlQYXRoVmFsdWUpOwogICAgICAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwCmluZGV4IDc0NGQ5YTMuLjQxZDdjOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0
b20uY3BwCkBAIC0xMTksNyArMTE5LDcgQEAgSlNWYWx1ZSBKU0lEQk9iamVjdFN0b3JlOjpjcmVh
dGVJbmRleChFeGVjU3RhdGUmIHN0YXRlKQogICAgIElEQktleVBhdGgga2V5UGF0aDsKICAgICBK
U1ZhbHVlIGtleVBhdGhWYWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEpOwogICAgIGlmICgha2V5UGF0
aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIGtleVBhdGggPSBpZGJLZXlQYXRo
RnJvbVZhbHVlKCZzdGF0ZSwga2V5UGF0aFZhbHVlKTsKKyAgICAgICAga2V5UGF0aCA9IGlkYktl
eVBhdGhGcm9tVmFsdWUoc3RhdGUsIGtleVBhdGhWYWx1ZSk7CiAgICAgZWxzZSB7CiAgICAgICAg
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpTeW50YXhFcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMTFkNWI1NS4uODcwZWZjNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KQEAgLTQzNDksOSArNDM0OSwxMiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIHJl
dHVybiAianNBcnJheShzdGF0ZSwgJHRoaXNWYWx1ZS0+Z2xvYmFsT2JqZWN0KCksICR2YWx1ZSki
OwogICAgIH0KIAorICAgIG15ICRyZXR1cm5UeXBlID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkltcGxlbWVudGF0aW9uUmV0dXJuVHlwZSJ9OwogICAgIGlmICgkdHlwZSBlcSAi
YW55IikgewogICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRvY3VtZW50IikgewogICAg
ICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgi
LCAkY29uZGl0aW9uYWwpOworICAgICAgICB9IGVsc2lmIChkZWZpbmVkICRyZXR1cm5UeXBlIGFu
ZCAkcmV0dXJuVHlwZSBlcSAiSlNWYWx1ZSIpIHsKKyAgICAgICAgICAgIHJldHVybiAiJHZhbHVl
IjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiAiKCR2YWx1ZS5oYXNOb1Zh
bHVlKCkgPyBqc051bGwoKSA6ICR2YWx1ZS5qc1ZhbHVlKCkpIjsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKaW5kZXgg
MDM0NjRkNC4uNDZkYmIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETEF0dHJpYnV0ZXMudHh0CkBAIC02Nyw5ICs2NywxMCBAQCBHZXR0ZXJSYWlzZXNFeGNl
cHRpb24KIEdldHRlclJhaXNlc0V4Y2VwdGlvbldpdGhNZXNzYWdlCiBHbG9iYWxDb250ZXh0PURP
TVdpbmRvd3xXb3JrZXJHbG9iYWxTY29wZXxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZQogSW1t
dXRhYmxlCitJbXBsZW1lbnRlZEFzPSoKIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKIEltcGxl
bWVudGF0aW9uTmFtZXNwYWNlPSoKLUltcGxlbWVudGVkQXM9KgorSW1wbGVtZW50YXRpb25SZXR1
cm5UeXBlPSoKIEltcGxpY2l0VGhpcwogSW5pdGlhbGl6ZWRCeUV2ZW50Q29uc3RydWN0b3IKIElu
dGVyZmFjZU5hbWU9KgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuY3BwCmluZGV4IDdiYTI2ZDkuLmFmYWYyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTQ4Nyw0ICs0ODcsMTUgQEAgYm9vbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorSlNDOjpFeGVjU3RhdGUqIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmV4
ZWNTdGF0ZSgpCit7CisgICAgaWYgKGlzPERvY3VtZW50PigqdGhpcykpIHsKKyAgICAgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCp0aGlzKTsKKyAgICAgICAgcmV0
dXJuIGV4ZWNTdGF0ZUZyb21QYWdlKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBkb2N1bWVudC5w
YWdlKCkpOworICAgIH0KKworICAgIFdvcmtlckdsb2JhbFNjb3BlKiB3b3JrZXJHbG9iYWxTY29w
ZSA9IHN0YXRpY19jYXN0PFdvcmtlckdsb2JhbFNjb3BlKj4odGhpcyk7CisgICAgcmV0dXJuIGV4
ZWNTdGF0ZUZyb21Xb3JrZXJHbG9iYWxTY29wZSh3b3JrZXJHbG9iYWxTY29wZSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oCmluZGV4IGE2NjRlYjkuLjEwNTE1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaApAQCAtMTg4LDYgKzE4OCw4IEBAIHB1YmxpYzoKICAg
ICBpbnQgdGltZXJOZXN0aW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX3RpbWVyTmVzdGluZ0xl
dmVsOyB9CiAgICAgdm9pZCBzZXRUaW1lck5lc3RpbmdMZXZlbChpbnQgdGltZXJOZXN0aW5nTGV2
ZWwpIHsgbV90aW1lck5lc3RpbmdMZXZlbCA9IHRpbWVyTmVzdGluZ0xldmVsOyB9CiAKKyAgICBK
U0M6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlKCk7CisKIHByb3RlY3RlZDoKICAgICBjbGFzcyBBZGRD
b25zb2xlTWVzc2FnZVRhc2sgOiBwdWJsaWMgVGFzayB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKaW5k
ZXggM2QyZGJlMC4uMmJiMDhmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURC
Q3Vyc29yLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCiAjaW5jbHVkZSAiSURC
RGF0YWJhc2UuaCIKQEAgLTMzMyw3ICszMzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
aGlzID09ICZvdGhlcjsKICAgICB9CiAKLSAgICB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBFdmVudCogZXZlbnQpIG92ZXJyaWRlCisgICAgdm9pZCBoYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpIG92ZXJyaWRl
CiAgICAgewogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuc3VjY2Vz
c0V2ZW50KSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIlVu
ZXhwZWN0ZWQgZXZlbnQgdHlwZS4iKTsKQEAgLTM4MCwxMCArMzgxLDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSA9IGNvbnRleHQgPyBjb250ZXh0LT5leGVjU3RhdGUoKSA6IG51bGxwdHI7CisgICAgICAg
IGlmICghc3RhdGUpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgUmVmUHRyPERhdGFF
bnRyeT4gZGF0YUVudHJ5ID0gRGF0YUVudHJ5OjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldEtl
eShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoaWRiQ3Vyc29yLT5rZXkoKSwgU3RyaW5nKCks
IHRydWUpKQotICAgICAgICAgICAgLnNldFByaW1hcnlLZXkobV9pbmplY3RlZFNjcmlwdC53cmFw
T2JqZWN0KGlkYkN1cnNvci0+cHJpbWFyeUtleSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAg
ICAgICAuc2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGlkYkN1cnNvci0+dmFs
dWUoKSwgU3RyaW5nKCksIHRydWUpKQorICAgICAgICAgICAgLnNldEtleShtX2luamVjdGVkU2Ny
aXB0LndyYXBPYmplY3QoeyBzdGF0ZS0+dm0oKSwgaWRiQ3Vyc29yLT5rZXkoKnN0YXRlKSB9LCBT
dHJpbmcoKSwgdHJ1ZSkpCisgICAgICAgICAgICAuc2V0UHJpbWFyeUtleShtX2luamVjdGVkU2Ny
aXB0LndyYXBPYmplY3QoeyBzdGF0ZS0+dm0oKSwgaWRiQ3Vyc29yLT5wcmltYXJ5S2V5KCpzdGF0
ZSkgfSwgU3RyaW5nKCksIHRydWUpKQorICAgICAgICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdCh7IHN0YXRlLT52bSgpLCBpZGJDdXJzb3ItPnZhbHVlKCpzdGF0ZSkg
fSwgU3RyaW5nKCksIHRydWUpKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgbV9y
ZXN1bHQtPmFkZEl0ZW0oV1RGTW92ZShkYXRhRW50cnkpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276548</attachid>
            <date>2016-04-15 22:59:45 -0700</date>
            <delta_ts>2016-04-16 15:55:20 -0700</delta_ts>
            <desc>New patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>56716</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYzQyNDAyLi4zNDJkZmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEx
IEBACisyMDE2LTA0LTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBDbGVhbiB1cCBJREJCaW5kaW5nVXRpbGl0aWVzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBi
ZWhhdmlvcikuCisKKyAgICAgICAgLSBHZXQgcmlkIG9mIGEgd2hvbGUgYnVuY2ggb2YgdW51c2Vk
IGZ1bmN0aW9ucyAoc2luY2Ugd2UgZ290IHJpZCBvZiBMZWdhY3kgSURCKS4KKyAgICAgICAgLSBN
YWtlIG1vcmUgZnVuY3Rpb25zIGRlYWwgaW4gRXhlY1N0YXRlL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRzIGluc3RlYWQgb2YgRE9NUmVxdWVzdFN0YXRlLgorICAgICAgICAtIE1ha2UgbW9yZSBmdW5j
dGlvbnMgZGVhbCBpbiBKU1ZhbHVlIChhcyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+KSBpbnN0
ZWFkIG9mIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dDogQWRkIGEgbmV3IGF0dHJpYnV0ZSB0byBzaWduaWZ5IHRo
YXQgYW4gaW1wbGVtZW50YXRpb24gcmV0dXJucworICAgICAgICAgIEpTVmFsdWVzIGluc3RlYWQg
b2YgRGVwcmVjYXRlZDo6U2NyaXB0U3RhdGUKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6IFVzZSB0aGF0IG5l
dyBhdHRyaWJ1dGUuCisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OklEQkFueSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJBbnk6OnNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJBbnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6Y3JlYXRlKToKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQkN1cnNvcjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6cHJpbWFy
eUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6
Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmRlbGV0ZUZ1
bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6c2V0R2V0UmVzdWx0KToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Y21wKToK
KyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmdldEtleSk6CisgICAgICAg
IAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVJhbmdlOjpsb3dlclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleVJhbmdlOjp1cHBlclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjpv
bmx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjpsb3dlckJvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjp1cHBlckJvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleVJhbmdlOjpib3VuZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UmFuZ2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw6Cisg
ICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6Y291bnQpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRD
bG9uZSk6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9i
amVjdFN0b3JlOjp1cGRhdGVJbmRleGVzRm9yUHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OnBvcHVsYXRlSW5kZXhXaXRoRXhpc3RpbmdS
ZWNvcmRzKToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbElu
ZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgCisgICAg
ICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppZGJLZXlQYXRoRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVybmFsQ3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bWF5YmVDcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNlcmlh
bGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURC
VmFsdWVEYXRhVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9JREJL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6aWRiS2V5RGF0YVRvSlNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjppZGJWYWx1ZURhdGFUb0pTVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
aWRiS2V5VG9TY3JpcHRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5oOgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCRGF0YWJh
c2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJPYmplY3RTdG9yZTo6
Y3JlYXRlSW5kZXgpOgorCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZXhlY1N0YXRlKToK
KyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorCisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKwogMjAxNi0wNC0xMyAgRGFuaWVs
IEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgQ1NQOiBOZXN0ZWQgYnJvd3Np
bmcgY29udGV4dCBjcmVhdGVkIGZvciA8b2JqZWN0PiBvciA8ZW1iZWQ+IHNob3VsZCByZXNwZWN0
IG9iamVjdC1zcmMgZGlyZWN0aXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJBbnkuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQW55LmNwcAppbmRleCA4ZmFiZDIzLi5hNThkMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgSURCQW55OjpJREJB
bnkoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKIH0KIAotSURCQW55OjpJREJBbnkoY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlKQorSURCQW55OjpJREJBbnkoY29uc3Qg
SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCiAgICAgOiBtX3R5cGUoSURCQW55OjpU
eXBlOjpTY3JpcHRWYWx1ZSkKICAgICAsIG1fc2NyaXB0VmFsdWUodmFsdWUpCiB7CkBAIC0xMzMs
OSArMTMzLDkgQEAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJBbnk6OmlkYlRyYW5zYWN0aW9u
KCkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIElEQkFueTo6c2NyaXB0VmFsdWUoKQorSlNDOjpKU1ZhbHVlIElEQkFueTo6c2NyaXB0VmFs
dWUoKQogewotICAgIHJldHVybiBtX3NjcmlwdFZhbHVlOworICAgIHJldHVybiBtX3NjcmlwdFZh
bHVlLmdldCgpOwogfQogCiBpbnQ2NF90IElEQkFueTo6aW50ZWdlcigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCmluZGV4IDlmMWM3OTUuLjZlN2RjMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5oCkBAIC0yOSw3ICsyOSw4IEBA
CiAKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgi
Ci0jaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFsdWUuaD4KKyNpbmNsdWRlIDxoZWFwL1N0cm9u
Zy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcwLDcgKzcxLDcgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkFueShrZXlQYXRoKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSYgdmFsdWUpCisgICAgc3RhdGljIFJlZlB0cjxJREJBbnk+IGNyZWF0ZShjb25zdCBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCQW55KHZhbHVlKSk7CiAgICAgfQpAQCAtMTA4LDcgKzEwOSw3IEBAIHB1
YmxpYzoKICAgICBSZWZQdHI8SURCSW5kZXg+IGlkYkluZGV4KCk7CiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSgpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4g
aWRiVHJhbnNhY3Rpb24oKTsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2Ny
aXB0VmFsdWUoKTsKKyAgICBKU0M6OkpTVmFsdWUgc2NyaXB0VmFsdWUoKTsKICAgICBpbnQ2NF90
IGludGVnZXIoKTsKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpOwogICAgIGNvbnN0IElEQktl
eVBhdGgmIGtleVBhdGgoKTsKQEAgLTEyMCw3ICsxMjEsNyBAQCBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IElEQkFueShSZWY8SURCSW5kZXg+JiYpOwogICAgIGV4cGxpY2l0IElEQkFueShSZWY8SURC
Q3Vyc29yPiYmKTsKICAgICBleHBsaWNpdCBJREJBbnkoY29uc3QgSURCS2V5UGF0aCYpOwotICAg
IGV4cGxpY2l0IElEQkFueShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOworICAgIGV4
cGxpY2l0IElEQkFueShjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+Jik7CiAKICAgICBJ
REJBbnk6OlR5cGUgbV90eXBlIHsgSURCQW55OjpUeXBlOjpVbmRlZmluZWQgfTsKICAgICBSZWZQ
dHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CkBAIC0xMzAsNyArMTMxLDcgQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBtX2N1cnNvcldpdGhWYWx1ZTsKIAogICAg
IGNvbnN0IElEQktleVBhdGggbV9pZGJLZXlQYXRoOwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlIG1fc2NyaXB0VmFsdWU7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBt
X3NjcmlwdFZhbHVlOwogICAgIGNvbnN0IFN0cmluZyBtX3N0cmluZzsKICAgICBjb25zdCBpbnQ2
NF90IG1faW50ZWdlciB7IDAgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCA1YWIwZDliLi42MGVlNGE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTI4LDcgKzI4LDYg
QEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRE9NUmVxdWVz
dFN0YXRlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIklEQkJpbmRp
bmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgpAQCAtNDAs
NiArMzksOCBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjb25zdCBBdG9taWNTdHJpbmcmIElEQkN1cnNvcjo6ZGlyZWN0aW9u
TmV4dCgpCkBAIC0xNTcsMTkgKzE1OCwxOSBAQCBjb25zdCBTdHJpbmcmIElEQkN1cnNvcjo6ZGly
ZWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gSURCQ3Vyc29yOjpkaXJlY3Rpb25Ub1N0cmluZyht
X2luZm8uY3Vyc29yRGlyZWN0aW9uKCkpOwogfQogCi1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgSURCQ3Vyc29yOjprZXkoKSBjb25zdAorSlNWYWx1ZSBJREJDdXJzb3I6OmtleShFeGVj
U3RhdGUmKSBjb25zdAogewotICAgIHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50S2V5OworICAg
IHJldHVybiBtX2N1cnJlbnRLZXkuZ2V0KCk7CiB9CiAKLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlJiBJREJDdXJzb3I6OnByaW1hcnlLZXkoKSBjb25zdAorSlNWYWx1ZSBJREJDdXJzb3I6
OnByaW1hcnlLZXkoRXhlY1N0YXRlJikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kZXByZWNhdGVk
Q3VycmVudFByaW1hcnlLZXk7CisgICAgcmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCk7
CiB9CiAKLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6OnZhbHVlKCkg
Y29uc3QKK0pTVmFsdWUgSURCQ3Vyc29yOjp2YWx1ZShFeGVjU3RhdGUmKSBjb25zdAogewotICAg
IHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50VmFsdWU7CisgICAgcmV0dXJuIG1fY3VycmVudFZh
bHVlLmdldCgpOwogfQogCiBJREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkKQEAgLTIyNCw3ICsy
MjUsNyBAQCBSZWZQdHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIERlcHJlY2F0ZWQ6OgogICAgICAgICB9CiAgICAgfQogCi0gICAg
YXV0byByZXF1ZXN0ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5wdXRGb3JDdXJzb3JVcGRhdGUo
ZXhlYywgdmFsdWUuanNWYWx1ZSgpLCBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleS5qc1Zh
bHVlKCksIGVjKTsKKyAgICBhdXRvIHJlcXVlc3QgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpLnB1
dEZvckN1cnNvclVwZGF0ZShleGVjLCB2YWx1ZS5qc1ZhbHVlKCksIG1fY3VycmVudFByaW1hcnlL
ZXkuZ2V0KCksIGVjKTsKICAgICBpZiAoZWMuY29kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTI4MCwxMCArMjgxLDkgQEAgdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2EKIAogdm9pZCBJ
REJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleVZhbHVlLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQogewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNv
bnRleHQpOwogICAgIFJlZlB0cjxJREJLZXk+IGtleTsKICAgICBpZiAoIWtleVZhbHVlLmpzVmFs
dWUoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZy
ZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsKKyAgICAgICAga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktl
eShjb250ZXh0LCBrZXlWYWx1ZSk7CiAKICAgICBjb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSwg
ZWMpOwogfQpAQCAtMzgwLDcgKzM4MCw3IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJ
REJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGF1dG8gcmVxdWVzdCA9IGVmZmVjdGl2
ZU9iamVjdFN0b3JlKCkubW9kZXJuRGVsZXRlKGNvbnRleHQsIG1fZGVwcmVjYXRlZEN1cnJlbnRQ
cmltYXJ5S2V5LmpzVmFsdWUoKSwgZWMpOworICAgIGF1dG8gcmVxdWVzdCA9IGVmZmVjdGl2ZU9i
amVjdFN0b3JlKCkubW9kZXJuRGVsZXRlKGNvbnRleHQsIG1fY3VycmVudFByaW1hcnlLZXkuZ2V0
KCksIGVjKTsKICAgICBpZiAoZWMuY29kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTQwMCwyNSArNDAwLDI1IEBAIHZvaWQgSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQoSURCUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgSURCR2V0UmVzdWx0JiBnZXRSZXN1bHQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghZ2V0UmVzdWx0LmlzRGVmaW5lZCgpKSB7Ci0gICAgICAgIG1fZGVwcmVj
YXRlZEN1cnJlbnRLZXkgPSB7IH07CisgICAgICAgIG1fY3VycmVudEtleSA9IHsgfTsKICAgICAg
ICAgbV9jdXJyZW50S2V5RGF0YSA9IHsgfTsKLSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudFBy
aW1hcnlLZXkgPSB7IH07CisgICAgICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSB7IH07CiAgICAg
ICAgIG1fY3VycmVudFByaW1hcnlLZXlEYXRhID0geyB9OwotICAgICAgICBtX2RlcHJlY2F0ZWRD
dXJyZW50VmFsdWUgPSB7IH07CisgICAgICAgIG1fY3VycmVudFZhbHVlID0geyB9OwogCiAgICAg
ICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
ZGVwcmVjYXRlZEN1cnJlbnRLZXkgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBn
ZXRSZXN1bHQua2V5RGF0YSgpKTsKKyAgICBtX2N1cnJlbnRLZXkgPSBpZGJLZXlEYXRhVG9TY3Jp
cHRWYWx1ZSgqY29udGV4dCwgZ2V0UmVzdWx0LmtleURhdGEoKSk7CiAgICAgbV9jdXJyZW50S2V5
RGF0YSA9IGdldFJlc3VsdC5rZXlEYXRhKCk7Ci0gICAgbV9kZXByZWNhdGVkQ3VycmVudFByaW1h
cnlLZXkgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBnZXRSZXN1bHQucHJpbWFy
eUtleURhdGEoKSk7CisgICAgbV9jdXJyZW50UHJpbWFyeUtleSA9IGlkYktleURhdGFUb1Njcmlw
dFZhbHVlKCpjb250ZXh0LCBnZXRSZXN1bHQucHJpbWFyeUtleURhdGEoKSk7CiAgICAgbV9jdXJy
ZW50UHJpbWFyeUtleURhdGEgPSBnZXRSZXN1bHQucHJpbWFyeUtleURhdGEoKTsKIAogICAgIGlm
IChpc0tleUN1cnNvcigpKQotICAgICAgICBtX2RlcHJlY2F0ZWRDdXJyZW50VmFsdWUgPSB7IH07
CisgICAgICAgIG1fY3VycmVudFZhbHVlID0geyB9OwogICAgIGVsc2UKLSAgICAgICAgbV9kZXBy
ZWNhdGVkQ3VycmVudFZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZSgqY29udGV4dCwgZ2V0UmVz
dWx0LnZhbHVlKCkpOworICAgICAgICBtX2N1cnJlbnRWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFs
dWVUb0pTVmFsdWUoKmNvbnRleHQsIGdldFJlc3VsdC52YWx1ZSgpKTsKIAogICAgIG1fZ290VmFs
dWUgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaAppbmRleCA4NGY4Yjk3Li5jYmY3Nzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJJREJBbnkuaCIKICNpbmNsdWRlICJJREJDdXJzb3JJbmZv
LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTYsOSArNTcsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBJbXBsZW1lbnQgdGhlIElE
TAogICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uKCkgY29uc3Q7Ci0gICAgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSgpIGNvbnN0OwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiBwcmltYXJ5S2V5KCkgY29uc3Q7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIHZhbHVlKCkgY29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIGtleShKU0M6OkV4ZWNT
dGF0ZSYpIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSBwcmltYXJ5S2V5KEpTQzo6RXhlY1N0YXRl
JikgY29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIHZhbHVlKEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7
CiAgICAgSURCQW55KiBzb3VyY2UoKTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0
PiB1cGRhdGUoSlNDOjpFeGVjU3RhdGUmLCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpOwpAQCAtMTExLDExICsxMTIsOSBAQCBwcml2YXRlOgogICAg
IElEQktleURhdGEgbV9jdXJyZW50S2V5RGF0YTsKICAgICBJREJLZXlEYXRhIG1fY3VycmVudFBy
aW1hcnlLZXlEYXRhOwogCi0gICAgLy8gRklYTUU6IFdoZW4gZGl0Y2hpbmcgTGVnYWN5IElEQiBh
bmQgY29tYmluaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgYWJzdHJhY3QgSURCQ3Vy
c29yLAotICAgIC8vIHRoZXNlIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1lbWJlcnMgc2hvdWxk
IGJlIEpTVmFsdWVzIGluc3RlYWQuCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9kZXBy
ZWNhdGVkQ3VycmVudEtleTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RlcHJlY2F0
ZWRDdXJyZW50UHJpbWFyeUtleTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RlcHJl
Y2F0ZWRDdXJyZW50VmFsdWU7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJl
bnRLZXk7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRQcmltYXJ5S2V5
OworICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9jdXJyZW50VmFsdWU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmlkbAppbmRleCAwNDZmOTA1Li4xNzdhZDRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKQEAgLTMyLDggKzMyLDggQEAK
IF0gaW50ZXJmYWNlIElEQkN1cnNvciB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBz
b3VyY2U7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkaXJlY3Rpb247Ci0gICAg
cmVhZG9ubHkgYXR0cmlidXRlIGFueSBrZXk7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIGFueSBw
cmltYXJ5S2V5OworICAgIFtDYWxsV2l0aD1TY3JpcHRTdGF0ZSwgSW1wbGVtZW50YXRpb25SZXR1
cm5UeXBlPUpTVmFsdWVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkga2V5OworICAgIFtDYWxsV2l0
aD1TY3JpcHRTdGF0ZSwgSW1wbGVtZW50YXRpb25SZXR1cm5UeXBlPUpTVmFsdWVdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBhbnkgcHJpbWFyeUtleTsKIAogICAgIFtDYWxsV2l0aD1TY3JpcHRTdGF0ZSwg
UmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2VdIElEQlJlcXVlc3QgdXBkYXRlKGFueSB2YWx1ZSk7
CiAgICAgW1JhaXNlc0V4Y2VwdGlvbldpdGhNZXNzYWdlXSB2b2lkIGFkdmFuY2UoW0VuZm9yY2VS
YW5nZV0gdW5zaWduZWQgbG9uZyBjb3VudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAppbmRleCA4NTJlMTQ3Li5j
NmMzN2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JXaXRoVmFsdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKQEAgLTMwLDUgKzMwLDUgQEAKICAgICBTa2lwVlRhYmxl
VmFsaWRhdGlvbiwKICAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKIF0gaW50ZXJmYWNlIElEQkN1
cnNvcldpdGhWYWx1ZSA6IElEQkN1cnNvciB7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIGFueSB2
YWx1ZTsKKyAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGUsIEltcGxlbWVudGF0aW9uUmV0dXJuVHlw
ZT1KU1ZhbHVlXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IHZhbHVlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5jcHAKaW5kZXggMzY4ZWMwYS4u
NzQyZmM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFj
dG9yeS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogCi0jaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGll
cy5oIgpAQCAtMTQ5LDkgKzE0OCw4IEBAIFJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBJREJGYWN0
b3J5OjpkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250CiAKIHNob3J0
IElEQkZhY3Rvcnk6OmNtcChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgZmlyc3RWYWx1ZSwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIHNlY29uZFZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewot
ICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJ
REJLZXk+IGZpcnN0ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBmaXJzdFZh
bHVlKTsKLSAgICBSZWZQdHI8SURCS2V5PiBzZWNvbmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZy
ZXF1ZXN0U3RhdGUsIHNlY29uZFZhbHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiBmaXJzdCA9IHNj
cmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwgZmlyc3RWYWx1ZSk7CisgICAgUmVmUHRyPElEQktl
eT4gc2Vjb25kID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBzZWNvbmRWYWx1ZSk7CiAK
ICAgICBBU1NFUlQoZmlyc3QpOwogICAgIEFTU0VSVChzZWNvbmQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCmluZGV4IGM2NDczMTcuLmVkOGRhOTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVk
ZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURC
QmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkN1cnNvci5oIgpAQCAtMTYwLDggKzE1
OSw3IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Y291bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QkluZGV4Ojpjb3VudCIpOwogCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29u
dGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgm
cmVxdWVzdFN0YXRlLCBrZXkpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZh
bHVlVG9JREJLZXkoY29udGV4dCwga2V5KTsKICAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5
cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIg
aXMgbm90IGEgdmFsaWQga2V5LiIpOwpAQCAtMjQyLDggKzI0MCw3IEBAIFJlZlB0cjxJREJSZXF1
ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0
IERlcHJlY2F0CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkluZGV4OjpnZXQiKTsKIAotICAg
IERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJL
ZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAg
ICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtl
eSk7CiAgICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxp
ZCkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsK
ICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dl
dCcgb24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CkBA
IC0yODcsOCArMjg0LDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmUKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiSURCSW5kZXg6OmdldEtleSIpOwogCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVl
c3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFs
dWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktl
eSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwga2V5KTsKICAgICBpZiAoIWlkYktleSB8
fCBpZGJLZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAgICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0g
QVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0S2V5JyBvbiAnSURCSW5kZXgnOiBU
aGUgcGFyYW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcAppbmRleCA5ZTE5NDVkLi5hMGQxOTVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5n
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2Uu
Y3BwCkBAIC0yNiwxMyArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
REJLZXlSYW5nZS5oIgogCi0jaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAi
SURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5RGF0YS5oIgogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUmVmPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6Y3JlYXRlKFJlZlB0
cjxJREJLZXk+JiYga2V5KQpAQCAtNDksMTYgKzUxLDE0IEBAIElEQktleVJhbmdlOjpJREJLZXlS
YW5nZShSZWZQdHI8SURCS2V5PiYmIGxvd2VyLCBSZWZQdHI8SURCS2V5PiYmIHVwcGVyLCBMb3dl
ckJvCiB7CiB9CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIElEQktleVJhbmdlOjpsb3dlclZh
bHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0CitKU1ZhbHVlIElEQktl
eVJhbmdlOjpsb3dlclZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgcmV0
dXJuIGlkYktleVRvU2NyaXB0VmFsdWUoJnJlcXVlc3RTdGF0ZSwgbV9sb3dlcik7CisgICAgcmV0
dXJuIGlkYktleURhdGFUb1NjcmlwdFZhbHVlKGNvbnRleHQsIElEQktleURhdGEobV9sb3dlci5n
ZXQoKSkpLmdldCgpOwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJREJLZXlSYW5nZTo6
dXBwZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBjb25zdAorSlNWYWx1
ZSBJREJLZXlSYW5nZTo6dXBwZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KSBjb25zdAogewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwot
ICAgIHJldHVybiBpZGJLZXlUb1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIG1fdXBwZXIpOwor
ICAgIHJldHVybiBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShjb250ZXh0LCBJREJLZXlEYXRhKG1f
dXBwZXIuZ2V0KCkpKS5nZXQoKTsKIH0KIAogUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5n
ZTo6b25seShSZWZQdHI8SURCS2V5PiYmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC03Myw4
ICs3Myw3IEBAIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Om9ubHkoUmVmUHRyPElE
QktleT4mJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiBSZWZQdHI8SURCS2V5UmFuZ2U+IElE
QktleVJhbmdlOjpvbmx5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0g
ICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElE
QktleT4ga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCBrZXlWYWx1ZSk7
CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBr
ZXlWYWx1ZSk7CiAgICAgaWYgKCFrZXkgfHwgIWtleS0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC04NSw4ICs4NCw3IEBAIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Om9u
bHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwCiAKIFJlZlB0cjxJ
REJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Omxvd2VyQm91bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGJvdW5kVmFsdWUsIGJv
b2wgb3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVl
c3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gYm91bmQgPSBzY3JpcHRWYWx1
ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGJvdW5kVmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+
IGJvdW5kID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBib3VuZFZhbHVlKTsKICAgICBp
ZiAoIWJvdW5kIHx8ICFib3VuZC0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05Nyw4
ICs5NSw3IEBAIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Omxvd2VyQm91bmQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uCiAKIFJlZlB0cjxJREJLZXlSYW5nZT4g
SURCS2V5UmFuZ2U6OnVwcGVyQm91bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGJvdW5kVmFsdWUsIGJvb2wgb3BlbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29u
dGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gYm91bmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZy
ZXF1ZXN0U3RhdGUsIGJvdW5kVmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+IGJvdW5kID0gc2Ny
aXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBib3VuZFZhbHVlKTsKICAgICBpZiAoIWJvdW5kIHx8
ICFib3VuZC0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDksOSArMTA2LDggQEAg
UmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6dXBwZXJCb3VuZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb24KIAogUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5n
ZTo6Ym91bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUmIGxvd2VyVmFsdWUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiB1cHBlclZhbHVlLCBib29sIGxvd2VyT3BlbiwgYm9vbCB1cHBlck9wZW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwot
ICAgIFJlZlB0cjxJREJLZXk+IGxvd2VyID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0
YXRlLCBsb3dlclZhbHVlKTsKLSAgICBSZWZQdHI8SURCS2V5PiB1cHBlciA9IHNjcmlwdFZhbHVl
VG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgdXBwZXJWYWx1ZSk7CisgICAgUmVmUHRyPElEQktleT4g
bG93ZXIgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGxvd2VyVmFsdWUpOworICAgIFJl
ZlB0cjxJREJLZXk+IHVwcGVyID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCB1cHBlclZh
bHVlKTsKIAogICAgIGlmICghbG93ZXIgfHwgIWxvd2VyLT5pc1ZhbGlkKCkgfHwgIXVwcGVyIHx8
ICF1cHBlci0+aXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRhdGFFcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlS
YW5nZS5oCmluZGV4IDFiZGE3ZjcuLjQzMGZmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaApAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAg
ICAgSURCS2V5KiBsb3dlcigpIGNvbnN0IHsgcmV0dXJuIG1fbG93ZXIuZ2V0KCk7IH0KICAgICBJ
REJLZXkqIHVwcGVyKCkgY29uc3QgeyByZXR1cm4gbV91cHBlci5nZXQoKTsgfQogCi0gICAgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgbG93ZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jikg
Y29uc3Q7Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdXBwZXJWYWx1ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JikgY29uc3Q7CisgICAgSlNDOjpKU1ZhbHVlIGxvd2VyVmFsdWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0OworICAgIEpTQzo6SlNWYWx1ZSB1cHBlclZhbHVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKICAgICBib29sIGxvd2VyT3BlbigpIGNvbnN0
IHsgcmV0dXJuIG1fbG93ZXJUeXBlID09IExvd2VyQm91bmRPcGVuOyB9CiAgICAgYm9vbCB1cHBl
ck9wZW4oKSBjb25zdCB7IHJldHVybiBtX3VwcGVyVHlwZSA9PSBVcHBlckJvdW5kT3BlbjsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5n
ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwK
aW5kZXggZjA2MDBmZi4uMTA0MjIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbApAQCAtMjgsOCArMjgsOCBAQAogICAgIEltcGxlbWVu
dGF0aW9uTGFja3NWVGFibGUsCiAgICAgRW5hYmxlZEF0UnVudGltZT1JbmRleGVkREIsCiBdIGlu
dGVyZmFjZSBJREJLZXlSYW5nZSB7Ci0gICAgW0ltcGxlbWVudGVkQXM9bG93ZXJWYWx1ZSxDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSByZWFkb25seSBhdHRyaWJ1dGUgYW55IGxvd2Vy
OwotICAgIFtJbXBsZW1lbnRlZEFzPXVwcGVyVmFsdWUsQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSB1cHBlcjsKKyAgICBbSW1wbGVtZW50ZWRB
cz1sb3dlclZhbHVlLCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRh
dGlvblJldHVyblR5cGU9SlNWYWx1ZV0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSBsb3dlcjsKKyAg
ICBbSW1wbGVtZW50ZWRBcz11cHBlclZhbHVlLCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBJbXBsZW1lbnRhdGlvblJldHVyblR5cGU9SlNWYWx1ZV0gcmVhZG9ubHkgYXR0cmlidXRl
IGFueSB1cHBlcjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBsb3dlck9wZW47CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gdXBwZXJPcGVuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggOGVk
NWIwOS4uNzFmMDE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKICNpbmNsdWRl
ICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIklEQkN1cnNvci5oIgpAQCAtMTgyLDggKzE4MSw3IEBAIFJlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNv
bnN0IERlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIERPTVJlcXVlc3RT
dGF0ZSByZXF1ZXN0U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9
IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBSZWZQdHI8SURC
S2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtleSk7CiAgICAgaWYg
KCFpZGJLZXkgfHwgaWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewogICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgZWMu
bWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2dldCcgb24gJ0lEQk9i
amVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CkBAIC0zOTks
OCArMzk3LDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXgKIAogUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjptb2Rlcm5EZWxldGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsK
LSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8
SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7
CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0
LCBrZXkpOwogICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6Oklu
dmFsaWQpIHsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJy
b3I7CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdkZWxldGUnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFs
aWQga2V5LiIpOwpAQCAtNTk0LDggKzU5MSw3IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QKIHsK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmNvdW50Iik7CiAKLSAgICBET01S
ZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBp
ZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAgUmVm
UHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBrZXkpOwog
ICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsK
ICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CiAgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcg
b24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmlu
ZGV4IGM0ZGY5MGUuLjlhNWQzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJET01FcnJvci5oIgotI2luY2x1ZGUgIkRPTVJlcXVl
c3RTdGF0ZS5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgog
I2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKQEAgLTMyNiwxOSArMzI1LDE5IEBAIHZv
aWQgSURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiAKIHZvaWQg
SURCUmVxdWVzdDo6c2V0UmVzdWx0KGNvbnN0IElEQktleURhdGEqIGtleURhdGEpCiB7Ci0gICAg
aWYgKCFrZXlEYXRhKSB7CisgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICBpZiAoIWNvbnRleHQgfHwgIWtleURhdGEpIHsKICAgICAgICAgbV9yZXN1bHQg
PSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgdmFsdWUgPSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksICprZXlEYXRhKTsKLSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1v
dmUodmFsdWUpKTsKKyAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGlkYktleURhdGFUb1Nj
cmlwdFZhbHVlKCpjb250ZXh0LCAqa2V5RGF0YSkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OnNl
dFJlc3VsdCh1aW50NjRfdCBudW1iZXIpCiB7CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7Ci0gICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnZtKCksIEpTQzo6SlNWYWx1ZShudW1i
ZXIpKSk7CisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0oKSwgSlNDOjpKU1ZhbHVlKG51bWJl
cikpKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShj
b25zdCBJREJWYWx1ZSYgdmFsdWUpCkBAIC0zNDksOCArMzQ4LDcgQEAgdm9pZCBJREJSZXF1ZXN0
OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRDbG9uZShjb25zdCBJREJWYWx1ZSYgdmFsdWUpCiAgICAg
aWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBzY3JpcHRWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWUoKmNvbnRleHQsIHZhbHVlKTsK
LSAgICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKFdURk1vdmUoc2NyaXB0VmFsdWUpKTsKKyAg
ICBtX3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUo
KmNvbnRleHQsIHZhbHVlKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9VbmRl
ZmluZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL01lbW9yeU9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAKaW5kZXggOGI4Y2Q3NS4uZGY2NGYyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9y
eU9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCkBAIC0zMDEsNyArMzAxLDcgQEAgSURCRXJyb3Ig
TWVtb3J5T2JqZWN0U3RvcmU6OnVwZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoY29uc3QgSURCS2V5
RGF0YSYga2V5LCBjb24KIHsKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKFVuaXF1ZUlEQkRhdGFi
YXNlOjpkYXRhYmFzZVRocmVhZFZNKCkpOwogCi0gICAgYXV0byBqc1ZhbHVlID0gaWRiVmFsdWVE
YXRhVG9KU1ZhbHVlKFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgp
LCB2YWx1ZSk7CisgICAgYXV0byBqc1ZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pT
VmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHZhbHVl
KTsKICAgICBpZiAoanNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0zMTAsNyArMzEwLDcgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OnVw
ZGF0ZUluZGV4ZXNGb3JQdXRSZWNvcmQoY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb24KIAogICAg
IGZvciAoYXV0byYgaW5kZXggOiBtX2luZGV4ZXNCeU5hbWUudmFsdWVzKCkpIHsKICAgICAgICAg
SW5kZXhLZXkgaW5kZXhLZXk7Ci0gICAgICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShVbmlx
dWVJREJEYXRhYmFzZTo6ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgaW5kZXgtPmluZm8oKSwg
anNWYWx1ZSwgaW5kZXhLZXkpOworICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoVW5p
cXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIGluZGV4LT5pbmZvKCks
IGpzVmFsdWUuZ2V0KCksIGluZGV4S2V5KTsKIAogICAgICAgICBpZiAoaW5kZXhLZXkuaXNOdWxs
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMzOSwxMiArMzM5LDEyIEBAIElEQkVycm9y
IE1lbW9yeU9iamVjdFN0b3JlOjpwb3B1bGF0ZUluZGV4V2l0aEV4aXN0aW5nUmVjb3JkcyhNZW1v
cnlJbmRleCYgaW5kZXgpCiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcihVbmlxdWVJREJEYXRhYmFz
ZTo6ZGF0YWJhc2VUaHJlYWRWTSgpKTsKIAogICAgIGZvciAoYXV0byBpdGVyYXRvciA6ICptX2tl
eVZhbHVlU3RvcmUpIHsKLSAgICAgICAgYXV0byBqc1ZhbHVlID0gaWRiVmFsdWVEYXRhVG9KU1Zh
bHVlKFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCBpdGVyYXRv
ci52YWx1ZSk7CisgICAgICAgIGF1dG8ganNWYWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVEYXRh
VG9KU1ZhbHVlKFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCBp
dGVyYXRvci52YWx1ZSk7CiAgICAgICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CiAgICAgICAgICAgICByZXR1cm4geyB9OwogCiAgICAgICAgIEluZGV4S2V5IGluZGV4S2V5Owot
ICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFi
YXNlVGhyZWFkRXhlY1N0YXRlKCksIGluZGV4LmluZm8oKSwganNWYWx1ZSwgaW5kZXhLZXkpOwor
ICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFi
YXNlVGhyZWFkRXhlY1N0YXRlKCksIGluZGV4LmluZm8oKSwganNWYWx1ZS5nZXQoKSwgaW5kZXhL
ZXkpOwogCiAgICAgICAgIGlmIChpbmRleEtleS5pc051bGwoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCAyODJhMjEzLi5mZGQx
ZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMTQ2OCw3ICsxNDY4
LDcgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVPbmVJbmRleEZvckFk
ZFJlY29yZChjb25zdCBJREJJbmRleEluZm8mIGkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IEluZGV4S2V5IGluZGV4S2V5OwotICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSgqbV9nbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgaW5mbywganNWYWx1ZSwgaW5kZXhLZXkpOworICAgIGdl
bmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSgqbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgaW5m
bywganNWYWx1ZS5nZXQoKSwgaW5kZXhLZXkpOwogCiAgICAgaWYgKGluZGV4S2V5LmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4geyB9OwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKGNvbnN0IElE
Qk9iamVjdFN0b3IKICAgICBib29sIGFueVJlY29yZHNTdWNjZWVkZWQgPSBmYWxzZTsKICAgICBm
b3IgKGF1dG8mIGluZGV4IDogaW5mby5pbmRleE1hcCgpLnZhbHVlcygpKSB7CiAgICAgICAgIElu
ZGV4S2V5IGluZGV4S2V5OwotICAgICAgICBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoKm1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGluZGV4LCBqc1ZhbHVlLCBpbmRleEtleSk7CisgICAg
ICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSgqbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgaW5kZXgsIGpzVmFsdWUuZ2V0KCksIGluZGV4S2V5KTsKIAogICAgICAgICBpZiAoaW5kZXhL
ZXkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
Y3BwCmluZGV4IDYyMzIyN2EuLmJlYjg2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApA
QCAtNzY1LDE4ICs3NjUsMTggQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9y
QWRkKHVpbnQ2NF90IGNhbGxiYWNrSWRlbnRpZmllciwgY29uc3QgSURCUmUKICAgICBpZiAodXNl
ZEtleUlzR2VuZXJhdGVkICYmICFvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKS5pc051bGwoKSkg
ewogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGRhdGFiYXNlVGhyZWFkVk0oKSk7CiAKLSAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKGRh
dGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGRl
c2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCks
IG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsKKyAgICAgICAgaWYgKHZhbHVlLmdldCgpLmlz
VW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIG1fc2VydmVyLnBvc3REYXRhYmFzZVRhc2tSZXBs
eShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVy
Zm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlc2VyaWFs
aXplIHJlY29yZCB2YWx1ZSBmb3IgcmVjb3JkIGtleSBpbmplY3Rpb24iKSksIHVzZWRLZXkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghaW5qZWN0SURC
S2V5SW50b1NjcmlwdFZhbHVlKGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHVzZWRLZXksIHZh
bHVlLCBvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkpIHsKKyAgICAgICAgaWYgKCFpbmplY3RJ
REJLZXlJbnRvU2NyaXB0VmFsdWUoZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgdXNlZEtleSwg
dmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgpKSkgewogICAgICAgICAgICAg
bV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgQVND
SUlMaXRlcmFsKCJVbmFibGUgdG8gaW5qZWN0IHJlY29yZCBrZXkgaW50byByZWNvcmQgdmFsdWUi
KSksIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IGF1dG8gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJmRh
dGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHZhbHVlLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAg
ICAgYXV0byBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgm
ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgdmFsdWUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIp
OwogICAgICAgICBpZiAoZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKS5oYWRFeGNlcHRpb24oKSkg
ewogICAgICAgICAgICAgbV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0
cmFpbnRFcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gc2VyaWFsaXplIHJlY29yZCB2YWx1
ZSBhZnRlciBpbmplY3RpbmcgcmVjb3JkIGtleSIpKSwgdXNlZEtleSkpOwogICAgICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmNwcAppbmRleCBiY2ZmZDgyLi4wZmMxM2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMzAs
NiBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogI2luY2x1ZGUgIklEQkJpbmRpbmdV
dGlsaXRpZXMuaCIKIAotI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgogI2luY2x1ZGUgIklE
QkluZGV4SW5mby5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIklEQktleURhdGEu
aCIKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJJbmRleEtleS5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGhy
ZWFkU2FmZURhdGFCdWZmZXIuaCIKIApAQCAtNzgsNDMgKzc5LDYgQEAgc3RhdGljIGJvb2wgc2V0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhF
bGVtZW50LAogICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVlIGlkYktleURhdGFUb0pTVmFs
dWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCi17Ci0g
ICAgaWYgKGtleURhdGEuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
Ci0gICAgTG9ja2VyPEpTTG9jaz4gbG9ja2VyKGV4ZWMudm0oKS5hcGlMb2NrKCkpOwotCi0gICAg
c3dpdGNoIChrZXlEYXRhLnR5cGUoKSkgewotICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYgaW5BcnJheSA9IGtl
eURhdGEuYXJyYXkoKTsKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0gaW5BcnJheS5zaXplKCk7
Ci0gICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoJmV4
ZWMsIDAsIGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzaXplKTsKLSAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYg
YXJyYXlLZXkgPSBpbkFycmF5LmF0KGkpOwotICAgICAgICAgICAgICAgIG91dEFycmF5LT5wdXRE
aXJlY3RJbmRleCgmZXhlYywgaSwgaWRiS2V5RGF0YVRvSlNWYWx1ZShleGVjLCBhcnJheUtleSkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUob3V0QXJyYXkpOwot
ICAgICAgICB9Ci0gICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZSgmZXhlYywga2V5RGF0YS5zdHJpbmcoKSk7Ci0gICAgY2FzZSBLZXlUeXBl
OjpEYXRlOgotICAgICAgICByZXR1cm4ganNEYXRlT3JOdWxsKCZleGVjLCBrZXlEYXRhLmRhdGUo
KSk7Ci0gICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihr
ZXlEYXRhLm51bWJlcigpKTsKLSAgICBjYXNlIEtleVR5cGU6Ok1pbjoKLSAgICBjYXNlIEtleVR5
cGU6Ok1heDoKLSAgICBjYXNlIEtleVR5cGU6OkludmFsaWQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotfQotCiBz
dGF0aWMgSlNWYWx1ZSBpZGJLZXlUb0pTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBJREJLZXkqIGtleSkKIHsKICAgICBpZiAoIWtleSB8fCAhZXhl
YykgewpAQCAtMjAyLDEzICsxNjYsMTMgQEAgc3RhdGljIFJlZlB0cjxJREJLZXk+IGNyZWF0ZUlE
QktleUZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJu
IElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwogfQogCi1JREJLZXlQYXRoIGlkYktleVBhdGhGcm9t
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleVBhdGhWYWx1ZSkKK0lEQktleVBhdGgg
aWRiS2V5UGF0aEZyb21WYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUga2V5UGF0aFZhbHVl
KQogewogICAgIElEQktleVBhdGgga2V5UGF0aDsKICAgICBpZiAoaXNKU0FycmF5KGtleVBhdGhW
YWx1ZSkpCi0gICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKHRvTmF0aXZlQXJyYXk8U3RyaW5n
PihleGVjLCBrZXlQYXRoVmFsdWUpKTsKKyAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgodG9O
YXRpdmVBcnJheTxTdHJpbmc+KCZleGVjLCBrZXlQYXRoVmFsdWUpKTsKICAgICBlbHNlCi0gICAg
ICAgIGtleVBhdGggPSBJREJLZXlQYXRoKGtleVBhdGhWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgICAgICBrZXlQYXRoID0gSURCS2V5UGF0aChrZXlQYXRoVmFsdWUudG9T
dHJpbmcoJmV4ZWMpLT52YWx1ZSgmZXhlYykpOwogICAgIHJldHVybiBrZXlQYXRoOwogfQogCkBA
IC0yMjQsNyArMTg4LDcgQEAgc3RhdGljIEpTVmFsdWUgZ2V0TnRoVmFsdWVPbktleVBhdGgoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QgVmUKICAgICByZXR1cm4gY3Vy
cmVudFZhbHVlOwogfQogCi1zdGF0aWMgUmVmUHRyPElEQktleT4gaW50ZXJuYWxDcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpK
U1ZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQorc3RhdGljIFJlZlB0cjxJREJL
ZXk+IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEpTVmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7
CiAgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJz
ZUVycm9yIGVycm9yOwpAQCAtMjc0LDMzICsyMzgsNyBAQCBzdGF0aWMgYm9vbCBjYW5JbmplY3RO
dGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcm9vdFZhbHVlLCBjb25z
dAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1
ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7
Ci0KLSAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6
U3RyaW5nKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKLSAgICBJREJL
ZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKLSAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aC5zdHJp
bmcoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7Ci0gICAgQVNTRVJUKGVycm9yID09IElEQktl
eVBhdGhQYXJzZUVycm9yOjpOb25lKTsKLQotICAgIGlmIChrZXlQYXRoRWxlbWVudHMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByZXF1
ZXN0U3RhdGUtPmV4ZWMoKTsKLQotICAgIEpTVmFsdWUgcGFyZW50ID0gZW5zdXJlTnRoVmFsdWVP
bktleVBhdGgoZXhlYywgdmFsdWUuanNWYWx1ZSgpLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhF
bGVtZW50cy5zaXplKCkgLSAxKTsKLSAgICBpZiAocGFyZW50LmlzVW5kZWZpbmVkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc2V0KGV4ZWMsIHBhcmVudCwga2V5UGF0aEVs
ZW1lbnRzLmxhc3QoKSwgaWRiS2V5VG9KU1ZhbHVlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwga2V5LmdldCgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBKU1ZhbHVl
IHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAgIExPRyhJbmRleGVkREIs
ICJpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIApAQCAtMzI4LDQ4ICsyNjYsOCBAQCBi
b29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgY29u
c3QgSURCS2V5RGF0YSYga2V5RGF0YQogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8SURC
S2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiY3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aCIpOwotICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7CiAKLSAg
ICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6QXJyYXkpIHsK
LSAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiByZXN1bHQ7Ci0gICAgICAgIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhcnJheSA9IGtleVBhdGguYXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgUmVmUHRyPElE
QktleT4ga2V5ID0gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KGV4ZWMsIHZhbHVlLCBhcnJheVtpXSk7Ci0gICAgICAgICAgICBpZiAoIWtleSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShyZXN1bHQpOwot
ICAgIH0KLQotICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhU
eXBlOjpTdHJpbmcpOwotICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOwotfQotCi1SZWZQ
dHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhl
Y1N0YXRlJiBleGVjLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0
IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsK
LQotICAgIGlmIChrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpBcnJh
eSkgewotICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IHJlc3VsdDsKLSAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJheSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SURCS2V5PiBrZXkgPSBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgoJmV4ZWMsIHZhbHVlLCBhcnJheVtpXSk7Ci0gICAgICAgICAgICBpZiAoIWtleSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
a2V5KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShyZXN1
bHQpOwotICAgIH0KLQotICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6Oktl
eVBhdGhUeXBlOjpTdHJpbmcpOwotICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21T
Y3JpcHRWYWx1ZUFuZEtleVBhdGgoJmV4ZWMsIHZhbHVlLCBrZXlQYXRoLnN0cmluZygpKTsKLX0K
LQotUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQ
YXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSwgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKK1JlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTVmFsdWUmIHZhbHVl
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAgIEFTU0VSVCgha2V5UGF0aC5pc051
bGwoKSk7CiAKQEAgLTM5MCwxOCArMjg4LDcgQEAgUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QKICAg
ICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKCZl
eGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBjb25zdCBKU0M6
OkpTVmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7Ci0KLSAg
ICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOwotICAgIGlmICgh
ZXhlYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNhbkluamVjdElEQktl
eUludG9TY3JpcHRWYWx1ZSgqZXhlYywgc2NyaXB0VmFsdWUsIGtleVBhdGgpOwotfQotCi1ib29s
IGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRl
LCBjb25zdCBKU0M6OkpTVmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQ
YXRoKQorYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBleGVj
U3RhdGUsIGNvbnN0IEpTVmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQ
YXRoKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZh
bHVlIik7CiAKQEAgLTQxNywxMzMgKzMwNCw2MCBAQCBib29sIGNhbkluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBKU0M6OkpTVmFsdQog
ICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCgmZXhlY1N0YXRlLCBzY3JpcHRW
YWx1ZSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7CiB9CiAK
LURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoRE9NUmVxdWVzdFN0
YXRlKiByZXF1ZXN0U3RhdGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBW
YWx1ZSkKLXsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByZXF1ZXN0U3RhdGUtPmV4ZWMoKTsKLSAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBwcnBWYWx1
ZTsKLSAgICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBpZiAoc2VyaWFsaXplZFZhbHVlKQotICAgICAg
ICByZXN1bHQgPSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgMCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBqc051bGwo
KTsKLSAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgcmVzdWx0
KTsKLX0KIAotc3RhdGljIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZh
bHVlRGF0YSwgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+IGJsb2JGaWxlUGF0aHMpCitzdGF0aWMgU3Ryb25nPFVua25vd24+IGRlc2VyaWFsaXplSURC
VmFsdWVUb0pTVmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBJREJWYWx1ZSYgdmFsdWUpCiB7
Ci0gICAgaWYgKCF2YWx1ZURhdGEuZGF0YSgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBpZiAoIXZhbHVlLmRhdGEoKS5kYXRhKCkpCisgICAgICAgIHJldHVybiB7IGV4ZWMu
dm0oKSwganNVbmRlZmluZWQoKSB9OwogCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
ID0gKnZhbHVlRGF0YS5kYXRhKCk7CisgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhID0g
KnZhbHVlLmRhdGEoKS5kYXRhKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKGRhdGEu
c2l6ZSgpKSB7CiAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyhWZWN0
b3I8dWludDhfdD4oZGF0YSkpOwogCiAgICAgICAgIGV4ZWMudm0oKS5hcGlMb2NrKCkubG9jaygp
OwotICAgICAgICByZXN1bHQgPSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCZleGVjLCBl
eGVjLmxleGljYWxHbG9iYWxPYmplY3QoKSwgMCwgTm9uVGhyb3dpbmcsIGJsb2JVUkxzLCBibG9i
RmlsZVBhdGhzKTsKKyAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6
ZSgmZXhlYywgZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIE5vblRocm93aW5nLCB2YWx1
ZS5ibG9iVVJMcygpLCB2YWx1ZS5ibG9iRmlsZVBhdGhzKCkpOwogICAgICAgICBleGVjLnZtKCku
YXBpTG9jaygpLnVubG9jaygpOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSBqc051bGwo
KTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHsgZXhlYy52bSgpLCByZXN1bHQg
fTsKIH0KIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZURhdGEo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZm
ZXImIHZhbHVlRGF0YSkKK1N0cm9uZzxVbmtub3duPiBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1Zh
bHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQlZhbHVlJiB2YWx1
ZSkKIHsKLSAgICBET01SZXF1ZXN0U3RhdGUgc3RhdGUoJmNvbnRleHQpOwotICAgIGF1dG8qIGV4
ZWNTdGF0ZSA9IHN0YXRlLmV4ZWMoKTsKLQorICAgIGF1dG8qIGV4ZWNTdGF0ZSA9IGNvbnRleHQu
ZXhlY1N0YXRlKCk7CiAgICAgaWYgKCFleGVjU3RhdGUpCiAgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICByZXR1cm4geyBleGVjU3RhdGUtPnZtKCksIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9K
U1ZhbHVlKCpleGVjU3RhdGUsIHZhbHVlRGF0YSkgfTsKKyAgICByZXR1cm4gZGVzZXJpYWxpemVJ
REJWYWx1ZVRvSlNWYWx1ZSgqZXhlY1N0YXRlLCB2YWx1ZSk7CiB9CiAKLURlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQorU3Ryb25nPFVua25vd24+IGRlc2VyaWFsaXpl
SURCVmFsdWVEYXRhVG9KU1ZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImIHZhbHVlRGF0YSkKIHsKLSAgICBET01SZXF1ZXN0U3RhdGUgc3RhdGUoJmNvbnRl
eHQpOwotICAgIGF1dG8qIGV4ZWNTdGF0ZSA9IHN0YXRlLmV4ZWMoKTsKLQotICAgIGlmICghZXhl
Y1N0YXRlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIHsgZXhlY1N0YXRlLT52
bSgpLCBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZSgqZXhlY1N0YXRlLCB2YWx1ZS5k
YXRhKCksIHZhbHVlLmJsb2JVUkxzKCksIHZhbHVlLmJsb2JGaWxlUGF0aHMoKSkgfTsKLX0KLQot
SlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQotewotICAg
IFZlY3RvcjxTdHJpbmc+IGR1bW15VVJMcywgZHVtbXlGaWxlUGF0aHM7Ci0gICAgcmV0dXJuIGRl
c2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgZHVtbXlVUkxz
LCBkdW1teUZpbGVQYXRocyk7CisgICAgcmV0dXJuIGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFs
dWUoZXhlYywgSURCVmFsdWUodmFsdWVEYXRhKSk7CiB9CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlIGRlc2VyaWFsaXplSURCVmFsdWVCdWZmZXIoRE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3Rh
dGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBwcnBCdWZmZXIsIGJvb2wga2V5SXNEZWZpbmVk
KQorUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShFeGVjU3RhdGUmIGV4ZWMsIGNv
bnN0IEpTVmFsdWUmIHNjcmlwdFZhbHVlKQogewotICAgIGlmIChwcnBCdWZmZXIpIHsKLSAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlOwotICAgICAgICB2YWx1ZS5hcHBlbmQocHJwQnVmZmVy
LT5kYXRhKCksIHBycEJ1ZmZlci0+c2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXpl
SURCVmFsdWVCdWZmZXIocmVxdWVzdFN0YXRlLT5leGVjKCksIFdURk1vdmUodmFsdWUpLCBrZXlJ
c0RlZmluZWQpOwotICAgIH0KLQotICAgIHJldHVybiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShy
ZXF1ZXN0U3RhdGUtPmV4ZWMoKS0+dm0oKSwganNOdWxsKCkpOwotfQotCi1zdGF0aWMgSlNWYWx1
ZSBpZGJWYWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFZlY3Rvcjx1aW50
OF90PiYmIGJ1ZmZlcikKLXsKLSAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFs
aXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKFdU
Rk1vdmUoYnVmZmVyKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUo
JmV4ZWMsIGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCBOb25UaHJvd2luZyk7CisgICAg
cmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1ZSgmZXhlYywgc2NyaXB0VmFsdWUpOwogfQogCi1E
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBWZWN0b3I8dWludDhfdD4mJiBidWZmZXIsIGJvb2wga2V5SXNEZWZpbmVk
KQorUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBjb25zdCBKU1ZhbHVlJiBzY3JpcHRWYWx1ZSkKIHsKLSAgICBBU1NFUlQo
ZXhlYyk7Ci0KLSAgICAvLyBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlIHZhbHVl
IG11c3QgYmUgdW5kZWZpbmVkIChhcyBvcHBvc2VkIHRvIG51bGwpLgotICAgIGlmICgha2V5SXNE
ZWZpbmVkKSB7Ci0gICAgICAgIC8vIFdlIGVpdGhlciBzaG91bGRuJ3QgaGF2ZSBhIGJ1ZmZlciBv
ciBpdCBzaG91bGQgYmUgb2Ygc2l6ZSAwLgotICAgICAgICBBU1NFUlQoIWJ1ZmZlci5zaXplKCkp
OwotICAgICAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwganNV
bmRlZmluZWQoKSk7Ci0gICAgfQotCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBpZGJWYWx1ZURhdGFU
b0pTVmFsdWUoKmV4ZWMsIFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlKGV4ZWMtPnZtKCksIHJlc3VsdCk7CisgICAgYXV0byogZXhlY1N0YXRlID0g
Y29udGV4dC5leGVjU3RhdGUoKTsKKyAgICByZXR1cm4gZXhlY1N0YXRlID8gc2NyaXB0VmFsdWVU
b0lEQktleSgqZXhlY1N0YXRlLCBzY3JpcHRWYWx1ZSkgOiBudWxscHRyOwogfQogCi1KU1ZhbHVl
IGlkYlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgVGhyZWFk
U2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSkKK1N0cm9uZzxVbmtub3duPiBpZGJLZXlEYXRhVG9T
Y3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJLZXlE
YXRhJiBrZXlEYXRhKQogewotICAgIGlmICghdmFsdWVEYXRhLmRhdGEoKSkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1cm4gaWRiVmFsdWVEYXRhVG9KU1ZhbHVlKGV4
ZWMsIFZlY3Rvcjx1aW50OF90PigqdmFsdWVEYXRhLmRhdGEoKSkpOwotfQorICAgIFJlZlB0cjxJ
REJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKIAotRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgaWRiS2V5VG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RT
dGF0ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSkKLXsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
ZXF1ZXN0U3RhdGUtPmV4ZWMoKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBjb250ZXh0LmV4ZWNT
dGF0ZSgpOwogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVy
biBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBpZGJLZXlUb0pTVmFsdWUoZXhl
YywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KSwga2V5LmdldCgpKSk7Ci19Ci0KLVJlZlB0cjxJREJLZXk+IHNjcmlwdFZhbHVlVG9JREJLZXko
RE9NUmVxdWVzdFN0YXRlKiByZXF1ZXN0U3RhdGUsIGNvbnN0IEpTQzo6SlNWYWx1ZSYgc2NyaXB0
VmFsdWUpCi17Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gcmVxdWVzdFN0YXRlLT5leGVjKCk7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCBzY3JpcHRWYWx1ZSk7Ci19Ci0K
LVJlZlB0cjxJREJLZXk+IHNjcmlwdFZhbHVlVG9JREJLZXkoRXhlY1N0YXRlJiBleGVjLCBjb25z
dCBKU0M6OkpTVmFsdWUmIHNjcmlwdFZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJREJLZXlG
cm9tVmFsdWUoJmV4ZWMsIHNjcmlwdFZhbHVlKTsKLX0KLQotRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkg
PSBrZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCk7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVl
c3RTdGF0ZShjb250ZXh0KTsKLSAgICByZXR1cm4gaWRiS2V5VG9TY3JpcHRWYWx1ZSgmcmVxdWVz
dFN0YXRlLCBrZXkuZ2V0KCkpOworICAgIHJldHVybiB7IGV4ZWMtPnZtKCksIGlkYktleVRvSlNW
YWx1ZShleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLCBrZXkuZ2V0KCkpIH07CiB9CiAKIHN0YXRpYyBWZWN0b3I8SURCS2V5RGF0YT4g
Y3JlYXRlS2V5UGF0aEFycmF5KEV4ZWNTdGF0ZSYgZXhlYywgSlNWYWx1ZSB2YWx1ZSwgY29uc3Qg
SURCSW5kZXhJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5oCmluZGV4IDExNTBiY2QuLjhjZWQyMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw1
MSArMzAsMzMgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkRp
Y3Rpb25hcnkuaCIKLSNpbmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRWYWx1ZS5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRE9NUmVxdWVz
dFN0YXRlOwogY2xhc3MgSURCSW5kZXhJbmZvOwogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5
RGF0YTsKIGNsYXNzIElEQktleVBhdGg7CiBjbGFzcyBJREJWYWx1ZTsKIGNsYXNzIEluZGV4S2V5
OwotY2xhc3MgU2hhcmVkQnVmZmVyOwogY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAKLUlE
QktleVBhdGggaWRiS2V5UGF0aEZyb21WYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1
ZSk7CitJREJLZXlQYXRoIGlkYktleVBhdGhGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwogCi1ib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0
U3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4sIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29u
c3QgSURCS2V5UGF0aCYpOwotYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBJREJLZXlEYXRhJiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBJREJLZXlQ
YXRoJik7Ci0KLVJlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYsIGNv
bnN0IElEQktleVBhdGgmKTsKLVJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNj
cmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwogUmVmUHRyPElEQktleT4gbWF5YmVDcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0YXRlJiwgY29uc3Qg
SlNDOjpKU1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwotCi1ib29sIGNhbkluamVjdElEQktl
eUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBjb25zdCBKU0M6OkpTVmFsdWUmLCBj
b25zdCBJREJLZXlQYXRoJik7CiBib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsK
K2Jvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3Qg
SURCS2V5RGF0YSYsIEpTQzo6SlNWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYpOwogCi1EZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKERPTVJlcXVlc3RTdGF0ZSosIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7Ci1EZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
VGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlRGF0YSk7Ci1EZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJW
YWx1ZSYpOwotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZl
cihET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGJvb2wga2V5SXNE
ZWZpbmVkKTsKLVdFQkNPUkVfRVhQT1JUIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFs
aXplSURCVmFsdWVCdWZmZXIoSlNDOjpFeGVjU3RhdGUqLCBWZWN0b3I8dWludDhfdD4mJiwgYm9v
bCBrZXlJc0RlZmluZWQpOworSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBpZGJLZXlEYXRhVG9T
Y3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSURCS2V5RGF0YSYpOwor
dm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJJ
bmRleEluZm8mLCBKU0M6OkpTVmFsdWUsIEluZGV4S2V5JiBvdXRLZXkpOwogCi1KU0M6OkpTVmFs
dWUgZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKTsKK0pTQzo6U3Ryb25nPEpTQzo6VW5r
bm93bj4gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgY29uc3QgSURCVmFsdWUmKTsKK0pTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gZGVzZXJpYWxp
emVJREJWYWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBUaHJlYWRTYWZl
RGF0YUJ1ZmZlciYgdmFsdWVEYXRhKTsKIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaWRiS2V5
VG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4pOwotUmVm
UHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShET01SZXF1ZXN0U3RhdGUqLCBjb25zdCBK
U0M6OkpTVmFsdWUmKTsKK1JlZlB0cjxJREJLZXk+IHNjcmlwdFZhbHVlVG9JREJLZXkoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYpOwogUmVmUHRyPElEQktleT4g
c2NyaXB0VmFsdWVUb0lEQktleShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SlNWYWx1ZSYp
OwogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgSURCS2V5RGF0YSYpOwotCi1KU0M6OkpTVmFsdWUg
aWRiVmFsdWVEYXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgVGhyZWFkU2FmZURh
dGFCdWZmZXImIHZhbHVlRGF0YSk7Ci12b2lkIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEpTQzo6SlNWYWx1ZSwgSW5kZXhLZXkm
IG91dEtleSk7Ci1KU0M6OkpTVmFsdWUgaWRiS2V5RGF0YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSYsIGNvbnN0IElEQktleURhdGEmKTsKLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFu
eUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5j
cHAKaW5kZXggN2Q2ZjNkOS4uYjdmYTllZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCQW55Q3VzdG9tLmNwcApAQCAtOTgsNyArOTgsNyBAQCBKU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJREJBbnkqIGlk
YkFueSkKICAgICBjYXNlIElEQkFueTo6VHlwZTo6SURCVHJhbnNhY3Rpb246CiAgICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJUcmFuc2FjdGlvbigpKTsK
ICAgICBjYXNlIElEQkFueTo6VHlwZTo6U2NyaXB0VmFsdWU6Ci0gICAgICAgIHJldHVybiBpZGJB
bnktPnNjcmlwdFZhbHVlKCkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gaWRiQW55LT5zY3Jp
cHRWYWx1ZSgpOwogICAgIGNhc2UgSURCQW55OjpUeXBlOjpTdHJpbmc6CiAgICAgICAgIHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpZGJBbnktPnN0cmluZygpKTsKICAgICBjYXNlIElE
QkFueTo6VHlwZTo6SW50ZWdlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKaW5kZXggZDdmNTgxYS4uNGFkZWZlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKQEAg
LTY2LDcgKzY2LDcgQEAgSlNWYWx1ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShF
eGVjU3RhdGUmIHN0YXRlKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAgICAgaWYgKCFrZXlQYXRoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAg
ICAga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoJnN0YXRlLCBrZXlQYXRoVmFsdWUpOwor
ICAgICAgICAgICAga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoc3RhdGUsIGtleVBhdGhW
YWx1ZSk7CiAgICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT2JqZWN0U3RvcmVDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKaW5kZXggNzQ0
ZDlhMy4uNDFkN2M4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJPYmplY3RTdG9yZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJPYmplY3RTdG9yZUN1c3RvbS5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCBKU1ZhbHVlIEpT
SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KEV4ZWNTdGF0ZSYgc3RhdGUpCiAgICAgSURCS2V5
UGF0aCBrZXlQYXRoOwogICAgIEpTVmFsdWUga2V5UGF0aFZhbHVlID0gc3RhdGUuYXJndW1lbnQo
MSk7CiAgICAgaWYgKCFrZXlQYXRoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
a2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoJnN0YXRlLCBrZXlQYXRoVmFsdWUpOworICAg
ICAgICBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5UGF0aFZhbHVlKTsK
ICAgICBlbHNlIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwogICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlN5bnRheEVycm9yOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAx
MWQ1YjU1Li44NzBlZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtNDM0OSw5ICs0MzQ5LDEyIEBAIHN1YiBOYXRpdmVU
b0pTVmFsdWUKICAgICAgICAgcmV0dXJuICJqc0FycmF5KHN0YXRlLCAkdGhpc1ZhbHVlLT5nbG9i
YWxPYmplY3QoKSwgJHZhbHVlKSI7CiAgICAgfQogCisgICAgbXkgJHJldHVyblR5cGUgPSAkc2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25SZXR1cm5UeXBlIn07
CiAgICAgaWYgKCR0eXBlIGVxICJhbnkiKSB7CiAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBl
cSAiRG9jdW1lbnQiKSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIH0gZWxzaWYgKGRl
ZmluZWQgJHJldHVyblR5cGUgYW5kICRyZXR1cm5UeXBlIGVxICJKU1ZhbHVlIikgeworICAgICAg
ICAgICAgcmV0dXJuICIkdmFsdWUiOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmV0
dXJuICIoJHZhbHVlLmhhc05vVmFsdWUoKSA/IGpzTnVsbCgpIDogJHZhbHVlLmpzVmFsdWUoKSki
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0lETEF0dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExB
dHRyaWJ1dGVzLnR4dAppbmRleCAwMzQ2NGQ0Li40NmRiYjAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKQEAgLTY3LDkgKzY3LDEw
IEBAIEdldHRlclJhaXNlc0V4Y2VwdGlvbgogR2V0dGVyUmFpc2VzRXhjZXB0aW9uV2l0aE1lc3Nh
Z2UKIEdsb2JhbENvbnRleHQ9RE9NV2luZG93fFdvcmtlckdsb2JhbFNjb3BlfERlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlCiBJbW11dGFibGUKK0ltcGxlbWVudGVkQXM9KgogSW1wbGVtZW50YXRp
b25MYWNrc1ZUYWJsZQogSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9KgotSW1wbGVtZW50ZWRBcz0q
CitJbXBsZW1lbnRhdGlvblJldHVyblR5cGU9KgogSW1wbGljaXRUaGlzCiBJbml0aWFsaXplZEJ5
RXZlbnRDb25zdHJ1Y3RvcgogSW50ZXJmYWNlTmFtZT0qCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggN2JhMjZkOS4uYWZhZjJjMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAtNDg3LDQg
KzQ4NywxNSBAQCBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0
eSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitKU0M6OkV4ZWNTdGF0ZSogU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6ZXhlY1N0YXRlKCkKK3sKKyAgICBpZiAoaXM8RG9jdW1lbnQ+KCp0
aGlzKSkgeworICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KnRoaXMpOworICAgICAgICByZXR1cm4gZXhlY1N0YXRlRnJvbVBhZ2UobWFpblRocmVhZE5vcm1h
bFdvcmxkKCksIGRvY3VtZW50LnBhZ2UoKSk7CisgICAgfQorCisgICAgV29ya2VyR2xvYmFsU2Nv
cGUqIHdvcmtlckdsb2JhbFNjb3BlID0gc3RhdGljX2Nhc3Q8V29ya2VyR2xvYmFsU2NvcGUqPih0
aGlzKTsKKyAgICByZXR1cm4gZXhlY1N0YXRlRnJvbVdvcmtlckdsb2JhbFNjb3BlKHdvcmtlckds
b2JhbFNjb3BlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggYTY2NGViOS4uMTA1MTVjNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC0xODgsNiAr
MTg4LDggQEAgcHVibGljOgogICAgIGludCB0aW1lck5lc3RpbmdMZXZlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGltZXJOZXN0aW5nTGV2ZWw7IH0KICAgICB2b2lkIHNldFRpbWVyTmVzdGluZ0xldmVs
KGludCB0aW1lck5lc3RpbmdMZXZlbCkgeyBtX3RpbWVyTmVzdGluZ0xldmVsID0gdGltZXJOZXN0
aW5nTGV2ZWw7IH0KIAorICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUoKTsKKwogcHJvdGVj
dGVkOgogICAgIGNsYXNzIEFkZENvbnNvbGVNZXNzYWdlVGFzayA6IHB1YmxpYyBUYXNrIHsKICAg
ICBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
SW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcklu
ZGV4ZWREQkFnZW50LmNwcAppbmRleCAzZDJkYmUwLi4yYmIwOGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFs
dWUuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgpAQCAtMzMzLDcgKzMzNCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHRoaXMgPT0gJm90aGVyOwogICAgIH0KIAotICAgIHZvaWQgaGFu
ZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkgb3ZlcnJpZGUK
KyAgICB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV2
ZW50KiBldmVudCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChldmVudC0+dHlwZSgpICE9
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQpIHsKICAgICAgICAgICAgIG1fcmVxdWVzdENhbGxi
YWNrLT5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCBldmVudCB0eXBlLiIpOwpAQCAtMzgwLDEwICsz
ODEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAg
ICAgSlNDOjpFeGVjU3RhdGUqIHN0YXRlID0gY29udGV4dCA/IGNvbnRleHQtPmV4ZWNTdGF0ZSgp
IDogbnVsbHB0cjsKKyAgICAgICAgaWYgKCFzdGF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKwog
ICAgICAgICBSZWZQdHI8RGF0YUVudHJ5PiBkYXRhRW50cnkgPSBEYXRhRW50cnk6OmNyZWF0ZSgp
Ci0gICAgICAgICAgICAuc2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChpZGJDdXJz
b3ItPmtleSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0UHJpbWFyeUtleSht
X2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoaWRiQ3Vyc29yLT5wcmltYXJ5S2V5KCksIFN0cmlu
ZygpLCB0cnVlKSkKLSAgICAgICAgICAgIC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0LndyYXBP
YmplY3QoaWRiQ3Vyc29yLT52YWx1ZSgpLCBTdHJpbmcoKSwgdHJ1ZSkpCisgICAgICAgICAgICAu
c2V0S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh7IHN0YXRlLT52bSgpLCBpZGJDdXJz
b3ItPmtleSgqc3RhdGUpIH0sIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRQcmlt
YXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh7IHN0YXRlLT52bSgpLCBpZGJDdXJz
b3ItPnByaW1hcnlLZXkoKnN0YXRlKSB9LCBTdHJpbmcoKSwgdHJ1ZSkpCisgICAgICAgICAgICAu
c2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHsgc3RhdGUtPnZtKCksIGlkYkN1
cnNvci0+dmFsdWUoKnN0YXRlKSB9LCBTdHJpbmcoKSwgdHJ1ZSkpCiAgICAgICAgICAgICAucmVs
ZWFzZSgpOwogICAgICAgICBtX3Jlc3VsdC0+YWRkSXRlbShXVEZNb3ZlKGRhdGFFbnRyeSkpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276566</attachid>
            <date>2016-04-16 15:55:20 -0700</date>
            <delta_ts>2016-04-17 11:49:40 -0700</delta_ts>
            <desc>New patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>56649</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNWI2YTJhLi43YTcyYmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEx
IEBACisyMDE2LTA0LTE1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBDbGVhbiB1cCBJREJCaW5kaW5nVXRpbGl0aWVzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBi
ZWhhdmlvcikuCisKKyAgICAgICAgLSBHZXQgcmlkIG9mIGEgd2hvbGUgYnVuY2ggb2YgdW51c2Vk
IGZ1bmN0aW9ucyAoc2luY2Ugd2UgZ290IHJpZCBvZiBMZWdhY3kgSURCKS4KKyAgICAgICAgLSBN
YWtlIG1vcmUgZnVuY3Rpb25zIGRlYWwgaW4gRXhlY1N0YXRlL1NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRzIGluc3RlYWQgb2YgRE9NUmVxdWVzdFN0YXRlLgorICAgICAgICAtIE1ha2UgbW9yZSBmdW5j
dGlvbnMgZGVhbCBpbiBKU1ZhbHVlIChhcyBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+KSBpbnN0
ZWFkIG9mIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlLgorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dDogQWRkIGEgbmV3IGF0dHJpYnV0ZSB0byBzaWduaWZ5IHRo
YXQgYW4gaW1wbGVtZW50YXRpb24gcmV0dXJucworICAgICAgICAgIEpTVmFsdWVzIGluc3RlYWQg
b2YgRGVwcmVjYXRlZDo6U2NyaXB0U3RhdGUKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6IFVzZSB0aGF0IG5l
dyBhdHRyaWJ1dGUuCisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJBbnk6OklEQkFueSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJBbnk6OnNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJBbnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkFueTo6Y3JlYXRlKToKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQkN1cnNvcjo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6cHJpbWFy
eUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkN1cnNvcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6
Y29udGludWVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmRlbGV0ZUZ1
bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6c2V0R2V0UmVzdWx0KToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6Y21wKToK
KyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmdldEtleSk6CisgICAgICAg
IAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVJhbmdlOjpsb3dlclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleVJhbmdlOjp1cHBlclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjpv
bmx5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjpsb3dlckJvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQktleVJhbmdlOjp1cHBlckJvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleVJhbmdlOjpib3VuZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
UmFuZ2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw6Cisg
ICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6Y291bnQpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3Vs
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1N0cnVjdHVyZWRD
bG9uZSk6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1v
cnlPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6Ok1lbW9yeU9i
amVjdFN0b3JlOjp1cGRhdGVJbmRleGVzRm9yUHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6TWVtb3J5T2JqZWN0U3RvcmU6OnBvcHVsYXRlSW5kZXhXaXRoRXhpc3RpbmdS
ZWNvcmRzKToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlT25lSW5kZXhGb3JBZGRSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbElu
ZGV4ZXNGb3JBZGRSZWNvcmQpOgorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpVbmlxdWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKToKKyAgICAgICAgCisgICAg
ICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjppZGJLZXlQYXRoRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVybmFsQ3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bWF5YmVDcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNlcmlh
bGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURC
VmFsdWVEYXRhVG9KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFZhbHVlVG9JREJL
ZXkpOgorICAgICAgICAoV2ViQ29yZTo6aWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6aWRiS2V5RGF0YVRvSlNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjppZGJWYWx1ZURhdGFUb0pTVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
aWRiS2V5VG9TY3JpcHRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5oOgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCRGF0YWJh
c2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCT2Jq
ZWN0U3RvcmVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJPYmplY3RTdG9yZTo6
Y3JlYXRlSW5kZXgpOgorCisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZXhlY1N0YXRlKToK
KyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorCisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKwogMjAxNi0wNC0xNiAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSBzaG91bGRuJ3QgbXV0YXRlIGVsZW1lbnQgZHVyaW5nIHN0eWxlIHJlc29sdXRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwCmluZGV4IDhmYWJkMjMuLmE1
OGQyNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcApA
QCAtNzgsNyArNzgsNyBAQCBJREJBbnk6OklEQkFueShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
KQogewogfQogCi1JREJBbnk6OklEQkFueShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
dmFsdWUpCitJREJBbnk6OklEQkFueShjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2
YWx1ZSkKICAgICA6IG1fdHlwZShJREJBbnk6OlR5cGU6OlNjcmlwdFZhbHVlKQogICAgICwgbV9z
Y3JpcHRWYWx1ZSh2YWx1ZSkKIHsKQEAgLTEzMyw5ICsxMzMsOSBAQCBSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+IElEQkFueTo6aWRiVHJhbnNhY3Rpb24oKQogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgSURCQW55OjpzY3JpcHRWYWx1ZSgpCitK
U0M6OkpTVmFsdWUgSURCQW55OjpzY3JpcHRWYWx1ZSgpCiB7Ci0gICAgcmV0dXJuIG1fc2NyaXB0
VmFsdWU7CisgICAgcmV0dXJuIG1fc2NyaXB0VmFsdWUuZ2V0KCk7CiB9CiAKIGludDY0X3QgSURC
QW55OjppbnRlZ2VyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmgK
aW5kZXggOWYxYzc5NS4uNmU3ZGMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQW55LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQW55LmgKQEAgLTI5LDcgKzI5LDggQEAKIAogI2luY2x1ZGUgIklEQktleVBhdGguaCIK
ICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlIDxiaW5kaW5ncy9TY3JpcHRW
YWx1ZS5oPgorI2luY2x1ZGUgPGhlYXAvU3Ryb25nLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NK
U1ZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNzAsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSURCQW55KGtleVBhdGgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPElEQkFueT4g
Y3JlYXRlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKKyAgICBzdGF0aWMg
UmVmUHRyPElEQkFueT4gY3JlYXRlKGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZh
bHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJBbnkodmFsdWUpKTsK
ICAgICB9CkBAIC0xMDgsNyArMTA5LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxJREJJbmRleD4g
aWRiSW5kZXgoKTsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGlkYk9iamVjdFN0b3JlKCk7
CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbigpOwotICAgIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSgpOworICAgIEpTQzo6SlNWYWx1
ZSBzY3JpcHRWYWx1ZSgpOwogICAgIGludDY0X3QgaW50ZWdlcigpOwogICAgIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKCk7CiAgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpOwpAQCAtMTIwLDcg
KzEyMSw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSURCQW55KFJlZjxJREJJbmRleD4mJik7
CiAgICAgZXhwbGljaXQgSURCQW55KFJlZjxJREJDdXJzb3I+JiYpOwogICAgIGV4cGxpY2l0IElE
QkFueShjb25zdCBJREJLZXlQYXRoJik7Ci0gICAgZXhwbGljaXQgSURCQW55KGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJik7CisgICAgZXhwbGljaXQgSURCQW55KGNvbnN0IEpTQzo6U3Ry
b25nPEpTQzo6VW5rbm93bj4mKTsKIAogICAgIElEQkFueTo6VHlwZSBtX3R5cGUgeyBJREJBbnk6
OlR5cGU6OlVuZGVmaW5lZCB9OwogICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gbV9kYXRhYmFzZTsK
QEAgLTEzMCw3ICsxMzEsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJDdXJzb3JXaXRoVmFs
dWU+IG1fY3Vyc29yV2l0aFZhbHVlOwogCiAgICAgY29uc3QgSURCS2V5UGF0aCBtX2lkYktleVBh
dGg7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgbV9zY3JpcHRWYWx1ZTsKKyAg
ICBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+IG1fc2NyaXB0VmFsdWU7CiAgICAgY29uc3QgU3Ry
aW5nIG1fc3RyaW5nOwogICAgIGNvbnN0IGludDY0X3QgbV9pbnRlZ2VyIHsgMCB9OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDVh
YjBkOWIuLjYwZWU0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKLSNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklE
QkRhdGFiYXNlRXhjZXB0aW9uLmgiCkBAIC00MCw2ICszOSw4IEBACiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCit1
c2luZyBuYW1lc3BhY2UgSlNDOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IEF0b21p
Y1N0cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCkKQEAgLTE1NywxOSArMTU4LDE5IEBA
IGNvbnN0IFN0cmluZyYgSURCQ3Vyc29yOjpkaXJlY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBJ
REJDdXJzb3I6OmRpcmVjdGlvblRvU3RyaW5nKG1faW5mby5jdXJzb3JEaXJlY3Rpb24oKSk7CiB9
CiAKLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBJREJDdXJzb3I6OmtleSgpIGNvbnN0
CitKU1ZhbHVlIElEQkN1cnNvcjo6a2V5KEV4ZWNTdGF0ZSYpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fZGVwcmVjYXRlZEN1cnJlbnRLZXk7CisgICAgcmV0dXJuIG1fY3VycmVudEtleS5nZXQoKTsK
IH0KIAotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIElEQkN1cnNvcjo6cHJpbWFyeUtl
eSgpIGNvbnN0CitKU1ZhbHVlIElEQkN1cnNvcjo6cHJpbWFyeUtleShFeGVjU3RhdGUmKSBjb25z
dAogewotICAgIHJldHVybiBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleTsKKyAgICByZXR1
cm4gbV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKTsKIH0KIAotY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIElEQkN1cnNvcjo6dmFsdWUoKSBjb25zdAorSlNWYWx1ZSBJREJDdXJzb3I6OnZh
bHVlKEV4ZWNTdGF0ZSYpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGVwcmVjYXRlZEN1cnJlbnRW
YWx1ZTsKKyAgICByZXR1cm4gbV9jdXJyZW50VmFsdWUuZ2V0KCk7CiB9CiAKIElEQkFueSogSURC
Q3Vyc29yOjpzb3VyY2UoKQpAQCAtMjI0LDcgKzIyNSw3IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJS
ZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgRGVwcmVjYXRl
ZDo6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvIHJlcXVlc3QgPSBlZmZlY3RpdmVPYmpl
Y3RTdG9yZSgpLnB1dEZvckN1cnNvclVwZGF0ZShleGVjLCB2YWx1ZS5qc1ZhbHVlKCksIG1fZGVw
cmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5LmpzVmFsdWUoKSwgZWMpOworICAgIGF1dG8gcmVxdWVz
dCA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkucHV0Rm9yQ3Vyc29yVXBkYXRlKGV4ZWMsIHZhbHVl
LmpzVmFsdWUoKSwgbV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSwgZWMpOwogICAgIGlmIChlYy5j
b2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjgwLDEwICsyODEsOSBAQCB2b2lk
IElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYQogCiB2b2lkIElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5VmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7Ci0gICAgRE9N
UmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7CiAgICAgUmVmUHRyPElEQktleT4g
a2V5OwogICAgIGlmICgha2V5VmFsdWUuanNWYWx1ZSgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
IGtleSA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOworICAg
ICAgICBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtleVZhbHVlKTsKIAogICAg
IGNvbnRpbnVlRnVuY3Rpb24oa2V5LmdldCgpLCBlYyk7CiB9CkBAIC0zODAsNyArMzgwLDcgQEAg
UmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY28KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgYXV0byByZXF1ZXN0ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5tb2Rlcm5EZWxldGUo
Y29udGV4dCwgbV9kZXByZWNhdGVkQ3VycmVudFByaW1hcnlLZXkuanNWYWx1ZSgpLCBlYyk7Cisg
ICAgYXV0byByZXF1ZXN0ID0gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKS5tb2Rlcm5EZWxldGUoY29u
dGV4dCwgbV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSwgZWMpOwogICAgIGlmIChlYy5jb2RlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNDAwLDI1ICs0MDAsMjUgQEAgdm9pZCBJREJD
dXJzb3I6OnNldEdldFJlc3VsdChJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJHZXRSZXN1
bHQmIGdldFJlc3VsdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFnZXRSZXN1bHQuaXNE
ZWZpbmVkKCkpIHsKLSAgICAgICAgbV9kZXByZWNhdGVkQ3VycmVudEtleSA9IHsgfTsKKyAgICAg
ICAgbV9jdXJyZW50S2V5ID0geyB9OwogICAgICAgICBtX2N1cnJlbnRLZXlEYXRhID0geyB9Owot
ICAgICAgICBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleSA9IHsgfTsKKyAgICAgICAgbV9j
dXJyZW50UHJpbWFyeUtleSA9IHsgfTsKICAgICAgICAgbV9jdXJyZW50UHJpbWFyeUtleURhdGEg
PSB7IH07Ci0gICAgICAgIG1fZGVwcmVjYXRlZEN1cnJlbnRWYWx1ZSA9IHsgfTsKKyAgICAgICAg
bV9jdXJyZW50VmFsdWUgPSB7IH07CiAKICAgICAgICAgbV9nb3RWYWx1ZSA9IGZhbHNlOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9kZXByZWNhdGVkQ3VycmVudEtleSA9IGlkYktl
eURhdGFUb1NjcmlwdFZhbHVlKGNvbnRleHQsIGdldFJlc3VsdC5rZXlEYXRhKCkpOworICAgIG1f
Y3VycmVudEtleSA9IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKCpjb250ZXh0LCBnZXRSZXN1bHQu
a2V5RGF0YSgpKTsKICAgICBtX2N1cnJlbnRLZXlEYXRhID0gZ2V0UmVzdWx0LmtleURhdGEoKTsK
LSAgICBtX2RlcHJlY2F0ZWRDdXJyZW50UHJpbWFyeUtleSA9IGlkYktleURhdGFUb1NjcmlwdFZh
bHVlKGNvbnRleHQsIGdldFJlc3VsdC5wcmltYXJ5S2V5RGF0YSgpKTsKKyAgICBtX2N1cnJlbnRQ
cmltYXJ5S2V5ID0gaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoKmNvbnRleHQsIGdldFJlc3VsdC5w
cmltYXJ5S2V5RGF0YSgpKTsKICAgICBtX2N1cnJlbnRQcmltYXJ5S2V5RGF0YSA9IGdldFJlc3Vs
dC5wcmltYXJ5S2V5RGF0YSgpOwogCiAgICAgaWYgKGlzS2V5Q3Vyc29yKCkpCi0gICAgICAgIG1f
ZGVwcmVjYXRlZEN1cnJlbnRWYWx1ZSA9IHsgfTsKKyAgICAgICAgbV9jdXJyZW50VmFsdWUgPSB7
IH07CiAgICAgZWxzZQotICAgICAgICBtX2RlcHJlY2F0ZWRDdXJyZW50VmFsdWUgPSBkZXNlcmlh
bGl6ZUlEQlZhbHVlKCpjb250ZXh0LCBnZXRSZXN1bHQudmFsdWUoKSk7CisgICAgICAgIG1fY3Vy
cmVudFZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZSgqY29udGV4dCwgZ2V0UmVz
dWx0LnZhbHVlKCkpOwogCiAgICAgbV9nb3RWYWx1ZSA9IHRydWU7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCmluZGV4IDg0ZjhiOTcuLmNiZjc3ODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIklEQkFu
eS5oIgogI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pT
VmFsdWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Niw5ICs1Nyw5IEBAIHB1Ymxp
YzoKIAogICAgIC8vIEltcGxlbWVudCB0aGUgSURMCiAgICAgY29uc3QgU3RyaW5nJiBkaXJlY3Rp
b24oKSBjb25zdDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5KCkgY29u
c3Q7Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHByaW1hcnlLZXkoKSBjb25z
dDsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUoKSBjb25zdDsKKyAg
ICBKU0M6OkpTVmFsdWUga2V5KEpTQzo6RXhlY1N0YXRlJikgY29uc3Q7CisgICAgSlNDOjpKU1Zh
bHVlIHByaW1hcnlLZXkoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDsKKyAgICBKU0M6OkpTVmFsdWUg
dmFsdWUoSlNDOjpFeGVjU3RhdGUmKSBjb25zdDsKICAgICBJREJBbnkqIHNvdXJjZSgpOwogCiAg
ICAgUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IHVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7CkBAIC0x
MTEsMTEgKzExMiw5IEBAIHByaXZhdGU6CiAgICAgSURCS2V5RGF0YSBtX2N1cnJlbnRLZXlEYXRh
OwogICAgIElEQktleURhdGEgbV9jdXJyZW50UHJpbWFyeUtleURhdGE7CiAKLSAgICAvLyBGSVhN
RTogV2hlbiBkaXRjaGluZyBMZWdhY3kgSURCIGFuZCBjb21iaW5pbmcgdGhpcyBpbXBsZW1lbnRh
dGlvbiB3aXRoIHRoZSBhYnN0cmFjdCBJREJDdXJzb3IsCi0gICAgLy8gdGhlc2UgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgbWVtYmVycyBzaG91bGQgYmUgSlNWYWx1ZXMgaW5zdGVhZC4KLSAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2RlcHJlY2F0ZWRDdXJyZW50S2V5OwotICAgIERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGVwcmVjYXRlZEN1cnJlbnRQcmltYXJ5S2V5OwotICAgIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fZGVwcmVjYXRlZEN1cnJlbnRWYWx1ZTsKKyAgICBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+IG1fY3VycmVudEtleTsKKyAgICBKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+IG1fY3VycmVudFByaW1hcnlLZXk7CisgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtu
b3duPiBtX2N1cnJlbnRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCmluZGV4IDA0NmY5
MDUuLjE3N2FkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmlkbApAQCAtMzIsOCArMzIsOCBAQAogXSBpbnRlcmZhY2UgSURCQ3Vyc29yIHsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHNvdXJjZTsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGRpcmVjdGlvbjsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgYW55IGtleTsK
LSAgICByZWFkb25seSBhdHRyaWJ1dGUgYW55IHByaW1hcnlLZXk7CisgICAgW0NhbGxXaXRoPVNj
cmlwdFN0YXRlLCBJbXBsZW1lbnRhdGlvblJldHVyblR5cGU9SlNWYWx1ZV0gcmVhZG9ubHkgYXR0
cmlidXRlIGFueSBrZXk7CisgICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlLCBJbXBsZW1lbnRhdGlv
blJldHVyblR5cGU9SlNWYWx1ZV0gcmVhZG9ubHkgYXR0cmlidXRlIGFueSBwcmltYXJ5S2V5Owog
CiAgICAgW0NhbGxXaXRoPVNjcmlwdFN0YXRlLCBSYWlzZXNFeGNlcHRpb25XaXRoTWVzc2FnZV0g
SURCUmVxdWVzdCB1cGRhdGUoYW55IHZhbHVlKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uV2l0aE1l
c3NhZ2VdIHZvaWQgYWR2YW5jZShbRW5mb3JjZVJhbmdlXSB1bnNpZ25lZCBsb25nIGNvdW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldp
dGhWYWx1ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JX
aXRoVmFsdWUuaWRsCmluZGV4IDg1MmUxNDcuLmM2YzM3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbApAQCAt
MzAsNSArMzAsNSBAQAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogICAgIEpTQ3VzdG9tTWFy
a0Z1bmN0aW9uLAogXSBpbnRlcmZhY2UgSURCQ3Vyc29yV2l0aFZhbHVlIDogSURCQ3Vyc29yIHsK
LSAgICByZWFkb25seSBhdHRyaWJ1dGUgYW55IHZhbHVlOworICAgIFtDYWxsV2l0aD1TY3JpcHRT
dGF0ZSwgSW1wbGVtZW50YXRpb25SZXR1cm5UeXBlPUpTVmFsdWVdIHJlYWRvbmx5IGF0dHJpYnV0
ZSBhbnkgdmFsdWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5LmNwcAppbmRleCAzNjhlYzBhLi43NDJmYzk1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcApAQCAtMjgsNyArMjgsNiBAQAog
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJET01SZXF1ZXN0U3Rh
dGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCkBAIC0xNDksOSArMTQ4LDggQEAgUmVm
UHRyPElEQk9wZW5EQlJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnQKIAogc2hvcnQgSURCRmFjdG9yeTo6Y21wKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBmaXJz
dFZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgc2Vjb25kVmFsdWUsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7Ci0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RT
dGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gZmlyc3QgPSBzY3JpcHRWYWx1ZVRv
SURCS2V5KCZyZXF1ZXN0U3RhdGUsIGZpcnN0VmFsdWUpOwotICAgIFJlZlB0cjxJREJLZXk+IHNl
Y29uZCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgc2Vjb25kVmFsdWUpOwor
ICAgIFJlZlB0cjxJREJLZXk+IGZpcnN0ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBm
aXJzdFZhbHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiBzZWNvbmQgPSBzY3JpcHRWYWx1ZVRvSURC
S2V5KGNvbnRleHQsIHNlY29uZFZhbHVlKTsKIAogICAgIEFTU0VSVChmaXJzdCk7CiAgICAgQVNT
RVJUKHNlY29uZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5jcHAKaW5kZXggYzY0NzMxNy4uZWQ4ZGE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJET01SZXF1ZXN0U3RhdGUuaCIKICNpbmNs
dWRlICJJREJBbnkuaCIKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiSURCQ3Vyc29yLmgiCkBAIC0xNjAsOCArMTU5LDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXBy
ZWMKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCSW5kZXg6OmNvdW50Iik7CiAKLSAgICBET01S
ZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBp
ZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleSk7CisgICAgUmVm
UHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250ZXh0LCBrZXkpOwog
ICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6OkludmFsaWQpIHsK
ICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhRXJyb3I7CiAgICAg
ICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb3VudCcg
b24gJ0lEQkluZGV4JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CkBAIC0y
NDIsOCArMjQwLDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXQKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiSURCSW5kZXg6OmdldCIpOwogCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0
ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lE
QktleSgmcmVxdWVzdFN0YXRlLCBrZXkpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNj
cmlwdFZhbHVlVG9JREJLZXkoY29udGV4dCwga2V5KTsKICAgICBpZiAoIWlkYktleSB8fCBpZGJL
ZXktPnR5cGUoKSA9PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCSW5kZXgnOiBUaGUgcGFyYW1l
dGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKQEAgLTI4Nyw4ICsyODQsNyBAQCBSZWZQdHI8SURC
UmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBjb25zdCBEZXByZQogewogICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6Z2V0S2V5Iik7
CiAKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQ
dHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtl
eSk7CisgICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleShjb250
ZXh0LCBrZXkpOwogICAgIGlmICghaWRiS2V5IHx8IGlkYktleS0+dHlwZSgpID09IEtleVR5cGU6
OkludmFsaWQpIHsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRh
RXJyb3I7CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBwYXJhbWV0ZXIgaXMgbm90IGEgdmFsaWQg
a2V5LiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
S2V5UmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFu
Z2UuY3BwCmluZGV4IDllMTk0NWQuLmEwZDE5NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5jcHAKQEAgLTI2LDEzICsyNiwxNSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCiAKLSNpbmNsdWRlICJE
T01SZXF1ZXN0U3RhdGUuaCIKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNs
dWRlICJJREJLZXlEYXRhLmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8SURCS2V5UmFu
Z2U+IElEQktleVJhbmdlOjpjcmVhdGUoUmVmUHRyPElEQktleT4mJiBrZXkpCkBAIC00OSwxNiAr
NTEsMTQgQEAgSURCS2V5UmFuZ2U6OklEQktleVJhbmdlKFJlZlB0cjxJREJLZXk+JiYgbG93ZXIs
IFJlZlB0cjxJREJLZXk+JiYgdXBwZXIsIExvd2VyQm8KIHsKIH0KIAotRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgSURCS2V5UmFuZ2U6Omxvd2VyVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK0pTVmFsdWUgSURCS2V5UmFuZ2U6Omxvd2VyVmFsdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVx
dWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICByZXR1cm4gaWRiS2V5VG9TY3JpcHRWYWx1ZSgmcmVx
dWVzdFN0YXRlLCBtX2xvd2VyKTsKKyAgICByZXR1cm4gaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUo
Y29udGV4dCwgSURCS2V5RGF0YShtX2xvd2VyLmdldCgpKSkuZ2V0KCk7CiB9CiAKLURlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIElEQktleVJhbmdlOjp1cHBlclZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIGNvbnN0CitKU1ZhbHVlIElEQktleVJhbmdlOjp1cHBlclZhbHVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgRE9NUmVxdWVzdFN0
YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgcmV0dXJuIGlkYktleVRvU2NyaXB0VmFs
dWUoJnJlcXVlc3RTdGF0ZSwgbV91cHBlcik7CisgICAgcmV0dXJuIGlkYktleURhdGFUb1Njcmlw
dFZhbHVlKGNvbnRleHQsIElEQktleURhdGEobV91cHBlci5nZXQoKSkpLmdldCgpOwogfQogCiBS
ZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpvbmx5KFJlZlB0cjxJREJLZXk+JiYga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTczLDggKzczLDcgQEAgUmVmUHRyPElEQktleVJhbmdl
PiBJREJLZXlSYW5nZTo6b25seShSZWZQdHI8SURCS2V5PiYmIGtleSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAKIFJlZlB0cjxJREJLZXlSYW5nZT4gSURCS2V5UmFuZ2U6Om9ubHkoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleVZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0
YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBzY3JpcHRWYWx1ZVRvSURC
S2V5KCZyZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBz
Y3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtleVZhbHVlKTsKICAgICBpZiAoIWtleSB8fCAh
a2V5LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0
YUVycm9yOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg1LDggKzg0LDcgQEAgUmVmUHRy
PElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6b25seShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBjb25zdCBEZXAKIAogUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6bG93
ZXJCb3VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSYgYm91bmRWYWx1ZSwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQ
dHI8SURCS2V5PiBib3VuZCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgYm91
bmRWYWx1ZSk7CisgICAgUmVmUHRyPElEQktleT4gYm91bmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5
KGNvbnRleHQsIGJvdW5kVmFsdWUpOwogICAgIGlmICghYm91bmQgfHwgIWJvdW5kLT5pc1ZhbGlk
KCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk3LDggKzk1LDcgQEAgUmVmUHRyPElEQktleVJhbmdl
PiBJREJLZXlSYW5nZTo6bG93ZXJCb3VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
LCBjb24KIAogUmVmUHRyPElEQktleVJhbmdlPiBJREJLZXlSYW5nZTo6dXBwZXJCb3VuZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgYm91bmRWYWx1ZSwgYm9vbCBvcGVuLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBET01S
ZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKCZjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBi
b3VuZCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgYm91bmRWYWx1ZSk7Cisg
ICAgUmVmUHRyPElEQktleT4gYm91bmQgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGJv
dW5kVmFsdWUpOwogICAgIGlmICghYm91bmQgfHwgIWJvdW5kLT5pc1ZhbGlkKCkpIHsKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTEwOSw5ICsxMDYsOCBAQCBSZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJh
bmdlOjp1cHBlckJvdW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbgogCiBS
ZWZQdHI8SURCS2V5UmFuZ2U+IElEQktleVJhbmdlOjpib3VuZChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgbG93ZXJWYWx1ZSwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHVwcGVyVmFsdWUsIGJvb2wgbG93ZXJPcGVu
LCBib29sIHVwcGVyT3BlbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgRE9NUmVxdWVzdFN0
YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7Ci0gICAgUmVmUHRyPElEQktleT4gbG93ZXIgPSBz
Y3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGxvd2VyVmFsdWUpOwotICAgIFJlZlB0
cjxJREJLZXk+IHVwcGVyID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0YXRlLCB1cHBl
clZhbHVlKTsKKyAgICBSZWZQdHI8SURCS2V5PiBsb3dlciA9IHNjcmlwdFZhbHVlVG9JREJLZXko
Y29udGV4dCwgbG93ZXJWYWx1ZSk7CisgICAgUmVmUHRyPElEQktleT4gdXBwZXIgPSBzY3JpcHRW
YWx1ZVRvSURCS2V5KGNvbnRleHQsIHVwcGVyVmFsdWUpOwogCiAgICAgaWYgKCFsb3dlciB8fCAh
bG93ZXItPmlzVmFsaWQoKSB8fCAhdXBwZXIgfHwgIXVwcGVyLT5pc1ZhbGlkKCkpIHsKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmgKaW5kZXggMWJkYTdmNy4uNDMwZmZj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFu
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5o
CkBAIC01OCw4ICs1OCw4IEBAIHB1YmxpYzoKICAgICBJREJLZXkqIGxvd2VyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb3dlci5nZXQoKTsgfQogICAgIElEQktleSogdXBwZXIoKSBjb25zdCB7IHJldHVy
biBtX3VwcGVyLmdldCgpOyB9CiAKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBsb3dlclZh
bHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKLSAgICBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSB1cHBlclZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKSBjb25zdDsKKyAgICBK
U0M6OkpTVmFsdWUgbG93ZXJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JikgY29uc3Q7Cisg
ICAgSlNDOjpKU1ZhbHVlIHVwcGVyVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpIGNvbnN0
OwogICAgIGJvb2wgbG93ZXJPcGVuKCkgY29uc3QgeyByZXR1cm4gbV9sb3dlclR5cGUgPT0gTG93
ZXJCb3VuZE9wZW47IH0KICAgICBib29sIHVwcGVyT3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fdXBw
ZXJUeXBlID09IFVwcGVyQm91bmRPcGVuOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbAppbmRleCBmMDYwMGZmLi4xMDQyMjBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCkBA
IC0yOCw4ICsyOCw4IEBACiAgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSwKICAgICBFbmFi
bGVkQXRSdW50aW1lPUluZGV4ZWREQiwKIF0gaW50ZXJmYWNlIElEQktleVJhbmdlIHsKLSAgICBb
SW1wbGVtZW50ZWRBcz1sb3dlclZhbHVlLENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgbG93ZXI7Ci0gICAgW0ltcGxlbWVudGVkQXM9dXBwZXJW
YWx1ZSxDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSByZWFkb25seSBhdHRyaWJ1dGUg
YW55IHVwcGVyOworICAgIFtJbXBsZW1lbnRlZEFzPWxvd2VyVmFsdWUsIENhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGF0aW9uUmV0dXJuVHlwZT1KU1ZhbHVlXSByZWFk
b25seSBhdHRyaWJ1dGUgYW55IGxvd2VyOworICAgIFtJbXBsZW1lbnRlZEFzPXVwcGVyVmFsdWUs
IENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGF0aW9uUmV0dXJuVHlw
ZT1KU1ZhbHVlXSByZWFkb25seSBhdHRyaWJ1dGUgYW55IHVwcGVyOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBib29sZWFuIGxvd2VyT3BlbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVh
biB1cHBlck9wZW47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCA4ZWQ1YjA5Li43MWYwMTdmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUg
IkRPTVJlcXVlc3RTdGF0ZS5oIgogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRl
ICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCkBAIC0xODIs
OCArMTgxLDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgRGUKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgRE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSgmY29udGV4dCk7
Ci0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5ID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVz
dFN0YXRlLCBrZXkpOworICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9J
REJLZXkoY29udGV4dCwga2V5KTsKICAgICBpZiAoIWlkYktleSB8fCBpZGJLZXktPnR5cGUoKSA9
PSBLZXlUeXBlOjpJbnZhbGlkKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6RGF0YUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgcGFyYW1ldGVyIGlz
IG5vdCBhIHZhbGlkIGtleS4iKTsKQEAgLTM5OSw4ICszOTcsNyBAQCBSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleAogCiBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om1vZGVybkRlbGV0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBKU0M6OkpTVmFsdWUga2V5LCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0
U3RhdGUoJmNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVl
VG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkg
PSBzY3JpcHRWYWx1ZVRvSURCS2V5KGNvbnRleHQsIGtleSk7CiAgICAgaWYgKCFpZGJLZXkgfHwg
aWRiS2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewogICAgICAgICBlYy5jb2RlID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2RlbGV0ZScgb24gJ0lEQk9iamVjdFN0b3Jl
JzogVGhlIHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CkBAIC01OTQsOCArNTkxLDcg
QEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiBjb250ZXh0LCBjb25zdAogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmpl
Y3RTdG9yZTo6Y291bnQiKTsKIAotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoJmNv
bnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleSA9IHNjcmlwdFZhbHVlVG9JREJLZXko
JnJlcXVlc3RTdGF0ZSwga2V5KTsKKyAgICBSZWZQdHI8SURCS2V5PiBpZGJLZXkgPSBzY3JpcHRW
YWx1ZVRvSURCS2V5KGNvbnRleHQsIGtleSk7CiAgICAgaWYgKCFpZGJLZXkgfHwgaWRiS2V5LT50
eXBlKCkgPT0gS2V5VHlwZTo6SW52YWxpZCkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkRhdGFFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvdW50JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUgcGFy
YW1ldGVyIGlzIG5vdCBhIHZhbGlkIGtleS4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5kZXggNjM2MjNhNi4uZTc2NDQwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTI5
LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkRP
TUVycm9yLmgiCi0jaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIKICNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGll
cy5oIgpAQCAtMzI2LDE5ICszMjUsMTkgQEAgdm9pZCBJREJSZXF1ZXN0Ojp1bmNhdWdodEV4Y2Vw
dGlvbkluRXZlbnRIYW5kbGVyKCkKIAogdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHQoY29uc3Qg
SURCS2V5RGF0YSoga2V5RGF0YSkKIHsKLSAgICBpZiAoIWtleURhdGEpIHsKKyAgICBhdXRvKiBj
b250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCB8fCAh
a2V5RGF0YSkgewogICAgICAgICBtX3Jlc3VsdCA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSB2YWx1ZSA9IGlkYktleURhdGFU
b1NjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgKmtleURhdGEpOwotICAgIG1f
cmVzdWx0ID0gSURCQW55OjpjcmVhdGUoV1RGTW92ZSh2YWx1ZSkpOworICAgIG1fcmVzdWx0ID0g
SURCQW55OjpjcmVhdGUoaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoKmNvbnRleHQsICprZXlEYXRh
KSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0KHVpbnQ2NF90IG51bWJlcikKIHsK
ICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBtX3Jlc3VsdCA9IElE
QkFueTo6Y3JlYXRlKERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+dm0oKSwgSlNDOjpKU1ZhbHVlKG51bWJlcikpKTsKKyAgICBtX3Jlc3VsdCA9IElEQkFu
eTo6Y3JlYXRlKEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLT52bSgpLCBKU0M6OkpTVmFsdWUobnVtYmVyKSkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6
OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25lKGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKQEAgLTM0
OSw4ICszNDgsNyBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdFRvU3RydWN0dXJlZENsb25l
KGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHNjcmlwdFZhbHVlID0gZGVzZXJpYWxp
emVJREJWYWx1ZSgqY29udGV4dCwgdmFsdWUpOwotICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVh
dGUoV1RGTW92ZShzY3JpcHRWYWx1ZSkpOworICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUo
ZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZSgqY29udGV4dCwgdmFsdWUpKTsKIH0KIAogdm9p
ZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1VuZGVmaW5lZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeU9iamVjdFN0b3Jl
LmNwcAppbmRleCA4YjhjZDc1Li5kZjY0ZjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlPYmplY3RTdG9yZS5jcHAK
QEAgLTMwMSw3ICszMDEsNyBAQCBJREJFcnJvciBNZW1vcnlPYmplY3RTdG9yZTo6dXBkYXRlSW5k
ZXhlc0ZvclB1dFJlY29yZChjb25zdCBJREJLZXlEYXRhJiBrZXksIGNvbgogewogICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFiYXNlVGhyZWFkVk0oKSk7CiAK
LSAgICBhdXRvIGpzVmFsdWUgPSBpZGJWYWx1ZURhdGFUb0pTVmFsdWUoVW5pcXVlSURCRGF0YWJh
c2U6OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHZhbHVlKTsKKyAgICBhdXRvIGpzVmFsdWUg
PSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZShVbmlxdWVJREJEYXRhYmFzZTo6ZGF0
YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgdmFsdWUpOwogICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBJ
REJFcnJvciBNZW1vcnlPYmplY3RTdG9yZTo6dXBkYXRlSW5kZXhlc0ZvclB1dFJlY29yZChjb25z
dCBJREJLZXlEYXRhJiBrZXksIGNvbgogCiAgICAgZm9yIChhdXRvJiBpbmRleCA6IG1faW5kZXhl
c0J5TmFtZS52YWx1ZXMoKSkgewogICAgICAgICBJbmRleEtleSBpbmRleEtleTsKLSAgICAgICAg
Z2VuZXJhdGVJbmRleEtleUZvclZhbHVlKFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVh
ZEV4ZWNTdGF0ZSgpLCBpbmRleC0+aW5mbygpLCBqc1ZhbHVlLCBpbmRleEtleSk7CisgICAgICAg
IGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1ZShVbmlxdWVJREJEYXRhYmFzZTo6ZGF0YWJhc2VUaHJl
YWRFeGVjU3RhdGUoKSwgaW5kZXgtPmluZm8oKSwganNWYWx1ZS5nZXQoKSwgaW5kZXhLZXkpOwog
CiAgICAgICAgIGlmIChpbmRleEtleS5pc051bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMzM5LDEyICszMzksMTIgQEAgSURCRXJyb3IgTWVtb3J5T2JqZWN0U3RvcmU6OnBvcHVsYXRl
SW5kZXhXaXRoRXhpc3RpbmdSZWNvcmRzKE1lbW9yeUluZGV4JiBpbmRleCkKICAgICBKU0xvY2tI
b2xkZXIgbG9ja2VyKFVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZVRocmVhZFZNKCkpOwogCiAg
ICAgZm9yIChhdXRvIGl0ZXJhdG9yIDogKm1fa2V5VmFsdWVTdG9yZSkgewotICAgICAgICBhdXRv
IGpzVmFsdWUgPSBpZGJWYWx1ZURhdGFUb0pTVmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6OmRhdGFi
YXNlVGhyZWFkRXhlY1N0YXRlKCksIGl0ZXJhdG9yLnZhbHVlKTsKKyAgICAgICAgYXV0byBqc1Zh
bHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoVW5pcXVlSURCRGF0YWJhc2U6
OmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIGl0ZXJhdG9yLnZhbHVlKTsKICAgICAgICAgaWYg
KGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICAgICAgSW5kZXhLZXkgaW5kZXhLZXk7Ci0gICAgICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JW
YWx1ZShVbmlxdWVJREJEYXRhYmFzZTo6ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgaW5kZXgu
aW5mbygpLCBqc1ZhbHVlLCBpbmRleEtleSk7CisgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlGb3JW
YWx1ZShVbmlxdWVJREJEYXRhYmFzZTo6ZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgaW5kZXgu
aW5mbygpLCBqc1ZhbHVlLmdldCgpLCBpbmRleEtleSk7CiAKICAgICAgICAgaWYgKGluZGV4S2V5
LmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuY3BwCmluZGV4IDI4MmEyMTMuLmZkZDFlZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwCkBAIC0xNDY4LDcgKzE0NjgsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnVwZGF0ZU9uZUluZGV4Rm9yQWRkUmVjb3JkKGNvbnN0IElEQkluZGV4SW5mbyYg
aQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgSW5kZXhLZXkgaW5kZXhLZXk7Ci0gICAgZ2Vu
ZXJhdGVJbmRleEtleUZvclZhbHVlKCptX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBpbmZv
LCBqc1ZhbHVlLCBpbmRleEtleSk7CisgICAgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVlKCptX2ds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBpbmZvLCBqc1ZhbHVlLmdldCgpLCBpbmRleEtleSk7
CiAKICAgICBpZiAoaW5kZXhLZXkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC0x
NDg4LDcgKzE0ODgsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFs
bEluZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgIGJvb2wgYW55UmVj
b3Jkc1N1Y2NlZWRlZCA9IGZhbHNlOwogICAgIGZvciAoYXV0byYgaW5kZXggOiBpbmZvLmluZGV4
TWFwKCkudmFsdWVzKCkpIHsKICAgICAgICAgSW5kZXhLZXkgaW5kZXhLZXk7Ci0gICAgICAgIGdl
bmVyYXRlSW5kZXhLZXlGb3JWYWx1ZSgqbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgaW5k
ZXgsIGpzVmFsdWUsIGluZGV4S2V5KTsKKyAgICAgICAgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVl
KCptX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBpbmRleCwganNWYWx1ZS5nZXQoKSwgaW5k
ZXhLZXkpOwogCiAgICAgICAgIGlmIChpbmRleEtleS5pc051bGwoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggNjIzMjI3YS4uYmViODY0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC03NjUsMTggKzc2NSwxOCBAQCB2b2lkIFVu
aXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQodWludDY0X3QgY2FsbGJhY2tJZGVudGlm
aWVyLCBjb25zdCBJREJSZQogICAgIGlmICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVjdFN0
b3JlSW5mby0+a2V5UGF0aCgpLmlzTnVsbCgpKSB7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
ZXIoZGF0YWJhc2VUaHJlYWRWTSgpKTsKIAotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzZXJp
YWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgb3Jp
Z2luYWxSZWNvcmRWYWx1ZS5kYXRhKCkpOwotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQo
KSkgeworICAgICAgICBhdXRvIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFs
dWUoZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgb3JpZ2luYWxSZWNvcmRWYWx1ZS5kYXRhKCkp
OworICAgICAgICBpZiAodmFsdWUuZ2V0KCkuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAg
bV9zZXJ2ZXIucG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhp
cywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQsIGNhbGxiYWNrSWRlbnRp
ZmllciwgSURCRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFpbnRFcnJvciwgQVND
SUlMaXRlcmFsKCJVbmFibGUgdG8gZGVzZXJpYWxpemUgcmVjb3JkIHZhbHVlIGZvciByZWNvcmQg
a2V5IGluamVjdGlvbiIpKSwgdXNlZEtleSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoZGF0YWJhc2VU
aHJlYWRFeGVjU3RhdGUoKSwgdXNlZEtleSwgdmFsdWUsIG9iamVjdFN0b3JlSW5mby0+a2V5UGF0
aCgpKSkgeworICAgICAgICBpZiAoIWluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShkYXRhYmFz
ZVRocmVhZEV4ZWNTdGF0ZSgpLCB1c2VkS2V5LCB2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmVJbmZv
LT5rZXlQYXRoKCkpKSB7CiAgICAgICAgICAgICBtX3NlcnZlci5wb3N0RGF0YWJhc2VUYXNrUmVw
bHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBl
cmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBpbmplY3Qg
cmVjb3JkIGtleSBpbnRvIHJlY29yZCB2YWx1ZSIpKSwgdXNlZEtleSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBzZXJpYWxpemVkVmFsdWUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgdmFs
dWUsIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCB2
YWx1ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIGlmIChkYXRhYmFzZVRocmVh
ZEV4ZWNTdGF0ZSgpLmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBtX3NlcnZlci5wb3N0
RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURC
RGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJv
cihJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yLCBBU0NJSUxpdGVyYWwoIlVu
YWJsZSB0byBzZXJpYWxpemUgcmVjb3JkIHZhbHVlIGFmdGVyIGluamVjdGluZyByZWNvcmQga2V5
IikpLCB1c2VkS2V5KSk7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IGJjZmZkODIuLjBm
YzEzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIE1p
Y2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOSw3ICszMCw2IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogCi0jaW5jbHVkZSAiRE9N
UmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAiSURCSW5kZXhJbmZvLmgiCiAjaW5jbHVkZSAiSURC
S2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5RGF0YS5oIgpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1
ZGUgIkluZGV4S2V5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJUaHJlYWRTYWZlRGF0YUJ1ZmZlci5oIgogCkBAIC03
OCw0MyArNzksNiBAQCBzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiBv
YmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLUpTVmFsdWUgaWRiS2V5RGF0YVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgY29u
c3QgSURCS2V5RGF0YSYga2V5RGF0YSkKLXsKLSAgICBpZiAoa2V5RGF0YS5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIo
ZXhlYy52bSgpLmFwaUxvY2soKSk7Ci0KLSAgICBzd2l0Y2ggKGtleURhdGEudHlwZSgpKSB7Ci0g
ICAgY2FzZSBLZXlUeXBlOjpBcnJheToKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVmVj
dG9yPElEQktleURhdGE+JiBpbkFycmF5ID0ga2V5RGF0YS5hcnJheSgpOwotICAgICAgICAgICAg
c2l6ZV90IHNpemUgPSBpbkFycmF5LnNpemUoKTsKLSAgICAgICAgICAgIEpTQXJyYXkqIG91dEFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheSgmZXhlYywgMCwgZXhlYy5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIHNpemUpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBhcnJheUtleSA9IGluQXJyYXkuYXQoaSk7Ci0g
ICAgICAgICAgICAgICAgb3V0QXJyYXktPnB1dERpcmVjdEluZGV4KCZleGVjLCBpLCBpZGJLZXlE
YXRhVG9KU1ZhbHVlKGV4ZWMsIGFycmF5S2V5KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZShvdXRBcnJheSk7Ci0gICAgICAgIH0KLSAgICBjYXNlIEtleVR5cGU6
OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZleGVjLCBrZXlEYXRh
LnN0cmluZygpKTsKLSAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0gICAgICAgIHJldHVybiBqc0Rh
dGVPck51bGwoJmV4ZWMsIGtleURhdGEuZGF0ZSgpKTsKLSAgICBjYXNlIEtleVR5cGU6Ok51bWJl
cjoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGtleURhdGEubnVtYmVyKCkpOwotICAgIGNhc2Ug
S2V5VHlwZTo6TWluOgotICAgIGNhc2UgS2V5VHlwZTo6TWF4OgotICAgIGNhc2UgS2V5VHlwZTo6
SW52YWxpZDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotCi19Ci0KIHN0YXRpYyBKU1ZhbHVlIGlkYktleVRvSlNWYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElEQktleSog
a2V5KQogewogICAgIGlmICgha2V5IHx8ICFleGVjKSB7CkBAIC0yMDIsMTMgKzE2NiwxMyBAQCBz
dGF0aWMgUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlkKCk7CiB9
CiAKLUlEQktleVBhdGggaWRiS2V5UGF0aEZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5UGF0aFZhbHVlKQorSURCS2V5UGF0aCBpZGJLZXlQYXRoRnJvbVZhbHVlKEV4ZWNTdGF0
ZSYgZXhlYywgSlNWYWx1ZSBrZXlQYXRoVmFsdWUpCiB7CiAgICAgSURCS2V5UGF0aCBrZXlQYXRo
OwogICAgIGlmIChpc0pTQXJyYXkoa2V5UGF0aFZhbHVlKSkKLSAgICAgICAga2V5UGF0aCA9IElE
QktleVBhdGgodG9OYXRpdmVBcnJheTxTdHJpbmc+KGV4ZWMsIGtleVBhdGhWYWx1ZSkpOworICAg
ICAgICBrZXlQYXRoID0gSURCS2V5UGF0aCh0b05hdGl2ZUFycmF5PFN0cmluZz4oJmV4ZWMsIGtl
eVBhdGhWYWx1ZSkpOwogICAgIGVsc2UKLSAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5
UGF0aFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgIGtleVBhdGgg
PSBJREJLZXlQYXRoKGtleVBhdGhWYWx1ZS50b1N0cmluZygmZXhlYyktPnZhbHVlKCZleGVjKSk7
CiAgICAgcmV0dXJuIGtleVBhdGg7CiB9CiAKQEAgLTIyNCw3ICsxODgsNyBAQCBzdGF0aWMgSlNW
YWx1ZSBnZXROdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcm9vdFZh
bHVlLCBjb25zdCBWZQogICAgIHJldHVybiBjdXJyZW50VmFsdWU7CiB9CiAKLXN0YXRpYyBSZWZQ
dHI8SURCS2V5PiBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgpCitzdGF0aWMgUmVmUHRyPElEQktleT4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9t
U2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNWYWx1ZSYgdmFs
dWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRo
RWxlbWVudHM7CiAgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CkBAIC0yNzQsMzMgKzIz
OCw3IEBAIHN0YXRpYyBib29sIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSByb290VmFsdWUsIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0
YXRlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFs
dWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKLQotICAgIEFTU0VSVChrZXlQYXRoLnR5cGUo
KSA9PSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpTdHJpbmcpOwotCi0gICAgVmVjdG9yPFN0cmlu
Zz4ga2V5UGF0aEVsZW1lbnRzOwotICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwotICAg
IElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9y
KTsKLSAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3I6Ok5vbmUpOwotCi0g
ICAgaWYgKGtleVBhdGhFbGVtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOwotCi0gICAgSlNW
YWx1ZSBwYXJlbnQgPSBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aChleGVjLCB2YWx1ZS5qc1ZhbHVl
KCksIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOwotICAgIGlm
IChwYXJlbnQuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFzZXQoZXhlYywgcGFyZW50LCBrZXlQYXRoRWxlbWVudHMubGFzdCgpLCBpZGJLZXlUb0pTVmFs
dWUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBrZXkuZ2V0KCkpKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgaW5qZWN0SURC
S2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBjb25zdCBJREJLZXlEYXRh
JiBrZXlEYXRhLCBKU0M6OkpTVmFsdWUgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgp
Citib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgImluamVjdElEQktleUludG9TY3JpcHRWYWx1
ZSIpOwogCkBAIC0zMjgsNDggKzI2Niw4IEBAIGJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZh
bHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVJlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoIik7Ci0gICAgQVNT
RVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKIAotICAgIGlmIChrZXlQYXRoLnR5cGUoKSA9PSBJbmRl
eGVkREI6OktleVBhdGhUeXBlOjpBcnJheSkgewotICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktl
eT4+IHJlc3VsdDsKLSAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0
aC5hcnJheSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBpbnRlcm5hbENyZWF0ZUlE
QktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGFycmF5W2ldKTsKLSAg
ICAgICAgICAgIGlmICgha2V5KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGtleVBhdGgu
dHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OlN0cmluZyk7Ci0gICAgcmV0dXJuIGlu
dGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwg
a2V5UGF0aC5zdHJpbmcoKSk7Ci19Ci0KLVJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5
RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKLXsKLSAg
ICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkpOwotCi0gICAgaWYgKGtleVBhdGgudHlwZSgpID09
IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OkFycmF5KSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8
SURCS2V5Pj4gcmVzdWx0OwotICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBr
ZXlQYXRoLmFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGludGVybmFsQ3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCgmZXhlYywgdmFsdWUsIGFycmF5W2ld
KTsKLSAgICAgICAgICAgIGlmICgha2V5KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGtl
eVBhdGgudHlwZSgpID09IEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OlN0cmluZyk7Ci0gICAgcmV0
dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCgmZXhlYywg
dmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOwotfQotCi1SZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBK
U0M6OkpTVmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorUmVmUHRyPElE
QktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0
ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgp
CiB7CiAgICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKIApAQCAtMzkwLDE4ICsyODgsNyBA
QCBSZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgoRXhlY1N0YXRlJiBleGVjLCBjb25zdAogICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoJmV4ZWMsIHZhbHVlLCBrZXlQYXRoLnN0cmluZygp
KTsKIH0KIAotYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRE9NUmVxdWVzdFN0
YXRlKiByZXF1ZXN0U3RhdGUsIGNvbnN0IEpTQzo6SlNWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0
IElEQktleVBhdGgmIGtleVBhdGgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJjYW5JbmplY3RJ
REJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKLQotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gcmVx
dWVzdFN0YXRlLT5leGVjKCk7Ci0gICAgaWYgKCFleGVjKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKCpleGVjLCBzY3Jp
cHRWYWx1ZSwga2V5UGF0aCk7Ci19Ci0KLWJvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZh
bHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjU3RhdGUsIGNvbnN0IEpTQzo6SlNWYWx1ZSYgc2NyaXB0
VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCitib29sIGNhbkluamVjdElEQktleUlu
dG9TY3JpcHRWYWx1ZShFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgSlNWYWx1ZSYgc2NyaXB0
VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEks
ICJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIApAQCAtNDE3LDEzMyArMzA0LDYw
IEBAIGJvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiBl
eGVjU3RhdGUsIGNvbnN0IEpTQzo6SlNWYWx1CiAgICAgcmV0dXJuIGNhbkluamVjdE50aFZhbHVl
T25LZXlQYXRoKCZleGVjU3RhdGUsIHNjcmlwdFZhbHVlLCBrZXlQYXRoRWxlbWVudHMsIGtleVBh
dGhFbGVtZW50cy5zaXplKCkgLSAxKTsKIH0KIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVz
ZXJpYWxpemVJREJWYWx1ZShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQotewotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IHBycFZhbHVlOwotICAgIEpTVmFsdWUgcmVzdWx0OwotICAg
IGlmIChzZXJpYWxpemVkVmFsdWUpCi0gICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRWYWx1ZS0+
ZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICBl
bHNlCi0gICAgICAgIHJlc3VsdCA9IGpzTnVsbCgpOwotICAgIHJldHVybiBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZShleGVjLT52bSgpLCByZXN1bHQpOwotfQogCi1zdGF0aWMgSlNDOjpKU1ZhbHVl
IGRlc2VyaWFsaXplSURCVmFsdWVEYXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBj
b25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocykKK3N0YXRpYyBT
dHJvbmc8VW5rbm93bj4gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShFeGVjU3RhdGUmIGV4
ZWMsIGNvbnN0IElEQlZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlRGF0YS5kYXRhKCkp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGlmICghdmFsdWUuZGF0YSgpLmRh
dGEoKSkKKyAgICAgICAgcmV0dXJuIHsgZXhlYy52bSgpLCBqc1VuZGVmaW5lZCgpIH07CiAKLSAg
ICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEgPSAqdmFsdWVEYXRhLmRhdGEoKTsKKyAgICBj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEgPSAqdmFsdWUuZGF0YSgpLmRhdGEoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdDsKICAgICBpZiAoZGF0YS5zaXplKCkpIHsKICAgICAgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKFZlY3Rvcjx1aW50OF90PihkYXRhKSk7CiAKICAgICAg
ICAgZXhlYy52bSgpLmFwaUxvY2soKS5sb2NrKCk7Ci0gICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6
ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoJmV4ZWMsIGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpLCAw
LCBOb25UaHJvd2luZywgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMpOworICAgICAgICByZXN1bHQg
PSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCZleGVjLCBleGVjLmxleGljYWxHbG9iYWxP
YmplY3QoKSwgMCwgTm9uVGhyb3dpbmcsIHZhbHVlLmJsb2JVUkxzKCksIHZhbHVlLmJsb2JGaWxl
UGF0aHMoKSk7CiAgICAgICAgIGV4ZWMudm0oKS5hcGlMb2NrKCkudW5sb2NrKCk7CiAgICAgfSBl
bHNlCiAgICAgICAgIHJlc3VsdCA9IGpzTnVsbCgpOwogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4geyBleGVjLnZtKCksIHJlc3VsdCB9OwogfQogCi1EZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQorU3Ryb25nPFVua25v
d24+IGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSURCVmFsdWUmIHZhbHVlKQogewotICAgIERPTVJlcXVlc3RTdGF0ZSBz
dGF0ZSgmY29udGV4dCk7Ci0gICAgYXV0byogZXhlY1N0YXRlID0gc3RhdGUuZXhlYygpOwotCisg
ICAgYXV0byogZXhlY1N0YXRlID0gY29udGV4dC5leGVjU3RhdGUoKTsKICAgICBpZiAoIWV4ZWNT
dGF0ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiB7IGV4ZWNTdGF0ZS0+dm0o
KSwgZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoKmV4ZWNTdGF0ZSwgdmFsdWVEYXRh
KSB9OworICAgIHJldHVybiBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpleGVjU3RhdGUs
IHZhbHVlKTsKIH0KIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREJWYWx1ZSYgdmFsdWUp
CitTdHJvbmc8VW5rbm93bj4gZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFsdWUoRXhlY1N0
YXRlJiBleGVjLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQogewotICAg
IERPTVJlcXVlc3RTdGF0ZSBzdGF0ZSgmY29udGV4dCk7Ci0gICAgYXV0byogZXhlY1N0YXRlID0g
c3RhdGUuZXhlYygpOwotCi0gICAgaWYgKCFleGVjU3RhdGUpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICByZXR1cm4geyBleGVjU3RhdGUtPnZtKCksIGRlc2VyaWFsaXplSURCVmFsdWVEYXRh
VG9KU1ZhbHVlKCpleGVjU3RhdGUsIHZhbHVlLmRhdGEoKSwgdmFsdWUuYmxvYlVSTHMoKSwgdmFs
dWUuYmxvYkZpbGVQYXRocygpKSB9OwotfQotCi1KU0M6OkpTVmFsdWUgZGVzZXJpYWxpemVJREJW
YWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFRocmVhZFNhZmVE
YXRhQnVmZmVyJiB2YWx1ZURhdGEpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gZHVtbXlVUkxzLCBk
dW1teUZpbGVQYXRoczsKLSAgICByZXR1cm4gZGVzZXJpYWxpemVJREJWYWx1ZURhdGFUb0pTVmFs
dWUoZXhlYywgdmFsdWVEYXRhLCBkdW1teVVSTHMsIGR1bW15RmlsZVBhdGhzKTsKKyAgICByZXR1
cm4gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShleGVjLCBJREJWYWx1ZSh2YWx1ZURhdGEp
KTsKIH0KIAotRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZl
cihET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IHBycEJ1ZmZlciwgYm9vbCBrZXlJc0RlZmluZWQpCitSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1
ZVRvSURCS2V5KEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgc2NyaXB0VmFsdWUpCiB7
Ci0gICAgaWYgKHBycEJ1ZmZlcikgewotICAgICAgICBWZWN0b3I8dWludDhfdD4gdmFsdWU7Ci0g
ICAgICAgIHZhbHVlLmFwcGVuZChwcnBCdWZmZXItPmRhdGEoKSwgcHJwQnVmZmVyLT5zaXplKCkp
OwotICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihyZXF1ZXN0U3RhdGUt
PmV4ZWMoKSwgV1RGTW92ZSh2YWx1ZSksIGtleUlzRGVmaW5lZCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHJlcXVlc3RTdGF0ZS0+ZXhlYygpLT52bSgpLCBq
c051bGwoKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlIGlkYlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSYgZXhlYywgVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyKQotewotICAgIGlmIChi
dWZmZXIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMoV1RGTW92ZShidWZmZXIpKTsKLSAgICByZXR1cm4g
c2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgmZXhlYywgZXhlYy5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIDAsIE5vblRocm93aW5nKTsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVl
KCZleGVjLCBzY3JpcHRWYWx1ZSk7CiB9CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2Vy
aWFsaXplSURCVmFsdWVCdWZmZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFZlY3Rvcjx1aW50OF90
PiYmIGJ1ZmZlciwgYm9vbCBrZXlJc0RlZmluZWQpCitSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1
ZVRvSURCS2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IEpTVmFsdWUm
IHNjcmlwdFZhbHVlKQogewotICAgIEFTU0VSVChleGVjKTsKLQotICAgIC8vIElmIHRoZSBrZXkg
ZG9lc24ndCBleGlzdCwgdGhlbiB0aGUgdmFsdWUgbXVzdCBiZSB1bmRlZmluZWQgKGFzIG9wcG9z
ZWQgdG8gbnVsbCkuCi0gICAgaWYgKCFrZXlJc0RlZmluZWQpIHsKLSAgICAgICAgLy8gV2UgZWl0
aGVyIHNob3VsZG4ndCBoYXZlIGEgYnVmZmVyIG9yIGl0IHNob3VsZCBiZSBvZiBzaXplIDAuCi0g
ICAgICAgIEFTU0VSVCghYnVmZmVyLnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZShleGVjLT52bSgpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGlkYlZhbHVlRGF0YVRvSlNWYWx1ZSgqZXhlYywgV1RGTW92ZShidWZm
ZXIpKTsKLSAgICByZXR1cm4gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoZXhlYy0+dm0oKSwgcmVz
dWx0KTsKKyAgICBhdXRvKiBleGVjU3RhdGUgPSBjb250ZXh0LmV4ZWNTdGF0ZSgpOworICAgIHJl
dHVybiBleGVjU3RhdGUgPyBzY3JpcHRWYWx1ZVRvSURCS2V5KCpleGVjU3RhdGUsIHNjcmlwdFZh
bHVlKSA6IG51bGxwdHI7CiB9CiAKLUpTVmFsdWUgaWRiVmFsdWVEYXRhVG9KU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlJiBleGVjLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKQor
U3Ryb25nPFVua25vd24+IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCiB7Ci0gICAgaWYgKCF2
YWx1ZURhdGEuZGF0YSgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIHJl
dHVybiBpZGJWYWx1ZURhdGFUb0pTVmFsdWUoZXhlYywgVmVjdG9yPHVpbnQ4X3Q+KCp2YWx1ZURh
dGEuZGF0YSgpKSk7Ci19CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0ga2V5RGF0YS5tYXliZUNy
ZWF0ZUlEQktleSgpOwogCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZh
bHVlKERPTVJlcXVlc3RTdGF0ZSogcmVxdWVzdFN0YXRlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5
KQotewotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJlcXVlc3RTdGF0ZS0+ZXhlYygpOworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGNvbnRleHQuZXhlY1N0YXRlKCk7CiAgICAgaWYgKCFleGVjKQogICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKGV4
ZWMtPnZtKCksIGlkYktleVRvSlNWYWx1ZShleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBrZXkuZ2V0KCkpKTsKLX0KLQotUmVmUHRy
PElEQktleT4gc2NyaXB0VmFsdWVUb0lEQktleShET01SZXF1ZXN0U3RhdGUqIHJlcXVlc3RTdGF0
ZSwgY29uc3QgSlNDOjpKU1ZhbHVlJiBzY3JpcHRWYWx1ZSkKLXsKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByZXF1ZXN0U3RhdGUtPmV4ZWMoKTsKLSAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZh
bHVlKGV4ZWMsIHNjcmlwdFZhbHVlKTsKLX0KLQotUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVU
b0lEQktleShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTQzo6SlNWYWx1ZSYgc2NyaXB0VmFsdWUp
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1ZSgmZXhlYywgc2NyaXB0VmFsdWUp
OwotfQotCi1EZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBpZGJLZXlEYXRhVG9TY3JpcHRWYWx1ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRh
KQotewotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXko
KTsKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKGNvbnRleHQpOwotICAgIHJldHVy
biBpZGJLZXlUb1NjcmlwdFZhbHVlKCZyZXF1ZXN0U3RhdGUsIGtleS5nZXQoKSk7CisgICAgcmV0
dXJuIHsgZXhlYy0+dm0oKSwgaWRiS2V5VG9KU1ZhbHVlKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGtleS5nZXQoKSkgfTsKIH0K
IAogc3RhdGljIFZlY3RvcjxJREJLZXlEYXRhPiBjcmVhdGVLZXlQYXRoQXJyYXkoRXhlY1N0YXRl
JiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKaW5kZXggMTE1
MGJjZC4uOGNlZDIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJp
bmRpbmdVdGlsaXRpZXMuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDUxICszMCwzMyBAQAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgPGJpbmRp
bmdzL1NjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBET01SZXF1ZXN0U3RhdGU7CiBjbGFzcyBJREJJbmRleEluZm87
CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJLZXlEYXRhOwogY2xhc3MgSURCS2V5UGF0aDsKIGNs
YXNzIElEQlZhbHVlOwogY2xhc3MgSW5kZXhLZXk7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFz
cyBUaHJlYWRTYWZlRGF0YUJ1ZmZlcjsKIAotSURCS2V5UGF0aCBpZGJLZXlQYXRoRnJvbVZhbHVl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKK0lEQktleVBhdGggaWRiS2V5UGF0aEZy
b21WYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiAKLWJvb2wgaW5qZWN0SURC
S2V5SW50b1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQdHI8SURCS2V5Piwg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Ci1ib29sIGluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IElEQktleURhdGEm
LCBKU0M6OkpTVmFsdWUsIGNvbnN0IElEQktleVBhdGgmKTsKLQotUmVmUHRyPElEQktleT4gY3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwotUmVmUHRyPElE
QktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRo
Jik7CiBSZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQ
YXRoJik7Ci0KLWJvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKERPTVJlcXVlc3RT
dGF0ZSosIGNvbnN0IEpTQzo6SlNWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKIGJvb2wgY2Fu
SW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpK
U1ZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBJREJLZXlEYXRhJiwgSlNDOjpKU1ZhbHVlLCBj
b25zdCBJREJLZXlQYXRoJik7CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXpl
SURCVmFsdWUoRE9NUmVxdWVzdFN0YXRlKiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+KTsKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWVEYXRhKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVE
YXRhKTsKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IElEQlZhbHVlJik7Ci1EZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVyKERPTVJlcXVlc3RTdGF0ZSosIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiwgYm9vbCBrZXlJc0RlZmluZWQpOwotV0VCQ09SRV9FWFBPUlQgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihKU0M6OkV4ZWNT
dGF0ZSosIFZlY3Rvcjx1aW50OF90PiYmLCBib29sIGtleUlzRGVmaW5lZCk7CitKU0M6OlN0cm9u
ZzxKU0M6OlVua25vd24+IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBJREJLZXlEYXRhJik7Cit2b2lkIGdlbmVyYXRlSW5kZXhLZXlGb3JWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IElEQkluZGV4SW5mbyYsIEpTQzo6SlNWYWx1ZSwgSW5k
ZXhLZXkmIG91dEtleSk7CiAKLUpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRv
SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1
ZURhdGEpOworSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9K
U1ZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBJREJWYWx1ZSYpOworSlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPiBkZXNlcmlhbGl6ZUlEQlZhbHVlRGF0YVRvSlNWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZURhdGEpOwogCi1E
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZhbHVlKERPTVJlcXVlc3RTdGF0
ZSosIFBhc3NSZWZQdHI8SURCS2V5Pik7Ci1SZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURC
S2V5KERPTVJlcXVlc3RTdGF0ZSosIGNvbnN0IEpTQzo6SlNWYWx1ZSYpOworUmVmUHRyPElEQktl
eT4gc2NyaXB0VmFsdWVUb0lEQktleShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgSlND
OjpKU1ZhbHVlJik7CiBSZWZQdHI8SURCS2V5PiBzY3JpcHRWYWx1ZVRvSURCS2V5KEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgSlNDOjpKU1ZhbHVlJik7CiAKLURlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
IGlkYktleURhdGFUb1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBJ
REJLZXlEYXRhJik7Ci0KLUpTQzo6SlNWYWx1ZSBpZGJWYWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWVEYXRhKTsKLXZvaWQg
Z2VuZXJhdGVJbmRleEtleUZvclZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURCSW5kZXhJ
bmZvJiwgSlNDOjpKU1ZhbHVlLCBJbmRleEtleSYgb3V0S2V5KTsKLUpTQzo6SlNWYWx1ZSBpZGJL
ZXlEYXRhVG9KU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSURCS2V5RGF0YSYpOwotCiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAppbmRleCA3ZDZmM2Q5Li5iN2ZhOWVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCkBAIC05
OCw3ICs5OCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIElEQkFueSogaWRiQW55KQogICAgIGNhc2UgSURCQW55OjpUeXBl
OjpJREJUcmFuc2FjdGlvbjoKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBpZGJBbnktPmlkYlRyYW5zYWN0aW9uKCkpOwogICAgIGNhc2UgSURCQW55OjpUeXBlOjpTY3Jp
cHRWYWx1ZToKLSAgICAgICAgcmV0dXJuIGlkYkFueS0+c2NyaXB0VmFsdWUoKS5qc1ZhbHVlKCk7
CisgICAgICAgIHJldHVybiBpZGJBbnktPnNjcmlwdFZhbHVlKCk7CiAgICAgY2FzZSBJREJBbnk6
OlR5cGU6OlN0cmluZzoKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGlk
YkFueS0+c3RyaW5nKCkpOwogICAgIGNhc2UgSURCQW55OjpUeXBlOjpJbnRlZ2VyOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAppbmRl
eCBkN2Y1ODFhLi40YWRlZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcApAQCAtNjYsNyArNjYsNyBAQCBKU1ZhbHVlIEpTSURC
RGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKEV4ZWNTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBpZiAoIWtleVBhdGhWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21W
YWx1ZSgmc3RhdGUsIGtleVBhdGhWYWx1ZSk7CisgICAgICAgICAgICBrZXlQYXRoID0gaWRiS2V5
UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5UGF0aFZhbHVlKTsKICAgICAgICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJP
YmplY3RTdG9yZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9i
amVjdFN0b3JlQ3VzdG9tLmNwcAppbmRleCA3NDRkOWEzLi40MWQ3YzhjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9iamVjdFN0b3JlQ3VzdG9tLmNwcApA
QCAtMTE5LDcgKzExOSw3IEBAIEpTVmFsdWUgSlNJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgo
RXhlY1N0YXRlJiBzdGF0ZSkKICAgICBJREJLZXlQYXRoIGtleVBhdGg7CiAgICAgSlNWYWx1ZSBr
ZXlQYXRoVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoIWtleVBhdGhWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1
ZSgmc3RhdGUsIGtleVBhdGhWYWx1ZSk7CisgICAgICAgIGtleVBhdGggPSBpZGJLZXlQYXRoRnJv
bVZhbHVlKHN0YXRlLCBrZXlQYXRoVmFsdWUpOwogICAgIGVsc2UgewogICAgICAgICBFeGNlcHRp
b25Db2RlV2l0aE1lc3NhZ2UgZWM7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6U3ludGF4RXJyb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDExZDViNTUuLjg3MGVmYzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC00
MzQ5LDkgKzQzNDksMTIgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICByZXR1cm4gImpz
QXJyYXkoc3RhdGUsICR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpLCAkdmFsdWUpIjsKICAgICB9
CiAKKyAgICBteSAkcmV0dXJuVHlwZSA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJJbXBsZW1lbnRhdGlvblJldHVyblR5cGUifTsKICAgICBpZiAoJHR5cGUgZXEgImFueSIpIHsK
ICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJEb2N1bWVudCIpIHsKICAgICAgICAgICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIiwgJGNvbmRp
dGlvbmFsKTsKKyAgICAgICAgfSBlbHNpZiAoZGVmaW5lZCAkcmV0dXJuVHlwZSBhbmQgJHJldHVy
blR5cGUgZXEgIkpTVmFsdWUiKSB7CisgICAgICAgICAgICByZXR1cm4gIiR2YWx1ZSI7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gIigkdmFsdWUuaGFzTm9WYWx1ZSgpID8g
anNOdWxsKCkgOiAkdmFsdWUuanNWYWx1ZSgpKSI7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CmluZGV4IGFmYWQ5MGQu
LmI4MjcwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURM
QXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExB
dHRyaWJ1dGVzLnR4dApAQCAtNjcsOSArNjcsMTAgQEAgR2VuZXJhdGVJc1JlYWNoYWJsZT18SW1w
bHxJbXBsV2ViR0xSZW5kZXJpbmdDb250ZXh0fEltcGxEb2N1bWVudHxJbXBsRWxlbWVudFJvb3QK
IEdldHRlclJhaXNlc0V4Y2VwdGlvbgogR2V0dGVyUmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2UK
IEltbXV0YWJsZQorSW1wbGVtZW50ZWRBcz0qCiBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlCiBJ
bXBsZW1lbnRhdGlvbk5hbWVzcGFjZT0qCi1JbXBsZW1lbnRlZEFzPSoKK0ltcGxlbWVudGF0aW9u
UmV0dXJuVHlwZT0qCiBJbXBsaWNpdFRoaXMKIEluaXRpYWxpemVkQnlFdmVudENvbnN0cnVjdG9y
CiBJbnRlcmZhY2VOYW1lPSoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0LmNwcAppbmRleCA3YmEyNmQ5Li5hZmFmMmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC00ODcsNCArNDg3LDE1IEBAIGJvb2wg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK0pTQzo6RXhlY1N0YXRlKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpleGVjU3RhdGUoKQoreworICAgIGlmIChpczxEb2N1bWVudD4oKnRoaXMpKSB7CisgICAgICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqdGhpcyk7CisgICAgICAg
IHJldHVybiBleGVjU3RhdGVGcm9tUGFnZShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgZG9jdW1l
bnQucGFnZSgpKTsKKyAgICB9CisKKyAgICBXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFs
U2NvcGUgPSBzdGF0aWNfY2FzdDxXb3JrZXJHbG9iYWxTY29wZSo+KHRoaXMpOworICAgIHJldHVy
biBleGVjU3RhdGVGcm9tV29ya2VyR2xvYmFsU2NvcGUod29ya2VyR2xvYmFsU2NvcGUpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaAppbmRleCBhNjY0ZWI5Li4xMDUxNWM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKQEAgLTE4OCw2ICsxODgsOCBAQCBwdWJsaWM6
CiAgICAgaW50IHRpbWVyTmVzdGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV90aW1lck5lc3Rp
bmdMZXZlbDsgfQogICAgIHZvaWQgc2V0VGltZXJOZXN0aW5nTGV2ZWwoaW50IHRpbWVyTmVzdGlu
Z0xldmVsKSB7IG1fdGltZXJOZXN0aW5nTGV2ZWwgPSB0aW1lck5lc3RpbmdMZXZlbDsgfQogCisg
ICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWNTdGF0ZSgpOworCiBwcm90ZWN0ZWQ6CiAgICAgY2xhc3Mg
QWRkQ29uc29sZU1lc3NhZ2VUYXNrIDogcHVibGljIFRhc2sgewogICAgIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3Bw
CmluZGV4IDNkMmRiZTAuLjIwZmUyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IklEQkN1cnNvci5oIgogI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgogI2luY2x1ZGUg
IklEQkRhdGFiYXNlLmgiCkBAIC0zMzMsNyArMzM0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gdGhpcyA9PSAmb3RoZXI7CiAgICAgfQogCi0gICAgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KSBvdmVycmlkZQorICAgIHZvaWQgaGFuZGxl
RXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLnN1
Y2Nlc3NFdmVudCkgewogICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJl
KCJVbmV4cGVjdGVkIGV2ZW50IHR5cGUuIik7CkBAIC0zODAsMTAgKzM4MSwxNCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUgPSBjb250ZXh0ID8gY29udGV4dC0+ZXhlY1N0YXRlKCkgOiBudWxscHRyOworICAg
ICAgICBpZiAoIXN0YXRlKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIFJlZlB0cjxE
YXRhRW50cnk+IGRhdGFFbnRyeSA9IERhdGFFbnRyeTo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5z
ZXRLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGlkYkN1cnNvci0+a2V5KCksIFN0cmlu
ZygpLCB0cnVlKSkKLSAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdChpZGJDdXJzb3ItPnByaW1hcnlLZXkoKSwgU3RyaW5nKCksIHRydWUpKQotICAg
ICAgICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChpZGJDdXJzb3It
PnZhbHVlKCksIFN0cmluZygpLCB0cnVlKSkKKyAgICAgICAgICAgIC5zZXRLZXkobV9pbmplY3Rl
ZFNjcmlwdC53cmFwT2JqZWN0KGlkYkN1cnNvci0+a2V5KCpzdGF0ZSksIFN0cmluZygpLCB0cnVl
KSkKKyAgICAgICAgICAgIC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVj
dChpZGJDdXJzb3ItPnByaW1hcnlLZXkoKnN0YXRlKSwgU3RyaW5nKCksIHRydWUpKQorICAgICAg
ICAgICAgLnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChpZGJDdXJzb3ItPnZh
bHVlKCpzdGF0ZSksIFN0cmluZygpLCB0cnVlKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAg
ICAgICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURk1vdmUoZGF0YUVudHJ5KSk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>