<?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>94023</bug_id>
          
          <creation_ts>2012-08-14 15:03:40 -0700</creation_ts>
          <short_desc>IndexedDB: Use ScriptValue instead of SerializedScriptValue for put/add/update</short_desc>
          <delta_ts>2012-09-12 16:20:06 -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>523.x (Safari 3)</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>91125</dependson>
          <blocked>88287</blocked>
    
    <blocked>95409</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Alec Flett">alecflett</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>charles.wei</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>dpranke</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jiyeon0402.kim</cc>
    
    <cc>michael</cc>
    
    <cc>ojan</cc>
    
    <cc>oliver</cc>
    
    <cc>peter+ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>695432</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-14 15:03:40 -0700</bug_when>
    <thetext>The WebKit IDB implementation uses SerializedScriptValue throughout, which incurs overhead and complexity:

* Converting values to IDBKeys is port specific (e.g. v8/IDBBindingUtilities.cpp&apos;s createIDBKeyFromValue)
* When evaluating key paths, SSVs are deserialized in a script context, then the value is groveled over (port-specific)
* When injecting keys into values, SSVs are deserialized, the value is groveled over, then the object is reserialized

Ideally, the values would remain as ScriptValues rather than SerializedScriptValues until they are transmitted over the wire or persisted to storage. In the Chromium port, transmission between processes used to occur almost immediately, but code has moved into the front-end so there is now benefit to retaining the objects &quot;live&quot; for longer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698846</commentid>
    <comment_count>1</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-08-17 17:39:54 -0700</bug_when>
    <thetext>I&apos;ll take this, I&apos;ve got a work-in-progress.

Minor details:
1) In the IDL we have to use DOMObject and we get a ScriptObject, and you have to use ScriptState instead of ScriptExecutionContext

2) ScriptValue / ScriptObject are not abstract enough to avoid writing any v8-specific code, but I suspect they could be improved upon - I don&apos;t see anything on the V8 side that would make that too hard though.

So I&apos;ll do a first cut which does all v8-specific stuff (I can reuse most of the stuff in IDBBindingUtilities) and then try to abstract it away into ScriptObject/ScriptValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708100</commentid>
    <comment_count>2</comment_count>
      <attachid>161369</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-08-29 17:34:05 -0700</bug_when>
    <thetext>Created attachment 161369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708105</commentid>
    <comment_count>3</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-08-29 17:35:21 -0700</bug_when>
    <thetext>This patch only covers the put/add/update side of things - the get/cursor side of things was separate (and complicated) enough to justify solving this in two phases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708238</commentid>
    <comment_count>4</comment_count>
      <attachid>161369</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-08-29 20:03:05 -0700</bug_when>
    <thetext>Comment on attachment 161369
Patch

Attachment 161369 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13691505</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708328</commentid>
    <comment_count>5</comment_count>
      <attachid>161369</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-29 22:53:58 -0700</bug_when>
    <thetext>Comment on attachment 161369
Patch

Attachment 161369 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13683622</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710084</commentid>
    <comment_count>6</comment_count>
      <attachid>161369</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-31 17:16:49 -0700</bug_when>
    <thetext>Comment on attachment 161369
Patch

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

Overall logic lgtm.

&gt; Source/WebCore/ChangeLog:10
&gt; +        steps while storing values.

Maybe mention/reference the follow-up bug for the &quot;get&quot; side? (Just be careful not to start the line with http://... or the patch system gets confused)

&gt; Source/WebCore/ChangeLog:12
&gt; +        No new tests, this is a performance refactor and existing tests cover

Please make sure you capture performance data before/after this lands!

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:164
&gt; +        ec = IDBDatabaseException::DATA_ERR;

Shouldn&apos;t this be DATA_CLONE_ERR to match what would come out of the binding layer&apos;s serialization?

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.cpp:127
&gt; +static v8::Handle&lt;v8::Value&gt; getNthValueOnKeyPath(v8::Handle&lt;v8::Value&gt;&amp; rootValue, const Vector&lt;String&gt;&amp; keyPathElements, size_t index)

Nice. Can the &quot;static&quot; qualifier be sprinkled on the other functions, too?

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.cpp:151
&gt; +        if (!get(currentValue, keyPathElement))

This appears correct, but the get() function has a poorly designed API, which leads to this function being hard to read. Maybe take the opportunity to improve it (e.g. bool get(source, name, dest) ?)

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.cpp:185
&gt; +static PassRefPtr&lt;IDBKey&gt; createIDBKeyFromScriptValueAndKeyPath(ScriptValue&amp; value, const String&amp; keyPath)

Should this be in the anonymous namespace?

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.cpp:221
&gt;  static PassRefPtr&lt;IDBKey&gt; createIDBKeyFromSerializedValueAndKeyPath(PassRefPtr&lt;SerializedScriptValue&gt; prpValue, const String&amp; keyPath)

Move this to anonymous namespace too?

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.h:44
&gt; +// FIXME: remove the SerializedValue versions when their use is finally removed

Capitalize and punctuate.

Maybe reference the &quot;get&quot; side bug? Or will there be 3 patches total?

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.h:50
&gt; +ScriptValue deserializeIDBValue(PassRefPtr&lt;SerializedScriptValue&gt;);

It seems odd to have this here rather than e.g. as a static on SerializedScriptValue, since it&apos;s not IDB specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712463</commentid>
    <comment_count>7</comment_count>
      <attachid>162315</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-05 13:17:03 -0700</bug_when>
    <thetext>Created attachment 162315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712465</commentid>
    <comment_count>8</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-05 13:17:50 -0700</bug_when>
    <thetext>sorry I just realized that josh had already added review comments. ignore that last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712471</commentid>
    <comment_count>9</comment_count>
      <attachid>162317</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-05 13:31:17 -0700</bug_when>
    <thetext>Created attachment 162317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712478</commentid>
    <comment_count>10</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-05 13:34:44 -0700</bug_when>
    <thetext>ok, the latest patch addresses most of the comments.


regarding deserializeIDBValue - yeah this bugged me, but I need to talk to someone who knows more about this stuff - there are like 3 different ways to deserialize a SerializedScriptValue and IDB uses the V8AuxiliaryContext approach. Nobody else uses that, and I need to find out why. (for instance SerializedScriptValue::deserializeForInspector takes a different approach)

But once bug 95409 is fixed, there will be only one use of V8AuxiliaryContext, and I&apos;d like to delay that cleanup until after that one lands. (That will involve a cleanup purely of SerializedScriptValue and ScriptValue proper, and just a one-liner in IDB code)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712628</commentid>
    <comment_count>11</comment_count>
      <attachid>162317</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-09-05 16:05:10 -0700</bug_when>
    <thetext>Comment on attachment 162317
Patch

Attachment 162317 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13757756</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712682</commentid>
    <comment_count>12</comment_count>
      <attachid>162372</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-05 16:58:53 -0700</bug_when>
    <thetext>Created attachment 162372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714798</commentid>
    <comment_count>13</comment_count>
      <attachid>162832</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-07 11:33:22 -0700</bug_when>
    <thetext>Created attachment 162832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716615</commentid>
    <comment_count>14</comment_count>
      <attachid>163236</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-10 15:44:17 -0700</bug_when>
    <thetext>Created attachment 163236
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716617</commentid>
    <comment_count>15</comment_count>
      <attachid>163236</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-10 15:45:48 -0700</bug_when>
    <thetext>Comment on attachment 163236
Patch

This updated version does away with V8AuxiliaryContext entirely, for new code. In particular, it will reuse the ScriptExecutionContext to get a V8 context, when available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716618</commentid>
    <comment_count>16</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-10 15:47:47 -0700</bug_when>
    <thetext>haraken@ - when you pointed me to toV8Context, it turns out that it helped more than I expected. This patch is now ready for a full review, can you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716640</commentid>
    <comment_count>17</comment_count>
      <attachid>163236</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-10 16:14:21 -0700</bug_when>
    <thetext>Comment on attachment 163236
Patch

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

&gt; Source/WebCore/ChangeLog:42
&gt; +2012-09-06  Alec Flett  &lt;alecflett@chromium.org&gt;

Looks like you&apos;ve got two changelogs here.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.idl:37
&gt; -        [CallWith=ScriptExecutionContext] IDBRequest put(in SerializedScriptValue value, in [Optional] IDBKey key)
&gt; +        [CallWith=ScriptExecutionContext] IDBRequest put(in DOMObject value, in [Optional] IDBKey key)

DOMObject -&gt; any?

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.cpp:234
&gt; +    context-&gt;Enter();

Please use v8::Context::Scope rather than calling Enter and Exit manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716973</commentid>
    <comment_count>18</comment_count>
      <attachid>163236</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-09-11 02:30:16 -0700</bug_when>
    <thetext>Comment on attachment 163236
Patch

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

It looks like you are doing a couple of things in this patch rather than just replacing SerializedScriptValues with ScriptValues. Although I don&apos;t fully understand the IDB part changes, the logic of deserializeIDBValue() and the SSV replacement logic look good to me except for abarth&apos;s comment (i.e. please use v8::Context::Scope).

&gt; Source/WebCore/ChangeLog:17
&gt; +        No new tests, this is a performance refactor and existing tests cover
&gt; +        correctness.

Please list up a couple of tests that might be potentially affected by this change. You can just say:

xxx.html (No behavior in change)

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:-149
&gt; -    if (value-&gt;blobURLs().size() &gt; 0) {
&gt; -        // FIXME: Add Blob/File/FileList support
&gt; -        ec = IDBDatabaseException::IDB_DATA_CLONE_ERR;
&gt; -        return 0;
&gt; -    }

Why did you remove it?

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.idl:42
&gt; +        [CallWith=ScriptExecutionContext] IDBRequest update(in DOMObject value)

DOMObject =&gt; any

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:166
&gt; +    ScriptState* state = ScriptState::current();
&gt; +    RefPtr&lt;SerializedScriptValue&gt; serializedValue = value.serialize(state);
&gt; +    if (state-&gt;hadException()) {
&gt; +        ec = IDBDatabaseException::IDB_DATA_CLONE_ERR;
&gt; +        return 0;
&gt; +    }

Shall we make this change in another patch? (before landing this patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717226</commentid>
    <comment_count>19</comment_count>
      <attachid>163236</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-11 08:52:50 -0700</bug_when>
    <thetext>Comment on attachment 163236
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:-149
&gt;&gt; -    }
&gt; 
&gt; Why did you remove it?

it&apos;s actually covered by the call below to IDBObjectStore::put() - it was redundant (I missed its redundancy in an earlier refactoring)

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:166
&gt;&gt; +    }
&gt; 
&gt; Shall we make this change in another patch? (before landing this patch)

No this case doesn&apos;t really exist in the world before we use ScriptValue.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:168
&gt; +    if (serializedValue-&gt;blobURLs().size() &gt; 0) {

(this is the check that was removed from IDBCursor::update - update now calls into this function)

&gt;&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.cpp:234
&gt;&gt; +    context-&gt;Enter();
&gt; 
&gt; Please use v8::Context::Scope rather than calling Enter and Exit manually.

ah! I knew there had to be something like that. Thanks.

thanks for the update guys, new patch coming up soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717380</commentid>
    <comment_count>20</comment_count>
      <attachid>163402</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-11 10:54:26 -0700</bug_when>
    <thetext>Created attachment 163402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717385</commentid>
    <comment_count>21</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-11 10:57:10 -0700</bug_when>
    <thetext>ok, new patch is ready - the only thing I couldn&apos;t address was the use of &apos;any&apos; - as far as I can tell there is no special support of this type, which means it&apos;s trying to include &quot;V8any.h&quot;

I looked through the V8 binding / code generator, and there&apos;s no specific support for &apos;any&apos; (though it&apos;s mentioned in CodeGeneratorJS.pm)

abarth@ / haraken@ - your preference here? I can try my hand at adding &apos;any&apos; support (I think it&apos;s just a one-liner to go along with DOMObject)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717390</commentid>
    <comment_count>22</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-09-11 11:01:58 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; abarth@ / haraken@ - your preference here? I can try my hand at adding &apos;any&apos; support (I think it&apos;s just a one-liner to go along with DOMObject)

Would you add the &apos;any&apos; support to CodeGeneratorV8.pm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718673</commentid>
    <comment_count>23</comment_count>
      <attachid>163681</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-12 13:36:13 -0700</bug_when>
    <thetext>Created attachment 163681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718712</commentid>
    <comment_count>24</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-12 14:18:26 -0700</bug_when>
    <thetext>abarth@ or haraken@ - v8 stuff is in, can you review the updated version of the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718725</commentid>
    <comment_count>25</comment_count>
      <attachid>163681</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-12 14:32:01 -0700</bug_when>
    <thetext>Comment on attachment 163681
Patch

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

All the v8-related stuff LGTM.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:108
&gt; +                                      ScriptValue&amp; objectValue,

Does it make sense to pass the ScriptValue by const reference?

&gt; Source/WebCore/bindings/v8/IDBBindingUtilities.cpp:237
&gt; +    v8::Handle&lt;v8::Value&gt; v8Value(prpValue-&gt;deserialize());
&gt; +    return ScriptValue(v8Value);

I would have just combined these lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718726</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-12 14:32:40 -0700</bug_when>
    <thetext>I&apos;ll let haraken do the final review since he gave you more substantial comments earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718761</commentid>
    <comment_count>27</comment_count>
      <attachid>163681</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-09-12 14:53:00 -0700</bug_when>
    <thetext>Comment on attachment 163681
Patch

The V8 part LGTM. If jsbell@ says that the IDB part is OK, we&apos;re happy to r+ it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718780</commentid>
    <comment_count>28</comment_count>
      <attachid>163713</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-12 15:09:49 -0700</bug_when>
    <thetext>Created attachment 163713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718790</commentid>
    <comment_count>29</comment_count>
      <attachid>163713</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-12 15:19:15 -0700</bug_when>
    <thetext>Comment on attachment 163713
Patch

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

IDB changes lgtm

&gt; Tools/Scripts/webkitpy/common/net/credentials.py:44
&gt; +    #import keyring

I don&apos;t think you meant to include this change. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718801</commentid>
    <comment_count>30</comment_count>
      <attachid>163713</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-09-12 15:23:49 -0700</bug_when>
    <thetext>Comment on attachment 163713
Patch

Please just fix a nit pointed out by jsbell, before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718804</commentid>
    <comment_count>31</comment_count>
      <attachid>163718</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-09-12 15:25:35 -0700</bug_when>
    <thetext>Created attachment 163718
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718860</commentid>
    <comment_count>32</comment_count>
      <attachid>163718</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 16:20:01 -0700</bug_when>
    <thetext>Comment on attachment 163718
Patch

Clearing flags on attachment: 163718

Committed r128379: &lt;http://trac.webkit.org/changeset/128379&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718861</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-12 16:20:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161369</attachid>
            <date>2012-08-29 17:34:05 -0700</date>
            <delta_ts>2012-09-05 13:17:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120829173355.patch</filename>
            <type>text/plain</type>
            <size>21888</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2OTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzFhODBiOWNiOWZjMzBm
MTg3ZDQyNDkxNjRmYzA1YmYzNjYxZjQ1NC4uNDRkNGVhMjBjNDM1MGRkYThmYzQzMDZhNzBkNmVm
NzAzNDE5M2M1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA4LTI5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHRvIGVsaW1pbmF0ZSBsb3RzIG9mIHJlZHVuZGFudCBkZXNl
cmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbgorICAgICAgICBzdGVwcyB3aGlsZSBzdG9yaW5nIHZh
bHVlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMgaXMgYSBwZXJmb3JtYW5jZSByZWZh
Y3RvciBhbmQgZXhpc3RpbmcgdGVzdHMgY292ZXIKKyAgICAgICAgY29ycmVjdG5lc3MuCisKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvci5oOgorICAgICAgICAoSURCQ3Vyc29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQp
OgorICAgICAgICAoSURCT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRp
bGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
SURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpkZXNl
cmlhbGl6ZUlEQlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5o
OgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDgtMjkgIFJ5dWFuIENob2kgIDxyeXVhbi5j
aG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIE1vdmUgc2V2ZXJhbCBmaWxlcyB0byBy
ZW1vdmUgd2Via2l0MSBkZXBlbmRlbmN5IGZyb20gV2ViQ29yZS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDkwM2RhYjU4M2MzNjMyYTc2
NmI5NWQ5NzliM2UyNWQ5ZmI3MzU4OTIuLjk2ZmU4MmY3NmQ2ZDNjYjcxMmI4NjRmMmZjNWUwZGU0
NGMwZTlmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmNwcApAQCAtMTI1LDEwICsxMjUsOSBAQCBJREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkg
Y29uc3QKICAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7Ci0gICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKIAogICAgIGlmICghbV9n
b3RWYWx1ZSB8fCBpc0tleUN1cnNvcigpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE0MiwxNyArMTQxLDEyIEBAIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJF
QURfT05MWV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodmFsdWUtPmJs
b2JVUkxzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9G
aWxlTGlzdCBzdXBwb3J0Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9E
QVRBX0NMT05FX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7CiAgICAg
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBh
dGg7CiAgICAgY29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOwog
ICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRo
S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtl
eVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5
RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CiAgICAgICAgIGlmICgh
a2V5UGF0aEtleSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5Lmdl
dCgpKSkgewogICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
CiAgICAgICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmgKaW5kZXggNTkwODI4ODU5YTdhMzFkOGYwODg3MWYyYzQxZGY5MzIwM2Zh
MTdkZS4uMWI2MTkzNTNmZWRiNTJiYmJlMTAyMWY5YmNhOGE5OTY1MDEyYTdlNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKQEAgLTc1LDcgKzc1LDcg
QEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpOwogICAgIElEQkFueSog
c291cmNlKCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZv
aWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjb250
aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaWRsCmluZGV4IGQ3M2QxNDYyNzQ0MTg0MDI3NDIzMjBmNGYzZTYwNmFiM2Qy
MDJlNDkuLmViMmNkYWQ4YTc2MWJjZjQ2MGZiMWY2NmNlN2UzZTlkMGZlMWRkMGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAtMzksNyAr
MzksNyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJL
ZXkgcHJpbWFyeUtleTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBzb3VyY2U7
CiAKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qg
dXBkYXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKKyAgICAgICAgW0NhbGxXaXRo
PVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIERPTU9iamVjdCB2
YWx1ZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAg
ICB2b2lkIGFkdmFuY2UoaW4gdW5zaWduZWQgbG9uZyBjb3VudCkKICAgICAgICAgICAgIHJhaXNl
cyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGE3YWE4YTNlYWI2MDljNjkyYmUw
ODQ4MmQ2NWE2NmY0Njg3NzQ1ZDAuLjExOGUwMTc2ZGEyYmQwNmVmZjljMTY4ZTY2MzBlNDg0ODk3
MjljZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5jcHAKQEAgLTEwNSwxMSArMTA1LDExIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzCiB9CiAKIHN0YXRpYyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdFZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRWYWx1ZSYgb2Jq
ZWN0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQk9iamVj
dFN0b3JlOjpJbmRleEtleXMqIGluZGV4S2V5cykKIHsKICAgICBBU1NFUlQoaW5kZXhLZXlzKTsK
LSAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVk
VmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOworICAg
IFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5k
S2V5UGF0aChvYmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKIAogICAgIGlmICgh
aW5kZXhLZXkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyOSwyMiArMTI5LDIyIEBAIHN0YXRpYyB2
b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5k
ZXhNZXRhZGF0YSwKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRk
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZTo6YWRkIik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2
YWx1ZSwga2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OnB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlv
bkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJPYmplY3RTdG9yZTo6cHV0Iik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwg
dmFsdWUsIGtleSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQ
dXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZTo6cHV0Iik7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBw
cnBWYWx1ZTsKKyAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6Y3VycmVudCgp
OwogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICBpZiAobV9kZWxldGVkKSB7
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VS
UjsKQEAgLTE1OCw3ICsxNTgsMTQgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotICAgIGlmICh2YWx1ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7CisKKyAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZS5z
ZXJpYWxpemUoc3RhdGUpOworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGlmIChzZXJpYWxpemVkVmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4g
MCkgewogICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBzdXBwb3J0CiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC0xNzcsNyArMTg0LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0
TW8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewot
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlh
bGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURC
S2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2
YWx1ZSwga2V5UGF0aCk7CiAgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5p
c1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFf
RVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xODcsOSArMTk0LDcgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6UHV0TW8KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAg
IGlmIChoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIoLTEpOwotICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGlu
amVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoZHVtbXlLZXksIHZhbHVlLCBrZXlQYXRoKTsK
LSAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgeworICAgICAgICAgICAgaWYg
KCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUodmFsdWUsIGtleVBhdGgpKSB7CiAgICAg
ICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CkBAIC0yMTMsNyArMjE4LDcgQEAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBBU1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRl
eE5hbWVzLnNpemUoKSk7CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNl
KCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1l
cywgaW5kZXhLZXlzLCBlYyk7CisgICAgbV9iYWNrZW5kLT5wdXRXaXRoSW5kZXhLZXlzKHNlcmlh
bGl6ZWRWYWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1f
dHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCBlYyk7CiAgICAg
aWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMzM2LDcgKzM0MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBSZWZQdHI8
SURCQW55PiB2YWx1ZUFueSA9IGN1cnNvci0+dmFsdWUoKTsKIAogICAgICAgICAgICAgQVNTRVJU
KHZhbHVlQW55LT50eXBlKCkgPT0gSURCQW55OjpTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlKTsK
LSAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gdmFsdWVB
bnktPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpOworICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFsdWVBbnktPnNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSgpOworICAgICAgICAgICAgU2NyaXB0VmFsdWUgdmFsdWUoZGVzZXJpYWxpemVJREJW
YWx1ZShzZXJpYWxpemVkVmFsdWUpKTsKIAogICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6Oklu
ZGV4S2V5cyBpbmRleEtleXM7CiAgICAgICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVl
KG1faW5kZXhNZXRhZGF0YSwgdmFsdWUsICZpbmRleEtleXMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggOTJlMGZlZDk2YTQ2
MzZiZmFkMzI2NWJjYjYzNzkzNGQ0NjA0MzhhMy4uOWE1Yzc3NTJiYmQ4NTUwNDA3ZGRhNjg5MDQ3
NjdiNjk1YTg5MzY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5oCkBAIC02NCw4ICs2NCw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNh
Y3Rpb247IH0KICAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX21ldGFk
YXRhLmF1dG9JbmNyZW1lbnQ7IH0KIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkZChjb250ZXh0LCB2
YWx1ZSwgMCwgZWMpOyAgfQotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHB1dChjb250ZXh0LCB2YWx1ZSwg
MCwgZWMpOyAgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGFkZChjb250ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQorICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gcHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZh
bHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHB1dChjb250ZXh0LCB2YWx1
ZSwgMCwgZWMpOyAgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
b3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0g
CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vy
c29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfSAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4
dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9IApAQCAtNzcsOCArNzcs
OCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CiAgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRp
b25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9u
Q29kZSYpOwpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUm
KTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRy
PElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQ
YXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIG1hcmtEZWxldGVk
KCkgeyBtX2RlbGV0ZWQgPSB0cnVlOyB9CiAgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmlkbAppbmRleCA5OWQ4Njg0NmI4MWVhOTEwNDBhZDM4MDUwYTY0NDg1MDdjZmJlMGQ2Li42
MjUzMjIzYjhjYjNjOTFjOTg0ZDhlODVlNzM3NWJjMzA5YzExNTIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCkBAIC0zNCw5
ICszNCw5IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElE
QlRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9v
bGVhbiBhdXRvSW5jcmVtZW50OwogCi0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0XSBJREJSZXF1ZXN0IHB1dChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGlu
IFtPcHRpb25hbF0gSURCS2V5IGtleSkKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIElEQlJlcXVlc3QgcHV0KGluIERPTU9iamVjdCB2YWx1ZSwgaW4gW09wdGlvbmFs
XSBJREJLZXkga2V5KQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IGFk
ZChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtl
eSkKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qg
YWRkKGluIERPTU9iamVjdCB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQogICAgICAg
ICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgICAgIFtDYWxsV2l0aD1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFzPWRlbGV0ZUZ1bmN0aW9uXSBJREJS
ZXF1ZXN0IGRlbGV0ZShpbiBJREJLZXlSYW5nZT8ga2V5UmFuZ2UpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggMTlmZDkxZDkwMDkzNWRlZGJjODEx
NWRkOTQxNDVhNjhmNDllNzAxNi4uNGViZjMyOWIxZDVmY2RmOTRjNDRmYjc3NTM5N2I2NTE0Mzhm
MmM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAKQEAgLTExNCwxMiArMTE0LDE3IEBAIGJvb2wgZ2V0KHY4OjpIYW5kbGU8djg6
OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQogICAgIHJldHVy
biBvYmplY3QtPklzT2JqZWN0KCkgJiYgZ2V0VmFsdWVGcm9tKHY4U3RyaW5nKGtleVBhdGhFbGVt
ZW50KSwgb2JqZWN0KTsKIH0KIAorc3RhdGljIGJvb2wgY2FuU2V0KHY4OjpIYW5kbGU8djg6OlZh
bHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQoreworICAgIHJldHVy
biBvYmplY3QtPklzT2JqZWN0KCk7Cit9CisKIGJvb2wgc2V0KHY4OjpIYW5kbGU8djg6OlZhbHVl
PiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBjb25zdCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB7Ci0gICAgcmV0dXJuIG9iamVjdC0+SXNPYmplY3QoKSAm
JiBzZXRWYWx1ZShvYmplY3QsIHY4U3RyaW5nKGtleVBhdGhFbGVtZW50KSwgdjhWYWx1ZSk7Cisg
ICAgcmV0dXJuIGNhblNldChvYmplY3QsIGtleVBhdGhFbGVtZW50KSAmJiBzZXRWYWx1ZShvYmpl
Y3QsIHY4U3RyaW5nKGtleVBhdGhFbGVtZW50KSwgdjhWYWx1ZSk7CiB9CiAKLXY4OjpIYW5kbGU8
djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJv
b3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGlu
ZGV4KQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtl
eVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQogewogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKIApAQCAtMTMyLDcgKzEzNywyNSBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZ2V0TnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+
JiByb290VmFsdWUsIGNvbgogICAgIHJldHVybiBjdXJyZW50VmFsdWU7CiB9CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6
ZV90IGluZGV4KQorc3RhdGljIGJvb2wgY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgodjg6Okhh
bmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRo
RWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIXJvb3RWYWx1ZS0+SXNPYmplY3Qo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1
cnJlbnRWYWx1ZShyb290VmFsdWUpOworCisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVt
ZW50cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXg7ICsraSkgewor
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tp
XTsKKyAgICAgICAgaWYgKCFnZXQoY3VycmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCkpCisgICAg
ICAgICAgICByZXR1cm4gY2FuU2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCk7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
ZW5zdXJlTnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKIHsK
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VycmVudFZhbHVlKHJvb3RWYWx1ZSk7CiAKQEAg
LTE1MSw4ICsxNzQsNTAgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25L
ZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLAogICAgIHJldHVybiBjdXJy
ZW50VmFsdWU7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5zdXJlTnRoVmFs
dWVPbktleVBhdGgoU2NyaXB0T2JqZWN0JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3sKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcm9vdFY4VmFsdWUocm9vdFZhbHVlLnY4VmFsdWUoKSk7CisgICAgcmV0dXJuIGVuc3Vy
ZU50aFZhbHVlT25LZXlQYXRoKHJvb3RWOFZhbHVlLCBrZXlQYXRoRWxlbWVudHMsIGluZGV4KTsK
K30KKwogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKK3N0YXRpYyBQYXNzUmVmUHRyPElEQktl
eT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChTY3JpcHRWYWx1ZSYgdmFs
dWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRo
RWxlbWVudHM7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VL
ZXlQYXRoKGtleVBhdGgsIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJv
ciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgVjhBdXhpbGlhcnlDb250ZXh0
IGNvbnRleHQ7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4VmFsdWUodmFsdWUudjhWYWx1
ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhLZXkoZ2V0TnRoVmFsdWVPbktleVBh
dGgodjhWYWx1ZSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKSk7Cisg
ICAgaWYgKHY4S2V5LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNy
ZWF0ZUlEQktleUZyb21WYWx1ZSh2OEtleSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29u
c3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImNyZWF0ZUlEQktleUZy
b21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoIik7CisgICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVs
bCgpKTsKKworICAgIGlmIChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpBcnJheVR5cGUp
IHsKKyAgICAgICAgSURCS2V5OjpLZXlBcnJheSByZXN1bHQ7CisgICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhcnJheSA9IGtleVBhdGguYXJyYXkoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhcnJheS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgUmVmUHRyPElEQktl
eT4ga2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwgYXJy
YXlbaV0pOworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIElEQktleTo6Y3JlYXRlQXJyYXkocmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQoa2V5
UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgcmV0dXJuIGNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGguc3RyaW5nKCkp
OworfQorCiBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxp
emVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBW
YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IGtleVBh
dGhFbGVtZW50czsKQEAgLTE3MCw2ICsyMzUsMTIgQEAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFMK
ICAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4S2V5KTsKIH0KIAorU2NyaXB0VmFs
dWUgZGVzZXJpYWxpemVJREJWYWx1ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
cHJwVmFsdWUpCit7CisgICAgVjhBdXhpbGlhcnlDb250ZXh0IGNvbnRleHQ7CisgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHY4VmFsdWUocHJwVmFsdWUtPmRlc2VyaWFsaXplKCkpOworICAgIHJl
dHVybiBTY3JpcHRWYWx1ZSh2OFZhbHVlKTsKK30KIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0
ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKQEAg
LTIxOSw2ICsyOTAsMjIgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVj
dElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREIKICAgICByZXR1cm4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSk7CiB9CiAKK2Jvb2wgY2FuSW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5
UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwor
ICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQ
YXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NFUlQoZXJyb3Ig
PT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIGlmICgha2V5UGF0aEVsZW1lbnRz
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVjhBdXhpbGlhcnlDb250ZXh0
IGNvbnRleHQ7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4VmFsdWUoc2NyaXB0VmFsdWUu
djhWYWx1ZSgpKTsKKyAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgodjhWYWx1
ZSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmgKaW5kZXggMzBlZWQ0MjFiNDViMDkwMzAxMWJk
MjQ5YmJhMGQ3NGMyM2JhMjc0Zi4uYTcyMDM3N2EwNDA0Mzk4OWYyMDUwN2UwMzJmMmIyMDg4MTE0
OGNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0
aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuaApAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtMzgsOSArNDAs
MTUgQEAgY2xhc3MgSURCS2V5UGF0aDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAog
UGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4pOworCisvLyBGSVhNRTogcmVtb3ZlIHRoZSBTZXJpYWxpemVkVmFsdWUgdmVyc2lvbnMg
d2hlbiB0aGVpciB1c2UgaXMgZmluYWxseSByZW1vdmVkCiBQYXNzUmVmUHRyPElEQktleT4gY3Jl
YXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+LCBjb25zdCBJREJLZXlQYXRoJik7CiBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRy
PElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgSURCS2V5
UGF0aCYpOwogCitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aChTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK2Jvb2wgY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYp
OworU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4pOworCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162315</attachid>
            <date>2012-09-05 13:17:03 -0700</date>
            <delta_ts>2012-09-05 13:18:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120905131645.patch</filename>
            <type>text/plain</type>
            <size>21797</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA2Y2FjNDFkYmM0MGZj
Yzg3MWY5ZGRmY2M4MzIyOTBhMmU5ODcxMi4uZGJlZjg1YzY2ZWNkMmNiZDRmZmJkZDc5MWQ2YTdi
MDU2YzA2YzU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDEyLTA4LTI5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KIAorICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIHRoaXMgaXMgYSBwZXJmb3JtYW5jZSByZWZhY3RvciBhbmQgZXhp
c3RpbmcgdGVzdHMgY292ZXIKKyAgICAgICAgY29ycmVjdG5lc3MuCisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
Ojp1cGRhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAg
ICAgICAoSURCQ3Vyc29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
aWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAo
SURCT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpkZXNlcmlhbGl6ZUlEQlZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oOgorICAgICAgICAo
V2ViQ29yZSk6CisKKzIwMTItMDgtMjkgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0u
b3JnPgorCiAgICAgICAgIEluZGV4ZWREQjogcmVtb3ZlIGZpbmFsIGNyZWF0ZUluZGV4IGJhY2tl
bmQgZ2x1ZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTUzODUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5j
cHAKaW5kZXggOTAzZGFiNTgzYzM2MzJhNzY2Yjk1ZDk3OWIzZTI1ZDlmYjczNTg5Mi4uOTZmZTgy
Zjc2ZDZkM2NiNzEyYjg2NGYyZmM1ZTBkZTQ0YzBlOWZmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCkBAIC0xMjUsMTAgKzEyNSw5IEBAIElE
QkFueSogSURCQ3Vyc29yOjpzb3VyY2UoKSBjb25zdAogICAgIHJldHVybiBtX3NvdXJjZS5nZXQo
KTsKIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gcHJwVmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTY3JpcHRW
YWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCQ3Vy
c29yOjp1cGRhdGUiKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9
IHBycFZhbHVlOwogCiAgICAgaWYgKCFtX2dvdFZhbHVlIHx8IGlzS2V5Q3Vyc29yKCkpIHsKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwpA
QCAtMTQyLDE3ICsxNDEsMTIgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVw
ZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmUKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQotICAgIGlmICh2YWx1ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKLSAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gZWZm
ZWN0aXZlT2JqZWN0U3RvcmUoKTsKICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0gb2Jq
ZWN0U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0aDsKICAgICBjb25zdCBib29sIHVzZXNJbkxpbmVL
ZXlzID0gIWtleVBhdGguaXNOdWxsKCk7CiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAg
ICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXpl
ZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+
IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVl
LCBrZXlQYXRoKTsKICAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8ICFrZXlQYXRoS2V5LT5pc0Vx
dWFsKG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCA1OTA4Mjg4NTlh
N2EzMWQ4ZjA4ODcxZjJjNDFkZjkzMjAzZmExN2RlLi4xYjYxOTM1M2ZlZGI1MmJiYmUxMDIxZjli
Y2E4YTk5NjUwMTJhN2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuaApAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJB
bnk+IHZhbHVlKCk7CiAgICAgSURCQW55KiBzb3VyY2UoKSBjb25zdDsKIAotICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gdXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IHVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUm
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggZDczZDE0NjI3
NDQxODQwMjc0MjMyMGY0ZjNlNjA2YWIzZDIwMmU0OS4uZWIyY2RhZDhhNzYxYmNmNDYwZmIxZjY2
Y2U3ZTNlOWQwZmUxZGQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaWRsCkBAIC0zOSw3ICszOSw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBwcmltYXJ5S2V5OwogICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgSURCQW55IHNvdXJjZTsKIAotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCB1cGRhdGUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVl
IHZhbHVlKQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVx
dWVzdCB1cGRhdGUoaW4gRE9NT2JqZWN0IHZhbHVlKQogICAgICAgICAgICAgcmFpc2VzIChJREJE
YXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgYWR2YW5jZShpbiB1bnNpZ25lZCBsb25n
IGNvdW50KQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
aW5kZXggYTdhYThhM2VhYjYwOWM2OTJiZTA4NDgyZDY1YTY2ZjQ2ODc3NDVkMC4uZmRiMzBiYzBi
Yzk5YmQ5MzkyY2U2NGUwZjA4YzJmNjYyZWUzZDBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTA1LDExICsxMDUs
MTEgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3MKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXJhdGVJ
bmRleEtleXNGb3JWYWx1ZShjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gb2JqZWN0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNjcmlwdFZhbHVlJiBvYmplY3RWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyogaW5kZXhLZXlzKQog
ewogICAgIEFTU0VSVChpbmRleEtleXMpOwotICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0g
Y3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgob2JqZWN0VmFsdWUsIGlu
ZGV4TWV0YWRhdGEua2V5UGF0aCk7CisgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFk
YXRhLmtleVBhdGgpOwogCiAgICAgaWYgKCFpbmRleEtleSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTI5LDIyICsxMjksMjEgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShj
b25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAogICAgIH0KIH0KIAotUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsKICAgICBy
ZXR1cm4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgSURCQW55
OjpjcmVhdGUodGhpcyksIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKIH0KIAotUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
U2NyaXB0VmFsdWUmIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKICAgICByZXR1
cm4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJB
bnk+IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUm
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJREJLZXk+IGtl
eSA9IHBycEtleTsKICAgICBpZiAobV9kZWxldGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE1OCw3ICsxNTcsMTUgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh2YWx1
ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7CisKKyAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBT
Y3JpcHRTdGF0ZTo6Y3VycmVudCgpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZSA9IHZhbHVlLnNlcmlhbGl6ZShzdGF0ZSk7CisgICAgaWYgKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHNlcmlhbGl6ZWRW
YWx1ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgQmxv
Yi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SURCX0RBVEFfQ0xPTkVfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE3Nyw3ICsxODQs
NyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhL
ZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5
UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlG
cm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKICAgICAgICAgaWYgKGtl
eVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgewogICAgICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAg
LTE4Nyw5ICsxOTQsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpw
dXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0
aEtleSkgewotICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZHVtbXlLZXkgPSBJREJLZXk6OmNy
ZWF0ZU51bWJlcigtMSk7Ci0gICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShk
dW1teUtleSwgdmFsdWUsIGtleVBhdGgpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZUFmdGVySW5q
ZWN0aW9uKSB7CisgICAgICAgICAgICBpZiAoIWNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1
ZSh2YWx1ZSwga2V5UGF0aCkpIHsKICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
IH0KQEAgLTIxMyw3ICsyMTgsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgIEFTU0VS
VChpbmRleEtleXMuc2l6ZSgpID09IGluZGV4TmFtZXMuc2l6ZSgpKTsKIAogICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNvdXJjZSwg
bV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5wdXRXaXRoSW5kZXhLZXlzKHZh
bHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBpbmRleE5hbWVzLCBpbmRleEtleXMsIGVjKTsKKyAgICBtX2JhY2tl
bmQtPnB1dFdpdGhJbmRleEtleXMoc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVh
c2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRleE5h
bWVzLCBpbmRleEtleXMsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFy
a0Vhcmx5RGVhdGgoKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMzYsNyArMzQxLDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIFJlZlB0cjxJREJBbnk+IHZhbHVlQW55ID0gY3Vyc29yLT52YWx1
ZSgpOwogCiAgICAgICAgICAgICBBU1NFUlQodmFsdWVBbnktPnR5cGUoKSA9PSBJREJBbnk6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOwotICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7Cisg
ICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUg
PSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisgICAgICAgICAgICBTY3JpcHRW
YWx1ZSB2YWx1ZShkZXNlcmlhbGl6ZUlEQlZhbHVlKHNlcmlhbGl6ZWRWYWx1ZSkpOwogCiAgICAg
ICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGluZGV4S2V5czsKICAgICAgICAgICAg
IGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwgJmluZGV4
S2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaAppbmRleCA5MmUwZmVkOTZhNDYzNmJmYWQzMjY1YmNiNjM3OTM0ZDQ2MDQzOGEzLi45
YTVjNzc1MmJiZDg1NTA0MDdkZGE2ODkwNDc2N2I2OTVhODkzNjQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTY0LDggKzY0
LDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQogICAgIGJvb2wgYXV0b0luY3JlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0luY3JlbWVudDsgfQogCi0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9Ci0gICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUm
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAw
LCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CiAgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0
PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9w
ZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29y
KGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9IAog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4
dCgpLCBlYyk7IH0gCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElE
QktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVu
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBAIC05Nyw3ICs5Nyw3IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRy
PElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KICAgICB2
b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4IDk5ZDg2ODQ2YjgxZWE5MTA0
MGFkMzgwNTBhNjQ0ODUwN2NmYmUwZDYuLjYyNTMyMjNiOGNiM2M5MWM5ODRkOGU4NWU3Mzc1YmMz
MDljMTE1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5pZGwKQEAgLTM0LDkgKzM0LDkgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGF1dG9JbmNyZW1lbnQ7CiAKLSAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgcHV0KGluIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBwdXQoaW4gRE9N
T2JqZWN0IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1
ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBhZGQoaW4gRE9NT2JqZWN0IHZhbHVlLCBpbiBbT3B0
aW9uYWxdIElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVu
dGVkQXM9ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVsZXRlKGluIElEQktleVJhbmdlPyBr
ZXlSYW5nZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApp
bmRleCAxOWZkOTFkOTAwOTM1ZGVkYmM4MTE1ZGQ5NDE0NWE2OGY0OWU3MDE2Li4xZDdiOWY0NTBl
NTljYzRlYmZhNmJiM2IxMDRkNjMzYjNjMDRhMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMTE0LDEyICsxMTQsMTcg
QEAgYm9vbCBnZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aEVsZW1lbnQpCiAgICAgcmV0dXJuIG9iamVjdC0+SXNPYmplY3QoKSAmJiBnZXRWYWx1
ZUZyb20odjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCBvYmplY3QpOwogfQogCitzdGF0aWMgYm9v
bCBjYW5TZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5
UGF0aEVsZW1lbnQpCit7CisgICAgcmV0dXJuIG9iamVjdC0+SXNPYmplY3QoKTsKK30KKwogYm9v
bCBzZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0
aEVsZW1lbnQsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKIHsKLSAgICBy
ZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpICYmIHNldFZhbHVlKG9iamVjdCwgdjhTdHJpbmcoa2V5
UGF0aEVsZW1lbnQpLCB2OFZhbHVlKTsKKyAgICByZXR1cm4gY2FuU2V0KG9iamVjdCwga2V5UGF0
aEVsZW1lbnQpICYmIHNldFZhbHVlKG9iamVjdCwgdjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCB2
OFZhbHVlKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE50aFZhbHVlT25LZXlQYXRo
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
a2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGdldE50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVl
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCiB7
CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOwogCkBA
IC0xMzIsNyArMTM3LDI1IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5
UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uCiAgICAgcmV0dXJuIGN1
cnJlbnRWYWx1ZTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25L
ZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCitzdGF0aWMgYm9vbCBjYW5Jbmpl
Y3ROdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQoreworICAg
IGlmICghcm9vdFZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3VycmVudFZhbHVlKHJvb3RWYWx1ZSk7CisKKyAgICBB
U1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmRleDsgKytpKSB7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBw
YXJlbnRWYWx1ZShjdXJyZW50VmFsdWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtleVBhdGhF
bGVtZW50ID0ga2V5UGF0aEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIWdldChjdXJyZW50VmFs
dWUsIGtleVBhdGhFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiBjYW5TZXQocGFyZW50VmFs
dWUsIGtleVBhdGhFbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhF
bGVtZW50cywgc2l6ZV90IGluZGV4KQogewogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJy
ZW50VmFsdWUocm9vdFZhbHVlKTsKIApAQCAtMTUzLDYgKzE3Niw0MiBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBy
b290VmFsdWUsCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCitzdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoU2NyaXB0VmFs
dWUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgVmVjdG9yPFN0cmluZz4g
a2V5UGF0aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElE
QlBhcnNlS2V5UGF0aChrZXlQYXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NF
UlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIFY4QXV4aWxpYXJ5
Q29udGV4dCBjb250ZXh0OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFZhbHVlKHZhbHVl
LnY4VmFsdWUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4S2V5KGdldE50aFZhbHVl
T25LZXlQYXRoKHY4VmFsdWUsIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUo
KSkpOworICAgIGlmICh2OEtleS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjhLZXkpOworfQorCitQYXNzUmVmUHRyPElEQktl
eT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChTY3JpcHRWYWx1ZSYgdmFs
dWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RSQUNFKCJjcmVhdGVJ
REJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCIpOworICAgIEFTU0VSVCgha2V5UGF0
aC5pc051bGwoKSk7CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJy
YXlUeXBlKSB7CisgICAgICAgIElEQktleTo6S2V5QXJyYXkgcmVzdWx0OworICAgICAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgodmFs
dWUsIGFycmF5W2ldKTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7CisgICAgfQorCisgICAgQVNT
RVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIHJldHVy
biBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoLnN0
cmluZygpKTsKK30KKwogc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9t
U2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gcHJwVmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKICAgICBWZWN0b3I8U3RyaW5n
PiBrZXlQYXRoRWxlbWVudHM7CkBAIC0xNzAsNiArMjI5LDEzIEBAIHN0YXRpYyBQYXNzUmVmUHRy
PElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1Jl
ZlB0cjxTCiAgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2OEtleSk7CiB9CiAKKy8v
IEZJWE1FOiBUaGUgb25seSByZWFzb24gdGhpcyBleGlzdHMgaXMgYmVjYXVzZSB3ZSBuZWVkIGEg
VjhBdXhpbGlhcnlDb250ZXh0IGluc2lkZSBhIHRpbWVyLiBJcyB0aGVyZSBhIGJldHRlciAvIG1v
cmUgZ2VuZXJhbCB3YXkgdG8gZG8gdGhpcz8KK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFs
dWUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQoreworICAgIFY4
QXV4aWxpYXJ5Q29udGV4dCBjb250ZXh0OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFZh
bHVlKHBycFZhbHVlLT5kZXNlcmlhbGl6ZSgpKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUodjhW
YWx1ZSk7Cit9CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXpl
ZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFs
dWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CkBAIC0yMTksNiArMjg1LDIyIEBAIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXpl
ZFZhbHVlKFBhc3NSZWZQdHI8SURCCiAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKHY4VmFsdWUpOwogfQogCitib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1
ZShjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCit7CisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5
cGUpOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRo
UGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aC5zdHJpbmcoKSwg
a2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQ
YXJzZUVycm9yTm9uZSk7CisKKyAgICBpZiAoIWtleVBhdGhFbGVtZW50cy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFY4QXV4aWxpYXJ5Q29udGV4dCBjb250ZXh0OworICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFZhbHVlKHNjcmlwdFZhbHVlLnY4VmFsdWUoKSk7Cisg
ICAgcmV0dXJuIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKHY4VmFsdWUsIGtleVBhdGhFbGVt
ZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
SURCQmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmlu
ZGluZ1V0aWxpdGllcy5oCmluZGV4IDMwZWVkNDIxYjQ1YjA5MDMwMTFiZDI0OWJiYTBkNzRjMjNi
YTI3NGYuLmQ3MmYxMWE1ZmY1YTU2ZjU4Njg2MGFjMjZjZDZmMjliZWY0MzYxY2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAi
U2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAKQEAgLTM4LDkgKzM5LDE1IEBAIGNsYXNzIElEQktleVBhdGg7CiBjbGFzcyBTZXJpYWxpemVk
U2NyaXB0VmFsdWU7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUo
djg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworLy8gRklYTUU6IHJlbW92ZSB0aGUgU2VyaWFsaXpl
ZFZhbHVlIHZlcnNpb25zIHdoZW4gdGhlaXIgdXNlIGlzIGZpbmFsbHkgcmVtb3ZlZC4KIFBhc3NS
ZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IElEQktleVBhdGgmKTsKIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXpl
ZFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBjb25zdCBJREJLZXlQYXRoJik7CiAKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0
aCYpOworYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0VmFs
dWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVl
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162317</attachid>
            <date>2012-09-05 13:31:17 -0700</date>
            <delta_ts>2012-09-05 16:58:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120905133059.patch</filename>
            <type>text/plain</type>
            <size>24108</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA2Y2FjNDFkYmM0MGZj
Yzg3MWY5ZGRmY2M4MzIyOTBhMmU5ODcxMi4uODMyMTI5YzRhNDg1YWUxNjExYzc2NjQ5NzZjNmFk
NDliMDJmODc4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDEyLTA4LTI5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KIAorICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBBbHNvIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0
MDkgZm9yCisgICAgICAgIGZvbGxvd3VwIGdldC9vcGVuQ3Vyc29yIHdvcmssIGZvbGxvd2luZyB0
aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIHJlZmFj
dG9yIGFuZCBleGlzdGluZyB0ZXN0cyBjb3ZlcgorICAgICAgICBjb3JyZWN0bmVzcy4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OnVwZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmg6CisgICAgICAgIChJREJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6
CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2Vy
aWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6
CisgICAgICAgIChXZWJDb3JlKToKKworMjAxMi0wOC0yOSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0
dEBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgSW5kZXhlZERCOiByZW1vdmUgZmluYWwgY3JlYXRl
SW5kZXggYmFja2VuZCBnbHVlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NTM4NQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcAppbmRleCA5MDNkYWI1ODNjMzYzMmE3NjZiOTVkOTc5YjNlMjVkOWZiNzM1
ODkyLi45NmZlODJmNzZkNmQzY2I3MTJiODY0ZjJmYzVlMGRlNDRjMGU5ZmZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTEyNSwxMCAr
MTI1LDkgQEAgSURCQW55KiBJREJDdXJzb3I6OnNvdXJjZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
c291cmNlLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBk
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RS
QUNFKCJJREJDdXJzb3I6OnVwZGF0ZSIpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlID0gcHJwVmFsdWU7CiAKICAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJz
b3IoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9T
VEFURV9FUlI7CkBAIC0xNDIsMTcgKzE0MSwxMiBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkN1cnNvcjo6dXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZQog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKHZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDAp
IHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0
U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwogICAgIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOwogICAgIGNvbnN0IGJvb2wg
dXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKICAgICBpZiAodXNlc0luTGluZUtl
eXMpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZy
b21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgUmVm
UHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgodmFsdWUsIGtleVBhdGgpOwogICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBh
dGhLZXktPmlzRXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpIHsKICAgICAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICAgICAgcmV0dXJu
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCmluZGV4
IDU5MDgyODg1OWE3YTMxZDhmMDg4NzFmMmM0MWRmOTMyMDNmYTE3ZGUuLjFiNjE5MzUzZmVkYjUy
YmJiZTEwMjFmOWJjYThhOTk2NTAxMmE3ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPElEQkFueT4gdmFsdWUoKTsKICAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0OwogCi0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gdXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBT
Y3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQg
bG9uZywgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
aWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAppbmRl
eCBkNzNkMTQ2Mjc0NDE4NDAyNzQyMzIwZjRmM2U2MDZhYjNkMjAyZTQ5Li5lYjJjZGFkOGE3NjFi
Y2Y0NjBmYjFmNjZjZTdlM2U5ZDBmZTFkZDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKQEAgLTM5LDcgKzM5LDcgQEAgbW9kdWxlIHN0b3Jh
Z2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IHByaW1hcnlLZXk7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgc291cmNlOwogCi0gICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHVwZGF0ZShpbiBTZXJpYWxpemVk
U2NyaXB0VmFsdWUgdmFsdWUpCisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBJREJSZXF1ZXN0IHVwZGF0ZShpbiBET01PYmplY3QgdmFsdWUpCiAgICAgICAgICAgICBy
YWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCBhZHZhbmNlKGluIHVu
c2lnbmVkIGxvbmcgY291bnQpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcAppbmRleCBhN2FhOGEzZWFiNjA5YzY5MmJlMDg0ODJkNjVhNjZmNDY4Nzc0NWQw
Li4yZTJkN2VkNzJlY2UxYzAwZGEwOTRhYTM4ZDU0MDhiNjQ3NTI4NTBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0x
MDUsMTEgKzEwNSwxMSBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpn
ZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogfQogCiBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzKiBp
bmRleEtleXMpCiB7CiAgICAgQVNTRVJUKGluZGV4S2V5cyk7Ci0gICAgUmVmUHRyPElEQktleT4g
aW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChvYmpl
Y3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKKyAgICBSZWZQdHI8SURCS2V5PiBpbmRl
eEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgob2JqZWN0VmFsdWUs
IGluZGV4TWV0YWRhdGEua2V5UGF0aCk7CiAKICAgICBpZiAoIWluZGV4S2V5KQogICAgICAgICBy
ZXR1cm47CkBAIC0xMjksMjIgKzEyOSwyMSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUluZGV4S2V5
c0ZvclZhbHVlKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEsCiAgICAgfQog
fQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFk
ZCIpOwogICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRP
bmx5LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtleSwgZWMpOwogfQog
Ci1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OnB1dCIp
OwogICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVw
ZGF0ZSwgSURCQW55OjpjcmVhdGUodGhpcyksIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4g
c291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4
Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBT
Y3JpcHRWYWx1ZSYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OnB1dCIpOwotICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CiAgICAgUmVmUHRy
PElEQktleT4ga2V5ID0gcHJwS2V5OwogICAgIGlmIChtX2RlbGV0ZWQpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTU4LDcg
KzE1NywxNSBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0g
ICAgaWYgKHZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDApIHsKKworICAgIFNjcmlwdFN0YXRl
KiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFsdWUuc2VyaWFsaXplKHN0YXRlKTsKKyAg
ICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOwogICAgICAgICByZXR1
cm4gMDsKQEAgLTE3Nyw3ICsxODQsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBh
dGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQ
YXRoKTsKICAgICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkg
ewogICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAg
ICAgICAgICByZXR1cm4gMDsKQEAgLTE4Nyw5ICsxOTQsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQ
dXRNbwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhhc0tl
eUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgewotICAgICAgICAgICAgUmVmUHRyPElEQktleT4g
ZHVtbXlLZXkgPSBJREJLZXk6OmNyZWF0ZU51bWJlcigtMSk7Ci0gICAgICAgICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0SURCS2V5
SW50b1NlcmlhbGl6ZWRWYWx1ZShkdW1teUtleSwgdmFsdWUsIGtleVBhdGgpOwotICAgICAgICAg
ICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7CisgICAgICAgICAgICBpZiAoIWNhbkluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZSh2YWx1ZSwga2V5UGF0aCkpIHsKICAgICAgICAgICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgIH0KQEAgLTIxMyw3ICsyMTgsNyBAQCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlOjpQdXRNbwogICAgIEFTU0VSVChpbmRleEtleXMuc2l6ZSgpID09IGluZGV4TmFtZXMuc2l6
ZSgpKTsKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIHNvdXJjZSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5k
LT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9k
ZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRleE5hbWVzLCBpbmRleEtl
eXMsIGVjKTsKKyAgICBtX2JhY2tlbmQtPnB1dFdpdGhJbmRleEtleXMoc2VyaWFsaXplZFZhbHVl
LnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlv
bi0+YmFja2VuZCgpLCBpbmRleE5hbWVzLCBpbmRleEtleXMsIGVjKTsKICAgICBpZiAoZWMpIHsK
ICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0zMzYsNyArMzQxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFJlZlB0cjxJREJBbnk+IHZh
bHVlQW55ID0gY3Vyc29yLT52YWx1ZSgpOwogCiAgICAgICAgICAgICBBU1NFUlQodmFsdWVBbnkt
PnR5cGUoKSA9PSBJREJBbnk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOwotICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFs
aXplZFNjcmlwdFZhbHVlKCk7CisgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7
CisgICAgICAgICAgICBTY3JpcHRWYWx1ZSB2YWx1ZShkZXNlcmlhbGl6ZUlEQlZhbHVlKHNlcmlh
bGl6ZWRWYWx1ZSkpOwogCiAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGlu
ZGV4S2V5czsKICAgICAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1l
dGFkYXRhLCB2YWx1ZSwgJmluZGV4S2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA5MmUwZmVkOTZhNDYzNmJmYWQzMjY1
YmNiNjM3OTM0ZDQ2MDQzOGEzLi45YTVjNzc1MmJiZDg1NTA0MDdkZGE2ODkwNDc2N2I2OTVhODkz
NjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmgKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQog
ICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0lu
Y3JlbWVudDsgfQogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBl
Yyk7ICB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9
CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
YWRkKGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7
ICB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29y
KGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKICAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVj
dGlvbk5leHQoKSwgZWMpOyB9IAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElE
QkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0gCkBAIC03Nyw4ICs3Nyw4IEBAIHB1Ymxp
YzoKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFk
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
U2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0
VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBA
IC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
OjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8
SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVs
ZXRlZCA9IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmlu
ZGV4IDk5ZDg2ODQ2YjgxZWE5MTA0MGFkMzgwNTBhNjQ0ODUwN2NmYmUwZDYuLjYyNTMyMjNiOGNi
M2M5MWM5ODRkOGU4NWU3Mzc1YmMzMDljMTE1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTM0LDkgKzM0LDkgQEAg
bW9kdWxlIHN0b3JhZ2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb247CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGF1dG9J
bmNyZW1lbnQ7CiAKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlJlcXVlc3QgcHV0KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFs
XSBJREJLZXkga2V5KQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCUmVxdWVzdCBwdXQoaW4gRE9NT2JqZWN0IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBr
ZXkpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBhZGQoaW4gRE9N
T2JqZWN0IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVs
ZXRlKGluIElEQktleVJhbmdlPyBrZXlSYW5nZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0
YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCAxOWZkOTFkOTAwOTM1ZGVkYmM4MTE1ZGQ5NDE0NWE2
OGY0OWU3MDE2Li44MWMwMTYwMzcyZWQzZDVhOWNmMjQzZTYwNjQwNzZhZTI1ZTJmNTlhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cApAQCAtODUsMTAgKzg1LDggQEAgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21W
YWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiAgICAgcmV0dXJuIElEQktleTo6Y3Jl
YXRlSW52YWxpZCgpOwogfQogCi1uYW1lc3BhY2UgewotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
Ym9vbCBnZXRWYWx1ZUZyb20oVCBpbmRleE9yTmFtZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2
OFZhbHVlKQorc3RhdGljIGJvb2wgZ2V0VmFsdWVGcm9tKFQgaW5kZXhPck5hbWUsIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKIHsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2Jq
ZWN0ID0gdjhWYWx1ZS0+VG9PYmplY3QoKTsKICAgICBpZiAoIW9iamVjdC0+SGFzKGluZGV4T3JO
YW1lKSkKQEAgLTk4LDQ5ICs5Niw3MiBAQCBib29sIGdldFZhbHVlRnJvbShUIGluZGV4T3JOYW1l
LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1ib29sIHNldFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhPYmplY3QsIFQgaW5k
ZXhPck5hbWUsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0YXRpYyBi
b29sIHNldFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhPYmplY3QsIFQgaW5kZXhPck5h
bWUsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKIHsKICAgICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjhPYmplY3QtPlRvT2JqZWN0KCk7CiAgICAgcmV0dXJu
IG9iamVjdC0+U2V0KGluZGV4T3JOYW1lLCB2OFZhbHVlKTsKIH0KIAotYm9vbCBnZXQodjg6Okhh
bmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQpCitz
dGF0aWMgYm9vbCBnZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aEVsZW1lbnQsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcmVzdWx0KQogewogICAg
IGlmIChvYmplY3QtPklzU3RyaW5nKCkgJiYga2V5UGF0aEVsZW1lbnQgPT0gImxlbmd0aCIpIHsK
ICAgICAgICAgaW50MzJfdCBsZW5ndGggPSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0KG9i
amVjdCktPkxlbmd0aCgpOwotICAgICAgICBvYmplY3QgPSB2ODo6TnVtYmVyOjpOZXcobGVuZ3Ro
KTsKKyAgICAgICAgcmVzdWx0ID0gdjg6Ok51bWJlcjo6TmV3KGxlbmd0aCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpICYmIGdldFZh
bHVlRnJvbSh2OFN0cmluZyhrZXlQYXRoRWxlbWVudCksIG9iamVjdCk7CisgICAgcmV0dXJuIG9i
amVjdC0+SXNPYmplY3QoKSAmJiBnZXRWYWx1ZUZyb20odjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQp
LCByZXN1bHQpOwogfQogCi1ib29sIHNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
JiB2OFZhbHVlKQorc3RhdGljIGJvb2wgY2FuU2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQogewotICAgIHJldHVybiBvYmplY3Qt
PklzT2JqZWN0KCkgJiYgc2V0VmFsdWUob2JqZWN0LCB2OFN0cmluZyhrZXlQYXRoRWxlbWVudCks
IHY4VmFsdWUpOworICAgIHJldHVybiBvYmplY3QtPklzT2JqZWN0KCk7CiB9CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4m
IHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90
IGluZGV4KQorc3RhdGljIGJvb2wgc2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBj
b25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4m
IHY4VmFsdWUpCiB7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1cnJlbnRWYWx1ZShyb290
VmFsdWUpOworICAgIHJldHVybiBjYW5TZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVudCkgJiYgc2V0
VmFsdWUob2JqZWN0LCB2OFN0cmluZyhrZXlQYXRoRWxlbWVudCksIHY4VmFsdWUpOworfQogCitz
dGF0aWMgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtl
eVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKICAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVs
ZW1lbnRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7
Ci0gICAgICAgIGlmICghZ2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnRzW2ldKSkKKyAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7Cisg
ICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudHNbaV0sIGN1cnJlbnRW
YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gY3VycmVudFZhbHVlOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5zdXJlTnRo
VmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3N0YXRpYyBib29s
IGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZh
bHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgp
CiB7CisgICAgaWYgKCFyb290VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsK
IAogICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIGNvbnN0IFN0cmluZyYg
a2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNbaV07Ci0gICAgICAgIGlmICghZ2V0KGN1
cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpKSB7CisgICAgICAgIGlmICghZ2V0KHBhcmVudFZh
bHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBj
YW5TZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9u
S2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQoreworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKworICAgIEFTU0VSVChpbmRleCA8
PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
ZGV4OyArK2kpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1
cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQ
YXRoRWxlbWVudHNbaV07CisgICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxl
bWVudCwgY3VycmVudFZhbHVlKSkgewogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBvYmplY3QgPSB2ODo6T2JqZWN0OjpOZXcoKTsKICAgICAgICAgICAgIGlmICghc2V0KHBhcmVu
dFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgb2JqZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKQEAgLTE1MSw3ICsxNzIsNDEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVl
LAogICAgIHJldHVybiBjdXJyZW50VmFsdWU7CiB9CiAKLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVB
bmRLZXlQYXRoKFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQorewor
ICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VF
cnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwga2V5UGF0aEVsZW1lbnRz
LCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7
CisKKyAgICBWOEF1eGlsaWFyeUNvbnRleHQgY29udGV4dDsKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdjhWYWx1ZSh2YWx1ZS52OFZhbHVlKCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2OEtleShnZXROdGhWYWx1ZU9uS2V5UGF0aCh2OFZhbHVlLCBrZXlQYXRoRWxlbWVudHMsIGtl
eVBhdGhFbGVtZW50cy5zaXplKCkpKTsKKyAgICBpZiAodjhLZXkuSXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4S2V5KTsKK30K
KworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgoU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAg
IElEQl9UUkFDRSgiY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgiKTsK
KyAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkpOworCisgICAgaWYgKGtleVBhdGgudHlwZSgp
ID09IElEQktleVBhdGg6OkFycmF5VHlwZSkgeworICAgICAgICBJREJLZXk6OktleUFycmF5IHJl
c3VsdDsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJh
eSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0
VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBhcnJheVtpXSk7CisgICAgICAgICAgICBpZiAoIWtleSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShyZXN1bHQp
OworICAgIH0KKworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJp
bmdUeXBlKTsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0
aCh2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7Cit9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPElEQktl
eT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7
CkBAIC0xNzAsNiArMjI1LDEzIEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURC
S2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTCiAgICAgcmV0dXJu
IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2OEtleSk7CiB9CiAKKy8vIEZJWE1FOiBUaGUgb25seSBy
ZWFzb24gdGhpcyBleGlzdHMgaXMgYmVjYXVzZSB3ZSBuZWVkIGEgVjhBdXhpbGlhcnlDb250ZXh0
IGluc2lkZSBhIHRpbWVyLiBJcyB0aGVyZSBhIGJldHRlciAvIG1vcmUgZ2VuZXJhbCB3YXkgdG8g
ZG8gdGhpcz8KK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQoreworICAgIFY4QXV4aWxpYXJ5Q29udGV4dCBj
b250ZXh0OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFZhbHVlKHBycFZhbHVlLT5kZXNl
cmlhbGl6ZSgpKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUodjhWYWx1ZSk7Cit9CiAKIFBhc3NS
ZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIGNvbnN0IElEQktleVBh
dGgmIGtleVBhdGgpCiB7CkBAIC0yMTksNiArMjgxLDIyIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBhc3NSZWZQdHI8
SURCCiAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4VmFsdWUpOwog
fQogCitib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShjb25zdCBTY3JpcHRWYWx1
ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgQVNTRVJU
KGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIFZlY3RvcjxT
dHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsK
KyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aC5zdHJpbmcoKSwga2V5UGF0aEVsZW1lbnRzLCBl
cnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisK
KyAgICBpZiAoIWtleVBhdGhFbGVtZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFY4QXV4aWxpYXJ5Q29udGV4dCBjb250ZXh0OworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2OFZhbHVlKHNjcmlwdFZhbHVlLnY4VmFsdWUoKSk7CisgICAgcmV0dXJuIGNhbkluamVj
dE50aFZhbHVlT25LZXlQYXRoKHY4VmFsdWUsIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1l
bnRzLnNpemUoKSAtIDEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGll
cy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oCmlu
ZGV4IDMwZWVkNDIxYjQ1YjA5MDMwMTFiZDI0OWJiYTBkNzRjMjNiYTI3NGYuLjc5YTNmZGE5NGI3
NjVhY2E4YWJjMGEyMmYyYWRiMThkZjMzMjgyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNp
bmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTM4LDkgKzM5LDE1
IEBAIGNsYXNzIElEQktleVBhdGg7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIFBh
c3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6OkhhbmRsZTx2ODo6VmFs
dWU+KTsKKworLy8gRklYTUU6IHJlbW92ZSB0aGUgU2VyaWFsaXplZFZhbHVlIHZlcnNpb25zIHdo
ZW4gdGhlaXIgdXNlIGlzIGZpbmFsbHkgcmVtb3ZlZCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTU0MDkuCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5
RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBjb25zdCBJREJLZXlQYXRoJik7CiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4s
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgSURCS2V5UGF0aCYpOwog
CitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0
aChTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK2Jvb2wgY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwor
U2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4pOworCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162372</attachid>
            <date>2012-09-05 16:58:53 -0700</date>
            <delta_ts>2012-09-07 11:33:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120905165835.patch</filename>
            <type>text/plain</type>
            <size>24101</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA2Y2FjNDFkYmM0MGZj
Yzg3MWY5ZGRmY2M4MzIyOTBhMmU5ODcxMi4uODMyMTI5YzRhNDg1YWUxNjExYzc2NjQ5NzZjNmFk
NDliMDJmODc4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ2IEBACiAyMDEyLTA4LTI5ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KIAorICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBBbHNvIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0
MDkgZm9yCisgICAgICAgIGZvbGxvd3VwIGdldC9vcGVuQ3Vyc29yIHdvcmssIGZvbGxvd2luZyB0
aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIHJlZmFj
dG9yIGFuZCBleGlzdGluZyB0ZXN0cyBjb3ZlcgorICAgICAgICBjb3JyZWN0bmVzcy4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OnVwZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmg6CisgICAgICAgIChJREJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6
CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2Vy
aWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6
CisgICAgICAgIChXZWJDb3JlKToKKworMjAxMi0wOC0yOSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0
dEBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgSW5kZXhlZERCOiByZW1vdmUgZmluYWwgY3JlYXRl
SW5kZXggYmFja2VuZCBnbHVlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NTM4NQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcAppbmRleCA5MDNkYWI1ODNjMzYzMmE3NjZiOTVkOTc5YjNlMjVkOWZiNzM1
ODkyLi45NmZlODJmNzZkNmQzY2I3MTJiODY0ZjJmYzVlMGRlNDRjMGU5ZmZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTEyNSwxMCAr
MTI1LDkgQEAgSURCQW55KiBJREJDdXJzb3I6OnNvdXJjZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
c291cmNlLmdldCgpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBk
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RS
QUNFKCJJREJDdXJzb3I6OnVwZGF0ZSIpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlID0gcHJwVmFsdWU7CiAKICAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJz
b3IoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9T
VEFURV9FUlI7CkBAIC0xNDIsMTcgKzE0MSwxMiBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
QkN1cnNvcjo6dXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZQog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKHZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDAp
IHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAotICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0
U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOwogICAgIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOwogICAgIGNvbnN0IGJvb2wg
dXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKICAgICBpZiAodXNlc0luTGluZUtl
eXMpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZy
b21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgUmVm
UHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgodmFsdWUsIGtleVBhdGgpOwogICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBh
dGhLZXktPmlzRXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpIHsKICAgICAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICAgICAgcmV0dXJu
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCmluZGV4
IDU5MDgyODg1OWE3YTMxZDhmMDg4NzFmMmM0MWRmOTMyMDNmYTE3ZGUuLjFiNjE5MzUzZmVkYjUy
YmJiZTEwMjFmOWJjYThhOTk2NTAxMmE3ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBQYXNz
UmVmUHRyPElEQkFueT4gdmFsdWUoKTsKICAgICBJREJBbnkqIHNvdXJjZSgpIGNvbnN0OwogCi0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gdXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBT
Y3JpcHRWYWx1ZSYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQg
bG9uZywgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY29udGludWVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
aWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAppbmRl
eCBkNzNkMTQ2Mjc0NDE4NDAyNzQyMzIwZjRmM2U2MDZhYjNkMjAyZTQ5Li5lYjJjZGFkOGE3NjFi
Y2Y0NjBmYjFmNjZjZTdlM2U5ZDBmZTFkZDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKQEAgLTM5LDcgKzM5LDcgQEAgbW9kdWxlIHN0b3Jh
Z2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IHByaW1hcnlLZXk7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgc291cmNlOwogCi0gICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHVwZGF0ZShpbiBTZXJpYWxpemVk
U2NyaXB0VmFsdWUgdmFsdWUpCisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBJREJSZXF1ZXN0IHVwZGF0ZShpbiBET01PYmplY3QgdmFsdWUpCiAgICAgICAgICAgICBy
YWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCBhZHZhbmNlKGluIHVu
c2lnbmVkIGxvbmcgY291bnQpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmNwcAppbmRleCBhN2FhOGEzZWFiNjA5YzY5MmJlMDg0ODJkNjVhNjZmNDY4Nzc0NWQw
Li4yZTJkN2VkNzJlY2UxYzAwZGEwOTRhYTM4ZDU0MDhiNjQ3NTI4NTBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0x
MDUsMTEgKzEwNSwxMSBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpn
ZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogfQogCiBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4
TWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzKiBp
bmRleEtleXMpCiB7CiAgICAgQVNTRVJUKGluZGV4S2V5cyk7Ci0gICAgUmVmUHRyPElEQktleT4g
aW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChvYmpl
Y3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKKyAgICBSZWZQdHI8SURCS2V5PiBpbmRl
eEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgob2JqZWN0VmFsdWUs
IGluZGV4TWV0YWRhdGEua2V5UGF0aCk7CiAKICAgICBpZiAoIWluZGV4S2V5KQogICAgICAgICBy
ZXR1cm47CkBAIC0xMjksMjIgKzEyOSwyMSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUluZGV4S2V5
c0ZvclZhbHVlKGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEsCiAgICAgfQog
fQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OmFk
ZCIpOwogICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRP
bmx5LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtleSwgZWMpOwogfQog
Ci1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OnB1dCIp
OwogICAgIHJldHVybiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVw
ZGF0ZSwgSURCQW55OjpjcmVhdGUodGhpcyksIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4g
c291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4
Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSBwdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBT
Y3JpcHRWYWx1ZSYgdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmU6OnB1dCIpOwotICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7CiAgICAgUmVmUHRy
PElEQktleT4ga2V5ID0gcHJwS2V5OwogICAgIGlmIChtX2RlbGV0ZWQpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTU4LDcg
KzE1NywxNSBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0g
ICAgaWYgKHZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDApIHsKKworICAgIFNjcmlwdFN0YXRl
KiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFsdWUuc2VyaWFsaXplKHN0YXRlKTsKKyAg
ICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOwogICAgICAgICByZXR1
cm4gMDsKQEAgLTE3Nyw3ICsxODQsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBh
dGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQ
YXRoKTsKICAgICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkg
ewogICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAg
ICAgICAgICByZXR1cm4gMDsKQEAgLTE4Nyw5ICsxOTQsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQ
dXRNbwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhhc0tl
eUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgewotICAgICAgICAgICAgUmVmUHRyPElEQktleT4g
ZHVtbXlLZXkgPSBJREJLZXk6OmNyZWF0ZU51bWJlcigtMSk7Ci0gICAgICAgICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0SURCS2V5
SW50b1NlcmlhbGl6ZWRWYWx1ZShkdW1teUtleSwgdmFsdWUsIGtleVBhdGgpOwotICAgICAgICAg
ICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7CisgICAgICAgICAgICBpZiAoIWNhbkluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZSh2YWx1ZSwga2V5UGF0aCkpIHsKICAgICAgICAgICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgIH0KQEAgLTIxMyw3ICsyMTgsNyBAQCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlOjpQdXRNbwogICAgIEFTU0VSVChpbmRleEtleXMuc2l6ZSgpID09IGluZGV4TmFtZXMuc2l6
ZSgpKTsKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIHNvdXJjZSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5k
LT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9k
ZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRleE5hbWVzLCBpbmRleEtl
eXMsIGVjKTsKKyAgICBtX2JhY2tlbmQtPnB1dFdpdGhJbmRleEtleXMoc2VyaWFsaXplZFZhbHVl
LnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlv
bi0+YmFja2VuZCgpLCBpbmRleE5hbWVzLCBpbmRleEtleXMsIGVjKTsKICAgICBpZiAoZWMpIHsK
ICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0zMzYsNyArMzQxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFJlZlB0cjxJREJBbnk+IHZh
bHVlQW55ID0gY3Vyc29yLT52YWx1ZSgpOwogCiAgICAgICAgICAgICBBU1NFUlQodmFsdWVBbnkt
PnR5cGUoKSA9PSBJREJBbnk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOwotICAgICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFs
aXplZFNjcmlwdFZhbHVlKCk7CisgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7
CisgICAgICAgICAgICBTY3JpcHRWYWx1ZSB2YWx1ZShkZXNlcmlhbGl6ZUlEQlZhbHVlKHNlcmlh
bGl6ZWRWYWx1ZSkpOwogCiAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGlu
ZGV4S2V5czsKICAgICAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1l
dGFkYXRhLCB2YWx1ZSwgJmluZGV4S2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA5MmUwZmVkOTZhNDYzNmJmYWQzMjY1
YmNiNjM3OTM0ZDQ2MDQzOGEzLi45YTVjNzc1MmJiZDg1NTA0MDdkZGE2ODkwNDc2N2I2OTVhODkz
NjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmgKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQog
ICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0lu
Y3JlbWVudDsgfQogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBl
Yyk7ICB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9
CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
YWRkKGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7
ICB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29y
KGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKICAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVj
dGlvbk5leHQoKSwgZWMpOyB9IAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElE
QkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0gCkBAIC03Nyw4ICs3Nyw4IEBAIHB1Ymxp
YzoKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFk
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
U2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0
VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBA
IC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
OjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8
SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVs
ZXRlZCA9IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmlu
ZGV4IDk5ZDg2ODQ2YjgxZWE5MTA0MGFkMzgwNTBhNjQ0ODUwN2NmYmUwZDYuLjYyNTMyMjNiOGNi
M2M5MWM5ODRkOGU4NWU3Mzc1YmMzMDljMTE1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTM0LDkgKzM0LDkgQEAg
bW9kdWxlIHN0b3JhZ2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb247CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGF1dG9J
bmNyZW1lbnQ7CiAKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlJlcXVlc3QgcHV0KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFs
XSBJREJLZXkga2V5KQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCUmVxdWVzdCBwdXQoaW4gRE9NT2JqZWN0IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBr
ZXkpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBhZGQoaW4gRE9N
T2JqZWN0IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVs
ZXRlKGluIElEQktleVJhbmdlPyBrZXlSYW5nZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0
YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCAxOWZkOTFkOTAwOTM1ZGVkYmM4MTE1ZGQ5NDE0NWE2
OGY0OWU3MDE2Li5lYzg2YzdjNTM0NWQ0ZjA2MWJkNjhhMjE0ODU0ZDY1Njc1MDZkOTZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cApAQCAtODUsMTAgKzg1LDggQEAgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21W
YWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiAgICAgcmV0dXJuIElEQktleTo6Y3Jl
YXRlSW52YWxpZCgpOwogfQogCi1uYW1lc3BhY2UgewotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
Ym9vbCBnZXRWYWx1ZUZyb20oVCBpbmRleE9yTmFtZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2
OFZhbHVlKQorc3RhdGljIGJvb2wgZ2V0VmFsdWVGcm9tKFQgaW5kZXhPck5hbWUsIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKIHsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2Jq
ZWN0ID0gdjhWYWx1ZS0+VG9PYmplY3QoKTsKICAgICBpZiAoIW9iamVjdC0+SGFzKGluZGV4T3JO
YW1lKSkKQEAgLTk4LDQ5ICs5Niw3MiBAQCBib29sIGdldFZhbHVlRnJvbShUIGluZGV4T3JOYW1l
LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1ib29sIHNldFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhPYmplY3QsIFQgaW5k
ZXhPck5hbWUsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0YXRpYyBi
b29sIHNldFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhPYmplY3QsIFQgaW5kZXhPck5h
bWUsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKIHsKICAgICB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjhPYmplY3QtPlRvT2JqZWN0KCk7CiAgICAgcmV0dXJu
IG9iamVjdC0+U2V0KGluZGV4T3JOYW1lLCB2OFZhbHVlKTsKIH0KIAotYm9vbCBnZXQodjg6Okhh
bmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQpCitz
dGF0aWMgYm9vbCBnZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aEVsZW1lbnQsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcmVzdWx0KQogewogICAg
IGlmIChvYmplY3QtPklzU3RyaW5nKCkgJiYga2V5UGF0aEVsZW1lbnQgPT0gImxlbmd0aCIpIHsK
ICAgICAgICAgaW50MzJfdCBsZW5ndGggPSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0KG9i
amVjdCktPkxlbmd0aCgpOwotICAgICAgICBvYmplY3QgPSB2ODo6TnVtYmVyOjpOZXcobGVuZ3Ro
KTsKKyAgICAgICAgcmVzdWx0ID0gdjg6Ok51bWJlcjo6TmV3KGxlbmd0aCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KLSAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpICYmIGdldFZh
bHVlRnJvbSh2OFN0cmluZyhrZXlQYXRoRWxlbWVudCksIG9iamVjdCk7CisgICAgcmV0dXJuIG9i
amVjdC0+SXNPYmplY3QoKSAmJiBnZXRWYWx1ZUZyb20odjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQp
LCByZXN1bHQpOwogfQogCi1ib29sIHNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
JiB2OFZhbHVlKQorc3RhdGljIGJvb2wgY2FuU2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQogewotICAgIHJldHVybiBvYmplY3Qt
PklzT2JqZWN0KCkgJiYgc2V0VmFsdWUob2JqZWN0LCB2OFN0cmluZyhrZXlQYXRoRWxlbWVudCks
IHY4VmFsdWUpOworICAgIHJldHVybiBvYmplY3QtPklzT2JqZWN0KCk7CiB9CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4m
IHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90
IGluZGV4KQorc3RhdGljIGJvb2wgc2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBj
b25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4m
IHY4VmFsdWUpCiB7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1cnJlbnRWYWx1ZShyb290
VmFsdWUpOworICAgIHJldHVybiBjYW5TZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVudCkgJiYgc2V0
VmFsdWUob2JqZWN0LCB2OFN0cmluZyhrZXlQYXRoRWxlbWVudCksIHY4VmFsdWUpOworfQogCitz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVs
ZW1lbnRzLCBzaXplX3QgaW5kZXgpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1cnJl
bnRWYWx1ZShyb290VmFsdWUpOwogICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMu
c2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKLSAgICAg
ICAgaWYgKCFnZXQoY3VycmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudHNbaV0pKQorICAgICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAg
aWYgKCFnZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50c1tpXSwgY3VycmVudFZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHJldHVybiBj
dXJyZW50VmFsdWU7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9u
S2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQorc3RhdGljIGJvb2wgY2FuSW5q
ZWN0TnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKIHsKKyAg
ICBpZiAoIXJvb3RWYWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOwogCiAgICAg
QVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaW5kZXg7ICsraSkgewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
cGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRo
RWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKCFnZXQoY3VycmVudFZh
bHVlLCBrZXlQYXRoRWxlbWVudCkpIHsKKyAgICAgICAgaWYgKCFnZXQocGFyZW50VmFsdWUsIGtl
eVBhdGhFbGVtZW50LCBjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGNhblNldChw
YXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25LZXlQYXRo
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
a2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOworCisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBh
dGhFbGVtZW50cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXg7ICsr
aSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyZW50VmFsdWUoY3VycmVudFZh
bHVlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVt
ZW50c1tpXTsKKyAgICAgICAgaWYgKCFnZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBj
dXJyZW50VmFsdWUpKSB7CiAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVj
dCA9IHY4OjpPYmplY3Q6Ok5ldygpOwogICAgICAgICAgICAgaWYgKCFzZXQocGFyZW50VmFsdWUs
IGtleVBhdGhFbGVtZW50LCBvYmplY3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB2OFVuZGVm
aW5lZCgpOwpAQCAtMTUxLDcgKzE3Miw0MSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5zdXJl
TnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsCiAgICAg
cmV0dXJuIGN1cnJlbnRWYWx1ZTsKIH0KIAotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCitzdGF0
aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgoU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgVmVj
dG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVy
cm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9y
KTsKKyAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAg
IFY4QXV4aWxpYXJ5Q29udGV4dCBjb250ZXh0OworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
OFZhbHVlKHZhbHVlLnY4VmFsdWUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4S2V5
KGdldE50aFZhbHVlT25LZXlQYXRoKHY4VmFsdWUsIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVs
ZW1lbnRzLnNpemUoKSkpOworICAgIGlmICh2OEtleS5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjhLZXkpOworfQorCitQYXNz
UmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChTY3Jp
cHRWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RS
QUNFKCJjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCIpOworICAgIEFT
U0VSVCgha2V5UGF0aC5pc051bGwoKSk7CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURC
S2V5UGF0aDo6QXJyYXlUeXBlKSB7CisgICAgICAgIElEQktleTo6S2V5QXJyYXkgcmVzdWx0Owor
ICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgodmFsdWUsIGFycmF5W2ldKTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7CisgICAg
fQorCisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUp
OworICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVl
LCBrZXlQYXRoLnN0cmluZygpKTsKK30KIAogc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKQEAgLTE3
MCw2ICsyMjUsMTMgQEAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9t
U2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFMKICAgICByZXR1cm4gY3JlYXRl
SURCS2V5RnJvbVZhbHVlKHY4S2V5KTsKIH0KIAorLy8gRklYTUU6IFRoZSBvbmx5IHJlYXNvbiB0
aGlzIGV4aXN0cyBpcyBiZWNhdXNlIHdlIG5lZWQgYSBWOEF1eGlsaWFyeUNvbnRleHQgaW5zaWRl
IGEgdGltZXIuIElzIHRoZXJlIGEgYmV0dGVyIC8gbW9yZSBnZW5lcmFsIHdheSB0byBkbyB0aGlz
PworU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gcHJwVmFsdWUpCit7CisgICAgVjhBdXhpbGlhcnlDb250ZXh0IGNvbnRleHQ7
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4VmFsdWUocHJwVmFsdWUtPmRlc2VyaWFsaXpl
KCkpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZSh2OFZhbHVlKTsKK30KIAogUGFzc1JlZlB0cjxJ
REJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5
UGF0aCkKIHsKQEAgLTIxOSw2ICsyODEsMjIgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREIKICAg
ICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSk7CiB9CiAKK2Jv
b2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiBzY3Jp
cHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBBU1NFUlQoa2V5UGF0
aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0cmluZz4g
a2V5UGF0aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElE
QlBhcnNlS2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsK
KyAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIGlm
ICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
VjhBdXhpbGlhcnlDb250ZXh0IGNvbnRleHQ7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4
VmFsdWUoc2NyaXB0VmFsdWUudjhWYWx1ZSgpKTsKKyAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFs
dWVPbktleVBhdGgodjhWYWx1ZSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6
ZSgpIC0gMSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmgKaW5kZXggMzBl
ZWQ0MjFiNDViMDkwMzAxMWJkMjQ5YmJhMGQ3NGMyM2JhMjc0Zi4uNzlhM2ZkYTk0Yjc2NWFjYThh
YmMwYTIyZjJhZGIxOGRmMzMyODIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
PHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtMzgsOSArMzksMTUgQEAgY2xh
c3MgSURCS2V5UGF0aDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogUGFzc1JlZlB0
cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwor
CisvLyBGSVhNRTogcmVtb3ZlIHRoZSBTZXJpYWxpemVkVmFsdWUgdmVyc2lvbnMgd2hlbiB0aGVp
ciB1c2UgaXMgZmluYWxseSByZW1vdmVkIGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NTQwOS4KIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2Vy
aWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4s
IGNvbnN0IElEQktleVBhdGgmKTsKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBp
bmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBJREJLZXlQYXRoJik7CiAKK1Bhc3NS
ZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKFNjcmlw
dFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2Ny
aXB0VmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
Pik7CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162832</attachid>
            <date>2012-09-07 11:33:22 -0700</date>
            <delta_ts>2012-09-10 15:44:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120907113302.patch</filename>
            <type>text/plain</type>
            <size>24880</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3Njk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYxNTQxYjk0MjdlZWQ1
YTU0MGRlM2FhYTUzZTYxMGEzZTg3ZDA1ZC4uNGM3OTgyYmYzZjJmZjk1NGVhMWY0OTNiYmU3M2M2
Nzg1ZDEzMzY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTA5LTA3ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBBbHNvIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0
MDkgZm9yCisgICAgICAgIGZvbGxvd3VwIGdldC9vcGVuQ3Vyc29yIHdvcmssIGZvbGxvd2luZyB0
aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIHJlZmFj
dG9yIGFuZCBleGlzdGluZyB0ZXN0cyBjb3ZlcgorICAgICAgICBjb3JyZWN0bmVzcy4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OnVwZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmg6CisgICAgICAgIChJREJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6
CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2Vy
aWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6
CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wOS0wNiAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0
dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBtYWtlIElEQktleVBhdGgncyBz
dHJpbmcgYW5kIGFycmF5IGNvbnN0cnVjdG9ycyBleHBsaWNpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCA5NzJmNWEyNTZhM2JjYmYxMjIyNWE3MTE5NDYyZWNmN2U4NWEzZjBhLi43Njhh
OWUzYjRmY2E0OTFhYzE1ZTI0ZmI3NDU5ODJlMzcxYzA2NmEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA4LTI5ICBBbGVjIEZsZXR0ICA8YWxlY2Zs
ZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IHJlbW92ZSBmaW5hbCBjcmVh
dGVJbmRleCBiYWNrZW5kIGdsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk1Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVtb3ZlIGNocm9taXVtIGdsdWUgZm9yIG9sZCBrZXktZ2VuZXJhdGlvbiBj
b2RlLgorCisgICAgICAgICogcHVibGljL1dlYklEQktleS5oOgorICAgICAgICAoV2ViSURCS2V5
KToKKyAgICAgICAgKiBzcmMvV2ViSURCS2V5LmNwcDoKKwogMjAxMi0wOS0wNiAgQWxlYyBGbGV0
dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBtYWtlIElE
QktleVBhdGgncyBzdHJpbmcgYW5kIGFycmF5IGNvbnN0cnVjdG9ycyBleHBsaWNpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXggOTAzZGFi
NTgzYzM2MzJhNzY2Yjk1ZDk3OWIzZTI1ZDlmYjczNTg5Mi4uOTZmZTgyZjc2ZDZkM2NiNzEyYjg2
NGYyZmM1ZTBkZTQ0YzBlOWZmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuY3BwCkBAIC0xMjUsMTAgKzEyNSw5IEBAIElEQkFueSogSURCQ3Vyc29y
Ojpzb3VyY2UoKSBjb25zdAogICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKIH0KIAotUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjp1cGRhdGUiKTsK
LSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogCiAg
ICAgaWYgKCFtX2dvdFZhbHVlIHx8IGlzS2V5Q3Vyc29yKCkpIHsKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTQyLDE3ICsxNDEs
MTIgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmUKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlm
ICh2YWx1ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQg
QmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gZWZmZWN0aXZlT2JqZWN0U3Rv
cmUoKTsKICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0gb2JqZWN0U3RvcmUtPm1ldGFk
YXRhKCkua2V5UGF0aDsKICAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0gIWtleVBhdGgu
aXNOdWxsKCk7CiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJlZlB0cjxJREJL
ZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0
aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBj
cmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKICAg
ICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8ICFrZXlQYXRoS2V5LT5pc0VxdWFsKG1fY3VycmVudFBy
aW1hcnlLZXkuZ2V0KCkpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEQVRBX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCA1OTA4Mjg4NTlhN2EzMWQ4ZjA4ODcxZjJj
NDFkZjkzMjAzZmExN2RlLi4xYjYxOTM1M2ZlZGI1MmJiYmUxMDIxZjliY2E4YTk5NjUwMTJhN2U2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAt
NzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJBbnk+IHZhbHVlKCk7CiAg
ICAgSURCQW55KiBzb3VyY2UoKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
dXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVw
ZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggZDczZDE0NjI3NDQxODQwMjc0MjMyMGY0
ZjNlNjA2YWIzZDIwMmU0OS4uZWIyY2RhZDhhNzYxYmNmNDYwZmIxZjY2Y2U3ZTNlOWQwZmUxZGQw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRs
CkBAIC0zOSw3ICszOSw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIElEQktleSBwcmltYXJ5S2V5OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURC
QW55IHNvdXJjZTsKIAotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCUmVxdWVzdCB1cGRhdGUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlKQorICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCB1cGRhdGUoaW4g
RE9NT2JqZWN0IHZhbHVlKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlv
bik7CiAgICAgICAgIHZvaWQgYWR2YW5jZShpbiB1bnNpZ25lZCBsb25nIGNvdW50KQogICAgICAg
ICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggYTdhYThhM2Vh
YjYwOWM2OTJiZTA4NDgyZDY1YTY2ZjQ2ODc3NDVkMC4uMmUyZDdlZDcyZWNlMWMwMGRhMDk0YWEz
OGQ1NDA4YjY0NzUyODUwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTA1LDExICsxMDUsMTEgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3MKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1
ZShjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
b2JqZWN0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmlw
dFZhbHVlJiBvYmplY3RWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyogaW5kZXhLZXlzKQogewogICAgIEFTU0VSVChp
bmRleEtleXMpOwotICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJv
bVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgob2JqZWN0VmFsdWUsIGluZGV4TWV0YWRhdGEua2V5
UGF0aCk7CisgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOwog
CiAgICAgaWYgKCFpbmRleEtleSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI5LDIyICsxMjksMjEg
QEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShjb25zdCBJREJJbmRleE1l
dGFkYXRhJiBpbmRleE1ldGFkYXRhLAogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUm
IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsKICAgICByZXR1cm4gcHV0KElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgSURCQW55OjpjcmVhdGUodGhpcyks
IGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKICAgICByZXR1cm4gcHV0KElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1v
ZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAg
ICBpZiAobV9kZWxldGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9JTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE1OCw3ICsxNTcsMTUgQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW8KICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VS
UjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh2YWx1ZS0+YmxvYlVSTHMoKS5z
aXplKCkgPiAwKSB7CisKKyAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6Y3Vy
cmVudCgpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1
ZSA9IHZhbHVlLnNlcmlhbGl6ZShzdGF0ZSk7CisgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChzZXJpYWxpemVkVmFsdWUt
PmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgewogICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmls
ZS9GaWxlTGlzdCBzdXBwb3J0CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9EQVRBX0NMT05FX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzcsNyArMTg0LDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlm
ICh1c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0g
Y3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgp
OworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CiAgICAgICAgIGlmIChrZXlQYXRo
S2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xODcs
OSArMTk0LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICB9CiAgICAgICAgIGlmIChoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVhdGVO
dW1iZXIoLTEpOwotICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWVBZnRlckluamVjdGlvbiA9IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoZHVtbXlL
ZXksIHZhbHVlLCBrZXlQYXRoKTsKLSAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlv
bikgeworICAgICAgICAgICAgaWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUodmFs
dWUsIGtleVBhdGgpKSB7CiAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6REFUQV9FUlI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CkBA
IC0yMTMsNyArMjE4LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBBU1NFUlQoaW5k
ZXhLZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUoKSk7CiAKICAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2UsIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyh2YWx1ZS5y
ZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24t
PmJhY2tlbmQoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCBlYyk7CisgICAgbV9iYWNrZW5kLT5w
dXRXaXRoSW5kZXhLZXlzKHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCks
IHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywg
aW5kZXhLZXlzLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJs
eURlYXRoKCk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMzM2LDcgKzM0MSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBSZWZQdHI8SURCQW55PiB2YWx1ZUFueSA9IGN1cnNvci0+dmFsdWUoKTsK
IAogICAgICAgICAgICAgQVNTRVJUKHZhbHVlQW55LT50eXBlKCkgPT0gSURCQW55OjpTZXJpYWxp
emVkU2NyaXB0VmFsdWVUeXBlKTsKLSAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlID0gdmFsdWVBbnktPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpOworICAgICAg
ICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFs
dWVBbnktPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpOworICAgICAgICAgICAgU2NyaXB0VmFsdWUg
dmFsdWUoZGVzZXJpYWxpemVJREJWYWx1ZShzZXJpYWxpemVkVmFsdWUpKTsKIAogICAgICAgICAg
ICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyBpbmRleEtleXM7CiAgICAgICAgICAgICBnZW5l
cmF0ZUluZGV4S2V5c0ZvclZhbHVlKG1faW5kZXhNZXRhZGF0YSwgdmFsdWUsICZpbmRleEtleXMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmgKaW5kZXggOTJlMGZlZDk2YTQ2MzZiZmFkMzI2NWJjYjYzNzkzNGQ0NjA0MzhhMy4uOWE1Yzc3
NTJiYmQ4NTUwNDA3ZGRhNjg5MDQ3NjdiNjk1YTg5MzY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC02NCw4ICs2NCw4IEBA
IHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb247IH0KICAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX21ldGFkYXRhLmF1dG9JbmNyZW1lbnQ7IH0KIAotICAgIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gYWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGFkZChjb250ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQotICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gcHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IHB1dChjb250ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gYWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkZChjb250ZXh0LCB2YWx1ZSwgMCwgZWMp
OyAgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIHB1dChjb250ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQogICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJL
ZXlSYW5nZSo+KDApLCBlYyk7IH0gCiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250
ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfSAKICAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwg
ZWMpOyB9IApAQCAtNzcsOCArNzcsOCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBF
eGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJ
REJLZXk+LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNjcmlwdFZhbHVlJiwgUGFzc1JlZlB0cjxJREJLZXk+
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRp
b25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjbGVhcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAg
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0
KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJB
bnk+IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CisgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
OjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2b2lkIG1hcmtEZWxldGVkKCkgeyBtX2RlbGV0ZWQgPSB0cnVlOyB9CiAgICAgdm9pZCB0
cmFuc2FjdGlvbkZpbmlzaGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAppbmRleCA5OWQ4Njg0NmI4MWVhOTEwNDBhZDM4
MDUwYTY0NDg1MDdjZmJlMGQ2Li42MjUzMjIzYjhjYjNjOTFjOTg0ZDhlODVlNzM3NWJjMzA5YzEx
NTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuaWRsCkBAIC0zNCw5ICszNCw5IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIElEQlRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uOwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBhdXRvSW5jcmVtZW50OwogCi0gICAgICAgIFtDYWxs
V2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHB1dChpbiBTZXJpYWxpemVk
U2NyaXB0VmFsdWUgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtleSkKKyAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgcHV0KGluIERPTU9iamVj
dCB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQogICAgICAgICAgICAgcmFpc2VzIChJ
REJEYXRhYmFzZUV4Y2VwdGlvbik7Ci0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0XSBJREJSZXF1ZXN0IGFkZChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdmFsdWUsIGlu
IFtPcHRpb25hbF0gSURCS2V5IGtleSkKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIElEQlJlcXVlc3QgYWRkKGluIERPTU9iamVjdCB2YWx1ZSwgaW4gW09wdGlvbmFs
XSBJREJLZXkga2V5KQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFz
PWRlbGV0ZUZ1bmN0aW9uXSBJREJSZXF1ZXN0IGRlbGV0ZShpbiBJREJLZXlSYW5nZT8ga2V5UmFu
Z2UpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKaW5kZXgg
MTlmZDkxZDkwMDkzNWRlZGJjODExNWRkOTQxNDVhNjhmNDllNzAxNi4uOGI4MjAwODEzNGEzODdl
OGU5MDgwZjI4MTkzZWY0MjkxMjQ5Y2U1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTg1LDEwICs4NSw4IEBAIFBhc3NS
ZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQogICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKIH0KIAotbmFtZXNw
YWNlIHsKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWJvb2wgZ2V0VmFsdWVGcm9tKFQgaW5kZXhP
ck5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0YXRpYyBib29sIGdldFZh
bHVlRnJvbShUIGluZGV4T3JOYW1lLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB7
CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4VmFsdWUtPlRvT2JqZWN0KCk7
CiAgICAgaWYgKCFvYmplY3QtPkhhcyhpbmRleE9yTmFtZSkpCkBAIC05OCw0OSArOTYsNzIgQEAg
Ym9vbCBnZXRWYWx1ZUZyb20oVCBpbmRleE9yTmFtZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2
OFZhbHVlKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBzZXRWYWx1ZSh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1lLCBjb25zdCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4mIHY4VmFsdWUpCitzdGF0aWMgYm9vbCBzZXRWYWx1ZSh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1lLCBjb25zdCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4mIHY4VmFsdWUpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4
T2JqZWN0LT5Ub09iamVjdCgpOwogICAgIHJldHVybiBvYmplY3QtPlNldChpbmRleE9yTmFtZSwg
djhWYWx1ZSk7CiB9CiAKLWJvb2wgZ2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBj
b25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQorc3RhdGljIGJvb2wgZ2V0KHY4OjpIYW5kbGU8
djg6OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4mIHJlc3VsdCkKIHsKICAgICBpZiAob2JqZWN0LT5Jc1N0cmluZygpICYm
IGtleVBhdGhFbGVtZW50ID09ICJsZW5ndGgiKSB7CiAgICAgICAgIGludDMyX3QgbGVuZ3RoID0g
djg6OkhhbmRsZTx2ODo6U3RyaW5nPjo6Q2FzdChvYmplY3QpLT5MZW5ndGgoKTsKLSAgICAgICAg
b2JqZWN0ID0gdjg6Ok51bWJlcjo6TmV3KGxlbmd0aCk7CisgICAgICAgIHJlc3VsdCA9IHY4OjpO
dW1iZXI6Ok5ldyhsZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0
dXJuIG9iamVjdC0+SXNPYmplY3QoKSAmJiBnZXRWYWx1ZUZyb20odjhTdHJpbmcoa2V5UGF0aEVs
ZW1lbnQpLCBvYmplY3QpOworICAgIHJldHVybiBvYmplY3QtPklzT2JqZWN0KCkgJiYgZ2V0VmFs
dWVGcm9tKHY4U3RyaW5nKGtleVBhdGhFbGVtZW50KSwgcmVzdWx0KTsKIH0KIAotYm9vbCBzZXQo
djg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1l
bnQsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0YXRpYyBib29sIGNh
blNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRo
RWxlbWVudCkKIHsKLSAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpICYmIHNldFZhbHVlKG9i
amVjdCwgdjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCB2OFZhbHVlKTsKKyAgICByZXR1cm4gb2Jq
ZWN0LT5Jc09iamVjdCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TnRoVmFsdWVP
bktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3N0YXRpYyBib29sIHNldCh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVu
dCwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogewotICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKyAgICByZXR1cm4gY2FuU2V0
KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpICYmIHNldFZhbHVlKG9iamVjdCwgdjhTdHJpbmcoa2V5
UGF0aEVsZW1lbnQpLCB2OFZhbHVlKTsKK30KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQorewor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKICAgICBB
U1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmRleDsgKytpKSB7Ci0gICAgICAgIGlmICghZ2V0KGN1cnJlbnRWYWx1ZSwg
a2V5UGF0aEVsZW1lbnRzW2ldKSkKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVu
dFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQ
YXRoRWxlbWVudHNbaV0sIGN1cnJlbnRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdjhVbmRl
ZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3VycmVudFZhbHVlOwogfQogCi12ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFs
dWU+JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNp
emVfdCBpbmRleCkKK3N0YXRpYyBib29sIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0
aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCiB7CisgICAgaWYgKCFyb290VmFsdWUtPklzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
dXJyZW50VmFsdWUocm9vdFZhbHVlKTsKIAogICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxl
bWVudHMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsK
ICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7
CiAgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNb
aV07Ci0gICAgICAgIGlmICghZ2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpKSB7Cisg
ICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBjYW5TZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJv
b3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGlu
ZGV4KQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVl
KTsKKworICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNbaV07CisgICAgICAgIGlmICghZ2V0
KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkgewogICAgICAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6T2JqZWN0OjpOZXcoKTsKICAg
ICAgICAgICAgIGlmICghc2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgb2JqZWN0KSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKQEAgLTE1MSw3ICsxNzIsNDEg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLAogICAgIHJldHVybiBjdXJyZW50VmFsdWU7CiB9CiAK
LX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhF
bGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtl
eVBhdGgoa2V5UGF0aCwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9y
ID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdjhWYWx1ZSh2YWx1ZS52OFZhbHVlKCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
OEtleShnZXROdGhWYWx1ZU9uS2V5UGF0aCh2OFZhbHVlLCBrZXlQYXRoRWxlbWVudHMsIGtleVBh
dGhFbGVtZW50cy5zaXplKCkpKTsKKyAgICBpZiAodjhLZXkuSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4S2V5KTsKK30KKwor
UGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
Y29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorewor
ICAgIElEQl9UUkFDRSgiY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCIpOwor
ICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7CisKKyAgICBWOEF1eGlsaWFyeUNvbnRleHQg
Y29udGV4dDsKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBl
KSB7CisgICAgICAgIElEQktleTo6S2V5QXJyYXkgcmVzdWx0OworICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJREJL
ZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGFy
cmF5W2ldKTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7CisgICAgfQorCisgICAgQVNTRVJUKGtl
eVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIHJldHVybiBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoLnN0cmluZygp
KTsKK30KIAogc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFs
aXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJw
VmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKQEAgLTE3MCw2ICsyMjUsMTMgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5k
S2V5UGF0aChQYXNzUmVmUHRyPFMKICAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4
S2V5KTsKIH0KIAorLy8gRklYTUU6IFRoZSBvbmx5IHJlYXNvbiB0aGlzIGV4aXN0cyBpcyBiZWNh
dXNlIHdlIG5lZWQgYSBWOEF1eGlsaWFyeUNvbnRleHQgaW5zaWRlIGEgdGltZXIuIElzIHRoZXJl
IGEgYmV0dGVyIC8gbW9yZSBnZW5lcmFsIHdheSB0byBkbyB0aGlzPworU2NyaXB0VmFsdWUgZGVz
ZXJpYWxpemVJREJWYWx1ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFs
dWUpCit7CisgICAgVjhBdXhpbGlhcnlDb250ZXh0IGNvbnRleHQ7CisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHY4VmFsdWUocHJwVmFsdWUtPmRlc2VyaWFsaXplKCkpOworICAgIHJldHVybiBT
Y3JpcHRWYWx1ZSh2OFZhbHVlKTsKK30KIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktl
eUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBwcnBWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKQEAgLTIxOSw2
ICsyODEsMjMgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktl
eUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREIKICAgICByZXR1cm4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSk7CiB9CiAKK2Jvb2wgY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImNhbkluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZSIpOworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpT
dHJpbmdUeXBlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CisgICAgSURC
S2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGguc3Ry
aW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJvciA9PSBJREJL
ZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYgKCFrZXlQYXRoRWxlbWVudHMuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWOEF1eGlsaWFyeUNvbnRleHQgY29udGV4
dDsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhWYWx1ZShzY3JpcHRWYWx1ZS52OFZhbHVl
KCkpOworICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCh2OFZhbHVlLCBrZXlQ
YXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCAzMGVlZDQyMWI0NWIwOTAzMDExYmQyNDliYmEw
ZDc0YzIzYmEyNzRmLi5hNGNkNmNiZDc3ZGFkODYxNjRhMTZkMGNkNjE1M2Q1Yjg4ZTcxYzhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5o
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2lu
Y2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogCkBAIC0zOCw5ICszOSwxNSBAQCBjbGFzcyBJREJLZXlQYXRoOwogY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOwogCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJv
bVZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKy8vIEZJWE1FOiByZW1vdmUgdGhlIFNl
cmlhbGl6ZWRWYWx1ZSB2ZXJzaW9ucyB3aGVuIHRoZWlyIHVzZSBpcyBmaW5hbGx5IHJlbW92ZWQg
aW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDA5LgogUGFzc1Jl
ZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgSURCS2V5UGF0aCYpOwogUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVk
VmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4sIGNvbnN0IElEQktleVBhdGgmKTsKIAorUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJL
ZXlQYXRoJik7Citib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShjb25zdCBTY3Jp
cHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURC
VmFsdWUoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKKwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163236</attachid>
            <date>2012-09-10 15:44:17 -0700</date>
            <delta_ts>2012-09-11 10:54:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120910154353.patch</filename>
            <type>text/plain</type>
            <size>25192</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNhZTY2ZjExM2ExZjk5
NWQxY2NiMDY4YzY2YjViOTQwMTY5NjI4OC4uZDVmMWNmNDJkMWFlNTI1NmEwYWUxYmNjYzY1ODc2
MTMyNmZmYWFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA5LTA3ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBBbHNvIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0
MDkgZm9yCisgICAgICAgIGZvbGxvd3VwIGdldC9vcGVuQ3Vyc29yIHdvcmssIGZvbGxvd2luZyB0
aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIHJlZmFj
dG9yIGFuZCBleGlzdGluZyB0ZXN0cyBjb3ZlcgorICAgICAgICBjb3JyZWN0bmVzcy4KKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJREJDdXJzb3I6OnVwZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmg6CisgICAgICAgIChJREJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6
CisgICAgICAgIChJREJPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2Vy
aWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6
CisgICAgICAgIChXZWJDb3JlKToKKworMjAxMi0wOS0wNiAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0
dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBtYWtlIElEQktleVBhdGgncyBz
dHJpbmcgYW5kIGFycmF5IGNvbnN0cnVjdG9ycyBleHBsaWNpdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYwMDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtpbmcgdGhlc2UgZXhwbGljaXQgdG8gYXZv
aWQgYWNjaWRlbnRhbCBpbXBsaWNpdCBjb252ZXJzaW9ucy4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIGV4aXN0aW5nIHRlc3RzIGNvdmVyIGNvcnJlY3RuZXNzLgorCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UGF0aC5oOgorICAgICAgICAoSURCS2V5UGF0aCk6CisKIDIwMTIt
MDktMDkgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
QWRkIFN0cmluZ0J1aWxkZXI6OmFwcGVuZE51bWJlcigpIGFuZCB1c2UgaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDkwM2RhYjU4M2Mz
NjMyYTc2NmI5NWQ5NzliM2UyNWQ5ZmI3MzU4OTIuLjk2ZmU4MmY3NmQ2ZDNjYjcxMmI4NjRmMmZj
NWUwZGU0NGMwZTlmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcApAQCAtMTI1LDEwICsxMjUsOSBAQCBJREJBbnkqIElEQkN1cnNvcjo6c291
cmNlKCkgY29uc3QKICAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7Ci0gICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKIAogICAgIGlm
ICghbV9nb3RWYWx1ZSB8fCBpc0tleUN1cnNvcigpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE0MiwxNyArMTQxLDEyIEBA
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlJFQURfT05MWV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodmFs
dWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2Iv
RmlsZS9GaWxlTGlzdCBzdXBwb3J0Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OklEQl9EQVRBX0NMT05FX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7
CiAgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgp
LmtleVBhdGg7CiAgICAgY29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVs
bCgpOwogICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBr
ZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFs
dWUsIGtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRl
SURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CiAgICAgICAg
IGlmICgha2V5UGF0aEtleSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5
S2V5LmdldCgpKSkgewogICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFU
QV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmgKaW5kZXggNTkwODI4ODU5YTdhMzFkOGYwODg3MWYyYzQxZGY5
MzIwM2ZhMTdkZS4uMWI2MTkzNTNmZWRiNTJiYmJlMTAyMWY5YmNhOGE5OTY1MDEyYTdlNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKQEAgLTc1LDcg
Kzc1LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpOwogICAgIElE
QkFueSogc291cmNlKCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCBjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuaWRsCmluZGV4IGQ3M2QxNDYyNzQ0MTg0MDI3NDIzMjBmNGYzZTYw
NmFiM2QyMDJlNDkuLmViMmNkYWQ4YTc2MWJjZjQ2MGZiMWY2NmNlN2UzZTlkMGZlMWRkMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAt
MzksNyArMzksNyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBJREJLZXkgcHJpbWFyeUtleTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBz
b3VyY2U7CiAKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJl
cXVlc3QgdXBkYXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKKyAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIERPTU9i
amVjdCB2YWx1ZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwog
ICAgICAgICB2b2lkIGFkdmFuY2UoaW4gdW5zaWduZWQgbG9uZyBjb3VudCkKICAgICAgICAgICAg
IHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGE3YWE4YTNlYWI2MDlj
NjkyYmUwODQ4MmQ2NWE2NmY0Njg3NzQ1ZDAuLmNlNDkzMTMyMDE4MDFjY2QzMjYzZTAyNjg5M2Nh
ZDNiZjMxYmRmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEwNSwxMSArMTA1LDExIEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzCiB9CiAKIHN0YXRpYyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29u
c3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVj
dFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRWYWx1
ZSYgb2JqZWN0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElE
Qk9iamVjdFN0b3JlOjpJbmRleEtleXMqIGluZGV4S2V5cykKIHsKICAgICBBU1NFUlQoaW5kZXhL
ZXlzKTsKLSAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJp
YWxpemVkVmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgp
OworICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZh
bHVlQW5kS2V5UGF0aChvYmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKIAogICAg
IGlmICghaW5kZXhLZXkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyOSwyMiArMTI5LDIxIEBAIHN0
YXRpYyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0
YSYgaW5kZXhNZXRhZGF0YSwKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1
ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURC
X1RSQUNFKCJJREJPYmplY3RTdG9yZTo6YWRkIik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250
ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2Jq
ZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4
Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RS
QUNFKCJJREJPYmplY3RTdG9yZTo6cHV0Iik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29u
dGV4dCwgdmFsdWUsIGtleSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1
dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZTo6cHV0Iik7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWUgPSBwcnBWYWx1ZTsKICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CiAgICAgaWYg
KG1fZGVsZXRlZCkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5W
QUxJRF9TVEFURV9FUlI7CkBAIC0xNTgsNyArMTU3LDE1IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1
dE1vCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgp
ID4gMCkgeworCisgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQo
KTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2
YWx1ZS5zZXJpYWxpemUoc3RhdGUpOworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlLT5ibG9i
VVJMcygpLnNpemUoKSA+IDApIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmls
ZUxpc3Qgc3VwcG9ydAogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFU
QV9DTE9ORV9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTc3LDcgKzE4NCw3IEBAIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAodXNl
c0luTGluZUtleXMpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0
ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAg
ICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOwogICAgICAgICBpZiAoa2V5UGF0aEtleSAm
JiAha2V5UGF0aEtleS0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTg3LDkgKzE5
NCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgfQogICAgICAgICBpZiAoaGFzS2V5R2VuZXJhdG9yICYmICFrZXlQYXRoS2V5KSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVy
KC0xKTsKLSAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0
ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGR1bW15S2V5LCB2
YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsK
KyAgICAgICAgICAgIGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHZhbHVlLCBr
ZXlQYXRoKSkgewogICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRB
VEFfRVJSOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpAQCAtMjEz
LDcgKzIxOCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgQVNTRVJUKGluZGV4S2V5
cy5zaXplKCkgPT0gaW5kZXhOYW1lcy5zaXplKCkpOwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgc291cmNlLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnB1dFdpdGhJbmRleEtleXModmFsdWUucmVsZWFz
ZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGluZGV4TmFtZXMsIGluZGV4S2V5cywgZWMpOworICAgIG1fYmFja2VuZC0+cHV0V2l0
aEluZGV4S2V5cyhzZXJpYWxpemVkVmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRN
b2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFtZXMsIGluZGV4
S2V5cywgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0
aCgpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTMxMyw3ICszMTgsNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEV2ZW50KiBldmVudCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCk7CiAg
ICAgICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CkBAIC0zMzYsNyAr
MzQxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFJlZlB0cjxJREJBbnk+IHZhbHVlQW55ID0g
Y3Vyc29yLT52YWx1ZSgpOwogCiAgICAgICAgICAgICBBU1NFUlQodmFsdWVBbnktPnR5cGUoKSA9
PSBJREJBbnk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOwotICAgICAgICAgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlw
dFZhbHVlKCk7CisgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkVmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisgICAgICAg
ICAgICBTY3JpcHRWYWx1ZSB2YWx1ZShkZXNlcmlhbGl6ZUlEQlZhbHVlKGNvbnRleHQsIHNlcmlh
bGl6ZWRWYWx1ZSkpOwogCiAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGlu
ZGV4S2V5czsKICAgICAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1l
dGFkYXRhLCB2YWx1ZSwgJmluZGV4S2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCBjMDUzMzJhNTE2NzYxNWQ4MzdiODRh
NmYxNDAwMjEwOWJhNTAwNDYwLi40ODc1NjNkMmE5ZDZkMWU2ZTUxMWU0ZWZhNTY5OTZkZjIzN2Ji
Mjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmgKQEAgLTY0LDggKzY0LDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQog
ICAgIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0lu
Y3JlbWVudDsgfQogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBl
Yyk7ICB9Ci0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9
CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
YWRkKGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7
ICB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29y
KGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKICAgICBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVj
dGlvbk5leHQoKSwgZWMpOyB9IAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElE
QkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0gCkBAIC03Nyw4ICs3Nyw4IEBAIHB1Ymxp
YzoKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFk
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
U2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0
VmFsdWUmLCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBA
IC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
OjpQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8
SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVs
ZXRlZCA9IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmlu
ZGV4IDk5ZDg2ODQ2YjgxZWE5MTA0MGFkMzgwNTBhNjQ0ODUwN2NmYmUwZDYuLjYyNTMyMjNiOGNi
M2M5MWM5ODRkOGU4NWU3Mzc1YmMzMDljMTE1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTM0LDkgKzM0LDkgQEAg
bW9kdWxlIHN0b3JhZ2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNhY3Rp
b24gdHJhbnNhY3Rpb247CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGF1dG9J
bmNyZW1lbnQ7CiAKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlJlcXVlc3QgcHV0KGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFs
XSBJREJLZXkga2V5KQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCUmVxdWVzdCBwdXQoaW4gRE9NT2JqZWN0IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBr
ZXkpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBhZGQoaW4gRE9N
T2JqZWN0IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVs
ZXRlKGluIElEQktleVJhbmdlPyBrZXlSYW5nZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0
YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCAxOWZkOTFkOTAwOTM1ZGVkYmM4MTE1ZGQ5NDE0NWE2
OGY0OWU3MDE2Li41ZjBlMmNiNWZiNWE5OWZjYTExNmRkNjkyYWU4Zjg2MTBjYTI4MmExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4SURCS2V5LmgiCisjaW5jbHVkZSAi
V29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTg1LDEwICs4Niw4IEBAIFBhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogICAg
IHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKIH0KIAotbmFtZXNwYWNlIHsKLQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLWJvb2wgZ2V0VmFsdWVGcm9tKFQgaW5kZXhPck5hbWUsIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0YXRpYyBib29sIGdldFZhbHVlRnJvbShUIGlu
ZGV4T3JOYW1lLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB7CiAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4VmFsdWUtPlRvT2JqZWN0KCk7CiAgICAgaWYgKCFv
YmplY3QtPkhhcyhpbmRleE9yTmFtZSkpCkBAIC05OCw0OSArOTcsNzIgQEAgYm9vbCBnZXRWYWx1
ZUZyb20oVCBpbmRleE9yTmFtZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBzZXRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1lLCBjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4m
IHY4VmFsdWUpCitzdGF0aWMgYm9vbCBzZXRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4
T2JqZWN0LCBUIGluZGV4T3JOYW1lLCBjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFs
dWUpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4T2JqZWN0LT5Ub09i
amVjdCgpOwogICAgIHJldHVybiBvYmplY3QtPlNldChpbmRleE9yTmFtZSwgdjhWYWx1ZSk7CiB9
CiAKLWJvb2wgZ2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcm
IGtleVBhdGhFbGVtZW50KQorc3RhdGljIGJvb2wgZ2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYg
b2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4mIHJlc3VsdCkKIHsKICAgICBpZiAob2JqZWN0LT5Jc1N0cmluZygpICYmIGtleVBhdGhFbGVt
ZW50ID09ICJsZW5ndGgiKSB7CiAgICAgICAgIGludDMyX3QgbGVuZ3RoID0gdjg6OkhhbmRsZTx2
ODo6U3RyaW5nPjo6Q2FzdChvYmplY3QpLT5MZW5ndGgoKTsKLSAgICAgICAgb2JqZWN0ID0gdjg6
Ok51bWJlcjo6TmV3KGxlbmd0aCk7CisgICAgICAgIHJlc3VsdCA9IHY4OjpOdW1iZXI6Ok5ldyhs
ZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIG9iamVjdC0+
SXNPYmplY3QoKSAmJiBnZXRWYWx1ZUZyb20odjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCBvYmpl
Y3QpOworICAgIHJldHVybiBvYmplY3QtPklzT2JqZWN0KCkgJiYgZ2V0VmFsdWVGcm9tKHY4U3Ry
aW5nKGtleVBhdGhFbGVtZW50KSwgcmVzdWx0KTsKIH0KIAotYm9vbCBzZXQodjg6OkhhbmRsZTx2
ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsIGNvbnN0IHY4
OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0YXRpYyBib29sIGNhblNldCh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCkKIHsK
LSAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpICYmIHNldFZhbHVlKG9iamVjdCwgdjhTdHJp
bmcoa2V5UGF0aEVsZW1lbnQpLCB2OFZhbHVlKTsKKyAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVj
dCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TnRoVmFsdWVPbktleVBhdGgodjg6
OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQ
YXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3N0YXRpYyBib29sIHNldCh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgY29uc3Qgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogewotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKyAgICByZXR1cm4gY2FuU2V0KG9iamVjdCwga2V5
UGF0aEVsZW1lbnQpICYmIHNldFZhbHVlKG9iamVjdCwgdjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQp
LCB2OFZhbHVlKTsKK30KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROdGhWYWx1
ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQoreworICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKICAgICBBU1NFUlQoaW5kZXgg
PD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmRleDsgKytpKSB7Ci0gICAgICAgIGlmICghZ2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1l
bnRzW2ldKSkKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJl
bnRWYWx1ZSk7CisgICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudHNb
aV0sIGN1cnJlbnRWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAg
ICB9CiAKICAgICByZXR1cm4gY3VycmVudFZhbHVlOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFs
dWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkK
K3N0YXRpYyBib29sIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBz
aXplX3QgaW5kZXgpCiB7CisgICAgaWYgKCFyb290VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUo
cm9vdFZhbHVlKTsKIAogICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgIGNv
bnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNbaV07Ci0gICAgICAg
IGlmICghZ2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpKSB7CisgICAgICAgIGlmICgh
Z2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBjYW5TZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50KTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnN1
cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQoreworICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKworICAgIEFT
U0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBh
cmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVs
ZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNbaV07CisgICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVl
LCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkgewogICAgICAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6T2JqZWN0OjpOZXcoKTsKICAgICAgICAgICAgIGlm
ICghc2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgb2JqZWN0KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKQEAgLTE1MSw3ICsxNzMsNDEgQEAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiYgcm9vdFZhbHVlLAogICAgIHJldHVybiBjdXJyZW50VmFsdWU7CiB9CiAKLX0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9t
U2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAg
ICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0
aCwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBh
dGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhWYWx1ZSh2
YWx1ZS52OFZhbHVlKCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEtleShnZXROdGhW
YWx1ZU9uS2V5UGF0aCh2OFZhbHVlLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5z
aXplKCkpKTsKKyAgICBpZiAodjhLZXkuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4S2V5KTsKK30KKworUGFzc1JlZlB0cjxJ
REJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29uc3QgU2NyaXB0
VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFD
RSgiY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCIpOworICAgIEFTU0VSVCgh
a2V5UGF0aC5pc051bGwoKSk7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgaWYg
KGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OkFycmF5VHlwZSkgeworICAgICAgICBJREJL
ZXk6OktleUFycmF5IHJlc3VsdDsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5
ID0ga2V5UGF0aC5hcnJheSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBhcnJheVtpXSk7CisgICAgICAg
ICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVBcnJheShyZXN1bHQpOworICAgIH0KKworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJ
REJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7Cit9CiAKIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBh
dGgoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgpCiB7CkBAIC0xNzAsNiArMjI2LDE2IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElE
QktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0
cjxTCiAgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2OEtleSk7CiB9CiAKKy8vIEZJ
WE1FOiBUaGUgb25seSByZWFzb24gdGhpcyBleGlzdHMgaXMgYmVjYXVzZSB3ZSBuZWVkIGEgdjg6
OkNvbnRleHQgYW5kIHNjb3BlIGluc2lkZSBhIHRpbWVyLiBJcyB0aGVyZSBhIGJldHRlciAvIG1v
cmUgZ2VuZXJhbCB3YXkgdG8gZG8gdGhpcz8KK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFs
dWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBzY29w
ZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdG9WOENvbnRleHQoc2Ny
aXB0Q29udGV4dCwgVXNlQ3VycmVudFdvcmxkKTsKKyAgICBjb250ZXh0LT5FbnRlcigpOworICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFZhbHVlKHBycFZhbHVlLT5kZXNlcmlhbGl6ZSgpKTsK
KyAgICBjb250ZXh0LT5FeGl0KCk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHY4VmFsdWUpOwor
fQogCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFu
ZEtleVBhdGgoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewpAQCAtMjE5LDYgKzI4NSwyMiBAQCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQ
YXNzUmVmUHRyPElEQgogICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSh2
OFZhbHVlKTsKIH0KIAorYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29uc3Qg
U2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorewor
ICAgIElEQl9UUkFDRSgiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CisgICAgQVNT
RVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIFZlY3Rv
cjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJv
cjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aC5zdHJpbmcoKSwga2V5UGF0aEVsZW1lbnRz
LCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7
CisKKyAgICBpZiAoIWtleVBhdGhFbGVtZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFZhbHVlKHNjcmlwdFZhbHVlLnY4VmFs
dWUoKSk7CisgICAgcmV0dXJuIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKHY4VmFsdWUsIGtl
eVBhdGhFbGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvSURCQmluZGluZ1V0aWxpdGllcy5oCmluZGV4IDMwZWVkNDIxYjQ1YjA5MDMwMTFiZDI0OWJi
YTBkNzRjMjNiYTI3NGYuLmIyYjYyOWY1ODE5ZjlhMWE3ZTAwNWZmOTMwNDY5ZWVmMjNkN2M0N2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRp
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVz
LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAKQEAgLTM4LDkgKzM5LDE1IEBAIGNsYXNzIElEQktleVBhdGg7CiBjbGFzcyBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlG
cm9tVmFsdWUodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworLy8gRklYTUU6IHJlbW92ZSB0aGUg
U2VyaWFsaXplZFZhbHVlIHZlcnNpb25zIHdoZW4gdGhlaXIgdXNlIGlzIGZpbmFsbHkgcmVtb3Zl
ZCBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0MDkuCiBQYXNz
UmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBJREJLZXlQYXRoJik7CiBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6
ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiwgY29uc3QgSURCS2V5UGF0aCYpOwogCitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElE
QktleVBhdGgmKTsKK2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKGNvbnN0IFNj
cmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJ
REJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+KTsKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163402</attachid>
            <date>2012-09-11 10:54:26 -0700</date>
            <delta_ts>2012-09-12 13:36:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120911105401.patch</filename>
            <type>text/plain</type>
            <size>24938</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNhZTY2ZjExM2ExZjk5
NWQxY2NiMDY4YzY2YjViOTQwMTY5NjI4OC4uNzM5NDc3OWQ4NDZmMjY0MDhjMDM1OWUzMTIxZmVh
MWYzYjc2ZDI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA5LTA3ICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBBbHNvIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0
MDkgZm9yCisgICAgICAgIGZvbGxvd3VwIGdldC9vcGVuQ3Vyc29yIHdvcmssIGZvbGxvd2luZyB0
aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIHJlZmFj
dG9yIG9mIGNvcmUgSURCCisgICAgICAgIGZ1bmN0aW9uYWxpdHkuIE1vc3QgZXhpc3RpbmcgdGVz
dHMgY292ZXIgY29ycmVjdG5lc3MuIFRlc3RzIHRoYXQKKyAgICAgICAgbWlnaHQgZmFpbCBpbmNs
dWRlOgorCisgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1s
CisgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL2tleXBhdGgtYmFzaWNzLmh0bWwKKyAgICAgICAg
c3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVw
ZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAgICAg
IChJREJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChJREJP
YmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aWRsOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2NyaXB0
VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJD
b3JlKToKKwogMjAxMi0wOS0wOSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBBZGQgU3RyaW5nQnVpbGRlcjo6YXBwZW5kTnVtYmVyKCkgYW5kIHVzZSBp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5k
ZXggOTAzZGFiNTgzYzM2MzJhNzY2Yjk1ZDk3OWIzZTI1ZDlmYjczNTg5Mi4uOTZmZTgyZjc2ZDZk
M2NiNzEyYjg2NGYyZmM1ZTBkZTQ0YzBlOWZmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCkBAIC0xMjUsMTAgKzEyNSw5IEBAIElEQkFueSog
SURCQ3Vyc29yOjpzb3VyY2UoKSBjb25zdAogICAgIHJldHVybiBtX3NvdXJjZS5nZXQoKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJw
VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJz
b3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yOjp1
cGRhdGUiKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZh
bHVlOwogCiAgICAgaWYgKCFtX2dvdFZhbHVlIHx8IGlzS2V5Q3Vyc29yKCkpIHsKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTQy
LDE3ICsxNDEsMTIgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmUKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIGlmICh2YWx1ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKLSAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gZWZmZWN0aXZl
T2JqZWN0U3RvcmUoKTsKICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0gb2JqZWN0U3Rv
cmUtPm1ldGFkYXRhKCkua2V5UGF0aDsKICAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0g
IWtleVBhdGguaXNOdWxsKCk7CiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBh
dGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQ
YXRoKTsKICAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8ICFrZXlQYXRoS2V5LT5pc0VxdWFsKG1f
Y3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCA1OTA4Mjg4NTlhN2EzMWQ4
ZjA4ODcxZjJjNDFkZjkzMjAzZmExN2RlLi4xYjYxOTM1M2ZlZGI1MmJiYmUxMDIxZjliY2E4YTk5
NjUwMTJhN2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaApAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJBbnk+IHZh
bHVlKCk7CiAgICAgSURCQW55KiBzb3VyY2UoKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gdXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IHVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIGxvbmcsIEV4Y2VwdGlvbkNv
ZGUmKTsKICAgICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNl
cHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggZDczZDE0NjI3NDQxODQw
Mjc0MjMyMGY0ZjNlNjA2YWIzZDIwMmU0OS4uZWIyY2RhZDhhNzYxYmNmNDYwZmIxZjY2Y2U3ZTNl
OWQwZmUxZGQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaWRsCkBAIC0zOSw3ICszOSw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIElEQktleSBwcmltYXJ5S2V5OwogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgSURCQW55IHNvdXJjZTsKIAotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gSURCUmVxdWVzdCB1cGRhdGUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVl
KQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCB1
cGRhdGUoaW4gRE9NT2JqZWN0IHZhbHVlKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgYWR2YW5jZShpbiB1bnNpZ25lZCBsb25nIGNvdW50
KQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXgg
YTdhYThhM2VhYjYwOWM2OTJiZTA4NDgyZDY1YTY2ZjQ2ODc3NDVkMC4uY2U0OTMxMzIwMTgwMWNj
ZDMyNjNlMDI2ODkzY2FkM2JmMzFiZGYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMTA1LDExICsxMDUsMTEgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3MKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtl
eXNGb3JWYWx1ZShjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gb2JqZWN0VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNjcmlwdFZhbHVlJiBvYmplY3RWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyogaW5kZXhLZXlzKQogewogICAg
IEFTU0VSVChpbmRleEtleXMpOwotICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gY3JlYXRl
SURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgob2JqZWN0VmFsdWUsIGluZGV4TWV0
YWRhdGEua2V5UGF0aCk7CisgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBjcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtl
eVBhdGgpOwogCiAgICAgaWYgKCFpbmRleEtleSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI5LDIy
ICsxMjksMjEgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2Ny
aXB0VmFsdWUmIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsKICAgICByZXR1cm4g
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgSURCQW55OjpjcmVh
dGUodGhpcyksIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKIH0KIAotUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0
VmFsdWUmIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKICAgICByZXR1cm4gcHV0
KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JVcGRhdGUsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJBbnk+IHNv
dXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVl
LCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBy
cEtleTsKICAgICBpZiAobV9kZWxldGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE1OCw3ICsxNTcsMTUgQEAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVB
RF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICh2YWx1ZS0+Ymxv
YlVSTHMoKS5zaXplKCkgPiAwKSB7CisKKyAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRT
dGF0ZTo6Y3VycmVudCgpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlh
bGl6ZWRWYWx1ZSA9IHZhbHVlLnNlcmlhbGl6ZShzdGF0ZSk7CisgICAgaWYgKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFU
QV9DTE9ORV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChzZXJpYWxp
emVkVmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgewogICAgICAgICAvLyBGSVhNRTogQWRk
IEJsb2IvRmlsZS9GaWxlTGlzdCBzdXBwb3J0CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzcsNyAr
MTg0LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQ
YXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUs
IGtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CiAgICAgICAgIGlm
IChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xODcsOSArMTk0LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9y
ZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIGlmIChoYXNLZXlHZW5lcmF0b3IgJiYgIWtl
eVBhdGhLZXkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5
OjpjcmVhdGVOdW1iZXIoLTEpOwotICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFs
dWUoZHVtbXlLZXksIHZhbHVlLCBrZXlQYXRoKTsKLSAgICAgICAgICAgIGlmICghdmFsdWVBZnRl
ckluamVjdGlvbikgeworICAgICAgICAgICAgaWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUodmFsdWUsIGtleVBhdGgpKSB7CiAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICB9CkBAIC0yMTMsNyArMjE4LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBB
U1NFUlQoaW5kZXhLZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUoKSk7CiAKICAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3Vy
Y2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5
cyh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCBlYyk7CisgICAgbV9i
YWNrZW5kLT5wdXRXaXRoSW5kZXhLZXlzKHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCksIGtleS5y
ZWxlYXNlKCksIHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5k
ZXhOYW1lcywgaW5kZXhLZXlzLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3Qt
Pm1hcmtFYXJseURlYXRoKCk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMzEzLDcgKzMxOCw3IEBA
IHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqIGV2ZW50KQorICAgIHZpcnR1YWwgdm9pZCBo
YW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQp
CiAgICAgewogICAgICAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3Vj
Y2Vzc0V2ZW50KTsKICAgICAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50LT50YXJnZXQo
KTsKQEAgLTMzNiw3ICszNDEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgUmVmUHRyPElEQkFu
eT4gdmFsdWVBbnkgPSBjdXJzb3ItPnZhbHVlKCk7CiAKICAgICAgICAgICAgIEFTU0VSVCh2YWx1
ZUFueS0+dHlwZSgpID09IElEQkFueTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHZhbHVlQW55LT5z
ZXJpYWxpemVkU2NyaXB0VmFsdWUoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IHZhbHVlQW55LT5zZXJpYWxpemVkU2NyaXB0VmFs
dWUoKTsKKyAgICAgICAgICAgIFNjcmlwdFZhbHVlIHZhbHVlKGRlc2VyaWFsaXplSURCVmFsdWUo
Y29udGV4dCwgc2VyaWFsaXplZFZhbHVlKSk7CiAKICAgICAgICAgICAgIElEQk9iamVjdFN0b3Jl
OjpJbmRleEtleXMgaW5kZXhLZXlzOwogICAgICAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JW
YWx1ZShtX2luZGV4TWV0YWRhdGEsIHZhbHVlLCAmaW5kZXhLZXlzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4IGMwNTMzMmE1
MTY3NjE1ZDgzN2I4NGE2ZjE0MDAyMTA5YmE1MDA0NjAuLjQ4NzU2M2QyYTlkNmQxZTZlNTExZTRl
ZmE1Njk5NmRmMjM3YmIyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtNjQsOCArNjQsOCBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zYWN0aW9uOyB9CiAgICAgYm9vbCBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9t
ZXRhZGF0YS5hdXRvSW5jcmVtZW50OyB9CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFk
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZGQoY29udGV4
dCwgdmFsdWUsIDAsIGVjKTsgIH0KLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwdXQoY29udGV4dCwgdmFs
dWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiBhZGQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KKyAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTY3Jp
cHRWYWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwdXQoY29udGV4dCwg
dmFsdWUsIDAsIGVjKTsgIH0KICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3Io
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMp
OyB9IAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElE
QkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0gCiAgICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNv
bnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfSAKQEAgLTc3LDgg
Kzc3LDggQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gYWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gY2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2Vw
dGlvbkNvZGUmKTsKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3Vu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25D
b2RlJik7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBh
c3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gcHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJBbnk+IHNvdXJjZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNjcmlwdFZhbHVl
JiwgUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBtYXJrRGVs
ZXRlZCgpIHsgbV9kZWxldGVkID0gdHJ1ZTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hl
ZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5pZGwKaW5kZXggOTlkODY4NDZiODFlYTkxMDQwYWQzODA1MGE2NDQ4NTA3Y2ZiZTBk
Ni4uNjI1MzIyM2I4Y2IzYzkxYzk4NGQ4ZTg1ZTczNzViYzMwOWMxMTUyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbApAQCAt
MzQsOSArMzQsOSBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBJREJUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGJvb2xlYW4gYXV0b0luY3JlbWVudDsKIAotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0
aW9uQ29udGV4dF0gSURCUmVxdWVzdCBwdXQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVl
LCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVj
dXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IHB1dChpbiBET01PYmplY3QgdmFsdWUsIGluIFtPcHRp
b25hbF0gSURCS2V5IGtleSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOwotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVz
dCBhZGQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktl
eSBrZXkpCisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1
ZXN0IGFkZChpbiBET01PYmplY3QgdmFsdWUsIGluIFtPcHRpb25hbF0gSURCS2V5IGtleSkKICAg
ICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICBbQ2FsbFdp
dGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1kZWxldGVGdW5jdGlvbl0g
SURCUmVxdWVzdCBkZWxldGUoaW4gSURCS2V5UmFuZ2U/IGtleVJhbmdlKQogICAgICAgICAgICAg
cmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDE5ZmQ5MWQ5MDA5MzVkZWRi
YzgxMTVkZDk0MTQ1YTY4ZjQ5ZTcwMTYuLjBhM2EzODk4Nzc2MTBkMjVlOGVmZmU3MDBiMmI4NjI4
YjhhZGE4OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhJREJLZXku
aCIKKyNpbmNsdWRlICJXb3JsZENvbnRleHRIYW5kbGUuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtODUsMTAgKzg2LDggQEAgUGFz
c1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdmFsdWUpCiAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwogfQogCi1uYW1l
c3BhY2UgewotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBnZXRWYWx1ZUZyb20oVCBpbmRl
eE9yTmFtZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQorc3RhdGljIGJvb2wgZ2V0
VmFsdWVGcm9tKFQgaW5kZXhPck5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkK
IHsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjhWYWx1ZS0+VG9PYmplY3Qo
KTsKICAgICBpZiAoIW9iamVjdC0+SGFzKGluZGV4T3JOYW1lKSkKQEAgLTk4LDQ5ICs5Nyw3MiBA
QCBib29sIGdldFZhbHVlRnJvbShUIGluZGV4T3JOYW1lLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4m
IHY4VmFsdWUpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1ib29sIHNldFZhbHVlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiYgdjhPYmplY3QsIFQgaW5kZXhPck5hbWUsIGNvbnN0IHY4OjpIYW5k
bGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0YXRpYyBib29sIHNldFZhbHVlKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiYgdjhPYmplY3QsIFQgaW5kZXhPck5hbWUsIGNvbnN0IHY4OjpIYW5kbGU8djg6
OlZhbHVlPiYgdjhWYWx1ZSkKIHsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0g
djhPYmplY3QtPlRvT2JqZWN0KCk7CiAgICAgcmV0dXJuIG9iamVjdC0+U2V0KGluZGV4T3JOYW1l
LCB2OFZhbHVlKTsKIH0KIAotYm9vbCBnZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQpCitzdGF0aWMgYm9vbCBnZXQodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiYgcmVzdWx0KQogewogICAgIGlmIChvYmplY3QtPklzU3RyaW5nKCkg
JiYga2V5UGF0aEVsZW1lbnQgPT0gImxlbmd0aCIpIHsKICAgICAgICAgaW50MzJfdCBsZW5ndGgg
PSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0KG9iamVjdCktPkxlbmd0aCgpOwotICAgICAg
ICBvYmplY3QgPSB2ODo6TnVtYmVyOjpOZXcobGVuZ3RoKTsKKyAgICAgICAgcmVzdWx0ID0gdjg6
Ok51bWJlcjo6TmV3KGxlbmd0aCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBy
ZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpICYmIGdldFZhbHVlRnJvbSh2OFN0cmluZyhrZXlQYXRo
RWxlbWVudCksIG9iamVjdCk7CisgICAgcmV0dXJuIG9iamVjdC0+SXNPYmplY3QoKSAmJiBnZXRW
YWx1ZUZyb20odjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCByZXN1bHQpOwogfQogCi1ib29sIHNl
dCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxl
bWVudCwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQorc3RhdGljIGJvb2wg
Y2FuU2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBh
dGhFbGVtZW50KQogewotICAgIHJldHVybiBvYmplY3QtPklzT2JqZWN0KCkgJiYgc2V0VmFsdWUo
b2JqZWN0LCB2OFN0cmluZyhrZXlQYXRoRWxlbWVudCksIHY4VmFsdWUpOworICAgIHJldHVybiBv
YmplY3QtPklzT2JqZWN0KCk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROdGhWYWx1
ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQorc3RhdGljIGJvb2wgc2V0
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVt
ZW50LCBjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOworICAgIHJldHVybiBjYW5T
ZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVudCkgJiYgc2V0VmFsdWUob2JqZWN0LCB2OFN0cmluZyhr
ZXlQYXRoRWxlbWVudCksIHY4VmFsdWUpOworfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGdldE50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVl
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCit7
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOwogICAg
IEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKLSAgICAgICAgaWYgKCFnZXQoY3VycmVudFZhbHVl
LCBrZXlQYXRoRWxlbWVudHNbaV0pKQorICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFy
ZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKCFnZXQocGFyZW50VmFsdWUsIGtl
eVBhdGhFbGVtZW50c1tpXSwgY3VycmVudFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwogICAgIH0KIAogICAgIHJldHVybiBjdXJyZW50VmFsdWU7CiB9CiAKLXY4OjpI
YW5kbGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywg
c2l6ZV90IGluZGV4KQorc3RhdGljIGJvb2wgY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgodjg6
OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQ
YXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKIHsKKyAgICBpZiAoIXJvb3RWYWx1ZS0+SXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOwogCiAgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhF
bGVtZW50cy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXg7ICsraSkg
ewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyZW50VmFsdWUoY3VycmVudFZhbHVl
KTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50
c1tpXTsKLSAgICAgICAgaWYgKCFnZXQoY3VycmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCkpIHsK
KyAgICAgICAgaWYgKCFnZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBjdXJyZW50VmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIGNhblNldChwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1l
bnQpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYg
cm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3Qg
aW5kZXgpCit7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGN1cnJlbnRWYWx1ZShyb290VmFs
dWUpOworCisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXg7ICsraSkgeworICAgICAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFn
ZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBjdXJyZW50VmFsdWUpKSB7CiAgICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpPYmplY3Q6Ok5ldygpOwog
ICAgICAgICAgICAgaWYgKCFzZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBvYmplY3Qp
KQogICAgICAgICAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwpAQCAtMTUxLDcgKzE3Myw0
MSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgodjg6Okhh
bmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsCiAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsKIH0K
IAotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdWUmIHZh
bHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0
aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNl
S2V5UGF0aChrZXlQYXRoLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NFUlQoZXJy
b3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2OFZhbHVlKHZhbHVlLnY4VmFsdWUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHY4S2V5KGdldE50aFZhbHVlT25LZXlQYXRoKHY4VmFsdWUsIGtleVBhdGhFbGVtZW50cywga2V5
UGF0aEVsZW1lbnRzLnNpemUoKSkpOworICAgIGlmICh2OEtleS5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjhLZXkpOworfQor
CitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0
aChjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7
CisgICAgSURCX1RSQUNFKCJjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoIik7
CisgICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlKSB7
CisgICAgICAgIElEQktleTo6S2V5QXJyYXkgcmVzdWx0OworICAgICAgICBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+
IGtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGFycmF5
W2ldKTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7CisgICAgfQorCisgICAgQVNTRVJUKGtleVBh
dGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIHJldHVybiBjcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoLnN0cmluZygpKTsK
K30KIAogc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXpl
ZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFs
dWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKQEAgLTE3MCw2ICsyMjYsMTQgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5
UGF0aChQYXNzUmVmUHRyPFMKICAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4S2V5
KTsKIH0KIAorLy8gRklYTUU6IFRoZSBvbmx5IHJlYXNvbiB0aGlzIGV4aXN0cyBpcyBiZWNhdXNl
IHdlIG5lZWQgYSB2ODo6Q29udGV4dCBhbmQgc2NvcGUgaW5zaWRlIGEgdGltZXIuIElzIHRoZXJl
IGEgYmV0dGVyIC8gbW9yZSBnZW5lcmFsIHdheSB0byBkbyB0aGlzPworU2NyaXB0VmFsdWUgZGVz
ZXJpYWxpemVJREJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUpCit7CisgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2Nv
cGUodG9WOENvbnRleHQoc2NyaXB0Q29udGV4dCwgVXNlQ3VycmVudFdvcmxkKSk7CisgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHY4VmFsdWUocHJwVmFsdWUtPmRlc2VyaWFsaXplKCkpOworICAg
IHJldHVybiBTY3JpcHRWYWx1ZSh2OFZhbHVlKTsKK30KIAogUGFzc1JlZlB0cjxJREJLZXk+IGNy
ZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsK
QEAgLTIxOSw2ICsyODMsMjIgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGlu
amVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREIKICAgICByZXR1cm4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUodjhWYWx1ZSk7CiB9CiAKK2Jvb2wgY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwg
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImNhbkluamVjdElE
QktleUludG9TY3JpcHRWYWx1ZSIpOworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJL
ZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7
CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtl
eVBhdGguc3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJv
ciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYgKCFrZXlQYXRoRWxlbWVu
dHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdjhWYWx1ZShzY3JpcHRWYWx1ZS52OFZhbHVlKCkpOworICAgIHJldHVybiBjYW5Jbmpl
Y3ROdGhWYWx1ZU9uS2V5UGF0aCh2OFZhbHVlLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVt
ZW50cy5zaXplKCkgLSAxKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRp
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaApp
bmRleCAzMGVlZDQyMWI0NWIwOTAzMDExYmQyNDliYmEwZDc0YzIzYmEyNzRmLi5iMmI2MjlmNTgx
OWY5YTFhN2UwMDVmZjkzMDQ2OWVlZjIzZDdjNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAj
aW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCkBAIC0zOCw5ICszOSwx
NSBAQCBjbGFzcyBJREJLZXlQYXRoOwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiBQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4OjpIYW5kbGU8djg6OlZh
bHVlPik7CisKKy8vIEZJWE1FOiByZW1vdmUgdGhlIFNlcmlhbGl6ZWRWYWx1ZSB2ZXJzaW9ucyB3
aGVuIHRoZWlyIHVzZSBpcyBmaW5hbGx5IHJlbW92ZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk1NDA5LgogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktl
eUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwgY29uc3QgSURCS2V5UGF0aCYpOwogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IElEQktleVBhdGgmKTsK
IAorUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgoY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Citib29sIGNhbkluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBh
dGgmKTsKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CisKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163681</attachid>
            <date>2012-09-12 13:36:13 -0700</date>
            <delta_ts>2012-09-12 15:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120912133547.patch</filename>
            <type>text/plain</type>
            <size>25002</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU2YTA4Nzg4ZTc3ZWU5
M2Y3MTlhZmFhODI5NzdkN2ZhNDA4ZTVmMi4uYTFhOTcxZTY1MzZlNzc1ZDVmMDQ2NzQwNTNkOThh
MGE3MGViZTI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA5LTExICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBBbHNvIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0
MDkgZm9yCisgICAgICAgIGZvbGxvd3VwIGdldC9vcGVuQ3Vyc29yIHdvcmssIGZvbGxvd2luZyB0
aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIHJlZmFj
dG9yIG9mIGNvcmUgSURCCisgICAgICAgIGZ1bmN0aW9uYWxpdHkuIE1vc3QgZXhpc3RpbmcgdGVz
dHMgY292ZXIgY29ycmVjdG5lc3MuIFRlc3RzIHRoYXQKKyAgICAgICAgbWlnaHQgZmFpbCBpbmNs
dWRlOgorCisgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1s
CisgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL2tleXBhdGgtYmFzaWNzLmh0bWwKKyAgICAgICAg
c3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVw
ZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAgICAg
IChJREJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChJREJP
YmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aWRsOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2NyaXB0
VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJD
b3JlKToKKwogMjAxMi0wOS0xMiAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIEZsaXAgWSBhbmQgc3dpenpsZSBpbnNpZGUgY29tcG9z
aXRlQW5kUmVhZGJhY2sgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDkwM2RhYjU4M2MzNjMyYTc2NmI5NWQ5Nzli
M2UyNWQ5ZmI3MzU4OTIuLjk2ZmU4MmY3NmQ2ZDNjYjcxMmI4NjRmMmZjNWUwZGU0NGMwZTlmZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApA
QCAtMTI1LDEwICsxMjUsOSBAQCBJREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkgY29uc3QKICAg
ICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
Q3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKIAogICAgIGlmICghbV9nb3RWYWx1ZSB8
fCBpc0tleUN1cnNvcigpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9JTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE0MiwxNyArMTQxLDEyIEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCku
c2l6ZSgpID4gMCkgewotICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBz
dXBwb3J0Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05F
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7CiAgICAgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGg7CiAgICAg
Y29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOwogICAgIGlmICh1
c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3Jl
YXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOwor
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CiAgICAgICAgIGlmICgha2V5UGF0aEtl
eSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSkgewog
ICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmgKaW5kZXggNTkwODI4ODU5YTdhMzFkOGYwODg3MWYyYzQxZGY5MzIwM2ZhMTdkZS4uMWI2
MTkzNTNmZWRiNTJiYmJlMTAyMWY5YmNhOGE5OTY1MDEyYTdlNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpOwogICAgIElEQkFueSogc291cmNlKCkg
Y29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBFeGNlcHRpb25D
b2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgYWR2YW5j
ZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjb250aW51ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2Vw
dGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaWRsCmluZGV4IGQ3M2QxNDYyNzQ0MTg0MDI3NDIzMjBmNGYzZTYwNmFiM2QyMDJlNDkuLjUx
NmNlMWI1M2YyODc4OTAzNWQzMDIxMjdmMzdhNzcyMzQ0ZjVmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAtMzksNyArMzksNyBAQCBt
b2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkgcHJpbWFy
eUtleTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBzb3VyY2U7CiAKLSAgICAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGlu
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIGFueSB2YWx1ZSkKICAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICB2b2lkIGFkdmFuY2Uo
aW4gdW5zaWduZWQgbG9uZyBjb3VudCkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCmluZGV4IGE3YWE4YTNlYWI2MDljNjkyYmUwODQ4MmQ2NWE2NmY0Njg3
NzQ1ZDAuLmNlNDkzMTMyMDE4MDFjY2QzMjYzZTAyNjg5M2NhZDNiZjMxYmRmMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTEwNSwxMSArMTA1LDExIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiB9CiAKIHN0YXRp
YyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQk9iamVjdFN0b3JlOjpJbmRleEtl
eXMqIGluZGV4S2V5cykKIHsKICAgICBBU1NFUlQoaW5kZXhLZXlzKTsKLSAgICBSZWZQdHI8SURC
S2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRo
KG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOworICAgIFJlZlB0cjxJREJLZXk+
IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChvYmplY3RW
YWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKIAogICAgIGlmICghaW5kZXhLZXkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEyOSwyMiArMTI5LDIxIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlSW5k
ZXhLZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKICAg
ICB9CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQor
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZTo6YWRkIik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6
OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7
CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6
cHV0Iik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFk
ZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtleSwgZWMp
OwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
QW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6cHV0Iik7Ci0g
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CiAgICAgaWYgKG1fZGVsZXRlZCkgewogICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CkBAIC0x
NTgsNyArMTU3LDE1IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1
dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgeworCisgICAgU2NyaXB0
U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKKyAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZS5zZXJpYWxpemUoc3RhdGUp
OworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDApIHsK
ICAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAogICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7CiAgICAgICAg
IHJldHVybiAwOwpAQCAtMTc3LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAodXNlc0luTGluZUtleXMpIHsKLSAgICAg
ICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVk
VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4g
a2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgodmFsdWUs
IGtleVBhdGgpOwogICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5UGF0aEtleS0+aXNWYWxp
ZCgpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsK
ICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTg3LDkgKzE5NCw3IEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OlB1dE1vCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBpZiAo
aGFzS2V5R2VuZXJhdG9yICYmICFrZXlQYXRoS2V5KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SURC
S2V5PiBkdW1teUtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKC0xKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RJ
REJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGR1bW15S2V5LCB2YWx1ZSwga2V5UGF0aCk7Ci0gICAg
ICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsKKyAgICAgICAgICAgIGlmICghY2Fu
SW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHZhbHVlLCBrZXlQYXRoKSkgewogICAgICAgICAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpAQCAtMjEzLDcgKzIxOCw3IEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vCiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1l
cy5zaXplKCkpOwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgc291cmNlLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2Jh
Y2tlbmQtPnB1dFdpdGhJbmRleEtleXModmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFzZSgpLCBw
dXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFtZXMsIGlu
ZGV4S2V5cywgZWMpOworICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyhzZXJpYWxpemVk
VmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5z
YWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFtZXMsIGluZGV4S2V5cywgZWMpOwogICAgIGlmIChl
YykgewogICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwogICAgICAgICByZXR1cm4g
MDsKQEAgLTMxMyw3ICszMTgsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVu
dCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXZlbnQqIGV2ZW50KQogICAgIHsKICAgICAgICAgQVNTRVJUKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCk7CiAgICAgICAgIEV2ZW50VGFyZ2V0KiB0
YXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CkBAIC0zMzYsNyArMzQxLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIFJlZlB0cjxJREJBbnk+IHZhbHVlQW55ID0gY3Vyc29yLT52YWx1ZSgpOwogCiAg
ICAgICAgICAgICBBU1NFUlQodmFsdWVBbnktPnR5cGUoKSA9PSBJREJBbnk6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZVR5cGUpOwotICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisgICAgICAgICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZUFu
eS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisgICAgICAgICAgICBTY3JpcHRWYWx1ZSB2YWx1
ZShkZXNlcmlhbGl6ZUlEQlZhbHVlKGNvbnRleHQsIHNlcmlhbGl6ZWRWYWx1ZSkpOwogCiAgICAg
ICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGluZGV4S2V5czsKICAgICAgICAgICAg
IGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwgJmluZGV4
S2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuaAppbmRleCBjMDUzMzJhNTE2NzYxNWQ4MzdiODRhNmYxNDAwMjEwOWJhNTAwNDYwLi40
ODc1NjNkMmE5ZDZkMWU2ZTUxMWU0ZWZhNTY5OTZkZjIzN2JiMjc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTY0LDggKzY0
LDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQogICAgIGJvb2wgYXV0b0luY3JlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0luY3JlbWVudDsgfQogCi0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9Ci0gICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUm
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAw
LCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CiAgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0
PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9w
ZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29y
KGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9IAog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4
dCgpLCBlYyk7IH0gCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktl
eT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVmUHRyPElE
QktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVsZXRlRnVu
Y3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBAIC05Nyw3ICs5Nyw3IEBAIHB1Ymxp
YzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNzUmVmUHRy
PElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KICAgICB2
b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4IDk5ZDg2ODQ2YjgxZWE5MTA0
MGFkMzgwNTBhNjQ0ODUwN2NmYmUwZDYuLjMyODg1YTgzYzU1MDJjZjM5ODJkNTdiNTI0MzRkMmVk
YmYwNzRlMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5pZGwKQEAgLTM0LDkgKzM0LDkgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGF1dG9JbmNyZW1lbnQ7CiAKLSAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgcHV0KGluIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAg
ICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBwdXQoaW4gYW55
IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4g
W09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9u
Q29udGV4dF0gSURCUmVxdWVzdCBhZGQoaW4gYW55IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktl
eSBrZXkpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAgICAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9ZGVsZXRl
RnVuY3Rpb25dIElEQlJlcXVlc3QgZGVsZXRlKGluIElEQktleVJhbmdlPyBrZXlSYW5nZSkKICAg
ICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCBjYTYyYjMz
ZGNiOTk1MGNiMzUxZTY4NWMxOTk2MDIwOTE1YTZlN2RlLi4wNjA1MTY1MWE0YjQ1NWUzYzYyYzMw
MzE3YmNmN2ZjN2FkYTVlNGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUg
IlY4SURCS2V5LmgiCisjaW5jbHVkZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTg1LDEwICs4
Niw4IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlKQogICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsK
IH0KIAotbmFtZXNwYWNlIHsKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWJvb2wgZ2V0VmFsdWVG
cm9tKFQgaW5kZXhPck5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0YXRp
YyBib29sIGdldFZhbHVlRnJvbShUIGluZGV4T3JOYW1lLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4m
IHY4VmFsdWUpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4VmFsdWUt
PlRvT2JqZWN0KCk7CiAgICAgaWYgKCFvYmplY3QtPkhhcyhpbmRleE9yTmFtZSkpCkBAIC05OCw0
MSArOTcsNjQgQEAgYm9vbCBnZXRWYWx1ZUZyb20oVCBpbmRleE9yTmFtZSwgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+JiB2OFZhbHVlKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBzZXRW
YWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1lLCBjb25z
dCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCitzdGF0aWMgYm9vbCBzZXRWYWx1ZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1lLCBjb25zdCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IG9iamVjdCA9IHY4T2JqZWN0LT5Ub09iamVjdCgpOwogICAgIHJldHVybiBvYmplY3QtPlNldChp
bmRleE9yTmFtZSwgdjhWYWx1ZSk7CiB9CiAKLWJvb2wgZ2V0KHY4OjpIYW5kbGU8djg6OlZhbHVl
PiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQorc3RhdGljIGJvb2wgZ2V0
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVt
ZW50LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJlc3VsdCkKIHsKICAgICBpZiAob2JqZWN0LT5J
c1N0cmluZygpICYmIGtleVBhdGhFbGVtZW50ID09ICJsZW5ndGgiKSB7CiAgICAgICAgIGludDMy
X3QgbGVuZ3RoID0gdjg6OkhhbmRsZTx2ODo6U3RyaW5nPjo6Q2FzdChvYmplY3QpLT5MZW5ndGgo
KTsKLSAgICAgICAgb2JqZWN0ID0gdjg6Ok51bWJlcjo6TmV3KGxlbmd0aCk7CisgICAgICAgIHJl
c3VsdCA9IHY4OjpOdW1iZXI6Ok5ldyhsZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0gICAgcmV0dXJuIG9iamVjdC0+SXNPYmplY3QoKSAmJiBnZXRWYWx1ZUZyb20odjhTdHJp
bmcoa2V5UGF0aEVsZW1lbnQpLCBvYmplY3QpOworICAgIHJldHVybiBvYmplY3QtPklzT2JqZWN0
KCkgJiYgZ2V0VmFsdWVGcm9tKHY4U3RyaW5nKGtleVBhdGhFbGVtZW50KSwgcmVzdWx0KTsKIH0K
IAotYm9vbCBzZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aEVsZW1lbnQsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkKK3N0
YXRpYyBib29sIGNhblNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoRWxlbWVudCkKIHsKLSAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpICYm
IHNldFZhbHVlKG9iamVjdCwgdjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCB2OFZhbHVlKTsKKyAg
ICByZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Z2V0TnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3N0YXRp
YyBib29sIHNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoRWxlbWVudCwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogewot
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKyAgICBy
ZXR1cm4gY2FuU2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpICYmIHNldFZhbHVlKG9iamVjdCwg
djhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCB2OFZhbHVlKTsKK30KIAorc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4m
IHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90
IGluZGV4KQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZh
bHVlKTsKICAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7Ci0gICAgICAgIGlmICghZ2V0KGN1
cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnRzW2ldKSkKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGlmICghZ2V0KHBhcmVu
dFZhbHVlLCBrZXlQYXRoRWxlbWVudHNbaV0sIGN1cnJlbnRWYWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3VycmVudFZhbHVlOwog
fQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgodjg6Okhh
bmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRo
RWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3N0YXRpYyBib29sIGNhbkluamVjdE50aFZhbHVlT25L
ZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFyb290VmFs
dWUtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKworICAgIEFTU0VSVChpbmRleCA8
PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
ZGV4OyArK2kpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1
cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQ
YXRoRWxlbWVudHNbaV07CisgICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxl
bWVudCwgY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjYW5TZXQocGFyZW50VmFs
dWUsIGtleVBhdGhFbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhF
bGVtZW50cywgc2l6ZV90IGluZGV4KQogewogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJy
ZW50VmFsdWUocm9vdFZhbHVlKTsKIApAQCAtMTQwLDcgKzE2Miw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJv
b3RWYWx1ZSwKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKICAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CiAgICAg
ICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNbaV07Ci0g
ICAgICAgIGlmICghZ2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpKSB7CisgICAgICAg
IGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkgewog
ICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6T2JqZWN0OjpO
ZXcoKTsKICAgICAgICAgICAgIGlmICghc2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwg
b2JqZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKQEAgLTE1MSw3
ICsxNzMsNDEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25LZXlQYXRo
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLAogICAgIHJldHVybiBjdXJyZW50VmFs
dWU7CiB9CiAKLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorc3RhdGljIFBhc3NSZWZQdHI8SURC
S2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNjcmlwdFZh
bHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIFZlY3RvcjxTdHJpbmc+
IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJ
REJQYXJzZUtleVBhdGgoa2V5UGF0aCwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNT
RVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdjhWYWx1ZSh2YWx1ZS52OFZhbHVlKCkpOworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OEtleShnZXROdGhWYWx1ZU9uS2V5UGF0aCh2OFZhbHVlLCBrZXlQYXRoRWxlbWVu
dHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkpKTsKKyAgICBpZiAodjhLZXkuSXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4S2V5
KTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQ
YXRoKQoreworICAgIElEQl9UUkFDRSgiY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5
UGF0aCIpOworICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7CisKKyAgICB2ODo6SGFuZGxl
U2NvcGUgc2NvcGU7CisgICAgaWYgKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OkFycmF5
VHlwZSkgeworICAgICAgICBJREJLZXk6OktleUFycmF5IHJlc3VsdDsKKyAgICAgICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJheSgpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBSZWZQdHI8
SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVl
LCBhcnJheVtpXSk7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShyZXN1bHQpOworICAgIH0KKworICAgIEFTU0VS
VChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICByZXR1cm4g
Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aC5zdHJp
bmcoKSk7Cit9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNl
cmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHBycFZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7CkBAIC0xNzIsNiArMjI4LDE0IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1
ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTCiAgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21WYWx1
ZSh2OEtleSk7CiB9CiAKKy8vIEZJWE1FOiBUaGUgb25seSByZWFzb24gdGhpcyBleGlzdHMgaXMg
YmVjYXVzZSB3ZSBuZWVkIGEgdjg6OkNvbnRleHQgYW5kIHNjb3BlIGluc2lkZSBhIHRpbWVyLiBJ
cyB0aGVyZSBhIGJldHRlciAvIG1vcmUgZ2VuZXJhbCB3YXkgdG8gZG8gdGhpcz8KK1NjcmlwdFZh
bHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQoreworICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29u
dGV4dFNjb3BlKHRvVjhDb250ZXh0KHNjcmlwdENvbnRleHQsIFVzZUN1cnJlbnRXb3JsZCkpOwor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFZhbHVlKHBycFZhbHVlLT5kZXNlcmlhbGl6ZSgp
KTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUodjhWYWx1ZSk7Cit9CiAKIFBhc3NSZWZQdHI8SURC
S2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCiB7CkBAIC0yMjMsNiArMjg3LDIyIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBhc3NSZWZQdHI8SURCCiAgICAg
cmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4VmFsdWUpOwogfQogCitib29s
IGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0
VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RSQUNFKCJjYW5J
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkg
PT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVs
ZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNlS2V5
UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NF
UlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIGlmICgha2V5UGF0
aEVsZW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHY4VmFsdWUoc2NyaXB0VmFsdWUudjhWYWx1ZSgpKTsKKyAgICByZXR1cm4g
Y2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgodjhWYWx1ZSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQ
YXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5n
VXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0
aWVzLmgKaW5kZXggMzBlZWQ0MjFiNDViMDkwMzAxMWJkMjQ5YmJhMGQ3NGMyM2JhMjc0Zi4uYjJi
NjI5ZjU4MTlmOWExYTdlMDA1ZmY5MzA0NjllZWYyM2Q3YzQ3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJTY3JpcHRWYWx1
ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtMzgs
OSArMzksMTUgQEAgY2xhc3MgSURCS2V5UGF0aDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTsKIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4pOworCisvLyBGSVhNRTogcmVtb3ZlIHRoZSBTZXJpYWxpemVkVmFsdWUgdmVy
c2lvbnMgd2hlbiB0aGVpciB1c2UgaXMgZmluYWxseSByZW1vdmVkIGluIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQwOS4KIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IElEQktleVBhdGgmKTsKIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBhc3NSZWZQdHI8
SURCS2V5PiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBJREJLZXlQ
YXRoJik7CiAKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVB
bmRLZXlQYXRoKGNvbnN0IFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworYm9vbCBj
YW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJ
REJLZXlQYXRoJik7CitTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworCiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163713</attachid>
            <date>2012-09-12 15:09:49 -0700</date>
            <delta_ts>2012-09-12 15:25:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120912150923.patch</filename>
            <type>text/plain</type>
            <size>25590</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU2YTA4Nzg4ZTc3ZWU5
M2Y3MTlhZmFhODI5NzdkN2ZhNDA4ZTVmMi4uYTFhOTcxZTY1MzZlNzc1ZDVmMDQ2NzQwNTNkOThh
MGE3MGViZTI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA5LTExICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBBbHNvIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0
MDkgZm9yCisgICAgICAgIGZvbGxvd3VwIGdldC9vcGVuQ3Vyc29yIHdvcmssIGZvbGxvd2luZyB0
aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIHJlZmFj
dG9yIG9mIGNvcmUgSURCCisgICAgICAgIGZ1bmN0aW9uYWxpdHkuIE1vc3QgZXhpc3RpbmcgdGVz
dHMgY292ZXIgY29ycmVjdG5lc3MuIFRlc3RzIHRoYXQKKyAgICAgICAgbWlnaHQgZmFpbCBpbmNs
dWRlOgorCisgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1s
CisgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL2tleXBhdGgtYmFzaWNzLmh0bWwKKyAgICAgICAg
c3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVw
ZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAgICAg
IChJREJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChJREJP
YmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aWRsOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2NyaXB0
VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJD
b3JlKToKKwogMjAxMi0wOS0xMiAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIEZsaXAgWSBhbmQgc3dpenpsZSBpbnNpZGUgY29tcG9z
aXRlQW5kUmVhZGJhY2sgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDkwM2RhYjU4M2MzNjMyYTc2NmI5NWQ5Nzli
M2UyNWQ5ZmI3MzU4OTIuLjk2ZmU4MmY3NmQ2ZDNjYjcxMmI4NjRmMmZjNWUwZGU0NGMwZTlmZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApA
QCAtMTI1LDEwICsxMjUsOSBAQCBJREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkgY29uc3QKICAg
ICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
Q3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKIAogICAgIGlmICghbV9nb3RWYWx1ZSB8
fCBpc0tleUN1cnNvcigpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9JTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE0MiwxNyArMTQxLDEyIEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCku
c2l6ZSgpID4gMCkgewotICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBz
dXBwb3J0Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05F
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7CiAgICAgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGg7CiAgICAg
Y29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOwogICAgIGlmICh1
c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3Jl
YXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOwor
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CiAgICAgICAgIGlmICgha2V5UGF0aEtl
eSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSkgewog
ICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmgKaW5kZXggNTkwODI4ODU5YTdhMzFkOGYwODg3MWYyYzQxZGY5MzIwM2ZhMTdkZS4uMWI2
MTkzNTNmZWRiNTJiYmJlMTAyMWY5YmNhOGE5OTY1MDEyYTdlNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpOwogICAgIElEQkFueSogc291cmNlKCkg
Y29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBFeGNlcHRpb25D
b2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgYWR2YW5j
ZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjb250aW51ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2Vw
dGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaWRsCmluZGV4IGQ3M2QxNDYyNzQ0MTg0MDI3NDIzMjBmNGYzZTYwNmFiM2QyMDJlNDkuLjUx
NmNlMWI1M2YyODc4OTAzNWQzMDIxMjdmMzdhNzcyMzQ0ZjVmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAtMzksNyArMzksNyBAQCBt
b2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkgcHJpbWFy
eUtleTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBzb3VyY2U7CiAKLSAgICAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGlu
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIGFueSB2YWx1ZSkKICAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICB2b2lkIGFkdmFuY2Uo
aW4gdW5zaWduZWQgbG9uZyBjb3VudCkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCmluZGV4IGE3YWE4YTNlYWI2MDljNjkyYmUwODQ4MmQ2NWE2NmY0Njg3
NzQ1ZDAuLjVmZmMxY2JhOWUxMGUxMzZhMWI4NzZhMTNjNjg2YzQyYzI2NjRmM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTEwNSwxMSArMTA1LDExIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiB9CiAKIHN0YXRp
YyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQk9iamVjdFN0b3JlOjpJ
bmRleEtleXMqIGluZGV4S2V5cykKIHsKICAgICBBU1NFUlQoaW5kZXhLZXlzKTsKLSAgICBSZWZQ
dHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRL
ZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOworICAgIFJlZlB0cjxJ
REJLZXk+IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChv
YmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKIAogICAgIGlmICghaW5kZXhLZXkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEyOSwyMiArMTI5LDIxIEBAIHN0YXRpYyB2b2lkIGdlbmVy
YXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSwKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFk
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUm
IGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZTo6YWRkIik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwga2V5
LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVj
KQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZTo6cHV0Iik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtl
eSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQo
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1
dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6cHV0
Iik7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsK
ICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CiAgICAgaWYgKG1fZGVsZXRlZCkgewog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7
CkBAIC0xNTgsNyArMTU3LDE1IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgeworCisgICAg
U2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKKyAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZS5zZXJpYWxpemUo
c3RhdGUpOworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+
IDApIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTc3LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1
dE1vCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAodXNlc0luTGluZUtleXMpIHsK
LSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJp
YWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElE
QktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
dmFsdWUsIGtleVBhdGgpOwogICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5UGF0aEtleS0+
aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRB
X0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTg3LDkgKzE5NCw3IEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaGFzS2V5R2VuZXJhdG9yICYmICFrZXlQYXRoS2V5KSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKC0xKTsKLSAgICAgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBp
bmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGR1bW15S2V5LCB2YWx1ZSwga2V5UGF0aCk7
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsKKyAgICAgICAgICAgIGlm
ICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHZhbHVlLCBrZXlQYXRoKSkgewogICAg
ICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpAQCAtMjEzLDcgKzIxOCw3IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5k
ZXhOYW1lcy5zaXplKCkpOwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgc291cmNlLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAg
ICBtX2JhY2tlbmQtPnB1dFdpdGhJbmRleEtleXModmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFz
ZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFt
ZXMsIGluZGV4S2V5cywgZWMpOworICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyhzZXJp
YWxpemVkVmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFtZXMsIGluZGV4S2V5cywgZWMpOwogICAg
IGlmIChlYykgewogICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTMxMyw3ICszMTgsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50
KiBldmVudCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KQogICAgIHsKICAgICAgICAgQVNTRVJUKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCk7CiAgICAgICAgIEV2ZW50VGFy
Z2V0KiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CkBAIC0zMzYsNyArMzQxLDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIFJlZlB0cjxJREJBbnk+IHZhbHVlQW55ID0gY3Vyc29yLT52YWx1ZSgp
OwogCiAgICAgICAgICAgICBBU1NFUlQodmFsdWVBbnktPnR5cGUoKSA9PSBJREJBbnk6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOwotICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisgICAg
ICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2
YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisgICAgICAgICAgICBTY3JpcHRWYWx1
ZSB2YWx1ZShkZXNlcmlhbGl6ZUlEQlZhbHVlKGNvbnRleHQsIHNlcmlhbGl6ZWRWYWx1ZSkpOwog
CiAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGluZGV4S2V5czsKICAgICAg
ICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwg
JmluZGV4S2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaAppbmRleCBjMDUzMzJhNTE2NzYxNWQ4MzdiODRhNmYxNDAwMjEwOWJhNTAw
NDYwLi40ODc1NjNkMmE5ZDZkMWU2ZTUxMWU0ZWZhNTY5OTZkZjIzN2JiMjc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTY0
LDggKzY0LDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5z
YWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQogICAgIGJvb2wgYXV0b0lu
Y3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0luY3JlbWVudDsgfQogCi0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9Ci0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0
VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZh
bHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CiAgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVu
Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMp
OyB9IAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0
aW9uTmV4dCgpLCBlYyk7IH0gCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQ
YXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVs
ZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBAIC05Nyw3ICs5Nyw3IEBA
IHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0K
ICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4IDk5ZDg2ODQ2Yjgx
ZWE5MTA0MGFkMzgwNTBhNjQ0ODUwN2NmYmUwZDYuLjMyODg1YTgzYzU1MDJjZjM5ODJkNTdiNTI0
MzRkMmVkYmYwNzRlMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTM0LDkgKzM0LDkgQEAgbW9kdWxlIHN0b3JhZ2Ug
ewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGF1dG9JbmNyZW1lbnQ7CiAKLSAg
ICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgcHV0KGlu
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQor
ICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBwdXQo
aW4gYW55IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1
ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBhZGQoaW4gYW55IHZhbHVlLCBpbiBbT3B0aW9uYWxd
IElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
ICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9
ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVsZXRlKGluIElEQktleVJhbmdlPyBrZXlSYW5n
ZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCBj
YTYyYjMzZGNiOTk1MGNiMzUxZTY4NWMxOTk2MDIwOTE1YTZlN2RlLi4wYzQyNjhmYWNmNTc3N2Vm
MTgwMTM3MzUyY2JjOGJjOTdhNzIwYTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4SURCS2V5LmgiCisjaW5jbHVkZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTg1
LDEwICs4Niw4IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFs
aWQoKTsKIH0KIAotbmFtZXNwYWNlIHsKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWJvb2wgZ2V0
VmFsdWVGcm9tKFQgaW5kZXhPck5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkK
K3N0YXRpYyBib29sIGdldFZhbHVlRnJvbShUIGluZGV4T3JOYW1lLCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4mIHY4VmFsdWUpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4
VmFsdWUtPlRvT2JqZWN0KCk7CiAgICAgaWYgKCFvYmplY3QtPkhhcyhpbmRleE9yTmFtZSkpCkBA
IC05OCw0MSArOTcsNjQgQEAgYm9vbCBnZXRWYWx1ZUZyb20oVCBpbmRleE9yTmFtZSwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9v
bCBzZXRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1l
LCBjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCitzdGF0aWMgYm9vbCBzZXRW
YWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1lLCBjb25z
dCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IG9iamVjdCA9IHY4T2JqZWN0LT5Ub09iamVjdCgpOwogICAgIHJldHVybiBvYmplY3Qt
PlNldChpbmRleE9yTmFtZSwgdjhWYWx1ZSk7CiB9CiAKLWJvb2wgZ2V0KHY4OjpIYW5kbGU8djg6
OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQorc3RhdGljIGJv
b2wgZ2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBh
dGhFbGVtZW50LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJlc3VsdCkKIHsKICAgICBpZiAob2Jq
ZWN0LT5Jc1N0cmluZygpICYmIGtleVBhdGhFbGVtZW50ID09ICJsZW5ndGgiKSB7CiAgICAgICAg
IGludDMyX3QgbGVuZ3RoID0gdjg6OkhhbmRsZTx2ODo6U3RyaW5nPjo6Q2FzdChvYmplY3QpLT5M
ZW5ndGgoKTsKLSAgICAgICAgb2JqZWN0ID0gdjg6Ok51bWJlcjo6TmV3KGxlbmd0aCk7CisgICAg
ICAgIHJlc3VsdCA9IHY4OjpOdW1iZXI6Ok5ldyhsZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0gICAgcmV0dXJuIG9iamVjdC0+SXNPYmplY3QoKSAmJiBnZXRWYWx1ZUZyb20o
djhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCBvYmplY3QpOworICAgIHJldHVybiBvYmplY3QtPklz
T2JqZWN0KCkgJiYgZ2V0VmFsdWVGcm9tKHY4U3RyaW5nKGtleVBhdGhFbGVtZW50KSwgcmVzdWx0
KTsKIH0KIAotYm9vbCBzZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0
cmluZyYga2V5UGF0aEVsZW1lbnQsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1
ZSkKK3N0YXRpYyBib29sIGNhblNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCkKIHsKLSAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVj
dCgpICYmIHNldFZhbHVlKG9iamVjdCwgdjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCB2OFZhbHVl
KTsKKyAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZ2V0TnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFs
dWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkK
K3N0YXRpYyBib29sIHNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoRWxlbWVudCwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVl
KQogewotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsK
KyAgICByZXR1cm4gY2FuU2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpICYmIHNldFZhbHVlKG9i
amVjdCwgdjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCB2OFZhbHVlKTsKK30KIAorc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywg
c2l6ZV90IGluZGV4KQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUo
cm9vdFZhbHVlKTsKICAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7Ci0gICAgICAgIGlmICgh
Z2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnRzW2ldKSkKKyAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGlmICghZ2V0
KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudHNbaV0sIGN1cnJlbnRWYWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3VycmVudFZh
bHVlOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgo
djg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBr
ZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3N0YXRpYyBib29sIGNhbkluamVjdE50aFZh
bHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFy
b290VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKworICAgIEFTU0VSVChp
bmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZh
bHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQg
PSBrZXlQYXRoRWxlbWVudHNbaV07CisgICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQ
YXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjYW5TZXQocGFy
ZW50VmFsdWUsIGtleVBhdGhFbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtl
eVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQogewogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKIApAQCAtMTQwLDcgKzE2Miw3IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4mIHJvb3RWYWx1ZSwKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsK
ICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7
CiAgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNb
aV07Ci0gICAgICAgIGlmICghZ2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpKSB7Cisg
ICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVl
KSkgewogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6T2Jq
ZWN0OjpOZXcoKTsKICAgICAgICAgICAgIGlmICghc2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxl
bWVudCwgb2JqZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKQEAg
LTE1MSw3ICsxNzMsNDEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25L
ZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLAogICAgIHJldHVybiBjdXJy
ZW50VmFsdWU7CiB9CiAKLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorc3RhdGljIFBhc3NSZWZQ
dHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNj
cmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsK
KyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7Cisg
ICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdjhWYWx1ZSh2YWx1ZS52OFZhbHVlKCkpOworICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2OEtleShnZXROdGhWYWx1ZU9uS2V5UGF0aCh2OFZhbHVlLCBrZXlQYXRo
RWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkpKTsKKyAgICBpZiAodjhLZXkuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVl
KHY4S2V5KTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aCIpOworICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7CisKKyAgICB2ODo6
SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgaWYgKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6
OkFycmF5VHlwZSkgeworICAgICAgICBJREJLZXk6OktleUFycmF5IHJlc3VsdDsKKyAgICAgICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJheSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KHZhbHVlLCBhcnJheVtpXSk7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShyZXN1bHQpOworICAgIH0KKworICAg
IEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0
aC5zdHJpbmcoKSk7Cit9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5
RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7CkBAIC0xNzIsNiArMjI4
LDEzIEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6
ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTCiAgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZy
b21WYWx1ZSh2OEtleSk7CiB9CiAKKy8vIEZJWE1FOiBUaGUgb25seSByZWFzb24gdGhpcyBleGlz
dHMgaXMgYmVjYXVzZSB3ZSBuZWVkIGEgdjg6OkNvbnRleHQgYW5kIHNjb3BlIGluc2lkZSBhIHRp
bWVyLiBJcyB0aGVyZSBhIGJldHRlciAvIG1vcmUgZ2VuZXJhbCB3YXkgdG8gZG8gdGhpcz8KK1Nj
cmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0Q29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQor
eworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgY29udGV4dFNjb3BlKHRvVjhDb250ZXh0KHNjcmlwdENvbnRleHQsIFVzZUN1cnJlbnRXb3Js
ZCkpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZSh2OFZhbHVlKHBycFZhbHVlLT5kZXNlcmlhbGl6
ZSgpKTsKK30KIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVk
VmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKQEAgLTIyMyw2ICsyODYsMjIgQEAgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVk
VmFsdWUoUGFzc1JlZlB0cjxJREIKICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUodjhWYWx1ZSk7CiB9CiAKK2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVl
KGNvbnN0IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCkKK3sKKyAgICBJREJfVFJBQ0UoImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwor
ICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CisgICAgSURCS2V5UGF0aFBhcnNlRXJy
b3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGguc3RyaW5nKCksIGtleVBhdGhF
bGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJv
ck5vbmUpOworCisgICAgaWYgKCFrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhWYWx1ZShzY3JpcHRWYWx1
ZS52OFZhbHVlKCkpOworICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCh2OFZh
bHVlLCBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCAzMGVlZDQyMWI0NWIwOTAzMDEx
YmQyNDliYmEwZDc0YzIzYmEyNzRmLi5iMmI2MjlmNTgxOWY5YTFhN2UwMDVmZjkzMDQ2OWVlZjIz
ZDdjNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5n
VXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0
aWxpdGllcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogCkBAIC0zOCw5ICszOSwxNSBAQCBjbGFzcyBJREJLZXlQYXRoOwog
Y2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRl
SURCS2V5RnJvbVZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKy8vIEZJWE1FOiByZW1v
dmUgdGhlIFNlcmlhbGl6ZWRWYWx1ZSB2ZXJzaW9ucyB3aGVuIHRoZWlyIHVzZSBpcyBmaW5hbGx5
IHJlbW92ZWQgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDA5
LgogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRL
ZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgSURCS2V5UGF0
aCYpOwogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9T
ZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4sIGNvbnN0IElEQktleVBhdGgmKTsKIAorUGFzc1JlZlB0cjxJREJLZXk+IGNy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdWUmLCBj
b25zdCBJREJLZXlQYXRoJik7Citib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShj
b25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1NjcmlwdFZhbHVlIGRlc2Vy
aWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPik7CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2NyZWRl
bnRpYWxzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2NyZWRlbnRpYWxz
LnB5CmluZGV4IDIxYWVhZWFmZTYyZGU1ZTBlNzRjMTc4OWNjZGMyYzRlMTdjMGRlMDQuLjk0NjM4
ZDlmZTc3NDhiMTg3MDhmMTcxMmFmMmQ4OTM1YjMxYmQ2MDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9jcmVkZW50aWFscy5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvY3JlZGVudGlhbHMucHkKQEAgLTQxLDcgKzQxLDggQEAg
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRlcHJlY2F0ZWRfbG9nZ2luZyBpbXBvcnQgbG9n
CiB0cnk6CiAgICAgIyBVc2Uga2V5cmluZywgYSBjcm9zcyBwbGF0Zm9ybSBrZXlyaW5nIGludGVy
ZmFjZSwgYXMgYSBmYWxsYmFjazoKICAgICAjIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9r
ZXlyaW5nCi0gICAgaW1wb3J0IGtleXJpbmcKKyAgICAjaW1wb3J0IGtleXJpbmcKKyAgICBrZXly
aW5nID0gTm9uZQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGtleXJpbmcgPSBOb25lCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163718</attachid>
            <date>2012-09-12 15:25:35 -0700</date>
            <delta_ts>2012-09-12 16:20:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94023-20120912152509.patch</filename>
            <type>text/plain</type>
            <size>24963</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjU2YTA4Nzg4ZTc3ZWU5
M2Y3MTlhZmFhODI5NzdkN2ZhNDA4ZTVmMi4uYTFhOTcxZTY1MzZlNzc1ZDVmMDQ2NzQwNTNkOThh
MGE3MGViZTI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA5LTExICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFVz
ZSBTY3JpcHRWYWx1ZSBpbnN0ZWFkIG9mIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB3aGVuIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDAy
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRyYW5z
aXRpb24gdGhlIHB1dC9hZGQvdXBkYXRlIG1ldGhvZHMgdG8gYWNjZXB0IGRpcmVjdCBTY3JpcHRW
YWx1ZQorICAgICAgICBvYmplY3RzIHJhdGhlciB0aGFuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZXMs
IHRvIGVsaW1pbmF0ZSBsb3RzIG9mCisgICAgICAgIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24v
c2VyaWFsaXphdGlvbiBzdGVwcyB3aGlsZSBzdG9yaW5nCisgICAgICAgIHZhbHVlcy4KKworICAg
ICAgICBBbHNvIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0
MDkgZm9yCisgICAgICAgIGZvbGxvd3VwIGdldC9vcGVuQ3Vyc29yIHdvcmssIGZvbGxvd2luZyB0
aGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIHBlcmZvcm1hbmNlIHJlZmFj
dG9yIG9mIGNvcmUgSURCCisgICAgICAgIGZ1bmN0aW9uYWxpdHkuIE1vc3QgZXhpc3RpbmcgdGVz
dHMgY292ZXIgY29ycmVjdG5lc3MuIFRlc3RzIHRoYXQKKyAgICAgICAgbWlnaHQgZmFpbCBpbmNs
dWRlOgorCisgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWJhc2ljcy5odG1s
CisgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL2tleXBhdGgtYmFzaWNzLmh0bWwKKyAgICAgICAg
c3RvcmFnZS9pbmRleGVkZGIvaW5kZXgtYmFzaWNzLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVw
ZGF0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAgICAg
IChJREJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGw6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
OjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChJREJP
YmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
aWRsOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2NyaXB0
VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJD
b3JlKToKKwogMjAxMi0wOS0xMiAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbY2hyb21pdW1dIEZsaXAgWSBhbmQgc3dpenpsZSBpbnNpZGUgY29tcG9z
aXRlQW5kUmVhZGJhY2sgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDkwM2RhYjU4M2MzNjMyYTc2NmI5NWQ5Nzli
M2UyNWQ5ZmI3MzU4OTIuLjk2ZmU4MmY3NmQ2ZDNjYjcxMmI4NjRmMmZjNWUwZGU0NGMwZTlmZmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApA
QCAtMTI1LDEwICsxMjUsOSBAQCBJREJBbnkqIElEQkN1cnNvcjo6c291cmNlKCkgY29uc3QKICAg
ICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
Q3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKIAogICAgIGlmICghbV9nb3RWYWx1ZSB8
fCBpc0tleUN1cnNvcigpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9JTlZBTElEX1NUQVRFX0VSUjsKQEAgLTE0MiwxNyArMTQxLDEyIEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCku
c2l6ZSgpID4gMCkgewotICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBz
dXBwb3J0Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05F
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7CiAgICAgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGg7CiAgICAg
Y29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOwogICAgIGlmICh1
c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3Jl
YXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOwor
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CiAgICAgICAgIGlmICgha2V5UGF0aEtl
eSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSkgewog
ICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmgKaW5kZXggNTkwODI4ODU5YTdhMzFkOGYwODg3MWYyYzQxZGY5MzIwM2ZhMTdkZS4uMWI2
MTkzNTNmZWRiNTJiYmJlMTAyMWY5YmNhOGE5OTY1MDEyYTdlNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8SURCQW55PiB2YWx1ZSgpOwogICAgIElEQkFueSogc291cmNlKCkg
Y29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHVwZGF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBFeGNlcHRpb25D
b2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiB1cGRhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFNjcmlwdFZhbHVlJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgYWR2YW5j
ZSh1bnNpZ25lZCBsb25nLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjb250aW51ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV4Y2Vw
dGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3IuaWRsCmluZGV4IGQ3M2QxNDYyNzQ0MTg0MDI3NDIzMjBmNGYzZTYwNmFiM2QyMDJlNDkuLjUx
NmNlMWI1M2YyODc4OTAzNWQzMDIxMjdmMzdhNzcyMzQ0ZjVmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAtMzksNyArMzksNyBAQCBt
b2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkgcHJpbWFy
eUtleTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBzb3VyY2U7CiAKLSAgICAg
ICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGlu
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIGFueSB2YWx1ZSkKICAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICB2b2lkIGFkdmFuY2Uo
aW4gdW5zaWduZWQgbG9uZyBjb3VudCkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCmluZGV4IGE3YWE4YTNlYWI2MDljNjkyYmUwODQ4MmQ2NWE2NmY0Njg3
NzQ1ZDAuLjVmZmMxY2JhOWUxMGUxMzZhMWI4NzZhMTNjNjg2YzQyYzI2NjRmM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTEwNSwxMSArMTA1LDExIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiB9CiAKIHN0YXRp
YyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQk9iamVjdFN0b3JlOjpJ
bmRleEtleXMqIGluZGV4S2V5cykKIHsKICAgICBBU1NFUlQoaW5kZXhLZXlzKTsKLSAgICBSZWZQ
dHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRL
ZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOworICAgIFJlZlB0cjxJ
REJLZXk+IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChv
YmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKIAogICAgIGlmICghaW5kZXhLZXkp
CiAgICAgICAgIHJldHVybjsKQEAgLTEyOSwyMiArMTI5LDIxIEBAIHN0YXRpYyB2b2lkIGdlbmVy
YXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0
YSwKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFk
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUm
IGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZTo6YWRkIik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OkFkZE9ubHksIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBjb250ZXh0LCB2YWx1ZSwga2V5
LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVj
KQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RT
dG9yZTo6cHV0Iik7CiAgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkFkZE9yVXBkYXRlLCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgY29udGV4dCwgdmFsdWUsIGtl
eSwgZWMpOwogfQogCi1QYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQo
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQ
dHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IHBycEtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlIHB1
dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6cHV0
Iik7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsK
ICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CiAgICAgaWYgKG1fZGVsZXRlZCkgewog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7
CkBAIC0xNTgsNyArMTU3LDE1IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3Rv
cmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgeworCisgICAg
U2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKKyAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZS5zZXJpYWxpemUo
c3RhdGUpOworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+
IDApIHsKICAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTc3LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1
dE1vCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAodXNlc0luTGluZUtleXMpIHsK
LSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJp
YWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElE
QktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
dmFsdWUsIGtleVBhdGgpOwogICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5UGF0aEtleS0+
aXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRB
X0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTg3LDkgKzE5NCw3IEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaGFzS2V5R2VuZXJhdG9yICYmICFrZXlQYXRoS2V5KSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKC0xKTsKLSAgICAgICAg
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBp
bmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGR1bW15S2V5LCB2YWx1ZSwga2V5UGF0aCk7
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsKKyAgICAgICAgICAgIGlm
ICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHZhbHVlLCBrZXlQYXRoKSkgewogICAg
ICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpAQCAtMjEzLDcgKzIxOCw3IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgQVNTRVJUKGluZGV4S2V5cy5zaXplKCkgPT0gaW5k
ZXhOYW1lcy5zaXplKCkpOwogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgc291cmNlLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAg
ICBtX2JhY2tlbmQtPnB1dFdpdGhJbmRleEtleXModmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFz
ZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFt
ZXMsIGluZGV4S2V5cywgZWMpOworICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyhzZXJp
YWxpemVkVmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFtZXMsIGluZGV4S2V5cywgZWMpOwogICAg
IGlmIChlYykgewogICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTMxMyw3ICszMTgsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50
KiBldmVudCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KQogICAgIHsKICAgICAgICAgQVNTRVJUKGV2ZW50
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCk7CiAgICAgICAgIEV2ZW50VGFy
Z2V0KiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CkBAIC0zMzYsNyArMzQxLDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIFJlZlB0cjxJREJBbnk+IHZhbHVlQW55ID0gY3Vyc29yLT52YWx1ZSgp
OwogCiAgICAgICAgICAgICBBU1NFUlQodmFsdWVBbnktPnR5cGUoKSA9PSBJREJBbnk6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZVR5cGUpOwotICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUgPSB2YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisgICAg
ICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2
YWx1ZUFueS0+c2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CisgICAgICAgICAgICBTY3JpcHRWYWx1
ZSB2YWx1ZShkZXNlcmlhbGl6ZUlEQlZhbHVlKGNvbnRleHQsIHNlcmlhbGl6ZWRWYWx1ZSkpOwog
CiAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGluZGV4S2V5czsKICAgICAg
ICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwg
JmluZGV4S2V5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaAppbmRleCBjMDUzMzJhNTE2NzYxNWQ4MzdiODRhNmYxNDAwMjEwOWJhNTAw
NDYwLi40ODc1NjNkMmE5ZDZkMWU2ZTUxMWU0ZWZhNTY5OTZkZjIzN2JiMjc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTY0
LDggKzY0LDggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5z
YWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbjsgfQogICAgIGJvb2wgYXV0b0lu
Y3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuYXV0b0luY3JlbWVudDsgfQogCi0g
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9Ci0gICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0
VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZh
bHVlLCAwLCBlYyk7ICB9CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9CiAgICAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRp
Y19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVu
Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMp
OyB9IAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0
aW9uTmV4dCgpLCBlYyk7IH0gCkBAIC03Nyw4ICs3Nyw4IEBAIHB1YmxpYzoKIAogICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGdl
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQ
YXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmLCBQYXNzUmVm
UHRyPElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZGVs
ZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNsZWFyKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlJik7CkBAIC05Nyw3ICs5Nyw3IEBA
IHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkFueT4gc291cmNlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYsIFBhc3NSZWZQdHI8SURCS2V5PiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0K
ICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4IDk5ZDg2ODQ2Yjgx
ZWE5MTA0MGFkMzgwNTBhNjQ0ODUwN2NmYmUwZDYuLjMyODg1YTgzYzU1MDJjZjM5ODJkNTdiNTI0
MzRkMmVkYmYwNzRlMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTM0LDkgKzM0LDkgQEAgbW9kdWxlIHN0b3JhZ2Ug
ewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGF1dG9JbmNyZW1lbnQ7CiAKLSAg
ICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgcHV0KGlu
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQor
ICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBwdXQo
aW4gYW55IHZhbHVlLCBpbiBbT3B0aW9uYWxdIElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgYWRkKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1
ZSwgaW4gW09wdGlvbmFsXSBJREJLZXkga2V5KQorICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBhZGQoaW4gYW55IHZhbHVlLCBpbiBbT3B0aW9uYWxd
IElEQktleSBrZXkpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
ICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEltcGxlbWVudGVkQXM9
ZGVsZXRlRnVuY3Rpb25dIElEQlJlcXVlc3QgZGVsZXRlKGluIElEQktleVJhbmdlPyBrZXlSYW5n
ZSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCBj
YTYyYjMzZGNiOTk1MGNiMzUxZTY4NWMxOTk2MDIwOTE1YTZlN2RlLi40MTc0YjcwNTI4MmJhNzNk
ZTUwMWQxMjY0NTY3MGI2NzUwNGIwOWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2lu
Y2x1ZGUgIlY4SURCS2V5LmgiCisjaW5jbHVkZSAiV29ybGRDb250ZXh0SGFuZGxlLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTg1
LDEwICs4Niw4IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFs
aWQoKTsKIH0KIAotbmFtZXNwYWNlIHsKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWJvb2wgZ2V0
VmFsdWVGcm9tKFQgaW5kZXhPck5hbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1ZSkK
K3N0YXRpYyBib29sIGdldFZhbHVlRnJvbShUIGluZGV4T3JOYW1lLCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4mIHY4VmFsdWUpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4
VmFsdWUtPlRvT2JqZWN0KCk7CiAgICAgaWYgKCFvYmplY3QtPkhhcyhpbmRleE9yTmFtZSkpCkBA
IC05OCw0MSArOTcsNjQgQEAgYm9vbCBnZXRWYWx1ZUZyb20oVCBpbmRleE9yTmFtZSwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVlKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9v
bCBzZXRWYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1l
LCBjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCitzdGF0aWMgYm9vbCBzZXRW
YWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4T2JqZWN0LCBUIGluZGV4T3JOYW1lLCBjb25z
dCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHY4VmFsdWUpCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IG9iamVjdCA9IHY4T2JqZWN0LT5Ub09iamVjdCgpOwogICAgIHJldHVybiBvYmplY3Qt
PlNldChpbmRleE9yTmFtZSwgdjhWYWx1ZSk7CiB9CiAKLWJvb2wgZ2V0KHY4OjpIYW5kbGU8djg6
OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQorc3RhdGljIGJv
b2wgZ2V0KHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBh
dGhFbGVtZW50LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJlc3VsdCkKIHsKICAgICBpZiAob2Jq
ZWN0LT5Jc1N0cmluZygpICYmIGtleVBhdGhFbGVtZW50ID09ICJsZW5ndGgiKSB7CiAgICAgICAg
IGludDMyX3QgbGVuZ3RoID0gdjg6OkhhbmRsZTx2ODo6U3RyaW5nPjo6Q2FzdChvYmplY3QpLT5M
ZW5ndGgoKTsKLSAgICAgICAgb2JqZWN0ID0gdjg6Ok51bWJlcjo6TmV3KGxlbmd0aCk7CisgICAg
ICAgIHJlc3VsdCA9IHY4OjpOdW1iZXI6Ok5ldyhsZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9Ci0gICAgcmV0dXJuIG9iamVjdC0+SXNPYmplY3QoKSAmJiBnZXRWYWx1ZUZyb20o
djhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCBvYmplY3QpOworICAgIHJldHVybiBvYmplY3QtPklz
T2JqZWN0KCkgJiYgZ2V0VmFsdWVGcm9tKHY4U3RyaW5nKGtleVBhdGhFbGVtZW50KSwgcmVzdWx0
KTsKIH0KIAotYm9vbCBzZXQodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QsIGNvbnN0IFN0
cmluZyYga2V5UGF0aEVsZW1lbnQsIGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgdjhWYWx1
ZSkKK3N0YXRpYyBib29sIGNhblNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCkKIHsKLSAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVj
dCgpICYmIHNldFZhbHVlKG9iamVjdCwgdjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCB2OFZhbHVl
KTsKKyAgICByZXR1cm4gb2JqZWN0LT5Jc09iamVjdCgpOwogfQogCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZ2V0TnRoVmFsdWVPbktleVBhdGgodjg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFs
dWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkK
K3N0YXRpYyBib29sIHNldCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoRWxlbWVudCwgY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiB2OFZhbHVl
KQogewotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsK
KyAgICByZXR1cm4gY2FuU2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpICYmIHNldFZhbHVlKG9i
amVjdCwgdjhTdHJpbmcoa2V5UGF0aEVsZW1lbnQpLCB2OFZhbHVlKTsKK30KIAorc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywg
c2l6ZV90IGluZGV4KQoreworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUo
cm9vdFZhbHVlKTsKICAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7Ci0gICAgICAgIGlmICgh
Z2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnRzW2ldKSkKKyAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGlmICghZ2V0
KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudHNbaV0sIGN1cnJlbnRWYWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICByZXR1cm4gY3VycmVudFZh
bHVlOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgo
djg6OkhhbmRsZTx2ODo6VmFsdWU+JiByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBr
ZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3N0YXRpYyBib29sIGNhbkluamVjdE50aFZh
bHVlT25LZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCBzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFy
b290VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKworICAgIEFTU0VSVChp
bmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZh
bHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQg
PSBrZXlQYXRoRWxlbWVudHNbaV07CisgICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQ
YXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjYW5TZXQocGFy
ZW50VmFsdWUsIGtleVBhdGhFbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtl
eVBhdGhFbGVtZW50cywgc2l6ZV90IGluZGV4KQogewogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKIApAQCAtMTQwLDcgKzE2Miw3IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4mIHJvb3RWYWx1ZSwKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsK
ICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7
CiAgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNb
aV07Ci0gICAgICAgIGlmICghZ2V0KGN1cnJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpKSB7Cisg
ICAgICAgIGlmICghZ2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVl
KSkgewogICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6T2Jq
ZWN0OjpOZXcoKTsKICAgICAgICAgICAgIGlmICghc2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxl
bWVudCwgb2JqZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKQEAg
LTE1MSw3ICsxNzMsNDEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuc3VyZU50aFZhbHVlT25L
ZXlQYXRoKHY4OjpIYW5kbGU8djg6OlZhbHVlPiYgcm9vdFZhbHVlLAogICAgIHJldHVybiBjdXJy
ZW50VmFsdWU7CiB9CiAKLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorc3RhdGljIFBhc3NSZWZQ
dHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNj
cmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsK
KyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7Cisg
ICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdjhWYWx1ZSh2YWx1ZS52OFZhbHVlKCkpOworICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2OEtleShnZXROdGhWYWx1ZU9uS2V5UGF0aCh2OFZhbHVlLCBrZXlQYXRo
RWxlbWVudHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkpKTsKKyAgICBpZiAodjhLZXkuSXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVl
KHY4S2V5KTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aCIpOworICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7CisKKyAgICB2ODo6
SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgaWYgKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6
OkFycmF5VHlwZSkgeworICAgICAgICBJREJLZXk6OktleUFycmF5IHJlc3VsdDsKKyAgICAgICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJheSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBS
ZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KHZhbHVlLCBhcnJheVtpXSk7CisgICAgICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShyZXN1bHQpOworICAgIH0KKworICAg
IEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICBy
ZXR1cm4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0
aC5zdHJpbmcoKSk7Cit9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5
RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7CkBAIC0xNzIsNiArMjI4
LDEzIEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6
ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTCiAgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZy
b21WYWx1ZSh2OEtleSk7CiB9CiAKKy8vIEZJWE1FOiBUaGUgb25seSByZWFzb24gdGhpcyBleGlz
dHMgaXMgYmVjYXVzZSB3ZSBuZWVkIGEgdjg6OkNvbnRleHQgYW5kIHNjb3BlIGluc2lkZSBhIHRp
bWVyLiBJcyB0aGVyZSBhIGJldHRlciAvIG1vcmUgZ2VuZXJhbCB3YXkgdG8gZG8gdGhpcz8KK1Nj
cmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0Q29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQor
eworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgY29udGV4dFNjb3BlKHRvVjhDb250ZXh0KHNjcmlwdENvbnRleHQsIFVzZUN1cnJlbnRXb3Js
ZCkpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZShwcnBWYWx1ZS0+ZGVzZXJpYWxpemUoKSk7Cit9
CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5k
S2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIGNvbnN0
IElEQktleVBhdGgmIGtleVBhdGgpCiB7CkBAIC0yMjMsNiArMjg2LDIyIEBAIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBh
c3NSZWZQdHI8SURCCiAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4
VmFsdWUpOwogfQogCitib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShjb25zdCBT
Y3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7Cisg
ICAgSURCX1RSQUNFKCJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKKyAgICBBU1NF
UlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9y
PFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9y
OworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMs
IGVycm9yKTsKKyAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsK
KworICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4VmFsdWUoc2NyaXB0VmFsdWUudjhWYWx1
ZSgpKTsKKyAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgodjhWYWx1ZSwga2V5
UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9JREJCaW5kaW5nVXRpbGl0aWVzLmgKaW5kZXggMzBlZWQ0MjFiNDViMDkwMzAxMWJkMjQ5YmJh
MGQ3NGMyM2JhMjc0Zi4uYjJiNjI5ZjU4MTlmOWExYTdlMDA1ZmY5MzA0NjllZWYyM2Q3YzQ3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGll
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMu
aApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNp
bmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KIApAQCAtMzgsOSArMzksMTUgQEAgY2xhc3MgSURCS2V5UGF0aDsKIGNsYXNzIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZy
b21WYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworCisvLyBGSVhNRTogcmVtb3ZlIHRoZSBT
ZXJpYWxpemVkVmFsdWUgdmVyc2lvbnMgd2hlbiB0aGVpciB1c2UgaXMgZmluYWxseSByZW1vdmVk
IGluIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQwOS4KIFBhc3NS
ZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IElEQktleVBhdGgmKTsKIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXpl
ZFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBjb25zdCBJREJLZXlQYXRoJik7CiAKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNjcmlwdFZhbHVlJiwgY29uc3QgSURC
S2V5UGF0aCYpOworYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29uc3QgU2Ny
aXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlE
QlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4pOworCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>